edna.alda
edna.core
edna.examples
edna.parse
(note? x)
Source
(
defn
note?
[
x
]
(
not=
:clojure.spec.alpha/invalid
(
parse-note
x
)
)
)
ezpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHRydWUsIDpkeW5hZG9jLmNvbW1vbi90eXBlIDpjbGpzLCA6ZHluYWRvYy5jb21tb24vbnNlcyAoezp2YXItc3ltcyBbZ2V0LWluc3RydW1lbnRzXSwgOnR5cGUgOmNsaiwgOnN5bSBlZG5hLmFsZGF9IHs6dmFyLXN5bXMgW2VkbmEtPmRhdGEtdXJpIGV4cG9ydCEgZWRuYS0+YWxkYSBzdG9wISBwbGF5ISBlZG5hLT5hbGRhKl0sIDp0eXBlIDpjbGosIDpzeW0gZWRuYS5jb3JlfSB7OnZhci1zeW1zIFthZXJpdGhzLXRoZW1lIGR1ZWxpbmctYmFuam9zIGludHJvLTEtc2luZ2xlLW5vdGVzIGludHJvLTItYXR0cmlidXRlcyBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQgaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kIGludHJvLTUtY2hvcmRdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLmV4YW1wbGVzfSB7OnZhci1zeW1zIFthY2NpZGVudGFscyBhY2NpZGVudGFsLT5rZXl3b3JkIG5vdGU/IGRpZ2l0cyBpbnN0cnVtZW50cyBwYXJzZSBub3RlcyBvY3RhdmUtb3BlcmF0b3JzIHBhcnNlLW5vdGVdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLnBhcnNlfSksIDpkeW5hZG9jLmNvbW1vbi92YXJzIFt7OnN5bSBub3RlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBub3RlPyBbeF0gKG5vdD0gOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkIChwYXJzZS1ub3RlIHgpKSlcclxuIn1dLCA6ZHluYWRvYy5jb21tb24vbnMtbWV0YSBuaWwsIDpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gZWRuYS5wYXJzZSwgOmR5bmFkb2MuY29tbW9uL3JlbC1wYXRoICIuLi8uLi8iLCA6ZHluYWRvYy5jb21tb24vaGlkZS1iYWRnZT8gdHJ1ZSwgOmR5bmFkb2MuY29tbW9uL2NsanMtbnNlcy1hbmQtdmFycyB7ZXZhbC1zb3VwLmNvcmUgKHs6c3ltIGNvZGUtPnJlc3VsdHMsIDptZXRhIHs6ZG9jICJFdmFsdWF0ZXMgZWFjaCBmb3JtLCBwcm92aWRpbmcgdGhlIHJlc3VsdHMgaW4gYSBjYWxsYmFjay5cbiAgSWYgYW55IG9mIHRoZSBmb3JtcyBhcmUgc3RyaW5ncywgaXQgd2lsbCByZWFkIHRoZW0gZmlyc3QuIiwgOmFyZ2xpc3RzIFtbZm9ybXMgY2JdIFtmb3JtcyBjYiB7OmtleXMgWypjdXJyZW50LW5zICpzdGF0ZSBjdXN0b20tbG9hZCB0aW1lb3V0IGRpc2FibGUtdGltZW91dD9dLCA6b3IgeypjdXJyZW50LW5zIChhdG9tIChxdW90ZSBjbGpzLnVzZXIpKSwgKnN0YXRlICpjbGpzLXN0YXRlLCBjdXN0b20tbG9hZCBjdXN0b20tbG9hZCEsIHRpbWVvdXQgNDAwMCwgZGlzYWJsZS10aW1lb3V0PyBmYWxzZX0sIDphcyBvcHRzfV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvZGUtPnJlc3VsdHNcclxuIFwiRXZhbHVhdGVzIGVhY2ggZm9ybSwgcHJvdmlkaW5nIHRoZSByZXN1bHRzIGluIGEgY2FsbGJhY2suXFxuICBJZiBhbnkgb2YgdGhlIGZvcm1zIGFyZSBzdHJpbmdzLCBpdCB3aWxsIHJlYWQgdGhlbSBmaXJzdC5cIlxyXG4gKFtmb3JtcyBjYl0gKGNvZGUtPnJlc3VsdHMgZm9ybXMgY2Ige30pKVxyXG4gKFtmb3Jtc1xyXG4gICBjYlxyXG4gICB7OmtleXMgWypjdXJyZW50LW5zICpzdGF0ZSBjdXN0b20tbG9hZCB0aW1lb3V0IGRpc2FibGUtdGltZW91dD9dLFxyXG4gICAgOm9yXHJcbiAgICB7KmN1cnJlbnQtbnMgKGF0b20gJ2NsanMudXNlciksXHJcbiAgICAgKnN0YXRlICpjbGpzLXN0YXRlLFxyXG4gICAgIGN1c3RvbS1sb2FkIGN1c3RvbS1sb2FkISxcclxuICAgICB0aW1lb3V0IDQwMDAsXHJcbiAgICAgZGlzYWJsZS10aW1lb3V0PyBmYWxzZX0sXHJcbiAgICA6YXMgb3B0c31dXHJcbiAgKGxldFxyXG4gICBbZm9ybXNcclxuICAgIChtYXB2XHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ4OTk2I11cclxuICAgICAgKGlmXHJcbiAgICAgICAoc3RyaW5nPyBwMV9fNDg5OTYjKVxyXG4gICAgICAgKHN0ci0+Zm9ybSBAKmN1cnJlbnQtbnMgcDFfXzQ4OTk2IylcclxuICAgICAgIHAxX180ODk5NiMpKVxyXG4gICAgIGZvcm1zKVxyXG4gICAgaW5pdC1mb3Jtc1xyXG4gICAgKHZlY1xyXG4gICAgIChjb25jYXRcclxuICAgICAgWycobnMgY2xqcy51c2VyKV1cclxuICAgICAgKHdoZW4tbm90XHJcbiAgICAgICBkaXNhYmxlLXRpbWVvdXQ/XHJcbiAgICAgICBbJyhkZWYgcHMtbGFzdC10aW1lIChhdG9tIDApKVxyXG4gICAgICAgICcoZGVmblxyXG4gICAgICAgICAgcHMtcmVzZXQtdGltZW91dCFcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgICAocmVzZXQhIHBzLWxhc3QtdGltZSAoLmdldFRpbWUgKGpzL0RhdGUuKSkpKVxyXG4gICAgICAgICcoZGVmblxyXG4gICAgICAgICAgcHMtY2hlY2stZm9yLXRpbWVvdXQhXHJcbiAgICAgICAgICBbdGltZW91dF1cclxuICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgKD4gKC0gKC5nZXRUaW1lIChqcy9EYXRlLikpIEBwcy1sYXN0LXRpbWUpIHRpbWVvdXQpXHJcbiAgICAgICAgICAgKHRocm93IChqcy9FcnJvci4gXCJFeGVjdXRpb24gdGltZWQgb3V0LlwiKSkpKV0pXHJcbiAgICAgIFsnKHNldCEgKnByaW50LWVyci1mbiogKGZuIFtfXSkpIChsaXN0ICducyBAKmN1cnJlbnQtbnMpXSkpXHJcbiAgICB0aW1lb3V0LWNiXHJcbiAgICAoZm5cclxuICAgICBbcmVzdWx0c11cclxuICAgICAoZXZhbC1mb3Jtc1xyXG4gICAgICAoYWRkLXRpbWVvdXRzLWlmLW5lY2Vzc2FyeSB0aW1lb3V0IGZvcm1zIHJlc3VsdHMpXHJcbiAgICAgIGNiXHJcbiAgICAgICpzdGF0ZVxyXG4gICAgICAqY3VycmVudC1uc1xyXG4gICAgICBjdXN0b20tbG9hZCkpXHJcbiAgICBpbml0LWNiXHJcbiAgICAoZm5cclxuICAgICBbcmVzdWx0c11cclxuICAgICAoZXZhbC1mb3Jtc1xyXG4gICAgICAoaWYgZGlzYWJsZS10aW1lb3V0PyBmb3JtcyAobWFwIHdyYXAtbWFjcm9leHBhbmQgZm9ybXMpKVxyXG4gICAgICAoaWYgZGlzYWJsZS10aW1lb3V0PyBjYiB0aW1lb3V0LWNiKVxyXG4gICAgICAqc3RhdGVcclxuICAgICAgKmN1cnJlbnQtbnNcclxuICAgICAgY3VzdG9tLWxvYWQpKV1cclxuICAgKGV2YWwtZm9ybXMgaW5pdC1mb3JtcyBpbml0LWNiICpzdGF0ZSAqY3VycmVudC1ucyBjdXN0b20tbG9hZCkpKSlcclxuIn0pLCBjbGpzLmNvbXBpbGVyICh7OnN5bSBwcm90b2NvbC1wcmVmaXgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb3RvY29sLXByZWZpeFxyXG4gW3BzeW1dXHJcbiAoc3ltYm9sXHJcbiAgKHN0clxyXG4gICAoLT5cclxuICAgIChzdHIgcHN5bSlcclxuICAgICgucmVwbGFjZSAjPyg6Y2xqIFxcLiA6Y2xqcyAoanMvUmVnRXhwLiBcIlxcXFwuXCIgXCJnXCIpKSBcXCQpXHJcbiAgICAoLnJlcGxhY2UgXFwvIFxcJCkpXHJcbiAgIFwiJFwiKSkpXHJcbiJ9IHs6c3ltIGVtaXQtYXJndW1lbnRzLXRvLWFycmF5LCA6bWV0YSB7OmRvYyAiRW1pdCBjb2RlIHRoYXQgY29waWVzIGZ1bmN0aW9uIGFyZ3VtZW50cyBpbnRvIGFuIGFycmF5IHN0YXJ0aW5nIGF0IGFuIGluZGV4LlxuICBSZXR1cm5zIG5hbWUgb2YgdmFyIGhvbGRpbmcgdGhlIGFycmF5LiIsIDphcmdsaXN0cyAoW3N0YXJ0c2xpY2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWFyZ3VtZW50cy10by1hcnJheVxyXG4gXCJFbWl0IGNvZGUgdGhhdCBjb3BpZXMgZnVuY3Rpb24gYXJndW1lbnRzIGludG8gYW4gYXJyYXkgc3RhcnRpbmcgYXQgYW4gaW5kZXguXFxuICBSZXR1cm5zIG5hbWUgb2YgdmFyIGhvbGRpbmcgdGhlIGFycmF5LlwiXHJcbiBbc3RhcnRzbGljZV1cclxuIChhc3NlcnQgKGFuZCAoPj0gc3RhcnRzbGljZSAwKSAoaW50ZWdlcj8gc3RhcnRzbGljZSkpKVxyXG4gKGxldFxyXG4gIFttbmFtZSAobXVuZ2UgKGdlbnN5bSkpIGkgKHN0ciBtbmFtZSBcIl9faVwiKSBhIChzdHIgbW5hbWUgXCJfX2FcIildXHJcbiAgKGVtaXRsblxyXG4gICBcInZhciBcIlxyXG4gICBpXHJcbiAgIFwiID0gMCwgXCJcclxuICAgYVxyXG4gICBcIiA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gIFwiXHJcbiAgIHN0YXJ0c2xpY2VcclxuICAgXCIpO1wiKVxyXG4gIChlbWl0bG5cclxuICAgXCJ3aGlsZSAoXCJcclxuICAgaVxyXG4gICBcIiA8IFwiXHJcbiAgIGFcclxuICAgXCIubGVuZ3RoKSB7XCJcclxuICAgYVxyXG4gICBcIltcIlxyXG4gICBpXHJcbiAgIFwiXSA9IGFyZ3VtZW50c1tcIlxyXG4gICBpXHJcbiAgIFwiICsgXCJcclxuICAgc3RhcnRzbGljZVxyXG4gICBcIl07ICsrXCJcclxuICAgaVxyXG4gICBcIjt9XCIpXHJcbiAgYSkpXHJcbiJ9IHs6c3ltIGVtaXQtanMtb2JqZWN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zIGVtaXQtanMtb2JqZWN0LXZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtanMtb2JqZWN0XHJcbiBbaXRlbXMgZW1pdC1qcy1vYmplY3QtdmFsXVxyXG4gKGVtaXRzIFwiKHtcIilcclxuICh3aGVuLWxldFxyXG4gIFtpdGVtcyAoc2VxIGl0ZW1zKV1cclxuICAobGV0XHJcbiAgIFtbW2sgdl0gJiByXSBpdGVtc11cclxuICAgKGVtaXRzIFwiXFxcIlwiIChuYW1lIGspIFwiXFxcIjogXCIgKGVtaXQtanMtb2JqZWN0LXZhbCB2KSlcclxuICAgKGRvc2VxXHJcbiAgICBbW2sgdl0gcl1cclxuICAgIChlbWl0cyBcIiwgXFxcIlwiIChuYW1lIGspIFwiXFxcIjogXCIgKGVtaXQtanMtb2JqZWN0LXZhbCB2KSkpKSlcclxuIChlbWl0cyBcIn0pXCIpKVxyXG4ifSB7OnN5bSBkaXN0aW5jdC1rZXlzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXlzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGlzdGluY3Qta2V5cz9cclxuIFtrZXlzXVxyXG4gKGxldFxyXG4gIFtrZXlzIChtYXAgYW5hL3Vud3JhcC1xdW90ZSBrZXlzKV1cclxuICAoYW5kXHJcbiAgIChldmVyeT8gKGZuKiBbcDFfXzQ4NjUwI10gKD0gKDpvcCBwMV9fNDg2NTAjKSA6Y29uc3QpKSBrZXlzKVxyXG4gICAoPSAoY291bnQgKGludG8gI3t9IGtleXMpKSAoY291bnQga2V5cykpKSkpXHJcbiJ9IHs6c3ltIG11bmdlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3NdIFtzIHJlc2VydmVkXV19LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2VcclxuIChbc10gKG11bmdlIHMganMtcmVzZXJ2ZWQpKVxyXG4gKFtzIHJlc2VydmVkXVxyXG4gIChpZlxyXG4gICAjPyg6Y2xqIChtYXA/IHMpIDpjbGpzIChhbmEvY2xqcy1tYXA/IHMpKVxyXG4gICAobGV0XHJcbiAgICBbbmFtZS12YXJcclxuICAgICBzXHJcbiAgICAgbmFtZVxyXG4gICAgICg6bmFtZSBuYW1lLXZhcilcclxuICAgICBmaWVsZFxyXG4gICAgICg6ZmllbGQgbmFtZS12YXIpXHJcbiAgICAgaW5mb1xyXG4gICAgICg6aW5mbyBuYW1lLXZhcildXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKG5pbD8gKDpmbi1zZWxmLW5hbWUgaW5mbykpXHJcbiAgICAgKGZuLXNlbGYtbmFtZSBzKVxyXG4gICAgIChsZXRcclxuICAgICAgW2RlcHRoXHJcbiAgICAgICAoc2hhZG93LWRlcHRoIHMpXHJcbiAgICAgICBjb2RlXHJcbiAgICAgICAoaGFzaC1zY29wZSBzKVxyXG4gICAgICAgcmVuYW1lZFxyXG4gICAgICAgKGdldCAqbGV4aWNhbC1yZW5hbWVzKiBjb2RlKVxyXG4gICAgICAgbmFtZVxyXG4gICAgICAgKGNvbmRcclxuICAgICAgICAodHJ1ZT8gZmllbGQpXHJcbiAgICAgICAgKHN0ciBcInNlbGZfXy5cIiBuYW1lKVxyXG4gICAgICAgIChub3QgKG5pbD8gcmVuYW1lZCkpXHJcbiAgICAgICAgcmVuYW1lZFxyXG4gICAgICAgIDplbHNlXHJcbiAgICAgICAgbmFtZSlcclxuICAgICAgIG11bmdlZC1uYW1lXHJcbiAgICAgICAobXVuZ2UgbmFtZSByZXNlcnZlZCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG9yICh0cnVlPyBmaWVsZCkgKHplcm8/IGRlcHRoKSlcclxuICAgICAgIG11bmdlZC1uYW1lXHJcbiAgICAgICAoc3ltYm9sIChzdHIgbXVuZ2VkLW5hbWUgXCJfXyRcIiBkZXB0aCkpKSkpKVxyXG4gICAobGV0XHJcbiAgICBbc3NcclxuICAgICAoc3RyaW5nL3JlcGxhY2UgKHN0ciBzKSBcIi4uXCIgXCJfRE9UX19ET1RfXCIpXHJcbiAgICAgc3NcclxuICAgICAoc3RyaW5nL3JlcGxhY2VcclxuICAgICAgc3NcclxuICAgICAgIz8oOmNsaiAjXCJcXC8oLilcIiA6Y2xqcyAoanMvUmVnRXhwLiBcIlxcXFwvKC4pXCIpKVxyXG4gICAgICBcIi4kMVwiKVxyXG4gICAgIHJmXHJcbiAgICAgKG11bmdlLXJlc2VydmVkIHJlc2VydmVkKVxyXG4gICAgIHNzXHJcbiAgICAgKG1hcCByZiAoc3RyaW5nL3NwbGl0IHNzICNcIlxcLlwiKSlcclxuICAgICBzc1xyXG4gICAgIChzdHJpbmcvam9pbiBcIi5cIiBzcylcclxuICAgICBtc1xyXG4gICAgICM/KDpjbGogKGNsb2p1cmUubGFuZy5Db21waWxlci9tdW5nZSBzcykgOmNsanMgKCh2YXIgY2xqcy5jb3JlL211bmdlLXN0cikgc3MpKV1cclxuICAgIChpZiAoc3ltYm9sPyBzKSAoc3ltYm9sIG1zKSBtcykpKSkpXHJcbiJ9IHs6c3ltIGdldC1kZWZpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbW5hbWUganNkb2NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZGVmaW5lXHJcbiBbbW5hbWUganNkb2NdXHJcbiAobGV0XHJcbiAgW29wdHMgKGdldCBAZW52Lypjb21waWxlciogOm9wdGlvbnMpXVxyXG4gIChhbmRcclxuICAgKHNvbWVcclxuICAgICM/KDpjbGogKGZuKiBbcDFfXzQ4NjU1I10gKC5zdGFydHNXaXRoIHAxX180ODY1NSMgXCJAZGVmaW5lXCIpKSA6Y2xqcyAoZm4qIFtwMV9fNDg2NTYjXSAoZ3N0cmluZy9zdGFydHNXaXRoIHAxX180ODY1NiMgXCJAZGVmaW5lXCIpKSlcclxuICAgIGpzZG9jKVxyXG4gICBvcHRzXHJcbiAgICg9ICg6b3B0aW1pemF0aW9ucyBvcHRzKSA6bm9uZSlcclxuICAgKGxldFxyXG4gICAgW2RlZmluZSAoZ2V0LWluIG9wdHMgWzpjbG9zdXJlLWRlZmluZXMgKHN0ciBtbmFtZSldKV1cclxuICAgICh3aGVuICh2YWxpZC1kZWZpbmUtdmFsdWU/IGRlZmluZSkgKHByLXN0ciBkZWZpbmUpKSkpKSlcclxuIn0gezpzeW0gdmFsaWQtZGVmaW5lLXZhbHVlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFsaWQtZGVmaW5lLXZhbHVlP1xyXG4gW3hdXHJcbiAob3IgKHN0cmluZz8geCkgKHRydWU/IHgpIChmYWxzZT8geCkgKG51bWJlcj8geCkpKVxyXG4ifSB7OnN5bSBlbWl0LXNldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtcyBjb21tYS1zZXAgZGlzdGluY3QtY29uc3RhbnRzP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtc2V0XHJcbiBbaXRlbXMgY29tbWEtc2VwIGRpc3RpbmN0LWNvbnN0YW50cz9dXHJcbiAoY29uZFxyXG4gIChlbXB0eT8gaXRlbXMpXHJcbiAgKGVtaXRzIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRIYXNoU2V0LkVNUFRZXCIpXHJcbiAgKGRpc3RpbmN0LWNvbnN0YW50cz8gaXRlbXMpXHJcbiAgKGVtaXRzXHJcbiAgIFwibmV3IGNsanMuY29yZS5QZXJzaXN0ZW50SGFzaFNldChudWxsLCBuZXcgY2xqcy5jb3JlLlBlcnNpc3RlbnRBcnJheU1hcChudWxsLCBcIlxyXG4gICAoY291bnQgaXRlbXMpXHJcbiAgIFwiLCBbXCJcclxuICAgKGNvbW1hLXNlcCAoaW50ZXJsZWF2ZSBpdGVtcyAocmVwZWF0IFwibnVsbFwiKSkpXHJcbiAgIFwiXSwgbnVsbCksIG51bGwpXCIpXHJcbiAgOmVsc2VcclxuICAoZW1pdHNcclxuICAgXCJjbGpzLmNvcmUuUGVyc2lzdGVudEhhc2hTZXQuY3JlYXRlQXNJZkJ5QXNzb2MoW1wiXHJcbiAgIChjb21tYS1zZXAgaXRlbXMpXHJcbiAgIFwiXSlcIikpKVxyXG4ifSB7OnN5bSBlbWl0cy1rZXl3b3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2t3XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdHMta2V5d29yZFxyXG4gW2t3XVxyXG4gKGxldFxyXG4gIFtucyAobmFtZXNwYWNlIGt3KSBuYW1lIChuYW1lIGt3KV1cclxuICAoZW1pdHMgXCJuZXcgY2xqcy5jb3JlLktleXdvcmQoXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgbnMpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IG5hbWUpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IChpZiBucyAoc3RyIG5zIFwiL1wiIG5hbWUpIG5hbWUpKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCAoaGFzaCBrdykpXHJcbiAgKGVtaXRzIFwiKVwiKSkpXHJcbiJ9IHs6c3ltICpsZXhpY2FsLXJlbmFtZXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbGV4aWNhbC1yZW5hbWVzKiB7fSlcclxuIn0gezpzeW0gZW1pdC1sZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbe2V4cHIgOmJvZHksIDprZXlzIFtiaW5kaW5ncyBlbnZdfSBpcy1sb29wXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1sZXRcclxuIFt7ZXhwciA6Ym9keSwgOmtleXMgW2JpbmRpbmdzIGVudl19IGlzLWxvb3BdXHJcbiAobGV0XHJcbiAgW2NvbnRleHQgKDpjb250ZXh0IGVudildXHJcbiAgKHdoZW4gKD0gOmV4cHIgY29udGV4dCkgKGVtaXRzIFwiKGZ1bmN0aW9uICgpe1wiKSlcclxuICAoYmluZGluZ1xyXG4gICBbKmxleGljYWwtcmVuYW1lcypcclxuICAgIChpbnRvXHJcbiAgICAgKmxleGljYWwtcmVuYW1lcypcclxuICAgICAod2hlblxyXG4gICAgICAoPSA6c3RhdGVtZW50IGNvbnRleHQpXHJcbiAgICAgIChtYXBcclxuICAgICAgIChmblxyXG4gICAgICAgIFtiaW5kaW5nXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW25hbWUgKDpuYW1lIGJpbmRpbmcpXVxyXG4gICAgICAgICAodmVjdG9yIChoYXNoLXNjb3BlIGJpbmRpbmcpIChnZW5zeW0gKHN0ciBuYW1lIFwiLVwiKSkpKSlcclxuICAgICAgIGJpbmRpbmdzKSkpXVxyXG4gICAoZG9zZXFcclxuICAgIFt7OmtleXMgW2luaXRdLCA6YXMgYmluZGluZ30gYmluZGluZ3NdXHJcbiAgICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgICAoZW1pdCBiaW5kaW5nKVxyXG4gICAgKGVtaXRsbiBcIiA9IFwiIGluaXQgXCI7XCIpKVxyXG4gICAod2hlbiBpcy1sb29wIChlbWl0bG4gXCJ3aGlsZSh0cnVlKXtcIikpXHJcbiAgIChlbWl0cyBleHByKVxyXG4gICAod2hlbiBpcy1sb29wIChlbWl0bG4gXCJicmVhaztcIikgKGVtaXRsbiBcIn1cIikpKVxyXG4gICh3aGVuICg9IDpleHByIGNvbnRleHQpIChlbWl0cyBcIn0pKClcIikpKSlcclxuIn0gezpzeW0gYWxsLWRpc3RpbmN0PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4c10pfSwgOnNvdXJjZSAiKGRlZm4gYWxsLWRpc3RpbmN0PyBbeHNdIChhcHBseSBkaXN0aW5jdD8geHMpKVxyXG4ifSB7OnN5bSBjbGpzLXJlc2VydmVkLWZpbGUtbmFtZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGNsanMtcmVzZXJ2ZWQtZmlsZS1uYW1lcyAje1wiZGVwcy5jbGpzXCJ9KVxyXG4ifSB7OnN5bSBiYXNlLXR5cGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYmFzZS10eXBlc1xyXG4gI3tcImJvb2xlYW5cIiBcIm9iamVjdFwiIFwiKlwiIFwic3RyaW5nXCIgXCJPYmplY3RcIiBcIk51bWJlclwiIFwibnVsbFwiIFwiRGF0ZVwiXHJcbiAgIFwibnVtYmVyXCIgXCJTdHJpbmdcIiBcIlJlZ0V4cFwiIFwiLi4uKlwiIFwiQXJyYXlcIiBcImFycmF5XCIgXCJCb29sZWFuXCJ9KVxyXG4ifSB7OnN5bSByZXNvbHZlLXR5cGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXR5cGVcclxuIFtlbnYgdF1cclxuIChjb25kXHJcbiAgKGdldCBiYXNlLXR5cGVzIHQpXHJcbiAgdFxyXG4gIChnZXQgbWFwcGVkLXR5cGVzIHQpXHJcbiAgKGdldCBtYXBwZWQtdHlwZXMgdClcclxuICAjPyg6Y2xqICguc3RhcnRzV2l0aCB0IFwiIVwiKSA6Y2xqcyAoZ3N0cmluZy9zdGFydHNXaXRoIHQgXCIhXCIpKVxyXG4gIChzdHIgXCIhXCIgKHJlc29sdmUtdHlwZSBlbnYgKHN1YnMgdCAxKSkpXHJcbiAgIz8oOmNsaiAoLnN0YXJ0c1dpdGggdCBcIntcIikgOmNsanMgKGdzdHJpbmcvc3RhcnRzV2l0aCB0IFwie1wiKSlcclxuICB0XHJcbiAgIz8oOmNsaiAoLnN0YXJ0c1dpdGggdCBcImZ1bmN0aW9uXCIpIDpjbGpzIChnc3RyaW5nL3N0YXJ0c1dpdGggdCBcImZ1bmN0aW9uXCIpKVxyXG4gIChsZXRcclxuICAgW2lkeFxyXG4gICAgKC5sYXN0SW5kZXhPZiB0IFwiOlwiKVxyXG4gICAgW2ZzdHIgcnN0cl1cclxuICAgIChpZi1ub3RcclxuICAgICAoPT0gLTEgaWR4KVxyXG4gICAgIFsoc3VicyB0IDAgaWR4KSAoc3VicyB0IChpbmMgaWR4KSAoY291bnQgdCkpXVxyXG4gICAgIFt0IG5pbF0pXHJcbiAgICByZXQtdFxyXG4gICAgKHdoZW4gcnN0ciAocmVzb2x2ZS10eXBlIGVudiByc3RyKSlcclxuICAgIGF4c3RyXHJcbiAgICAoc3VicyBmc3RyIDkgKGRlYyAoY291bnQgZnN0cikpKVxyXG4gICAgYXJncy10c1xyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKHN0cmluZy9ibGFuaz8gYXhzdHIpXHJcbiAgICAgKG1hcFxyXG4gICAgICAoY29tcFxyXG4gICAgICAgKGZuKiBbcDFfXzQ4NjUyI10gKHJlc29sdmUtdHlwZSBlbnYgcDFfXzQ4NjUyIykpXHJcbiAgICAgICBzdHJpbmcvdHJpbSlcclxuICAgICAgKHN0cmluZy9zcGxpdCBheHN0ciAjXCIsXCIpKSldXHJcbiAgIChjb25kLT5cclxuICAgIChzdHIgXCJmdW5jdGlvbihcIiAoc3RyaW5nL2pvaW4gXCIsXCIgYXJncy10cykgXCIpXCIpXHJcbiAgICByZXQtdFxyXG4gICAgKHN0ciBcIjpcIiByZXQtdCkpKVxyXG4gICM/KDpjbGogKC5lbmRzV2l0aCB0IFwiPVwiKSA6Y2xqcyAoZ3N0cmluZy9lbmRzV2l0aCB0IFwiPVwiKSlcclxuICAoc3RyIChyZXNvbHZlLXR5cGUgZW52IChzdWJzIHQgMCAoZGVjIChjb3VudCB0KSkpKSBcIj1cIilcclxuICA6ZWxzZVxyXG4gIChtdW5nZSAoc3RyICg6bmFtZSAoYW5hL3Jlc29sdmUtdmFyIGVudiAoc3ltYm9sIHQpKSkpKSkpXHJcbiJ9IHs6c3ltICpzb3VyY2UtbWFwLWRhdGEtZ2VuLWNvbCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpzb3VyY2UtbWFwLWRhdGEtZ2VuLWNvbCogbmlsKVxyXG4ifSB7OnN5bSBlbWl0LXdpdGgtbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHByIG1ldGFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXdpdGgtbWV0YVxyXG4gW2V4cHIgbWV0YV1cclxuIChlbWl0cyBcImNsanMuY29yZS53aXRoX21ldGEoXCIgZXhwciBcIixcIiBtZXRhIFwiKVwiKSlcclxuIn0gezpzeW0gZW1pdC12YXJpYWRpYy1mbi1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbe2V4cHIgOmJvZHksIG1heC1maXhlZC1hcml0eSA6Zml4ZWQtYXJpdHksIHZhcmlhZGljIDp2YXJpYWRpYz8sIDprZXlzIFt0eXBlIG5hbWUgcGFyYW1zIGVudiByZWN1cnNdLCA6YXMgZn1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXZhcmlhZGljLWZuLW1ldGhvZFxyXG4gW3tleHByIDpib2R5LFxyXG4gICBtYXgtZml4ZWQtYXJpdHkgOmZpeGVkLWFyaXR5LFxyXG4gICB2YXJpYWRpYyA6dmFyaWFkaWM/LFxyXG4gICA6a2V5cyBbdHlwZSBuYW1lIHBhcmFtcyBlbnYgcmVjdXJzXSxcclxuICAgOmFzIGZ9XVxyXG4gKGVtaXQtd3JhcFxyXG4gIGVudlxyXG4gIChsZXRcclxuICAgW25hbWVcclxuICAgIChvciBuYW1lIChnZW5zeW0pKVxyXG4gICAgbW5hbWVcclxuICAgIChtdW5nZSBuYW1lKVxyXG4gICAgZGVsZWdhdGUtbmFtZVxyXG4gICAgKHN0ciBtbmFtZSBcIl9fZGVsZWdhdGVcIildXHJcbiAgIChlbWl0bG4gXCIoZnVuY3Rpb24oKSB7IFwiKVxyXG4gICAoZW1pdHMgXCJ2YXIgXCIgZGVsZWdhdGUtbmFtZSBcIiA9IGZ1bmN0aW9uIChcIilcclxuICAgKGRvc2VxXHJcbiAgICBbcGFyYW0gcGFyYW1zXVxyXG4gICAgKGVtaXQgcGFyYW0pXHJcbiAgICAod2hlbi1ub3QgKD0gcGFyYW0gKGxhc3QgcGFyYW1zKSkgKGVtaXRzIFwiLFwiKSkpXHJcbiAgIChlbWl0bG4gXCIpe1wiKVxyXG4gICAod2hlbiB0eXBlIChlbWl0bG4gXCJ2YXIgc2VsZl9fID0gdGhpcztcIikpXHJcbiAgICh3aGVuIHJlY3VycyAoZW1pdGxuIFwid2hpbGUodHJ1ZSl7XCIpKVxyXG4gICAoZW1pdHMgZXhwcilcclxuICAgKHdoZW4gcmVjdXJzIChlbWl0bG4gXCJicmVhaztcIikgKGVtaXRsbiBcIn1cIikpXHJcbiAgIChlbWl0bG4gXCJ9O1wiKVxyXG4gICAoZW1pdGxuXHJcbiAgICBcInZhciBcIlxyXG4gICAgbW5hbWVcclxuICAgIFwiID0gZnVuY3Rpb24gKFwiXHJcbiAgICAoY29tbWEtc2VwXHJcbiAgICAgKGlmIHZhcmlhZGljIChjb25jYXQgKGJ1dGxhc3QgcGFyYW1zKSBbJ3Zhcl9hcmdzXSkgcGFyYW1zKSlcclxuICAgIFwiKXtcIilcclxuICAgKHdoZW4gdHlwZSAoZW1pdGxuIFwidmFyIHNlbGZfXyA9IHRoaXM7XCIpKVxyXG4gICAod2hlblxyXG4gICAgdmFyaWFkaWNcclxuICAgIChlbWl0cyBcInZhciBcIilcclxuICAgIChlbWl0IChsYXN0IHBhcmFtcykpXHJcbiAgICAoZW1pdGxuIFwiID0gbnVsbDtcIilcclxuICAgIChlbWl0bG4gXCJpZiAoYXJndW1lbnRzLmxlbmd0aCA+IFwiIChkZWMgKGNvdW50IHBhcmFtcykpIFwiKSB7XCIpXHJcbiAgICAobGV0XHJcbiAgICAgW2EgKGVtaXQtYXJndW1lbnRzLXRvLWFycmF5IChkZWMgKGNvdW50IHBhcmFtcykpKV1cclxuICAgICAoZW1pdGxuXHJcbiAgICAgIFwiICBcIlxyXG4gICAgICAobGFzdCBwYXJhbXMpXHJcbiAgICAgIFwiID0gbmV3IGNsanMuY29yZS5JbmRleGVkU2VxKFwiXHJcbiAgICAgIGFcclxuICAgICAgXCIsMCxudWxsKTtcIikpXHJcbiAgICAoZW1pdGxuIFwifSBcIikpXHJcbiAgIChlbWl0cyBcInJldHVybiBcIiBkZWxlZ2F0ZS1uYW1lIFwiLmNhbGwodGhpcyxcIilcclxuICAgKGRvc2VxXHJcbiAgICBbcGFyYW0gcGFyYW1zXVxyXG4gICAgKGVtaXQgcGFyYW0pXHJcbiAgICAod2hlbi1ub3QgKD0gcGFyYW0gKGxhc3QgcGFyYW1zKSkgKGVtaXRzIFwiLFwiKSkpXHJcbiAgIChlbWl0cyBcIik7XCIpXHJcbiAgIChlbWl0bG4gXCJ9O1wiKVxyXG4gICAoZW1pdGxuIG1uYW1lIFwiLmNsanMkbGFuZyRtYXhGaXhlZEFyaXR5ID0gXCIgbWF4LWZpeGVkLWFyaXR5IFwiO1wiKVxyXG4gICAoZW1pdHMgbW5hbWUgXCIuY2xqcyRsYW5nJGFwcGx5VG8gPSBcIilcclxuICAgKGVtaXQtYXBwbHktdG8gKGFzc29jIGYgOm5hbWUgbmFtZSkpXHJcbiAgIChlbWl0bG4gXCI7XCIpXHJcbiAgIChlbWl0bG5cclxuICAgIG1uYW1lXHJcbiAgICBcIi5jbGpzJGNvcmUkSUZuJF9pbnZva2UkYXJpdHkkdmFyaWFkaWMgPSBcIlxyXG4gICAgZGVsZWdhdGUtbmFtZVxyXG4gICAgXCI7XCIpXHJcbiAgIChlbWl0bG4gXCJyZXR1cm4gXCIgbW5hbWUgXCI7XCIpXHJcbiAgIChlbWl0bG4gXCJ9KSgpXCIpKSkpXHJcbiJ9IHs6c3ltIGpzLXJlc2VydmVkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBqcy1yZXNlcnZlZCBhbmEvanMtcmVzZXJ2ZWQpXHJcbiJ9IHs6c3ltICpyZWNvbXBpbGVkKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnJlY29tcGlsZWQqIG5pbClcclxuIn0gezpzeW0gZW1pdHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbXSBbYV0gW2EgYl0gW2EgYiBjXSBbYSBiIGMgZF0gW2EgYiBjIGQgZV0gW2EgYiBjIGQgZSAmIHhzXV19LCA6c291cmNlICIoZGVmblxyXG4gZW1pdHNcclxuIChbXSlcclxuIChbYV1cclxuICAoY29uZFxyXG4gICAobmlsPyBhKVxyXG4gICBuaWxcclxuICAgIz8oOmNsaiAobWFwPyBhKSA6Y2xqcyAoYW5hL2NsanMtbWFwPyBhKSlcclxuICAgKGVtaXQgYSlcclxuICAgIz8oOmNsaiAoc2VxPyBhKSA6Y2xqcyAoYW5hL2NsanMtc2VxPyBhKSlcclxuICAgKGFwcGx5IGVtaXRzIGEpXHJcbiAgICM/KDpjbGogKGZuPyBhKSA6Y2xqcyAoZ29vZy9pc0Z1bmN0aW9uIGEpKVxyXG4gICAoYSlcclxuICAgOmVsc2VcclxuICAgKGxldFxyXG4gICAgW3MgKGNvbmQtPiBhIChub3QgKHN0cmluZz8gYSkpIC50b1N0cmluZyldXHJcbiAgICAjPyg6Y2xqICh3aGVuLXNvbWUgW2dlbi1jb2wgKnNvdXJjZS1tYXAtZGF0YS1nZW4tY29sKl0gKC5hZGRBbmRHZXQgZ2VuLWNvbCAoLmxlbmd0aCBzKSkpIDpjbGpzICh3aGVuLXNvbWUgW3NtLWRhdGEgKnNvdXJjZS1tYXAtZGF0YSpdIChzd2FwISBzbS1kYXRhIHVwZGF0ZSA6Z2VuLWNvbCAoZm4qIFtwMV9fNDg2NDcjXSAoKyBwMV9fNDg2NDcjICguLWxlbmd0aCBzKSkpKSkpXHJcbiAgICAjPyg6Y2xqICgud3JpdGUgKm91dCogcykgOmNsanMgKHByaW50IHMpKSkpXHJcbiAgbmlsKVxyXG4gKFthIGJdIChlbWl0cyBhKSAoZW1pdHMgYikpXHJcbiAoW2EgYiBjXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChlbWl0cyBjKSlcclxuIChbYSBiIGMgZF0gKGVtaXRzIGEpIChlbWl0cyBiKSAoZW1pdHMgYykgKGVtaXRzIGQpKVxyXG4gKFthIGIgYyBkIGVdIChlbWl0cyBhKSAoZW1pdHMgYikgKGVtaXRzIGMpIChlbWl0cyBkKSAoZW1pdHMgZSkpXHJcbiAoW2EgYiBjIGQgZSAmIHhzXVxyXG4gIChlbWl0cyBhKVxyXG4gIChlbWl0cyBiKVxyXG4gIChlbWl0cyBjKVxyXG4gIChlbWl0cyBkKVxyXG4gIChlbWl0cyBlKVxyXG4gIChkb3NlcSBbeCB4c10gKGVtaXRzIHgpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtY29uc3RhbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtY29uc3RhbnRcclxuIFt2XVxyXG4gKGxldFxyXG4gIFttIChhbmEvZWxpZGUtaXJyZWxldmFudC1tZXRhIChtZXRhIHYpKV1cclxuICAoaWZcclxuICAgKHNvbWU/IChzZXEgbSkpXHJcbiAgIChlbWl0LXdpdGgtbWV0YVxyXG4gICAgKGZuKiBbXSAoZW1pdC1jb25zdGFudC1uby1tZXRhIHYpKVxyXG4gICAgKGZuKiBbXSAoZW1pdC1jb25zdGFudC1uby1tZXRhIG0pKSlcclxuICAgKGVtaXQtY29uc3RhbnQtbm8tbWV0YSB2KSkpKVxyXG4ifSB7OnN5bSBlbWl0LWRvdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW3RhcmdldCBmaWVsZCBtZXRob2QgYXJncyBlbnZdfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtZG90XHJcbiBbezprZXlzIFt0YXJnZXQgZmllbGQgbWV0aG9kIGFyZ3MgZW52XX1dXHJcbiAoZW1pdC13cmFwXHJcbiAgZW52XHJcbiAgKGlmXHJcbiAgIGZpZWxkXHJcbiAgIChlbWl0cyB0YXJnZXQgXCIuXCIgKG11bmdlIGZpZWxkICN7fSkpXHJcbiAgIChlbWl0cyB0YXJnZXQgXCIuXCIgKG11bmdlIG1ldGhvZCAje30pIFwiKFwiIChjb21tYS1zZXAgYXJncykgXCIpXCIpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtY29uc3RhbnRzLXRhYmxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RhYmxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1jb25zdGFudHMtdGFibGVcclxuIFt0YWJsZV1cclxuIChlbWl0bG4gXCJnb29nLnByb3ZpZGUoJ1wiIChtdW5nZSBhbmEvY29uc3RhbnRzLW5zLXN5bSkgXCInKTtcIilcclxuIChlbWl0bG4gXCJnb29nLnJlcXVpcmUoJ2NsanMuY29yZScpO1wiKVxyXG4gKGRvc2VxXHJcbiAgW1tzeW0gdmFsdWVdIHRhYmxlXVxyXG4gIChsZXRcclxuICAgW25zIChuYW1lc3BhY2Ugc3ltKSBuYW1lIChuYW1lIHN5bSldXHJcbiAgIChlbWl0cyBcImNsanMuY29yZS5cIiB2YWx1ZSBcIiA9IFwiKVxyXG4gICAoY29uZFxyXG4gICAgKGtleXdvcmQ/IHN5bSlcclxuICAgIChlbWl0cy1rZXl3b3JkIHN5bSlcclxuICAgIChzeW1ib2w/IHN5bSlcclxuICAgIChlbWl0cy1zeW1ib2wgc3ltKVxyXG4gICAgOmVsc2VcclxuICAgICh0aHJvd1xyXG4gICAgIChleC1pbmZvXHJcbiAgICAgIChzdHIgXCJDYW5ub3QgZW1pdCBjb25zdGFudCBmb3IgdHlwZSBcIiAodHlwZSBzeW0pKVxyXG4gICAgICB7OmVycm9yIDppbnZhbGlkLWNvbnN0YW50LXR5cGUsXHJcbiAgICAgICA6Y2xvanVyZS5lcnJvci9waGFzZSA6Y29tcGlsYXRpb259KSkpXHJcbiAgIChlbWl0cyBcIjtcXG5cIikpKSlcclxuIn0gezpzeW0gZW1pdC1saXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zIGNvbW1hLXNlcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtbGlzdFxyXG4gW2l0ZW1zIGNvbW1hLXNlcF1cclxuIChpZlxyXG4gIChlbXB0eT8gaXRlbXMpXHJcbiAgKGVtaXRzIFwiY2xqcy5jb3JlLkxpc3QuRU1QVFlcIilcclxuICAoZW1pdHMgXCJjbGpzLmNvcmUubGlzdChcIiAoY29tbWEtc2VwIGl0ZW1zKSBcIilcIikpKVxyXG4ifSB7OnN5bSBnZXQtZmlyc3QtbnMtc2VnbWVudCwgOm1ldGEgezpkb2MgIkdldHMgdGhlIHBhcnQgdXAgdG8gdGhlIGZpcnN0IGAuYCBvZiBhIG5hbWVzcGFjZS5cbiAgIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBmb3IgbmlsLlxuICAgUmV0dXJucyB0aGUgZW50aXJlIHN0cmluZyBpZiBubyBgLmAgaW4gbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZmlyc3QtbnMtc2VnbWVudFxyXG4gXCJHZXRzIHRoZSBwYXJ0IHVwIHRvIHRoZSBmaXJzdCBgLmAgb2YgYSBuYW1lc3BhY2UuXFxuICAgUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGZvciBuaWwuXFxuICAgUmV0dXJucyB0aGUgZW50aXJlIHN0cmluZyBpZiBubyBgLmAgaW4gbmFtZXNwYWNlXCJcclxuIFtuc11cclxuIChsZXRcclxuICBbbnMgKHN0ciBucykgaWR4ICguaW5kZXhPZiBucyBcIi5cIildXHJcbiAgKGlmICg9PSAtMSBpZHgpIG5zIChzdWJzIG5zIDAgaWR4KSkpKVxyXG4ifSB7OnN5bSBlbWl0LWZuLXBhcmFtcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwYXJhbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWZuLXBhcmFtc1xyXG4gW3BhcmFtc11cclxuIChkb3NlcVxyXG4gIFtwYXJhbSBwYXJhbXNdXHJcbiAgKGVtaXQgcGFyYW0pXHJcbiAgKHdoZW4tbm90ICg9IHBhcmFtIChsYXN0IHBhcmFtcykpIChlbWl0cyBcIixcIikpKSlcclxuIn0gezpzeW0gbXVuZ2UtcmVzZXJ2ZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVzZXJ2ZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZS1yZXNlcnZlZFxyXG4gW3Jlc2VydmVkXVxyXG4gKGZuIFtzXSAoaWYtbm90IChuaWw/IChnZXQgcmVzZXJ2ZWQgcykpIChzdHIgcyBcIiRcIikgcykpKVxyXG4ifSB7OnN5bSBmbi1zZWxmLW5hbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtuYW1lIGluZm9dLCA6YXMgbmFtZS12YXJ9XSl9LCA6c291cmNlICIoZGVmblxyXG4gZm4tc2VsZi1uYW1lXHJcbiBbezprZXlzIFtuYW1lIGluZm9dLCA6YXMgbmFtZS12YXJ9XVxyXG4gKGxldFxyXG4gIFtuYW1lXHJcbiAgIChzdHJpbmcvcmVwbGFjZSAoc3RyIG5hbWUpIFwiLi5cIiBcIl9ET1RfX0RPVF9cIilcclxuICAgezprZXlzIFtucyBmbi1zY29wZV19XHJcbiAgIGluZm9cclxuICAgc2NvcGVkLW5hbWVcclxuICAgKGFwcGx5XHJcbiAgICBzdHJcclxuICAgIChpbnRlcnBvc2UgXCJfJF9cIiAoY29uY2F0IChtYXAgKGNvbXAgc3RyIDpuYW1lKSBmbi1zY29wZSkgW25hbWVdKSkpXVxyXG4gIChzeW1ib2xcclxuICAgKG11bmdlIChzdHIgKHN0cmluZy9yZXBsYWNlIChzdHIgbnMpIFwiLlwiIFwiJFwiKSBcIiRcIiBzY29wZWQtbmFtZSkpKSkpXHJcbiJ9IHs6c3ltIGxvYWQtbGlicywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtsaWJzIHNlZW4gcmVsb2FkcyBkZXBzIG5zLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2FkLWxpYnNcclxuIFtsaWJzIHNlZW4gcmVsb2FkcyBkZXBzIG5zLW5hbWVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbb3B0aW9ucyBqcy1kZXBlbmRlbmN5LWluZGV4XX1cclxuICAgQGVudi8qY29tcGlsZXIqXHJcbiAgIHs6a2V5cyBbdGFyZ2V0IG5vZGVqcy1ydCBvcHRpbWl6YXRpb25zXX1cclxuICAgb3B0aW9uc1xyXG4gICBsb2FkZWQtbGlic1xyXG4gICAobXVuZ2UgJ2NsanMuY29yZS4qbG9hZGVkLWxpYnMqKVxyXG4gICBsb2FkZWQtbGlicy10ZW1wXHJcbiAgIChtdW5nZSAoZ2Vuc3ltICdjbGpzLmNvcmUuKmxvYWRlZC1saWJzKikpXHJcbiAgIFtub2RlLWxpYnMgbGlicy10by1sb2FkXVxyXG4gICAobGV0XHJcbiAgICBbbGlicyAocmVtb3ZlIChzZXQgKHZhbHMgc2VlbikpIChmaWx0ZXIgKHNldCAodmFscyBsaWJzKSkgZGVwcykpXVxyXG4gICAgKGlmXHJcbiAgICAgKD0gOm5vZGVqcyB0YXJnZXQpXHJcbiAgICAgKGxldFxyXG4gICAgICBbe25vZGUtbGlicyB0cnVlLCBsaWJzLXRvLWxvYWQgZmFsc2V9XHJcbiAgICAgICAoZ3JvdXAtYnkgYW5hL25vZGUtbW9kdWxlLWRlcD8gbGlicyldXHJcbiAgICAgIFtub2RlLWxpYnMgbGlicy10by1sb2FkXSlcclxuICAgICBbbmlsIGxpYnNdKSlcclxuICAgZ2xvYmFsLWV4cG9ydHMtbGlic1xyXG4gICAoZmlsdGVyIGFuYS9kZXAtaGFzLWdsb2JhbC1leHBvcnRzPyBsaWJzLXRvLWxvYWQpXVxyXG4gICh3aGVuXHJcbiAgICgtPiBsaWJzIG1ldGEgOnJlbG9hZC1hbGwpXHJcbiAgIChlbWl0bG5cclxuICAgIFwiaWYoIUNPTVBJTEVEKSBcIlxyXG4gICAgbG9hZGVkLWxpYnMtdGVtcFxyXG4gICAgXCIgPSBcIlxyXG4gICAgbG9hZGVkLWxpYnNcclxuICAgIFwiIHx8IGNsanMuY29yZS5zZXQoW1xcXCJjbGpzLmNvcmVcXFwiXSk7XCIpXHJcbiAgIChlbWl0bG5cclxuICAgIFwiaWYoIUNPTVBJTEVEKSBcIlxyXG4gICAgbG9hZGVkLWxpYnNcclxuICAgIFwiID0gY2xqcy5jb3JlLnNldChbXFxcImNsanMuY29yZVxcXCJdKTtcIikpXHJcbiAgKGRvc2VxXHJcbiAgIFtsaWIgbGlicy10by1sb2FkXVxyXG4gICAoY29uZFxyXG4gICAgIz9AKDpjbGogWyhhbmEvZm9yZWlnbi1kZXA/IGxpYikgKHdoZW4gKGFuZCAoPSA6bm9uZSBvcHRpbWl6YXRpb25zKSAobm90IChjb250YWlucz8gb3B0aW9ucyA6bW9kdWxlcykpKSAoaWYgbm9kZWpzLXJ0IChsZXQgW2lqcyAoZ2V0IGpzLWRlcGVuZGVuY3ktaW5kZXggKG5hbWUgbGliKSldIChlbWl0bG4gXCJjbGpzLmNvcmUubG9hZF9maWxlKFwiICgtPiAoaW8vZmlsZSAodXRpbC9vdXRwdXQtZGlyZWN0b3J5IG9wdGlvbnMpIChvciAoZGVwcy8tcmVsYXRpdmUtcGF0aCBpanMpICh1dGlsL3JlbGF0aXZlLW5hbWUgKDp1cmwgaWpzKSkpKSBzdHIgZXNjYXBlLXN0cmluZyB3cmFwLWluLWRvdWJsZS1xdW90ZXMpIFwiKTtcIikpIChlbWl0bG4gXCJnb29nLnJlcXVpcmUoJ1wiIChtdW5nZSBsaWIpIFwiJyk7XCIpKSldIDpjbGpzIFsoYW5kIChhbmEvZm9yZWlnbi1kZXA/IGxpYikgKG5vdCAoa2V5d29yZC1pZGVudGljYWw/IG9wdGltaXphdGlvbnMgOm5vbmUpKSkgbmlsXSlcclxuICAgIChvciAoLT4gbGlicyBtZXRhIDpyZWxvYWQpICg9IChnZXQgcmVsb2FkcyBsaWIpIDpyZWxvYWQpKVxyXG4gICAgKGVtaXRsbiBcImdvb2cucmVxdWlyZSgnXCIgKG11bmdlIGxpYikgXCInLCAncmVsb2FkJyk7XCIpXHJcbiAgICAob3IgKC0+IGxpYnMgbWV0YSA6cmVsb2FkLWFsbCkgKD0gKGdldCByZWxvYWRzIGxpYikgOnJlbG9hZC1hbGwpKVxyXG4gICAgKGVtaXRsbiBcImdvb2cucmVxdWlyZSgnXCIgKG11bmdlIGxpYikgXCInLCAncmVsb2FkLWFsbCcpO1wiKVxyXG4gICAgOmVsc2VcclxuICAgICh3aGVuLW5vdFxyXG4gICAgICg9IGxpYiAnZ29vZylcclxuICAgICAoZW1pdGxuIFwiZ29vZy5yZXF1aXJlKCdcIiAobXVuZ2UgbGliKSBcIicpO1wiKSkpKVxyXG4gIChkb3NlcVxyXG4gICBbbGliIG5vZGUtbGlic11cclxuICAgKGVtaXRsblxyXG4gICAgKG11bmdlIG5zLW5hbWUpXHJcbiAgICBcIi5cIlxyXG4gICAgKGFuYS9tdW5nZS1ub2RlLWxpYiBsaWIpXHJcbiAgICBcIiA9IHJlcXVpcmUoJ1wiXHJcbiAgICBsaWJcclxuICAgIFwiJyk7XCIpKVxyXG4gIChkb3NlcVxyXG4gICBbbGliIGdsb2JhbC1leHBvcnRzLWxpYnNdXHJcbiAgIChsZXRcclxuICAgIFt7OmtleXMgW2dsb2JhbC1leHBvcnRzXX0gKGdldCBqcy1kZXBlbmRlbmN5LWluZGV4IChuYW1lIGxpYikpXVxyXG4gICAgKGVtaXQtZ2xvYmFsLWV4cG9ydCBucy1uYW1lIGdsb2JhbC1leHBvcnRzIGxpYikpKVxyXG4gICh3aGVuXHJcbiAgICgtPiBsaWJzIG1ldGEgOnJlbG9hZC1hbGwpXHJcbiAgIChlbWl0bG5cclxuICAgIFwiaWYoIUNPTVBJTEVEKSBcIlxyXG4gICAgbG9hZGVkLWxpYnNcclxuICAgIFwiID0gY2xqcy5jb3JlLmludG8oXCJcclxuICAgIGxvYWRlZC1saWJzLXRlbXBcclxuICAgIFwiLCBcIlxyXG4gICAgbG9hZGVkLWxpYnNcclxuICAgIFwiKTtcIikpKSlcclxuIn0gezpzeW0gbXVuZ2UtcGFyYW0tcmV0dXJuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2UtcGFyYW0tcmV0dXJuXHJcbiBbZW52IGxpbmVdXHJcbiAoY29uZFxyXG4gIChyZS1maW5kICNcIkBwYXJhbVwiIGxpbmUpXHJcbiAgKGxldFxyXG4gICBbW3AgdHMgbiAmIHhzXVxyXG4gICAgKG1hcCBzdHJpbmcvdHJpbSAoc3RyaW5nL3NwbGl0IChzdHJpbmcvdHJpbSBsaW5lKSAjXCIgXCIpKV1cclxuICAgKGlmXHJcbiAgICAoYW5kXHJcbiAgICAgKD0gXCJAcGFyYW1cIiBwKVxyXG4gICAgIHRzXHJcbiAgICAgIz8oOmNsaiAoLnN0YXJ0c1dpdGggdHMgXCJ7XCIpIDpjbGpzIChnc3RyaW5nL3N0YXJ0c1dpdGggdHMgXCJ7XCIpKSlcclxuICAgIChzdHJpbmcvam9pbiBcIiBcIiAoY29uY2F0IFtwIChyZXNvbHZlLXR5cGVzIGVudiB0cykgKG11bmdlIG4pXSB4cykpXHJcbiAgICBsaW5lKSlcclxuICAocmUtZmluZCAjXCJAcmV0dXJuXCIgbGluZSlcclxuICAobGV0XHJcbiAgIFtbcCB0cyAmIHhzXVxyXG4gICAgKG1hcCBzdHJpbmcvdHJpbSAoc3RyaW5nL3NwbGl0IChzdHJpbmcvdHJpbSBsaW5lKSAjXCIgXCIpKV1cclxuICAgKGlmXHJcbiAgICAoYW5kXHJcbiAgICAgKD0gXCJAcmV0dXJuXCIgcClcclxuICAgICB0c1xyXG4gICAgICM/KDpjbGogKC5zdGFydHNXaXRoIHRzIFwie1wiKSA6Y2xqcyAoZ3N0cmluZy9zdGFydHNXaXRoIHRzIFwie1wiKSkpXHJcbiAgICAoc3RyaW5nL2pvaW4gXCIgXCIgKGNvbmNhdCBbcCAocmVzb2x2ZS10eXBlcyBlbnYgdHMpXSB4cykpXHJcbiAgICBsaW5lKSlcclxuICA6ZWxzZVxyXG4gIGxpbmUpKVxyXG4ifSB7OnN5bSBlbWl0LWpzLWFycmF5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zIGNvbW1hLXNlcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtanMtYXJyYXlcclxuIFtpdGVtcyBjb21tYS1zZXBdXHJcbiAoZW1pdHMgXCJbXCIgKGNvbW1hLXNlcCBpdGVtcykgXCJdXCIpKVxyXG4ifSB7OnN5bSBmaW5kLW5zLXN0YXJ0cy13aXRoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25lZWRsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtbnMtc3RhcnRzLXdpdGhcclxuIFtuZWVkbGVdXHJcbiAocmVkdWNlLWt2XHJcbiAgKGZuXHJcbiAgIFt4cyBucyBfXVxyXG4gICAod2hlbiAoPSBuZWVkbGUgKGdldC1maXJzdC1ucy1zZWdtZW50IG5zKSkgKHJlZHVjZWQgbmVlZGxlKSkpXHJcbiAgbmlsXHJcbiAgKDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgQGVudi8qY29tcGlsZXIqKSkpXHJcbiJ9IHs6c3ltIGNoZWNraW5nLXR5cGVzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVja2luZy10eXBlcz9cclxuIFtdXHJcbiAoI3s6d2FybmluZyA6ZXJyb3J9XHJcbiAgKGdldC1pbiBAZW52Lypjb21waWxlciogWzpvcHRpb25zIDpjbG9zdXJlLXdhcm5pbmdzIDpjaGVjay10eXBlc10pKSlcclxuIn0gezpzeW0gZW1pdC1mbi1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbe2V4cHIgOmJvZHksIDprZXlzIFt0eXBlIG5hbWUgcGFyYW1zIGVudiByZWN1cnNdfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtZm4tbWV0aG9kXHJcbiBbe2V4cHIgOmJvZHksIDprZXlzIFt0eXBlIG5hbWUgcGFyYW1zIGVudiByZWN1cnNdfV1cclxuIChlbWl0LXdyYXBcclxuICBlbnZcclxuICAoZW1pdHMgXCIoZnVuY3Rpb24gXCIgKG11bmdlIG5hbWUpIFwiKFwiKVxyXG4gIChlbWl0LWZuLXBhcmFtcyBwYXJhbXMpXHJcbiAgKGVtaXRsbiBcIil7XCIpXHJcbiAgKHdoZW4gdHlwZSAoZW1pdGxuIFwidmFyIHNlbGZfXyA9IHRoaXM7XCIpKVxyXG4gICh3aGVuIHJlY3VycyAoZW1pdGxuIFwid2hpbGUodHJ1ZSl7XCIpKVxyXG4gIChlbWl0cyBleHByKVxyXG4gICh3aGVuIHJlY3VycyAoZW1pdGxuIFwiYnJlYWs7XCIpIChlbWl0bG4gXCJ9XCIpKVxyXG4gIChlbWl0cyBcIn0pXCIpKSlcclxuIn0gezpzeW0gZW1pdC1jb21tZW50LCA6bWV0YSB7OmRvYyAiRW1pdCBhIG5pY2VseSBmb3JtYXR0ZWQgY29tbWVudCBzdHJpbmcuIiwgOmFyZ2xpc3RzIFtbZG9jIGpzZG9jXSBbZW52IGRvYyBqc2RvY11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtY29tbWVudFxyXG4gXCJFbWl0IGEgbmljZWx5IGZvcm1hdHRlZCBjb21tZW50IHN0cmluZy5cIlxyXG4gKFtkb2MganNkb2NdIChlbWl0LWNvbW1lbnQgbmlsIGRvYyBqc2RvYykpXHJcbiAoW2VudiBkb2MganNkb2NdXHJcbiAgKGxldFxyXG4gICBbZG9jc1xyXG4gICAgKHdoZW4gZG9jIFtkb2NdKVxyXG4gICAgZG9jc1xyXG4gICAgKGlmIGpzZG9jIChjb25jYXQgZG9jcyBqc2RvYykgZG9jcylcclxuICAgIGRvY3NcclxuICAgIChyZW1vdmUgbmlsPyBkb2NzKV1cclxuICAgKGxldGZuXHJcbiAgICBbKHByaW50LWNvbW1lbnQtbGluZXNcclxuICAgICAgW2VdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtbeCAmIHlzXVxyXG4gICAgICAgIChtYXBcclxuICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgW3AxX180ODY1NCNdXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoY2hlY2tpbmctdHlwZXM/KVxyXG4gICAgICAgICAgIChtdW5nZS1wYXJhbS1yZXR1cm4gZW52IHAxX180ODY1NCMpXHJcbiAgICAgICAgICAgcDFfXzQ4NjU0IykpXHJcbiAgICAgICAgIChzdHJpbmcvc3BsaXQtbGluZXMgZSkpXVxyXG4gICAgICAgKGVtaXRsbiBcIiAqIFwiIChzdHJpbmcvcmVwbGFjZSB4IFwiKi9cIiBcIiogL1wiKSlcclxuICAgICAgIChkb3NlcVxyXG4gICAgICAgIFtuZXh0LWxpbmUgeXNdXHJcbiAgICAgICAgKGVtaXRsblxyXG4gICAgICAgICBcIiAqIFwiXHJcbiAgICAgICAgICgtPlxyXG4gICAgICAgICAgbmV4dC1saW5lXHJcbiAgICAgICAgICAoc3RyaW5nL3JlcGxhY2UgI1wiXiAgIFwiIFwiXCIpXHJcbiAgICAgICAgICAoc3RyaW5nL3JlcGxhY2UgXCIqL1wiIFwiKiAvXCIpKSkpKSldXHJcbiAgICAod2hlblxyXG4gICAgIChzZXEgZG9jcylcclxuICAgICAoZW1pdGxuIFwiLyoqXCIpXHJcbiAgICAgKGRvc2VxIFtlIGRvY3NdICh3aGVuIGUgKHByaW50LWNvbW1lbnQtbGluZXMgZSkpKVxyXG4gICAgIChlbWl0bG4gXCIgKi9cIikpKSkpKVxyXG4ifSB7OnN5bSBoYXNoLXNjb3BlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLXNjb3BlXHJcbiBbc11cclxuIChoYXNoLWNvbWJpbmVcclxuICAjPyg6Y2xqIChoYXNoICg6bmFtZSBzKSkgOmNsanMgKC1oYXNoICg6bmFtZSBzKSkpXHJcbiAgKHNoYWRvdy1kZXB0aCBzKSkpXHJcbiJ9IHs6c3ltIGVtaXQtYXBwbHktdG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtuYW1lIHBhcmFtcyBlbnZdfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtYXBwbHktdG9cclxuIFt7OmtleXMgW25hbWUgcGFyYW1zIGVudl19XVxyXG4gKGxldFxyXG4gIFthcmdsaXN0XHJcbiAgIChnZW5zeW0gXCJhcmdsaXN0X19cIilcclxuICAgZGVsZWdhdGUtbmFtZVxyXG4gICAoc3RyIChtdW5nZSBuYW1lKSBcIl9fZGVsZWdhdGVcIildXHJcbiAgKGVtaXRsbiBcIihmdW5jdGlvbiAoXCIgYXJnbGlzdCBcIil7XCIpXHJcbiAgKGRvc2VxXHJcbiAgIFtbaSBwYXJhbV0gKG1hcC1pbmRleGVkIHZlY3RvciAoZHJvcC1sYXN0IDIgcGFyYW1zKSldXHJcbiAgIChlbWl0cyBcInZhciBcIilcclxuICAgKGVtaXQgcGFyYW0pXHJcbiAgIChlbWl0cyBcIiA9IGNsanMuY29yZS5maXJzdChcIilcclxuICAgKGVtaXRsbiBhcmdsaXN0IFwiKTtcIilcclxuICAgKGVtaXRsbiBhcmdsaXN0IFwiID0gY2xqcy5jb3JlLm5leHQoXCIgYXJnbGlzdCBcIik7XCIpKVxyXG4gIChpZlxyXG4gICAoPCAxIChjb3VudCBwYXJhbXMpKVxyXG4gICAoZG9cclxuICAgIChlbWl0cyBcInZhciBcIilcclxuICAgIChlbWl0IChsYXN0IChidXRsYXN0IHBhcmFtcykpKVxyXG4gICAgKGVtaXRsbiBcIiA9IGNsanMuY29yZS5maXJzdChcIiBhcmdsaXN0IFwiKTtcIilcclxuICAgIChlbWl0cyBcInZhciBcIilcclxuICAgIChlbWl0IChsYXN0IHBhcmFtcykpXHJcbiAgICAoZW1pdGxuIFwiID0gY2xqcy5jb3JlLnJlc3QoXCIgYXJnbGlzdCBcIik7XCIpXHJcbiAgICAoZW1pdHMgXCJyZXR1cm4gXCIgZGVsZWdhdGUtbmFtZSBcIihcIilcclxuICAgIChkb3NlcVxyXG4gICAgIFtwYXJhbSBwYXJhbXNdXHJcbiAgICAgKGVtaXQgcGFyYW0pXHJcbiAgICAgKHdoZW4tbm90ICg9IHBhcmFtIChsYXN0IHBhcmFtcykpIChlbWl0cyBcIixcIikpKVxyXG4gICAgKGVtaXRsbiBcIik7XCIpKVxyXG4gICAoZG9cclxuICAgIChlbWl0cyBcInZhciBcIilcclxuICAgIChlbWl0IChsYXN0IHBhcmFtcykpXHJcbiAgICAoZW1pdGxuIFwiID0gY2xqcy5jb3JlLnNlcShcIiBhcmdsaXN0IFwiKTtcIilcclxuICAgIChlbWl0cyBcInJldHVybiBcIiBkZWxlZ2F0ZS1uYW1lIFwiKFwiKVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW3BhcmFtIHBhcmFtc11cclxuICAgICAoZW1pdCBwYXJhbSlcclxuICAgICAod2hlbi1ub3QgKD0gcGFyYW0gKGxhc3QgcGFyYW1zKSkgKGVtaXRzIFwiLFwiKSkpXHJcbiAgICAoZW1pdGxuIFwiKTtcIikpKVxyXG4gIChlbWl0cyBcIn0pXCIpKSlcclxuIn0gezpzeW0gZW1pdHMtc3ltYm9sLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXRzLXN5bWJvbFxyXG4gW3N5bV1cclxuIChsZXRcclxuICBbbnNcclxuICAgKG5hbWVzcGFjZSBzeW0pXHJcbiAgIG5hbWVcclxuICAgKG5hbWUgc3ltKVxyXG4gICBzeW1zdHJcclxuICAgKGlmLW5vdCAobmlsPyBucykgKHN0ciBucyBcIi9cIiBuYW1lKSBuYW1lKV1cclxuICAoZW1pdHMgXCJuZXcgY2xqcy5jb3JlLlN5bWJvbChcIilcclxuICAoZW1pdC1jb25zdGFudCBucylcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgbmFtZSlcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgc3ltc3RyKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCAoaGFzaCBzeW0pKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCBuaWwpXHJcbiAgKGVtaXRzIFwiKVwiKSkpXHJcbiJ9IHs6c3ltIGZhbHNleS1jb25zdGFudD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZhbHNleS1jb25zdGFudD9cclxuIFtleHByXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW29wIGZvcm0gY29uc3QtZXhwcl19IChhbmEvdW53cmFwLXF1b3RlIGV4cHIpXVxyXG4gIChvclxyXG4gICAoYW5kICg9IG9wIDpjb25zdCkgKG9yIChmYWxzZT8gZm9ybSkgKG5pbD8gZm9ybSkpKVxyXG4gICAoYW5kIChzb21lPyBjb25zdC1leHByKSAoZmFsc2V5LWNvbnN0YW50PyBjb25zdC1leHByKSkpKSlcclxuIn0gezpzeW0gZW1pdC1jb25zdGFudHMtY29tbWEtc2VwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1jb25zdGFudHMtY29tbWEtc2VwXHJcbiBbY3NdXHJcbiAoZm5cclxuICBbXVxyXG4gIChkb2FsbFxyXG4gICAobWFwLWluZGV4ZWRcclxuICAgIChmbiBbaSBtXSAoaWYgKGV2ZW4/IGkpIChlbWl0LWNvbnN0YW50IG0pIChlbWl0cyBtKSkpXHJcbiAgICAoY29tbWEtc2VwIGNzKSkpKSlcclxuIn0gezpzeW0gKnNvdXJjZS1tYXAtZGF0YSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpzb3VyY2UtbWFwLWRhdGEqIG5pbClcclxuIn0gezpzeW0gZW1pdC1yZWNvcmQtdmFsdWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMgbmFtZSBpdGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtcmVjb3JkLXZhbHVlXHJcbiBbbnMgbmFtZSBpdGVtc11cclxuIChlbWl0cyBucyBcIi5tYXBfX0dUX1wiIG5hbWUgXCIoXCIgaXRlbXMgXCIpXCIpKVxyXG4ifSB7OnN5bSBlbWl0LXZhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW2luZm8gZW52IGZvcm1dLCA6YXMgYXN0fV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtdmFyXHJcbiBbezprZXlzIFtpbmZvIGVudiBmb3JtXSwgOmFzIGFzdH1dXHJcbiAoaWYtbGV0XHJcbiAgW2NvbnN0LWV4cHIgKDpjb25zdC1leHByIGFzdCldXHJcbiAgKGVtaXQgKGFzc29jIGNvbnN0LWV4cHIgOmVudiBlbnYpKVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbb3B0aW9uc10sIDphcyBjZW52fVxyXG4gICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICB2YXItbmFtZVxyXG4gICAgKDpuYW1lIGluZm8pXHJcbiAgICBpbmZvXHJcbiAgICAoaWZcclxuICAgICAoPSAobmFtZXNwYWNlIHZhci1uYW1lKSBcImpzXCIpXHJcbiAgICAgKGxldFxyXG4gICAgICBbanMtbW9kdWxlLW5hbWVcclxuICAgICAgIChnZXQtaW4gY2VudiBbOmpzLW1vZHVsZS1pbmRleCAobmFtZSB2YXItbmFtZSkgOm5hbWVdKV1cclxuICAgICAgKG9yIGpzLW1vZHVsZS1uYW1lIChuYW1lIHZhci1uYW1lKSkpXHJcbiAgICAgaW5mbyldXHJcbiAgIChpZlxyXG4gICAgKDpiaW5kaW5nLWZvcm0/IGFzdClcclxuICAgIChlbWl0cyAobXVuZ2UgYXN0KSlcclxuICAgICh3aGVuLW5vdFxyXG4gICAgICg9IDpzdGF0ZW1lbnQgKDpjb250ZXh0IGVudikpXHJcbiAgICAgKGxldFxyXG4gICAgICBbcmVzZXJ2ZWRcclxuICAgICAgIChjb25kLT5cclxuICAgICAgICBqcy1yZXNlcnZlZFxyXG4gICAgICAgIChhbmRcclxuICAgICAgICAgKGVzNT49ICg6bGFuZ3VhZ2Utb3V0IG9wdGlvbnMpKVxyXG4gICAgICAgICAoc29tZT8gKG5hbWVzcGFjZSB2YXItbmFtZSkpKVxyXG4gICAgICAgIChzZXQvZGlmZmVyZW5jZSBhbmEvZXM1LWFsbG93ZWQpKVxyXG4gICAgICAganMtbW9kdWxlXHJcbiAgICAgICAoZ2V0LWluXHJcbiAgICAgICAgY2VudlxyXG4gICAgICAgIFs6anMtbmFtZXNwYWNlcyAob3IgKG5hbWVzcGFjZSB2YXItbmFtZSkgKG5hbWUgdmFyLW5hbWUpKV0pXHJcbiAgICAgICBpbmZvXHJcbiAgICAgICAoY29uZC0+IGluZm8gKG5vdD0gZm9ybSAnanMvLUluZmluaXR5KSAobXVuZ2UgcmVzZXJ2ZWQpKV1cclxuICAgICAgKGVtaXQtd3JhcFxyXG4gICAgICAgZW52XHJcbiAgICAgICAoY2FzZVxyXG4gICAgICAgICg6bW9kdWxlLXR5cGUganMtbW9kdWxlKVxyXG4gICAgICAgIDpjb21tb25qc1xyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAobmFtZXNwYWNlIHZhci1uYW1lKVxyXG4gICAgICAgICAoZW1pdHNcclxuICAgICAgICAgIChtdW5nZSAobmFtZXNwYWNlIHZhci1uYW1lKSByZXNlcnZlZClcclxuICAgICAgICAgIFwiW1xcXCJkZWZhdWx0XFxcIl0uXCJcclxuICAgICAgICAgIChtdW5nZSAobmFtZSB2YXItbmFtZSkgcmVzZXJ2ZWQpKVxyXG4gICAgICAgICAoZW1pdHMgKG11bmdlIChuYW1lIHZhci1uYW1lKSByZXNlcnZlZCkgXCJbXFxcImRlZmF1bHRcXFwiXVwiKSlcclxuICAgICAgICA6ZXM2XHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChhbmQgKG5hbWVzcGFjZSB2YXItbmFtZSkgKD0gXCJkZWZhdWx0XCIgKG5hbWUgdmFyLW5hbWUpKSlcclxuICAgICAgICAgKGVtaXRzIChtdW5nZSAobmFtZXNwYWNlIHZhci1uYW1lKSByZXNlcnZlZCkgXCJbXFxcImRlZmF1bHRcXFwiXVwiKVxyXG4gICAgICAgICAoZW1pdHMgaW5mbykpXHJcbiAgICAgICAgKGVtaXRzIGluZm8pKSkpKSkpKSlcclxuIn0gezpzeW0gbWFwcGVkLXR5cGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBtYXBwZWQtdHlwZXMge1wibmlsXCIgXCJudWxsXCJ9KVxyXG4ifSB7OnN5bSByZXNvbHZlLXR5cGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtdHlwZXNcclxuIFtlbnYgdHNdXHJcbiAobGV0XHJcbiAgW3RzXHJcbiAgICgtPiB0cyBzdHJpbmcvdHJpbSAoc3VicyAxIChkZWMgKGNvdW50IHRzKSkpKVxyXG4gICB4c1xyXG4gICAoc3RyaW5nL3NwbGl0IHRzICNcIlxcfFwiKV1cclxuICAoc3RyXHJcbiAgIFwie1wiXHJcbiAgIChzdHJpbmcvam9pblxyXG4gICAgXCJ8XCJcclxuICAgIChtYXAgKGZuKiBbcDFfXzQ4NjUzI10gKHJlc29sdmUtdHlwZSBlbnYgcDFfXzQ4NjUzIykpIHhzKSlcclxuICAgXCJ9XCIpKSlcclxuIn0gezpzeW0gKmlucHV0cyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICppbnB1dHMqIG5pbClcclxuIn0gezpzeW0gZW1pdC1zdHIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwcl0pfSwgOnNvdXJjZSAiKGRlZm4gZW1pdC1zdHIgW2V4cHJdICh3aXRoLW91dC1zdHIgKGVtaXQgZXhwcikpKVxyXG4ifSB7OnN5bSBlbWl0LW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXlzIHZhbHMgY29tbWEtc2VwIGRpc3RpbmN0LWtleXM/XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1tYXBcclxuIFtrZXlzIHZhbHMgY29tbWEtc2VwIGRpc3RpbmN0LWtleXM/XVxyXG4gKGNvbmRcclxuICAoemVybz8gKGNvdW50IGtleXMpKVxyXG4gIChlbWl0cyBcImNsanMuY29yZS5QZXJzaXN0ZW50QXJyYXlNYXAuRU1QVFlcIilcclxuICAoPD0gKGNvdW50IGtleXMpIGFycmF5LW1hcC10aHJlc2hvbGQpXHJcbiAgKGlmXHJcbiAgIChkaXN0aW5jdC1rZXlzPyBrZXlzKVxyXG4gICAoZW1pdHNcclxuICAgIFwibmV3IGNsanMuY29yZS5QZXJzaXN0ZW50QXJyYXlNYXAobnVsbCwgXCJcclxuICAgIChjb3VudCBrZXlzKVxyXG4gICAgXCIsIFtcIlxyXG4gICAgKGNvbW1hLXNlcCAoaW50ZXJsZWF2ZSBrZXlzIHZhbHMpKVxyXG4gICAgXCJdLCBudWxsKVwiKVxyXG4gICAoZW1pdHNcclxuICAgIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRBcnJheU1hcC5jcmVhdGVBc0lmQnlBc3NvYyhbXCJcclxuICAgIChjb21tYS1zZXAgKGludGVybGVhdmUga2V5cyB2YWxzKSlcclxuICAgIFwiXSlcIikpXHJcbiAgOmVsc2VcclxuICAoZW1pdHNcclxuICAgXCJjbGpzLmNvcmUuUGVyc2lzdGVudEhhc2hNYXAuZnJvbUFycmF5cyhbXCJcclxuICAgKGNvbW1hLXNlcCBrZXlzKVxyXG4gICBcIl0sW1wiXHJcbiAgIChjb21tYS1zZXAgdmFscylcclxuICAgXCJdKVwiKSkpXHJcbiJ9IHs6c3ltIGVtaXQtdmVjdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zIGNvbW1hLXNlcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtdmVjdG9yXHJcbiBbaXRlbXMgY29tbWEtc2VwXVxyXG4gKGlmXHJcbiAgKGVtcHR5PyBpdGVtcylcclxuICAoZW1pdHMgXCJjbGpzLmNvcmUuUGVyc2lzdGVudFZlY3Rvci5FTVBUWVwiKVxyXG4gIChsZXRcclxuICAgW2NudCAoY291bnQgaXRlbXMpXVxyXG4gICAoaWZcclxuICAgICg8IGNudCAzMilcclxuICAgIChlbWl0c1xyXG4gICAgIFwibmV3IGNsanMuY29yZS5QZXJzaXN0ZW50VmVjdG9yKG51bGwsIFwiXHJcbiAgICAgY250XHJcbiAgICAgXCIsIDUsIGNsanMuY29yZS5QZXJzaXN0ZW50VmVjdG9yLkVNUFRZX05PREUsIFtcIlxyXG4gICAgIChjb21tYS1zZXAgaXRlbXMpXHJcbiAgICAgXCJdLCBudWxsKVwiKVxyXG4gICAgKGVtaXRzXHJcbiAgICAgXCJjbGpzLmNvcmUuUGVyc2lzdGVudFZlY3Rvci5mcm9tQXJyYXkoW1wiXHJcbiAgICAgKGNvbW1hLXNlcCBpdGVtcylcclxuICAgICBcIl0sIHRydWUpXCIpKSkpKVxyXG4ifSB7OnN5bSB0cnV0aHktY29uc3RhbnQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cnV0aHktY29uc3RhbnQ/XHJcbiBbZXhwcl1cclxuIChsZXRcclxuICBbezprZXlzIFtvcCBmb3JtIGNvbnN0LWV4cHJdfSAoYW5hL3Vud3JhcC1xdW90ZSBleHByKV1cclxuICAob3JcclxuICAgKGFuZFxyXG4gICAgKD0gb3AgOmNvbnN0KVxyXG4gICAgZm9ybVxyXG4gICAgKG5vdFxyXG4gICAgIChvclxyXG4gICAgICAoYW5kIChzdHJpbmc/IGZvcm0pICg9IGZvcm0gXCJcIikpXHJcbiAgICAgIChhbmQgKG51bWJlcj8gZm9ybSkgKHplcm8/IGZvcm0pKSkpKVxyXG4gICAoYW5kIChzb21lPyBjb25zdC1leHByKSAodHJ1dGh5LWNvbnN0YW50PyBjb25zdC1leHByKSkpKSlcclxuIn0gezpzeW0gZW1pdGxuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW10gW2FdIFthIGJdIFthIGIgY10gW2EgYiBjIGRdIFthIGIgYyBkIGVdIFthIGIgYyBkIGUgJiB4c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXRsblxyXG4gKFtdIChfZW1pdGxuKSlcclxuIChbYV0gKGVtaXRzIGEpIChfZW1pdGxuKSlcclxuIChbYSBiXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChfZW1pdGxuKSlcclxuIChbYSBiIGNdIChlbWl0cyBhKSAoZW1pdHMgYikgKGVtaXRzIGMpIChfZW1pdGxuKSlcclxuIChbYSBiIGMgZF0gKGVtaXRzIGEpIChlbWl0cyBiKSAoZW1pdHMgYykgKGVtaXRzIGQpIChfZW1pdGxuKSlcclxuIChbYSBiIGMgZCBlXVxyXG4gIChlbWl0cyBhKVxyXG4gIChlbWl0cyBiKVxyXG4gIChlbWl0cyBjKVxyXG4gIChlbWl0cyBkKVxyXG4gIChlbWl0cyBlKVxyXG4gIChfZW1pdGxuKSlcclxuIChbYSBiIGMgZCBlICYgeHNdXHJcbiAgKGVtaXRzIGEpXHJcbiAgKGVtaXRzIGIpXHJcbiAgKGVtaXRzIGMpXHJcbiAgKGVtaXRzIGQpXHJcbiAgKGVtaXRzIGUpXHJcbiAgKGRvc2VxIFt4IHhzXSAoZW1pdHMgeCkpXHJcbiAgKF9lbWl0bG4pKSlcclxuIn0gezpzeW0gZW1pdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0XHJcbiBbYXN0XVxyXG4gKHdoZW5cclxuICAqc291cmNlLW1hcC1kYXRhKlxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbZW52XX0gYXN0XVxyXG4gICAod2hlblxyXG4gICAgKDpsaW5lIGVudilcclxuICAgIChsZXRcclxuICAgICBbezprZXlzIFtsaW5lIGNvbHVtbl19IGVudl1cclxuICAgICAoc3dhcCFcclxuICAgICAgKnNvdXJjZS1tYXAtZGF0YSpcclxuICAgICAgKGZuXHJcbiAgICAgICBbbV1cclxuICAgICAgIChsZXRcclxuICAgICAgICBbbWluZm9cclxuICAgICAgICAgKGNvbmQtPlxyXG4gICAgICAgICAgezpnY29sXHJcbiAgICAgICAgICAgIz8oOmNsaiAoLmdldCAqc291cmNlLW1hcC1kYXRhLWdlbi1jb2wqKSA6Y2xqcyAoOmdlbi1jb2wgbSkpLFxyXG4gICAgICAgICAgIDpnbGluZSAoOmdlbi1saW5lIG0pfVxyXG4gICAgICAgICAgKCN7OmJpbmRpbmcgOnZhciA6anMtdmFyIDpsb2NhbH0gKDpvcCBhc3QpKVxyXG4gICAgICAgICAgKGFzc29jIDpuYW1lIChzdHIgKC0+IGFzdCA6aW5mbyA6bmFtZSkpKSldXHJcbiAgICAgICAgKHVwZGF0ZS1pblxyXG4gICAgICAgICBtXHJcbiAgICAgICAgIFs6c291cmNlLW1hcCAoZGVjIGxpbmUpXVxyXG4gICAgICAgICAoZm5pbFxyXG4gICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgW2xpbmVdXHJcbiAgICAgICAgICAgKHVwZGF0ZS1pblxyXG4gICAgICAgICAgICBsaW5lXHJcbiAgICAgICAgICAgIFsoaWYgY29sdW1uIChkZWMgY29sdW1uKSAwKV1cclxuICAgICAgICAgICAgKGZuaWwgKGZuIFtjb2x1bW5dIChjb25qIGNvbHVtbiBtaW5mbykpIFtdKSkpXHJcbiAgICAgICAgICAoc29ydGVkLW1hcCkpKSkpKSkpKSlcclxuIChlbWl0KiBhc3QpKVxyXG4ifSB7OnN5bSBzYWZlLXRlc3Q/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBlXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2FmZS10ZXN0P1xyXG4gW2VudiBlXVxyXG4gKGxldFxyXG4gIFt0YWcgKGFuYS9pbmZlci10YWcgZW52IGUpXVxyXG4gIChvciAoI3snc2VxICdib29sZWFufSB0YWcpICh0cnV0aHktY29uc3RhbnQ/IGUpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtZXh0ZXJucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tleHRlcm5zXSBbcHJlZml4IGV4dGVybnMgdG9wLWxldmVsIGtub3duLWV4dGVybnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWV4dGVybnNcclxuIChbZXh0ZXJuc11cclxuICAoZW1pdC1leHRlcm5zXHJcbiAgIFtdXHJcbiAgIGV4dGVybnNcclxuICAgKGF0b20gI3t9KVxyXG4gICAod2hlbiBlbnYvKmNvbXBpbGVyKiAoYW5hL2dldC1leHRlcm5zKSkpKVxyXG4gKFtwcmVmaXggZXh0ZXJucyB0b3AtbGV2ZWwga25vd24tZXh0ZXJuc11cclxuICAobG9vcFxyXG4gICBba3MgKHNlcSAoa2V5cyBleHRlcm5zKSldXHJcbiAgICh3aGVuXHJcbiAgICBrc1xyXG4gICAgKGxldFxyXG4gICAgIFtrIChmaXJzdCBrcykgW3RvcCA6YXMgcHJlZml4J10gKGNvbmogcHJlZml4IGspXVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChhbmQgKG5vdD0gJ3Byb3RvdHlwZSBrKSAobmlsPyAoZ2V0LWluIGtub3duLWV4dGVybnMgcHJlZml4JykpKVxyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAob3IgKGNvbnRhaW5zPyBAdG9wLWxldmVsIHRvcCkgKGNvbnRhaW5zPyBrbm93bi1leHRlcm5zIHRvcCkpXHJcbiAgICAgICAoZG9cclxuICAgICAgICAoZW1pdGxuIFwidmFyIFwiIChzdHJpbmcvam9pbiBcIi5cIiAobWFwIG11bmdlIHByZWZpeCcpKSBcIjtcIilcclxuICAgICAgICAoc3dhcCEgdG9wLWxldmVsIGNvbmogdG9wKSlcclxuICAgICAgIChlbWl0bG4gKHN0cmluZy9qb2luIFwiLlwiIChtYXAgbXVuZ2UgcHJlZml4JykpIFwiO1wiKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbbSAoZ2V0IGV4dGVybnMgayldXHJcbiAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgKGVtcHR5PyBtKVxyXG4gICAgICAgKGVtaXQtZXh0ZXJucyBwcmVmaXgnIG0gdG9wLWxldmVsIGtub3duLWV4dGVybnMpKSkpXHJcbiAgICAocmVjdXIgKG5leHQga3MpKSkpKSlcclxuIn0gezpzeW0gZW1pdC1nbG9iYWwtZXhwb3J0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zLW5hbWUgZ2xvYmFsLWV4cG9ydHMgbGliXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1nbG9iYWwtZXhwb3J0XHJcbiBbbnMtbmFtZSBnbG9iYWwtZXhwb3J0cyBsaWJdXHJcbiAoZW1pdGxuXHJcbiAgKG11bmdlIG5zLW5hbWUpXHJcbiAgXCIuXCJcclxuICAoYW5hL211bmdlLWdsb2JhbC1leHBvcnQgbGliKVxyXG4gIFwiID0gZ29vZy5nbG9iYWxcIlxyXG4gICgtPj5cclxuICAgKHN0cmluZy9zcGxpdFxyXG4gICAgKG5hbWVcclxuICAgICAob3JcclxuICAgICAgKGdldCBnbG9iYWwtZXhwb3J0cyAoc3ltYm9sIGxpYikpXHJcbiAgICAgIChnZXQgZ2xvYmFsLWV4cG9ydHMgKG5hbWUgbGliKSkpKVxyXG4gICAgI1wiXFwuXCIpXHJcbiAgIChtYXAgKGZuIFtwcm9wXSAoc3RyIFwiW1xcXCJcIiBwcm9wIFwiXFxcIl1cIikpKVxyXG4gICAoYXBwbHkgc3RyKSlcclxuICBcIjtcIikpXHJcbiJ9IHs6c3ltIGRpc3RpbmN0LWNvbnN0YW50cz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXN0aW5jdC1jb25zdGFudHM/XHJcbiBbaXRlbXNdXHJcbiAobGV0XHJcbiAgW2l0ZW1zIChtYXAgYW5hL3Vud3JhcC1xdW90ZSBpdGVtcyldXHJcbiAgKGFuZFxyXG4gICAoZXZlcnk/IChmbiogW3AxX180ODY1MSNdICg9ICg6b3AgcDFfXzQ4NjUxIykgOmNvbnN0KSkgaXRlbXMpXHJcbiAgICg9IChjb3VudCAoaW50byAje30gaXRlbXMpKSAoY291bnQgaXRlbXMpKSkpKVxyXG4ifSB7OnN5bSBzaGFkb3ctZGVwdGgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNoYWRvdy1kZXB0aFxyXG4gW3NdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbbmFtZSBpbmZvXX0gc11cclxuICAobG9vcFxyXG4gICBbZCAwIHs6a2V5cyBbc2hhZG93XX0gaW5mb11cclxuICAgKGNvbmRcclxuICAgIHNoYWRvd1xyXG4gICAgKHJlY3VyIChpbmMgZCkgc2hhZG93KVxyXG4gICAgKGZpbmQtbnMtc3RhcnRzLXdpdGggKHN0ciBuYW1lKSlcclxuICAgIChpbmMgZClcclxuICAgIDplbHNlXHJcbiAgICBkKSkpKVxyXG4ifSksIGNsanMuc291cmNlLW1hcC5iYXNlNjQgKHs6c3ltIGNoYXJzNjQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBjaGFyczY0XHJcbiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIilcclxuIn0gezpzeW0gY2hhci0+aW50LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBjaGFyLT5pbnQgKHppcG1hcCBjaGFyczY0IChyYW5nZSAwIDY0KSkpXHJcbiJ9IHs6c3ltIGludC0+Y2hhciwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgaW50LT5jaGFyICh6aXBtYXAgKHJhbmdlIDAgNjQpIGNoYXJzNjQpKVxyXG4ifSB7OnN5bSBlbmNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuY29kZVxyXG4gW25dXHJcbiAobGV0XHJcbiAgW2UgKGZpbmQgaW50LT5jaGFyIG4pXVxyXG4gIChpZlxyXG4gICBlXHJcbiAgIChzZWNvbmQgZSlcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgbikpKSkpKVxyXG4ifSB7OnN5bSBkZWNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlY29kZVxyXG4gW2NdXHJcbiAobGV0XHJcbiAgW2UgKGZpbmQgY2hhci0+aW50IGMpXVxyXG4gIChpZlxyXG4gICBlXHJcbiAgIChzZWNvbmQgZSlcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIk5vdCBhIHZhbGlkIGJhc2UgNjQgZGlnaXQ6IFwiIGMpKSkpKSlcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlci5pbXBsLnV0aWxzICh7OnN5bSByZWFkZXItY29uZGl0aW9uYWwsIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsLlxuICBJZiB0cnVlLCBzcGxpY2luZz8gaW5kaWNhdGVzIHJlYWQtY29uZC1zcGxpY2luZy4iLCA6YXJnbGlzdHMgKFtmb3JtIHNwbGljaW5nP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1jb25kaXRpb25hbFxyXG4gXCJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsLlxcbiAgSWYgdHJ1ZSwgc3BsaWNpbmc/IGluZGljYXRlcyByZWFkLWNvbmQtc3BsaWNpbmcuXCJcclxuIFtmb3JtIHNwbGljaW5nP11cclxuIChSZWFkZXJDb25kaXRpb25hbC4gc3BsaWNpbmc/IGZvcm0pKVxyXG4ifSB7OnN5bSB3aGl0ZXNwYWNlPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2UiLCA6YXJnbGlzdHMgKFtjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdoaXRlc3BhY2U/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2VcIlxyXG4gW2NoXVxyXG4gKHdoZW4tbm90IChuaWw/IGNoKSAoaWYgKGlkZW50aWNhbD8gY2ggXFwsKSB0cnVlICgudGVzdCB3cy1yeCBjaCkpKSlcclxuIn0gezpzeW0gY2hhci1jb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NoIGJhc2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFyLWNvZGVcclxuIFtjaCBiYXNlXVxyXG4gKGxldCBbY29kZSAoanMvcGFyc2VJbnQgY2ggYmFzZSldIChpZiAoanMvaXNOYU4gY29kZSkgLTEgY29kZSkpKVxyXG4ifSB7OnN5bSBsYXN0LWlkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBsYXN0LWlkIChhdG9tIDApKVxyXG4ifSB7OnN5bSBjaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGNoYXIgW3hdICh3aGVuLW5vdCAobmlsPyB4KSAoY2xqcy5jb3JlL2NoYXIgeCkpKVxyXG4ifSB7OnN5bSBudW1lcmljPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIG51bWVyaWMiLCA6YXJnbGlzdHMgKFtjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWVyaWM/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIG51bWVyaWNcIlxyXG4gW2NoXVxyXG4gKHdoZW4tbm90IChuaWw/IGNoKSAoZ3N0cmluZy9pc051bWVyaWMgY2gpKSlcclxuIn0gezpzeW0gc2Vjb25kJywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtbYSBiXV0pfSwgOnNvdXJjZSAiKGRlZm4gc2Vjb25kJyBbW2EgYl1dICh3aGVuLW5vdCBhIGIpKVxyXG4ifSB7OnN5bSBkZXN1Z2FyLW1ldGEsIDptZXRhIHs6ZG9jICJSZXNvbHZlcyBzeW50YWN0aWNhbCBzdWdhciBpbiBtZXRhZGF0YSIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXN1Z2FyLW1ldGFcclxuIFwiUmVzb2x2ZXMgc3ludGFjdGljYWwgc3VnYXIgaW4gbWV0YWRhdGFcIlxyXG4gW2ZdXHJcbiAoY29uZFxyXG4gIChrZXl3b3JkPyBmKVxyXG4gIHtmIHRydWV9XHJcbiAgKHN5bWJvbD8gZilcclxuICB7OnRhZyBmfVxyXG4gIChzdHJpbmc/IGYpXHJcbiAgezp0YWcgZn1cclxuICA6ZWxzZVxyXG4gIGYpKVxyXG4ifSB7OnN5bSBuZXh0LWlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gbmV4dC1pZCBbXSAoc3dhcCEgbGFzdC1pZCBpbmMpKVxyXG4ifSB7OnN5bSBleC1pbmZvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm4gZXgtaW5mbz8gW2V4XSAoaW5zdGFuY2U/IGNsanMuY29yZS5FeGNlcHRpb25JbmZvIGV4KSlcclxuIn0gezpzeW0gcmVhZGVyLWNvbmRpdGlvbmFsPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbCIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWNvbmRpdGlvbmFsP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWxcIlxyXG4gW3ZhbHVlXVxyXG4gKGluc3RhbmNlPyBSZWFkZXJDb25kaXRpb25hbCB2YWx1ZSkpXHJcbiJ9IHs6c3ltIG5ld2xpbmU/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmUiLCA6YXJnbGlzdHMgKFtjXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmV3bGluZT9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmVcIlxyXG4gW2NdXHJcbiAob3IgKGlkZW50aWNhbD8gXFxuZXdsaW5lIGMpIChpZGVudGljYWw/IFwiXFxuXCIgYykgKG5pbD8gYykpKVxyXG4ifSB7OnN5bSBuYW1lc3BhY2Uta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucyBrZXlzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmFtZXNwYWNlLWtleXNcclxuIFtucyBrZXlzXVxyXG4gKGZvclxyXG4gIFtrZXkga2V5c11cclxuICAoaWZcclxuICAgKG9yIChzeW1ib2w/IGtleSkgKGtleXdvcmQ/IGtleSkpXHJcbiAgIChsZXRcclxuICAgIFtba2V5LW5zIGtleS1uYW1lXVxyXG4gICAgICgoanV4dCBuYW1lc3BhY2UgbmFtZSkga2V5KVxyXG4gICAgIC0+a2V5XHJcbiAgICAgKGlmIChzeW1ib2w/IGtleSkgc3ltYm9sIGtleXdvcmQpXVxyXG4gICAgKGNvbmRcclxuICAgICAobmlsPyBrZXktbnMpXHJcbiAgICAgKC0+a2V5IG5zIGtleS1uYW1lKVxyXG4gICAgICg9IFwiX1wiIGtleS1ucylcclxuICAgICAoLT5rZXkga2V5LW5hbWUpXHJcbiAgICAgOmVsc2VcclxuICAgICBrZXkpKVxyXG4gICBrZXkpKSlcclxuIn0gezpzeW0gd3MtcngsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHdzLXJ4ICNcIltcXHNdXCIpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwuY2hhbm5lbHMgKHs6c3ltIGJveCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2YWxdKX0sIDpzb3VyY2UgIihkZWZuIGJveCBbdmFsXSAocmVpZnkgY2xqcy5jb3JlL0lEZXJlZiAoLWRlcmVmIFtfXSB2YWwpKSlcclxuIn0gezpzeW0gcHV0LWFjdGl2ZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYm94XSl9LCA6c291cmNlICIoZGVmbiBwdXQtYWN0aXZlPyBbYm94XSAoaW1wbC9hY3RpdmU/ICguLWhhbmRsZXIgYm94KSkpXHJcbiJ9IHs6c3ltIE1BWF9ESVJUWSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTUFYX0RJUlRZIDY0KVxyXG4ifSB7OnN5bSBhYm9ydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgTU1DfSB7OnN5bSBNTUMsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChhYm9ydCl9IHs6c3ltIGNoYW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbYnVmXSBbYnVmIHhmb3JtXSBbYnVmIHhmb3JtIGV4aF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYW5cclxuIChbYnVmXSAoY2hhbiBidWYgbmlsKSlcclxuIChbYnVmIHhmb3JtXSAoY2hhbiBidWYgeGZvcm0gbmlsKSlcclxuIChbYnVmIHhmb3JtIGV4aF1cclxuICAoTWFueVRvTWFueUNoYW5uZWwuXHJcbiAgIChidWZmZXJzL3JpbmctYnVmZmVyIDMyKVxyXG4gICAwXHJcbiAgIChidWZmZXJzL3JpbmctYnVmZmVyIDMyKVxyXG4gICAwXHJcbiAgIGJ1ZlxyXG4gICBmYWxzZVxyXG4gICAobGV0XHJcbiAgICBbYWRkISAoaWYgeGZvcm0gKHhmb3JtIGltcGwvYWRkISkgaW1wbC9hZGQhKV1cclxuICAgIChmblxyXG4gICAgIChbYnVmXSAodHJ5IChhZGQhIGJ1ZikgKGNhdGNoIDpkZWZhdWx0IHQgKGhhbmRsZSBidWYgZXhoIHQpKSkpXHJcbiAgICAgKFtidWYgdmFsXVxyXG4gICAgICAodHJ5IChhZGQhIGJ1ZiB2YWwpIChjYXRjaCA6ZGVmYXVsdCB0IChoYW5kbGUgYnVmIGV4aCB0KSkpKSkpKSkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwuZGlzcGF0Y2ggKHs6c3ltIHRhc2tzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB0YXNrcyAoYnVmZmVycy9yaW5nLWJ1ZmZlciAzMikpXHJcbiJ9IHs6c3ltIHJ1bm5pbmc/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBydW5uaW5nPyBmYWxzZSlcclxuIn0gezpzeW0gcXVldWVkPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcXVldWVkPyBmYWxzZSlcclxuIn0gezpzeW0gVEFTS19CQVRDSF9TSVpFLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBUQVNLX0JBVENIX1NJWkUgMTAyNClcclxuIn0gezpzeW0gcHJvY2Vzcy1tZXNzYWdlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm9jZXNzLW1lc3NhZ2VzXHJcbiBbXVxyXG4gKHNldCEgcnVubmluZz8gdHJ1ZSlcclxuIChzZXQhIHF1ZXVlZD8gZmFsc2UpXHJcbiAobG9vcFxyXG4gIFtjb3VudCAwXVxyXG4gIChsZXRcclxuICAgW20gKC5wb3AgdGFza3MpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChuaWw/IG0pXHJcbiAgICAobSlcclxuICAgICh3aGVuICg8IGNvdW50IFRBU0tfQkFUQ0hfU0laRSkgKHJlY3VyIChpbmMgY291bnQpKSkpKSlcclxuIChzZXQhIHJ1bm5pbmc/IGZhbHNlKVxyXG4gKHdoZW4gKD4gKC4tbGVuZ3RoIHRhc2tzKSAwKSAocXVldWUtZGlzcGF0Y2hlcikpKVxyXG4ifSB7OnN5bSBxdWV1ZS1kaXNwYXRjaGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1ZXVlLWRpc3BhdGNoZXJcclxuIFtdXHJcbiAod2hlbi1ub3RcclxuICAoYW5kIHF1ZXVlZD8gcnVubmluZz8pXHJcbiAgKHNldCEgcXVldWVkPyB0cnVlKVxyXG4gIChnb29nLmFzeW5jLm5leHRUaWNrIHByb2Nlc3MtbWVzc2FnZXMpKSlcclxuIn0gezpzeW0gcnVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuIHJ1biBbZl0gKC51bmJvdW5kZWQtdW5zaGlmdCB0YXNrcyBmKSAocXVldWUtZGlzcGF0Y2hlcikpXHJcbiJ9IHs6c3ltIHF1ZXVlLWRlbGF5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2YgZGVsYXldKX0sIDpzb3VyY2UgIihkZWZuIHF1ZXVlLWRlbGF5IFtmIGRlbGF5XSAoanMvc2V0VGltZW91dCBmIGRlbGF5KSlcclxuIn0pLCBwYXJlbi1zb3VwLmNvcmUgKHs6c3ltIGNhbi11bmRvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvcl0pfSwgOnNvdXJjZSAiKGRlZm4gY2FuLXVuZG8gW2VkaXRvcl0gKGNhbi11bmRvPyBlZGl0b3IpKVxyXG4ifSB7OnN5bSBzaG93LWVycm9yLW1lc3NhZ2UhLCA6bWV0YSB7OmRvYyAiU2hvd3MgYSBwb3B1cCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuIiwgOmFyZ2xpc3RzIChbcGFyZW50LWVsZW0gZXZlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaG93LWVycm9yLW1lc3NhZ2UhXHJcbiBcIlNob3dzIGEgcG9wdXAgd2l0aCBhbiBlcnJvciBtZXNzYWdlLlwiXHJcbiBbcGFyZW50LWVsZW0gZXZlbnRdXHJcbiAobGV0XHJcbiAgW2VsZW1cclxuICAgKC4tdGFyZ2V0IGV2ZW50KVxyXG4gICB4XHJcbiAgICguLWNsaWVudFggZXZlbnQpXHJcbiAgIHlcclxuICAgKC4tY2xpZW50WSBldmVudClcclxuICAgcG9wdXBcclxuICAgKC5jcmVhdGVFbGVtZW50IGpzL2RvY3VtZW50IFwiZGl2XCIpXVxyXG4gIChzZXQhICguLXRleHRDb250ZW50IHBvcHVwKSAoLT4gZWxlbSAuLWRhdGFzZXQgLi1tZXNzYWdlKSlcclxuICAoc2V0ISAoLi10b3AgKC4tc3R5bGUgcG9wdXApKSAoc3RyIHkgXCJweFwiKSlcclxuICAoc2V0ISAoLi1sZWZ0ICguLXN0eWxlIHBvcHVwKSkgKHN0ciB4IFwicHhcIikpXHJcbiAgKHNldCEgKC4tY2xhc3NOYW1lIHBvcHVwKSBcImVycm9yLXRleHRcIilcclxuICAoLmFwcGVuZENoaWxkIHBhcmVudC1lbGVtIHBvcHVwKSkpXHJcbiJ9IHs6c3ltIGZvY3VzZWQtdGV4dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGZvY3VzZWQtdGV4dCBbXSAoc29tZS0+IChkb20vZ2V0LWZvY3VzZWQtZm9ybSkgLi10ZXh0Q29udGVudCkpXHJcbiJ9IHs6c3ltIHNlbGVjdGVkLXRleHQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VsZWN0ZWQtdGV4dFxyXG4gW11cclxuIChsZXRcclxuICBbcyAoLT4ganMvd2luZG93IC5nZXRTZWxlY3Rpb24gLnRvU3RyaW5nKV1cclxuICAod2hlbi1ub3QgKGVtcHR5PyBzKSBzKSkpXHJcbiJ9IHs6c3ltIGNhbi1yZWRvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBjYW4tcmVkbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3JdKX0sIDpzb3VyY2UgIihkZWZuIGNhbi1yZWRvIFtlZGl0b3JdIChjYW4tcmVkbz8gZWRpdG9yKSlcclxuIn0gezpzeW0gcmFpbmJvdy1kZWxpbWl0ZXJzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBvZiBlbGVtZW50cyBhbmQgY2xhc3MgbmFtZXMuIiwgOmFyZ2xpc3RzIFtbcGFyZW50IGxldmVsXSBbcGFyZW50IGxldmVsIG1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYWluYm93LWRlbGltaXRlcnNcclxuIFwiUmV0dXJucyBhIG1hcCBvZiBlbGVtZW50cyBhbmQgY2xhc3MgbmFtZXMuXCJcclxuIChbcGFyZW50IGxldmVsXVxyXG4gIChwZXJzaXN0ZW50ISAocmFpbmJvdy1kZWxpbWl0ZXJzIHBhcmVudCBsZXZlbCAodHJhbnNpZW50IHt9KSkpKVxyXG4gKFtwYXJlbnQgbGV2ZWwgbV1cclxuICAocmVkdWNlXHJcbiAgIChmblxyXG4gICAgW20gZWxlbV1cclxuICAgIChsZXRcclxuICAgICBbY2xhc3NlcyAoLi1jbGFzc0xpc3QgZWxlbSldXHJcbiAgICAgKGNvbmRcclxuICAgICAgKC5jb250YWlucyBjbGFzc2VzIFwiZGVsaW1pdGVyXCIpXHJcbiAgICAgIChhc3NvYyEgbSBlbGVtIChzdHIgXCJyYWluYm93LVwiIChtb2QgbGV2ZWwgcmFpbmJvdy1jb3VudCkpKVxyXG4gICAgICAoLmNvbnRhaW5zIGNsYXNzZXMgXCJjb2xsZWN0aW9uXCIpXHJcbiAgICAgIChyYWluYm93LWRlbGltaXRlcnMgZWxlbSAoaW5jIGxldmVsKSBtKVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICBtKSkpXHJcbiAgIG1cclxuICAgKC0+IHBhcmVudCAuLWNoaWxkcmVuIGFycmF5LXNlcSkpKSlcclxuIn0gezpzeW0gdXAhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgYWx0P10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gcmVmcmVzaCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBzdGF0ZV0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gdW5kbyEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gcmVmcmVzaC1jdXJzb3ItcG9zaXRpb24hLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgezprZXlzIFtjcm9wcGVkLXN0YXRlXSwgOmFzIHN0YXRlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtY3Vyc29yLXBvc2l0aW9uIVxyXG4gW2NvbnRlbnQgezprZXlzIFtjcm9wcGVkLXN0YXRlXSwgOmFzIHN0YXRlfV1cclxuIChpZlxyXG4gIChzb21lLT4+IGNyb3BwZWQtc3RhdGUgOmVsZW1lbnQgKC5jb250YWlucyBjb250ZW50KSlcclxuICAoc29tZS0+XHJcbiAgIGNyb3BwZWQtc3RhdGVcclxuICAgOmVsZW1lbnRcclxuICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISAoOmN1cnNvci1wb3NpdGlvbiBjcm9wcGVkLXN0YXRlKSkpXHJcbiAgKGlmXHJcbiAgIChhbmQgKDpzZWxlY3Rpb24tY2hhbmdlPyBzdGF0ZSkgKDpvcmlnaW5hbC1jdXJzb3ItcG9zaXRpb24gc3RhdGUpKVxyXG4gICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hIGNvbnRlbnQgKDpvcmlnaW5hbC1jdXJzb3ItcG9zaXRpb24gc3RhdGUpKVxyXG4gICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hIGNvbnRlbnQgKDpjdXJzb3ItcG9zaXRpb24gc3RhdGUpKSkpKVxyXG4ifSB7OnN5bSBrZXktbmFtZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgdGhlIHN1cHBsaWVkIGtleSBldmVudCBpbnZvbHZlcyB0aGUga2V5KHMpIGRlc2NyaWJlZCBieSBrZXktbmFtZS4iLCA6YXJnbGlzdHMgKFtldmVudCBrZXktbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleS1uYW1lP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgdGhlIHN1cHBsaWVkIGtleSBldmVudCBpbnZvbHZlcyB0aGUga2V5KHMpIGRlc2NyaWJlZCBieSBrZXktbmFtZS5cIlxyXG4gW2V2ZW50IGtleS1uYW1lXVxyXG4gKGxldFxyXG4gIFtjb2RlIChrZXktY29kZSBldmVudCldXHJcbiAgKGNhc2VcclxuICAga2V5LW5hbWVcclxuICAgOnVuZG8tb3ItcmVkb1xyXG4gICAoYW5kIChvciAoLi1tZXRhS2V5IGV2ZW50KSAoLi1jdHJsS2V5IGV2ZW50KSkgKD0gY29kZSA5MCkpXHJcbiAgIDp0YWJcclxuICAgKD0gY29kZSA5KVxyXG4gICA6ZW50ZXJcclxuICAgKD0gY29kZSAxMylcclxuICAgOmFycm93c1xyXG4gICAoY29udGFpbnM/ICN7MzkgNDAgMzggMzd9IGNvZGUpXHJcbiAgIDp1cC1hcnJvd1xyXG4gICAoPSBjb2RlIDM4KVxyXG4gICA6ZG93bi1hcnJvd1xyXG4gICAoPSBjb2RlIDQwKVxyXG4gICA6Z2VuZXJhbFxyXG4gICAobm90XHJcbiAgICAob3JcclxuICAgICAoY29udGFpbnM/ICN7MCA5MSA5MyAxNyAxNiAxOH0gY29kZSlcclxuICAgICAoLi1jdHJsS2V5IGV2ZW50KVxyXG4gICAgICguLW1ldGFLZXkgZXZlbnQpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gZXZhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3IgZm9ybSBjYWxsYmFja10pfSwgOnNvdXJjZSAiKGRlZm4gZXZhbCBbZWRpdG9yIGZvcm0gY2FsbGJhY2tdIChldmFsISBlZGl0b3IgZm9ybSBjYWxsYmFjaykpXHJcbiJ9IHs6c3ltIGNoYW5uZWw/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gY2hhbm5lbD9cclxuIChmbipcclxuICBbcDFfXzQ5MDIzI11cclxuICAoaW5zdGFuY2U/XHJcbiAgIGNsanMuY29yZS5hc3luYy5pbXBsLmNoYW5uZWxzLk1hbnlUb01hbnlDaGFubmVsXHJcbiAgIHAxX180OTAyMyMpKSlcclxuIn0gezpzeW0gY3JlYXRlLWVkaXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcyBjb250ZW50IGV2ZW50cy1jaGFuIHs6a2V5cyBbaGlzdG9yeS1saW1pdCBhcHBlbmQtbGltaXQgY29tcGlsZXItZm4gY29uc29sZS1jYWxsYmFjayBkaXNhYmxlLWNsaj8gZWRpdC1oaXN0b3J5IGZvY3VzP10sIDpvciB7aGlzdG9yeS1saW1pdCAxMDAsIGFwcGVuZC1saW1pdCA1MDAwLCBmb2N1cz8gZmFsc2V9LCA6YXMgb3B0c31dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjcmVhdGUtZWRpdG9yXHJcbiBbcHNcclxuICBjb250ZW50XHJcbiAgZXZlbnRzLWNoYW5cclxuICB7OmtleXNcclxuICAgW2hpc3RvcnktbGltaXRcclxuICAgIGFwcGVuZC1saW1pdFxyXG4gICAgY29tcGlsZXItZm5cclxuICAgIGNvbnNvbGUtY2FsbGJhY2tcclxuICAgIGRpc2FibGUtY2xqP1xyXG4gICAgZWRpdC1oaXN0b3J5XHJcbiAgICBmb2N1cz9dLFxyXG4gICA6b3Ige2hpc3RvcnktbGltaXQgMTAwLCBhcHBlbmQtbGltaXQgNTAwMCwgZm9jdXM/IGZhbHNlfSxcclxuICAgOmFzIG9wdHN9XVxyXG4gKGxldFxyXG4gIFtjbGo/XHJcbiAgIChub3QgZGlzYWJsZS1jbGo/KVxyXG4gICBlZGl0b3I/XHJcbiAgIChub3QgY29uc29sZS1jYWxsYmFjaylcclxuICAgY29tcGlsZXItZm5cclxuICAgKG9yIGNvbXBpbGVyLWZuIChpci9jcmVhdGUtY29tcGlsZXItZm4gb3B0cykpXHJcbiAgICplZGl0LWhpc3RvcnlcclxuICAgKGRvdG9cclxuICAgIChvciBlZGl0LWhpc3RvcnkgKG13bS9jcmVhdGUtZWRpdC1oaXN0b3J5KSlcclxuICAgIChzd2FwISBhc3NvYyA6bGltaXQgaGlzdG9yeS1saW1pdCkpXHJcbiAgIHJlZnJlc2gtaW5zdGFyZXBsLXdpdGgtZGVsYXkhXHJcbiAgIChkZWJvdW5jZSByZWZyZXNoLWluc3RhcmVwbCEgMzAwKVxyXG4gICAqY29uc29sZS1oaXN0b3J5XHJcbiAgIChjb25zb2xlL2NyZWF0ZS1jb25zb2xlLWhpc3RvcnkpXHJcbiAgICpsYXN0LWhpZ2hsaWdodC1lbGVtXHJcbiAgIChhdG9tIG5pbClcclxuICAgKmFsbG93LXRhYj9cclxuICAgKGF0b20gZmFsc2UpXHJcbiAgICpmaXJzdC1yZWZyZXNoP1xyXG4gICAoYXRvbSB0cnVlKV1cclxuICAod2hlbi1ub3RcclxuICAgZWRpdG9yP1xyXG4gICAoc2V0LXZhbGlkYXRvciFcclxuICAgICplZGl0LWhpc3RvcnlcclxuICAgIChmblxyXG4gICAgIFt7OmtleXMgW2N1cnJlbnQtc3RhdGUgc3RhdGVzXX1dXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbc3RhdGUgKGdldCBzdGF0ZXMgY3VycmVudC1zdGF0ZSldXHJcbiAgICAgICgtPlxyXG4gICAgICAgc3RhdGVcclxuICAgICAgIDpjdXJzb3ItcG9zaXRpb25cclxuICAgICAgIGZpcnN0XHJcbiAgICAgICAoPj0gKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSkpKVxyXG4gICAgICB0cnVlKSkpKVxyXG4gIChyZWlmeVxyXG4gICBFZGl0b3JcclxuICAgKHVuZG8hXHJcbiAgICBbdGhpc11cclxuICAgIChzb21lLT4+ICplZGl0LWhpc3RvcnkgbXdtL3VuZG8hIChyZWZyZXNoISB0aGlzKSlcclxuICAgIChkb20vc2Nyb2xsLXRvLW5lYXJlc3QtZWxlbSkpXHJcbiAgIChyZWRvIVxyXG4gICAgW3RoaXNdXHJcbiAgICAoc29tZS0+PiAqZWRpdC1oaXN0b3J5IG13bS9yZWRvISAocmVmcmVzaCEgdGhpcykpXHJcbiAgICAoZG9tL3Njcm9sbC10by1uZWFyZXN0LWVsZW0pKVxyXG4gICAoY2FuLXVuZG8/IFt0aGlzXSAobXdtL2Nhbi11bmRvPyAqZWRpdC1oaXN0b3J5KSlcclxuICAgKGNhbi1yZWRvPyBbdGhpc10gKG13bS9jYW4tcmVkbz8gKmVkaXQtaGlzdG9yeSkpXHJcbiAgICh1cGRhdGUtY3Vyc29yLXBvc2l0aW9uIVxyXG4gICAgW3RoaXMgcG9zaXRpb25dXHJcbiAgICAodHJ5XHJcbiAgICAgKG13bS91cGRhdGUtY3Vyc29yLXBvc2l0aW9uISAqZWRpdC1oaXN0b3J5IHBvc2l0aW9uKVxyXG4gICAgIChjYXRjaFxyXG4gICAgICBqcy9FcnJvclxyXG4gICAgICBfXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoYXBwbHkgPSBwb3NpdGlvbilcclxuICAgICAgIChsZXRcclxuICAgICAgICBbc3RhcnQgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSldXHJcbiAgICAgICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISBjb250ZW50IFtzdGFydCBzdGFydF0pXHJcbiAgICAgICAgKG13bS91cGRhdGUtY3Vyc29yLXBvc2l0aW9uISAqZWRpdC1oaXN0b3J5IFtzdGFydCBzdGFydF0pKSkpKVxyXG4gICAgKHVwZGF0ZS1oaWdobGlnaHQhIGNvbnRlbnQgKmxhc3QtaGlnaGxpZ2h0LWVsZW0pKVxyXG4gICAocmVzZXQtZWRpdC1oaXN0b3J5IVxyXG4gICAgW3RoaXMgc3RhcnRdXHJcbiAgICAoY29uc29sZS91cGRhdGUtY29uc29sZS1zdGFydCEgKmNvbnNvbGUtaGlzdG9yeSBzdGFydClcclxuICAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgY29udGVudCBbc3RhcnQgc3RhcnRdKVxyXG4gICAgKGxldFxyXG4gICAgIFsqbmV3LWVkaXQtaGlzdG9yeVxyXG4gICAgICAobXdtL2NyZWF0ZS1lZGl0LWhpc3RvcnkpXHJcbiAgICAgIHN0YXRlXHJcbiAgICAgIHs6Y3Vyc29yLXBvc2l0aW9uIFtzdGFydCBzdGFydF0sIDp0ZXh0ICguLXRleHRDb250ZW50IGNvbnRlbnQpfV1cclxuICAgICAodXBkYXRlLWVkaXQtaGlzdG9yeSEgKm5ldy1lZGl0LWhpc3Rvcnkgc3RhdGUpXHJcbiAgICAgKHJlc2V0ISAqZWRpdC1oaXN0b3J5IEAqbmV3LWVkaXQtaGlzdG9yeSkpKVxyXG4gICAoYXBwZW5kLXRleHQhXHJcbiAgICBbdGhpcyB0ZXh0XVxyXG4gICAgKGxldFxyXG4gICAgIFtub2RlXHJcbiAgICAgICguY3JlYXRlVGV4dE5vZGUganMvZG9jdW1lbnQgdGV4dClcclxuICAgICAgX1xyXG4gICAgICAoLmFwcGVuZENoaWxkIGNvbnRlbnQgbm9kZSlcclxuICAgICAgYWxsLXRleHRcclxuICAgICAgKC4tdGV4dENvbnRlbnQgY29udGVudClcclxuICAgICAgY2hhci1jb3VudFxyXG4gICAgICAobWF4IDAgKC0gKGNvdW50IGFsbC10ZXh0KSBhcHBlbmQtbGltaXQpKVxyXG4gICAgICBuZXctYWxsLXRleHRcclxuICAgICAgKHN1YnMgYWxsLXRleHQgY2hhci1jb3VudClcclxuICAgICAgY2hhci1jb3VudFxyXG4gICAgICAoaWZcclxuICAgICAgICguZW5kc1dpdGggbmV3LWFsbC10ZXh0IFwiXFxuXCIpXHJcbiAgICAgICAoZGVjIChjb3VudCBuZXctYWxsLXRleHQpKVxyXG4gICAgICAgKGNvdW50IG5ldy1hbGwtdGV4dCkpXVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChub3Q9IGFsbC10ZXh0IG5ldy1hbGwtdGV4dClcclxuICAgICAgKHNldCEgKC4tdGV4dENvbnRlbnQgY29udGVudCkgbmV3LWFsbC10ZXh0KSlcclxuICAgICAocmVzZXQtZWRpdC1oaXN0b3J5ISB0aGlzIGNoYXItY291bnQpKSlcclxuICAgKGVudGVyIVxyXG4gICAgW3RoaXNdXHJcbiAgICAoaWZcclxuICAgICBlZGl0b3I/XHJcbiAgICAgKC5leGVjQ29tbWFuZCBqcy9kb2N1bWVudCBcImluc2VydEhUTUxcIiBmYWxzZSBcIlxcblwiKVxyXG4gICAgIChsZXRcclxuICAgICAgW3RleHRcclxuICAgICAgICh0cmltciAoLi10ZXh0Q29udGVudCBjb250ZW50KSlcclxuICAgICAgIHBvc3QtdGV4dFxyXG4gICAgICAgKHN1YnMgdGV4dCAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KSldXHJcbiAgICAgIChyZXNldC1lZGl0LWhpc3RvcnkhIHRoaXMgKGNvdW50IHRleHQpKVxyXG4gICAgICAoY29uc29sZS91cGRhdGUtY29uc29sZS1oaXN0b3J5ISAqY29uc29sZS1oaXN0b3J5IHBvc3QtdGV4dClcclxuICAgICAgKGNvbnNvbGUtY2FsbGJhY2sgcG9zdC10ZXh0KSkpKVxyXG4gICAodXAhXHJcbiAgICBbdGhpcyBhbHQ/XVxyXG4gICAgKGlmXHJcbiAgICAgYWx0P1xyXG4gICAgICh3aGVuLWxldFxyXG4gICAgICBbZWxlbSAoZG9tL2dldC1mb2N1c2VkLWZvcm0pXVxyXG4gICAgICAod2hlbi1sZXRcclxuICAgICAgIFtzdGF0ZSAobXdtL2dldC1jdXJyZW50LXN0YXRlICplZGl0LWhpc3RvcnkpXVxyXG4gICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgW2VsZW1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAoYW5kXHJcbiAgICAgICAgICAgKDpzZWxlY3Rpb24tY2hhbmdlPyBzdGF0ZSlcclxuICAgICAgICAgICAoPSBlbGVtIChzb21lLT4gc3RhdGUgOmNyb3BwZWQtc3RhdGUgOmVsZW1lbnQpKSlcclxuICAgICAgICAgIChkb20vZ2V0LXBhcmVudCBlbGVtIFwiY29sbGVjdGlvblwiKVxyXG4gICAgICAgICAgZWxlbSldXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbdGV4dCAoLi10ZXh0Q29udGVudCBlbGVtKSBwb3MgWzAgKGNvdW50IHRleHQpXV1cclxuICAgICAgICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISBlbGVtIHBvcylcclxuICAgICAgICAgKHVwZGF0ZS1lZGl0LWhpc3RvcnkhXHJcbiAgICAgICAgICAqZWRpdC1oaXN0b3J5XHJcbiAgICAgICAgICAoYXNzb2NcclxuICAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgICAgIDpzZWxlY3Rpb24tY2hhbmdlP1xyXG4gICAgICAgICAgIHRydWVcclxuICAgICAgICAgICA6Y3JvcHBlZC1zdGF0ZVxyXG4gICAgICAgICAgIHs6Y3Vyc29yLXBvc2l0aW9uIHBvcywgOnRleHQgdGV4dCwgOmVsZW1lbnQgZWxlbX0pKVxyXG4gICAgICAgICAodXBkYXRlLWhpZ2hsaWdodCEgY29udGVudCAqbGFzdC1oaWdobGlnaHQtZWxlbSkpKSkpXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIGVkaXRvcj9cclxuICAgICAgKGxldFxyXG4gICAgICAgW3RleHRcclxuICAgICAgICAoLi10ZXh0Q29udGVudCBjb250ZW50KVxyXG4gICAgICAgIHN0YXJ0XHJcbiAgICAgICAgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSlcclxuICAgICAgICBwcmUtdGV4dFxyXG4gICAgICAgIChzdWJzIHRleHQgMCAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KSlcclxuICAgICAgICBsaW5lXHJcbiAgICAgICAgKG9yIChjb25zb2xlL3VwISAqY29uc29sZS1oaXN0b3J5KSBcIlwiKVxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgezpjdXJzb3ItcG9zaXRpb24gW3N0YXJ0IHN0YXJ0XSxcclxuICAgICAgICAgOnRleHQgKHN0ciBwcmUtdGV4dCBsaW5lIFxcbmV3bGluZSl9XVxyXG4gICAgICAgKC0+PlxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgKHVwZGF0ZS1lZGl0LWhpc3RvcnkhICplZGl0LWhpc3RvcnkpXHJcbiAgICAgICAgKHJlZnJlc2ghIHRoaXMpKSkpKSlcclxuICAgKGRvd24hXHJcbiAgICBbdGhpcyBhbHQ/XVxyXG4gICAgKGlmXHJcbiAgICAgYWx0P1xyXG4gICAgICh3aGVuXHJcbiAgICAgICg6c2VsZWN0aW9uLWNoYW5nZT8gKG13bS9nZXQtY3VycmVudC1zdGF0ZSAqZWRpdC1oaXN0b3J5KSlcclxuICAgICAgKHVuZG8hIHRoaXMpKVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICBlZGl0b3I/XHJcbiAgICAgIChsZXRcclxuICAgICAgIFt0ZXh0XHJcbiAgICAgICAgKC4tdGV4dENvbnRlbnQgY29udGVudClcclxuICAgICAgICBzdGFydFxyXG4gICAgICAgIChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpXHJcbiAgICAgICAgcHJlLXRleHRcclxuICAgICAgICAoc3VicyB0ZXh0IDAgc3RhcnQpXHJcbiAgICAgICAgbGluZVxyXG4gICAgICAgIChvciAoY29uc29sZS9kb3duISAqY29uc29sZS1oaXN0b3J5KSBcIlwiKVxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgezpjdXJzb3ItcG9zaXRpb24gW3N0YXJ0IHN0YXJ0XSxcclxuICAgICAgICAgOnRleHQgKHN0ciBwcmUtdGV4dCBsaW5lIFxcbmV3bGluZSl9XVxyXG4gICAgICAgKC0+PlxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgKHVwZGF0ZS1lZGl0LWhpc3RvcnkhICplZGl0LWhpc3RvcnkpXHJcbiAgICAgICAgKHJlZnJlc2ghIHRoaXMpKSkpKSlcclxuICAgKHRhYiEgW3RoaXNdICh3aGVuIGVkaXRvcj8gKHJlc2V0ISAqYWxsb3ctdGFiPyB0cnVlKSkpXHJcbiAgIChyZWZyZXNoIVxyXG4gICAgW3RoaXMgc3RhdGVdXHJcbiAgICAobGV0XHJcbiAgICAgW3N0YXRlXHJcbiAgICAgIChjb25kXHJcbiAgICAgICAoOnNlbGVjdGlvbi1jaGFuZ2U/IHN0YXRlKVxyXG4gICAgICAgc3RhdGVcclxuICAgICAgIGVkaXRvcj9cclxuICAgICAgIChyZWZyZXNoLWNvbnRlbnQhIGNvbnRlbnQgc3RhdGUgY2xqPylcclxuICAgICAgIDplbHNlXHJcbiAgICAgICAocmVmcmVzaC1jb25zb2xlLWNvbnRlbnQhXHJcbiAgICAgICAgY29udGVudFxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSlcclxuICAgICAgICBjbGo/KSldXHJcbiAgICAgKHdoZW5cclxuICAgICAgKG9yIGZvY3VzPyAobm90IEAqZmlyc3QtcmVmcmVzaD8pKVxyXG4gICAgICAocmVmcmVzaC1jdXJzb3ItcG9zaXRpb24hIGNvbnRlbnQgc3RhdGUpKVxyXG4gICAgICh3aGVuIGNsaj8gKHJlZnJlc2gtZXJyb3JzLWFuZC1kZWxpbWl0ZXJzISBjb250ZW50IGV2ZW50cy1jaGFuKSlcclxuICAgICAod2hlblxyXG4gICAgICBlZGl0b3I/XHJcbiAgICAgIChzb21lLT5cclxuICAgICAgICgucXVlcnlTZWxlY3RvciBwcyBcIi5udW1iZXJzXCIpXHJcbiAgICAgICAocmVmcmVzaC1udW1iZXJzISAoY291bnQgKHJlLXNlcSAjXCJcXG5cIiAoOnRleHQgc3RhdGUpKSkpKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgY2xqP1xyXG4gICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgW2VsZW0gKC5xdWVyeVNlbGVjdG9yIHBzIFwiLmluc3RhcmVwbFwiKV1cclxuICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgKC0+IGVsZW0gLi1zdHlsZSAuLWRpc3BsYXkgKD0gXCJub25lXCIpKVxyXG4gICAgICAgICAocmVmcmVzaC1pbnN0YXJlcGwtd2l0aC1kZWxheSFcclxuICAgICAgICAgIGVsZW1cclxuICAgICAgICAgIGNvbnRlbnRcclxuICAgICAgICAgIGNvbXBpbGVyLWZuXHJcbiAgICAgICAgICBhcHBlbmQtbGltaXQpKSkpKVxyXG4gICAgICh1cGRhdGUtaGlnaGxpZ2h0ISBjb250ZW50ICpsYXN0LWhpZ2hsaWdodC1lbGVtKSkpXHJcbiAgIChlZGl0LWFuZC1yZWZyZXNoIVxyXG4gICAgW3RoaXMgc3RhdGVdXHJcbiAgICAoLT4+XHJcbiAgICAgc3RhdGVcclxuICAgICAoYWRkLW5ld2xpbmUpXHJcbiAgICAgKGFkZC1wYXJpbmZlciBjbGo/IChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpKVxyXG4gICAgICh1cGRhdGUtZWRpdC1oaXN0b3J5ISAqZWRpdC1oaXN0b3J5KVxyXG4gICAgIChyZWZyZXNoISB0aGlzKSkpXHJcbiAgIChpbml0aWFsaXplIVxyXG4gICAgW3RoaXNdXHJcbiAgICAod2hlblxyXG4gICAgIGVkaXRvcj9cclxuICAgICAoLT4+IChpbml0LXN0YXRlIGNvbnRlbnQgZmFsc2UgZmFsc2UpIChlZGl0LWFuZC1yZWZyZXNoISB0aGlzKSkpXHJcbiAgICAocmVzZXQhICpmaXJzdC1yZWZyZXNoPyBmYWxzZSkpXHJcbiAgIChyZWZyZXNoLWFmdGVyLWtleS1ldmVudCFcclxuICAgIFt0aGlzIGV2ZW50XVxyXG4gICAgKGxldFxyXG4gICAgIFt0YWI/XHJcbiAgICAgIChrZXktbmFtZT8gZXZlbnQgOnRhYilcclxuICAgICAgc3RhdGVcclxuICAgICAgKGluaXQtc3RhdGUgY29udGVudCBlZGl0b3I/IHRhYj8pXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAoYW5kIHRhYj8gKG5vdCBAKmFsbG93LXRhYj8pKVxyXG4gICAgICAoZWRpdC1hbmQtcmVmcmVzaCFcclxuICAgICAgIHRoaXNcclxuICAgICAgIChjYXNlXHJcbiAgICAgICAgKGtleS1jb2RlIGV2ZW50KVxyXG4gICAgICAgIDEzXHJcbiAgICAgICAgKGFzc29jIHN0YXRlIDppbmRlbnQtdHlwZSA6cmV0dXJuKVxyXG4gICAgICAgIDlcclxuICAgICAgICAoYXNzb2NcclxuICAgICAgICAgc3RhdGVcclxuICAgICAgICAgOmluZGVudC10eXBlXHJcbiAgICAgICAgIChpZiAoLi1zaGlmdEtleSBldmVudCkgOmJhY2sgOmZvcndhcmQpKVxyXG4gICAgICAgIChhc3NvYyBzdGF0ZSA6aW5kZW50LXR5cGUgOm5vcm1hbCkpKSlcclxuICAgICAod2hlbiB0YWI/IChyZXNldCEgKmFsbG93LXRhYj8gZmFsc2UpKSkpXHJcbiAgIChyZWZyZXNoLWFmdGVyLWN1dC1wYXN0ZSFcclxuICAgIFt0aGlzXVxyXG4gICAgKGVkaXQtYW5kLXJlZnJlc2ghXHJcbiAgICAgdGhpc1xyXG4gICAgIChhc3NvYyAoaW5pdC1zdGF0ZSBjb250ZW50IGZhbHNlIGZhbHNlKSA6aW5kZW50LXR5cGUgOm5vcm1hbCkpKVxyXG4gICAoZXZhbCFcclxuICAgIFt0aGlzIGZvcm0gY2FsbGJhY2tdXHJcbiAgICAoY29tcGlsZXItZm5cclxuICAgICBbZm9ybV1cclxuICAgICAoZm4qIFtwMV9fNDkwMzIjXSAoY2FsbGJhY2sgKGZpcnN0IHAxX180OTAzMiMpKSkpKSkpKVxyXG4ifSB7OnN5bSBrZXktY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtldmVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleS1jb2RlXHJcbiBbZXZlbnRdXHJcbiAobGV0IFtjb2RlICguLWtleUNvZGUgZXZlbnQpXSAoaWYgKHBvcz8gY29kZSkgY29kZSAoLi13aGljaCBldmVudCkpKSlcclxuIn0gezpzeW0gcmVkbyEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gdGFiISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSB0cmFuc2llbnQtbWFwPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHRyYW5zaWVudC1tYXA/XHJcbiAoZm4qXHJcbiAgW3AxX180OTAyNCNdXHJcbiAgKG9yXHJcbiAgIChpbnN0YW5jZT8gY2xqcy5jb3JlL1RyYW5zaWVudEFycmF5TWFwIHAxX180OTAyNCMpXHJcbiAgIChpbnN0YW5jZT8gY2xqcy5jb3JlL1RyYW5zaWVudEhhc2hNYXAgcDFfXzQ5MDI0IykpKSlcclxuIn0gezpzeW0gcmVmcmVzaC1jb250ZW50LWVsZW1lbnQhLCA6bWV0YSB7OmRvYyAiUmVwbGFjZXMgYSBzaW5nbGUgbm9kZSBpbiB0aGUgY29udGVudCwgYW5kIHNpYmxpbmdzIGlmIG5lY2Vzc2FyeS4iLCA6YXJnbGlzdHMgKFt7OmtleXMgW2VsZW1lbnQgdGV4dF0sIDphcyBjcm9wcGVkLXN0YXRlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtY29udGVudC1lbGVtZW50IVxyXG4gXCJSZXBsYWNlcyBhIHNpbmdsZSBub2RlIGluIHRoZSBjb250ZW50LCBhbmQgc2libGluZ3MgaWYgbmVjZXNzYXJ5LlwiXHJcbiBbezprZXlzIFtlbGVtZW50IHRleHRdLCA6YXMgY3JvcHBlZC1zdGF0ZX1dXHJcbiAobGV0XHJcbiAgW3BhcmVudFxyXG4gICAoLi1wYXJlbnRFbGVtZW50IGVsZW1lbnQpXHJcbiAgIGxhc3QtZWxlbVxyXG4gICAoLi1sYXN0Q2hpbGQgcGFyZW50KVxyXG4gICBsYXN0LWVycm9yXHJcbiAgIChsb29wXHJcbiAgICBbY3VycmVudC1lbGVtIGxhc3QtZWxlbV1cclxuICAgIChjb25kXHJcbiAgICAgKGRvbS9lcnJvci1ub2RlPyBjdXJyZW50LWVsZW0pXHJcbiAgICAgY3VycmVudC1lbGVtXHJcbiAgICAgKG9yIChuaWw/IGN1cnJlbnQtZWxlbSkgKD0gZWxlbWVudCBjdXJyZW50LWVsZW0pKVxyXG4gICAgIG5pbFxyXG4gICAgIDplbHNlXHJcbiAgICAgKHJlY3VyICguLXByZXZpb3VzU2libGluZyBjdXJyZW50LWVsZW0pKSkpXHJcbiAgIGxhc3QtZWxlbS10by1yZWZyZXNoXHJcbiAgICh3aGVuXHJcbiAgICBsYXN0LWVycm9yXHJcbiAgICAobG9vcFxyXG4gICAgIFtjdXJyZW50LWVsZW0gbGFzdC1lcnJvcl1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtzaWJsaW5nICguLW5leHRTaWJsaW5nIGN1cnJlbnQtZWxlbSldXHJcbiAgICAgIChpZiAoZG9tL2NvbGwtbm9kZT8gc2libGluZykgY3VycmVudC1lbGVtIChyZWN1ciBzaWJsaW5nKSlcclxuICAgICAgY3VycmVudC1lbGVtKSkpXHJcbiAgIG9sZC1lbGVtc1xyXG4gICAobG9vcFxyXG4gICAgW2VsZW1zIFtlbGVtZW50XSBjdXJyZW50LWVsZW0gZWxlbWVudF1cclxuICAgIChjb25kXHJcbiAgICAgKD0gbGFzdC1lbGVtLXRvLXJlZnJlc2ggY3VycmVudC1lbGVtKVxyXG4gICAgIGVsZW1zXHJcbiAgICAgKG9yIChzb21lPyBsYXN0LWVsZW0tdG8tcmVmcmVzaCkgKGRvbS90ZXh0LW5vZGU/IGN1cnJlbnQtZWxlbSkpXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbc2libGluZyAoLi1uZXh0U2libGluZyBjdXJyZW50LWVsZW0pXVxyXG4gICAgICAocmVjdXIgKGNvbmogZWxlbXMgc2libGluZykgc2libGluZylcclxuICAgICAgZWxlbXMpXHJcbiAgICAgOmVsc2VcclxuICAgICBlbGVtcykpXHJcbiAgIF9cclxuICAgKHNldCEgKC4tdGV4dENvbnRlbnQgZWxlbWVudCkgdGV4dClcclxuICAgdGV4dFxyXG4gICAoam9pbiAobWFwIChmbiogW3AxX180OTAzMCNdICguLXRleHRDb250ZW50IHAxX180OTAzMCMpKSBvbGQtZWxlbXMpKVxyXG4gICB0ZW1wLWVsZW1cclxuICAgKC5jcmVhdGVFbGVtZW50IGpzL2RvY3VtZW50IFwic3BhblwiKVxyXG4gICBfXHJcbiAgIChzZXQhICguLWlubmVySFRNTCB0ZW1wLWVsZW0pIChocy9jb2RlLT5odG1sIHRleHQpKVxyXG4gICBuZXctZWxlbXNcclxuICAgKGRvYWxsXHJcbiAgICAoZm9yXHJcbiAgICAgW2kgKHJhbmdlICgtPiB0ZW1wLWVsZW0gLi1jaGlsZE5vZGVzIC4tbGVuZ3RoKSldXHJcbiAgICAgKC0+IHRlbXAtZWxlbSAuLWNoaWxkTm9kZXMgKC5pdGVtIGkpKSkpXVxyXG4gIChkb3NlcSBbbmV3LWVsZW0gbmV3LWVsZW1zXSAoLmluc2VydEJlZm9yZSBwYXJlbnQgbmV3LWVsZW0gZWxlbWVudCkpXHJcbiAgKGRvc2VxIFtvbGQtZWxlbSBvbGQtZWxlbXNdICgucmVtb3ZlQ2hpbGQgcGFyZW50IG9sZC1lbGVtKSlcclxuICAoYXNzb2MgY3JvcHBlZC1zdGF0ZSA6ZWxlbWVudCAoZmlyc3QgbmV3LWVsZW1zKSkpKVxyXG4ifSB7OnN5bSBlbGVtPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZWxlbT8gKGZuKiBbcDFfXzQ5MDI1I10gKGluc3RhbmNlPyBqcy9FbGVtZW50IHAxX180OTAyNSMpKSlcclxuIn0gezpzeW0gZW50ZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGFwcGVuZC10ZXh0ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIHRleHRdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGxpbmUtbnVtYmVycywgOm1ldGEgezpkb2MgIkFkZHMgbGluZSBudW1iZXJzIHRvIHRoZSBudW1iZXJzLiIsIDphcmdsaXN0cyAoW2xpbmUtY291bnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLW51bWJlcnNcclxuIFwiQWRkcyBsaW5lIG51bWJlcnMgdG8gdGhlIG51bWJlcnMuXCJcclxuIFtsaW5lLWNvdW50XVxyXG4gKGpvaW4gKGZvciBbaSAocmFuZ2UgbGluZS1jb3VudCldIChzdHIgXCI8ZGl2PlwiIChpbmMgaSkgXCI8L2Rpdj5cIikpKSlcclxuIn0gezpzeW0gdXBkYXRlLWhpZ2hsaWdodCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCAqbGFzdC1lbGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWhpZ2hsaWdodCFcclxuIFtjb250ZW50ICpsYXN0LWVsZW1dXHJcbiAod2hlbi1sZXRcclxuICBbZWxlbSBAKmxhc3QtZWxlbV1cclxuICAoc2V0ISAoLi1iYWNrZ3JvdW5kQ29sb3IgKC4tc3R5bGUgZWxlbSkpIG5pbClcclxuICAocmVzZXQhICpsYXN0LWVsZW0gbmlsKSlcclxuICh3aGVuLWxldFxyXG4gIFtlbGVtIChkb20vZ2V0LWZvY3VzZWQtZm9ybSldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtjb2xvclxyXG4gICAgKC5nZXRQcm9wZXJ0eVZhbHVlXHJcbiAgICAgKC5nZXRDb21wdXRlZFN0eWxlIGpzL3dpbmRvdyAoLi1maXJzdENoaWxkIGVsZW0pKVxyXG4gICAgIFwiY29sb3JcIildXHJcbiAgIChsZXRcclxuICAgIFtuZXctY29sb3IgKC0+IGNvbG9yIChyZXBsYWNlICNcInJnYlxcKFwiIFwiXCIpIChyZXBsYWNlICNcIlxcKVwiIFwiXCIpKV1cclxuICAgIChzZXQhXHJcbiAgICAgKC4tYmFja2dyb3VuZENvbG9yICguLXN0eWxlIGVsZW0pKVxyXG4gICAgIChzdHIgXCJyZ2JhKFwiIG5ldy1jb2xvciBcIiwgMC4xKVwiKSlcclxuICAgIChyZXNldCEgKmxhc3QtZWxlbSBlbGVtKSkpKSlcclxuIn0gezpzeW0gaW5pdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcyBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdFxyXG4gW3BzIG9wdHNdXHJcbiAoLmluaXQganMvcmFuZ3kpXHJcbiAobGV0XHJcbiAgW29wdHNcclxuICAgKGpzLT5jbGogb3B0cyA6a2V5d29yZGl6ZS1rZXlzIHRydWUpXHJcbiAgIGNvbnRlbnRcclxuICAgKC5xdWVyeVNlbGVjdG9yIHBzIFwiLmNvbnRlbnRcIilcclxuICAgZXZlbnRzLWNoYW5cclxuICAgKGNoYW4pXHJcbiAgIGVkaXRvclxyXG4gICAoY3JlYXRlLWVkaXRvciBwcyBjb250ZW50IGV2ZW50cy1jaGFuIG9wdHMpXVxyXG4gIChzZXQhICguLXNwZWxsY2hlY2sgcHMpIGZhbHNlKVxyXG4gICh3aGVuLW5vdFxyXG4gICBjb250ZW50XHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIFwiQ2FuJ3QgZmluZCBhIGRpdiB3aXRoIGNsYXNzICdjb250ZW50J1wiKSkpXHJcbiAgKGluaXRpYWxpemUhIGVkaXRvcilcclxuICAoYWRkLWV2ZW50LWxpc3RlbmVycyEgY29udGVudCBldmVudHMtY2hhbiBvcHRzKVxyXG4gIChnb1xyXG4gICAod2hpbGVcclxuICAgIHRydWVcclxuICAgIChsZXRcclxuICAgICBbZXZlbnQgKDwhIGV2ZW50cy1jaGFuKV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKHNvbWUtPlxyXG4gICAgICAgb3B0c1xyXG4gICAgICAgOmJlZm9yZS1jaGFuZ2UtY2FsbGJhY2tcclxuICAgICAgICgoZm4qIFtwMV9fNDkwMzcjXSAocDFfXzQ5MDM3IyBldmVudCkpKSlcclxuICAgICAgKGNhc2VcclxuICAgICAgICguLXR5cGUgZXZlbnQpXHJcbiAgICAgICBcImtleWRvd25cIlxyXG4gICAgICAgKGNvbmRcclxuICAgICAgICAoYW5kXHJcbiAgICAgICAgIChrZXktbmFtZT8gZXZlbnQgOnVuZG8tb3ItcmVkbylcclxuICAgICAgICAgKC0+IG9wdHMgOmRpc2FibGUtdW5kby1yZWRvPyBub3QpKVxyXG4gICAgICAgIChpZiAoLi1zaGlmdEtleSBldmVudCkgKHJlZG8hIGVkaXRvcikgKHVuZG8hIGVkaXRvcikpXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6ZW50ZXIpXHJcbiAgICAgICAgKGVudGVyISBlZGl0b3IpXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6dXAtYXJyb3cpXHJcbiAgICAgICAgKHVwISBlZGl0b3IgKC4tYWx0S2V5IGV2ZW50KSlcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDpkb3duLWFycm93KVxyXG4gICAgICAgIChkb3duISBlZGl0b3IgKC4tYWx0S2V5IGV2ZW50KSlcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDp0YWIpXHJcbiAgICAgICAgKHRhYiEgZWRpdG9yKSlcclxuICAgICAgIFwia2V5dXBcIlxyXG4gICAgICAgKGNvbmRcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDphcnJvd3MpXHJcbiAgICAgICAgKHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hXHJcbiAgICAgICAgIGVkaXRvclxyXG4gICAgICAgICAoZG9tL2dldC1jdXJzb3ItcG9zaXRpb24gY29udGVudCBmYWxzZSkpXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6Z2VuZXJhbClcclxuICAgICAgICAocmVmcmVzaC1hZnRlci1rZXktZXZlbnQhIGVkaXRvciBldmVudCkpXHJcbiAgICAgICBcImN1dFwiXHJcbiAgICAgICAocmVmcmVzaC1hZnRlci1jdXQtcGFzdGUhIGVkaXRvcilcclxuICAgICAgIFwicGFzdGVcIlxyXG4gICAgICAgKHJlZnJlc2gtYWZ0ZXItY3V0LXBhc3RlISBlZGl0b3IpXHJcbiAgICAgICBcIm1vdXNldXBcIlxyXG4gICAgICAgKHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hXHJcbiAgICAgICAgZWRpdG9yXHJcbiAgICAgICAgKGRvbS9nZXQtY3Vyc29yLXBvc2l0aW9uXHJcbiAgICAgICAgIGNvbnRlbnRcclxuICAgICAgICAgKHNvbWU/ICg6Y29uc29sZS1jYWxsYmFjayBvcHRzKSkpKVxyXG4gICAgICAgXCJtb3VzZWVudGVyXCJcclxuICAgICAgIChzaG93LWVycm9yLW1lc3NhZ2UhIHBzIGV2ZW50KVxyXG4gICAgICAgXCJtb3VzZWxlYXZlXCJcclxuICAgICAgIChoaWRlLWVycm9yLW1lc3NhZ2VzISBwcylcclxuICAgICAgIG5pbClcclxuICAgICAgKHNvbWUtPlxyXG4gICAgICAgb3B0c1xyXG4gICAgICAgOmNoYW5nZS1jYWxsYmFja1xyXG4gICAgICAgKChmbiogW3AxX180OTAzOCNdIChwMV9fNDkwMzgjIGV2ZW50KSkpKSkpKSlcclxuICBlZGl0b3IpKVxyXG4ifSB7OnN5bSBjYW4tdW5kbz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gcmVmcmVzaC1jb250ZW50ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50IHN0YXRlIGNsaj9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWNvbnRlbnQhXHJcbiBbY29udGVudCBzdGF0ZSBjbGo/XVxyXG4gKGlmLW5vdFxyXG4gIGNsaj9cclxuICAoZG9cclxuICAgKHNldCEgKC4taW5uZXJIVE1MIGNvbnRlbnQpIChocy9lc2NhcGUtaHRtbC1zdHIgKDp0ZXh0IHN0YXRlKSkpXHJcbiAgIHN0YXRlKVxyXG4gIChpZi1sZXRcclxuICAgW2Nyb3AgKHNvbWUtPiBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSByZWZyZXNoLWNvbnRlbnQtZWxlbWVudCEpXVxyXG4gICAoaWZcclxuICAgIChub3Q9ICg6dGV4dCBzdGF0ZSkgKC4tdGV4dENvbnRlbnQgY29udGVudCkpXHJcbiAgICAocmVmcmVzaC1jb250ZW50ISBjb250ZW50IChkaXNzb2Mgc3RhdGUgOmNyb3BwZWQtc3RhdGUpIGNsaj8pXHJcbiAgICAoYXNzb2Mgc3RhdGUgOmNyb3BwZWQtc3RhdGUgY3JvcCkpXHJcbiAgIChkb1xyXG4gICAgKHNldCEgKC4taW5uZXJIVE1MIGNvbnRlbnQpIChocy9jb2RlLT5odG1sICg6dGV4dCBzdGF0ZSkpKVxyXG4gICAgKGRpc3NvYyBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSkpKSkpXHJcbiJ9IHs6c3ltIHJlZG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yXSl9LCA6c291cmNlICIoZGVmbiByZWRvIFtlZGl0b3JdIChyZWRvISBlZGl0b3IpKVxyXG4ifSB7OnN5bSBkZWJvdW5jZS1mdW5jdGlvbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmIG1pbGxpc10pfSwgOnNvdXJjZSAiKGRlZm4gZGVib3VuY2UtZnVuY3Rpb24gW2YgbWlsbGlzXSAoZGVib3VuY2UgZiBtaWxsaXMpKVxyXG4ifSB7OnN5bSByZWZyZXNoLWluc3RhcmVwbCEsIDptZXRhIHs6ZG9jICJSZWZyZXNoZXMgdGhlIEluc3RhUkVQTC4iLCA6YXJnbGlzdHMgKFtpbnN0YXJlcGwgY29udGVudCBjb21waWxlci1mbiBsaW1pdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtaW5zdGFyZXBsIVxyXG4gXCJSZWZyZXNoZXMgdGhlIEluc3RhUkVQTC5cIlxyXG4gW2luc3RhcmVwbCBjb250ZW50IGNvbXBpbGVyLWZuIGxpbWl0XVxyXG4gKGxldFxyXG4gIFtlbGVtc1xyXG4gICAoaXIvZ2V0LWNvbGxlY3Rpb25zIGNvbnRlbnQpXHJcbiAgIGxvY2F0aW9uc1xyXG4gICAoaXIvZWxlbXMtPmxvY2F0aW9ucyBlbGVtcyAoLi1vZmZzZXRUb3AgaW5zdGFyZXBsKSlcclxuICAgZm9ybXNcclxuICAgKC0+PlxyXG4gICAgZWxlbXNcclxuICAgIChtYXAgaXIvY29sbGVjdGlvbi0+Y29udGVudClcclxuICAgIChtYXAgKGZuKiBbcDFfXzQ5MDI3I10gKHJlcGxhY2UgcDFfXzQ5MDI3IyBcXMKgIFwiIFwiKSkpKV1cclxuICAoY29tcGlsZXItZm5cclxuICAgZm9ybXNcclxuICAgKGZuXHJcbiAgICBbcmVzdWx0c11cclxuICAgICh3aGVuXHJcbiAgICAgKC4tcGFyZW50RWxlbWVudCBpbnN0YXJlcGwpXHJcbiAgICAgKHNldCFcclxuICAgICAgKC4taW5uZXJIVE1MIGluc3RhcmVwbClcclxuICAgICAgKGlyL3Jlc3VsdHMtPmh0bWwgcmVzdWx0cyBsb2NhdGlvbnMgbGltaXQpKSkpKSkpXHJcbiJ9IHs6c3ltIGVkaXQtYW5kLXJlZnJlc2ghLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgc3RhdGVdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHJhaW5ib3ctY291bnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHJhaW5ib3ctY291bnQgNSlcclxuIn0gezpzeW0gdXBkYXRlLWN1cnNvci1wb3NpdGlvbiEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBwb3NpdGlvbl0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gaW5pdC1zdGF0ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGVkaXRvcidzIHN0YXRlLiBJZiBmdWxsLXNlbGVjdGlvbj8gaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gc2F2ZVxudGhlIGVudGlyZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4ganVzdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiIsIDphcmdsaXN0cyAoW2NvbnRlbnQgY3JvcD8gZnVsbC1zZWxlY3Rpb24/XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1zdGF0ZVxyXG4gXCJSZXR1cm5zIHRoZSBlZGl0b3IncyBzdGF0ZS4gSWYgZnVsbC1zZWxlY3Rpb24/IGlzIHRydWUsIGl0IHdpbGwgdHJ5IHRvIHNhdmVcXG50aGUgZW50aXJlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJzb3IgcG9zaXRpb24uXCJcclxuIFtjb250ZW50IGNyb3A/IGZ1bGwtc2VsZWN0aW9uP11cclxuIChsZXRcclxuICBbc2VsZWN0aW9uXHJcbiAgICguZ2V0U2VsZWN0aW9uIGpzL3Jhbmd5KVxyXG4gICBhbmNob3JcclxuICAgKC4tYW5jaG9yTm9kZSBzZWxlY3Rpb24pXHJcbiAgIGZvY3VzXHJcbiAgICguLWZvY3VzTm9kZSBzZWxlY3Rpb24pXHJcbiAgIHBhcmVudFxyXG4gICAod2hlbiAoYW5kIGFuY2hvciBmb2N1cykgKGRvbS9jb21tb24tYW5jZXN0b3IgYW5jaG9yIGZvY3VzKSlcclxuICAgc3RhdGVcclxuICAgezpjdXJzb3ItcG9zaXRpb25cclxuICAgICgtPiBjb250ZW50IChkb20vZ2V0LXNlbGVjdGlvbiBmdWxsLXNlbGVjdGlvbj8pIDpjdXJzb3ItcG9zaXRpb24pLFxyXG4gICAgOnRleHQgKC4tdGV4dENvbnRlbnQgY29udGVudCl9XVxyXG4gIChpZi1sZXRcclxuICAgW2Nyb3BwZWQtc2VsZWN0aW9uIChzb21lLT4gcGFyZW50IChkb20vZ2V0LXNlbGVjdGlvbiBmYWxzZSkpXVxyXG4gICAoaWZcclxuICAgIGNyb3A/XHJcbiAgICAoYXNzb2NcclxuICAgICBzdGF0ZVxyXG4gICAgIDpjcm9wcGVkLXN0YXRlXHJcbiAgICAgKGFzc29jIGNyb3BwZWQtc2VsZWN0aW9uIDp0ZXh0ICguLXRleHRDb250ZW50IHBhcmVudCkpKVxyXG4gICAgc3RhdGUpXHJcbiAgIHN0YXRlKSkpXHJcbiJ9IHs6c3ltIGV2YWwhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgZm9ybSBjYWxsYmFja10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gYWRkLXBhcmluZmVyLWFmdGVyLWNvbnNvbGUtc3RhcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29uc29sZS1zdGFydC1udW0gc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtcGFyaW5mZXItYWZ0ZXItY29uc29sZS1zdGFydFxyXG4gW2NvbnNvbGUtc3RhcnQtbnVtIHN0YXRlXVxyXG4gKGxldFxyXG4gIFtwcmUtdGV4dFxyXG4gICAoc3VicyAoOnRleHQgc3RhdGUpIDAgY29uc29sZS1zdGFydC1udW0pXHJcbiAgIHBvc3QtdGV4dFxyXG4gICAoc3VicyAoOnRleHQgc3RhdGUpIGNvbnNvbGUtc3RhcnQtbnVtKVxyXG4gICBjbGVhcmVkLXRleHRcclxuICAgKHN0ciAocmVwbGFjZSBwcmUtdGV4dCAjXCJbXlxccl5cXG5dXCIgXCIgXCIpIHBvc3QtdGV4dClcclxuICAgdGVtcC1zdGF0ZVxyXG4gICAoYXNzb2Mgc3RhdGUgOnRleHQgY2xlYXJlZC10ZXh0KVxyXG4gICB0ZW1wLXN0YXRlXHJcbiAgIChjcC9hZGQtcGFyaW5mZXIgOmJvdGggdGVtcC1zdGF0ZSlcclxuICAgbmV3LXRleHRcclxuICAgKHN0ciBwcmUtdGV4dCAoc3VicyAoOnRleHQgdGVtcC1zdGF0ZSkgY29uc29sZS1zdGFydC1udW0pKV1cclxuICAoYXNzb2Mgc3RhdGUgOnRleHQgbmV3LXRleHQpKSlcclxuIn0gezpzeW0gcmVmcmVzaC1udW1iZXJzISwgOm1ldGEgezpkb2MgIlJlZnJlc2hlcyB0aGUgbGluZSBudW1iZXJzLiIsIDphcmdsaXN0cyAoW251bWJlcnMgbGluZS1jb3VudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtbnVtYmVycyFcclxuIFwiUmVmcmVzaGVzIHRoZSBsaW5lIG51bWJlcnMuXCJcclxuIFtudW1iZXJzIGxpbmUtY291bnRdXHJcbiAoc2V0ISAoLi1pbm5lckhUTUwgbnVtYmVycykgKGxpbmUtbnVtYmVycyBsaW5lLWNvdW50KSkpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtYWZ0ZXItY3V0LXBhc3RlISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSByZWZyZXNoLWFmdGVyLWtleS1ldmVudCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBldmVudF0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gYWRkLW5ld2xpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFt0ZXh0XSwgOmFzIHN0YXRlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1uZXdsaW5lXHJcbiBbezprZXlzIFt0ZXh0XSwgOmFzIHN0YXRlfV1cclxuIChpZi1ub3RcclxuICAoPSBcXG5ld2xpbmUgKGxhc3QgdGV4dCkpXHJcbiAgKGFzc29jIHN0YXRlIDp0ZXh0IChzdHIgdGV4dCBcXG5ld2xpbmUpKVxyXG4gIHN0YXRlKSlcclxuIn0gezpzeW0gdXBkYXRlLWVkaXQtaGlzdG9yeSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeSBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1lZGl0LWhpc3RvcnkhXHJcbiBbKmVkaXQtaGlzdG9yeSBzdGF0ZV1cclxuICh0cnlcclxuICAobXdtL3VwZGF0ZS1lZGl0LWhpc3RvcnkhXHJcbiAgICplZGl0LWhpc3RvcnlcclxuICAgKGlmICg6c2VsZWN0aW9uLWNoYW5nZT8gc3RhdGUpIHN0YXRlIChkaXNzb2Mgc3RhdGUgOmNyb3BwZWQtc3RhdGUpKSlcclxuICBzdGF0ZVxyXG4gIChjYXRjaCBqcy9FcnJvciBfIChtd20vZ2V0LWN1cnJlbnQtc3RhdGUgKmVkaXQtaGlzdG9yeSkpKSlcclxuIn0gezpzeW0gcmVmcmVzaC1jb25zb2xlLWNvbnRlbnQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgc3RhdGUgY29uc29sZS1zdGFydC1udW0gY2xqP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtY29uc29sZS1jb250ZW50IVxyXG4gW2NvbnRlbnQgc3RhdGUgY29uc29sZS1zdGFydC1udW0gY2xqP11cclxuIChzZXQhXHJcbiAgKC4taW5uZXJIVE1MIGNvbnRlbnQpXHJcbiAgKGlmXHJcbiAgIGNsaj9cclxuICAgKGxldFxyXG4gICAgW3ByZS10ZXh0XHJcbiAgICAgKHN1YnMgKDp0ZXh0IHN0YXRlKSAwIGNvbnNvbGUtc3RhcnQtbnVtKVxyXG4gICAgIHBvc3QtdGV4dFxyXG4gICAgIChzdWJzICg6dGV4dCBzdGF0ZSkgY29uc29sZS1zdGFydC1udW0pXVxyXG4gICAgKHN0ciAoaHMvZXNjYXBlLWh0bWwtc3RyIHByZS10ZXh0KSAoaHMvY29kZS0+aHRtbCBwb3N0LXRleHQpKSlcclxuICAgKGhzL2VzY2FwZS1odG1sLXN0ciAoOnRleHQgc3RhdGUpKSkpXHJcbiBzdGF0ZSlcclxuIn0gezpzeW0gcmVmcmVzaC1lcnJvcnMtYW5kLWRlbGltaXRlcnMhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgZXZlbnRzLWNoYW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWVycm9ycy1hbmQtZGVsaW1pdGVycyFcclxuIFtjb250ZW50IGV2ZW50cy1jaGFuXVxyXG4gKGhpZGUtZXJyb3ItbWVzc2FnZXMhICguLXBhcmVudEVsZW1lbnQgY29udGVudCkpXHJcbiAoZG9zZXFcclxuICBbZWxlbSAoLT4gY29udGVudCAoLnF1ZXJ5U2VsZWN0b3JBbGwgXCIuZXJyb3JcIikgYXJyYXktc2VxKV1cclxuICAobGV0XHJcbiAgIFtzaG93LWVycm9yLWljb24hXHJcbiAgICAoZm4gW2VsZW1dIChzZXQhICguLWRpc3BsYXkgKC4tc3R5bGUgZWxlbSkpIFwiaW5saW5lLWJsb2NrXCIpKVxyXG4gICAgc2hvdy1lcnJvci1pY29uIVxyXG4gICAgKGRlYm91bmNlIHNob3ctZXJyb3ItaWNvbiEgMTAwMCldXHJcbiAgIChzaG93LWVycm9yLWljb24hIGVsZW0pKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIGVsZW1cclxuICAgXCJtb3VzZWVudGVyXCJcclxuICAgKGZuKiBbcDFfXzQ5MDI4I10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDI4IykpKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIGVsZW1cclxuICAgXCJtb3VzZWxlYXZlXCJcclxuICAgKGZuKiBbcDFfXzQ5MDI5I10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDI5IykpKSlcclxuIChkb3NlcVxyXG4gIFtbZWxlbSBjbGFzcy1uYW1lXSAocmFpbmJvdy1kZWxpbWl0ZXJzIGNvbnRlbnQgLTEpXVxyXG4gICguYWRkICguLWNsYXNzTGlzdCBlbGVtKSBjbGFzcy1uYW1lKSkpXHJcbiJ9IHs6c3ltIGFwcGVuZC10ZXh0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvciB0ZXh0XSl9LCA6c291cmNlICIoZGVmbiBhcHBlbmQtdGV4dCBbZWRpdG9yIHRleHRdIChhcHBlbmQtdGV4dCEgZWRpdG9yIHRleHQpKVxyXG4ifSB7OnN5bSBwcmV2ZW50LWRlZmF1bHQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V2ZW50IG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmV2ZW50LWRlZmF1bHQ/XHJcbiBbZXZlbnQgb3B0c11cclxuIChib29sZWFuXHJcbiAgKG9yXHJcbiAgIChrZXktbmFtZT8gZXZlbnQgOnVuZG8tb3ItcmVkbylcclxuICAgKGtleS1uYW1lPyBldmVudCA6dGFiKVxyXG4gICAoa2V5LW5hbWU/IGV2ZW50IDplbnRlcilcclxuICAgKGFuZFxyXG4gICAgKG9yICg6Y29uc29sZS1jYWxsYmFjayBvcHRzKSAoLi1hbHRLZXkgZXZlbnQpKVxyXG4gICAgKG9yIChrZXktbmFtZT8gZXZlbnQgOnVwLWFycm93KSAoa2V5LW5hbWU/IGV2ZW50IDpkb3duLWFycm93KSkpKSkpXHJcbiJ9IHs6c3ltIGluaXRpYWxpemUhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGluaXQtYWxsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoWyYgW29wdHNdXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1hbGxcclxuIFsmIFtvcHRzXV1cclxuIChkb3NlcVxyXG4gIFtwcyAoLT4ganMvZG9jdW1lbnQgKC5xdWVyeVNlbGVjdG9yQWxsIFwiLnBhcmVuLXNvdXBcIikgYXJyYXktc2VxKV1cclxuICAoaW5pdCBwcyAob3Igb3B0cyAjanMge30pKSkpXHJcbiJ9IHs6c3ltIGFkZC1wYXJpbmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbmFibGU/IGNvbnNvbGUtc3RhcnQtbnVtIHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXBhcmluZmVyXHJcbiBbZW5hYmxlPyBjb25zb2xlLXN0YXJ0LW51bSBzdGF0ZV1cclxuIChpZlxyXG4gIGVuYWJsZT9cclxuICAobGV0XHJcbiAgIFtjcm9wcGVkLXN0YXRlXHJcbiAgICAoOmNyb3BwZWQtc3RhdGUgc3RhdGUpXHJcbiAgICBpbmRlbnQtdHlwZVxyXG4gICAgKDppbmRlbnQtdHlwZSBzdGF0ZSlcclxuICAgIHN0YXRlXHJcbiAgICAoY29uZFxyXG4gICAgIChwb3M/IGNvbnNvbGUtc3RhcnQtbnVtKVxyXG4gICAgIChhZGQtcGFyaW5mZXItYWZ0ZXItY29uc29sZS1zdGFydCBjb25zb2xlLXN0YXJ0LW51bSBzdGF0ZSlcclxuICAgICBpbmRlbnQtdHlwZVxyXG4gICAgIChjcC9hZGQtaW5kZW50IHN0YXRlKVxyXG4gICAgIDplbHNlXHJcbiAgICAgKGNwL2FkZC1wYXJpbmZlciA6cGFyZW4gc3RhdGUpKV1cclxuICAgKGlmXHJcbiAgICAoYW5kIGNyb3BwZWQtc3RhdGUgaW5kZW50LXR5cGUpXHJcbiAgICAoYXNzb2NcclxuICAgICBzdGF0ZVxyXG4gICAgIDpjcm9wcGVkLXN0YXRlXHJcbiAgICAgKG1lcmdlXHJcbiAgICAgIGNyb3BwZWQtc3RhdGVcclxuICAgICAgKGNwL2FkZC1pbmRlbnQgKGFzc29jIGNyb3BwZWQtc3RhdGUgOmluZGVudC10eXBlIGluZGVudC10eXBlKSkpKVxyXG4gICAgc3RhdGUpKVxyXG4gIHN0YXRlKSlcclxuIn0gezpzeW0gdW5kbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3JdKX0sIDpzb3VyY2UgIihkZWZuIHVuZG8gW2VkaXRvcl0gKHVuZG8hIGVkaXRvcikpXHJcbiJ9IHs6c3ltIG9iaj8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG9iaj8gKGZuKiBbcDFfXzQ5MDI2I10gKGluc3RhbmNlPyBqcy9PYmplY3QgcDFfXzQ5MDI2IykpKVxyXG4ifSB7OnN5bSBkb3duISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIGFsdD9dKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGFkZC1ldmVudC1saXN0ZW5lcnMhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgZXZlbnRzLWNoYW4gb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1ldmVudC1saXN0ZW5lcnMhXHJcbiBbY29udGVudCBldmVudHMtY2hhbiBvcHRzXVxyXG4gKGRvdG9cclxuICBjb250ZW50XHJcbiAgKGV2ZW50cy9yZW1vdmVBbGwpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgXCJrZXlkb3duXCJcclxuICAgKGZuXHJcbiAgICBbZV1cclxuICAgICh3aGVuIChwcmV2ZW50LWRlZmF1bHQ/IGUgb3B0cykgKC5wcmV2ZW50RGVmYXVsdCBlKSlcclxuICAgIChwdXQhIGV2ZW50cy1jaGFuIGUpKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBcImtleXVwXCJcclxuICAgKGZuKiBbcDFfXzQ5MDMzI10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDMzIykpKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIFwiY3V0XCJcclxuICAgKGZuKiBbcDFfXzQ5MDM0I10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDM0IykpKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIFwicGFzdGVcIlxyXG4gICAoZm4qIFtwMV9fNDkwMzUjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMzUjKSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgXCJtb3VzZXVwXCJcclxuICAgKGZuKiBbcDFfXzQ5MDM2I10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDM2IykpKSkpXHJcbiJ9IHs6c3ltIHJlc2V0LWVkaXQtaGlzdG9yeSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBzdGFydF0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gaGlkZS1lcnJvci1tZXNzYWdlcyEsIDptZXRhIHs6ZG9jICJIaWRlcyBhbGwgZXJyb3IgcG9wdXBzLiIsIDphcmdsaXN0cyAoW3BhcmVudC1lbGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGlkZS1lcnJvci1tZXNzYWdlcyFcclxuIFwiSGlkZXMgYWxsIGVycm9yIHBvcHVwcy5cIlxyXG4gW3BhcmVudC1lbGVtXVxyXG4gKGRvc2VxXHJcbiAgW2VsZW0gKC0+IHBhcmVudC1lbGVtICgucXVlcnlTZWxlY3RvckFsbCBcIi5lcnJvci10ZXh0XCIpIGFycmF5LXNlcSldXHJcbiAgKC5yZW1vdmVDaGlsZCBwYXJlbnQtZWxlbSBlbGVtKSkpXHJcbiJ9IHs6c3ltIEVkaXRvciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGFwcGVuZC10ZXh0ISBjYW4tcmVkbz8gY2FuLXVuZG8/IGRvd24hIGVkaXQtYW5kLXJlZnJlc2ghIGVudGVyISBldmFsISBpbml0aWFsaXplISByZWRvISByZWZyZXNoISByZWZyZXNoLWFmdGVyLWN1dC1wYXN0ZSEgcmVmcmVzaC1hZnRlci1rZXktZXZlbnQhIHJlc2V0LWVkaXQtaGlzdG9yeSEgdGFiISB1bmRvISB1cCEgdXBkYXRlLWN1cnNvci1wb3NpdGlvbiEpfSksIGNsanMudG9vbHMucmVhZGVyLmltcGwuY29tbW9ucyAoezpzeW0gbWF0Y2gtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXRjaC1udW1iZXJcclxuIFtzXVxyXG4gKGlmXHJcbiAgKG1hdGNoZXM/IGludC1wYXR0ZXJuIHMpXHJcbiAgKG1hdGNoLWludCBzKVxyXG4gIChpZlxyXG4gICAobWF0Y2hlcz8gZmxvYXQtcGF0dGVybiBzKVxyXG4gICAobWF0Y2gtZmxvYXQgcylcclxuICAgKHdoZW4gKG1hdGNoZXM/IHJhdGlvLXBhdHRlcm4gcykgKG1hdGNoLXJhdGlvIHMpKSkpKVxyXG4ifSB7OnN5bSBza2lwLWxpbmUsIDptZXRhIHs6ZG9jICJBZHZhbmNlcyB0aGUgcmVhZGVyIHRvIHRoZSBlbmQgb2YgYSBsaW5lLiBSZXR1cm5zIHRoZSByZWFkZXIiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBza2lwLWxpbmVcclxuIFwiQWR2YW5jZXMgdGhlIHJlYWRlciB0byB0aGUgZW5kIG9mIGEgbGluZS4gUmV0dXJucyB0aGUgcmVhZGVyXCJcclxuIFtyZWFkZXJdXHJcbiAobG9vcCBbXSAod2hlbi1ub3QgKG5ld2xpbmU/IChyZWFkLWNoYXIgcmVhZGVyKSkgKHJlY3VyKSkpXHJcbiByZWFkZXIpXHJcbiJ9IHs6c3ltIGludC1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW50LXBhdHRlcm5cclxuICNcIl4oWy0rXT8pKD86KDApfChbMS05XVswLTldKil8MFt4WF0oWzAtOUEtRmEtZl0rKXwwKFswLTddKyl8KFsxLTldWzAtOV0/KVtyUl0oWzAtOUEtWmEtel0rKXwwWzAtOV0rKShOKT8kXCIpXHJcbiJ9IHs6c3ltIHJlYWQtY29tbWVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgJiBfXSl9LCA6c291cmNlICIoZGVmbiByZWFkLWNvbW1lbnQgW3JkciAmIF9dIChza2lwLWxpbmUgcmRyKSlcclxuIn0gezpzeW0gcGFyc2Utc3ltYm9sLCA6bWV0YSB7OmRvYyAiUGFyc2VzIGEgc3RyaW5nIGludG8gYSB2ZWN0b3Igb2YgdGhlIG5hbWVzcGFjZSBhbmQgc3ltYm9sIiwgOmFyZ2xpc3RzIChbdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1zeW1ib2xcclxuIFwiUGFyc2VzIGEgc3RyaW5nIGludG8gYSB2ZWN0b3Igb2YgdGhlIG5hbWVzcGFjZSBhbmQgc3ltYm9sXCJcclxuIFt0b2tlbl1cclxuICh3aGVuLW5vdFxyXG4gIChvclxyXG4gICAoaWRlbnRpY2FsPyBcIlwiIHRva2VuKVxyXG4gICAodHJ1ZT8gKC50ZXN0ICNcIjokXCIgdG9rZW4pKVxyXG4gICAodHJ1ZT8gKC50ZXN0ICNcIl46OlwiIHRva2VuKSkpXHJcbiAgKGxldFxyXG4gICBbbnMtaWR4XHJcbiAgICAoLmluZGV4T2YgdG9rZW4gXCIvXCIpXHJcbiAgICBuc1xyXG4gICAgKHdoZW4gKHBvcz8gbnMtaWR4KSAoc3VicyB0b2tlbiAwIG5zLWlkeCkpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBucylcclxuICAgIChsZXRcclxuICAgICBbbnMtaWR4IChpbmMgbnMtaWR4KV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKD09IG5zLWlkeCAoY291bnQgdG9rZW4pKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbc3ltIChzdWJzIHRva2VuIG5zLWlkeCldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIChhbmRcclxuICAgICAgICAgKG5vdCAobnVtZXJpYz8gKG50aCBzeW0gMCkpKVxyXG4gICAgICAgICAobm90IChpZGVudGljYWw/IFwiXCIgc3ltKSlcclxuICAgICAgICAgKGZhbHNlPyAoLnRlc3QgI1wiOiRcIiBucykpXHJcbiAgICAgICAgIChvciAoaWRlbnRpY2FsPyBzeW0gXCIvXCIpICg9PSAtMSAoLmluZGV4T2Ygc3ltIFwiL1wiKSkpKVxyXG4gICAgICAgIFtucyBzeW1dKSkpKVxyXG4gICAgKHdoZW5cclxuICAgICAob3IgKGlkZW50aWNhbD8gdG9rZW4gXCIvXCIpICg9PSAtMSAoLmluZGV4T2YgdG9rZW4gXCIvXCIpKSlcclxuICAgICBbbmlsIHRva2VuXSkpKSkpXHJcbiJ9IHs6c3ltIG51bWJlci1saXRlcmFsPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIHRoZSByZWFkZXIgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbnVtYmVyIGxpdGVyYWwiLCA6YXJnbGlzdHMgKFtyZWFkZXIgaW5pdGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtYmVyLWxpdGVyYWw/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIHRoZSByZWFkZXIgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbnVtYmVyIGxpdGVyYWxcIlxyXG4gW3JlYWRlciBpbml0Y2hdXHJcbiAob3JcclxuICAobnVtZXJpYz8gaW5pdGNoKVxyXG4gIChhbmRcclxuICAgKG9yIChpZGVudGljYWw/IFxcKyBpbml0Y2gpIChpZGVudGljYWw/IFxcLSBpbml0Y2gpKVxyXG4gICAobnVtZXJpYz8gKHBlZWstY2hhciByZWFkZXIpKSkpKVxyXG4ifSB7OnN5bSByZWFkLXBhc3QsIDptZXRhIHs6ZG9jICJSZWFkIHVudGlsIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgbWF0Y2ggcHJlZCwgcmV0dXJuaW5nXG4gICBjaGFyLiIsIDphcmdsaXN0cyAoW3ByZWQgcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1wYXN0XHJcbiBcIlJlYWQgdW50aWwgZmlyc3QgY2hhcmFjdGVyIHRoYXQgZG9lc24ndCBtYXRjaCBwcmVkLCByZXR1cm5pbmdcXG4gICBjaGFyLlwiXHJcbiBbcHJlZCByZHJdXHJcbiAobG9vcCBbY2ggKHJlYWQtY2hhciByZHIpXSAoaWYgKHByZWQgY2gpIChyZWN1ciAocmVhZC1jaGFyIHJkcikpIGNoKSkpXHJcbiJ9IHs6c3ltIGZsb2F0LXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGZsb2F0LXBhdHRlcm4gI1wiKFstK10/WzAtOV0rKFxcLlswLTldKik/KFtlRV1bLStdP1swLTldKyk/KShNKT9cIilcclxuIn0gezpzeW0gbWF0Y2hlcz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcGF0dGVybiBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF0Y2hlcz9cclxuIFtwYXR0ZXJuIHNdXHJcbiAobGV0IFtbbWF0Y2hdIChyZS1maW5kIHBhdHRlcm4gcyldIChpZGVudGljYWw/IG1hdGNoIHMpKSlcclxuIn0gezpzeW0gdGhyb3dpbmctcmVhZGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21zZ10pfSwgOnNvdXJjZSAiKGRlZm4gdGhyb3dpbmctcmVhZGVyIFttc2ddIChmbiBbcmRyICYgX10gKHJlYWRlci1lcnJvciByZHIgbXNnKSkpXHJcbiJ9IHs6c3ltIHJhdGlvLXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHJhdGlvLXBhdHRlcm4gI1wiKFstK10/WzAtOV0rKS8oWzAtOV0rKVwiKVxyXG4ifSksIGNsanMudG9vbHMucmVhZGVyLmVkbiAoezpzeW0gcmVhZCwgOm1ldGEgezpkb2MgIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlIG90aGVyd2lzZSByZXR1cm5zIGVvZi5cbiAgIElmIG5vIHJlYWRlciBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXG5cbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXG5cbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkIGRvZXNuJ3QgZGVwZW5kIG9uIGR5bmFtaWMgVmFycywgYWxsIGNvbmZpZ3VyYXRpb25cbiAgIGlzIGRvbmUgYnkgcGFzc2luZyBhbiBvcHQgbWFwLlxuXG4gICBvcHRzIGlzIGEgbWFwIHRoYXQgY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXlzOlxuICAgOmVvZiAtIHZhbHVlIHRvIHJldHVybiBvbiBlbmQtb2YtZmlsZS4gV2hlbiBub3Qgc3VwcGxpZWQsIGVvZiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgOnJlYWRlcnMgIC0gYSBtYXAgb2YgdGFnIHN5bWJvbHMgdG8gZGF0YS1yZWFkZXIgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgYmVmb3JlIGRlZmF1bHQtZGF0YS1yZWFkZXJzLlxuICAgICAgICAgICAgICBXaGVuIG5vdCBzdXBwbGllZCwgb25seSB0aGUgZGVmYXVsdC1kYXRhLXJlYWRlcnMgd2lsbCBiZSB1c2VkLlxuICAgOmRlZmF1bHQgLSBBIGZ1bmN0aW9uIG9mIHR3byBhcmdzLCB0aGF0IHdpbGwsIGlmIHByZXNlbnQgYW5kIG5vIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcsXG4gICAgICAgICAgICAgIGJlIGNhbGxlZCB3aXRoIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS4iLCA6YXJnbGlzdHMgW1tyZWFkZXJdIFt7OmtleXMgW2VvZl0sIDphcyBvcHRzfSByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBlb2Ygb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRcclxuIFwiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlIG90aGVyd2lzZSByZXR1cm5zIGVvZi5cXG4gICBJZiBubyByZWFkZXIgaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxcblxcbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xcblxcbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkIGRvZXNuJ3QgZGVwZW5kIG9uIGR5bmFtaWMgVmFycywgYWxsIGNvbmZpZ3VyYXRpb25cXG4gICBpcyBkb25lIGJ5IHBhc3NpbmcgYW4gb3B0IG1hcC5cXG5cXG4gICBvcHRzIGlzIGEgbWFwIHRoYXQgY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXlzOlxcbiAgIDplb2YgLSB2YWx1ZSB0byByZXR1cm4gb24gZW5kLW9mLWZpbGUuIFdoZW4gbm90IHN1cHBsaWVkLCBlb2YgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cXG4gICA6cmVhZGVycyAgLSBhIG1hcCBvZiB0YWcgc3ltYm9scyB0byBkYXRhLXJlYWRlciBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZCBiZWZvcmUgZGVmYXVsdC1kYXRhLXJlYWRlcnMuXFxuICAgICAgICAgICAgICBXaGVuIG5vdCBzdXBwbGllZCwgb25seSB0aGUgZGVmYXVsdC1kYXRhLXJlYWRlcnMgd2lsbCBiZSB1c2VkLlxcbiAgIDpkZWZhdWx0IC0gQSBmdW5jdGlvbiBvZiB0d28gYXJncywgdGhhdCB3aWxsLCBpZiBwcmVzZW50IGFuZCBubyByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnLFxcbiAgICAgICAgICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHRhZyBhbmQgdGhlIHZhbHVlLlwiXHJcbiAoW3JlYWRlcl0gKHJlYWQge30gcmVhZGVyKSlcclxuIChbezprZXlzIFtlb2ZdLCA6YXMgb3B0c30gcmVhZGVyXVxyXG4gIChsZXRcclxuICAgW2VvZi1lcnJvcj8gKG5vdCAoY29udGFpbnM/IG9wdHMgOmVvZikpXVxyXG4gICAocmVhZCByZWFkZXIgZW9mLWVycm9yPyBlb2Ygb3B0cykpKVxyXG4gKFtyZWFkZXIgZW9mLWVycm9yPyBlb2Ygb3B0c11cclxuICAodHJ5XHJcbiAgIChsb29wXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFtjaCAocmVhZC1jaGFyIHJlYWRlcildXHJcbiAgICAgKGNvbmRcclxuICAgICAgKHdoaXRlc3BhY2U/IGNoKVxyXG4gICAgICAocmVjdXIpXHJcbiAgICAgIChuaWw/IGNoKVxyXG4gICAgICAoaWYgZW9mLWVycm9yPyAoZXJyL3Rocm93LWVvZi1lcnJvciByZWFkZXIgbmlsKSBlb2YpXHJcbiAgICAgIChudW1iZXItbGl0ZXJhbD8gcmVhZGVyIGNoKVxyXG4gICAgICAocmVhZC1udW1iZXIgcmVhZGVyIGNoIG9wdHMpXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtmIChtYWNyb3MgY2gpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgZlxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3JlcyAoZiByZWFkZXIgY2ggb3B0cyldXHJcbiAgICAgICAgIChpZiAoaWRlbnRpY2FsPyByZXMgcmVhZGVyKSAocmVjdXIpIHJlcykpXHJcbiAgICAgICAgKHJlYWQtc3ltYm9sIHJlYWRlciBjaCkpKSkpKVxyXG4gICAoY2F0Y2hcclxuICAgIGpzL0Vycm9yXHJcbiAgICBlXHJcbiAgICAoaWZcclxuICAgICAoZXgtaW5mbz8gZSlcclxuICAgICAobGV0XHJcbiAgICAgIFtkIChleC1kYXRhIGUpXVxyXG4gICAgICAoaWZcclxuICAgICAgICg9IDpyZWFkZXItZXhjZXB0aW9uICg6dHlwZSBkKSlcclxuICAgICAgICh0aHJvdyBlKVxyXG4gICAgICAgKHRocm93XHJcbiAgICAgICAgKGV4LWluZm9cclxuICAgICAgICAgKC4tbWVzc2FnZSBlKVxyXG4gICAgICAgICAobWVyZ2VcclxuICAgICAgICAgIHs6dHlwZSA6cmVhZGVyLWV4Y2VwdGlvbn1cclxuICAgICAgICAgIGRcclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChpbmRleGluZy1yZWFkZXI/IHJlYWRlcilcclxuICAgICAgICAgICB7OmxpbmUgKGdldC1saW5lLW51bWJlciByZWFkZXIpLFxyXG4gICAgICAgICAgICA6Y29sdW1uIChnZXQtY29sdW1uLW51bWJlciByZWFkZXIpLFxyXG4gICAgICAgICAgICA6ZmlsZSAoZ2V0LWZpbGUtbmFtZSByZWFkZXIpfSkpXHJcbiAgICAgICAgIGUpKSkpXHJcbiAgICAgKHRocm93XHJcbiAgICAgIChleC1pbmZvXHJcbiAgICAgICAoLi1tZXNzYWdlIGUpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICB7OnR5cGUgOnJlYWRlci1leGNlcHRpb259XHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChpbmRleGluZy1yZWFkZXI/IHJlYWRlcilcclxuICAgICAgICAgezpsaW5lIChnZXQtbGluZS1udW1iZXIgcmVhZGVyKSxcclxuICAgICAgICAgIDpjb2x1bW4gKGdldC1jb2x1bW4tbnVtYmVyIHJlYWRlciksXHJcbiAgICAgICAgICA6ZmlsZSAoZ2V0LWZpbGUtbmFtZSByZWFkZXIpfSkpXHJcbiAgICAgICBlKSkpKSkpKVxyXG4ifSB7OnN5bSByZWFkLXN0cmluZywgOm1ldGEgezpkb2MgIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxuXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xuXG4gICBvcHRzIGlzIGEgbWFwIGFzIHBlciBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZCIsIDphcmdsaXN0cyBbW3NdIFtvcHRzIHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXN0cmluZ1xyXG4gXCJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxcbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXFxuXFxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XFxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXFxuXFxuICAgb3B0cyBpcyBhIG1hcCBhcyBwZXIgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWRcIlxyXG4gKFtzXSAocmVhZC1zdHJpbmcgezplb2YgbmlsfSBzKSlcclxuIChbb3B0cyBzXVxyXG4gICh3aGVuIChhbmQgcyAobm90PSBzIFwiXCIpKSAocmVhZCBvcHRzIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzKSkpKSlcclxuIn0pLCBjbGpzLnNvdXJjZS1tYXAuYmFzZTY0LXZscSAoezpzeW0gZW5jb2RlLXZhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5jb2RlLXZhbFxyXG4gW25dXHJcbiAobGV0XHJcbiAgW3NiIChTdHJpbmdCdWZmZXIuKSB2bHEgKHRvLXZscS1zaWduZWQgbildXHJcbiAgKGxvb3BcclxuICAgW2RpZ2l0XHJcbiAgICAoYml0LWFuZCB2bHEgdmxxLWJhc2UtbWFzaylcclxuICAgIHZscVxyXG4gICAgKGJpdC1zaGlmdC1yaWdodC16ZXJvLWZpbGwgdmxxIHZscS1iYXNlLXNoaWZ0KV1cclxuICAgKGlmXHJcbiAgICAocG9zPyB2bHEpXHJcbiAgICAobGV0XHJcbiAgICAgW2RpZ2l0IChiaXQtb3IgZGlnaXQgdmxxLWNvbnRpbnVhdGlvbi1iaXQpXVxyXG4gICAgICguYXBwZW5kIHNiIChiYXNlNjQvZW5jb2RlIGRpZ2l0KSlcclxuICAgICAocmVjdXJcclxuICAgICAgKGJpdC1hbmQgdmxxIHZscS1iYXNlLW1hc2spXHJcbiAgICAgIChiaXQtc2hpZnQtcmlnaHQtemVyby1maWxsIHZscSB2bHEtYmFzZS1zaGlmdCkpKVxyXG4gICAgKC5hcHBlbmQgc2IgKGJhc2U2NC9lbmNvZGUgZGlnaXQpKSkpXHJcbiAgKHN0ciBzYikpKVxyXG4ifSB7OnN5bSBlbmNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm4gZW5jb2RlIFt2XSAoYXBwbHkgc3RyIChtYXAgZW5jb2RlLXZhbCB2KSkpXHJcbiJ9IHs6c3ltIHZscS1jb250aW51YXRpb24tYml0LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB2bHEtY29udGludWF0aW9uLWJpdCB2bHEtYmFzZSlcclxuIn0gezpzeW0gdmxxLWJhc2UtbWFzaywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdmxxLWJhc2UtbWFzayAoZGVjIHZscS1iYXNlKSlcclxuIn0gezpzeW0gZGVjb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWNvZGVcclxuIFtzXVxyXG4gKGxldFxyXG4gIFtsICguLWxlbmd0aCBzKV1cclxuICAobG9vcFxyXG4gICBbaSAwIHJlc3VsdCAwIHNoaWZ0IDBdXHJcbiAgICh3aGVuXHJcbiAgICAoPj0gaSBsKVxyXG4gICAgKHRocm93IChqcy9FcnJvci4gXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIikpKVxyXG4gICAobGV0XHJcbiAgICBbZGlnaXQgKGJhc2U2NC9kZWNvZGUgKC5jaGFyQXQgcyBpKSldXHJcbiAgICAobGV0XHJcbiAgICAgW2lcclxuICAgICAgKGluYyBpKVxyXG4gICAgICBjb250aW51YXRpb24/XHJcbiAgICAgIChwb3M/IChiaXQtYW5kIGRpZ2l0IHZscS1jb250aW51YXRpb24tYml0KSlcclxuICAgICAgZGlnaXRcclxuICAgICAgKGJpdC1hbmQgZGlnaXQgdmxxLWJhc2UtbWFzaylcclxuICAgICAgcmVzdWx0XHJcbiAgICAgICgrIHJlc3VsdCAoYml0LXNoaWZ0LWxlZnQgZGlnaXQgc2hpZnQpKVxyXG4gICAgICBzaGlmdFxyXG4gICAgICAoKyBzaGlmdCB2bHEtYmFzZS1zaGlmdCldXHJcbiAgICAgKGlmXHJcbiAgICAgIGNvbnRpbnVhdGlvbj9cclxuICAgICAgKHJlY3VyIGkgcmVzdWx0IHNoaWZ0KVxyXG4gICAgICAobGF6eS1zZXFcclxuICAgICAgIChjb25zXHJcbiAgICAgICAgKGZyb20tdmxxLXNpZ25lZCByZXN1bHQpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbcyAoLnN1YnN0cmluZyBzIGkpXVxyXG4gICAgICAgICAod2hlbi1ub3QgKHN0cmluZy9ibGFuaz8gcykgKGRlY29kZSBzKSkpKSkpKSkpKSlcclxuIn0gezpzeW0gdmxxLWJhc2Utc2hpZnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHZscS1iYXNlLXNoaWZ0IDUpXHJcbiJ9IHs6c3ltIGZyb20tdmxxLXNpZ25lZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gZnJvbS12bHEtc2lnbmVkXHJcbiBbdl1cclxuIChsZXRcclxuICBbbmVnPyAoPSAoYml0LWFuZCB2IDEpIDEpIHNoaWZ0ZWQgKGJpdC1zaGlmdC1yaWdodCB2IDEpXVxyXG4gIChpZiBuZWc/ICgtIHNoaWZ0ZWQpIHNoaWZ0ZWQpKSlcclxuIn0gezpzeW0gdG8tdmxxLXNpZ25lZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gdG8tdmxxLXNpZ25lZFxyXG4gW3ZdXHJcbiAoaWZcclxuICAobmVnPyB2KVxyXG4gIChpbmMgKGJpdC1zaGlmdC1sZWZ0ICgtIHYpIDEpKVxyXG4gICgrIChiaXQtc2hpZnQtbGVmdCB2IDEpIDApKSlcclxuIn0gezpzeW0gdmxxLWJhc2UsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHZscS1iYXNlIChiaXQtc2hpZnQtbGVmdCAxIHZscS1iYXNlLXNoaWZ0KSlcclxuIn0pLCBleHBvdW5kLmFuc2kgKHs6c3ltICpwcmludC1zdHlsZXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKnByaW50LXN0eWxlcypcclxuIHs6Z29vZC1rZXkgWzpncmVlbl0sXHJcbiAgOndhcm5pbmcta2V5IFs6Ym9sZF0sXHJcbiAgOmNvcnJlY3Qta2V5IFs6Z3JlZW5dLFxyXG4gIDpoaWdobGlnaHQgWzpib2xkXSxcclxuICA6Zm9jdXMtcGF0aCBbOm1hZ2VudGFdLFxyXG4gIDpiYWQtdmFsdWUgWzpyZWRdLFxyXG4gIDpmb290ZXIgWzpjeWFuXSxcclxuICA6aGVhZGVyIFs6Y3lhbl0sXHJcbiAgOmdvb2QtcHJlZCBbOmdyZWVuXSxcclxuICA6Z29vZCBbOmdyZWVuXSxcclxuICA6Zm9jdXMta2V5IFs6Ym9sZF0sXHJcbiAgOnBvaW50ZXIgWzptYWdlbnRhXSxcclxuICA6YmFkIFs6cmVkXSxcclxuICA6ZXJyb3Ita2V5IFs6cmVkXSxcclxuICA6bm9uZSBbOm5vbmVdLFxyXG4gIDptZXNzYWdlIFs6bWFnZW50YV19KVxyXG4ifSB7OnN5bSAqZW5hYmxlLWNvbG9yKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmVuYWJsZS1jb2xvciogZmFsc2UpXHJcbiJ9IHs6c3ltIHNnci1jb2RlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gc2dyLWNvZGVcclxuIFwiTWFwIG9mIHN5bWJvbHMgdG8gbnVtZXJpYyBTR1IgKHNlbGVjdCBncmFwaGljIHJlbmRpdGlvbikgY29kZXMuXCJcclxuIHs6Ym9sZCAxLFxyXG4gIDpibGluayA1LFxyXG4gIDp3aGl0ZSAzNyxcclxuICA6eWVsbG93IDMzLFxyXG4gIDpiZy1yZWQgNDEsXHJcbiAgOmJnLWN5YW4gNDYsXHJcbiAgOmdyZWVuIDMyLFxyXG4gIDpiZy1ncmVlbiA0MixcclxuICA6ZmctcmVzZXQgMzksXHJcbiAgOmN5YW4gMzYsXHJcbiAgOmJnLWJsYWNrIDQwLFxyXG4gIDpmZy0yNTYgMzgsXHJcbiAgOnVuZGVybGluZSAzLFxyXG4gIDpiZy1tYWdlbnRhIDQ1LFxyXG4gIDpzdHJpa2UgOSxcclxuICA6YmcteWVsbG93IDQzLFxyXG4gIDpoaWRkZW4gOCxcclxuICA6cmVkIDMxLFxyXG4gIDpibHVlIDM0LFxyXG4gIDpiZy13aGl0ZSA0NyxcclxuICA6YmctMjU2IDQ4LFxyXG4gIDptYWdlbnRhIDM1LFxyXG4gIDpiZy1ibHVlIDQ0LFxyXG4gIDpiZy1yZXNldCA0OSxcclxuICA6bm9uZSAwLFxyXG4gIDpyZXZlcnNlIDcsXHJcbiAgOmJsYWNrIDMwfSlcclxuIn0gezpzeW0gZXNjYXBlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBBTlNJIGVzY29wZSBzdHJpbmcgd2hpY2ggd2lsbCBlbmFjdCB0aGUgZ2l2ZW4gU0dSIGNvZGVzLiIsIDphcmdsaXN0cyAoWyYgY29kZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NhcGVcclxuIFwiUmV0dXJucyBhbiBBTlNJIGVzY29wZSBzdHJpbmcgd2hpY2ggd2lsbCBlbmFjdCB0aGUgZ2l2ZW4gU0dSIGNvZGVzLlwiXHJcbiBbJiBjb2Rlc11cclxuIChlc2MgY29kZXMpKVxyXG4ifSB7OnN5bSBjb2xvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzICYgc3R5bGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sb3JcclxuIFtzICYgc3R5bGVzXVxyXG4gKGlmICplbmFibGUtY29sb3IqIChhcHBseSBzZ3IgcyAocmVzb2x2ZS1zdHlsZXMgc3R5bGVzKSkgcykpXHJcbiJ9IHs6c3ltIGVzYywgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gQU5TSSBlc2NvcGUgc3RyaW5nIHdoaWNoIHdpbGwgYXBwbHkgdGhlIGdpdmVuIGNvbGxlY3Rpb24gb2YgU0dSXG4gIGNvZGVzLiIsIDphcmdsaXN0cyAoW2NvZGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjXHJcbiBcIlJldHVybnMgYW4gQU5TSSBlc2NvcGUgc3RyaW5nIHdoaWNoIHdpbGwgYXBwbHkgdGhlIGdpdmVuIGNvbGxlY3Rpb24gb2YgU0dSXFxuICBjb2Rlcy5cIlxyXG4gW2NvZGVzXVxyXG4gKGxldFxyXG4gIFtjb2RlcyAobWFwIHNnci1jb2RlIGNvZGVzIGNvZGVzKSBjb2RlcyAoc3RyL2pvaW4gXFw7IGNvZGVzKV1cclxuICAoc3RyIFxcGyBcXFsgY29kZXMgXFxtKSkpXHJcbiJ9IHs6c3ltIHNnciwgOm1ldGEgezpkb2MgIldyYXBzIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBTR1IgZXNjYXBlcyB0byBhcHBseSB0aGUgZ2l2ZW4gY29kZXMsIHRoZW4gcmVzZXRcbiAgdGhlIGdyYXBoaWNzLiIsIDphcmdsaXN0cyAoW3N0cmluZyAmIGNvZGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2dyXHJcbiBcIldyYXBzIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBTR1IgZXNjYXBlcyB0byBhcHBseSB0aGUgZ2l2ZW4gY29kZXMsIHRoZW4gcmVzZXRcXG4gIHRoZSBncmFwaGljcy5cIlxyXG4gW3N0cmluZyAmIGNvZGVzXVxyXG4gKHN0ciAoZXNjIGNvZGVzKSBzdHJpbmcgKGVzY2FwZSA6bm9uZSkpKVxyXG4ifSB7OnN5bSBhbnNpLWNvZGU/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBhbnNpLWNvZGU/IHNnci1jb2RlKVxyXG4ifSB7OnN5bSBzdHJpcCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgY29sb3IgY29kZXMgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLiIsIDphcmdsaXN0cyAoW3N0cmluZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmlwXHJcbiBcIlJlbW92ZXMgY29sb3IgY29kZXMgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLlwiXHJcbiBbc3RyaW5nXVxyXG4gKHN0ci9yZXBsYWNlIHN0cmluZyAjXCJcXHUwMDFiXFxbWzAtOTtdKlttS11cIiBcIlwiKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1zdHlsZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3R5bGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1zdHlsZXNcclxuIFtzdHlsZXNdXHJcbiAoaWYtbGV0XHJcbiAgW3Jlc1xyXG4gICAobm90LWVtcHR5XHJcbiAgICAobWFwY2F0XHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ5MDA1I11cclxuICAgICAgKG9yXHJcbiAgICAgICAod2hlbi1sZXQgW3JlcyAoKnByaW50LXN0eWxlcyogcDFfXzQ5MDA1IyldIHJlcylcclxuICAgICAgIFtwMV9fNDkwMDUjXSkpXHJcbiAgICAgc3R5bGVzKSldXHJcbiAgcmVzXHJcbiAgWzpib2xkXSkpXHJcbiJ9KSwgZXhwb3VuZC5wcmludGVyICh7OnN5bSBtaXNzaW5nLWtleSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy1rZXlcclxuIFtmb3JtXVxyXG4gKGxldFxyXG4gIFtbYnJhbmNoIG1hdGNoXVxyXG4gICAocy9jb25mb3JtIDpleHBvdW5kLnNwZWMvY29udGFpbnMta2V5LXByZWQgKG50aCBmb3JtIDIpKV1cclxuICAoY2FzZVxyXG4gICBicmFuY2hcclxuICAgOnNpbXBsZVxyXG4gICAoOmt3IG1hdGNoKVxyXG4gICA6Y29tcG91bmRcclxuICAgKHN1bW1hcml6ZS1rZXktY2xhdXNlIFticmFuY2ggbWF0Y2hdKSkpKVxyXG4ifSB7OnN5bSBpbmRlbnQtbGV2ZWwsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGluZGVudC1sZXZlbCAyKVxyXG4ifSB7OnN5bSBtYXgtc3BlYy1zdHItd2lkdGgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG1heC1zcGVjLXN0ci13aWR0aCAxMDApXHJcbiJ9IHs6c3ltIGFub24tZm4tc3RyLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBhbm9uLWZuLXN0ciBcIjxhbm9ueW1vdXMgZnVuY3Rpb24+XCIpXHJcbiJ9IHs6c3ltIHByaW50LXNwZWMta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcm9ibGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LXNwZWMta2V5c1xyXG4gW3Byb2JsZW1zXVxyXG4gKGxldFxyXG4gIFtrZXlzXHJcbiAgIChrZXl3b3Jkc1xyXG4gICAgKG1hcFxyXG4gICAgIChmbiogW3AxX180OTAwNyNdIChtaXNzaW5nLWtleSAoOnByZWQgcDFfXzQ5MDA3IykpKVxyXG4gICAgIHByb2JsZW1zKSldXHJcbiAgKGlmXHJcbiAgIChhbmRcclxuICAgIChlbXB0eT8gKDpleHBvdW5kL3ZpYSAoZmlyc3QgcHJvYmxlbXMpKSlcclxuICAgIChzb21lIHNpbXBsZS1rZXl3b3JkPyBrZXlzKSlcclxuICAgbmlsXHJcbiAgICgtPj5cclxuICAgIChrZXktPnNwZWMga2V5cyBwcm9ibGVtcylcclxuICAgIChtYXAgKGZuIFtbayB2XV0ge1wia2V5XCIgaywgXCJzcGVjXCIgKHNpbXBsZS1zcGVjLW9yLW5hbWUgdil9KSlcclxuICAgIChzb3J0LWJ5IChmbiogW3AxX180OTAwOCNdIChnZXQgcDFfXzQ5MDA4IyBcImtleVwiKSkpXHJcbiAgICAocHByaW50L3ByaW50LXRhYmxlIFtcImtleVwiIFwic3BlY1wiXSlcclxuICAgIHdpdGgtb3V0LXN0clxyXG4gICAgc3RyaW5nL3RyaW0pKSkpXHJcbiJ9IHs6c3ltIHNpbmdsZXRvbj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeHNdKX0sIDpzb3VyY2UgIihkZWZuIHNpbmdsZXRvbj8gW3hzXSAoPSAxIChjb3VudCB4cykpKVxyXG4ifSB7OnN5bSBpbmRlbnQsIDptZXRhIHs6ZG9jICJHaXZlbiBhbiBwb3RlbnRpYWxseSBtdWx0aS1saW5lIHN0cmluZywgcmV0dXJucyB0aGF0IHN0cmluZyBpbmRlbnRlZCBieVxuICAgJ2luZGVudC1sZXZlbCcgc3BhY2VzLiBPcHRpb25hbGx5LCBjYW4gaW5kZW50IGZpcnN0IGxpbmUgYW5kIG90aGVyIGxpbmVzXG4gICBkaWZmZXJlbnQgYW1vdW50cy4iLCA6YXJnbGlzdHMgW1tzXSBbaW5kZW50LWxldmVsIHNdIFtmaXJzdC1saW5lLWluZGVudCByZXN0LWxpbmVzLWluZGVudCBzXV19LCA6c291cmNlICIoZGVmblxyXG4gaW5kZW50XHJcbiBcIkdpdmVuIGFuIHBvdGVudGlhbGx5IG11bHRpLWxpbmUgc3RyaW5nLCByZXR1cm5zIHRoYXQgc3RyaW5nIGluZGVudGVkIGJ5XFxuICAgJ2luZGVudC1sZXZlbCcgc3BhY2VzLiBPcHRpb25hbGx5LCBjYW4gaW5kZW50IGZpcnN0IGxpbmUgYW5kIG90aGVyIGxpbmVzXFxuICAgZGlmZmVyZW50IGFtb3VudHMuXCJcclxuIChbc10gKGluZGVudCBpbmRlbnQtbGV2ZWwgcykpXHJcbiAoW2luZGVudC1sZXZlbCBzXSAoaW5kZW50IGluZGVudC1sZXZlbCBpbmRlbnQtbGV2ZWwgcykpXHJcbiAoW2ZpcnN0LWxpbmUtaW5kZW50IHJlc3QtbGluZXMtaW5kZW50IHNdXHJcbiAgKGxldFxyXG4gICBbW2xpbmUgJiBsaW5lc10gKHN0cmluZy9zcGxpdC1saW5lcyAoc3RyIHMpKV1cclxuICAgKC0+PlxyXG4gICAgbGluZXNcclxuICAgIChtYXBcclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDkwMTAjXVxyXG4gICAgICAoc3RyIChhcHBseSBzdHIgKHJlcGVhdCByZXN0LWxpbmVzLWluZGVudCBcIiBcIikpIHAxX180OTAxMCMpKSlcclxuICAgIChpbnRvIFsoc3RyIChhcHBseSBzdHIgKHJlcGVhdCBmaXJzdC1saW5lLWluZGVudCBcIiBcIikpIGxpbmUpXSlcclxuICAgIChzdHJpbmcvam9pbiBcIlxcblwiKSkpKSlcclxuIn0gezpzeW0gc2ltcGxlLXNwZWMtb3ItbmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaW1wbGUtc3BlYy1vci1uYW1lXHJcbiBbc3BlYy1uYW1lXVxyXG4gKGxldFxyXG4gIFtzcGVjLXN0clxyXG4gICAoZWxpZGUtc3BlYy1ucyAoZWxpZGUtY29yZS1ucyAocHItc3RyIChleHBhbmQtc3BlYyBzcGVjLW5hbWUpKSkpXVxyXG4gIChpZlxyXG4gICAob3JcclxuICAgICg8IG1heC1zcGVjLXN0ci13aWR0aCAoY291bnQgc3BlYy1zdHIpKVxyXG4gICAgKHN0cmluZy9pbmNsdWRlcz8gc3BlYy1zdHIgXCJcXG5cIikpXHJcbiAgIHNwZWMtbmFtZVxyXG4gICBzcGVjLXN0cikpKVxyXG4ifSB7OnN5bSBzcGVjcy1mcm9tLWZvcm0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdmlhXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BlY3MtZnJvbS1mb3JtXHJcbiBbdmlhXVxyXG4gKGxldFxyXG4gIFtmb3JtXHJcbiAgIChzb21lLT4gdmlhIGxhc3Qgcy9mb3JtKVxyXG4gICBjb25mb3JtZWRcclxuICAgKHMvY29uZm9ybSA6ZXhwb3VuZC5zcGVjL2tleS1zcGVjIGZvcm0pXVxyXG4gIChpZlxyXG4gICAoYW5kIGZvcm0gKG5vdD0gOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkIGNvbmZvcm1lZCkpXHJcbiAgICgtPj5cclxuICAgICg6Y2xhdXNlcyBjb25mb3JtZWQpXHJcbiAgICAobWFwIDpzcGVjcylcclxuICAgICh0cmVlLXNlcSBjb2xsPyBzZXEpXHJcbiAgICAoZmlsdGVyIChmbiBbeF0gKGFuZCAodmVjdG9yPyB4KSAoPSA6a3cgKGZpcnN0IHgpKSkpKVxyXG4gICAgKG1hcCBzZWNvbmQpXHJcbiAgICBzZXQpXHJcbiAgIFtdKSkpXHJcbiJ9IHs6c3ltIGVsaWRlLXNwZWMtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsaWRlLXNwZWMtbnNcclxuIFtzXVxyXG4gIz8oOmNsanMgKC0+IHMgKHN0cmluZy9yZXBsYWNlIFwiY2xqcy5zcGVjLmFscGhhL1wiIFwiXCIpIChzdHJpbmcvcmVwbGFjZSBcImNsanMvc3BlYy9hbHBoYVwiIFwiXCIpKSA6Y2xqIChzdHJpbmcvcmVwbGFjZSBzIFwiY2xvanVyZS5zcGVjLmFscGhhL1wiIFwiXCIpKSlcclxuIn0gezpzeW0ga2V5LT5zcGVjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleXMgcHJvYmxlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXktPnNwZWNcclxuIFtrZXlzIHByb2JsZW1zXVxyXG4gKGRvc2VxXHJcbiAgW3AgcHJvYmxlbXNdXHJcbiAgKGFzc2VydCAoc29tZT8gKDpleHBvdW5kL3ZpYSBwKSkgdXRpbC9hc3NlcnQtbWVzc2FnZSkpXHJcbiAobGV0XHJcbiAgW3ZpYXNcclxuICAgKG1hcCA6ZXhwb3VuZC92aWEgcHJvYmxlbXMpXHJcbiAgIHNwZWNzXHJcbiAgIChpZlxyXG4gICAgKGV2ZXJ5PyBxdWFsaWZpZWQta2V5d29yZD8ga2V5cylcclxuICAgIGtleXNcclxuICAgIChpZi1sZXRcclxuICAgICBbc3BlY3MgKGFwcGx5IHNldC91bmlvbiAobWFwIHNwZWNzLWZyb20tZm9ybSB2aWFzKSldXHJcbiAgICAgc3BlY3NcclxuICAgICBrZXlzKSldXHJcbiAgKHJlZHVjZVxyXG4gICAoZm5cclxuICAgIFttIGtdXHJcbiAgICAoYXNzb2NcclxuICAgICBtXHJcbiAgICAga1xyXG4gICAgIChpZlxyXG4gICAgICAocXVhbGlmaWVkLWtleXdvcmQ/IGspXHJcbiAgICAgIGtcclxuICAgICAgKC0+PlxyXG4gICAgICAgc3BlY3NcclxuICAgICAgIChmaWx0ZXIgKGZuKiBbcDFfXzQ5MDA2I10gKD0gKG5hbWUgaykgKG5hbWUgcDFfXzQ5MDA2IykpKSlcclxuICAgICAgIGZpcnN0KSkpKVxyXG4gICB7fVxyXG4gICBrZXlzKSkpXHJcbiJ9IHs6c3ltIGVsaWRlLWNvcmUtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsaWRlLWNvcmUtbnNcclxuIFtzXVxyXG4gIz8oOmNsanMgKC0+IHMgKHN0cmluZy9yZXBsYWNlIFwiY2xqcy5jb3JlL1wiIFwiXCIpIChzdHJpbmcvcmVwbGFjZSBcImNsanMvY29yZS9cIiBcIlwiKSkgOmNsaiAoc3RyaW5nL3JlcGxhY2UgcyBcImNsb2p1cmUuY29yZS9cIiBcIlwiKSkpXHJcbiJ9IHs6c3ltIHByaW50LW1pc3Npbmcta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcm9ibGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LW1pc3Npbmcta2V5c1xyXG4gW3Byb2JsZW1zXVxyXG4gKGxldFxyXG4gIFtrZXlzLWNsYXVzZXMgKGRpc3RpbmN0IChtYXAgKGNvbXAgbWlzc2luZy1rZXkgOnByZWQpIHByb2JsZW1zKSldXHJcbiAgKGlmXHJcbiAgIChldmVyeT8ga2V5d29yZD8ga2V5cy1jbGF1c2VzKVxyXG4gICAoc3RyaW5nL2pvaW5cclxuICAgIFwiLCBcIlxyXG4gICAgKG1hcFxyXG4gICAgIChmbiogW3AxX180OTAwOSNdIChhbnNpL2NvbG9yIHAxX180OTAwOSMgOmNvcnJlY3Qta2V5KSlcclxuICAgICAoc29ydCBrZXlzLWNsYXVzZXMpKSlcclxuICAgKHN0clxyXG4gICAgXCJcXG5cXG5cIlxyXG4gICAgKGFuc2kvY29sb3JcclxuICAgICAocHByaW50LXN0clxyXG4gICAgICAoaWZcclxuICAgICAgIChzaW5nbGV0b24/IGtleXMtY2xhdXNlcylcclxuICAgICAgIChmaXJzdCBrZXlzLWNsYXVzZXMpXHJcbiAgICAgICAoYXBwbHkgbGlzdCAnYW5kIGtleXMtY2xhdXNlcykpKVxyXG4gICAgIDpjb3JyZWN0LWtleSkpKSkpXHJcbiJ9IHs6c3ltIGV4cGFuZC1zcGVjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBhbmQtc3BlY1xyXG4gW3NwZWNdXHJcbiAobGV0XHJcbiAgWyFzZWVuLXNwZWNzIChhdG9tICN7fSldXHJcbiAgKHdhbGsvcHJld2Fsa1xyXG4gICAoZm5cclxuICAgIFt4XVxyXG4gICAgKGlmLW5vdFxyXG4gICAgIChxdWFsaWZpZWQta2V5d29yZD8geClcclxuICAgICB4XHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbc3AgKHMvZ2V0LXNwZWMgeCldXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgIChjb250YWlucz8gQCFzZWVuLXNwZWNzIHgpXHJcbiAgICAgICAoZG8gKHN3YXAhICFzZWVuLXNwZWNzIGNvbmogeCkgKHMvZm9ybSBzcCkpXHJcbiAgICAgICB4KVxyXG4gICAgICB4KSkpXHJcbiAgIChpZiAocy9nZXQtc3BlYyBzcGVjKSAocy9mb3JtIHNwZWMpIHNwZWMpKSkpXHJcbiJ9IHs6c3ltIGtleXdvcmRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXl3b3Jkc1xyXG4gW2Zvcm1dXHJcbiAoLT4+IGZvcm0gKHRyZWUtc2VxIGNvbGw/IHNlcSkgKGZpbHRlciBrZXl3b3JkPykpKVxyXG4ifSB7OnN5bSBuby10cmFpbGluZy13aGl0ZXNwYWNlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYW4gcG90ZW50aWFsbHkgbXVsdGktbGluZSBzdHJpbmcsIHJldHVybnMgdGhhdCBzdHJpbmcgd2l0aCBhbGxcbiAgdHJhaWxpbmcgd2hpdGVzcGFjZSByZW1vdmVkLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuby10cmFpbGluZy13aGl0ZXNwYWNlXHJcbiBcIkdpdmVuIGFuIHBvdGVudGlhbGx5IG11bHRpLWxpbmUgc3RyaW5nLCByZXR1cm5zIHRoYXQgc3RyaW5nIHdpdGggYWxsXFxuICB0cmFpbGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuXCJcclxuIFtzXVxyXG4gKGxldFxyXG4gIFtzJyAoLT4+IHMgc3RyaW5nL3NwbGl0LWxpbmVzIChtYXAgc3RyaW5nL3RyaW1yKSAoc3RyaW5nL2pvaW4gXCJcXG5cIikpXVxyXG4gIChpZiAoPSBcXG5ld2xpbmUgKGxhc3QgcykpIChzdHIgcycgXCJcXG5cIikgcycpKSlcclxuIn0gezpzeW0gcHByaW50LXN0ciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByZXR0eS1wcmludGVkIHN0cmluZyIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnQtc3RyXHJcbiBcIlJldHVybnMgdGhlIHByZXR0eS1wcmludGVkIHN0cmluZ1wiXHJcbiBbeF1cclxuIChpZiAoZm4/IHgpIChwcHJpbnQtZm4geCkgKHBwcmludC93cml0ZSB4IDpzdHJlYW0gbmlsKSkpXHJcbiJ9IHs6c3ltIHN1bW1hcml6ZS1rZXktY2xhdXNlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW1ticmFuY2ggbWF0Y2hdXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3VtbWFyaXplLWtleS1jbGF1c2VcclxuIFtbYnJhbmNoIG1hdGNoXV1cclxuIChjYXNlXHJcbiAgYnJhbmNoXHJcbiAgOnNpbXBsZVxyXG4gICg6a3cgbWF0Y2gpXHJcbiAgOmNvbXBvdW5kXHJcbiAgKGFwcGx5XHJcbiAgIGxpc3RcclxuICAgKHN5bWJvbCAobmFtZSAoOm9wIG1hdGNoKSkpXHJcbiAgIChtYXAgc3VtbWFyaXplLWtleS1jbGF1c2UgKDpjbGF1c2VzIG1hdGNoKSkpKSlcclxuIn0gezpzeW0gcHByaW50LWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnQtZm5cclxuIFtmXVxyXG4gKC0+XHJcbiAgIz8oOmNsaiAobGV0IFtbXyBucy1uIGYtbl0gKHJlLW1hdGNoZXMgI1wiKC4qKVxcJCguKj8pKF9fWzAtOV0rKT9cIiAoc3RyIGYpKV0gKGlmIChyZS1tYXRjaGVzICNcIl5mbl9fXFxkK1xcQC4qJFwiIGYtbikgYW5vbi1mbi1zdHIgKHN0ciAoY2xvanVyZS5tYWluL2RlbXVuZ2UgbnMtbikgXCIvXCIgKGNsb2p1cmUubWFpbi9kZW11bmdlIGYtbikpKSkgOmNsanMgKGxldCBbZm4tcGFydHMgKHN0cmluZy9zcGxpdCAoc2Vjb25kIChyZS1maW5kICNcIm9iamVjdFxcWyhbXlxcKCBcXF1dKykuKihcXG58XFxdKT9cIiAocHItc3RyIGYpKSkgI1wiXFwkXCIpIG5zLW4gKHN0cmluZy9qb2luIFwiLlwiIChidXRsYXN0IGZuLXBhcnRzKSkgZm4tbiAobGFzdCBmbi1wYXJ0cyldIChpZiAoZW1wdHk/IG5zLW4pIGFub24tZm4tc3RyIChzdHIgKGRlbXVuZ2Utc3RyIG5zLW4pIFwiL1wiIChkZW11bmdlLXN0ciBmbi1uKSkpKSlcclxuICAoZWxpZGUtY29yZS1ucylcclxuICAoc3RyaW5nL3JlcGxhY2UgI1wiLS1cXGQrXCIgXCJcIilcclxuICAoc3RyaW5nL3JlcGxhY2UgI1wiQFthLXpBLVowLTldK1wiIFwiXCIpKSlcclxuIn0pLCBodG1sLXNvdXAuY29yZSAoezpzeW0gbGluZS0+c2VnbWVudHMsIDptZXRhIHs6ZG9jICJTcGxpdHMgYSBsaW5lIGludG8gc2VnbWVudHMgd2hlcmUgdGFncyBhcmUgc3VwcG9zZWQgdG8gYXBwZWFyLiIsIDphcmdsaXN0cyAoW2xpbmUgdGFncy1mb3ItbGluZSBlc2NhcGU/XSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS0+c2VnbWVudHNcclxuIFwiU3BsaXRzIGEgbGluZSBpbnRvIHNlZ21lbnRzIHdoZXJlIHRhZ3MgYXJlIHN1cHBvc2VkIHRvIGFwcGVhci5cIlxyXG4gW2xpbmUgdGFncy1mb3ItbGluZSBlc2NhcGU/XVxyXG4gKGxldFxyXG4gIFtjb2x1bW5zXHJcbiAgIChzZXQgKG1hcCA6Y29sdW1uIHRhZ3MtZm9yLWxpbmUpKVxyXG4gICBlc2NhcGUtaHRtbC1jaGFyXHJcbiAgIChpZiBlc2NhcGU/IGVzY2FwZS1odG1sLWNoYXIgaWRlbnRpdHkpXVxyXG4gIChsb29wXHJcbiAgIFtpIDAgc2VnbWVudHMgKHRyYW5zaWVudCBbXSkgY3VycmVudC1zZWdtZW50ICh0cmFuc2llbnQgW10pXVxyXG4gICAoaWYtbGV0XHJcbiAgICBbYyAoc29tZS0+IGxpbmUgKGdldCBpKSBlc2NhcGUtaHRtbC1jaGFyKV1cclxuICAgIChpZlxyXG4gICAgIChjb250YWlucz8gY29sdW1ucyAoaW5jIGkpKVxyXG4gICAgIChyZWN1clxyXG4gICAgICAoaW5jIGkpXHJcbiAgICAgIChjb25qISBzZWdtZW50cyAocGVyc2lzdGVudCEgY3VycmVudC1zZWdtZW50KSlcclxuICAgICAgKHRyYW5zaWVudCBbY10pKVxyXG4gICAgIChyZWN1ciAoaW5jIGkpIHNlZ21lbnRzIChjb25qISBjdXJyZW50LXNlZ21lbnQgYykpKVxyXG4gICAgKC0+PlxyXG4gICAgIChwZXJzaXN0ZW50ISBjdXJyZW50LXNlZ21lbnQpXHJcbiAgICAgKGNvbmohIHNlZ21lbnRzKVxyXG4gICAgIHBlcnNpc3RlbnQhXHJcbiAgICAgKG1hcCBzdHIvam9pbikpKSkpKVxyXG4ifSB7OnN5bSB0YWctPmhpY2N1cCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGdpdmVuIHRhZyBkZXNjcmlwdGlvbi4iLCA6YXJnbGlzdHMgKFt0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWctPmhpY2N1cFxyXG4gXCJSZXR1cm5zIGEgSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBnaXZlbiB0YWcgZGVzY3JpcHRpb24uXCJcclxuIFt0YWddXHJcbiAoY29uZFxyXG4gICg6ZGVsaW1pdGVyPyB0YWcpXHJcbiAgWzpzcGFuIHs6Y2xhc3MgXCJkZWxpbWl0ZXJcIn1dXHJcbiAgKDplcnJvcj8gdGFnKVxyXG4gIFs6c3BhbiB7OmNsYXNzIFwiZXJyb3JcIiwgOmRhdGEtbWVzc2FnZSAoOm1lc3NhZ2UgdGFnKX1dXHJcbiAgKDpiZWdpbj8gdGFnKVxyXG4gIChsZXRcclxuICAgW3ZhbHVlICg6dmFsdWUgdGFnKV1cclxuICAgKGNvbmRcclxuICAgIChzeW1ib2w/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJzeW1ib2xcIn1dXHJcbiAgICAobGlzdD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImNvbGxlY3Rpb24gbGlzdFwifV1cclxuICAgICh2ZWN0b3I/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJjb2xsZWN0aW9uIHZlY3RvclwifV1cclxuICAgIChtYXA/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJjb2xsZWN0aW9uIG1hcFwifV1cclxuICAgIChzZXQ/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJjb2xsZWN0aW9uIHNldFwifV1cclxuICAgIChudW1iZXI/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJudW1iZXJcIn1dXHJcbiAgICAoc3RyaW5nPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwic3RyaW5nXCJ9XVxyXG4gICAgKGtleXdvcmQ/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJrZXl3b3JkXCJ9XVxyXG4gICAgKG5pbD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcIm5pbFwifV1cclxuICAgIChjb250YWlucz8gI3t0cnVlIGZhbHNlfSB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwiYm9vbGVhblwifV1cclxuICAgIDplbHNlXHJcbiAgICBbOnNwYW5dKSlcclxuICAoOmVuZD8gdGFnKVxyXG4gIG5pbCkpXHJcbiJ9IHs6c3ltIGxpbmUtPmh0bWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBnaXZlbiBsaW5lIHdpdGggaHRtbCBhZGRlZC4iLCA6YXJnbGlzdHMgKFtsaW5lIHRhZ3MtZm9yLWxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLT5odG1sXHJcbiBcIlJldHVybnMgdGhlIGdpdmVuIGxpbmUgd2l0aCBodG1sIGFkZGVkLlwiXHJcbiBbbGluZSB0YWdzLWZvci1saW5lXVxyXG4gKGxldFxyXG4gIFtodG1sLXBlci1jb2x1bW5cclxuICAgKGludG8gW10gdGFncy1mb3ItbGluZS0+aHRtbCAoc29ydC1ieSA6Y29sdW1uIHRhZ3MtZm9yLWxpbmUpKVxyXG4gICBzZWdtZW50c1xyXG4gICAobGluZS0+c2VnbWVudHMgbGluZSB0YWdzLWZvci1saW5lIHRydWUpXVxyXG4gIChzdHIvam9pblxyXG4gICAoaW50ZXJsZWF2ZSBzZWdtZW50cyAoY29uY2F0IGh0bWwtcGVyLWNvbHVtbiAocmVwZWF0IFwiXCIpKSkpKSlcclxuIn0gezpzeW0gY29kZS0+aGljY3VwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29kZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzIGFkZGVkLiIsIDphcmdsaXN0cyAoW2NvZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2RlLT5oaWNjdXBcclxuIFwiUmV0dXJucyB0aGUgY29kZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzIGFkZGVkLlwiXHJcbiBbY29kZV1cclxuIChsZXRcclxuICBbbGluZXNcclxuICAgKHNwbGl0LWxpbmVzIGNvZGUpXHJcbiAgIHRhZ3NcclxuICAgKHRzL2NvZGUtPnRhZ3MgY29kZSlcclxuICAgaGljY3VwXHJcbiAgIChwYXJzZS1saW5lcyBsaW5lLT5oaWNjdXAgbGluZXMgdGFncylcclxuICAgaGljY3VwXHJcbiAgIChhcHBseSBjb25jYXQgKGludGVycG9zZSBbXCJcXG5cIl0gaGljY3VwKSldXHJcbiAgKHN0cnVjdHVyaXplLWhpY2N1cCBoaWNjdXApKSlcclxuIn0gezpzeW0gc3BsaXQtbGluZXMsIDptZXRhIHs6ZG9jICJTcGxpdHMgdGhlIHN0cmluZyBpbnRvIGxpbmVzLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdC1saW5lc1xyXG4gXCJTcGxpdHMgdGhlIHN0cmluZyBpbnRvIGxpbmVzLlwiXHJcbiBbc11cclxuICh2ZWMgKC5zcGxpdCBzIFwiXFxuXCIgLTEpKSlcclxuIn0gezpzeW0gY29kZS0+aHRtbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvZGUgaW4gdGhlIGdpdmVuIHN0cmluZyB3aXRoIGh0bWwgYWRkZWQuIiwgOmFyZ2xpc3RzIChbY29kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvZGUtPmh0bWxcclxuIFwiUmV0dXJucyB0aGUgY29kZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggaHRtbCBhZGRlZC5cIlxyXG4gW2NvZGVdXHJcbiAobGV0XHJcbiAgW2xpbmVzXHJcbiAgIChzcGxpdC1saW5lcyBjb2RlKVxyXG4gICB0YWdzXHJcbiAgICh0cy9jb2RlLT50YWdzIGNvZGUpXHJcbiAgIGxpbmVzXHJcbiAgIChwYXJzZS1saW5lcyBsaW5lLT5odG1sIGxpbmVzIHRhZ3MpXVxyXG4gIChzdHIvam9pbiBcXG5ld2xpbmUgbGluZXMpKSlcclxuIn0gezpzeW0gbGluZS0+aGljY3VwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZ2l2ZW4gbGluZSB3aXRoIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcyBhZGRlZC4iLCA6YXJnbGlzdHMgKFtsaW5lIHRhZ3MtZm9yLWxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLT5oaWNjdXBcclxuIFwiUmV0dXJucyB0aGUgZ2l2ZW4gbGluZSB3aXRoIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcyBhZGRlZC5cIlxyXG4gW2xpbmUgdGFncy1mb3ItbGluZV1cclxuIChsZXRcclxuICBbaGljY3VwLXBlci1jb2x1bW5cclxuICAgKGludG8gW10gdGFncy1mb3ItbGluZS0+aGljY3VwIChzb3J0LWJ5IDpjb2x1bW4gdGFncy1mb3ItbGluZSkpXHJcbiAgIHNlZ21lbnRzXHJcbiAgIChtYXAgbGlzdCAobGluZS0+c2VnbWVudHMgbGluZSB0YWdzLWZvci1saW5lIGZhbHNlKSldXHJcbiAgKGFwcGx5XHJcbiAgIGNvbmNhdFxyXG4gICAoaW50ZXJsZWF2ZSBzZWdtZW50cyAoY29uY2F0IGhpY2N1cC1wZXItY29sdW1uIChyZXBlYXQgbmlsKSkpKSkpXHJcbiJ9IHs6c3ltIHRhZ3MtZm9yLWxpbmUtPmhpY2N1cCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHRhZ3MtZm9yLWxpbmUtPmhpY2N1cFxyXG4gKGNvbXBcclxuICAocGFydGl0aW9uLWJ5IDpjb2x1bW4pXHJcbiAgKG1hcCAoZm4qIFtwMV9fNDkwMTQjXSAobWFwIHRhZy0+aGljY3VwIHAxX180OTAxNCMpKSkpKVxyXG4ifSB7OnN5bSB0YWctPmh0bWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIEhUTUwgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gdGFnIGRlc2NyaXB0aW9uLiIsIDphcmdsaXN0cyAoW3RhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhZy0+aHRtbFxyXG4gXCJSZXR1cm5zIGFuIEhUTUwgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gdGFnIGRlc2NyaXB0aW9uLlwiXHJcbiBbdGFnXVxyXG4gKGNvbmRcclxuICAoOmRlbGltaXRlcj8gdGFnKVxyXG4gIFwiPHNwYW4gY2xhc3M9J2RlbGltaXRlcic+XCJcclxuICAoOmVycm9yPyB0YWcpXHJcbiAgKGZvcm1hdFxyXG4gICBcIjxzcGFuIGNsYXNzPSdlcnJvcicgZGF0YS1tZXNzYWdlPSclcyc+PC9zcGFuPlwiXHJcbiAgIChzb21lLT4gKDptZXNzYWdlIHRhZykgZXNjYXBlLWh0bWwtc3RyKSlcclxuICAoOmJlZ2luPyB0YWcpXHJcbiAgKGxldFxyXG4gICBbdmFsdWUgKDp2YWx1ZSB0YWcpXVxyXG4gICAoY29uZFxyXG4gICAgKHN5bWJvbD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdzeW1ib2wnPlwiXHJcbiAgICAobGlzdD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdjb2xsZWN0aW9uIGxpc3QnPlwiXHJcbiAgICAodmVjdG9yPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2NvbGxlY3Rpb24gdmVjdG9yJz5cIlxyXG4gICAgKG1hcD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdjb2xsZWN0aW9uIG1hcCc+XCJcclxuICAgIChzZXQ/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nY29sbGVjdGlvbiBzZXQnPlwiXHJcbiAgICAobnVtYmVyPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J251bWJlcic+XCJcclxuICAgIChzdHJpbmc/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nc3RyaW5nJz5cIlxyXG4gICAgKGtleXdvcmQ/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0na2V5d29yZCc+XCJcclxuICAgIChuaWw/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nbmlsJz5cIlxyXG4gICAgKGNvbnRhaW5zPyAje3RydWUgZmFsc2V9IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nYm9vbGVhbic+XCJcclxuICAgIDplbHNlXHJcbiAgICBcIjxzcGFuPlwiKSlcclxuICAoOmVuZD8gdGFnKVxyXG4gIFwiPC9zcGFuPlwiKSlcclxuIn0gezpzeW0gZXNjYXBlLWh0bWwtc3RyLCA6bWV0YSB7OmRvYyAiRXNjYXBlcyBhbiBIVE1MIHN0cmluZyIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NhcGUtaHRtbC1zdHJcclxuIFwiRXNjYXBlcyBhbiBIVE1MIHN0cmluZ1wiXHJcbiBbc11cclxuIChzdHIvZXNjYXBlXHJcbiAgc1xyXG4gIHtcXDwgXCImbHQ7XCIsIFxcPiBcIiZndDtcIiwgXFwmIFwiJmFtcDtcIiwgXFxcIiBcIiZxdW90O1wiLCBcXCcgXCImYXBvcztcIn0pKVxyXG4ifSB7OnN5bSB0YWdzLWZvci1saW5lLT5odG1sLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gdGFncy1mb3ItbGluZS0+aHRtbFxyXG4gKGNvbXBcclxuICAocGFydGl0aW9uLWJ5IDpjb2x1bW4pXHJcbiAgKG1hcCAoZm4qIFtwMV9fNDkwMTMjXSAoc3RyL2pvaW4gKG1hcCB0YWctPmh0bWwgcDFfXzQ5MDEzIykpKSkpKVxyXG4ifSB7OnN5bSBzdHJ1Y3R1cml6ZS1oaWNjdXAsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZsYXQgbGlzdCBvZiBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIGFuZCBhZGRzIHN0cnVjdHVyZSB0byBpdC4iLCA6YXJnbGlzdHMgW1tmbGF0LWhpY2N1cF0gW2ZsYXQtaGljY3VwIHN0cnVjdHVyZWQtaGljY3VwXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RydWN0dXJpemUtaGljY3VwXHJcbiBcIlRha2VzIGEgZmxhdCBsaXN0IG9mIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgYW5kIGFkZHMgc3RydWN0dXJlIHRvIGl0LlwiXHJcbiAoW2ZsYXQtaGljY3VwXSAoc2Vjb25kIChzdHJ1Y3R1cml6ZS1oaWNjdXAgZmxhdC1oaWNjdXAgWzpzcGFuXSkpKVxyXG4gKFtmbGF0LWhpY2N1cCBzdHJ1Y3R1cmVkLWhpY2N1cF1cclxuICAobG9vcFxyXG4gICBbZmxhdC1oaWNjdXAgZmxhdC1oaWNjdXAgc3RydWN0dXJlZC1oaWNjdXAgc3RydWN0dXJlZC1oaWNjdXBdXHJcbiAgIChpZi1sZXRcclxuICAgIFt0b2tlbiAoZmlyc3QgZmxhdC1oaWNjdXApXVxyXG4gICAgKGNvbmRcclxuICAgICAoc3RyaW5nPyB0b2tlbilcclxuICAgICAocmVjdXIgKHJlc3QgZmxhdC1oaWNjdXApIChjb25qIHN0cnVjdHVyZWQtaGljY3VwIHRva2VuKSlcclxuICAgICAodmVjdG9yPyB0b2tlbilcclxuICAgICAobGV0XHJcbiAgICAgIFtbZmxhdCBzdHJ1Y3R1cmVkXSAoc3RydWN0dXJpemUtaGljY3VwIChyZXN0IGZsYXQtaGljY3VwKSB0b2tlbildXHJcbiAgICAgIChyZWN1ciBmbGF0IChjb25qIHN0cnVjdHVyZWQtaGljY3VwIHN0cnVjdHVyZWQpKSkpXHJcbiAgICBbKHJlc3QgZmxhdC1oaWNjdXApIHN0cnVjdHVyZWQtaGljY3VwXSkpKSlcclxuIn0gezpzeW0gZXNjYXBlLWh0bWwtY2hhciwgOm1ldGEgezpkb2MgIkVzY2FwZXMgYW4gSFRNTCBjaGFyYWN0ZXIiLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjYXBlLWh0bWwtY2hhclxyXG4gXCJFc2NhcGVzIGFuIEhUTUwgY2hhcmFjdGVyXCJcclxuIFtzXVxyXG4gKGNhc2UgcyBcXDwgXCImbHQ7XCIgXFw+IFwiJmd0O1wiIFxcJiBcIiZhbXA7XCIgXFxcIiBcIiZxdW90O1wiIFxcJyBcIiZhcG9zO1wiIHMpKVxyXG4ifSB7OnN5bSBwYXJzZS1saW5lcywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxpbmVzIHBhcnNlZCB3aXRoIHRoZSBnaXZlbiBmdW5jdGlvbi4iLCA6YXJnbGlzdHMgKFtwYXJzZS1mbiBsaW5lcyB0YWdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtbGluZXNcclxuIFwiUmV0dXJucyB0aGUgbGluZXMgcGFyc2VkIHdpdGggdGhlIGdpdmVuIGZ1bmN0aW9uLlwiXHJcbiBbcGFyc2UtZm4gbGluZXMgdGFnc11cclxuIChsb29wXHJcbiAgW2kgMCByZXN1bHRzICh0cmFuc2llbnQgW10pXVxyXG4gIChpZi1sZXRcclxuICAgW2xpbmUgKGdldCBsaW5lcyBpKV1cclxuICAgKHJlY3VyIChpbmMgaSkgKGNvbmohIHJlc3VsdHMgKHBhcnNlLWZuIGxpbmUgKGdldCB0YWdzIChpbmMgaSkpKSkpXHJcbiAgIChwZXJzaXN0ZW50ISByZXN1bHRzKSkpKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyICh7OnN5bSByZWFkK3N0cmluZywgOm1ldGEgezpkb2MgIkxpa2UgcmVhZCwgYW5kIHRha2luZyB0aGUgc2FtZSBhcmdzLiByZWFkZXIgbXVzdCBiZSBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cbiAgUmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBvYmplY3QgcmVhZCBhbmQgdGhlICh3aGl0ZXNwYWNlLXRyaW1tZWQpIHN0cmluZyByZWFkLiIsIDphcmdsaXN0cyBbW3N0cmVhbV0gW3N0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZV0gW29wdHMgc3RyZWFtXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZCtzdHJpbmdcclxuIFwiTGlrZSByZWFkLCBhbmQgdGFraW5nIHRoZSBzYW1lIGFyZ3MuIHJlYWRlciBtdXN0IGJlIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxcbiAgUmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBvYmplY3QgcmVhZCBhbmQgdGhlICh3aGl0ZXNwYWNlLXRyaW1tZWQpIHN0cmluZyByZWFkLlwiXHJcbiAoW3N0cmVhbV0gKHJlYWQrc3RyaW5nIHN0cmVhbSB0cnVlIG5pbCkpXHJcbiAoW3N0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZV1cclxuICAobGV0XHJcbiAgIFtidWZcclxuICAgIChmbiBbcmVhZGVyXSAoc3RyICg6YnVmZmVyIEAoLi1mcmFtZXMgc3RyZWFtKSkpKVxyXG4gICAgb2Zmc2V0XHJcbiAgICAoY291bnQgKGJ1ZiBzdHJlYW0pKVxyXG4gICAgb1xyXG4gICAgKGxvZy1zb3VyY2Ugc3RyZWFtIChyZWFkIHN0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZSkpXHJcbiAgICBzXHJcbiAgICAoLnRyaW0gKHN1YnMgKGJ1ZiBzdHJlYW0pIG9mZnNldCkpXVxyXG4gICBbbyBzXSkpXHJcbiAoW29wdHMgc3RyZWFtXVxyXG4gIChsZXRcclxuICAgW2J1ZlxyXG4gICAgKGZuIFtyZWFkZXJdIChzdHIgKDpidWZmZXIgQCguLWZyYW1lcyBzdHJlYW0pKSkpXHJcbiAgICBvZmZzZXRcclxuICAgIChjb3VudCAoYnVmIHN0cmVhbSkpXHJcbiAgICBvXHJcbiAgICAobG9nLXNvdXJjZSBzdHJlYW0gKHJlYWQgb3B0cyBzdHJlYW0pKVxyXG4gICAgc1xyXG4gICAgKC50cmltIChzdWJzIChidWYgc3RyZWFtKSBvZmZzZXQpKV1cclxuICAgW28gc10pKSlcclxuIn0gezpzeW0gYm9vbD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYm9vbD8gW3hdIChvciAoaW5zdGFuY2U/IGpzL0Jvb2xlYW4geCkgKHRydWU/IHgpIChmYWxzZT8geCkpKVxyXG4ifSB7OnN5bSAqc3VwcHJlc3MtcmVhZCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpzdXBwcmVzcy1yZWFkKiBmYWxzZSlcclxuIn0gezpzeW0gKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXHJcbiBcIldoZW4gbm8gZGF0YSByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnIGFuZCAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipcXG4gIGlzIG5vbi1uaWwsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgdGhlIHRhZyBhbmQgdGhlIHZhbHVlLlxcbiAgSWYgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qIGlzIG5pbCAodGhlIGRlZmF1bHQgdmFsdWUpLCBhbiBleGNlcHRpb25cXG4gIHdpbGwgYmUgdGhyb3duIGZvciB0aGUgdW5rbm93biB0YWcuXCJcclxuIChmbiBbdGFnIHZhbHVlXSkpXHJcbiJ9IHs6c3ltIHJlYWQsIDptZXRhIHs6ZG9jICJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZS5cbiAgIE90aGVyd2lzZSByZXR1cm5zIHNlbnRpbmVsLiBJZiBubyBzdHJlYW0gaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxuXG4gICBPcHRzIGlzIGEgcGVyc2lzdGVudCBtYXAgd2l0aCB2YWxpZCBrZXlzOlxuICAgIDpyZWFkLWNvbmQgLSA6YWxsb3cgdG8gcHJvY2VzcyByZWFkZXIgY29uZGl0aW9uYWxzLCBvclxuICAgICAgICAgICAgICAgICA6cHJlc2VydmUgdG8ga2VlcCBhbGwgYnJhbmNoZXNcbiAgICA6ZmVhdHVyZXMgLSBwZXJzaXN0ZW50IHNldCBvZiBmZWF0dXJlIGtleXdvcmRzIGZvciByZWFkZXIgY29uZGl0aW9uYWxzXG4gICAgOmVvZiAtIG9uIGVvZiwgcmV0dXJuIHZhbHVlIHVubGVzcyA6ZW9mdGhyb3csIHRoZW4gdGhyb3cuXG4gICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdGhyb3dcblxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkXG5cbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsanMudG9vbHMucmVhZGVyL3JlYWQgYW5kXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZyIsIDphcmdsaXN0cyBbW3JlYWRlcl0gW3tlb2YgOmVvZiwgOmFzIG9wdHMsIDpvciB7ZW9mIDplb2Z0aHJvd319IHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZFxyXG4gXCJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxcbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUuXFxuICAgT3RoZXJ3aXNlIHJldHVybnMgc2VudGluZWwuIElmIG5vIHN0cmVhbSBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXFxuXFxuICAgT3B0cyBpcyBhIHBlcnNpc3RlbnQgbWFwIHdpdGggdmFsaWQga2V5czpcXG4gICAgOnJlYWQtY29uZCAtIDphbGxvdyB0byBwcm9jZXNzIHJlYWRlciBjb25kaXRpb25hbHMsIG9yXFxuICAgICAgICAgICAgICAgICA6cHJlc2VydmUgdG8ga2VlcCBhbGwgYnJhbmNoZXNcXG4gICAgOmZlYXR1cmVzIC0gcGVyc2lzdGVudCBzZXQgb2YgZmVhdHVyZSBrZXl3b3JkcyBmb3IgcmVhZGVyIGNvbmRpdGlvbmFsc1xcbiAgICA6ZW9mIC0gb24gZW9mLCByZXR1cm4gdmFsdWUgdW5sZXNzIDplb2Z0aHJvdywgdGhlbiB0aHJvdy5cXG4gICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdGhyb3dcXG5cXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWRcXG5cXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbGpzLnRvb2xzLnJlYWRlci9yZWFkIGFuZFxcbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nXCJcclxuIHs6YXJnbGlzdHMgJyhbcmVhZGVyXSBbb3B0cyByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBlb2YtdmFsdWVdKX1cclxuIChbcmVhZGVyXSAocmVhZCByZWFkZXIgdHJ1ZSBuaWwpKVxyXG4gKFt7ZW9mIDplb2YsIDphcyBvcHRzLCA6b3Ige2VvZiA6ZW9mdGhyb3d9fSByZWFkZXJdXHJcbiAgKHJlYWQqIHJlYWRlciAoPSBlb2YgOmVvZnRocm93KSBlb2YgbmlsIG9wdHMgKHRvLWFycmF5IFtdKSkpXHJcbiAoW3JlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsXVxyXG4gIChyZWFkKiByZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbCBuaWwge30gKHRvLWFycmF5IFtdKSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LWRhdGEtcmVhZGVycywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGRlZmF1bHQtZGF0YS1yZWFkZXJzXHJcbiBcIkRlZmF1bHQgbWFwIG9mIGRhdGEgcmVhZGVyIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBDbG9qdXJlLlxcbiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgYmluZGluZyAqZGF0YS1yZWFkZXJzKlwiXHJcbiB7fSlcclxuIn0gezpzeW0gKmRhdGEtcmVhZGVycyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqZGF0YS1yZWFkZXJzKlxyXG4gXCJNYXAgZnJvbSByZWFkZXIgdGFnIHN5bWJvbHMgdG8gZGF0YSByZWFkZXIgVmFycy5cXG4gIFJlYWRlciB0YWdzIHdpdGhvdXQgbmFtZXNwYWNlIHF1YWxpZmllcnMgYXJlIHJlc2VydmVkIGZvciBDbG9qdXJlLlxcbiAgVGhpcyBsaWdodCB2ZXJzaW9uIG9mIHRvb2xzLnJlYWRlciBoYXMgbm8gaW1wbGVtZW50YXRpb24gZm9yIGRlZmF1bHRcXG4gIHJlYWRlciB0YWdzIHN1Y2ggYXMgI2luc3QgYW5kICN1dWlkLlwiXHJcbiB7fSlcclxuIn0gezpzeW0gKnJlYWQtZGVsaW0qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcmVhZC1kZWxpbSogZmFsc2UpXHJcbiJ9IHs6c3ltIHJlc29sdmUtc3ltYm9sLCA6bWV0YSB7OmRvYyAiUmVzb2x2ZSBhIHN5bWJvbCBzIGludG8gaXRzIGZ1bGx5IHF1YWxpZmllZCBuYW1lc3BhY2UgdmVyc2lvbiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXN5bWJvbFxyXG4gXCJSZXNvbHZlIGEgc3ltYm9sIHMgaW50byBpdHMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzcGFjZSB2ZXJzaW9uXCJcclxuIFtzXVxyXG4gcylcclxuIn0gezpzeW0gKmFsaWFzLW1hcCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqYWxpYXMtbWFwKlxyXG4gXCJNYXAgZnJvbSBucyBhbGlhcyB0byBucywgaWYgbm9uLW5pbCwgaXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgcmVhZC10aW1lXFxuICAgbnMgYWxpYXNlcy5cXG5cXG4gICBEZWZhdWx0cyB0byBuaWxcIlxyXG4gbmlsKVxyXG4ifSB7OnN5bSAqd3JhcC12YWx1ZS1hbmQtYWRkLW1ldGFkYXRhPyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp3cmFwLXZhbHVlLWFuZC1hZGQtbWV0YWRhdGE/KiBmYWxzZSlcclxuIn0gezpzeW0gcmVhZC1yZWdleCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2ggb3B0cyBwZW5kaW5nLWZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1yZWdleFxyXG4gW3JkciBjaCBvcHRzIHBlbmRpbmctZm9ybXNdXHJcbiAobGV0XHJcbiAgW3NiIChTdHJpbmdCdWZmZXIuKV1cclxuICAobG9vcFxyXG4gICBbY2ggKHJlYWQtY2hhciByZHIpXVxyXG4gICAoaWZcclxuICAgIChpZGVudGljYWw/IFxcXCIgY2gpXHJcbiAgICAoc3RyIHNiKVxyXG4gICAgKGlmXHJcbiAgICAgKG5pbD8gY2gpXHJcbiAgICAgKGVyci90aHJvdy1lb2YtcmVhZGluZyByZHIgOnJlZ2V4IHNiKVxyXG4gICAgIChkb1xyXG4gICAgICAoLmFwcGVuZCBzYiBjaClcclxuICAgICAgKHdoZW5cclxuICAgICAgIChpZGVudGljYWw/IFxcXFwgY2gpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW2NoIChyZWFkLWNoYXIgcmRyKV1cclxuICAgICAgICAoaWYgKG5pbD8gY2gpIChlcnIvdGhyb3ctZW9mLXJlYWRpbmcgcmRyIDpyZWdleCBzYikpXHJcbiAgICAgICAgKC5hcHBlbmQgc2IgY2gpKSlcclxuICAgICAgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSkpKSkpKSlcclxuIn0gezpzeW0gc2IsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHNiIChTdHJpbmdCdWZmZXIuKSlcclxuIn0gezpzeW0gcmVhZC1zdHJpbmcsIDptZXRhIHs6ZG9jICJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cblxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZ1xuXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbGpzLnRvb2xzLnJlYWRlci9yZWFkLXN0cmluZyBhbmRcbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZyBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZyIsIDphcmdsaXN0cyBbW3NdIFtvcHRzIHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXN0cmluZ1xyXG4gXCJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxcbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXFxuXFxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZ1xcblxcbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsanMudG9vbHMucmVhZGVyL3JlYWQtc3RyaW5nIGFuZFxcbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZyBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZ1wiXHJcbiAoW3NdIChyZWFkLXN0cmluZyB7fSBzKSlcclxuIChbb3B0cyBzXVxyXG4gICh3aGVuXHJcbiAgIChhbmQgcyAobm90IChpZGVudGljYWw/IHMgXCJcIikpKVxyXG4gICAocmVhZCBvcHRzIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzKSkpKSlcclxuIn0gezpzeW0gbWFwLWZ1bmMsIDptZXRhIHs6ZG9jICJEZWNpZGUgd2hpY2ggbWFwIHR5cGUgdG8gdXNlLCBhcnJheS1tYXAgaWYgbGVzcyB0aGFuIDE2IGVsZW1lbnRzIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1mdW5jXHJcbiBcIkRlY2lkZSB3aGljaCBtYXAgdHlwZSB0byB1c2UsIGFycmF5LW1hcCBpZiBsZXNzIHRoYW4gMTYgZWxlbWVudHNcIlxyXG4gW2NvbGxdXHJcbiAoaWYgKD49IChjb3VudCBjb2xsKSAxNikgJ2NsanMuY29yZS9oYXNoLW1hcCAnY2xqcy5jb3JlL2FycmF5LW1hcCkpXHJcbiJ9KSwgY2xqcy50b29scy5yZWFkZXIgKHs6c3ltIHJlYWQrc3RyaW5nLCA6bWV0YSB7OmRvYyAiTGlrZSByZWFkLCBhbmQgdGFraW5nIHRoZSBzYW1lIGFyZ3MuIHJlYWRlciBtdXN0IGJlIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxuICBSZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9iamVjdCByZWFkIGFuZCB0aGUgKHdoaXRlc3BhY2UtdHJpbW1lZCkgc3RyaW5nIHJlYWQuIiwgOmFyZ2xpc3RzIFtbc3RyZWFtXSBbc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlXSBbb3B0cyBzdHJlYW1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkK3N0cmluZ1xyXG4gXCJMaWtlIHJlYWQsIGFuZCB0YWtpbmcgdGhlIHNhbWUgYXJncy4gcmVhZGVyIG11c3QgYmUgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXFxuICBSZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9iamVjdCByZWFkIGFuZCB0aGUgKHdoaXRlc3BhY2UtdHJpbW1lZCkgc3RyaW5nIHJlYWQuXCJcclxuIChbc3RyZWFtXSAocmVhZCtzdHJpbmcgc3RyZWFtIHRydWUgbmlsKSlcclxuIChbc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlXVxyXG4gIChsZXRcclxuICAgW2J1ZlxyXG4gICAgKGZuIFtyZWFkZXJdIChzdHIgKDpidWZmZXIgQCguLWZyYW1lcyBzdHJlYW0pKSkpXHJcbiAgICBvZmZzZXRcclxuICAgIChjb3VudCAoYnVmIHN0cmVhbSkpXHJcbiAgICBvXHJcbiAgICAobG9nLXNvdXJjZSBzdHJlYW0gKHJlYWQgc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlKSlcclxuICAgIHNcclxuICAgICgudHJpbSAoc3VicyAoYnVmIHN0cmVhbSkgb2Zmc2V0KSldXHJcbiAgIFtvIHNdKSlcclxuIChbb3B0cyBzdHJlYW1dXHJcbiAgKGxldFxyXG4gICBbYnVmXHJcbiAgICAoZm4gW3JlYWRlcl0gKHN0ciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHN0cmVhbSkpKSlcclxuICAgIG9mZnNldFxyXG4gICAgKGNvdW50IChidWYgc3RyZWFtKSlcclxuICAgIG9cclxuICAgIChsb2ctc291cmNlIHN0cmVhbSAocmVhZCBvcHRzIHN0cmVhbSkpXHJcbiAgICBzXHJcbiAgICAoLnRyaW0gKHN1YnMgKGJ1ZiBzdHJlYW0pIG9mZnNldCkpXVxyXG4gICBbbyBzXSkpKVxyXG4ifSB7OnN5bSBib29sPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBib29sPyBbeF0gKG9yIChpbnN0YW5jZT8ganMvQm9vbGVhbiB4KSAodHJ1ZT8geCkgKGZhbHNlPyB4KSkpXHJcbiJ9IHs6c3ltICpzdXBwcmVzcy1yZWFkKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnN1cHByZXNzLXJlYWQqIGZhbHNlKVxyXG4ifSB7OnN5bSAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipcclxuIFwiV2hlbiBubyBkYXRhIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcgYW5kICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKlxcbiAgaXMgbm9uLW5pbCwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuXFxuICBJZiAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiogaXMgbmlsICh0aGUgZGVmYXVsdCB2YWx1ZSksIGFuIGV4Y2VwdGlvblxcbiAgd2lsbCBiZSB0aHJvd24gZm9yIHRoZSB1bmtub3duIHRhZy5cIlxyXG4gbmlsKVxyXG4ifSB7OnN5bSByZWFkLCA6bWV0YSB7OmRvYyAiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUuXG4gICBPdGhlcndpc2UgcmV0dXJucyBzZW50aW5lbC4gSWYgbm8gc3RyZWFtIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cblxuICAgT3B0cyBpcyBhIHBlcnNpc3RlbnQgbWFwIHdpdGggdmFsaWQga2V5czpcbiAgICA6cmVhZC1jb25kIC0gOmFsbG93IHRvIHByb2Nlc3MgcmVhZGVyIGNvbmRpdGlvbmFscywgb3JcbiAgICAgICAgICAgICAgICAgOnByZXNlcnZlIHRvIGtlZXAgYWxsIGJyYW5jaGVzXG4gICAgOmZlYXR1cmVzIC0gcGVyc2lzdGVudCBzZXQgb2YgZmVhdHVyZSBrZXl3b3JkcyBmb3IgcmVhZGVyIGNvbmRpdGlvbmFsc1xuICAgIDplb2YgLSBvbiBlb2YsIHJldHVybiB2YWx1ZSB1bmxlc3MgOmVvZnRocm93LCB0aGVuIHRocm93LlxuICAgICAgICAgICBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIHRocm93XG5cbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZFxuXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbG9qdXJlLnRvb2xzLnJlYWRlci9yZWFkIGFuZFxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmciLCA6YXJnbGlzdHMgW1tyZWFkZXJdIFt7ZW9mIDplb2YsIDphcyBvcHRzLCA6b3Ige2VvZiA6ZW9mdGhyb3d9fSByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRcclxuIFwiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlLlxcbiAgIE90aGVyd2lzZSByZXR1cm5zIHNlbnRpbmVsLiBJZiBubyBzdHJlYW0gaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxcblxcbiAgIE9wdHMgaXMgYSBwZXJzaXN0ZW50IG1hcCB3aXRoIHZhbGlkIGtleXM6XFxuICAgIDpyZWFkLWNvbmQgLSA6YWxsb3cgdG8gcHJvY2VzcyByZWFkZXIgY29uZGl0aW9uYWxzLCBvclxcbiAgICAgICAgICAgICAgICAgOnByZXNlcnZlIHRvIGtlZXAgYWxsIGJyYW5jaGVzXFxuICAgIDpmZWF0dXJlcyAtIHBlcnNpc3RlbnQgc2V0IG9mIGZlYXR1cmUga2V5d29yZHMgZm9yIHJlYWRlciBjb25kaXRpb25hbHNcXG4gICAgOmVvZiAtIG9uIGVvZiwgcmV0dXJuIHZhbHVlIHVubGVzcyA6ZW9mdGhyb3csIHRoZW4gdGhyb3cuXFxuICAgICAgICAgICBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIHRocm93XFxuXFxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkXFxuXFxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xvanVyZS50b29scy5yZWFkZXIvcmVhZCBhbmRcXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZ1wiXHJcbiB7OmFyZ2xpc3RzICcoW3JlYWRlcl0gW29wdHMgcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gZW9mLXZhbHVlXSl9XHJcbiAoW3JlYWRlcl0gKHJlYWQgcmVhZGVyIHRydWUgbmlsKSlcclxuIChbe2VvZiA6ZW9mLCA6YXMgb3B0cywgOm9yIHtlb2YgOmVvZnRocm93fX0gcmVhZGVyXVxyXG4gIChyZWFkKiByZWFkZXIgKD0gZW9mIDplb2Z0aHJvdykgZW9mIG5pbCBvcHRzICh0by1hcnJheSBbXSkpKVxyXG4gKFtyZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbF1cclxuICAocmVhZCogcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWwgbmlsIHt9ICh0by1hcnJheSBbXSkpKSlcclxuIn0gezpzeW0gZGVmYXVsdC1kYXRhLXJlYWRlcnMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBkZWZhdWx0LWRhdGEtcmVhZGVyc1xyXG4gXCJEZWZhdWx0IG1hcCBvZiBkYXRhIHJlYWRlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgQ2xvanVyZS5cXG4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IGJpbmRpbmcgKmRhdGEtcmVhZGVycypcIlxyXG4ge30pXHJcbiJ9IHs6c3ltICpkYXRhLXJlYWRlcnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmRhdGEtcmVhZGVycypcclxuIFwiTWFwIGZyb20gcmVhZGVyIHRhZyBzeW1ib2xzIHRvIGRhdGEgcmVhZGVyIFZhcnMuXFxuICBSZWFkZXIgdGFncyB3aXRob3V0IG5hbWVzcGFjZSBxdWFsaWZpZXJzIGFyZSByZXNlcnZlZCBmb3IgQ2xvanVyZS5cXG4gIFRoaXMgbGlnaHQgdmVyc2lvbiBvZiB0b29scy5yZWFkZXIgaGFzIG5vIGltcGxlbWVudGF0aW9uIGZvciBkZWZhdWx0XFxuICByZWFkZXIgdGFncyBzdWNoIGFzICNpbnN0IGFuZCAjdXVpZC5cIlxyXG4ge30pXHJcbiJ9IHs6c3ltICpyZWFkLWRlbGltKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnJlYWQtZGVsaW0qIGZhbHNlKVxyXG4ifSB7OnN5bSByZXNvbHZlLXN5bWJvbCwgOm1ldGEgezpkb2MgIlJlc29sdmUgYSBzeW1ib2wgcyBpbnRvIGl0cyBmdWxseSBxdWFsaWZpZWQgbmFtZXNwYWNlIHZlcnNpb24iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1zeW1ib2xcclxuIFwiUmVzb2x2ZSBhIHN5bWJvbCBzIGludG8gaXRzIGZ1bGx5IHF1YWxpZmllZCBuYW1lc3BhY2UgdmVyc2lvblwiXHJcbiBbc11cclxuICh0aHJvdyAoZXgtaW5mbyBcInJlc29sdmUtc3ltYm9sIGlzIG5vdCBpbXBsZW1lbnRlZFwiIHs6c3ltIHN9KSkpXHJcbiJ9IHs6c3ltICphbGlhcy1tYXAqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmFsaWFzLW1hcCpcclxuIFwiTWFwIGZyb20gbnMgYWxpYXMgdG8gbnMsIGlmIG5vbi1uaWwsIGl0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIHJlYWQtdGltZVxcbiAgIG5zIGFsaWFzZXMuXFxuXFxuICAgRGVmYXVsdHMgdG8gbmlsXCJcclxuIG5pbClcclxuIn0gezpzeW0gcmVhZC1yZWdleCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2ggb3B0cyBwZW5kaW5nLWZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1yZWdleFxyXG4gW3JkciBjaCBvcHRzIHBlbmRpbmctZm9ybXNdXHJcbiAobGV0XHJcbiAgW3NiIChTdHJpbmdCdWZmZXIuKV1cclxuICAobG9vcFxyXG4gICBbY2ggKHJlYWQtY2hhciByZHIpXVxyXG4gICAoaWZcclxuICAgIChpZGVudGljYWw/IFxcXCIgY2gpXHJcbiAgICAocmUtcGF0dGVybiAoc3RyIHNiKSlcclxuICAgIChpZlxyXG4gICAgIChuaWw/IGNoKVxyXG4gICAgIChlcnIvdGhyb3ctZW9mLXJlYWRpbmcgcmRyIDpyZWdleCBzYilcclxuICAgICAoZG9cclxuICAgICAgKC5hcHBlbmQgc2IgY2gpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoaWRlbnRpY2FsPyBcXFxcIGNoKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtjaCAocmVhZC1jaGFyIHJkcildXHJcbiAgICAgICAgKGlmIChuaWw/IGNoKSAoZXJyL3Rocm93LWVvZi1yZWFkaW5nIHJkciA6cmVnZXggc2IpKVxyXG4gICAgICAgICguYXBwZW5kIHNiIGNoKSkpXHJcbiAgICAgIChyZWN1ciAocmVhZC1jaGFyIHJkcikpKSkpKSkpXHJcbiJ9IHs6c3ltIHNiLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBzYiAoU3RyaW5nQnVmZmVyLikpXHJcbiJ9IHs6c3ltIHJlYWQtc3RyaW5nLCA6bWV0YSB7OmRvYyAiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXG5cbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmdcblxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xvanVyZS50b29scy5yZWFkZXIvcmVhZC1zdHJpbmcgYW5kXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmcgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmciLCA6YXJnbGlzdHMgW1tzXSBbb3B0cyBzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zdHJpbmdcclxuIFwiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxcblxcbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmdcXG5cXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbG9qdXJlLnRvb2xzLnJlYWRlci9yZWFkLXN0cmluZyBhbmRcXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmcgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmdcIlxyXG4gKFtzXSAocmVhZC1zdHJpbmcge30gcykpXHJcbiAoW29wdHMgc11cclxuICAod2hlblxyXG4gICAoYW5kIHMgKG5vdCAoaWRlbnRpY2FsPyBzIFwiXCIpKSlcclxuICAgKHJlYWQgb3B0cyAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcykpKSkpXHJcbiJ9IHs6c3ltIG1hcC1mdW5jLCA6bWV0YSB7OmRvYyAiRGVjaWRlIHdoaWNoIG1hcCB0eXBlIHRvIHVzZSwgYXJyYXktbWFwIGlmIGxlc3MgdGhhbiAxNiBlbGVtZW50cyIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtZnVuY1xyXG4gXCJEZWNpZGUgd2hpY2ggbWFwIHR5cGUgdG8gdXNlLCBhcnJheS1tYXAgaWYgbGVzcyB0aGFuIDE2IGVsZW1lbnRzXCJcclxuIFtjb2xsXVxyXG4gKGlmICg+PSAoY291bnQgY29sbCkgMTYpICdjbGpzLmNvcmUvaGFzaC1tYXAgJ2NsanMuY29yZS9hcnJheS1tYXApKVxyXG4ifSksIHNhYmxvbm8udXRpbCAoezpzeW0gam9pbi1jbGFzc2VzLCA6bWV0YSB7OmRvYyAiSm9pbiB0aGUgYGNsYXNzZXNgIHdpdGggYSB3aGl0ZXNwYWNlLiIsIDphcmdsaXN0cyAoW2NsYXNzZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqb2luLWNsYXNzZXNcclxuIFwiSm9pbiB0aGUgYGNsYXNzZXNgIHdpdGggYSB3aGl0ZXNwYWNlLlwiXHJcbiBbY2xhc3Nlc11cclxuICgtPj5cclxuICBjbGFzc2VzXHJcbiAgKGludG9cclxuICAgW11cclxuICAgKGNvbXAgKG1hcGNhdCAoZm4gW3hdIChpZiAoc3RyaW5nPyB4KSBbeF0gKHNlcSB4KSkpKSAocmVtb3ZlIG5pbD8pKSlcclxuICAoc3RyL2pvaW4gXCIgXCIpKSlcclxuIn0gezpzeW0gdG8tc3RyLCA6bWV0YSB7OmRvYyAiQ29udmVydCBhIHZhbHVlIGludG8gYSBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIFRvU3RyaW5nfSB7OnN5bSByZWFjdC1mbiwgOm1ldGEgezpkb2MgIlJldHVybiB0aGUgc3ltYm9sIG9mIGEgZm4gdGhhdCBidWlsZCBhIFJlYWN0IGVsZW1lbnQuICIsIDphcmdsaXN0cyAoW3R5cGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFjdC1mblxyXG4gXCJSZXR1cm4gdGhlIHN5bWJvbCBvZiBhIGZuIHRoYXQgYnVpbGQgYSBSZWFjdCBlbGVtZW50LiBcIlxyXG4gW3R5cGVdXHJcbiAoaWZcclxuICAoY29udGFpbnM/ICN7OnRleHRhcmVhIDppbnB1dCA6c2VsZWN0fSAoa2V5d29yZCB0eXBlKSlcclxuICAnc2FibG9uby5pbnRlcnByZXRlci9jcmVhdGUtZWxlbWVudFxyXG4gICdqcy9SZWFjdC5jcmVhdGVFbGVtZW50KSlcclxuIn0gezpzeW0gY2FtZWwtY2FzZS1rZXlzLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgaW50byBjYW1lbCBjYXNlLiIsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW1lbC1jYXNlLWtleXNcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgaW50byBjYW1lbCBjYXNlLlwiXHJcbiBbbV1cclxuIChpZlxyXG4gIChtYXA/IG0pXHJcbiAgKGxldFxyXG4gICBbbSAoaW50byB7fSAobWFwIChmbiBbW2sgdl1dIFsoY2FtZWwtY2FzZSBrKSB2XSkpIG0pXVxyXG4gICAoY29uZC0+IG0gKG1hcD8gKDpzdHlsZSBtKSkgKHVwZGF0ZSA6c3R5bGUgY2FtZWwtY2FzZS1rZXlzKSkpXHJcbiAgbSkpXHJcbiJ9IHs6c3ltIGVsZW1lbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgYHhgIGlzIGFuIEhUTUwgZWxlbWVudC4gVHJ1ZSB3aGVuIGB4YCBpcyBhIHZlY3RvclxuICBhbmQgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBrZXl3b3JkLCBlLmcuIGBbOmRpdl1gIG9yIGBbOmRpdiBbOnNwYW4gXCJ4XCJdYC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxlbWVudD9cclxuIFwiUmV0dXJuIHRydWUgaWYgYHhgIGlzIGFuIEhUTUwgZWxlbWVudC4gVHJ1ZSB3aGVuIGB4YCBpcyBhIHZlY3RvclxcbiAgYW5kIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEga2V5d29yZCwgZS5nLiBgWzpkaXZdYCBvciBgWzpkaXYgWzpzcGFuIFxcXCJ4XFxcIl1gLlwiXHJcbiBbeF1cclxuIChhbmQgKHZlY3Rvcj8geCkgKGtleXdvcmQ/IChmaXJzdCB4KSkpKVxyXG4ifSB7OnN5bSAqYmFzZS11cmwqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqYmFzZS11cmwqIG5pbClcclxuIn0gezpzeW0gYXMtc3RyLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgaXRzIGFyZ3VtZW50cyBpbnRvIGEgc3RyaW5nIHVzaW5nIHRvLXN0ci4iLCA6YXJnbGlzdHMgKFsmIHhzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXMtc3RyXHJcbiBcIkNvbnZlcnRzIGl0cyBhcmd1bWVudHMgaW50byBhIHN0cmluZyB1c2luZyB0by1zdHIuXCJcclxuIFsmIHhzXVxyXG4gKHN0ci9qb2luIChtYXAgdG8tc3RyIHhzKSkpXHJcbiJ9IHs6c3ltIGh0bWwtdG8tZG9tLWF0dHJzLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgYWxsIEhUTUwgYXR0cmlidXRlcyB0byB0aGVpciBET00gZXF1aXZhbGVudHMuIiwgOmFyZ2xpc3RzIChbYXR0cnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBodG1sLXRvLWRvbS1hdHRyc1xyXG4gXCJDb252ZXJ0cyBhbGwgSFRNTCBhdHRyaWJ1dGVzIHRvIHRoZWlyIERPTSBlcXVpdmFsZW50cy5cIlxyXG4gW2F0dHJzXVxyXG4gKHJlbmFtZS1rZXlzXHJcbiAgKGNhbWVsLWNhc2Uta2V5cyBhdHRycylcclxuICB7OmNsYXNzIDpjbGFzc05hbWUsIDpmb3IgOmh0bWxGb3J9KSlcclxuIn0gezpzeW0gVG9TdHJpbmcsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh0by1zdHIpfSB7OnN5bSBUb1VSSSwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHRvLXVyaSl9IHs6c3ltIGNhbWVsLWNhc2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGNhbWVsIGNhc2UgdmVyc2lvbiBvZiB0aGUga2V5LCBlLmcuIDpodHRwLWVxdWl2IGJlY29tZXMgOmh0dHBFcXVpdi4iLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FtZWwtY2FzZVxyXG4gXCJSZXR1cm5zIGNhbWVsIGNhc2UgdmVyc2lvbiBvZiB0aGUga2V5LCBlLmcuIDpodHRwLWVxdWl2IGJlY29tZXMgOmh0dHBFcXVpdi5cIlxyXG4gW2tdXHJcbiAoaWZcclxuICAob3IgKGtleXdvcmQ/IGspIChzdHJpbmc/IGspIChzeW1ib2w/IGspKVxyXG4gIChsZXRcclxuICAgW1tmaXJzdC13b3JkICYgd29yZHNdICguc3BsaXQgKG5hbWUgaykgXCItXCIpXVxyXG4gICAoaWZcclxuICAgIChvciAoZW1wdHk/IHdvcmRzKSAoPSBcImFyaWFcIiBmaXJzdC13b3JkKSAoPSBcImRhdGFcIiBmaXJzdC13b3JkKSlcclxuICAgIGtcclxuICAgICgtPlxyXG4gICAgIChtYXAgc3RyL2NhcGl0YWxpemUgd29yZHMpXHJcbiAgICAgKGNvbmogZmlyc3Qtd29yZClcclxuICAgICBzdHIvam9pblxyXG4gICAgIGtleXdvcmQpKSlcclxuICBrKSlcclxuIn0gezpzeW0gdG8tdXJpLCA6bWV0YSB7OmRvYyAiQ29udmVydCBhIHZhbHVlIGludG8gYSBVUkkuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIFRvVVJJfSksIGR5bmFkb2MuY29tbW9uICh7OnN5bSB2YXItc3ltLT51cmwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bSB2YXItc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFyLXN5bS0+dXJsXHJcbiBbcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bSB2YXItc3ltXVxyXG4gKHN0clxyXG4gIHJlbC1wYXRoXHJcbiAgKG5hbWUgdHlwZSlcclxuICBcIi9cIlxyXG4gIG5zLXN5bVxyXG4gIFwiL1wiXHJcbiAgKGlmXHJcbiAgIHN0YXRpYz9cclxuICAgKC0+XHJcbiAgICAoc3RyIHZhci1zeW0pXHJcbiAgICAoc3RyL3JlcGxhY2UgXCI/XCIgXCIncSdcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIiFcIiBcIidlJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiPFwiIFwiJ2wnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCI+XCIgXCInZydcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIjpcIiBcIidjJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiKlwiIFwiJ2EnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCImXCIgXCInbSdcIikpXHJcbiAgICM/KDpjbGpzIChqcy9lbmNvZGVVUklDb21wb25lbnQgKHN0ciB2YXItc3ltKSkgOmNsaiAoamF2YS5uZXQuVVJMRW5jb2Rlci9lbmNvZGUgKHN0ciB2YXItc3ltKSBcIlVURi04XCIpKSlcclxuICAod2hlbiBzdGF0aWM/IFwiLmh0bWxcIikpKVxyXG4ifSB7OnN5bSBpbml0LWVkaXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtydW0tc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LWVkaXRvclxyXG4gW3J1bS1zdGF0ZV1cclxuIChsZXRcclxuICBbW3N0YXRlXSAoOnJ1bS9hcmdzIHJ1bS1zdGF0ZSldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtpbml0ICg6aW5pdC1lZGl0b3Igc3RhdGUpXVxyXG4gICAoaW5pdCAocnVtL2RvbS1ub2RlIHJ1bS1zdGF0ZSkpKSlcclxuIHJ1bS1zdGF0ZSlcclxuIn0gezpzeW0gbnMtc3ltLT51cmwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5zLXN5bS0+dXJsXHJcbiBbcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bV1cclxuIChzdHIgcmVsLXBhdGggKG5hbWUgdHlwZSkgXCIvXCIgbnMtc3ltICh3aGVuIHN0YXRpYz8gXCIuaHRtbFwiKSkpXHJcbiJ9IHs6c3ltICpzZXNzaW9uLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKnNlc3Npb25cclxuICgtPlxyXG4gIChyZWR1Y2Ugby9hZGQtcnVsZSAoby8tPnNlc3Npb24pIChjb25jYXQgcnVsZXMgY29tcG9uZW50cykpXHJcbiAgKG8vaW5zZXJ0XHJcbiAgIDpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgezpkeW5hZG9jLmNvbW1vbi9wcm9kPyBmYWxzZSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnQtZmlsdGVyIFwiXCIsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vY2xqcy1zdGFydGVkPyBmYWxzZSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnRhYmxlPyBmYWxzZSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9pbml0LWVkaXRvciBuaWwsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vaW5pdC1leGFtcGxlLWVkaXRvciBuaWwsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vd2F0Y2hlciBuaWx9KVxyXG4gIChvL2luc2VydFxyXG4gICA6ZHluYWRvYy5jb21tb24vc2VydmVyXHJcbiAgIHs6ZHluYWRvYy5jb21tb24vbnMtc3ltIG5pbCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIG5pbCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi90eXBlIG5pbCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9oaWRlLXNpZGViYXI/IGZhbHNlfSlcclxuICBhdG9tKSlcclxuIn0gezpzeW0gZ2V0LXN0YXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1zdGF0ZVxyXG4gW11cclxuICgtPlxyXG4gIEAqc2Vzc2lvblxyXG4gIChvL3F1ZXJ5LWFsbCA6ZHluYWRvYy5jb21tb24vZ2V0LXN0YXRlKVxyXG4gIGZpcnN0XHJcbiAgKG9yICh0aHJvdyAoZXgtaW5mbyBcIlN0YXRlIG5vdCBmb3VuZFwiIHt9KSkpKSlcclxuIn0gezpzeW0gdXBkYXRlLXNlc3Npb24sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc2Vzc2lvbiBpZCBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1zZXNzaW9uXHJcbiBbc2Vzc2lvbiBpZCBzdGF0ZV1cclxuIChvL2ZpcmUtcnVsZXMgKG8vaW5zZXJ0IHNlc3Npb24gaWQgc3RhdGUpKSlcclxuIn0gezpzeW0gcnVsZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBydWxlc1xyXG4gKG8vcnVsZXNldFxyXG4gIHs6ZHluYWRvYy5jb21tb24vZ2V0LXN0YXRlXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLXN5bSBucy1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSB2YXItc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3R5cGUgdHlwZV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi93YXRjaGVyIHdhdGNoZXJdXX0pKVxyXG4ifSB7OnN5bSBjb21wb25lbnRzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gY29tcG9uZW50c1xyXG4gKG9ydW0vcnVsZXNldFxyXG4gIHthcHAtcm9vdFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gbnMtc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLW1ldGEgbnMtbWV0YV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIHZhci1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdmFycyB2YXJzXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vY2xqcy1zdGFydGVkP1xyXG4gICAgIGNsanMtc3RhcnRlZD9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vcHJvZD8gcHJvZD9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vc3RhdGljPyBzdGF0aWM/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXJcclxuICAgICA6ZHluYWRvYy5jb21tb24vaGlkZS1zaWRlYmFyP1xyXG4gICAgIGhpZGUtc2lkZWJhcj9dXHJcbiAgICA6dGhlblxyXG4gICAgKGxldFxyXG4gICAgIFsqc2Vzc2lvbiAob3J1bS9wcm9wKV1cclxuICAgICBbOmRpdlxyXG4gICAgICAod2hlbi1ub3QgaGlkZS1zaWRlYmFyPyAoc2lkZWJhciB7fSkpXHJcbiAgICAgIChjb25qXHJcbiAgICAgICAoaWZcclxuICAgICAgICBucy1zeW1cclxuICAgICAgICAoaW50b1xyXG4gICAgICAgICBbOmRpdlxyXG4gICAgICAgICAgezpjbGFzcyBcInZhcnNcIiwgOnN0eWxlIHs6bGVmdCAoaWYgaGlkZS1zaWRlYmFyPyAwIDMwMCl9fVxyXG4gICAgICAgICAgKGV4cG9ydCAqc2Vzc2lvbilcclxuICAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgIHZhci1zeW1cclxuICAgICAgICAgICBbOmRpdlxyXG4gICAgICAgICAgICBbOmNlbnRlciBbOmgxIChzdHIgbnMtc3ltKV1dXHJcbiAgICAgICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgICAgICAgW2RvYyAoOmRvYyBucy1tZXRhKV1cclxuICAgICAgICAgICAgIFs6ZGl2IHs6Y2xhc3MgXCJzZWN0aW9uIGRvY1wifSBkb2NdKV0pXVxyXG4gICAgICAgICAobWFwdiB2YXItPmh0bWwgdmFycykpXHJcbiAgICAgICAgWzpkaXYgezpjbGFzcyBcInZhcnNcIn0gKGV4cG9ydCAqc2Vzc2lvbildKVxyXG4gICAgICAgKGNvbmRcclxuICAgICAgICBzdGF0aWM/XHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgezpjbGFzcyBcImZvb3RlclwifVxyXG4gICAgICAgICBcIkdlbmVyYXRlZCBieSBcIlxyXG4gICAgICAgICBbOmFcclxuICAgICAgICAgIHs6aHJlZiBcImh0dHBzOi8vZ2l0aHViLmNvbS9vYWtlcy9EeW5hZG9jXCIsIDp0YXJnZXQgXCJfYmxhbmtcIn1cclxuICAgICAgICAgIFwiRHluYWRvY1wiXV1cclxuICAgICAgICAoYW5kIGNsanMtc3RhcnRlZD8gKG5vdCBwcm9kPykpXHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgezpjbGFzcyBcImZvb3RlclwifVxyXG4gICAgICAgICBcIlRoaXMgaXMgYSBjdXN0b20gYnVpbGQgb2YgXCJcclxuICAgICAgICAgWzphXHJcbiAgICAgICAgICB7OmhyZWYgXCJodHRwczovL2dpdGh1Yi5jb20vb2FrZXMvRHluYWRvY1wiLCA6dGFyZ2V0IFwiX2JsYW5rXCJ9XHJcbiAgICAgICAgICBcIkR5bmFkb2NcIl1dKSldKV0sXHJcbiAgIHZhci0+aHRtbFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gbnMtc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gdmFyLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi90eXBlIHR5cGVdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vcmVsLXBhdGggcmVsLXBhdGhdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vc3RhdGljPyBzdGF0aWM/XVxyXG4gICAgOnRoZW5cclxuICAgIChsZXRcclxuICAgICBbezprZXlzIFtzeW0gbWV0YSBzb3VyY2Ugc3BlYyBleGFtcGxlcyBtZXRob2RzIHByb3RvY29sXX1cclxuICAgICAgKG9ydW0vcHJvcClcclxuICAgICAgezprZXlzIFthcmdsaXN0cyBkb2NdfVxyXG4gICAgICBtZXRhXHJcbiAgICAgIHVybFxyXG4gICAgICAodmFyLXN5bS0+dXJsIHJlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW0gc3ltKV1cclxuICAgICBbOmRpdlxyXG4gICAgICB7OmNsYXNzIFwidmFyLWluZm9cIn1cclxuICAgICAgKGludG9cclxuICAgICAgIChpZiB2YXItc3ltIFs6ZGl2XSBbOmEgezpocmVmIHVybH1dKVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgYXJnbGlzdHNcclxuICAgICAgICAobWFwXHJcbiAgICAgICAgIChmbiBbYXJnbGlzdF0gWzpoMiAocHItc3RyIChhcHBseSBsaXN0IHN5bSBhcmdsaXN0KSldKVxyXG4gICAgICAgICBhcmdsaXN0cylcclxuICAgICAgICBbWzpoMiAoc3RyIHN5bSldXSkpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBtZXRob2RzXHJcbiAgICAgICBbOmRpdlxyXG4gICAgICAgIHs6Y2xhc3MgXCJzZWN0aW9uXCJ9XHJcbiAgICAgICAgWzpoMyBcIk1ldGhvZHMgaW4gdGhpcyBwcm90b2NvbFwiXVxyXG4gICAgICAgIChpbnRvXHJcbiAgICAgICAgIFs6dWxdXHJcbiAgICAgICAgIChmb3JcclxuICAgICAgICAgIFttZXRob2Qtc3ltIG1ldGhvZHNdXHJcbiAgICAgICAgICBbOmxpXHJcbiAgICAgICAgICAgWzphXHJcbiAgICAgICAgICAgIHs6aHJlZlxyXG4gICAgICAgICAgICAgKHZhci1zeW0tPnVybCByZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltIG1ldGhvZC1zeW0pfVxyXG4gICAgICAgICAgICAoc3RyIG1ldGhvZC1zeW0pXV0pKV0pXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBwcm90b2NvbFxyXG4gICAgICAgWzpkaXZcclxuICAgICAgICB7OmNsYXNzIFwic2VjdGlvblwifVxyXG4gICAgICAgIFs6aDNcclxuICAgICAgICAgXCJQYXJ0IG9mIHRoZSBcIlxyXG4gICAgICAgICBbOmFcclxuICAgICAgICAgIHs6aHJlZiAodmFyLXN5bS0+dXJsIHJlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW0gcHJvdG9jb2wpfVxyXG4gICAgICAgICAgKHN0ciBwcm90b2NvbCldXHJcbiAgICAgICAgIFwiIHByb3RvY29sXCJdXSlcclxuICAgICAgKHdoZW4gZG9jIFs6ZGl2IHs6Y2xhc3MgXCJzZWN0aW9uIGRvY1wifSBkb2NdKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKHNlcSBleGFtcGxlcylcclxuICAgICAgIChpbnRvXHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgezpjbGFzcyBcInNlY3Rpb25cIn1cclxuICAgICAgICAgWzpoMiAoaWYgKD4gKGNvdW50IGV4YW1wbGVzKSAxKSBcIkV4YW1wbGVzXCIgXCJFeGFtcGxlXCIpXV1cclxuICAgICAgICAobWFwdiBleGFtcGxlLT5odG1sIGV4YW1wbGVzKSkpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBzcGVjXHJcbiAgICAgICAoaWZcclxuICAgICAgICB2YXItc3ltXHJcbiAgICAgICAgWzpkaXYgezpjbGFzcyBcInNlY3Rpb25cIn0gWzpoMiBcIlNwZWNcIl0gKHNwZWMtPmh0bWwgc3BlYyldXHJcbiAgICAgICAgKGV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgICAgICB7OmxhYmVsIFwiU3BlY1wiLCA6dXJsIHVybCwgOmNvbnRlbnQgKHNwZWMtPmh0bWwgc3BlYyl9KSkpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBzb3VyY2VcclxuICAgICAgIChpZlxyXG4gICAgICAgIHZhci1zeW1cclxuICAgICAgICBbOmRpdiB7OmNsYXNzIFwic2VjdGlvblwifSBbOmgyIFwiU291cmNlXCJdIChzb3VyY2UtPmh0bWwgc291cmNlKV1cclxuICAgICAgICAoZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAgICAgIHs6bGFiZWwgXCJTb3VyY2VcIixcclxuICAgICAgICAgIDp1cmwgdXJsLFxyXG4gICAgICAgICAgOmNvbnRlbnQgKHNvdXJjZS0+aHRtbCBzb3VyY2UpfSkpKV0pXSxcclxuICAgZXhhbXBsZS0+aHRtbFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi90eXBlIHR5cGVdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vcHJvZD8gcHJvZD9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vc3RhdGljPyBzdGF0aWM/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vaW5pdC1leGFtcGxlLWVkaXRvclxyXG4gICAgIGluaXQtZXhhbXBsZS1lZGl0b3JdXHJcbiAgICA6dGhlblxyXG4gICAgKGV4YW1wbGUtPmh0bWwqIG8vKm1hdGNoKiAob3J1bS9wcm9wKSldLFxyXG4gICBzb3VyY2UtPmh0bWxcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vaW5pdC1lZGl0b3IgaW5pdC1lZGl0b3JdXHJcbiAgICA6dGhlblxyXG4gICAgKHNvdXJjZS0+aHRtbCogby8qbWF0Y2gqIChvcnVtL3Byb3ApKV0sXHJcbiAgIHNwZWMtPmh0bWxcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vaW5pdC1lZGl0b3IgaW5pdC1lZGl0b3JdXHJcbiAgICA6dGhlblxyXG4gICAgKHNwZWMtPmh0bWwqIG8vKm1hdGNoKiAob3J1bS9wcm9wKSldLFxyXG4gICBleHBvcnRcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9jbGpzLXN0YXJ0ZWQ/XHJcbiAgICAgY2xqcy1zdGFydGVkP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHN0YXRpYz9dXHJcbiAgICA6dGhlblxyXG4gICAgKGxldFxyXG4gICAgIFsqc2Vzc2lvbiAob3J1bS9wcm9wKV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgc3RhdGljP1xyXG4gICAgICBbOmRpdlxyXG4gICAgICAgezpzdHlsZSB7Om1pbi1oZWlnaHQgNzV9fVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICBjbGpzLXN0YXJ0ZWQ/XHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgezpjbGFzcyBcImV4cG9ydFwifVxyXG4gICAgICAgICAoZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAgICAgICB7OmxhYmVsIFwiRXhwb3J0XCIsXHJcbiAgICAgICAgICAgOnVybCBcIlwiLFxyXG4gICAgICAgICAgIDpjb250ZW50IChleHBvcnQtZm9ybSAqc2Vzc2lvbiksXHJcbiAgICAgICAgICAgOm9uLWNsb3NlXHJcbiAgICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICAgICAoc3dhcCFcclxuICAgICAgICAgICAgICpzZXNzaW9uXHJcbiAgICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgICBbc2Vzc2lvbl1cclxuICAgICAgICAgICAgICAoLT5cclxuICAgICAgICAgICAgICAgc2Vzc2lvblxyXG4gICAgICAgICAgICAgICAoby9pbnNlcnRcclxuICAgICAgICAgICAgICAgIDpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICAgICAgICAgICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnQtZmlsdGVyXHJcbiAgICAgICAgICAgICAgICBcIlwiKVxyXG4gICAgICAgICAgICAgICBvL2ZpcmUtcnVsZXMpKSkpfSldKVxyXG4gICAgICAgWzpkaXYgezpzdHlsZSB7OmNsZWFyIFwicmlnaHRcIn19XV0pKV0sXHJcbiAgIGV4cG9ydC1mb3JtXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLXN5bSBucy1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtbWV0YSBucy1tZXRhXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gdmFyLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi90eXBlIHR5cGVdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vZXhwb3J0YWJsZT8gZXhwb3J0YWJsZT9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnQtZmlsdGVyXHJcbiAgICAgZXhwb3J0LWZpbHRlcl1cclxuICAgIDp0aGVuXHJcbiAgICAobGV0XHJcbiAgICAgWypzZXNzaW9uXHJcbiAgICAgIChvcnVtL3Byb3ApXHJcbiAgICAgICpvcHRpb25zXHJcbiAgICAgIChvcnVtL2F0b20gezpwYWdlcyAoaWYgbnMtc3ltIDpzaW5nbGUgOm11bHRpcGxlKX0pXHJcbiAgICAgIHs6a2V5cyBbcGFnZXNdfVxyXG4gICAgICBAKm9wdGlvbnNdXHJcbiAgICAgWzpmb3JtXHJcbiAgICAgIHs6YWN0aW9uIFwiL2R5bmFkb2MtZXhwb3J0LnppcFwiLFxyXG4gICAgICAgOm1ldGhvZCA6Z2V0LFxyXG4gICAgICAgOnN0eWxlIHs6dGV4dC1hbGlnbiBcImxlZnRcIn19XHJcbiAgICAgIFs6ZGl2XHJcbiAgICAgICBbOmxhYmVsXHJcbiAgICAgICAgWzppbnB1dFxyXG4gICAgICAgICB7OnR5cGUgXCJyYWRpb1wiLFxyXG4gICAgICAgICAgOm5hbWUgXCJwYWdlc1wiLFxyXG4gICAgICAgICAgOnZhbHVlIFwic2luZ2xlXCIsXHJcbiAgICAgICAgICA6Y2hlY2tlZCAoPSBwYWdlcyA6c2luZ2xlKSxcclxuICAgICAgICAgIDpvbi1jbGljayAoZm4qIFtdIChzd2FwISAqb3B0aW9ucyBhc3NvYyA6cGFnZXMgOnNpbmdsZSkpLFxyXG4gICAgICAgICAgOmRpc2FibGVkIChuaWw/IG5zLXN5bSl9XVxyXG4gICAgICAgIFwiT25seSB0aGlzIHBhZ2VcIl1dXHJcbiAgICAgIFs6ZGl2XHJcbiAgICAgICBbOmxhYmVsXHJcbiAgICAgICAgWzppbnB1dFxyXG4gICAgICAgICB7OnR5cGUgXCJyYWRpb1wiLFxyXG4gICAgICAgICAgOm5hbWUgXCJwYWdlc1wiLFxyXG4gICAgICAgICAgOnZhbHVlIFwibXVsdGlwbGVcIixcclxuICAgICAgICAgIDpjaGVja2VkICg9IHBhZ2VzIDptdWx0aXBsZSksXHJcbiAgICAgICAgICA6b24tY2xpY2sgKGZuKiBbXSAoc3dhcCEgKm9wdGlvbnMgYXNzb2MgOnBhZ2VzIDptdWx0aXBsZSkpfV1cclxuICAgICAgICBcIk11bHRpcGxlIHBhZ2VzXCJdXVxyXG4gICAgICBbOmRpdlxyXG4gICAgICAgezpzdHlsZSB7Om1hcmdpbiAxMCwgOmZvbnQtc2l6ZSAxNH19XHJcbiAgICAgICAoY2FzZVxyXG4gICAgICAgIHBhZ2VzXHJcbiAgICAgICAgOnNpbmdsZVxyXG4gICAgICAgIFs6aVxyXG4gICAgICAgICBcIk9ubHkgdGhlIGN1cnJlbnQgcGFnZSB3aWxsIGJlIGV4cG9ydGVkXCJcclxuICAgICAgICAgWzpicl1cclxuICAgICAgICAgXCJhbmQgdGhlIHNpZGViYXIgd2lsbCBiZSBoaWRkZW4uXCJdXHJcbiAgICAgICAgOm11bHRpcGxlXHJcbiAgICAgICAgWzppXHJcbiAgICAgICAgIFwiQWxsIHRoZSBuYW1lc3BhY2VzIGluIHRoZSBzaWRlYmFyXCJcclxuICAgICAgICAgWzpicl1cclxuICAgICAgICAgXCJ3aWxsIGJlIGV4cG9ydGVkLiBZb3UgY2FuIG5hcnJvdyB0aGVtXCJcclxuICAgICAgICAgWzpicl1cclxuICAgICAgICAgXCJkb3duIHdpdGggdGhlIGZvbGxvd2luZyByZWdleDpcIlxyXG4gICAgICAgICBbOmRpdlxyXG4gICAgICAgICAgWzppbnB1dFxyXG4gICAgICAgICAgIHs6dHlwZSBcInRleHRcIixcclxuICAgICAgICAgICAgOnZhbHVlIFwiXCIsXHJcbiAgICAgICAgICAgIDpwbGFjZWhvbGRlciBcIkV4cG9ydCBmaWx0ZXJcIixcclxuICAgICAgICAgICAgOnN0eWxlIHs6bWFyZ2luIDUsIDpmb250LXNpemUgMTR9LFxyXG4gICAgICAgICAgICA6b24tY2hhbmdlXHJcbiAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgW2VdXHJcbiAgICAgICAgICAgICAoc3dhcCFcclxuICAgICAgICAgICAgICAqc2Vzc2lvblxyXG4gICAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgICBbc2Vzc2lvbl1cclxuICAgICAgICAgICAgICAgKC0+XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAoby9pbnNlcnRcclxuICAgICAgICAgICAgICAgICA6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgICAgICAgICAgICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydC1maWx0ZXJcclxuICAgICAgICAgICAgICAgICAoLT4gZSAuLXRhcmdldCAuLXZhbHVlKSlcclxuICAgICAgICAgICAgICAgIG8vZmlyZS1ydWxlcykpKSl9XV1dKV1cclxuICAgICAgWzppbnB1dFxyXG4gICAgICAgezp0eXBlIFwiaGlkZGVuXCIsXHJcbiAgICAgICAgOm5hbWUgXCJleHBvcnQtZmlsdGVyXCIsXHJcbiAgICAgICAgOnZhbHVlIChvciBleHBvcnQtZmlsdGVyIFwiXCIpfV1cclxuICAgICAgKHdoZW5cclxuICAgICAgIHR5cGVcclxuICAgICAgIFs6aW5wdXQgezp0eXBlIFwiaGlkZGVuXCIsIDpuYW1lIFwidHlwZVwiLCA6dmFsdWUgKG5hbWUgdHlwZSl9XSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIG5zLXN5bVxyXG4gICAgICAgWzppbnB1dCB7OnR5cGUgXCJoaWRkZW5cIiwgOm5hbWUgXCJucy1zeW1cIiwgOnZhbHVlIChzdHIgbnMtc3ltKX1dKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgdmFyLXN5bVxyXG4gICAgICAgWzppbnB1dFxyXG4gICAgICAgIHs6dHlwZSBcImhpZGRlblwiLCA6bmFtZSBcInZhci1zeW1cIiwgOnZhbHVlIChzdHIgdmFyLXN5bSl9XSlcclxuICAgICAgWzpkaXZcclxuICAgICAgIHs6c3R5bGUgezp0ZXh0LWFsaWduIFwiY2VudGVyXCJ9fVxyXG4gICAgICAgWzpidXR0b25cclxuICAgICAgICB7OnR5cGUgXCJzdWJtaXRcIiwgOmRpc2FibGVkIChub3QgZXhwb3J0YWJsZT8pfVxyXG4gICAgICAgIFwiRG93bmxvYWQgemlwIGZpbGVcIl1dXHJcbiAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgZXhwb3J0YWJsZT9cclxuICAgICAgIFs6ZGl2XHJcbiAgICAgICAgezpzdHlsZSB7Om1hcmdpbiAxMCwgOmZvbnQtc2l6ZSAxNH19XHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgWzpiIFwiWW91IGJ1aWx0IER5bmFkb2Mgd2l0aCA6b3B0aW1pemF0aW9ucyBzZXQgdG8gOm5vbmVcIl1dXHJcbiAgICAgICAgWzpkaXZcclxuICAgICAgICAgWzpiIFwiWW91IG11c3Qgc2V0IGl0IHRvIDpzaW1wbGUgaW4gb3JkZXIgdG8gZXhwb3J0XCJdXV0pXSldLFxyXG4gICBzaWRlYmFyXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zZXMgbnNlc11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2NsanMtc3RhcnRlZD9cclxuICAgICBjbGpzLXN0YXJ0ZWQ/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3JlbC1wYXRoIHJlbC1wYXRoXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3N0YXRpYz8gc3RhdGljP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9oaWRlLWJhZGdlPyBoaWRlLWJhZGdlP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydC1maWx0ZXJcclxuICAgICBleHBvcnQtZmlsdGVyXVxyXG4gICAgOnRoZW5cclxuICAgIChsZXRcclxuICAgICBbKnNlYXJjaFxyXG4gICAgICAob3J1bS9hdG9tIFwiXCIpXHJcbiAgICAgIHNlYXJjaFxyXG4gICAgICAob3IgKG5vdC1lbXB0eSBleHBvcnQtZmlsdGVyKSBAKnNlYXJjaClcclxuICAgICAgc2VhcmNoXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoc2VxIHNlYXJjaClcclxuICAgICAgICh0cnlcclxuICAgICAgICAocmUtcGF0dGVybiBzZWFyY2gpXHJcbiAgICAgICAgKGNhdGNoICM/KDpjbGogRXhjZXB0aW9uIDpjbGpzIGpzL0Vycm9yKSBlIChwcmludGxuIGUpKSkpXVxyXG4gICAgIFs6ZGl2XHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBjbGpzLXN0YXJ0ZWQ/XHJcbiAgICAgICBbOmlucHV0XHJcbiAgICAgICAgezpjbGFzcyBcInNlYXJjaFwiLFxyXG4gICAgICAgICA6b24tY2hhbmdlXHJcbiAgICAgICAgIChmbipcclxuICAgICAgICAgIFtwMV9fNDg5OTEjXVxyXG4gICAgICAgICAgKC0+PiBwMV9fNDg5OTEjIC4tdGFyZ2V0IC4tdmFsdWUgKHJlc2V0ISAqc2VhcmNoKSkpLFxyXG4gICAgICAgICA6cGxhY2Vob2xkZXIgXCJTZWFyY2hcIn1dKVxyXG4gICAgICAoaW50b1xyXG4gICAgICAgWzpkaXZcclxuICAgICAgICB7OmNsYXNzIFwibnNlc1wifVxyXG4gICAgICAgICh3aGVuIChzZXEgZXhwb3J0LWZpbHRlcikgWzppIFwiUGFnZXMgdG8gZXhwb3J0OlwiXSldXHJcbiAgICAgICAoa2VlcFxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbezprZXlzIFtzeW0gdHlwZSB2YXItc3ltc119XVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbdmFyc1xyXG4gICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgIChhbmQgc2VhcmNoIChlbXB0eT8gZXhwb3J0LWZpbHRlcikpXHJcbiAgICAgICAgICAgICgtPj5cclxuICAgICAgICAgICAgIHZhci1zeW1zXHJcbiAgICAgICAgICAgICAoZmlsdGVyXHJcbiAgICAgICAgICAgICAgKGZuKiBbcDFfXzQ4OTkyI10gKHJlLWZpbmQgc2VhcmNoIChzdHIgcDFfXzQ4OTkyIykpKSlcclxuICAgICAgICAgICAgIChtYXB2XHJcbiAgICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICAgIFt2YXItc3ltXVxyXG4gICAgICAgICAgICAgICBbOmRpdlxyXG4gICAgICAgICAgICAgICAgezpjbGFzcyBcInZhclwifVxyXG4gICAgICAgICAgICAgICAgWzphXHJcbiAgICAgICAgICAgICAgICAgezpocmVmXHJcbiAgICAgICAgICAgICAgICAgICh2YXItc3ltLT51cmwgcmVsLXBhdGggc3RhdGljPyB0eXBlIHN5bSB2YXItc3ltKX1cclxuICAgICAgICAgICAgICAgICAoc3RyIHZhci1zeW0pXV0pKSkpXVxyXG4gICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAob3IgKG5pbD8gc2VhcmNoKSAocmUtZmluZCBzZWFyY2ggKHN0ciBzeW0pKSAoc2VxIHZhcnMpKVxyXG4gICAgICAgICAgIFs6ZGl2XHJcbiAgICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgICAoYW5kICg9IHR5cGUgOmNsanMpIChub3QgaGlkZS1iYWRnZT8pKVxyXG4gICAgICAgICAgICAgWzpkaXYgezpjbGFzcyBcInRhZ1wifSBcIkNMSlNcIl0pXHJcbiAgICAgICAgICAgIFs6YVxyXG4gICAgICAgICAgICAgezpocmVmIChucy1zeW0tPnVybCByZWwtcGF0aCBzdGF0aWM/IHR5cGUgc3ltKX1cclxuICAgICAgICAgICAgIChzdHIgc3ltKV1cclxuICAgICAgICAgICAgKHdoZW4gKHNlcSB2YXJzKSAoaW50byBbOmRpdl0gdmFycykpXSkpKVxyXG4gICAgICAgIG5zZXMpKV0pXX0pKVxyXG4ifSB7OnN5bSBpbml0LWV4YW1wbGUtZWRpdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3J1bS1zdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtZXhhbXBsZS1lZGl0b3JcclxuIFtydW0tc3RhdGVdXHJcbiAobGV0XHJcbiAgW1tzdGF0ZSBleGFtcGxlXSAoOnJ1bS9hcmdzIHJ1bS1zdGF0ZSldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtpbml0ICg6aW5pdC1leGFtcGxlLWVkaXRvciBzdGF0ZSldXHJcbiAgIChpbml0IChydW0vZG9tLW5vZGUgcnVtLXN0YXRlKSBleGFtcGxlKSkpXHJcbiBydW0tc3RhdGUpXHJcbiJ9KSwgcGFyZW4tc291cC5kb20gKHs6c3ltIHRvcC1sZXZlbD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvcC1sZXZlbD9cclxuIFtub2RlXVxyXG4gKGJvb2xlYW5cclxuICAoc29tZS0+IG5vZGUgLi1wYXJlbnRFbGVtZW50IC4tY2xhc3NMaXN0ICguY29udGFpbnMgXCJjb250ZW50XCIpKSkpXHJcbiJ9IHs6c3ltIGdldC1zZWxlY3Rpb24sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBvYmplY3RzIHJlbGF0ZWQgdG8gc2VsZWN0aW9uIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gSWYgZnVsbC1zZWxlY3Rpb24/IGlzIHRydWUsXG5pdCB3aWxsIHVzZSByYW5neSBpbnN0ZWFkIG9mIHRoZSBuYXRpdmUgc2VsZWN0aW9uIEFQSSBpbiBvcmRlciB0byBnZXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nXG5vZiB0aGUgc2VsZWN0aW9uIChpdCBpcywgaG93ZXZlciwgbXVjaCBzbG93ZXIpLiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgZnVsbC1zZWxlY3Rpb24/XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXNlbGVjdGlvblxyXG4gXCJSZXR1cm5zIHRoZSBvYmplY3RzIHJlbGF0ZWQgdG8gc2VsZWN0aW9uIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gSWYgZnVsbC1zZWxlY3Rpb24/IGlzIHRydWUsXFxuaXQgd2lsbCB1c2UgcmFuZ3kgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIHNlbGVjdGlvbiBBUEkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZ1xcbm9mIHRoZSBzZWxlY3Rpb24gKGl0IGlzLCBob3dldmVyLCBtdWNoIHNsb3dlcikuXCJcclxuIFtlbGVtZW50IGZ1bGwtc2VsZWN0aW9uP11cclxuIHs6ZWxlbWVudCBlbGVtZW50LFxyXG4gIDpjdXJzb3ItcG9zaXRpb25cclxuICAoY29uZFxyXG4gICBmdWxsLXNlbGVjdGlvbj9cclxuICAgKGxldFxyXG4gICAgW3NlbGVjdGlvblxyXG4gICAgICguZ2V0U2VsZWN0aW9uIGpzL3Jhbmd5KVxyXG4gICAgIHJhbmdlc1xyXG4gICAgICguc2F2ZUNoYXJhY3RlclJhbmdlcyBzZWxlY3Rpb24gZWxlbWVudCldXHJcbiAgICAoaWYtbGV0XHJcbiAgICAgW2NoYXItcmFuZ2UgKHNvbWUtPiByYW5nZXMgKGFnZXQgMCkgKGdvYmovZ2V0IFwiY2hhcmFjdGVyUmFuZ2VcIikpXVxyXG4gICAgIFsoZ29iai9nZXQgY2hhci1yYW5nZSBcInN0YXJ0XCIpIChnb2JqL2dldCBjaGFyLXJhbmdlIFwiZW5kXCIpXVxyXG4gICAgIFswIDBdKSlcclxuICAgKD0gMCAoLi1yYW5nZUNvdW50ICguZ2V0U2VsZWN0aW9uIGpzL3dpbmRvdykpKVxyXG4gICBbMCAwXVxyXG4gICA6ZWxzZVxyXG4gICAobGV0XHJcbiAgICBbc2VsZWN0aW9uXHJcbiAgICAgKC5nZXRTZWxlY3Rpb24ganMvd2luZG93KVxyXG4gICAgIHJhbmdlXHJcbiAgICAgKC5nZXRSYW5nZUF0IHNlbGVjdGlvbiAwKVxyXG4gICAgIHByZS1jYXJldC1yYW5nZVxyXG4gICAgIChkb3RvXHJcbiAgICAgICguY2xvbmVSYW5nZSByYW5nZSlcclxuICAgICAgKC5zZWxlY3ROb2RlQ29udGVudHMgZWxlbWVudClcclxuICAgICAgKC5zZXRFbmQgKC4tZW5kQ29udGFpbmVyIHJhbmdlKSAoLi1lbmRPZmZzZXQgcmFuZ2UpKSlcclxuICAgICBwb3NcclxuICAgICAoLT4gcHJlLWNhcmV0LXJhbmdlIC50b1N0cmluZyAoc3RyL3JlcGxhY2UgI1wiXFxyXCIgXCJcIikgLi1sZW5ndGgpXVxyXG4gICAgW3BvcyBwb3NdKSl9KVxyXG4ifSB7OnN5bSBnZXQtY3Vyc29yLXBvc2l0aW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY3Vyc29yIHBvc2l0aW9uLiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgZnVsbC1zZWxlY3Rpb24/XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWN1cnNvci1wb3NpdGlvblxyXG4gXCJSZXR1cm5zIHRoZSBjdXJzb3IgcG9zaXRpb24uXCJcclxuIFtlbGVtZW50IGZ1bGwtc2VsZWN0aW9uP11cclxuICgtPiBlbGVtZW50IChnZXQtc2VsZWN0aW9uIGZ1bGwtc2VsZWN0aW9uPykgOmN1cnNvci1wb3NpdGlvbikpXHJcbiJ9IHs6c3ltIHRleHQtbm9kZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm4gdGV4dC1ub2RlPyBbbm9kZV0gKD0gMyAoLi1ub2RlVHlwZSBub2RlKSkpXHJcbiJ9IHs6c3ltIGdldC1mb2N1c2VkLWZvcm0sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGdldC1mb2N1c2VkLWZvcm0gKGZuKiBbXSAoZ2V0LWZvY3VzZWQtZWxlbSBcImNvbGxlY3Rpb25cIikpKVxyXG4ifSB7OnN5bSBnZXQtZm9jdXNlZC10b3AtbGV2ZWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWZvY3VzZWQtdG9wLWxldmVsXHJcbiBbXVxyXG4gKHdoZW4tbGV0XHJcbiAgW25vZGUgKHNvbWUtPiBqcy9yYW5neSAuZ2V0U2VsZWN0aW9uIC4tYW5jaG9yTm9kZSldXHJcbiAgKGxvb3BcclxuICAgW25vZGUgbm9kZV1cclxuICAgKGlmXHJcbiAgICAodG9wLWxldmVsPyBub2RlKVxyXG4gICAgbm9kZVxyXG4gICAgKHdoZW4tbGV0IFtwYXJlbnQgKC4tcGFyZW50RWxlbWVudCBub2RlKV0gKHJlY3VyIHBhcmVudCkpKSkpKVxyXG4ifSB7OnN5bSBnZXQtcGFyZW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmVhcmVzdCBwYXJlbnQgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS4iLCA6YXJnbGlzdHMgKFtub2RlIGNsYXNzLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtcGFyZW50XHJcbiBcIlJldHVybnMgdGhlIG5lYXJlc3QgcGFyZW50IHdpdGggdGhlIGdpdmVuIGNsYXNzIG5hbWUuXCJcclxuIFtub2RlIGNsYXNzLW5hbWVdXHJcbiAobG9vcFxyXG4gIFtub2RlIG5vZGVdXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtwYXJlbnQgKC4tcGFyZW50RWxlbWVudCBub2RlKV1cclxuICAgKGlmXHJcbiAgICAoLmNvbnRhaW5zICguLWNsYXNzTGlzdCBwYXJlbnQpIGNsYXNzLW5hbWUpXHJcbiAgICBwYXJlbnRcclxuICAgIChyZWN1ciBwYXJlbnQpKSkpKVxyXG4ifSB7OnN5bSBjb2xsLW5vZGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xsLW5vZGU/XHJcbiBbbm9kZV1cclxuIChib29sZWFuIChzb21lLT4gbm9kZSAuLWNsYXNzTGlzdCAoLmNvbnRhaW5zIFwiY29sbGVjdGlvblwiKSkpKVxyXG4ifSB7OnN5bSBnZXQtbmVhcmVzdC1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LW5lYXJlc3QtbnNcclxuIFtub2RlXVxyXG4gKGxvb3BcclxuICBbbm9kZSBub2RlXVxyXG4gIChpZlxyXG4gICAoc29tZS0+IG5vZGUgLi1jaGlsZE5vZGVzICguaXRlbSAxKSAuLXRleHRDb250ZW50ICg9IFwibnNcIikpXHJcbiAgIChzb21lLT4gbm9kZSAuLWNoaWxkTm9kZXMgKC5pdGVtIDMpIC4tdGV4dENvbnRlbnQgc3ltYm9sKVxyXG4gICAod2hlbi1sZXQgW3NpYmxpbmcgKC4tcHJldmlvdXNTaWJsaW5nIG5vZGUpXSAocmVjdXIgc2libGluZykpKSkpXHJcbiJ9IHs6c3ltIGluc2VydC10ZXh0ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0ZXh0XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5zZXJ0LXRleHQhXHJcbiBbdGV4dF1cclxuIChsZXRcclxuICBbc2VsZWN0aW9uXHJcbiAgICguZ2V0U2VsZWN0aW9uIGpzL3dpbmRvdylcclxuICAgcmFuZ2VcclxuICAgKC5nZXRSYW5nZUF0IHNlbGVjdGlvbiAwKVxyXG4gICBub2RlXHJcbiAgICguY3JlYXRlVGV4dE5vZGUganMvZG9jdW1lbnQgdGV4dCldXHJcbiAgKGRvdG9cclxuICAgcmFuZ2VcclxuICAgLmRlbGV0ZUNvbnRlbnRzXHJcbiAgICguaW5zZXJ0Tm9kZSBub2RlKVxyXG4gICAoLnNldFN0YXJ0QWZ0ZXIgbm9kZSlcclxuICAgKC5zZXRFbmRBZnRlciBub2RlKVxyXG4gICAoLmNvbGxhcHNlIGZhbHNlKSkpKVxyXG4ifSB7OnN5bSBnZXQtY29tcGxldGlvbi1pbmZvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jb21wbGV0aW9uLWluZm9cclxuIFtdXHJcbiAod2hlbi1sZXRcclxuICBbcHJlZml4LWVsZW0gKGdldC1mb2N1c2VkLWVsZW0gXCJzeW1ib2xcIildXHJcbiAgKGxldFxyXG4gICBbcG9zXHJcbiAgICAoLT4gcHJlZml4LWVsZW0gKGdldC1jdXJzb3ItcG9zaXRpb24gZmFsc2UpIGZpcnN0KVxyXG4gICAgdGV4dFxyXG4gICAgKC4tdGV4dENvbnRlbnQgcHJlZml4LWVsZW0pXHJcbiAgICBwcmVmaXhcclxuICAgIChzdWJzIHRleHQgMCBwb3MpXVxyXG4gICAoYXNzb2NcclxuICAgIChnZXQtY29tcGxldGlvbi1jb250ZXh0IChjb3VudCB0ZXh0KSAoY291bnQgcHJlZml4KSlcclxuICAgIDp0ZXh0XHJcbiAgICB0ZXh0XHJcbiAgICA6cHJlZml4XHJcbiAgICBwcmVmaXgpKSkpXHJcbiJ9IHs6c3ltIHNldC1jdXJzb3ItcG9zaXRpb24hLCA6bWV0YSB7OmRvYyAiTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgcG9zaXRpb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQtY3Vyc29yLXBvc2l0aW9uIVxyXG4gXCJNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uXCJcclxuIFtlbGVtZW50IHBvc2l0aW9uXVxyXG4gKGxldFxyXG4gIFtbc3RhcnQtcG9zIGVuZC1wb3NdXHJcbiAgIHBvc2l0aW9uXHJcbiAgIG1heC1sZW5ndGhcclxuICAgKC0+IGVsZW1lbnQgLi10ZXh0Q29udGVudCBjb3VudClcclxuICAgc2VsZWN0aW9uXHJcbiAgICguZ2V0U2VsZWN0aW9uIGpzL3Jhbmd5KVxyXG4gICBjaGFyLXJhbmdlXHJcbiAgICNqcyB7OnN0YXJ0IHN0YXJ0LXBvcywgOmVuZCBlbmQtcG9zfVxyXG4gICByYW5nZVxyXG4gICAjanMgezpjaGFyYWN0ZXJSYW5nZSBjaGFyLXJhbmdlLCA6YmFja3dhcmQgZmFsc2UsIDpjaGFyYWN0ZXJPcHRpb25zIG5pbH1cclxuICAgcmFuZ2VzXHJcbiAgIChhcnJheSByYW5nZSldXHJcbiAgKC5yZXN0b3JlQ2hhcmFjdGVyUmFuZ2VzIHNlbGVjdGlvbiBlbGVtZW50IHJhbmdlcykpKVxyXG4ifSB7OnN5bSBnZXQtZm9jdXNlZC1lbGVtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NsYXNzLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZm9jdXNlZC1lbGVtXHJcbiBbY2xhc3MtbmFtZV1cclxuIChzb21lLT4ganMvcmFuZ3kgLmdldFNlbGVjdGlvbiAuLWFuY2hvck5vZGUgKGdldC1wYXJlbnQgY2xhc3MtbmFtZSkpKVxyXG4ifSB7OnN5bSBlcnJvci1ub2RlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXJyb3Itbm9kZT9cclxuIFtub2RlXVxyXG4gKGJvb2xlYW4gKHNvbWUtPiBub2RlIC4tY2xhc3NMaXN0ICguY29udGFpbnMgXCJlcnJvclwiKSkpKVxyXG4ifSB7OnN5bSBnZXQtY29tcGxldGlvbi1jb250ZXh0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bWJvbC1sZW5ndGggY3Vyc29yLW9mZnNldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jb21wbGV0aW9uLWNvbnRleHRcclxuIFtzeW1ib2wtbGVuZ3RoIGN1cnNvci1vZmZzZXRdXHJcbiAod2hlbi1sZXRcclxuICBbdG9wLWxldmVsLWVsZW0gKGdldC1mb2N1c2VkLXRvcC1sZXZlbCldXHJcbiAgKGxldFxyXG4gICBbcG9zXHJcbiAgICAoLT4gdG9wLWxldmVsLWVsZW0gKGdldC1jdXJzb3ItcG9zaXRpb24gZmFsc2UpIGZpcnN0KVxyXG4gICAgcHJlZml4LXN0YXJ0XHJcbiAgICAoLSBwb3MgY3Vyc29yLW9mZnNldClcclxuICAgIHRleHRcclxuICAgICguLXRleHRDb250ZW50IHRvcC1sZXZlbC1lbGVtKV1cclxuICAgezpucyAoZ2V0LW5lYXJlc3QtbnMgdG9wLWxldmVsLWVsZW0pLFxyXG4gICAgOmNvbnRleHQtYmVmb3JlIChzdWJzIHRleHQgMCBwcmVmaXgtc3RhcnQpLFxyXG4gICAgOmNvbnRleHQtYWZ0ZXIgKHN1YnMgdGV4dCAoKyBwcmVmaXgtc3RhcnQgc3ltYm9sLWxlbmd0aCkpLFxyXG4gICAgOnN0YXJ0LXBvc2l0aW9uIHByZWZpeC1zdGFydH0pKSlcclxuIn0gezpzeW0gY29tbW9uLWFuY2VzdG9yLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBub2Rlcy4iLCA6YXJnbGlzdHMgKFtmaXJzdC1ub2RlIHNlY29uZC1ub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tbW9uLWFuY2VzdG9yXHJcbiBcIlJldHVybnMgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gbm9kZXMuXCJcclxuIFtmaXJzdC1ub2RlIHNlY29uZC1ub2RlXVxyXG4gKGxldFxyXG4gIFtmaXJzdC1wYXJlbnRcclxuICAgKGZpcnN0IChnZXQtcGFyZW50cyBmaXJzdC1ub2RlIFwiY29sbGVjdGlvblwiKSlcclxuICAgc2Vjb25kLXBhcmVudFxyXG4gICAoZmlyc3QgKGdldC1wYXJlbnRzIHNlY29uZC1ub2RlIFwiY29sbGVjdGlvblwiKSldXHJcbiAgKGNvbmRcclxuICAgKGFuZCBmaXJzdC1wYXJlbnQgc2Vjb25kLXBhcmVudCAoPSBmaXJzdC1wYXJlbnQgc2Vjb25kLXBhcmVudCkpXHJcbiAgIGZpcnN0LXBhcmVudFxyXG4gICAoYW5kXHJcbiAgICAoPSBmaXJzdC1ub2RlIHNlY29uZC1ub2RlKVxyXG4gICAgKHRleHQtbm9kZT8gZmlyc3Qtbm9kZSlcclxuICAgICh0b3AtbGV2ZWw/IGZpcnN0LW5vZGUpKVxyXG4gICBmaXJzdC1ub2RlKSkpXHJcbiJ9IHs6c3ltIGdldC1wYXJlbnRzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbGwgdGhlIHBhcmVudHMgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS4iLCA6YXJnbGlzdHMgKFtub2RlIGNsYXNzLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtcGFyZW50c1xyXG4gXCJSZXR1cm5zIGFsbCB0aGUgcGFyZW50cyB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLlwiXHJcbiBbbm9kZSBjbGFzcy1uYW1lXVxyXG4gKGxvb3BcclxuICBbbm9kZSBub2RlIGVsZW1zICcoKV1cclxuICAoaWYtbGV0XHJcbiAgIFtwYXJlbnQgKGdldC1wYXJlbnQgbm9kZSBjbGFzcy1uYW1lKV1cclxuICAgKHJlY3VyIHBhcmVudCAoY29uaiBlbGVtcyBwYXJlbnQpKVxyXG4gICBlbGVtcykpKVxyXG4ifSB7OnN5bSBub2RlPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbm9kZT8gKGZuKiBbcDFfXzQ5MDM5I10gKGluc3RhbmNlPyBqcy9Ob2RlIHAxX180OTAzOSMpKSlcclxuIn0gezpzeW0gc2Nyb2xsLXRvLW5lYXJlc3QtZWxlbSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzY3JvbGwtdG8tbmVhcmVzdC1lbGVtXHJcbiBbXVxyXG4gKHNvbWUtPlxyXG4gIGpzL3Jhbmd5XHJcbiAgLmdldFNlbGVjdGlvblxyXG4gIC4tYW5jaG9yTm9kZVxyXG4gIC4tcGFyZW50RWxlbWVudFxyXG4gICguc2Nyb2xsSW50b1ZpZXdcclxuICAgI2pzIHs6YmVoYXZpb3IgXCJhdXRvXCIsIDpibG9jayBcIm5lYXJlc3RcIiwgOmlubGluZSBcIm5lYXJlc3RcIn0pKSlcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmVycm9ycyAoezpzeW0gdGhyb3ctYmFkLWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1kaXNwYXRjaFxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiTm8gZGlzcGF0Y2ggbWFjcm8gZm9yIFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWVzY2FwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZXNjYXBlXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlOiBcXFxcdVwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZHVwLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQga3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1kdXAta2V5c1xyXG4gW3JkciBraW5kIGtzXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIChkdXBsaWNhdGUta2V5cy1lcnJvclxyXG4gICAoc3RyIChzL2NhcGl0YWxpemUgKG5hbWUga2luZCkpIFwiIGxpdGVyYWwgY29udGFpbnMgZHVwbGljYXRlIGtleVwiKVxyXG4gICBrcykpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIG5zLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbnNcclxuIFtyZHIgbnMtbmFtZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgdmFsdWUgdXNlZCBhcyBuYW1lc3BhY2UgaW4gbmFtZXNwYWNlZCBtYXA6IFwiXHJcbiAgbnMtbmFtZVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5rbm93bi1yZWFkZXItdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bmtub3duLXJlYWRlci10YWdcclxuIFtyZHIgdGFnXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJObyByZWFkZXIgZnVuY3Rpb24gZm9yIHRhZyBcIiAoaS9pbnNwZWN0IHRhZykgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtYXQtZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWF0LWRpc3BhdGNoXHJcbiBbcmRyXVxyXG4gKGVvZi1lcnJvciByZHIgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIGRpc3BhdGNoIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1tZXRhZGF0YS10YXJnZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhcmdldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1tZXRhZGF0YS10YXJnZXRcclxuIFtyZHIgdGFyZ2V0XVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTWV0YWRhdGEgY2FuIG5vdCBiZSBhcHBsaWVkIHRvIFwiXHJcbiAgKGkvaW5zcGVjdCB0YXJnZXQpXHJcbiAgXCIuIFwiXHJcbiAgXCJNZXRhZGF0YSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIElNZXRhcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtbnVtYmVyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIG51bWJlcjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSByZWFkZXItZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDpyZWFkZXItZXJyb3IgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1saXRlcmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1saXRlcmFsXHJcbiBbcmRyIHRva2VuXVxyXG4gKHRocm93XHJcbiAgKGlsbGVnYWwtYXJnLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBsaXRlcmFsOiBcXFxcXCIgdG9rZW4gXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctbnMtbWFwLW5vLW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbnMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LW5zLW1hcC1uby1tYXBcclxuIFtyZHIgbnMtbmFtZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk5hbWVzcGFjZWQgbWFwIHdpdGggbmFtZXNwYWNlIFwiXHJcbiAgbnMtbmFtZVxyXG4gIFwiIGRvZXMgbm90IHNwZWNpZnkgYSBtYXAuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bnN1cHBvcnRlZC1jaGFyYWN0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5zdXBwb3J0ZWQtY2hhcmFjdGVyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZmVhdHVyZS1ub3Qta2V5d29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgZmVhdHVyZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWZlYXR1cmUtbm90LWtleXdvcmRcclxuIFtyZHIgZmVhdHVyZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkZlYXR1cmUgY2Fubm90IGJlIFwiXHJcbiAgKGkvaW5zcGVjdCBmZWF0dXJlKVxyXG4gIFwiIEZlYXR1cmVzIG11c3QgYmUga2V5d29yZHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtZGVsaW1pdGVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3JkciBraW5kIGNvbHVtbiBsaW5lXSBbcmRyIGtpbmQgbGluZSBjb2x1bW4gbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1kZWxpbWl0ZWRcclxuIChbcmRyIGtpbmQgY29sdW1uIGxpbmVdXHJcbiAgKHRocm93LWVvZi1kZWxpbWl0ZWQgcmRyIGtpbmQgbGluZSBjb2x1bW4gbmlsKSlcclxuIChbcmRyIGtpbmQgbGluZSBjb2x1bW4gbl1cclxuICAoZW9mLWVycm9yXHJcbiAgIHJkclxyXG4gICBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgXCJcclxuICAgKGlmIG4gKHN0ciBcIml0ZW0gXCIgbiBcIiBvZiBcIikpXHJcbiAgIChuYW1lIGtpbmQpXHJcbiAgIChpZiBsaW5lIChzdHIgXCIsIHN0YXJ0aW5nIGF0IGxpbmUgXCIgbGluZSBcIiBhbmQgY29sdW1uIFwiIGNvbHVtbikpXHJcbiAgIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1pbi1jaGFyYWN0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWluLWNoYXJhY3RlclxyXG4gW3Jkcl1cclxuIChlb2YtZXJyb3IgcmRyIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1jaGFyXHJcbiBbcmRyIGtpbmQgY2hdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIGNoYXJhY3RlcjogXCJcclxuICBjaFxyXG4gIFwiIGZvdW5kIHdoaWxlIHJlYWRpbmcgXCJcclxuICAobmFtZSBraW5kKVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gZW9mLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVvZi1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6ZW9mIChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbWV0YWRhdGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbWV0YWRhdGFcclxuIFtyZHIgeF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk1ldGFkYXRhIGNhbm5vdCBiZSBcIlxyXG4gIChpL2luc3BlY3QgeClcclxuICBcIi4gTWV0YWRhdGEgbXVzdCBiZSBhIFN5bWJvbCwgS2V5d29yZCwgU3RyaW5nIG9yIE1hcC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1yZWFkaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kICYgc3RhcnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtcmVhZGluZ1xyXG4gW3JkciBraW5kICYgc3RhcnRdXHJcbiAobGV0XHJcbiAgW2luaXQgKGNhc2Uga2luZCA6cmVnZXggXCIjXFxcIlwiIDpzdHJpbmcgXFxcIildXHJcbiAgKGVvZi1lcnJvclxyXG4gICByZHJcclxuICAgXCJVbmV4cGVjdGVkIEVPRiByZWFkaW5nIFwiXHJcbiAgIChuYW1lIGtpbmQpXHJcbiAgIFwiIHN0YXJ0aW5nIFwiXHJcbiAgIChhcHBseSBzdHIgaW5pdCBzdGFydClcclxuICAgXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWVycm9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWVycm9yXHJcbiBbcmRyIGxpbmVdXHJcbiAoaWZcclxuICBsaW5lXHJcbiAgKGVvZi1lcnJvciByZHIgXCJFT0Ygd2hpbGUgcmVhZGluZywgc3RhcnRpbmcgYXQgbGluZSBcIiBsaW5lIFwiLlwiKVxyXG4gIChlb2YtZXJyb3IgcmRyIFwiRU9GIHdoaWxlIHJlYWRpbmcuXCIpKSlcclxuIn0gezpzeW0gaWxsZWdhbC1hcmctZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaWxsZWdhbC1hcmctZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOmlsbGVnYWwtYXJndW1lbnQgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtb2N0YWwtbGVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtb2N0YWwtbGVuXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UgaW4gYSBjaGFyYWN0ZXIgbGl0ZXJhbDpcIlxyXG4gIHRva2VuXHJcbiAgXCIuIE9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgbXVzdCBiZSAzIG9yIGZld2VyIGRpZ2l0cy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXRcclxuIFtyZHIgY2hdXHJcbiAoaWxsZWdhbC1hcmctZXJyb3IgcmRyIFwiSW52YWxpZCBkaWdpdCBcIiBjaCBcIiBpbiB1bmljb2RlIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdC1pbi10b2tlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2ggdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQtaW4tdG9rZW5cclxuIFtyZHIgY2ggdG9rZW5dXHJcbiAoaWxsZWdhbC1hcmctZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgZGlnaXQgXCJcclxuICBjaFxyXG4gIFwiIGluIHVuaWNvZGUgY2hhcmFjdGVyIFxcXFxcIlxyXG4gIHRva2VuXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBhY3R1YWwgZXhwZWN0ZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGVuXHJcbiBbcmRyIGFjdHVhbCBleHBlY3RlZF1cclxuIChpbGxlZ2FsLWFyZy1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCB1bmljb2RlIGxpdGVyYWwuIFVuaWNvZGUgbGl0ZXJhbHMgc2hvdWxkIGJlIFwiXHJcbiAgZXhwZWN0ZWRcclxuICBcImNoYXJhY3RlcnMgbG9uZy4gIFwiXHJcbiAgXCJ2YWx1ZSBzdXBwbGVkIGlzIFwiXHJcbiAgYWN0dWFsXHJcbiAgXCJjaGFyYWN0ZXJzIGxvbmcuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1zaW5nbGUtY29sb24sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctc2luZ2xlLWNvbG9uXHJcbiBbcmRyXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJBIHNpbmdsZSBjb2xvbiBpcyBub3QgYSB2YWxpZCBrZXl3b3JkLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctb2RkLW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbGluZSBjb2wgZWxlbWVudHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1vZGQtbWFwXHJcbiBbcmRyIGxpbmUgY29sIGVsZW1lbnRzXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiVGhlIG1hcCBsaXRlcmFsIHN0YXJ0aW5nIHdpdGggXCJcclxuICAoaS9pbnNwZWN0IChmaXJzdCBlbGVtZW50cykpXHJcbiAgKGlmIGxpbmUgKHN0ciBcIiBvbiBsaW5lIFwiIGxpbmUgXCIgY29sdW1uIFwiIGNvbCkpXHJcbiAgXCIgY29udGFpbnMgXCJcclxuICAoY291bnQgZWxlbWVudHMpXHJcbiAgXCIgZm9ybShzKS4gTWFwIGxpdGVyYWxzIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBmb3Jtcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1vY3RhbC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW9jdGFsLW51bWJlclxyXG4gW3Jkcl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiT2N0YWwgZXNjYXBlIHNlcXVlbmNlIG11c3QgYmUgaW4gcmFuZ2UgWzAsIDM3N10uXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtcmVhZGVyLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLXJlYWRlci10YWdcclxuIFtyZHIgdGFnXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCByZWFkZXIgdGFnOiBcIlxyXG4gIChpL2luc3BlY3QgdGFnKVxyXG4gIFwiLiBSZWFkZXIgdGFncyBtdXN0IGJlIHN5bWJvbHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bm1hdGNoLWRlbGltaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bm1hdGNoLWRlbGltaXRlclxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5tYXRjaGVkIGRlbGltaXRlciBcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtY2hhcmFjdGVyLWxpdGVyYWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1jaGFyYWN0ZXItbGl0ZXJhbFxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBjaGFyYWN0ZXIgbGl0ZXJhbCBcXFxcdVwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWNoYXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBjaGFyYWN0ZXIgXFxcXFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLWVzY2FwZS1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1lc2NhcGUtY2hhclxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5zdXBwb3J0ZWQgZXNjYXBlIGNoYXJhY3RlcjogXFxcXFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctbm8tZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmbiB0aHJvdy1uby1kaXNwYXRjaCBbcmRyIGNoXSAodGhyb3ctYmFkLWRpc3BhdGNoIHJkciBjaCkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1hdC1zdGFydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1hdC1zdGFydFxyXG4gW3JkciBraW5kXVxyXG4gKGVvZi1lcnJvclxyXG4gIHJkclxyXG4gIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBzdGFydCBvZiBcIlxyXG4gIChuYW1lIGtpbmQpXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZFxyXG4gW3JkciBraW5kIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIFwiIChuYW1lIGtpbmQpIFwiOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9KSwgZHluYWRvYy5jb3JlICh7OnN5bSBjbGotY29tcGlsZXItZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhhbXBsZSBmb3JtcyBjYl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsai1jb21waWxlci1mblxyXG4gW2V4YW1wbGUgZm9ybXMgY2JdXHJcbiAobGV0XHJcbiAgW25zLXN5bSAoOm5zLXN5bSAoY29tbW9uL2dldC1zdGF0ZSkpXVxyXG4gICh0cnlcclxuICAgKC5zZW5kXHJcbiAgICBYaHJJb1xyXG4gICAgXCIvZXZhbFwiXHJcbiAgICAoZm5cclxuICAgICBbZV1cclxuICAgICAoaWZcclxuICAgICAgKC5pc1N1Y2Nlc3MgKC4tdGFyZ2V0IGUpKVxyXG4gICAgICAoLT4+XHJcbiAgICAgICAoLi4gZSAtdGFyZ2V0IGdldFJlc3BvbnNlVGV4dClcclxuICAgICAgIHJlYWQtc3RyaW5nXHJcbiAgICAgICByZXN0XHJcbiAgICAgICAobWFwdlxyXG4gICAgICAgIChmbipcclxuICAgICAgICAgW3AxX180ODk5MyNdXHJcbiAgICAgICAgIChpZiAodmVjdG9yPyBwMV9fNDg5OTMjKSAoaW50by1hcnJheSBwMV9fNDg5OTMjKSBwMV9fNDg5OTMjKSkpXHJcbiAgICAgICBjYilcclxuICAgICAgKGNiIFtdKSkpXHJcbiAgICBcIlBPU1RcIlxyXG4gICAgKHByLXN0clxyXG4gICAgIChpbnRvXHJcbiAgICAgIFsobGlzdCAnaW4tbnMgKGxpc3QgJ3F1b3RlIG5zLXN5bSkpXVxyXG4gICAgICAobWFwdiAocGFydGlhbCB0cmFuc2Zvcm0gKGRpc3NvYyBleGFtcGxlIDp3aXRoLWNhcmQpKSBmb3JtcykpKSlcclxuICAgKGNhdGNoIGpzL0Vycm9yIF8gKGNiIFtdKSkpKSlcclxuIn0gezpzeW0gZm9ybS0+c2VyaWFsaXphYmxlLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgdGhlIGlucHV0IHRvIGVpdGhlciBhIHN0cmluZyBvciAoaWYgYW4gZXJyb3Igb2JqZWN0KSBhbiBhcnJheSBvZiBkYXRhIiwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcm0tPnNlcmlhbGl6YWJsZVxyXG4gXCJDb252ZXJ0cyB0aGUgaW5wdXQgdG8gZWl0aGVyIGEgc3RyaW5nIG9yIChpZiBhbiBlcnJvciBvYmplY3QpIGFuIGFycmF5IG9mIGRhdGFcIlxyXG4gW2Zvcm1dXHJcbiAoaWZcclxuICAoaW5zdGFuY2U/IGpzL0Vycm9yIGZvcm0pXHJcbiAgKGFycmF5XHJcbiAgIChvciAoc29tZS0+IGZvcm0gLi1jYXVzZSAuLW1lc3NhZ2UpICguLW1lc3NhZ2UgZm9ybSkpXHJcbiAgICguLWZpbGVOYW1lIGZvcm0pXHJcbiAgICguLWxpbmVOdW1iZXIgZm9ybSkpXHJcbiAgKHByLXN0ciBmb3JtKSkpXHJcbiJ9IHs6c3ltIGluaXQtZWRpdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LWVkaXRvclxyXG4gW2VsZW1dXHJcbiAod2hlbi1sZXRcclxuICBbcGFyZW4tc291cCAob3IgKC5xdWVyeVNlbGVjdG9yIGVsZW0gXCIucGFyZW4tc291cFwiKSBlbGVtKV1cclxuICAocHMvaW5pdCBwYXJlbi1zb3VwIChqcy0+Y2xqIHs6Y29tcGlsZXItZm4gKGZuIFtdKX0pKSkpXHJcbiJ9IHs6c3ltIGNsanMtY29tcGlsZXItZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhhbXBsZSBmb3JtcyBjYl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsanMtY29tcGlsZXItZm5cclxuIFtleGFtcGxlIGZvcm1zIGNiXVxyXG4gKGxldFxyXG4gIFtucy1zeW0gKDpucy1zeW0gKGNvbW1vbi9nZXQtc3RhdGUpKV1cclxuICAoZXMvY29kZS0+cmVzdWx0c1xyXG4gICAoaW50byBbKGxpc3QgJ25zIG5zLXN5bSldIChtYXB2IChwYXJ0aWFsIHRyYW5zZm9ybSBleGFtcGxlKSBmb3JtcykpXHJcbiAgIChmbiBbcmVzdWx0c10gKC0+PiByZXN1bHRzIHJlc3QgKG1hcHYgZm9ybS0+c2VyaWFsaXphYmxlKSBjYikpXHJcbiAgIHs6Y3VzdG9tLWxvYWQgKGZuIFtvcHRzIGNiXSAoY2IgezpsYW5nIDpjbGosIDpzb3VyY2UgXCJcIn0pKSxcclxuICAgIDpkaXNhYmxlLXRpbWVvdXQ/IHRydWV9KSkpXHJcbiJ9IHs6c3ltIHRyYW5zZm9ybSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW3dpdGgtZm9jdXMgd2l0aC1jYXJkIHdpdGgtY2FsbGJhY2tdLCA6YXMgZXh9IGZvcm0tc3RyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNmb3JtXHJcbiBbezprZXlzIFt3aXRoLWZvY3VzIHdpdGgtY2FyZCB3aXRoLWNhbGxiYWNrXSwgOmFzIGV4fSBmb3JtLXN0cl1cclxuIChpZlxyXG4gIChvciB3aXRoLWZvY3VzIHdpdGgtY2FyZCB3aXRoLWNhbGxiYWNrKVxyXG4gICh0cmFuc2Zvcm0vdHJhbnNmb3JtIGV4IChyZWFkLXN0cmluZyBmb3JtLXN0cikpXHJcbiAgZm9ybS1zdHIpKVxyXG4ifSB7OnN5bSBpbml0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXRcclxuIFtdXHJcbiAoLT4+XHJcbiAgKC5xdWVyeVNlbGVjdG9yIGpzL2RvY3VtZW50IFwiI2luaXRpYWwtc3RhdGVcIilcclxuICAuLXRleHRDb250ZW50XHJcbiAganMvYXRvYlxyXG4gIHJlYWQtc3RyaW5nXHJcbiAgKHN3YXAhIGNvbW1vbi8qc2Vzc2lvbiBjb21tb24vdXBkYXRlLXNlc3Npb24gOmR5bmFkb2MuY29tbW9uL3NlcnZlcikpXHJcbiAocnVtL2h5ZHJhdGVcclxuICAoY29tbW9uL2FwcC1yb290IGNvbW1vbi8qc2Vzc2lvbilcclxuICAoLnF1ZXJ5U2VsZWN0b3IganMvZG9jdW1lbnQgXCIjYXBwXCIpKVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3Zhci1zeW0gd2F0Y2hlcl19IChjb21tb24vZ2V0LXN0YXRlKV1cclxuICAoLT4+XHJcbiAgIHs6ZHluYWRvYy5jb21tb24vY2xqcy1zdGFydGVkPyB0cnVlLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydGFibGU/IGpzL0NPTVBJTEVELFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2luaXQtZWRpdG9yIChtZW1vaXplIGluaXQtZWRpdG9yKSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9pbml0LWV4YW1wbGUtZWRpdG9yIChtZW1vaXplIGluaXQtZXhhbXBsZS1lZGl0b3IpLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL3dhdGNoZXJcclxuICAgICh3aGVuLW5vdCBqcy9DT01QSUxFRCAob3Igd2F0Y2hlciAoaW5pdC13YXRjaGVyISkpKX1cclxuICAgKHN3YXAhXHJcbiAgICBjb21tb24vKnNlc3Npb25cclxuICAgIGNvbW1vbi91cGRhdGUtc2Vzc2lvblxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2NsaWVudCkpXHJcbiAgKHdoZW5cclxuICAgdmFyLXN5bVxyXG4gICAoZG9zZXFcclxuICAgIFtidXR0b24gKC0+IGpzL2RvY3VtZW50ICgucXVlcnlTZWxlY3RvckFsbCBcIi5idXR0b25cIikgYXJyYXktc2VxKV1cclxuICAgIChzZXQhICguLWRpc3BsYXkgKC4tc3R5bGUgYnV0dG9uKSkgXCJpbmxpbmUtYmxvY2tcIikpKSkpXHJcbiJ9IHs6c3ltIHJlYWQtc3RyaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXN0cmluZ1xyXG4gW3NdXHJcbiAoYmluZGluZ1xyXG4gIFtyLypzdXBwcmVzcy1yZWFkKiB0cnVlXVxyXG4gIChyL3JlYWQtc3RyaW5nIHs6cmVhZC1jb25kIDpwcmVzZXJ2ZSwgOmVvZiBuaWx9IHMpKSlcclxuIn0gezpzeW0gaW5pdC1leGFtcGxlLWVkaXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbGVtIGV4YW1wbGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LWV4YW1wbGUtZWRpdG9yXHJcbiBbZWxlbSBleGFtcGxlXVxyXG4gKHdoZW4tbGV0XHJcbiAgW3BhcmVuLXNvdXAgKG9yICgucXVlcnlTZWxlY3RvciBlbGVtIFwiLnBhcmVuLXNvdXBcIikgZWxlbSldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtjb250ZW50ICgucXVlcnlTZWxlY3RvciBwYXJlbi1zb3VwIFwiLmNvbnRlbnRcIildXHJcbiAgIChzZXQhICguLWNvbnRlbnRFZGl0YWJsZSBjb250ZW50KSB0cnVlKSlcclxuICAobGV0XHJcbiAgIFt0eXBlICg6dHlwZSAoY29tbW9uL2dldC1zdGF0ZSkpXVxyXG4gICAocHMvaW5pdFxyXG4gICAgcGFyZW4tc291cFxyXG4gICAgKGpzLT5jbGpcclxuICAgICB7OmNvbXBpbGVyLWZuXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD0gOmNsaiB0eXBlKVxyXG4gICAgICAgKHBhcnRpYWwgY2xqLWNvbXBpbGVyLWZuIGV4YW1wbGUpXHJcbiAgICAgICAocGFydGlhbCBjbGpzLWNvbXBpbGVyLWZuIGV4YW1wbGUpKX0pKSkpKVxyXG4ifSB7OnN5bSBpbml0LXdhdGNoZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtd2F0Y2hlciFcclxuIFtdXHJcbiAobGV0XHJcbiAgW3Byb3RvY29sXHJcbiAgIChpZiAoPSAoLi1wcm90b2NvbCBqcy9sb2NhdGlvbikgXCJodHRwczpcIikgXCJ3c3M6XCIgXCJ3czpcIilcclxuICAgaG9zdFxyXG4gICAoLT4ganMvd2luZG93IC4tbG9jYXRpb24gLi1ob3N0KVxyXG4gICBzb2NrXHJcbiAgIChqcy9XZWJTb2NrZXQuIChzdHIgcHJvdG9jb2wgXCIvL1wiIGhvc3QgXCIvd2F0Y2hcIikpXVxyXG4gIChzZXQhXHJcbiAgICguLW9ub3BlbiBzb2NrKVxyXG4gICAoZm4gW2V2ZW50XSAoLnNlbmQgc29jayBqcy93aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpKSlcclxuICAoc2V0IVxyXG4gICAoLi1vbm1lc3NhZ2Ugc29jaylcclxuICAgKGZuXHJcbiAgICBbZXZlbnRdXHJcbiAgICAoLT4+XHJcbiAgICAgKC4tZGF0YSBldmVudClcclxuICAgICByZWFkLXN0cmluZ1xyXG4gICAgIChzd2FwIVxyXG4gICAgICBjb21tb24vKnNlc3Npb25cclxuICAgICAgY29tbW9uL3VwZGF0ZS1zZXNzaW9uXHJcbiAgICAgIDpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIpKSkpXHJcbiAgc29jaykpXHJcbiJ9KSwgZXhwb3VuZC5hbHBoYSAoezpzeW0gZXJyb3ItbWVzc2FnZSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBuYW1lZCBga2AsIHJldHVybiBpdHMgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4iLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXJyb3ItbWVzc2FnZVxyXG4gXCJHaXZlbiBhIHNwZWMgbmFtZWQgYGtgLCByZXR1cm4gaXRzIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXCJcclxuIFtrXVxyXG4gKGdldCBAcmVnaXN0cnktcmVmIGspKVxyXG4ifSB7OnN5bSBleHBsYWluLXJlc3VsdCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgcmVzdWx0IGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcHJpbnRzIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyAoW2NoZWNrLXJlc3VsdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tcmVzdWx0XHJcbiBcIkdpdmVuIGEgcmVzdWx0IGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcHJpbnRzIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0LlwiXHJcbiBbY2hlY2stcmVzdWx0XVxyXG4gKHdoZW5cclxuICAoPSBzLypleHBsYWluLW91dCogcy9leHBsYWluLXByaW50ZXIpXHJcbiAgKHRocm93XHJcbiAgIChleC1pbmZvXHJcbiAgICBcIkNhbm5vdCBwcmludCBjaGVjayByZXN1bHRzIHdpdGggZGVmYXVsdCBwcmludGVyLiBVc2UgJ3NldCEnIG9yICdiaW5kaW5nJyB0byB1c2UgRXhwb3VuZCBwcmludGVyLlwiXHJcbiAgICB7fSkpKVxyXG4gKHMvKmV4cGxhaW4tb3V0KiBjaGVjay1yZXN1bHQpKVxyXG4ifSB7OnN5bSBjdXN0b20tcHJpbnRlciwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBwcmludGVyLlxuXG4gIE9wdGlvbnM6XG4gICA6c2hvdy12YWxpZC12YWx1ZXM/IC0gaWYgZmFsc2UsIHJlcGxhY2VzIHZhbGlkIHZhbHVlcyB3aXRoIFwiLi4uXCJcbiAgIDp2YWx1ZS1zdHItZm4gICAgICAgLSBmdW5jdGlvbiB0byBwcmludCBiYWQgdmFsdWVzXG4gICA6cHJpbnQtc3BlY3M/ICAgICAgIC0gaWYgdHJ1ZSwgZGlzcGxheSBcIlJlbGV2YW50IHNwZWNzXCIgc2VjdGlvbi4gT3RoZXJ3aXNlLCBvbWl0IHRoYXQgc2VjdGlvbi5cbiAgIDp0aGVtZSAgICAgICAgICAgICAgIC0gZW5hYmxlcyBjb2xvciB0aGVtZS4gUG9zc2libGUgdmFsdWVzOiA6Zmlnd2hlZWwtdGhlbWUsIDpub25lIiwgOmFyZ2xpc3RzIChbb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGN1c3RvbS1wcmludGVyXHJcbiBcIlJldHVybnMgYSBwcmludGVyLlxcblxcbiAgT3B0aW9uczpcXG4gICA6c2hvdy12YWxpZC12YWx1ZXM/IC0gaWYgZmFsc2UsIHJlcGxhY2VzIHZhbGlkIHZhbHVlcyB3aXRoIFxcXCIuLi5cXFwiXFxuICAgOnZhbHVlLXN0ci1mbiAgICAgICAtIGZ1bmN0aW9uIHRvIHByaW50IGJhZCB2YWx1ZXNcXG4gICA6cHJpbnQtc3BlY3M/ICAgICAgIC0gaWYgdHJ1ZSwgZGlzcGxheSBcXFwiUmVsZXZhbnQgc3BlY3NcXFwiIHNlY3Rpb24uIE90aGVyd2lzZSwgb21pdCB0aGF0IHNlY3Rpb24uXFxuICAgOnRoZW1lICAgICAgICAgICAgICAgLSBlbmFibGVzIGNvbG9yIHRoZW1lLiBQb3NzaWJsZSB2YWx1ZXM6IDpmaWd3aGVlbC10aGVtZSwgOm5vbmVcIlxyXG4gW29wdHNdXHJcbiAoZm4gW2V4cGxhaW4tZGF0YV0gKHByaW50IChwcmludGVyLXN0ciBvcHRzIGV4cGxhaW4tZGF0YSkpKSlcclxuIn0gezpzeW0gcHJpbnRlciwgOm1ldGEgezpkb2MgIlByaW50cyBgZXhwbGFpbi1kYXRhYCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC4iLCA6YXJnbGlzdHMgKFtleHBsYWluLWRhdGFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludGVyXHJcbiBcIlByaW50cyBgZXhwbGFpbi1kYXRhYCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC5cIlxyXG4gW2V4cGxhaW4tZGF0YV1cclxuICgoY3VzdG9tLXByaW50ZXIge30pIGV4cGxhaW4tZGF0YSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tcmVzdWx0LXN0ciwgOm1ldGEgezpkb2MgIkdpdmVuIGEgcmVzdWx0IGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcmV0dXJucyBhIHN0cmluZyBzdW1tYXJpemluZyB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyAoW2NoZWNrLXJlc3VsdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tcmVzdWx0LXN0clxyXG4gXCJHaXZlbiBhIHJlc3VsdCBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHJldHVybnMgYSBzdHJpbmcgc3VtbWFyaXppbmcgdGhlIHJlc3VsdC5cIlxyXG4gW2NoZWNrLXJlc3VsdF1cclxuICh3aXRoLW91dC1zdHIgKGV4cGxhaW4tcmVzdWx0IGNoZWNrLXJlc3VsdCkpKVxyXG4ifSB7OnN5bSBleHBsYWluLXJlc3VsdHMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNlcXVlbmNlIG9mIHJlc3VsdHMgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCBwcmludHMgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzLiIsIDphcmdsaXN0cyAoW2NoZWNrLXJlc3VsdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXJlc3VsdHNcclxuIFwiR2l2ZW4gYSBzZXF1ZW5jZSBvZiByZXN1bHRzIGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcHJpbnRzIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cy5cIlxyXG4gW2NoZWNrLXJlc3VsdHNdXHJcbiAoZG9zZXFcclxuICBbY2hlY2stcmVzdWx0IChidXRsYXN0IGNoZWNrLXJlc3VsdHMpXVxyXG4gIChleHBsYWluLXJlc3VsdCBjaGVjay1yZXN1bHQpXHJcbiAgKHByaW50IFwiXFxuXFxuXCIpKVxyXG4gKGV4cGxhaW4tcmVzdWx0IChsYXN0IGNoZWNrLXJlc3VsdHMpKSlcclxuIn0gezpzeW0gZXhwb3VuZC1zdHIsIDptZXRhIHs6ZG9jICJHaXZlbiBhIGBzcGVjYCBhbmQgYSBgZm9ybWAsIGVpdGhlciByZXR1cm5zIHN1Y2Nlc3MgbWVzc2FnZSBvciBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuIiwgOmFyZ2xpc3RzIChbc3BlYyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwb3VuZC1zdHJcclxuIFwiR2l2ZW4gYSBgc3BlY2AgYW5kIGEgYGZvcm1gLCBlaXRoZXIgcmV0dXJucyBzdWNjZXNzIG1lc3NhZ2Ugb3IgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLlwiXHJcbiBbc3BlYyBmb3JtXVxyXG4gKGxldFxyXG4gIFtleHBsYWluLWRhdGEgKHMvZXhwbGFpbi1kYXRhIHNwZWMgZm9ybSldXHJcbiAgKHByaW50ZXItc3RyXHJcbiAgIHt9XHJcbiAgIChpZlxyXG4gICAgZXhwbGFpbi1kYXRhXHJcbiAgICAoYXNzb2MgZXhwbGFpbi1kYXRhIDpjbG9qdXJlLnNwZWMuYWxwaGEvdmFsdWUgZm9ybSlcclxuICAgIG5pbCkpKSlcclxuIn0gezpzeW0gZXhwbGFpbi1yZXN1bHRzLXN0ciwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc2VxdWVuY2Ugb2YgcmVzdWx0cyBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHJldHVybnMgYSBzdHJpbmcgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMuIiwgOmFyZ2xpc3RzIChbY2hlY2stcmVzdWx0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tcmVzdWx0cy1zdHJcclxuIFwiR2l2ZW4gYSBzZXF1ZW5jZSBvZiByZXN1bHRzIGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcmV0dXJucyBhIHN0cmluZyBzdW1tYXJpemluZyB0aGUgcmVzdWx0cy5cIlxyXG4gW2NoZWNrLXJlc3VsdHNdXHJcbiAod2l0aC1vdXQtc3RyIChleHBsYWluLXJlc3VsdHMgY2hlY2stcmVzdWx0cykpKVxyXG4ifSB7OnN5bSBleHBvdW5kLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBgc3BlY2AgYW5kIGEgYGZvcm1gLCBlaXRoZXIgcHJpbnRzIGEgc3VjY2VzcyBtZXNzYWdlIG9yIGEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4iLCA6YXJnbGlzdHMgKFtzcGVjIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBvdW5kXHJcbiBcIkdpdmVuIGEgYHNwZWNgIGFuZCBhIGBmb3JtYCwgZWl0aGVyIHByaW50cyBhIHN1Y2Nlc3MgbWVzc2FnZSBvciBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXCJcclxuIFtzcGVjIGZvcm1dXHJcbiAocHJpbnQgKGV4cG91bmQtc3RyIHNwZWMgZm9ybSkpKVxyXG4ifSB7OnN5bSBkZWZtc2csIDptZXRhIHs6ZG9jICJBc3NvY2lhdGVzIHRoZSBzcGVjIG5hbWVkIGBrYCB3aXRoIGBlcnJvci1tZXNzYWdlYC4iLCA6YXJnbGlzdHMgKFtrIGVycm9yLW1lc3NhZ2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWZtc2dcclxuIFwiQXNzb2NpYXRlcyB0aGUgc3BlYyBuYW1lZCBga2Agd2l0aCBgZXJyb3ItbWVzc2FnZWAuXCJcclxuIFtrIGVycm9yLW1lc3NhZ2VdXHJcbiAoc3dhcCEgcmVnaXN0cnktcmVmIGFzc29jIGsgZXJyb3ItbWVzc2FnZSlcclxuIG5pbClcclxuIn0pLCBjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmVycm9ycyAoezpzeW0gdGhyb3ctYmFkLWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1kaXNwYXRjaFxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiTm8gZGlzcGF0Y2ggbWFjcm8gZm9yIFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWVzY2FwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZXNjYXBlXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlOiBcXFxcdVwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZHVwLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQga3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1kdXAta2V5c1xyXG4gW3JkciBraW5kIGtzXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIChkdXBsaWNhdGUta2V5cy1lcnJvclxyXG4gICAoc3RyIChzL2NhcGl0YWxpemUgKG5hbWUga2luZCkpIFwiIGxpdGVyYWwgY29udGFpbnMgZHVwbGljYXRlIGtleVwiKVxyXG4gICBrcykpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIG5zLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbnNcclxuIFtyZHIgbnMtbmFtZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgdmFsdWUgdXNlZCBhcyBuYW1lc3BhY2UgaW4gbmFtZXNwYWNlZCBtYXA6IFwiXHJcbiAgbnMtbmFtZVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5rbm93bi1yZWFkZXItdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bmtub3duLXJlYWRlci10YWdcclxuIFtyZHIgdGFnXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJObyByZWFkZXIgZnVuY3Rpb24gZm9yIHRhZyBcIiAoaS9pbnNwZWN0IHRhZykgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtYXQtZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWF0LWRpc3BhdGNoXHJcbiBbcmRyXVxyXG4gKGVvZi1lcnJvciByZHIgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIGRpc3BhdGNoIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1tZXRhZGF0YS10YXJnZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhcmdldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1tZXRhZGF0YS10YXJnZXRcclxuIFtyZHIgdGFyZ2V0XVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTWV0YWRhdGEgY2FuIG5vdCBiZSBhcHBsaWVkIHRvIFwiXHJcbiAgKGkvaW5zcGVjdCB0YXJnZXQpXHJcbiAgXCIuIFwiXHJcbiAgXCJNZXRhZGF0YSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIElNZXRhcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtbnVtYmVyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIG51bWJlcjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSByZWFkZXItZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDpyZWFkZXItZXJyb3IgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1saXRlcmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1saXRlcmFsXHJcbiBbcmRyIHRva2VuXVxyXG4gKHRocm93XHJcbiAgKGlsbGVnYWwtYXJnLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBsaXRlcmFsOiBcXFxcXCIgdG9rZW4gXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctbnMtbWFwLW5vLW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbnMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LW5zLW1hcC1uby1tYXBcclxuIFtyZHIgbnMtbmFtZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk5hbWVzcGFjZWQgbWFwIHdpdGggbmFtZXNwYWNlIFwiXHJcbiAgbnMtbmFtZVxyXG4gIFwiIGRvZXMgbm90IHNwZWNpZnkgYSBtYXAuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bnN1cHBvcnRlZC1jaGFyYWN0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5zdXBwb3J0ZWQtY2hhcmFjdGVyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZmVhdHVyZS1ub3Qta2V5d29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgZmVhdHVyZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWZlYXR1cmUtbm90LWtleXdvcmRcclxuIFtyZHIgZmVhdHVyZV1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkZlYXR1cmUgY2Fubm90IGJlIFwiXHJcbiAgKGkvaW5zcGVjdCBmZWF0dXJlKVxyXG4gIFwiIEZlYXR1cmVzIG11c3QgYmUga2V5d29yZHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtZGVsaW1pdGVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3JkciBraW5kIGNvbHVtbiBsaW5lXSBbcmRyIGtpbmQgbGluZSBjb2x1bW4gbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1kZWxpbWl0ZWRcclxuIChbcmRyIGtpbmQgY29sdW1uIGxpbmVdXHJcbiAgKHRocm93LWVvZi1kZWxpbWl0ZWQgcmRyIGtpbmQgbGluZSBjb2x1bW4gbmlsKSlcclxuIChbcmRyIGtpbmQgbGluZSBjb2x1bW4gbl1cclxuICAoZW9mLWVycm9yXHJcbiAgIHJkclxyXG4gICBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgXCJcclxuICAgKGlmIG4gKHN0ciBcIml0ZW0gXCIgbiBcIiBvZiBcIikpXHJcbiAgIChuYW1lIGtpbmQpXHJcbiAgIChpZiBsaW5lIChzdHIgXCIsIHN0YXJ0aW5nIGF0IGxpbmUgXCIgbGluZSBcIiBhbmQgY29sdW1uIFwiIGNvbHVtbikpXHJcbiAgIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1pbi1jaGFyYWN0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWluLWNoYXJhY3RlclxyXG4gW3Jkcl1cclxuIChlb2YtZXJyb3IgcmRyIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1jaGFyXHJcbiBbcmRyIGtpbmQgY2hdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIGNoYXJhY3RlcjogXCJcclxuICBjaFxyXG4gIFwiIGZvdW5kIHdoaWxlIHJlYWRpbmcgXCJcclxuICAobmFtZSBraW5kKVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gZW9mLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVvZi1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6ZW9mIChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbWV0YWRhdGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbWV0YWRhdGFcclxuIFtyZHIgeF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk1ldGFkYXRhIGNhbm5vdCBiZSBcIlxyXG4gIChpL2luc3BlY3QgeClcclxuICBcIi4gTWV0YWRhdGEgbXVzdCBiZSBhIFN5bWJvbCwgS2V5d29yZCwgU3RyaW5nIG9yIE1hcC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1yZWFkaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kICYgc3RhcnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtcmVhZGluZ1xyXG4gW3JkciBraW5kICYgc3RhcnRdXHJcbiAobGV0XHJcbiAgW2luaXQgKGNhc2Uga2luZCA6cmVnZXggXCIjXFxcIlwiIDpzdHJpbmcgXFxcIildXHJcbiAgKGVvZi1lcnJvclxyXG4gICByZHJcclxuICAgXCJVbmV4cGVjdGVkIEVPRiByZWFkaW5nIFwiXHJcbiAgIChuYW1lIGtpbmQpXHJcbiAgIFwiIHN0YXJ0aW5nIFwiXHJcbiAgIChhcHBseSBzdHIgaW5pdCBzdGFydClcclxuICAgXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWVycm9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWVycm9yXHJcbiBbcmRyIGxpbmVdXHJcbiAoaWZcclxuICBsaW5lXHJcbiAgKGVvZi1lcnJvciByZHIgXCJFT0Ygd2hpbGUgcmVhZGluZywgc3RhcnRpbmcgYXQgbGluZSBcIiBsaW5lIFwiLlwiKVxyXG4gIChlb2YtZXJyb3IgcmRyIFwiRU9GIHdoaWxlIHJlYWRpbmcuXCIpKSlcclxuIn0gezpzeW0gaWxsZWdhbC1hcmctZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaWxsZWdhbC1hcmctZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOmlsbGVnYWwtYXJndW1lbnQgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtb2N0YWwtbGVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtb2N0YWwtbGVuXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UgaW4gYSBjaGFyYWN0ZXIgbGl0ZXJhbDpcIlxyXG4gIHRva2VuXHJcbiAgXCIuIE9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgbXVzdCBiZSAzIG9yIGZld2VyIGRpZ2l0cy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXRcclxuIFtyZHIgY2hdXHJcbiAoaWxsZWdhbC1hcmctZXJyb3IgcmRyIFwiSW52YWxpZCBkaWdpdCBcIiBjaCBcIiBpbiB1bmljb2RlIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdC1pbi10b2tlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2ggdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQtaW4tdG9rZW5cclxuIFtyZHIgY2ggdG9rZW5dXHJcbiAoaWxsZWdhbC1hcmctZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgZGlnaXQgXCJcclxuICBjaFxyXG4gIFwiIGluIHVuaWNvZGUgY2hhcmFjdGVyIFxcXFxcIlxyXG4gIHRva2VuXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBhY3R1YWwgZXhwZWN0ZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGVuXHJcbiBbcmRyIGFjdHVhbCBleHBlY3RlZF1cclxuIChpbGxlZ2FsLWFyZy1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCB1bmljb2RlIGxpdGVyYWwuIFVuaWNvZGUgbGl0ZXJhbHMgc2hvdWxkIGJlIFwiXHJcbiAgZXhwZWN0ZWRcclxuICBcImNoYXJhY3RlcnMgbG9uZy4gIFwiXHJcbiAgXCJ2YWx1ZSBzdXBwbGVkIGlzIFwiXHJcbiAgYWN0dWFsXHJcbiAgXCJjaGFyYWN0ZXJzIGxvbmcuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1zaW5nbGUtY29sb24sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctc2luZ2xlLWNvbG9uXHJcbiBbcmRyXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJBIHNpbmdsZSBjb2xvbiBpcyBub3QgYSB2YWxpZCBrZXl3b3JkLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctb2RkLW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbGluZSBjb2wgZWxlbWVudHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1vZGQtbWFwXHJcbiBbcmRyIGxpbmUgY29sIGVsZW1lbnRzXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiVGhlIG1hcCBsaXRlcmFsIHN0YXJ0aW5nIHdpdGggXCJcclxuICAoaS9pbnNwZWN0IChmaXJzdCBlbGVtZW50cykpXHJcbiAgKGlmIGxpbmUgKHN0ciBcIiBvbiBsaW5lIFwiIGxpbmUgXCIgY29sdW1uIFwiIGNvbCkpXHJcbiAgXCIgY29udGFpbnMgXCJcclxuICAoY291bnQgZWxlbWVudHMpXHJcbiAgXCIgZm9ybShzKS4gTWFwIGxpdGVyYWxzIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBmb3Jtcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1vY3RhbC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW9jdGFsLW51bWJlclxyXG4gW3Jkcl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiT2N0YWwgZXNjYXBlIHNlcXVlbmNlIG11c3QgYmUgaW4gcmFuZ2UgWzAsIDM3N10uXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtcmVhZGVyLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLXJlYWRlci10YWdcclxuIFtyZHIgdGFnXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCByZWFkZXIgdGFnOiBcIlxyXG4gIChpL2luc3BlY3QgdGFnKVxyXG4gIFwiLiBSZWFkZXIgdGFncyBtdXN0IGJlIHN5bWJvbHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bm1hdGNoLWRlbGltaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bm1hdGNoLWRlbGltaXRlclxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5tYXRjaGVkIGRlbGltaXRlciBcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtY2hhcmFjdGVyLWxpdGVyYWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1jaGFyYWN0ZXItbGl0ZXJhbFxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBjaGFyYWN0ZXIgbGl0ZXJhbCBcXFxcdVwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWNoYXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBjaGFyYWN0ZXIgXFxcXFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLWVzY2FwZS1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1lc2NhcGUtY2hhclxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5zdXBwb3J0ZWQgZXNjYXBlIGNoYXJhY3RlcjogXFxcXFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctbm8tZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmbiB0aHJvdy1uby1kaXNwYXRjaCBbcmRyIGNoXSAodGhyb3ctYmFkLWRpc3BhdGNoIHJkciBjaCkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1hdC1zdGFydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1hdC1zdGFydFxyXG4gW3JkciBraW5kXVxyXG4gKGVvZi1lcnJvclxyXG4gIHJkclxyXG4gIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBzdGFydCBvZiBcIlxyXG4gIChuYW1lIGtpbmQpXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZFxyXG4gW3JkciBraW5kIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIFwiIChuYW1lIGtpbmQpIFwiOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9KSwgY2xqcy5qcyAoezpzeW0gKmxvYWQtZm4qLCA6bWV0YSB7OmRvYyAiRWFjaCBydW50aW1lIGVudmlyb25tZW50IHByb3ZpZGVzIGEgZGlmZmVyZW50IHdheSB0byBsb2FkIGEgbGlicmFyeS5cbiAgV2hhdGV2ZXIgZnVuY3Rpb24gKmxvYWQtZm4qIGlzIGJvdW5kIHRvIHdpbGwgYmUgcGFzc2VkIHR3byBhcmd1bWVudHMgLSBhXG4gIG1hcCBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbjogVGhlIG1hcCB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBrZXlzOlxuXG4gIDpuYW1lICAgLSB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSAoYSBzeW1ib2wpXG4gIDptYWNyb3MgLSBtb2RpZmllciBzaWduYWxpbmcgYSBtYWNyb3MgbmFtZXNwYWNlIGxvYWRcbiAgOnBhdGggICAtIG11bmdlZCByZWxhdGl2ZSBsaWJyYXJ5IHBhdGggKGEgc3RyaW5nKVxuXG4gIEl0IGlzIHVwIHRvIHRoZSBpbXBsZW1lbnRvciB0byBjb3JyZWN0bHkgcmVzb2x2ZSB0aGUgY29ycmVzcG9uZGluZyAuY2xqcyxcbiAgLmNsamMsIG9yIC5qcyByZXNvdXJjZSAodGhlIG9yZGVyIG11c3QgYmUgcmVzcGVjdGVkKS4gSWYgOm1hY3JvcyBpcyB0cnVlXG4gIHJlc29sdXRpb24gc2hvdWxkIG9ubHkgY29uc2lkZXIgLmNsaiBvciAuY2xqYyByZXNvdXJjZXMgKHRoZSBvcmRlciBtdXN0IGJlXG4gIHJlc3BlY3RlZCkuIFVwb24gcmVzb2x1dGlvbiB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgd2l0aCBhIG1hcFxuICBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czpcblxuICA6bGFuZyAgICAgICAtIHRoZSBsYW5ndWFnZSwgOmNsaiBvciA6anNcbiAgOnNvdXJjZSAgICAgLSB0aGUgc291cmNlIG9mIHRoZSBsaWJyYXJ5IChhIHN0cmluZylcbiAgOmZpbGUgICAgICAgLSBvcHRpb25hbCwgdGhlIGZpbGUgcGF0aCwgaXQgd2lsbCBiZSBhZGRlZCB0byBBU1QncyA6ZmlsZSBrZXl3b3JkXG4gICAgICAgICAgICAgICAgKGJ1dCBub3QgaW4gOm1ldGEpXG4gIDpjYWNoZSAgICAgIC0gb3B0aW9uYWwsIGlmIGEgOmNsaiBuYW1lc3BhY2UgaGFzIGJlZW4gcHJlY29tcGlsZWQgdG8gOmpzLCBjYW5cbiAgICAgICAgICAgICAgICBnaXZlIGFuIGFuYWx5c2lzIGNhY2hlIGZvciBmYXN0ZXIgbG9hZHMuXG4gIDpzb3VyY2UtbWFwIC0gb3B0aW9uYWwsIGlmIGEgOmNsaiBuYW1lc3BhY2UgaGFzIGJlZW4gcHJlY29tcGlsZWQgdG8gOmpzLCBjYW5cbiAgICAgICAgICAgICAgICBnaXZlIGEgVjMgc291cmNlIG1hcCBKU09OXG5cbiAgSWYgdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZCwgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIHdpdGhcbiAgbmlsLiJ9LCA6c291cmNlICIoZGVmb25jZSAqbG9hZC1mbiogKGZuIFttIGNiXSAodGhyb3cgKGpzL0Vycm9yLiBcIk5vICpsb2FkLWZuKiBzZXRcIikpKSlcclxuIn0gezpzeW0gZXZhbCwgOm1ldGEgezpkb2MgIkV2YWx1YXRlIGEgc2luZ2xlIENsb2p1cmVTY3JpcHQgZm9ybS4gVGhlIHBhcmFtZXRlcnM6XG5cbiAgIHN0YXRlIChhdG9tKVxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcblxuICAgZm9ybSAocy1leHByKVxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcblxuICAgb3B0cyAobWFwKVxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxuXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cblxuICAgY2IgKGZ1bmN0aW9uKVxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cbiAgICAgYSBrZXkgOnZhbHVlIHdpdGggdGhlIHJlc3VsdCBvZiBldmFsdXRpb24uIElmIHVuc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGxcbiAgICAgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlIG9mXG4gICAgIGZhaWx1cmUuIiwgOmFyZ2xpc3RzIFtbc3RhdGUgZm9ybSBjYl0gW3N0YXRlIGZvcm0gb3B0cyBjYl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2YWxcclxuIFwiRXZhbHVhdGUgYSBzaW5nbGUgQ2xvanVyZVNjcmlwdCBmb3JtLiBUaGUgcGFyYW1ldGVyczpcXG5cXG4gICBzdGF0ZSAoYXRvbSlcXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxcblxcbiAgIGZvcm0gKHMtZXhwcilcXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxcblxcbiAgIG9wdHMgKG1hcClcXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXFxuXFxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXFxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxcbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxcbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXFxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxcbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXFxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxcblxcbiAgIGNiIChmdW5jdGlvbilcXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxcbiAgICAgYSBrZXkgOnZhbHVlIHdpdGggdGhlIHJlc3VsdCBvZiBldmFsdXRpb24uIElmIHVuc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGxcXG4gICAgIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZSBvZlxcbiAgICAgZmFpbHVyZS5cIlxyXG4gKFtzdGF0ZSBmb3JtIGNiXSAoZXZhbCBzdGF0ZSBmb3JtIG5pbCBjYikpXHJcbiAoW3N0YXRlIGZvcm0gb3B0cyBjYl1cclxuICAoZXZhbCpcclxuICAgezoqY29tcGlsZXIqIHN0YXRlLFxyXG4gICAgOipkYXRhLXJlYWRlcnMqIHRhZ3MvKmNsanMtZGF0YS1yZWFkZXJzKixcclxuICAgIDoqYW5hbHl6ZS1kZXBzKiAoOmFuYWx5emUtZGVwcyBvcHRzIHRydWUpLFxyXG4gICAgOipjbGpzLWRlcC1zZXQqIGFuYS8qY2xqcy1kZXAtc2V0KixcclxuICAgIDoqbG9hZC1tYWNyb3MqICg6bG9hZC1tYWNyb3Mgb3B0cyB0cnVlKSxcclxuICAgIDoqbG9hZC1mbiogKG9yICg6bG9hZCBvcHRzKSAqbG9hZC1mbiopLFxyXG4gICAgOipldmFsLWZuKiAob3IgKDpldmFsIG9wdHMpICpldmFsLWZuKil9XHJcbiAgIGZvcm1cclxuICAgb3B0c1xyXG4gICBjYikpKVxyXG4ifSB7OnN5bSBjb21waWxlLXN0ciwgOm1ldGEgezpkb2MgIkNvbXBpbGUgQ2xvanVyZVNjcmlwdCBzb3VyY2UgaW50byBKYXZhU2NyaXB0LiBUaGUgcGFyYW1ldGVyczpcblxuICAgc3RhdGUgKGF0b20pXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxuXG4gICBzb3VyY2UgKHN0cmluZylcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXG5cbiAgIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXG4gICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIC0gdXNlZCBhcyBrZXkgaW4gOnNvdXJjZS1tYXBzXG5cbiAgIG9wdHMgKG1hcClcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cblxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXG5cbiAgIGNiIChmdW5jdGlvbilcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXG4gICAgIGEga2V5IDp2YWx1ZSB3aXRoIHRoZSBjb21waWxhdGlvbiByZXN1bHQgKHN0cmluZykuIElmIHVuc3VjY2Vzc2Z1bCB0aGUgbWFwXG4gICAgIHdpbGwgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlXG4gICAgIG9mIGZhaWx1cmUuIiwgOmFyZ2xpc3RzIFtbc3RhdGUgc291cmNlIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXV19LCA6c291cmNlICIoZGVmblxyXG4gY29tcGlsZS1zdHJcclxuIFwiQ29tcGlsZSBDbG9qdXJlU2NyaXB0IHNvdXJjZSBpbnRvIEphdmFTY3JpcHQuIFRoZSBwYXJhbWV0ZXJzOlxcblxcbiAgIHN0YXRlIChhdG9tKVxcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXFxuXFxuICAgc291cmNlIChzdHJpbmcpXFxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcXG5cXG4gICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxcbiAgICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLSB1c2VkIGFzIGtleSBpbiA6c291cmNlLW1hcHNcXG5cXG4gICBvcHRzIChtYXApXFxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxcblxcbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXFxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxcbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxcbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cXG5cXG4gICBjYiAoZnVuY3Rpb24pXFxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cXG4gICAgIGEga2V5IDp2YWx1ZSB3aXRoIHRoZSBjb21waWxhdGlvbiByZXN1bHQgKHN0cmluZykuIElmIHVuc3VjY2Vzc2Z1bCB0aGUgbWFwXFxuICAgICB3aWxsIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZVxcbiAgICAgb2YgZmFpbHVyZS5cIlxyXG4gKFtzdGF0ZSBzb3VyY2UgY2JdIChjb21waWxlLXN0ciBzdGF0ZSBzb3VyY2UgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgY2JdIChjb21waWxlLXN0ciBzdGF0ZSBzb3VyY2UgbmFtZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXVxyXG4gIHs6cHJlXHJcbiAgIFsoYXRvbT8gc3RhdGUpXHJcbiAgICAoc3RyaW5nPyBzb3VyY2UpXHJcbiAgICAodmFsaWQtbmFtZT8gbmFtZSlcclxuICAgICh2YWxpZC1vcHRzPyBvcHRzKVxyXG4gICAgKGZuPyBjYildfVxyXG4gIChjb21waWxlLXN0cipcclxuICAgezoqY29tcGlsZXIqIHN0YXRlLFxyXG4gICAgOipkYXRhLXJlYWRlcnMqIHRhZ3MvKmNsanMtZGF0YS1yZWFkZXJzKixcclxuICAgIDoqY2xqcy1kZXAtc2V0KiBhbmEvKmNsanMtZGVwLXNldCosXHJcbiAgICA6KmFuYWx5emUtZGVwcyogKDphbmFseXplLWRlcHMgb3B0cyB0cnVlKSxcclxuICAgIDoqbG9hZC1tYWNyb3MqICg6bG9hZC1tYWNyb3Mgb3B0cyB0cnVlKSxcclxuICAgIDoqbG9hZC1mbiogKG9yICg6bG9hZCBvcHRzKSAqbG9hZC1mbiopLFxyXG4gICAgOipldmFsLWZuKiAob3IgKDpldmFsIG9wdHMpICpldmFsLWZuKiksXHJcbiAgICA6KnNtLWRhdGEqICh3aGVuICg6c291cmNlLW1hcCBvcHRzKSAoc20tZGF0YSkpfVxyXG4gICBzb3VyY2VcclxuICAgbmFtZVxyXG4gICBvcHRzXHJcbiAgIGNiKSkpXHJcbiJ9IHs6c3ltIG5zLT5yZWxwYXRoLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBuYW1lc3BhY2UgYXMgYSBzeW1ib2wgcmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIHNhbnMgZXh0ZW5zaW9uIiwgOmFyZ2xpc3RzIChbbnMtc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnMtPnJlbHBhdGhcclxuIFwiR2l2ZW4gYSBuYW1lc3BhY2UgYXMgYSBzeW1ib2wgcmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIHNhbnMgZXh0ZW5zaW9uXCJcclxuIFtucy1zeW1dXHJcbiAoc3RyaW5nL3JlcGxhY2UgKGFuYS9tdW5nZS1wYXRoIG5zLXN5bSkgXFwuIFxcLykpXHJcbiJ9IHs6c3ltIGVtcHR5LXN0YXRlLCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGFuIGVtcHR5IGNvbXBpbGVyIHN0YXRlLiBSZXF1aXJlZCB0byBpbnZva2UgYW5hbHl6ZSwgY29tcGlsZSxcbiAgIGV2YWwgYW5kIGV2YWwtc3RyLiIsIDphcmdsaXN0cyBbW10gW2luaXRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbXB0eS1zdGF0ZVxyXG4gXCJDb25zdHJ1Y3QgYW4gZW1wdHkgY29tcGlsZXIgc3RhdGUuIFJlcXVpcmVkIHRvIGludm9rZSBhbmFseXplLCBjb21waWxlLFxcbiAgIGV2YWwgYW5kIGV2YWwtc3RyLlwiXHJcbiAoW11cclxuICAoZG90b1xyXG4gICAoZW52L2RlZmF1bHQtY29tcGlsZXItZW52KVxyXG4gICAoc3dhcCFcclxuICAgIChmblxyXG4gICAgIFtzdGF0ZV1cclxuICAgICAoLT5cclxuICAgICAgc3RhdGVcclxuICAgICAgKGFzc29jLWluXHJcbiAgICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAnY2xqcy5jb3JlXVxyXG4gICAgICAgKGR1bXAtY29yZSkpKSkpKSlcclxuIChbaW5pdF0gKGRvdG8gKGVtcHR5LXN0YXRlKSAoc3dhcCEgaW5pdCkpKSlcclxuIn0gezpzeW0gKmxvYWRlZCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpsb2FkZWQqIChhdG9tICN7fSkpXHJcbiJ9IHs6c3ltIHJlcXVpcmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbbmFtZSBjYl0gW25hbWUgb3B0cyBjYl0gW2JvdW5kLXZhcnMgbmFtZSBvcHRzIGNiXSBbYm91bmQtdmFycyBuYW1lIHJlbG9hZCBvcHRzIGNiXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVxdWlyZVxyXG4gKFtuYW1lIGNiXSAocmVxdWlyZSBuYW1lIG5pbCBjYikpXHJcbiAoW25hbWUgb3B0cyBjYl0gKHJlcXVpcmUgbmlsIG5hbWUgb3B0cyBjYikpXHJcbiAoW2JvdW5kLXZhcnMgbmFtZSBvcHRzIGNiXSAocmVxdWlyZSBib3VuZC12YXJzIG5hbWUgbmlsIG9wdHMgY2IpKVxyXG4gKFtib3VuZC12YXJzIG5hbWUgcmVsb2FkIG9wdHMgY2JdXHJcbiAgKGxldFxyXG4gICBbYm91bmQtdmFyc1xyXG4gICAgKG1lcmdlXHJcbiAgICAgezoqY29tcGlsZXIqIChlbnYvZGVmYXVsdC1jb21waWxlci1lbnYpLFxyXG4gICAgICA6KmRhdGEtcmVhZGVycyogdGFncy8qY2xqcy1kYXRhLXJlYWRlcnMqLFxyXG4gICAgICA6KmxvYWQtbWFjcm9zKiAoOmxvYWQtbWFjcm9zIG9wdHMgdHJ1ZSksXHJcbiAgICAgIDoqYW5hbHl6ZS1kZXBzKiAoOmFuYWx5emUtZGVwcyBvcHRzIHRydWUpLFxyXG4gICAgICA6KmxvYWQtZm4qIChvciAoOmxvYWQgb3B0cykgKmxvYWQtZm4qKSxcclxuICAgICAgOipldmFsLWZuKiAob3IgKDpldmFsIG9wdHMpICpldmFsLWZuKil9XHJcbiAgICAgYm91bmQtdmFycylcclxuICAgIGFuYW1lXHJcbiAgICAoY29uZC0+IG5hbWUgKDptYWNyb3MtbnMgb3B0cykgYW5hL21hY3JvLW5zLW5hbWUpXVxyXG4gICAod2hlbiAoPSA6cmVsb2FkIHJlbG9hZCkgKHN3YXAhICpsb2FkZWQqIGRpc2ogYW5hbWUpKVxyXG4gICAod2hlbiAoPSA6cmVsb2FkLWFsbCByZWxvYWQpIChyZXNldCEgKmxvYWRlZCogI3t9KSlcclxuICAgKHdoZW5cclxuICAgICg6dmVyYm9zZSBvcHRzKVxyXG4gICAgKGRlYnVnLXByblxyXG4gICAgIChzdHJcclxuICAgICAgXCJMb2FkaW5nIFwiXHJcbiAgICAgIG5hbWVcclxuICAgICAgKHdoZW4gKDptYWNyb3MtbnMgb3B0cykgXCIgbWFjcm9zXCIpXHJcbiAgICAgIFwiIG5hbWVzcGFjZVwiKSkpXHJcbiAgIChpZi1ub3RcclxuICAgIChjb250YWlucz8gQCpsb2FkZWQqIGFuYW1lKVxyXG4gICAgKGxldFxyXG4gICAgIFtlbnYgKDoqZW52KiBib3VuZC12YXJzKV1cclxuICAgICAodHJ5XHJcbiAgICAgICgoOipsb2FkLWZuKiBib3VuZC12YXJzKVxyXG4gICAgICAgezpuYW1lIG5hbWUsXHJcbiAgICAgICAgOm1hY3JvcyAoOm1hY3Jvcy1ucyBvcHRzKSxcclxuICAgICAgICA6cGF0aCAobnMtPnJlbHBhdGggbmFtZSl9XHJcbiAgICAgICAoZm5cclxuICAgICAgICBbcmVzb3VyY2VdXHJcbiAgICAgICAgKGFzc2VydFxyXG4gICAgICAgICAob3IgKG1hcD8gcmVzb3VyY2UpIChuaWw/IHJlc291cmNlKSlcclxuICAgICAgICAgXCIqbG9hZC1mbiogbWF5IG9ubHkgcmV0dXJuIGEgbWFwIG9yIG5pbFwiKVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICByZXNvdXJjZVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbezprZXlzIFtsYW5nIHNvdXJjZSBjYWNoZSBzb3VyY2UtbWFwIGZpbGVdfSByZXNvdXJjZV1cclxuICAgICAgICAgIChjb25kcFxyXG4gICAgICAgICAgIGtleXdvcmQtaWRlbnRpY2FsP1xyXG4gICAgICAgICAgIGxhbmdcclxuICAgICAgICAgICA6Y2xqXHJcbiAgICAgICAgICAgKGRvXHJcbiAgICAgICAgICAgIChwcmUtZmlsZS1zaWRlLWVmZmVjdHNcclxuICAgICAgICAgICAgICg6KmNvbXBpbGVyKiBib3VuZC12YXJzKVxyXG4gICAgICAgICAgICAgYW5hbWVcclxuICAgICAgICAgICAgIGZpbGVcclxuICAgICAgICAgICAgIG9wdHMpXHJcbiAgICAgICAgICAgIChldmFsLXN0cipcclxuICAgICAgICAgICAgIGJvdW5kLXZhcnNcclxuICAgICAgICAgICAgIHNvdXJjZVxyXG4gICAgICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgICAgKGFzc29jIG9wdHMgOmNsanMtZmlsZSBmaWxlKVxyXG4gICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICAgW3Jlc11cclxuICAgICAgICAgICAgICAocG9zdC1maWxlLXNpZGUtZWZmZWN0cyBmaWxlIG9wdHMpXHJcbiAgICAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICAgICg6ZXJyb3IgcmVzKVxyXG4gICAgICAgICAgICAgICAoY2IgcmVzKVxyXG4gICAgICAgICAgICAgICAoZG8gKHN3YXAhICpsb2FkZWQqIGNvbmogYW5hbWUpIChjYiB7OnZhbHVlIHRydWV9KSkpKSkpXHJcbiAgICAgICAgICAgOmpzXHJcbiAgICAgICAgICAgKHByb2Nlc3MtbWFjcm9zLWRlcHNcclxuICAgICAgICAgICAgYm91bmQtdmFyc1xyXG4gICAgICAgICAgICBjYWNoZVxyXG4gICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgW3Jlc11cclxuICAgICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAgICg6ZXJyb3IgcmVzKVxyXG4gICAgICAgICAgICAgIChjYiByZXMpXHJcbiAgICAgICAgICAgICAgKHByb2Nlc3MtbGlicy1kZXBzXHJcbiAgICAgICAgICAgICAgIGJvdW5kLXZhcnNcclxuICAgICAgICAgICAgICAgY2FjaGVcclxuICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgICAgIFtyZXNdXHJcbiAgICAgICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgICAgICAoOmVycm9yIHJlcylcclxuICAgICAgICAgICAgICAgICAoY2IgcmVzKVxyXG4gICAgICAgICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgICAgICAgW3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgKHRyeVxyXG4gICAgICAgICAgICAgICAgICAgICgoOipldmFsLWZuKiBib3VuZC12YXJzKSByZXNvdXJjZSlcclxuICAgICAgICAgICAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICAgICAgICAgICBjYWNoZVxyXG4gICAgICAgICAgICAgICAgICAgICAobG9hZC1hbmFseXNpcy1jYWNoZSFcclxuICAgICAgICAgICAgICAgICAgICAgICg6KmNvbXBpbGVyKiBib3VuZC12YXJzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgYW5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIGNhY2hlKVxyXG4gICAgICAgICAgICAgICAgICAgICAoYW5hL3JlZ2lzdGVyLXNwZWNzIGNhY2hlKSlcclxuICAgICAgICAgICAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICAgICAgICAgICBzb3VyY2UtbWFwXHJcbiAgICAgICAgICAgICAgICAgICAgIChsb2FkLXNvdXJjZS1tYXAhXHJcbiAgICAgICAgICAgICAgICAgICAgICAoOipjb21waWxlciogYm91bmQtdmFycylcclxuICAgICAgICAgICAgICAgICAgICAgIGFuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtbWFwKSlcclxuICAgICAgICAgICAgICAgICAgICAoY2F0Y2hcclxuICAgICAgICAgICAgICAgICAgICAgOmRlZmF1bHRcclxuICAgICAgICAgICAgICAgICAgICAgY2F1c2VcclxuICAgICAgICAgICAgICAgICAgICAgKHdyYXAtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgIChhbmEvZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICBlbnZcclxuICAgICAgICAgICAgICAgICAgICAgICAoc3RyIFwiQ291bGQgbm90IHJlcXVpcmUgXCIgbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXVzZSkpKSldXHJcbiAgICAgICAgICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAgICAgICAgKDplcnJvciByZXMpXHJcbiAgICAgICAgICAgICAgICAgICAoY2IgcmVzKVxyXG4gICAgICAgICAgICAgICAgICAgKGRvXHJcbiAgICAgICAgICAgICAgICAgICAgKHN3YXAhICpsb2FkZWQqIGNvbmogYW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgKGNiIHs6dmFsdWUgdHJ1ZX0pKSkpKSkpKSkpXHJcbiAgICAgICAgICAgKGNiXHJcbiAgICAgICAgICAgICh3cmFwLWVycm9yXHJcbiAgICAgICAgICAgICAoYW5hL2Vycm9yXHJcbiAgICAgICAgICAgICAgZW52XHJcbiAgICAgICAgICAgICAgKHN0clxyXG4gICAgICAgICAgICAgICBcIkludmFsaWQgOmxhbmcgc3BlY2lmaWVkIFwiXHJcbiAgICAgICAgICAgICAgIGxhbmdcclxuICAgICAgICAgICAgICAgXCIsIG9ubHkgOmNsaiBvciA6anMgYWxsb3dlZFwiKSkpKSkpXHJcbiAgICAgICAgIChjYlxyXG4gICAgICAgICAgKHdyYXAtZXJyb3JcclxuICAgICAgICAgICAoYW5hL2Vycm9yXHJcbiAgICAgICAgICAgIGVudlxyXG4gICAgICAgICAgICAoYW5hL2Vycm9yLW1lc3NhZ2VcclxuICAgICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAgICg6bWFjcm9zLW5zIG9wdHMpXHJcbiAgICAgICAgICAgICAgOnVuZGVjbGFyZWQtbWFjcm9zLW5zXHJcbiAgICAgICAgICAgICAgOnVuZGVjbGFyZWQtbnMpXHJcbiAgICAgICAgICAgICB7Om5zLXN5bSBuYW1lLCA6anMtcHJvdmlkZSAoY2xqcy5jb3JlL25hbWUgbmFtZSl9KSkpKSkpKVxyXG4gICAgICAoY2F0Y2hcclxuICAgICAgIDpkZWZhdWx0XHJcbiAgICAgICBjYXVzZVxyXG4gICAgICAgKGNiXHJcbiAgICAgICAgKHdyYXAtZXJyb3JcclxuICAgICAgICAgKGFuYS9lcnJvciBlbnYgKHN0ciBcIkNvdWxkIG5vdCByZXF1aXJlIFwiIG5hbWUpIGNhdXNlKSkpKSkpXHJcbiAgICAoY2Igezp2YWx1ZSB0cnVlfSkpKSkpXHJcbiJ9IHs6c3ltIGZpbGUtPm5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2ZpbGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaWxlLT5uc1xyXG4gW2ZpbGVdXHJcbiAobGV0XHJcbiAgW2xpYi1uYW1lIChzdWJzIChzdHJpbmcvcmVwbGFjZSBmaWxlIFwiL1wiIFwiLlwiKSAwICgtIChjb3VudCBmaWxlKSA1KSldXHJcbiAgKHN5bWJvbCAoZGVtdW5nZSBsaWItbmFtZSkpKSlcclxuIn0gezpzeW0gZXZhbC1zdHIsIDptZXRhIHs6ZG9jICJFdmFsdXRlIENsb2p1cmVTY3JpcHQgc291cmNlIGdpdmVuIGFzIGEgc3RyaW5nLiBUaGUgcGFyYW1ldGVyczpcblxuICBzdGF0ZSAoYXRvbSlcbiAgICB0aGUgY29tcGlsZXIgc3RhdGVcblxuICBzb3VyY2UgKHN0cmluZylcbiAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcblxuICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxuICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIC0gdXNlZCBhcyBrZXkgaW4gOnNvdXJjZS1tYXBzXG5cbiAgb3B0cyAobWFwKVxuICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cbiAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXG4gICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcbiAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXG4gICAgOmNhY2hlLXNvdXJjZSAgICAgLSBvcHRpb25hbCwgYSBmdW5jdGlvbiB0byBydW4gc2lkZS1lZmZlY3RzIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxhdGlvbiByZXN1bHQgcHJpb3IgdG8gYWN0dWFsIGV2YWx1dGlvbi4gVGhpcyBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZXMgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGlzIHRoZSBldmFsIG1hcCwgdGhlIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB1bmRlciA6c291cmNlLiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgb2ZcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBhcmd1bWVudC4gSWYgYW4gZXJyb3Igb2NjdXJzIGFuIDplcnJvciBrZXkgc2hvdWxkIGJlXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllZC5cbiAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cbiAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxuICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcbiAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxuICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cbiAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxuICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXG5cbiAgY2IgKGZ1bmN0aW9uKVxuICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2VzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXG4gICAgYSA6dmFsdWUga2V5IHdpdGggdGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uIGFuZCA6bnMgdGhlIGN1cnJlbnQgbmFtZXNwYWNlLlxuICAgIElmIHVuc3VjY2Vzc2Z1bCB3aWxsIGNvbnRhaW4gYSA6ZXJyb3Iga2V5IHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nXG4gICAgdGhlIGNhdXNlIG9mIGZhaWx1cmUuIiwgOmFyZ2xpc3RzIFtbc3RhdGUgc291cmNlIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXV19LCA6c291cmNlICIoZGVmblxyXG4gZXZhbC1zdHJcclxuIFwiRXZhbHV0ZSBDbG9qdXJlU2NyaXB0IHNvdXJjZSBnaXZlbiBhcyBhIHN0cmluZy4gVGhlIHBhcmFtZXRlcnM6XFxuXFxuICBzdGF0ZSAoYXRvbSlcXG4gICAgdGhlIGNvbXBpbGVyIHN0YXRlXFxuXFxuICBzb3VyY2UgKHN0cmluZylcXG4gICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXFxuXFxuICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxcbiAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAtIHVzZWQgYXMga2V5IGluIDpzb3VyY2UtbWFwc1xcblxcbiAgb3B0cyAobWFwKVxcbiAgICBjb21waWxhdGlvbiBvcHRpb25zLlxcblxcbiAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXFxuICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXFxuICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cXG4gICAgOmNhY2hlLXNvdXJjZSAgICAgLSBvcHRpb25hbCwgYSBmdW5jdGlvbiB0byBydW4gc2lkZS1lZmZlY3RzIHdpdGggdGhlXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gcmVzdWx0IHByaW9yIHRvIGFjdHVhbCBldmFsdXRpb24uIFRoaXMgZnVuY3Rpb25cXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlcyB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgaXMgdGhlIGV2YWwgbWFwLCB0aGUgc291cmNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB1bmRlciA6c291cmNlLiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgb2ZcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmUgYXJndW1lbnQuIElmIGFuIGVycm9yIG9jY3VycyBhbiA6ZXJyb3Iga2V5IHNob3VsZCBiZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVkLlxcbiAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXFxuICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxcbiAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXFxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcXG4gICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXFxuICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cXG4gICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cXG4gICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxcbiAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cXG4gICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXFxuICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxcblxcbiAgY2IgKGZ1bmN0aW9uKVxcbiAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxcbiAgICBhIDp2YWx1ZSBrZXkgd2l0aCB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpb24gYW5kIDpucyB0aGUgY3VycmVudCBuYW1lc3BhY2UuXFxuICAgIElmIHVuc3VjY2Vzc2Z1bCB3aWxsIGNvbnRhaW4gYSA6ZXJyb3Iga2V5IHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nXFxuICAgIHRoZSBjYXVzZSBvZiBmYWlsdXJlLlwiXHJcbiAoW3N0YXRlIHNvdXJjZSBjYl0gKGV2YWwtc3RyIHN0YXRlIHNvdXJjZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gKGV2YWwtc3RyIHN0YXRlIHNvdXJjZSBuYW1lIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXHJcbiAgezpwcmVcclxuICAgWyhhdG9tPyBzdGF0ZSlcclxuICAgIChzdHJpbmc/IHNvdXJjZSlcclxuICAgICh2YWxpZC1uYW1lPyBuYW1lKVxyXG4gICAgKHZhbGlkLW9wdHM/IG9wdHMpXHJcbiAgICAoZm4/IGNiKV19XHJcbiAgKGV2YWwtc3RyKlxyXG4gICB7Oipjb21waWxlciogc3RhdGUsXHJcbiAgICA6KmRhdGEtcmVhZGVycyogdGFncy8qY2xqcy1kYXRhLXJlYWRlcnMqLFxyXG4gICAgOiphbmFseXplLWRlcHMqICg6YW5hbHl6ZS1kZXBzIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmNsanMtZGVwLXNldCogYW5hLypjbGpzLWRlcC1zZXQqLFxyXG4gICAgOipsb2FkLW1hY3JvcyogKDpsb2FkLW1hY3JvcyBvcHRzIHRydWUpLFxyXG4gICAgOipsb2FkLWZuKiAob3IgKDpsb2FkIG9wdHMpICpsb2FkLWZuKiksXHJcbiAgICA6KmV2YWwtZm4qIChvciAoOmV2YWwgb3B0cykgKmV2YWwtZm4qKX1cclxuICAgc291cmNlXHJcbiAgIG5hbWVcclxuICAgb3B0c1xyXG4gICBjYikpKVxyXG4ifSB7OnN5bSBqcy1ldmFsLCA6bWV0YSB7OmRvYyAiQSBkZWZhdWx0IEphdmFTY3JpcHQgZXZhbHVhdGlvbiBmdW5jdGlvbi4iLCA6YXJnbGlzdHMgKFt7OmtleXMgW3NvdXJjZV0sIDphcyByZXNvdXJjZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1ldmFsXHJcbiBcIkEgZGVmYXVsdCBKYXZhU2NyaXB0IGV2YWx1YXRpb24gZnVuY3Rpb24uXCJcclxuIFt7OmtleXMgW3NvdXJjZV0sIDphcyByZXNvdXJjZX1dXHJcbiAoanMvZXZhbCBzb3VyY2UpKVxyXG4ifSB7OnN5bSBsb2FkLXNvdXJjZS1tYXAhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIG5zIHNtLWpzb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2FkLXNvdXJjZS1tYXAhXHJcbiBbc3RhdGUgbnMgc20tanNvbl1cclxuIChsZXRcclxuICBbc20gKHNtL2RlY29kZSAoLnBhcnNlIGpzL0pTT04gc20tanNvbikpXVxyXG4gIChzd2FwISBzdGF0ZSBhc3NvYy1pbiBbOnNvdXJjZS1tYXBzIG5zXSBzbSkpKVxyXG4ifSB7OnN5bSBsb2FkLWFuYWx5c2lzLWNhY2hlISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBucyBjYWNoZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvYWQtYW5hbHlzaXMtY2FjaGUhXHJcbiBbc3RhdGUgbnMgY2FjaGVdXHJcbiAoc3dhcCEgc3RhdGUgYXNzb2MtaW4gWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnNdIGNhY2hlKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zdHIsIDptZXRhIHs6ZG9jICJBbmFseXplIENsb2p1cmVTY3JpcHQgc291cmNlLiBUaGUgY29tcGlsZXIgc3RhdGUgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aFxuICAgdGhlIHJlc3VsdHMgb2YgYW5hbHl6ZXMuIFRoZSBwYXJhbWV0ZXJzOlxuXG4gICBzdGF0ZSAoYXRvbSlcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXG5cbiAgIHNvdXJjZSAoc3RyaW5nKVxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcblxuICAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcbiAgICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2VcblxuICAgb3B0cyAobWFwKVxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxuXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXG5cbiAgIGNiIChmdW5jdGlvbilcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXG4gICAgIGEga2V5IDp2YWx1ZSwgdGhlIGFjdHVhbCB2YWx1ZSBpcyBub3QgbWVhbmluZ2Z1bC4gSWYgdW5zdWNjZXNzZnVsIHRoZVxuICAgICBtYXAgd2lsbCBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2VcbiAgICAgb2YgZmFpbHVyZS4iLCA6YXJnbGlzdHMgW1tzdGF0ZSBzb3VyY2UgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXN0clxyXG4gXCJBbmFseXplIENsb2p1cmVTY3JpcHQgc291cmNlLiBUaGUgY29tcGlsZXIgc3RhdGUgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aFxcbiAgIHRoZSByZXN1bHRzIG9mIGFuYWx5emVzLiBUaGUgcGFyYW1ldGVyczpcXG5cXG4gICBzdGF0ZSAoYXRvbSlcXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxcblxcbiAgIHNvdXJjZSAoc3RyaW5nKVxcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXFxuXFxuICAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcXG4gICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlXFxuXFxuICAgb3B0cyAobWFwKVxcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cXG5cXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXFxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXFxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXFxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxcbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXFxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxcblxcbiAgIGNiIChmdW5jdGlvbilcXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxcbiAgICAgYSBrZXkgOnZhbHVlLCB0aGUgYWN0dWFsIHZhbHVlIGlzIG5vdCBtZWFuaW5nZnVsLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlXFxuICAgICBtYXAgd2lsbCBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2VcXG4gICAgIG9mIGZhaWx1cmUuXCJcclxuIChbc3RhdGUgc291cmNlIGNiXSAoYW5hbHl6ZS1zdHIgc3RhdGUgc291cmNlIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSAoYW5hbHl6ZS1zdHIgc3RhdGUgc291cmNlIG5hbWUgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1cclxuICB7OnByZVxyXG4gICBbKGF0b20/IHN0YXRlKVxyXG4gICAgKHN0cmluZz8gc291cmNlKVxyXG4gICAgKHZhbGlkLW5hbWU/IG5hbWUpXHJcbiAgICAodmFsaWQtb3B0cz8gb3B0cylcclxuICAgIChmbj8gY2IpXX1cclxuICAoYW5hbHl6ZS1zdHIqXHJcbiAgIHs6KmNvbXBpbGVyKiBzdGF0ZSxcclxuICAgIDoqZGF0YS1yZWFkZXJzKiB0YWdzLypjbGpzLWRhdGEtcmVhZGVycyosXHJcbiAgICA6KnBhc3NlcyogKG9yICg6cGFzc2VzIG9wdHMpIGFuYS8qcGFzc2VzKiksXHJcbiAgICA6KmFuYWx5emUtZGVwcyogKDphbmFseXplLWRlcHMgb3B0cyB0cnVlKSxcclxuICAgIDoqY2xqcy1kZXAtc2V0KiBhbmEvKmNsanMtZGVwLXNldCosXHJcbiAgICA6KmxvYWQtbWFjcm9zKiAoOmxvYWQtbWFjcm9zIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmxvYWQtZm4qIChvciAoOmxvYWQgb3B0cykgKmxvYWQtZm4qKSxcclxuICAgIDoqZXZhbC1mbiogKG9yICg6ZXZhbCBvcHRzKSAqZXZhbC1mbiopfVxyXG4gICBzb3VyY2VcclxuICAgbmFtZVxyXG4gICBvcHRzXHJcbiAgIGNiKSkpXHJcbiJ9IHs6c3ltICpldmFsLWZuKiwgOm1ldGEgezpkb2MgIkVhY2ggcnVudGltZSBlbnZpcm9ubWVudCBwcm92aWRlcyB2YXJpb3VzIHdheXMgdG8gZXZhbCBKYXZhU2NyaXB0XG4gIHNvdXJjZS4gV2hhdGV2ZXIgZnVuY3Rpb24gKmV2YWwtZm4qIGlzIGJvdW5kIHRvIHdpbGwgYmUgcGFzc2VkIGEgbWFwXG4gIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuXG4gIDpzb3VyY2UgLSB0aGUgc291cmNlIG9mIHRoZSBsaWJyYXJ5IChzdHJpbmcpXG4gIDpuYW1lICAgLSB1c2VkIHRvIHVuaXF1ZSBpZGVudGlmeSB0aGUgc2NyaXB0IChzeW1ib2wpXG4gIDpjYWNoZSAgLSBpZiB0aGUgc291cmNlIHdhcyBvcmlnaW5hbGx5IENsb2p1cmVTY3JpcHQsIHdpbGwgYmUgZ2l2ZW4gdGhlXG4gICAgICAgICAgICBhbmFseXNpcyBjYWNoZS5cblxuICBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpb24gc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpldmFsLWZuKiAoZm4gW21dICh0aHJvdyAoanMvRXJyb3IuIFwiTm8gKmV2YWwtZm4qIHNldFwiKSkpKVxyXG4ifSksIHJ1bS5jb3JlICh7OnN5bSBtb3VudCwgOm1ldGEgezpkb2MgIkFkZCBlbGVtZW50IHRvIHRoZSBET00gdHJlZS4gSWRlbXBvdGVudC4gU3Vic2VxdWVudCBtb3VudHMgd2lsbCBqdXN0IHVwZGF0ZSBlbGVtZW50LiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1vdW50XHJcbiBcIkFkZCBlbGVtZW50IHRvIHRoZSBET00gdHJlZS4gSWRlbXBvdGVudC4gU3Vic2VxdWVudCBtb3VudHMgd2lsbCBqdXN0IHVwZGF0ZSBlbGVtZW50LlwiXHJcbiBbZWxlbWVudCBub2RlXVxyXG4gKGpzL1JlYWN0RE9NLnJlbmRlciBlbGVtZW50IG5vZGUpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIHVubW91bnQsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGNvbXBvbmVudCBmcm9tIHRoZSBET00gdHJlZS4iLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5tb3VudFxyXG4gXCJSZW1vdmVzIGNvbXBvbmVudCBmcm9tIHRoZSBET00gdHJlZS5cIlxyXG4gW25vZGVdXHJcbiAoanMvUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSBub2RlKSlcclxuIn0gezpzeW0gbG9jYWwsIDptZXRhIHs6ZG9jICJNaXhpbiBjb25zdHJ1Y3Rvci4gQWRkcyBhbiBhdG9tIHRvIGNvbXBvbmVudOKAmXMgc3RhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBrZWVwIHN0dWZmIGR1cmluZyBjb21wb25lbnTigJlzIGxpZmVjeWNsZS4gQ29tcG9uZW50IHdpbGwgYmUgcmUtcmVuZGVyZWQgaWYgYXRvbeKAmXMgdmFsdWUgY2hhbmdlcy4gQXRvbSBpcyBzdG9yZWQgdW5kZXIgdXNlci1wcm92aWRlZCBrZXkgb3IgdW5kZXIgYDpydW0vbG9jYWxgIGJ5IGRlZmF1bHQuXG4gIFxuICAgYGBgXG4gICAocnVtL2RlZmNzIGNvdW50ZXIgPCAocnVtL2xvY2FsIDAgOmNudClcbiAgICAgW3N0YXRlIGxhYmVsXVxuICAgICAobGV0IFsqY250ICg6Y250IHN0YXRlKV1cbiAgICAgICBbOmRpdiB7Om9uLWNsaWNrIChmbiBbX10gKHN3YXAhICpjbnQgaW5jKSl9XG4gICAgICAgICBsYWJlbCBAKmNudF0pKVxuICAgXG4gICAocnVtL21vdW50IChjb3VudGVyIFwiQ2xpY2sgY291bnQ6IFwiKSlcbiAgIGBgYCIsIDphcmdsaXN0cyBbW2luaXRpYWxdIFtpbml0aWFsIGtleV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvY2FsXHJcbiBcIk1peGluIGNvbnN0cnVjdG9yLiBBZGRzIGFuIGF0b20gdG8gY29tcG9uZW504oCZcyBzdGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGtlZXAgc3R1ZmYgZHVyaW5nIGNvbXBvbmVudOKAmXMgbGlmZWN5Y2xlLiBDb21wb25lbnQgd2lsbCBiZSByZS1yZW5kZXJlZCBpZiBhdG9t4oCZcyB2YWx1ZSBjaGFuZ2VzLiBBdG9tIGlzIHN0b3JlZCB1bmRlciB1c2VyLXByb3ZpZGVkIGtleSBvciB1bmRlciBgOnJ1bS9sb2NhbGAgYnkgZGVmYXVsdC5cXG4gIFxcbiAgIGBgYFxcbiAgIChydW0vZGVmY3MgY291bnRlciA8IChydW0vbG9jYWwgMCA6Y250KVxcbiAgICAgW3N0YXRlIGxhYmVsXVxcbiAgICAgKGxldCBbKmNudCAoOmNudCBzdGF0ZSldXFxuICAgICAgIFs6ZGl2IHs6b24tY2xpY2sgKGZuIFtfXSAoc3dhcCEgKmNudCBpbmMpKX1cXG4gICAgICAgICBsYWJlbCBAKmNudF0pKVxcbiAgIFxcbiAgIChydW0vbW91bnQgKGNvdW50ZXIgXFxcIkNsaWNrIGNvdW50OiBcXFwiKSlcXG4gICBgYGBcIlxyXG4gKFtpbml0aWFsXSAobG9jYWwgaW5pdGlhbCA6cnVtL2xvY2FsKSlcclxuIChbaW5pdGlhbCBrZXldXHJcbiAgezp3aWxsLW1vdW50XHJcbiAgIChmblxyXG4gICAgW3N0YXRlXVxyXG4gICAgKGxldFxyXG4gICAgIFtsb2NhbC1zdGF0ZVxyXG4gICAgICAoYXRvbSBpbml0aWFsKVxyXG4gICAgICBjb21wb25lbnRcclxuICAgICAgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKV1cclxuICAgICAoYWRkLXdhdGNoXHJcbiAgICAgIGxvY2FsLXN0YXRlXHJcbiAgICAgIGtleVxyXG4gICAgICAoZm4gW18gXyBfIF9dIChyZXF1ZXN0LXJlbmRlciBjb21wb25lbnQpKSlcclxuICAgICAoYXNzb2Mgc3RhdGUga2V5IGxvY2FsLXN0YXRlKSkpfSkpXHJcbiJ9IHs6c3ltIHJlYWN0aXZlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gcmVhY3RpdmVcclxuIFwiTWl4aW4uIFdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggW1tyZWFjdF1dLlxcbiAgXFxuICAgYGBgXFxuICAgKHJ1bS9kZWZjIGNvbXAgPCBydW0vcmVhY3RpdmVcXG4gICAgIFsqY291bnRlcl1cXG4gICAgIFs6ZGl2IChydW0vcmVhY3QgY291bnRlcildKVxcblxcbiAgIChkZWYgKmNvdW50ZXIgKGF0b20gMCkpXFxuICAgKHJ1bS9tb3VudCAoY29tcCAqY291bnRlcikganMvZG9jdW1lbnQuYm9keSlcXG4gICAoc3dhcCEgKmNvdW50ZXIgaW5jKSA7OyB3aWxsIGZvcmNlIGNvbXAgdG8gcmUtcmVuZGVyXFxuICAgYGBgXCJcclxuIHs6aW5pdFxyXG4gIChmbiBbc3RhdGUgcHJvcHNdIChhc3NvYyBzdGF0ZSA6cnVtLnJlYWN0aXZlL2tleSAocmFuZG9tLXV1aWQpKSksXHJcbiAgOndyYXAtcmVuZGVyXHJcbiAgKGZuXHJcbiAgIFtyZW5kZXItZm5dXHJcbiAgIChmblxyXG4gICAgW3N0YXRlXVxyXG4gICAgKGJpbmRpbmdcclxuICAgICBbKnJlYWN0aW9ucyogKHZvbGF0aWxlISAje30pXVxyXG4gICAgIChsZXRcclxuICAgICAgW2NvbXBcclxuICAgICAgICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSlcclxuICAgICAgIG9sZC1yZWFjdGlvbnNcclxuICAgICAgICg6cnVtLnJlYWN0aXZlL3JlZnMgc3RhdGUgI3t9KVxyXG4gICAgICAgW2RvbSBuZXh0LXN0YXRlXVxyXG4gICAgICAgKHJlbmRlci1mbiBzdGF0ZSlcclxuICAgICAgIG5ldy1yZWFjdGlvbnNcclxuICAgICAgIEAqcmVhY3Rpb25zKlxyXG4gICAgICAga2V5XHJcbiAgICAgICAoOnJ1bS5yZWFjdGl2ZS9rZXkgc3RhdGUpXVxyXG4gICAgICAoZG9zZXFcclxuICAgICAgIFtyZWYgb2xkLXJlYWN0aW9uc11cclxuICAgICAgICh3aGVuLW5vdCAoY29udGFpbnM/IG5ldy1yZWFjdGlvbnMgcmVmKSAocmVtb3ZlLXdhdGNoIHJlZiBrZXkpKSlcclxuICAgICAgKGRvc2VxXHJcbiAgICAgICBbcmVmIG5ldy1yZWFjdGlvbnNdXHJcbiAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAoY29udGFpbnM/IG9sZC1yZWFjdGlvbnMgcmVmKVxyXG4gICAgICAgIChhZGQtd2F0Y2ggcmVmIGtleSAoZm4gW18gXyBfIF9dIChyZXF1ZXN0LXJlbmRlciBjb21wKSkpKSlcclxuICAgICAgW2RvbSAoYXNzb2MgbmV4dC1zdGF0ZSA6cnVtLnJlYWN0aXZlL3JlZnMgbmV3LXJlYWN0aW9ucyldKSkpKSxcclxuICA6d2lsbC11bm1vdW50XHJcbiAgKGZuXHJcbiAgIFtzdGF0ZV1cclxuICAgKGxldFxyXG4gICAgW2tleSAoOnJ1bS5yZWFjdGl2ZS9rZXkgc3RhdGUpXVxyXG4gICAgKGRvc2VxIFtyZWYgKDpydW0ucmVhY3RpdmUvcmVmcyBzdGF0ZSldIChyZW1vdmUtd2F0Y2ggcmVmIGtleSkpKVxyXG4gICAoZGlzc29jIHN0YXRlIDpydW0ucmVhY3RpdmUvcmVmcyA6cnVtLnJlYWN0aXZlL2tleSkpfSlcclxuIn0gezpzeW0gcmVmLW5vZGUsIDptZXRhIHs6ZG9jICJHaXZlbiBzdGF0ZSBhbmQgcmVmIGhhbmRsZSwgcmV0dXJucyBET00gbm9kZSBhc3NvY2lhdGVkIHdpdGggcmVmLiIsIDphcmdsaXN0cyAoW3N0YXRlIGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZi1ub2RlXHJcbiBcIkdpdmVuIHN0YXRlIGFuZCByZWYgaGFuZGxlLCByZXR1cm5zIERPTSBub2RlIGFzc29jaWF0ZWQgd2l0aCByZWYuXCJcclxuIFtzdGF0ZSBrZXldXHJcbiAoanMvUmVhY3RET00uZmluZERPTU5vZGUgKHJlZiBzdGF0ZSAobmFtZSBrZXkpKSkpXHJcbiJ9IHs6c3ltIHJlYWN0LCA6bWV0YSB7OmRvYyAiV29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBbW3JlYWN0aXZlXV0gbWl4aW4uIFVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgYGRlcmVmYCBpbnNpZGUgcmVuZGVyLCBhbmQgeW91ciBjb21wb25lbnQgd2lsbCBzdWJzY3JpYmUgdG8gY2hhbmdlcyBoYXBwZW5pbmcgdG8gdGhlIGRlcmVmZWQgYXRvbS4iLCA6YXJnbGlzdHMgKFtyZWZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFjdFxyXG4gXCJXb3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIFtbcmVhY3RpdmVdXSBtaXhpbi4gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBgZGVyZWZgIGluc2lkZSByZW5kZXIsIGFuZCB5b3VyIGNvbXBvbmVudCB3aWxsIHN1YnNjcmliZSB0byBjaGFuZ2VzIGhhcHBlbmluZyB0byB0aGUgZGVyZWZlZCBhdG9tLlwiXHJcbiBbcmVmXVxyXG4gKGFzc2VydFxyXG4gICpyZWFjdGlvbnMqXHJcbiAgXCJydW0uY29yZS9yZWFjdCBpcyBvbmx5IHN1cHBvcnRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJ1bS5jb3JlL3JlYWN0aXZlXCIpXHJcbiAodnN3YXAhICpyZWFjdGlvbnMqIGNvbmogcmVmKVxyXG4gQHJlZilcclxuIn0gezpzeW0gcmVxdWVzdC1yZW5kZXIsIDptZXRhIHs6ZG9jICJTY2hlZHVsZXMgcmVhY3QgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIG9uIG5leHQgYW5pbWF0aW9uIGZyYW1lLiIsIDphcmdsaXN0cyAoW2NvbXBvbmVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcXVlc3QtcmVuZGVyXHJcbiBcIlNjaGVkdWxlcyByZWFjdCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgb24gbmV4dCBhbmltYXRpb24gZnJhbWUuXCJcclxuIFtjb21wb25lbnRdXHJcbiAod2hlbiAoZW1wdHk/IEByZW5kZXItcXVldWUpIChzY2hlZHVsZSByZW5kZXIpKVxyXG4gKHZzd2FwISByZW5kZXItcXVldWUgY29uaiBjb21wb25lbnQpKVxyXG4ifSB7OnN5bSBwb3J0YWwsIDptZXRhIHs6ZG9jICJSZW5kZXIgYGVsZW1lbnRgIGluIGEgRE9NIGBub2RlYCB0aGF0IGlzIG91c2lkZSBvZiBjdXJyZW50IERPTSBoaWVyYXJjaHkuIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9ydGFsXHJcbiBcIlJlbmRlciBgZWxlbWVudGAgaW4gYSBET00gYG5vZGVgIHRoYXQgaXMgb3VzaWRlIG9mIGN1cnJlbnQgRE9NIGhpZXJhcmNoeS5cIlxyXG4gW2VsZW1lbnQgbm9kZV1cclxuIChqcy9SZWFjdERPTS5jcmVhdGVQb3J0YWwgZWxlbWVudCBub2RlKSlcclxuIn0gezpzeW0gd2l0aC1rZXksIDptZXRhIHs6ZG9jICJBZGRzIFJlYWN0IGtleSB0byBlbGVtZW50LlxuICAgXG4gICBgYGBcbiAgIChydW0vZGVmYyBsYWJlbCBbdGV4dF0gWzpkaXYgdGV4dF0pXG5cbiAgICgtPiAobGFiZWwpXG4gICAgICAgKHJ1bS93aXRoLWtleSBcImFiY1wiKVxuICAgICAgIChydW0vbW91bnQganMvZG9jdW1lbnQuYm9keSkpXG4gICBgYGAiLCA6YXJnbGlzdHMgKFtlbGVtZW50IGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdpdGgta2V5XHJcbiBcIkFkZHMgUmVhY3Qga2V5IHRvIGVsZW1lbnQuXFxuICAgXFxuICAgYGBgXFxuICAgKHJ1bS9kZWZjIGxhYmVsIFt0ZXh0XSBbOmRpdiB0ZXh0XSlcXG5cXG4gICAoLT4gKGxhYmVsKVxcbiAgICAgICAocnVtL3dpdGgta2V5IFxcXCJhYmNcXFwiKVxcbiAgICAgICAocnVtL21vdW50IGpzL2RvY3VtZW50LmJvZHkpKVxcbiAgIGBgYFwiXHJcbiBbZWxlbWVudCBrZXldXHJcbiAoanMvUmVhY3QuY2xvbmVFbGVtZW50IGVsZW1lbnQgI2pzIHtcImtleVwiIGtleX0gbmlsKSlcclxuIn0gezpzeW0gYnVpbGQtZGVmY3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJ1aWxkLWRlZmNzXHJcbiBbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV1cclxuIChsZXRcclxuICBbcmVuZGVyXHJcbiAgIChmbiBbc3RhdGVdIFsoYXBwbHkgcmVuZGVyLWJvZHkgc3RhdGUgKDpydW0vYXJncyBzdGF0ZSkpIHN0YXRlXSldXHJcbiAgKGJ1aWxkLWN0b3IgcmVuZGVyIG1peGlucyBkaXNwbGF5LW5hbWUpKSlcclxuIn0gezpzeW0gcmVmLCA6bWV0YSB7OmRvYyAiR2l2ZW4gc3RhdGUgYW5kIHJlZiBoYW5kbGUsIHJldHVybnMgUmVhY3QgY29tcG9uZW50LiIsIDphcmdsaXN0cyAoW3N0YXRlIGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZlxyXG4gXCJHaXZlbiBzdGF0ZSBhbmQgcmVmIGhhbmRsZSwgcmV0dXJucyBSZWFjdCBjb21wb25lbnQuXCJcclxuIFtzdGF0ZSBrZXldXHJcbiAoLT4gc3RhdGUgOnJ1bS9yZWFjdC1jb21wb25lbnQgKGFnZXQgXCJyZWZzXCIpIChhZ2V0IChuYW1lIGtleSkpKSlcclxuIn0gezpzeW0gc3RhdGljLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gc3RhdGljXHJcbiBcIk1peGluLiBXaWxsIGF2b2lkIHJlLXJlbmRlciBpZiBub25lIG9mIGNvbXBvbmVudOKAmXMgYXJndW1lbnRzIGhhdmUgY2hhbmdlZC4gRG9lcyBlcXVhbGl0eSBjaGVjayAoYD1gKSBvbiBhbGwgYXJndW1lbnRzLlxcbiAgXFxuICAgYGBgXFxuICAgKHJ1bS9kZWZjIGxhYmVsIDwgcnVtL3N0YXRpY1xcbiAgICAgW3RleHRdXFxuICAgICBbOmRpdiB0ZXh0XSlcXG4gICAgIFxcbiAgIChydW0vbW91bnQgKGxhYmVsIFxcXCJhYmNcXFwiKSBqcy9kb2N1bWVudC5ib2R5KVxcblxcbiAgIDs7IGRlZiAhPSBhYmMsIHdpbGwgcmUtcmVuZGVyXFxuICAgKHJ1bS9tb3VudCAobGFiZWwgXFxcImRlZlxcXCIpIGpzL2RvY3VtZW50LmJvZHkpXFxuXFxuICAgOzsgZGVmID09IGRlZiwgd29u4oCZdCByZS1yZW5kZXJcXG4gICAocnVtL21vdW50IChsYWJlbCBcXFwiZGVmXFxcIikganMvZG9jdW1lbnQuYm9keSlcXG4gICBgYGBcIlxyXG4gezpzaG91bGQtdXBkYXRlXHJcbiAgKGZuXHJcbiAgIFtvbGQtc3RhdGUgbmV3LXN0YXRlXVxyXG4gICAobm90PSAoOnJ1bS9hcmdzIG9sZC1zdGF0ZSkgKDpydW0vYXJncyBuZXctc3RhdGUpKSl9KVxyXG4ifSB7OnN5bSBjdXJzb3IsIDptZXRhIHs6ZG9jICJTYW1lIGFzIFtbY3Vyc29yLWluXV0gYnV0IGFjY2VwdHMgc2luZ2xlIGtleSBpbnN0ZWFkIG9mIHBhdGggdmVjdG9yLiIsIDphcmdsaXN0cyAoW3JlZiBrZXkgJiBvcHRpb25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3Vyc29yXHJcbiBcIlNhbWUgYXMgW1tjdXJzb3ItaW5dXSBidXQgYWNjZXB0cyBzaW5nbGUga2V5IGluc3RlYWQgb2YgcGF0aCB2ZWN0b3IuXCJcclxuIFtyZWYga2V5ICYgb3B0aW9uc11cclxuIChhcHBseSBjdXJzb3ItaW4gcmVmIFtrZXldIG9wdGlvbnMpKVxyXG4ifSB7OnN5bSBzdGF0ZSwgOm1ldGEgezpkb2MgIkdpdmVuIFJlYWN0IGNvbXBvbmVudCwgcmV0dXJucyBSdW0gc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGl0LiIsIDphcmdsaXN0cyAoW2NvbXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdGF0ZVxyXG4gXCJHaXZlbiBSZWFjdCBjb21wb25lbnQsIHJldHVybnMgUnVtIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBpdC5cIlxyXG4gW2NvbXBdXHJcbiAoZ29iai9nZXQgKC4tc3RhdGUgY29tcCkgXCI6cnVtL3N0YXRlXCIpKVxyXG4ifSB7OnN5bSBjdXJzb3ItaW4sIDptZXRhIHs6ZG9jICJHaXZlbiBhdG9tIHdpdGggZGVlcCBuZXN0ZWQgdmFsdWUgYW5kIHBhdGggaW5zaWRlIGl0LCBjcmVhdGVzIGFuIGF0b20tbGlrZSBzdHJ1Y3R1cmVcbiAgIHRoYXQgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBmcm9tIG1haW4gYXRvbSwgYnV0IHdpbGwgc3luYyBjaGFuZ2VzIGJvdGggd2F5czpcbiAgXG4gICBgYGBcbiAgIChkZWYgZGIgKGF0b20geyA6dXNlcnMgeyBcIkl2YW5cIiB7IDphZ2UgMzAgfX19KSlcbiAgIFxuICAgKGRlZiBpdmFuIChydW0vY3Vyc29yIGRiIFs6dXNlcnMgXCJJdmFuXCJdKSlcbiAgIChkZXJlZiBpdmFuKSA7OyA9PiB7IDphZ2UgMzAgfVxuICAgXG4gICAoc3dhcCEgaXZhbiB1cGRhdGUgOmFnZSBpbmMpIDs7ID0+IHsgOmFnZSAzMSB9XG4gICAoZGVyZWYgZGIpIDs7ID0+IHsgOnVzZXJzIHsgXCJJdmFuXCIgeyA6YWdlIDMxIH19fVxuICAgXG4gICAoc3dhcCEgZGIgdXBkYXRlLWluIFs6dXNlcnMgXCJJdmFuXCIgOmFnZV0gaW5jKVxuICAgOzsgPT4geyA6dXNlcnMgeyBcIkl2YW5cIiB7IDphZ2UgMzIgfX19XG4gICBcbiAgIChkZXJlZiBpdmFuKSA7OyA9PiB7IDphZ2UgMzIgfVxuICAgYGBgXG4gIFxuICAgUmV0dXJuZWQgdmFsdWUgc3VwcG9ydHMgYGRlcmVmYCwgYHN3YXAhYCwgYHJlc2V0IWAsIHdhdGNoZXMgYW5kIG1ldGFkYXRhLlxuICBcbiAgIFRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gaXMgYDptZXRhYCIsIDphcmdsaXN0cyAoW3JlZiBwYXRoICYgezphcyBvcHRpb25zfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGN1cnNvci1pblxyXG4gXCJHaXZlbiBhdG9tIHdpdGggZGVlcCBuZXN0ZWQgdmFsdWUgYW5kIHBhdGggaW5zaWRlIGl0LCBjcmVhdGVzIGFuIGF0b20tbGlrZSBzdHJ1Y3R1cmVcXG4gICB0aGF0IGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgZnJvbSBtYWluIGF0b20sIGJ1dCB3aWxsIHN5bmMgY2hhbmdlcyBib3RoIHdheXM6XFxuICBcXG4gICBgYGBcXG4gICAoZGVmIGRiIChhdG9tIHsgOnVzZXJzIHsgXFxcIkl2YW5cXFwiIHsgOmFnZSAzMCB9fX0pKVxcbiAgIFxcbiAgIChkZWYgaXZhbiAocnVtL2N1cnNvciBkYiBbOnVzZXJzIFxcXCJJdmFuXFxcIl0pKVxcbiAgIChkZXJlZiBpdmFuKSA7OyA9PiB7IDphZ2UgMzAgfVxcbiAgIFxcbiAgIChzd2FwISBpdmFuIHVwZGF0ZSA6YWdlIGluYykgOzsgPT4geyA6YWdlIDMxIH1cXG4gICAoZGVyZWYgZGIpIDs7ID0+IHsgOnVzZXJzIHsgXFxcIkl2YW5cXFwiIHsgOmFnZSAzMSB9fX1cXG4gICBcXG4gICAoc3dhcCEgZGIgdXBkYXRlLWluIFs6dXNlcnMgXFxcIkl2YW5cXFwiIDphZ2VdIGluYylcXG4gICA7OyA9PiB7IDp1c2VycyB7IFxcXCJJdmFuXFxcIiB7IDphZ2UgMzIgfX19XFxuICAgXFxuICAgKGRlcmVmIGl2YW4pIDs7ID0+IHsgOmFnZSAzMiB9XFxuICAgYGBgXFxuICBcXG4gICBSZXR1cm5lZCB2YWx1ZSBzdXBwb3J0cyBgZGVyZWZgLCBgc3dhcCFgLCBgcmVzZXQhYCwgd2F0Y2hlcyBhbmQgbWV0YWRhdGEuXFxuICBcXG4gICBUaGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGlzIGA6bWV0YWBcIlxyXG4gW3JlZiBwYXRoICYgezphcyBvcHRpb25zfV1cclxuIChpZlxyXG4gIChpbnN0YW5jZT8gY3Vyc29yL0N1cnNvciByZWYpXHJcbiAgKGN1cnNvci9DdXJzb3IuICguLXJlZiByZWYpIChpbnRvICguLXBhdGggcmVmKSBwYXRoKSAoOm1ldGEgb3B0aW9ucykpXHJcbiAgKGN1cnNvci9DdXJzb3IuIHJlZiBwYXRoICg6bWV0YSBvcHRpb25zKSkpKVxyXG4ifSB7OnN5bSBkb20tbm9kZSwgOm1ldGEgezpkb2MgIkdpdmVuIHN0YXRlLCByZXR1cm5zIHRvcC1sZXZlbCBET00gbm9kZSBvZiBjb21wb25lbnQuIENhbGwgaXQgZHVyaW5nIGxpZmVjeWNsZSBjYWxsYmFja3MuIENhbuKAmXQgYmUgY2FsbGVkIGR1cmluZyByZW5kZXIuIiwgOmFyZ2xpc3RzIChbc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb20tbm9kZVxyXG4gXCJHaXZlbiBzdGF0ZSwgcmV0dXJucyB0b3AtbGV2ZWwgRE9NIG5vZGUgb2YgY29tcG9uZW50LiBDYWxsIGl0IGR1cmluZyBsaWZlY3ljbGUgY2FsbGJhY2tzLiBDYW7igJl0IGJlIGNhbGxlZCBkdXJpbmcgcmVuZGVyLlwiXHJcbiBbc3RhdGVdXHJcbiAoanMvUmVhY3RET00uZmluZERPTU5vZGUgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKSkpXHJcbiJ9IHs6c3ltIHdpdGgtcmVmLCA6bWV0YSB7OmRvYyAiQWRkcyBSZWFjdCByZWYgKHN0cmluZyBvciBjYWxsYmFjaykgdG8gZWxlbWVudC5cbiAgIFxuICAgYGBgXG4gICAocnVtL2RlZmMgbGFiZWwgW3RleHRdIFs6ZGl2IHRleHRdKVxuXG4gICAoLT4gKGxhYmVsKVxuICAgICAgIChydW0vd2l0aC1yZWYgXCJhYmNcIilcbiAgICAgICAocnVtL21vdW50IGpzL2RvY3VtZW50LmJvZHkpKVxuICAgYGBgIiwgOmFyZ2xpc3RzIChbZWxlbWVudCByZWZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aXRoLXJlZlxyXG4gXCJBZGRzIFJlYWN0IHJlZiAoc3RyaW5nIG9yIGNhbGxiYWNrKSB0byBlbGVtZW50LlxcbiAgIFxcbiAgIGBgYFxcbiAgIChydW0vZGVmYyBsYWJlbCBbdGV4dF0gWzpkaXYgdGV4dF0pXFxuXFxuICAgKC0+IChsYWJlbClcXG4gICAgICAgKHJ1bS93aXRoLXJlZiBcXFwiYWJjXFxcIilcXG4gICAgICAgKHJ1bS9tb3VudCBqcy9kb2N1bWVudC5ib2R5KSlcXG4gICBgYGBcIlxyXG4gW2VsZW1lbnQgcmVmXVxyXG4gKGpzL1JlYWN0LmNsb25lRWxlbWVudCBlbGVtZW50ICNqcyB7XCJyZWZcIiByZWZ9IG5pbCkpXHJcbiJ9IHs6c3ltIGJ1aWxkLWRlZmMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJ1aWxkLWRlZmNcclxuIFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXVxyXG4gKGlmXHJcbiAgKGVtcHR5PyBtaXhpbnMpXHJcbiAgKGxldFxyXG4gICBbY2xhc3NcclxuICAgIChmbiBbcHJvcHNdIChhcHBseSByZW5kZXItYm9keSAoYWdldCBwcm9wcyBcIjpydW0vYXJnc1wiKSkpXHJcbiAgICBfXHJcbiAgICAoYXNldCBjbGFzcyBcImRpc3BsYXlOYW1lXCIgZGlzcGxheS1uYW1lKVxyXG4gICAgY3RvclxyXG4gICAgKGZuXHJcbiAgICAgWyYgYXJnc11cclxuICAgICAoanMvUmVhY3QuY3JlYXRlRWxlbWVudCBjbGFzcyAjanMge1wiOnJ1bS9hcmdzXCIgYXJnc30pKV1cclxuICAgKHdpdGgtbWV0YSBjdG9yIHs6cnVtL2NsYXNzIGNsYXNzfSkpXHJcbiAgKGxldFxyXG4gICBbcmVuZGVyIChmbiBbc3RhdGVdIFsoYXBwbHkgcmVuZGVyLWJvZHkgKDpydW0vYXJncyBzdGF0ZSkpIHN0YXRlXSldXHJcbiAgIChidWlsZC1jdG9yIHJlbmRlciBtaXhpbnMgZGlzcGxheS1uYW1lKSkpKVxyXG4ifSB7OnN5bSBoeWRyYXRlLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBbW21vdW50XV0gYnV0IG11c3QgYmUgY2FsbGVkIG9uIERPTSB0cmVlIGFscmVhZHkgcmVuZGVyZWQgYnkgYSBzZXJ2ZXIgdmlhIFtbcmVuZGVyLWh0bWxdXS4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IG5vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoeWRyYXRlXHJcbiBcIlNhbWUgYXMgW1ttb3VudF1dIGJ1dCBtdXN0IGJlIGNhbGxlZCBvbiBET00gdHJlZSBhbHJlYWR5IHJlbmRlcmVkIGJ5IGEgc2VydmVyIHZpYSBbW3JlbmRlci1odG1sXV0uXCJcclxuIFtlbGVtZW50IG5vZGVdXHJcbiAoanMvUmVhY3RET00uaHlkcmF0ZSBlbGVtZW50IG5vZGUpKVxyXG4ifSB7OnN5bSBidWlsZC1kZWZjYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gYnVpbGQtZGVmY2NcclxuIFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXVxyXG4gKGxldFxyXG4gIFtyZW5kZXJcclxuICAgKGZuXHJcbiAgICBbc3RhdGVdXHJcbiAgICBbKGFwcGx5IHJlbmRlci1ib2R5ICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSkgKDpydW0vYXJncyBzdGF0ZSkpXHJcbiAgICAgc3RhdGVdKV1cclxuICAoYnVpbGQtY3RvciByZW5kZXIgbWl4aW5zIGRpc3BsYXktbmFtZSkpKVxyXG4ifSB7OnN5bSBkZXJpdmVkLWF0b20sIDptZXRhIHs6YXJnbGlzdHMgKHF1b3RlIChbcmVmcyBrZXkgZl0gW3JlZnMga2V5IGYgb3B0c10pKSwgOmRvYyAiVXNlIHRoaXMgdG8gY3JlYXRlIOKAnGNoYWluc+KAnSBhbmQgYWN5Y2xpYyBncmFwaHMgb2YgZGVwZW5kZW50IGF0b21zLlxuICAgXG4gICAgICAgICAgICAgW1tkZXJpdmVkLWF0b21dXSB3aWxsOlxuICAgICAgICAgIFxuICAgICAgICAgICAgIC0gVGFrZSBOIOKAnHNvdXJjZeKAnSByZWZzLlxuICAgICAgICAgICAgIC0gU2V0IHVwIGEgd2F0Y2ggb24gZWFjaCBvZiB0aGVtLlxuICAgICAgICAgICAgIC0gQ3JlYXRlIOKAnHNpbmvigJ0gYXRvbS5cbiAgICAgICAgICAgICAtIFdoZW4gYW55IG9mIHNvdXJjZSByZWZzIGNoYW5nZXM6XG4gICAgICAgICAgICAgICAgLSByZS1ydW4gZnVuY3Rpb24gYGZgLCBwYXNzaW5nIE4gZGVyZWZlcmVuY2VkIHZhbHVlcyBvZiBzb3VyY2UgcmVmcy5cbiAgICAgICAgICAgICAgICAtIGByZXNldCFgIHJlc3VsdCBvZiBgZmAgdG8gdGhlIHNpbmsgYXRvbS5cbiAgICAgICAgICAgICAtIFJldHVybiBzaW5rIGF0b20uXG5cbiAgICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAgYGBgXG4gICAgICAgICAgICAgKGRlZiAqYSAoYXRvbSAwKSlcbiAgICAgICAgICAgICAoZGVmICpiIChhdG9tIDEpKVxuICAgICAgICAgICAgIChkZWYgKnggKGRlcml2ZWQtYXRvbSBbKmEgKmJdIDo6a2V5XG4gICAgICAgICAgICAgICAgICAgICAgIChmbiBbYSBiXVxuICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIgYSBcIjpcIiBiKSkpKVxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICh0eXBlICp4KSAgOzsgPT4gY2xvanVyZS5sYW5nLkF0b21cbiAgICAgICAgICAgICAoZGVyZWYgKngpIDs7ID0+IFwiMDoxXCJcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAoc3dhcCEgKmEgaW5jKVxuICAgICAgICAgICAgIChkZXJlZiAqeCkgOzsgPT4gXCIxOjFcIlxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgIChyZXNldCEgKmIgNylcbiAgICAgICAgICAgICAoZGVyZWYgKngpIDs7ID0+IFwiMTo3XCJcbiAgICAgICAgICAgICBgYGBcblxuICAgICAgICAgICAgIEFyZ3VtZW50czpcbiAgICAgICAgICBcbiAgICAgICAgICAgICAtIGByZWZzYCAtIHNlcXVlbmNlIG9mIHNvdXJjZSByZWZzLFxuICAgICAgICAgICAgIC0gYGtleWAgIC0gdW5pcXVlIGtleSB0byByZWdpc3RlciB3YXRjaGVyLCBzYW1lIGFzIGluIGBjbG9qdXJlLmNvcmUvYWRkLXdhdGNoYCxcbiAgICAgICAgICAgICAtIGBmYCAgICAtIGZ1bmN0aW9uIHRoYXQgbXVzdCBhY2NlcHQgTiBhcmd1bWVudHMgKHNhbWUgYXMgbnVtYmVyIG9mIHNvdXJjZSByZWZzKSBhbmQgcmV0dXJuIGEgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2luayByZWYuIE5vdGU6IGBmYCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFscmVhZHkgZGVyZWZlcmVuY2VkIHZhbHVlcyxcbiAgICAgICAgICAgICAtIGBvcHRzYCAtIG9wdGlvbmFsLiBNYXAgb2Y6XG4gICAgICAgICAgICAgICAtIGA6cmVmYCAtIHVzZSB0aGlzIGFzIHNpbmsgcmVmLiBCeSBkZWZhdWx0IGNyZWF0ZXMgbmV3IGF0b20sXG4gICAgICAgICAgICAgICAtIGA6Y2hlY2stZXF1YWxzP2AgLSBEZWZhdWx0cyB0byBgdHJ1ZWAuIElmIGVxdWFsaXR5IGNoZWNrIHNob3VsZCBiZSBydW4gb24gZWFjaCBzb3VyY2UgdXBkYXRlOiBgKD0gQHNpbmsgKGYgbmV3LXZhbHMpKWAuIFdoZW4gcmVzdWx0IG9mIHJlY2FsY3VsYXRpbmcgYGZgIGVxdWFscyB0byB0aGUgb2xkIHZhbHVlLCBgcmVzZXQhYCB3b27igJl0IGJlIGNhbGxlZC4gU2V0IHRvIGBmYWxzZWAgaWYgY2hlY2tpbmcgZm9yIGVxdWFsaXR5IGNhbiBiZSBleHBlbnNpdmUuIn0sIDpzb3VyY2UgIihkZWYgZGVyaXZlZC1hdG9tIGRlcml2ZWQtYXRvbS9kZXJpdmVkLWF0b20pXHJcbiJ9KSwgY2xqcy5jb3JlICh7OnN5bSBqcy0+Y2xqLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBKYXZhU2NyaXB0IGFycmF5cyBpbnRvIENsb2p1cmVTY3JpcHRcbiAgdmVjdG9ycywgYW5kIEphdmFTY3JpcHQgb2JqZWN0cyBpbnRvIENsb2p1cmVTY3JpcHQgbWFwcy4gIFdpdGhcbiAgb3B0aW9uICc6a2V5d29yZGl6ZS1rZXlzIHRydWUnIHdpbGwgY29udmVydCBvYmplY3QgZmllbGRzIGZyb21cbiAgc3RyaW5ncyB0byBrZXl3b3Jkcy4iLCA6YXJnbGlzdHMgW1t4XSBbeCAmIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy0+Y2xqXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgSmF2YVNjcmlwdCBhcnJheXMgaW50byBDbG9qdXJlU2NyaXB0XFxuICB2ZWN0b3JzLCBhbmQgSmF2YVNjcmlwdCBvYmplY3RzIGludG8gQ2xvanVyZVNjcmlwdCBtYXBzLiAgV2l0aFxcbiAgb3B0aW9uICc6a2V5d29yZGl6ZS1rZXlzIHRydWUnIHdpbGwgY29udmVydCBvYmplY3QgZmllbGRzIGZyb21cXG4gIHN0cmluZ3MgdG8ga2V5d29yZHMuXCJcclxuIChbeF0gKGpzLT5jbGogeCA6a2V5d29yZGl6ZS1rZXlzIGZhbHNlKSlcclxuIChbeCAmIG9wdHNdXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtrZXl3b3JkaXplLWtleXNdfVxyXG4gICAgb3B0c1xyXG4gICAga2V5Zm5cclxuICAgIChpZiBrZXl3b3JkaXplLWtleXMga2V5d29yZCBzdHIpXHJcbiAgICBmXHJcbiAgICAoZm5cclxuICAgICB0aGlzZm5cclxuICAgICBbeF1cclxuICAgICAoY29uZFxyXG4gICAgICAoc2F0aXNmaWVzPyBJRW5jb2RlQ2xvanVyZSB4KVxyXG4gICAgICAoLWpzLT5jbGogeCAoYXBwbHkgYXJyYXktbWFwIG9wdHMpKVxyXG4gICAgICAoc2VxPyB4KVxyXG4gICAgICAoZG9hbGwgKG1hcCB0aGlzZm4geCkpXHJcbiAgICAgIChtYXAtZW50cnk/IHgpXHJcbiAgICAgIChNYXBFbnRyeS4gKHRoaXNmbiAoa2V5IHgpKSAodGhpc2ZuICh2YWwgeCkpIG5pbClcclxuICAgICAgKGNvbGw/IHgpXHJcbiAgICAgIChpbnRvIChlbXB0eSB4KSAobWFwIHRoaXNmbikgeClcclxuICAgICAgKGFycmF5PyB4KVxyXG4gICAgICAocGVyc2lzdGVudCFcclxuICAgICAgIChyZWR1Y2VcclxuICAgICAgICAoZm4qXHJcbiAgICAgICAgIFtwMV9fNDg4NTMjIHAyX180ODg1NCNdXHJcbiAgICAgICAgIChjb25qISBwMV9fNDg4NTMjICh0aGlzZm4gcDJfXzQ4ODU0IykpKVxyXG4gICAgICAgICh0cmFuc2llbnQgW10pXHJcbiAgICAgICAgeCkpXHJcbiAgICAgIChpZGVudGljYWw/ICh0eXBlIHgpIGpzL09iamVjdClcclxuICAgICAgKHBlcnNpc3RlbnQhXHJcbiAgICAgICAocmVkdWNlXHJcbiAgICAgICAgKGZuIFtyIGtdIChhc3NvYyEgciAoa2V5Zm4gaykgKHRoaXNmbiAoZ29iamVjdC9nZXQgeCBrKSkpKVxyXG4gICAgICAgICh0cmFuc2llbnQge30pXHJcbiAgICAgICAgKGpzLWtleXMgeCkpKVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICB4KSldXHJcbiAgIChmIHgpKSkpXHJcbiJ9IHs6c3ltIHNvcnQtYnksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc29ydGVkIHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsLCB3aGVyZSB0aGUgc29ydFxuICAgb3JkZXIgaXMgZGV0ZXJtaW5lZCBieSBjb21wYXJpbmcgKGtleWZuIGl0ZW0pLiAgQ29tcCBjYW4gYmVcbiAgIGJvb2xlYW4tdmFsdWVkIGNvbXBhcmlzb24gZnVuY3Rpb24sIG9yIGEgLS8wLysgdmFsdWVkIGNvbXBhcmF0b3IuXG4gICBDb21wIGRlZmF1bHRzIHRvIGNvbXBhcmUuIiwgOmFyZ2xpc3RzIFtba2V5Zm4gY29sbF0gW2tleWZuIGNvbXAgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnQtYnlcclxuIFwiUmV0dXJucyBhIHNvcnRlZCBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCwgd2hlcmUgdGhlIHNvcnRcXG4gICBvcmRlciBpcyBkZXRlcm1pbmVkIGJ5IGNvbXBhcmluZyAoa2V5Zm4gaXRlbSkuICBDb21wIGNhbiBiZVxcbiAgIGJvb2xlYW4tdmFsdWVkIGNvbXBhcmlzb24gZnVuY3Rpb24sIG9yIGEgLS8wLysgdmFsdWVkIGNvbXBhcmF0b3IuXFxuICAgQ29tcCBkZWZhdWx0cyB0byBjb21wYXJlLlwiXHJcbiAoW2tleWZuIGNvbGxdIChzb3J0LWJ5IGtleWZuIGNvbXBhcmUgY29sbCkpXHJcbiAoW2tleWZuIGNvbXAgY29sbF1cclxuICAoc29ydCAoZm4gW3ggeV0gKChmbi0+Y29tcGFyYXRvciBjb21wKSAoa2V5Zm4geCkgKGtleWZuIHkpKSkgY29sbCkpKVxyXG4ifSB7OnN5bSBJVHJhbnNpZW50QXNzb2NpYXRpdmUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGFzc29jaWF0aXZpdHkgdG8gdHJhbnNpZW50IGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWFzc29jISl9IHs6c3ltIGNodW5rLWZpcnN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuIGNodW5rLWZpcnN0IFtzXSAoLWNodW5rZWQtZmlyc3QgcykpXHJcbiJ9IHs6c3ltIHByaW50LW1ldGE/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wdHMgb2JqXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtbWV0YT9cclxuIFtvcHRzIG9ial1cclxuIChhbmRcclxuICAoYm9vbGVhbiAoZ2V0IG9wdHMgOm1ldGEpKVxyXG4gIChpbXBsZW1lbnRzPyBJTWV0YSBvYmopXHJcbiAgKG5vdCAobmlsPyAobWV0YSBvYmopKSkpKVxyXG4ifSB7OnN5bSBtMy1oYXNoLWludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG0zLWhhc2gtaW50XHJcbiBbaW5dXHJcbiAoaWZcclxuICAoemVybz8gaW4pXHJcbiAgaW5cclxuICAobGV0IFtrMSAobTMtbWl4LUsxIGluKSBoMSAobTMtbWl4LUgxIG0zLXNlZWQgazEpXSAobTMtZm1peCBoMSA0KSkpKVxyXG4ifSB7OnN5bSBwci1zdHIqLCA6bWV0YSB7OmRvYyAiU3VwcG9ydCBzbyB0aGF0IGNvbGxlY3Rpb25zIGNhbiBpbXBsZW1lbnQgdG9TdHJpbmcgd2l0aG91dFxuICAgbG9hZGluZyBhbGwgdGhlIHByaW50aW5nIG1hY2hpbmVyeS4iLCA6YXJnbGlzdHMgKFtvYmpdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwci1zdHIqXHJcbiBcIlN1cHBvcnQgc28gdGhhdCBjb2xsZWN0aW9ucyBjYW4gaW1wbGVtZW50IHRvU3RyaW5nIHdpdGhvdXRcXG4gICBsb2FkaW5nIGFsbCB0aGUgcHJpbnRpbmcgbWFjaGluZXJ5LlwiXHJcbiBbb2JqXVxyXG4gKGxldFxyXG4gIFtzYiAoU3RyaW5nQnVmZmVyLikgd3JpdGVyIChTdHJpbmdCdWZmZXJXcml0ZXIuIHNiKV1cclxuICAoLXByLXdyaXRlciBvYmogd3JpdGVyIChwci1vcHRzKSlcclxuICAoLWZsdXNoIHdyaXRlcilcclxuICAoc3RyIHNiKSkpXHJcbiJ9IHs6c3ltIGVkdWN0aW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHJlZHVjaWJsZS9pdGVyYWJsZSBhcHBsaWNhdGlvbiBvZiB0aGUgdHJhbnNkdWNlcnNcbiAgdG8gdGhlIGl0ZW1zIGluIGNvbGwuIFRyYW5zZHVjZXJzIGFyZSBhcHBsaWVkIGluIG9yZGVyIGFzIGlmXG4gIGNvbWJpbmVkIHdpdGggY29tcC4gTm90ZSB0aGF0IHRoZXNlIGFwcGxpY2F0aW9ucyB3aWxsIGJlXG4gIHBlcmZvcm1lZCBldmVyeSB0aW1lIHJlZHVjZS9pdGVyYXRvciBpcyBjYWxsZWQuIiwgOmFyZ2xpc3RzIChbJiB4Zm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlZHVjdGlvblxyXG4gXCJSZXR1cm5zIGEgcmVkdWNpYmxlL2l0ZXJhYmxlIGFwcGxpY2F0aW9uIG9mIHRoZSB0cmFuc2R1Y2Vyc1xcbiAgdG8gdGhlIGl0ZW1zIGluIGNvbGwuIFRyYW5zZHVjZXJzIGFyZSBhcHBsaWVkIGluIG9yZGVyIGFzIGlmXFxuICBjb21iaW5lZCB3aXRoIGNvbXAuIE5vdGUgdGhhdCB0aGVzZSBhcHBsaWNhdGlvbnMgd2lsbCBiZVxcbiAgcGVyZm9ybWVkIGV2ZXJ5IHRpbWUgcmVkdWNlL2l0ZXJhdG9yIGlzIGNhbGxlZC5cIlxyXG4gezphcmdsaXN0cyAnKFt4Zm9ybSogY29sbF0pfVxyXG4gWyYgeGZvcm1zXVxyXG4gKEVkdWN0aW9uLiAoYXBwbHkgY29tcCAoYnV0bGFzdCB4Zm9ybXMpKSAobGFzdCB4Zm9ybXMpKSlcclxuIn0gezpzeW0gdHJlZS1zZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9kZXMgaW4gYSB0cmVlLCB2aWEgYSBkZXB0aC1maXJzdCB3YWxrLlxuICBicmFuY2g/IG11c3QgYmUgYSBmbiBvZiBvbmUgYXJnIHRoYXQgcmV0dXJucyB0cnVlIGlmIHBhc3NlZCBhIG5vZGVcbiAgdGhhdCBjYW4gaGF2ZSBjaGlsZHJlbiAoYnV0IG1heSBub3QpLiAgY2hpbGRyZW4gbXVzdCBiZSBhIGZuIG9mIG9uZVxuICBhcmcgdGhhdCByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIGNoaWxkcmVuLiBXaWxsIG9ubHkgYmUgY2FsbGVkIG9uXG4gIG5vZGVzIGZvciB3aGljaCBicmFuY2g/IHJldHVybnMgdHJ1ZS4gUm9vdCBpcyB0aGUgcm9vdCBub2RlIG9mIHRoZVxuICB0cmVlLiIsIDphcmdsaXN0cyAoW2JyYW5jaD8gY2hpbGRyZW4gcm9vdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyZWUtc2VxXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub2RlcyBpbiBhIHRyZWUsIHZpYSBhIGRlcHRoLWZpcnN0IHdhbGsuXFxuICBicmFuY2g/IG11c3QgYmUgYSBmbiBvZiBvbmUgYXJnIHRoYXQgcmV0dXJucyB0cnVlIGlmIHBhc3NlZCBhIG5vZGVcXG4gIHRoYXQgY2FuIGhhdmUgY2hpbGRyZW4gKGJ1dCBtYXkgbm90KS4gIGNoaWxkcmVuIG11c3QgYmUgYSBmbiBvZiBvbmVcXG4gIGFyZyB0aGF0IHJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgY2hpbGRyZW4uIFdpbGwgb25seSBiZSBjYWxsZWQgb25cXG4gIG5vZGVzIGZvciB3aGljaCBicmFuY2g/IHJldHVybnMgdHJ1ZS4gUm9vdCBpcyB0aGUgcm9vdCBub2RlIG9mIHRoZVxcbiAgdHJlZS5cIlxyXG4gW2JyYW5jaD8gY2hpbGRyZW4gcm9vdF1cclxuIChsZXRcclxuICBbd2Fsa1xyXG4gICAoZm5cclxuICAgIHdhbGtcclxuICAgIFtub2RlXVxyXG4gICAgKGxhenktc2VxXHJcbiAgICAgKGNvbnMgbm9kZSAod2hlbiAoYnJhbmNoPyBub2RlKSAobWFwY2F0IHdhbGsgKGNoaWxkcmVuIG5vZGUpKSkpKSldXHJcbiAgKHdhbGsgcm9vdCkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtcmVtYWluZGVyLWludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtcmVtYWluZGVyLWludFxyXG4gW3ggbl1cclxuIChjbGpzLmNvcmUvdW5jaGVja2VkLXJlbWFpbmRlci1pbnQgeCBuKSlcclxuIn0gezpzeW0gdXVpZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmbiB1dWlkIFtzXSAoYXNzZXJ0IChzdHJpbmc/IHMpKSAoVVVJRC4gKC50b0xvd2VyQ2FzZSBzKSBuaWwpKVxyXG4ifSB7OnN5bSBzZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9uIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgY29sbGVjdGlvbiBpc1xuICBlbXB0eSwgcmV0dXJucyBuaWwuICAoc2VxIG5pbCkgcmV0dXJucyBuaWwuIHNlcSBhbHNvIHdvcmtzIG9uXG4gIFN0cmluZ3MuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlcVxyXG4gXCJSZXR1cm5zIGEgc2VxIG9uIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgY29sbGVjdGlvbiBpc1xcbiAgZW1wdHksIHJldHVybnMgbmlsLiAgKHNlcSBuaWwpIHJldHVybnMgbmlsLiBzZXEgYWxzbyB3b3JrcyBvblxcbiAgU3RyaW5ncy5cIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChjb25kXHJcbiAgIChpbXBsZW1lbnRzPyBJU2VxYWJsZSBjb2xsKVxyXG4gICAoLXNlcSBjb2xsKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgICh3aGVuLW5vdCAoemVybz8gKGFsZW5ndGggY29sbCkpIChJbmRleGVkU2VxLiBjb2xsIDAgbmlsKSlcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKHdoZW4tbm90ICh6ZXJvPyAoLi1sZW5ndGggY29sbCkpIChJbmRleGVkU2VxLiBjb2xsIDAgbmlsKSlcclxuICAgKGpzLWl0ZXJhYmxlPyBjb2xsKVxyXG4gICAoZXM2LWl0ZXJhdG9yLXNlcSAoLmNhbGwgKGdvYmplY3QvZ2V0IGNvbGwgSVRFUl9TWU1CT0wpIGNvbGwpKVxyXG4gICAobmF0aXZlLXNhdGlzZmllcz8gSVNlcWFibGUgY29sbClcclxuICAgKC1zZXEgY29sbClcclxuICAgOmVsc2VcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBjb2xsIFwiIGlzIG5vdCBJU2VxYWJsZVwiKSkpKSkpXHJcbiJ9IHs6c3ltIHJlZHVjZSwgOm1ldGEgezpkb2MgImYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgMiBhcmd1bWVudHMuIElmIHZhbCBpcyBub3Qgc3VwcGxpZWQsXG4gIHJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHRoZSBmaXJzdCAyIGl0ZW1zIGluIGNvbGwsIHRoZW5cbiAgYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDNyZCBpdGVtLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm9cbiAgaXRlbXMsIGYgbXVzdCBhY2NlcHQgbm8gYXJndW1lbnRzIGFzIHdlbGwsIGFuZCByZWR1Y2UgcmV0dXJucyB0aGVcbiAgcmVzdWx0IG9mIGNhbGxpbmcgZiB3aXRoIG5vIGFyZ3VtZW50cy4gIElmIGNvbGwgaGFzIG9ubHkgMSBpdGVtLCBpdFxuICBpcyByZXR1cm5lZCBhbmQgZiBpcyBub3QgY2FsbGVkLiAgSWYgdmFsIGlzIHN1cHBsaWVkLCByZXR1cm5zIHRoZVxuICByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB2YWwgYW5kIHRoZSBmaXJzdCBpdGVtIGluIGNvbGwsIHRoZW5cbiAgYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm9cbiAgaXRlbXMsIHJldHVybnMgdmFsIGFuZCBmIGlzIG5vdCBjYWxsZWQuIiwgOmFyZ2xpc3RzIFtbZiBjb2xsXSBbZiB2YWwgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZVxyXG4gXCJmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDIgYXJndW1lbnRzLiBJZiB2YWwgaXMgbm90IHN1cHBsaWVkLFxcbiAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdGhlIGZpcnN0IDIgaXRlbXMgaW4gY29sbCwgdGhlblxcbiAgYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDNyZCBpdGVtLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm9cXG4gIGl0ZW1zLCBmIG11c3QgYWNjZXB0IG5vIGFyZ3VtZW50cyBhcyB3ZWxsLCBhbmQgcmVkdWNlIHJldHVybnMgdGhlXFxuICByZXN1bHQgb2YgY2FsbGluZyBmIHdpdGggbm8gYXJndW1lbnRzLiAgSWYgY29sbCBoYXMgb25seSAxIGl0ZW0sIGl0XFxuICBpcyByZXR1cm5lZCBhbmQgZiBpcyBub3QgY2FsbGVkLiAgSWYgdmFsIGlzIHN1cHBsaWVkLCByZXR1cm5zIHRoZVxcbiAgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdmFsIGFuZCB0aGUgZmlyc3QgaXRlbSBpbiBjb2xsLCB0aGVuXFxuICBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWYgY29sbCBjb250YWlucyBub1xcbiAgaXRlbXMsIHJldHVybnMgdmFsIGFuZCBmIGlzIG5vdCBjYWxsZWQuXCJcclxuIChbZiBjb2xsXVxyXG4gIChjb25kXHJcbiAgIChpbXBsZW1lbnRzPyBJUmVkdWNlIGNvbGwpXHJcbiAgICgtcmVkdWNlIGNvbGwgZilcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAoYXJyYXktcmVkdWNlIGNvbGwgZilcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKGFycmF5LXJlZHVjZSBjb2xsIGYpXHJcbiAgIChuYXRpdmUtc2F0aXNmaWVzPyBJUmVkdWNlIGNvbGwpXHJcbiAgICgtcmVkdWNlIGNvbGwgZilcclxuICAgKGl0ZXJhYmxlPyBjb2xsKVxyXG4gICAoaXRlci1yZWR1Y2UgY29sbCBmKVxyXG4gICA6ZWxzZVxyXG4gICAoc2VxLXJlZHVjZSBmIGNvbGwpKSlcclxuIChbZiB2YWwgY29sbF1cclxuICAoY29uZFxyXG4gICAoaW1wbGVtZW50cz8gSVJlZHVjZSBjb2xsKVxyXG4gICAoLXJlZHVjZSBjb2xsIGYgdmFsKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgIChhcnJheS1yZWR1Y2UgY29sbCBmIHZhbClcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKGFycmF5LXJlZHVjZSBjb2xsIGYgdmFsKVxyXG4gICAobmF0aXZlLXNhdGlzZmllcz8gSVJlZHVjZSBjb2xsKVxyXG4gICAoLXJlZHVjZSBjb2xsIGYgdmFsKVxyXG4gICAoaXRlcmFibGU/IGNvbGwpXHJcbiAgIChpdGVyLXJlZHVjZSBjb2xsIGYgdmFsKVxyXG4gICA6ZWxzZVxyXG4gICAoc2VxLXJlZHVjZSBmIHZhbCBjb2xsKSkpKVxyXG4ifSB7OnN5bSBJVVVJRCwgOm1ldGEgezpkb2MgIkEgbWFya2VyIHByb3RvY29sIGZvciBVVUlEcyJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gSU5JVCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgSU5JVCAjanMge30pXHJcbiJ9IHs6c3ltIGZpbmQtbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbCBvciBuaWwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLW5zXHJcbiBcIlJldHVybnMgdGhlIG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sIG9yIG5pbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxcbiAgQm9vdHN0cmFwIG9ubHkuXCJcclxuIFtuc11cclxuICh3aGVuIChuaWw/IE5TX0NBQ0hFKSAoc2V0ISBOU19DQUNIRSAoYXRvbSB7fSkpKVxyXG4gKGxldFxyXG4gIFt0aGUtbnMgKGdldCBATlNfQ0FDSEUgbnMpXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gdGhlLW5zKVxyXG4gICB0aGUtbnNcclxuICAgKGxldFxyXG4gICAgW25zLW9iaiAoZmluZC1ucy1vYmogbnMpXVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKG5pbD8gbnMtb2JqKVxyXG4gICAgIChsZXRcclxuICAgICAgW25ldy1ucyAoY3JlYXRlLW5zIG5zIG5zLW9iaildXHJcbiAgICAgIChzd2FwISBOU19DQUNIRSBhc3NvYyBucyBuZXctbnMpXHJcbiAgICAgIG5ldy1ucykpKSkpKVxyXG4ifSB7OnN5bSBjb250YWlucz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYga2V5IGlzIHByZXNlbnQgaW4gdGhlIGdpdmVuIGNvbGxlY3Rpb24sIG90aGVyd2lzZVxuICByZXR1cm5zIGZhbHNlLiAgTm90ZSB0aGF0IGZvciBudW1lcmljYWxseSBpbmRleGVkIGNvbGxlY3Rpb25zIGxpa2VcbiAgdmVjdG9ycyBhbmQgYXJyYXlzLCB0aGlzIHRlc3RzIGlmIHRoZSBudW1lcmljIGtleSBpcyB3aXRoaW4gdGhlXG4gIHJhbmdlIG9mIGluZGV4ZXMuICdjb250YWlucz8nIG9wZXJhdGVzIGNvbnN0YW50IG9yIGxvZ2FyaXRobWljIHRpbWU7XG4gIGl0IHdpbGwgbm90IHBlcmZvcm0gYSBsaW5lYXIgc2VhcmNoIGZvciBhIHZhbHVlLiAgU2VlIGFsc28gJ3NvbWUnLiIsIDphcmdsaXN0cyAoW2NvbGwgdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnRhaW5zP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYga2V5IGlzIHByZXNlbnQgaW4gdGhlIGdpdmVuIGNvbGxlY3Rpb24sIG90aGVyd2lzZVxcbiAgcmV0dXJucyBmYWxzZS4gIE5vdGUgdGhhdCBmb3IgbnVtZXJpY2FsbHkgaW5kZXhlZCBjb2xsZWN0aW9ucyBsaWtlXFxuICB2ZWN0b3JzIGFuZCBhcnJheXMsIHRoaXMgdGVzdHMgaWYgdGhlIG51bWVyaWMga2V5IGlzIHdpdGhpbiB0aGVcXG4gIHJhbmdlIG9mIGluZGV4ZXMuICdjb250YWlucz8nIG9wZXJhdGVzIGNvbnN0YW50IG9yIGxvZ2FyaXRobWljIHRpbWU7XFxuICBpdCB3aWxsIG5vdCBwZXJmb3JtIGEgbGluZWFyIHNlYXJjaCBmb3IgYSB2YWx1ZS4gIFNlZSBhbHNvICdzb21lJy5cIlxyXG4gW2NvbGwgdl1cclxuIChpZlxyXG4gIChpZGVudGljYWw/IChnZXQgY29sbCB2IGxvb2t1cC1zZW50aW5lbCkgbG9va3VwLXNlbnRpbmVsKVxyXG4gIGZhbHNlXHJcbiAgdHJ1ZSkpXHJcbiJ9IHs6c3ltIGV2ZXJ5PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGV2ZXJ5IHggaW4gY29sbCwgZWxzZVxuICBmYWxzZS4iLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmVyeT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgZXZlcnkgeCBpbiBjb2xsLCBlbHNlXFxuICBmYWxzZS5cIlxyXG4gW3ByZWQgY29sbF1cclxuIChjb25kXHJcbiAgKG5pbD8gKHNlcSBjb2xsKSlcclxuICB0cnVlXHJcbiAgKHByZWQgKGZpcnN0IGNvbGwpKVxyXG4gIChyZWN1ciBwcmVkIChuZXh0IGNvbGwpKVxyXG4gIDplbHNlXHJcbiAgZmFsc2UpKVxyXG4ifSB7OnN5bSBrZWVwLWluZGV4ZWQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9uLW5pbCByZXN1bHRzIG9mIChmIGluZGV4IGl0ZW0pLiBOb3RlLFxuICB0aGlzIG1lYW5zIGZhbHNlIHJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbmNsdWRlZC4gIGYgbXVzdCBiZSBmcmVlIG9mXG4gIHNpZGUtZWZmZWN0cy4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpc1xuICBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4ga2VlcC1pbmRleGVkXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub24tbmlsIHJlc3VsdHMgb2YgKGYgaW5kZXggaXRlbSkuIE5vdGUsXFxuICB0aGlzIG1lYW5zIGZhbHNlIHJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbmNsdWRlZC4gIGYgbXVzdCBiZSBmcmVlIG9mXFxuICBzaWRlLWVmZmVjdHMuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXNcXG4gIHByb3ZpZGVkLlwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2lhICh2b2xhdGlsZSEgLTEpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbaSAodnN3YXAhIGlhIGluYykgdiAoZiBpIGlucHV0KV1cclxuICAgICAgIChpZiAobmlsPyB2KSByZXN1bHQgKHJmIHJlc3VsdCB2KSkpKSkpKSlcclxuIChbZiBjb2xsXVxyXG4gIChsZXRmblxyXG4gICBbKGtlZXBpXHJcbiAgICAgW2lkeCBjb2xsXVxyXG4gICAgIChsYXp5LXNlcVxyXG4gICAgICAod2hlbi1sZXRcclxuICAgICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbYyAoY2h1bmstZmlyc3Qgcykgc2l6ZSAoY291bnQgYykgYiAoY2h1bmstYnVmZmVyIHNpemUpXVxyXG4gICAgICAgICAoZG90aW1lc1xyXG4gICAgICAgICAgW2kgc2l6ZV1cclxuICAgICAgICAgIChsZXRcclxuICAgICAgICAgICBbeCAoZiAoKyBpZHggaSkgKC1udGggYyBpKSldXHJcbiAgICAgICAgICAgKHdoZW4tbm90IChuaWw/IHgpIChjaHVuay1hcHBlbmQgYiB4KSkpKVxyXG4gICAgICAgICAoY2h1bmstY29ucyAoY2h1bmsgYikgKGtlZXBpICgrIGlkeCBzaXplKSAoY2h1bmstcmVzdCBzKSkpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3ggKGYgaWR4IChmaXJzdCBzKSldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKG5pbD8geClcclxuICAgICAgICAgIChrZWVwaSAoaW5jIGlkeCkgKHJlc3QgcykpXHJcbiAgICAgICAgICAoY29ucyB4IChrZWVwaSAoaW5jIGlkeCkgKHJlc3QgcykpKSkpKSkpKV1cclxuICAgKGtlZXBpIDAgY29sbCkpKSlcclxuIn0gezpzeW0gc3VicywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiBzIGJlZ2lubmluZyBhdCBzdGFydCBpbmNsdXNpdmUsIGFuZCBlbmRpbmdcbiAgYXQgZW5kIChkZWZhdWx0cyB0byBsZW5ndGggb2Ygc3RyaW5nKSwgZXhjbHVzaXZlLiIsIDphcmdsaXN0cyBbW3Mgc3RhcnRdIFtzIHN0YXJ0IGVuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1YnNcclxuIFwiUmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHMgYmVnaW5uaW5nIGF0IHN0YXJ0IGluY2x1c2l2ZSwgYW5kIGVuZGluZ1xcbiAgYXQgZW5kIChkZWZhdWx0cyB0byBsZW5ndGggb2Ygc3RyaW5nKSwgZXhjbHVzaXZlLlwiXHJcbiAoW3Mgc3RhcnRdICguc3Vic3RyaW5nIHMgc3RhcnQpKVxyXG4gKFtzIHN0YXJ0IGVuZF0gKC5zdWJzdHJpbmcgcyBzdGFydCBlbmQpKSlcclxuIn0gezpzeW0ganMtc3ltYm9sPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGFuIGluc3RhbmNlIG9mIFN5bWJvbCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1zeW1ib2w/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGFuIGluc3RhbmNlIG9mIFN5bWJvbFwiXHJcbiBbeF1cclxuIChvclxyXG4gIChpZGVudGljYWw/IChnb29nL3R5cGVPZiB4KSBcInN5bWJvbFwiKVxyXG4gIChhbmQgKGV4aXN0cz8ganMvU3ltYm9sKSAoaW5zdGFuY2U/IGpzL1N5bWJvbCB4KSkpKVxyXG4ifSB7OnN5bSBJRmluZCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBpbXBsZW1lbnRpbmcgZW50cnkgZmluZGluZyBpbiBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1maW5kKX0gezpzeW0gc2V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNldCBvZiB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0XHJcbiBcIlJldHVybnMgYSBzZXQgb2YgdGhlIGRpc3RpbmN0IGVsZW1lbnRzIG9mIGNvbGwuXCJcclxuIFtjb2xsXVxyXG4gKGlmXHJcbiAgKHNldD8gY29sbClcclxuICAod2l0aC1tZXRhIGNvbGwgbmlsKVxyXG4gIChsZXRcclxuICAgW2luIChzZXEgY29sbCldXHJcbiAgIChjb25kXHJcbiAgICAobmlsPyBpbilcclxuICAgICN7fVxyXG4gICAgKGFuZCAoaW5zdGFuY2U/IEluZGV4ZWRTZXEgaW4pICh6ZXJvPyAoLi1pIGluKSkpXHJcbiAgICAoLmNyZWF0ZUFzSWZCeUFzc29jIFBlcnNpc3RlbnRIYXNoU2V0ICguLWFyciBpbikpXHJcbiAgICA6ZWxzZVxyXG4gICAgKGxvb3BcclxuICAgICBbaW4gaW4gb3V0ICgtYXMtdHJhbnNpZW50ICN7fSldXHJcbiAgICAgKGlmLW5vdFxyXG4gICAgICAobmlsPyBpbilcclxuICAgICAgKHJlY3VyIChuZXh0IGluKSAoLWNvbmohIG91dCAoLWZpcnN0IGluKSkpXHJcbiAgICAgIChwZXJzaXN0ZW50ISBvdXQpKSkpKSkpXHJcbiJ9IHs6c3ltIE1PRFVMRV9VUklTLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNT0RVTEVfVVJJUyBuaWwpXHJcbiJ9IHs6c3ltIHRha2UtbGFzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb2YgdGhlIGxhc3QgbiBpdGVtcyBpbiBjb2xsLiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlXG4gIG9mIGNvbGwgbWF5IGJlIG5vIGJldHRlciB0aGFuIGxpbmVhciB0aW1lLiAgRm9yIHZlY3RvcnMsIHNlZSBhbHNvIHN1YnZlYy4iLCA6YXJnbGlzdHMgKFtuIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlLWxhc3RcclxuIFwiUmV0dXJucyBhIHNlcSBvZiB0aGUgbGFzdCBuIGl0ZW1zIGluIGNvbGwuICBEZXBlbmRpbmcgb24gdGhlIHR5cGVcXG4gIG9mIGNvbGwgbWF5IGJlIG5vIGJldHRlciB0aGFuIGxpbmVhciB0aW1lLiAgRm9yIHZlY3RvcnMsIHNlZSBhbHNvIHN1YnZlYy5cIlxyXG4gW24gY29sbF1cclxuIChsb29wXHJcbiAgW3MgKHNlcSBjb2xsKSBsZWFkIChzZXEgKGRyb3AgbiBjb2xsKSldXHJcbiAgKGlmIGxlYWQgKHJlY3VyIChuZXh0IHMpIChuZXh0IGxlYWQpKSBzKSkpXHJcbiJ9IHs6c3ltIGJpdC1zZXQsIDptZXRhIHs6ZG9jICJTZXQgYml0IGF0IGluZGV4IG4iLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuIGJpdC1zZXQgXCJTZXQgYml0IGF0IGluZGV4IG5cIiBbeCBuXSAoY2xqcy5jb3JlL2JpdC1zZXQgeCBuKSlcclxuIn0gezpzeW0gc3RyaW5nLWhhc2gtY2FjaGUtY291bnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHN0cmluZy1oYXNoLWNhY2hlLWNvdW50IDApXHJcbiJ9IHs6c3ltIHF1YWxpZmllZC1rZXl3b3JkPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBrZXl3b3JkIHdpdGggYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVhbGlmaWVkLWtleXdvcmQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBrZXl3b3JkIHdpdGggYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYm9vbGVhbiAoYW5kIChrZXl3b3JkPyB4KSAobmFtZXNwYWNlIHgpIHRydWUpKSlcclxuIn0gezpzeW0gLXdpdGgtbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggdmFsdWUgb2YgbyBhbmQgbWV0YWRhdGEgbWV0YSBhZGRlZCB0byBpdC4iLCA6YXJnbGlzdHMgKFtvIG1ldGFdKX0sIDpwcm90b2NvbCBJV2l0aE1ldGF9IHs6c3ltIGJ1dGxhc3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzZXEgb2YgYWxsIGJ1dCB0aGUgbGFzdCBpdGVtIGluIGNvbGwsIGluIGxpbmVhciB0aW1lIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJ1dGxhc3RcclxuIFwiUmV0dXJuIGEgc2VxIG9mIGFsbCBidXQgdGhlIGxhc3QgaXRlbSBpbiBjb2xsLCBpbiBsaW5lYXIgdGltZVwiXHJcbiBbc11cclxuIChsb29wXHJcbiAgW3JldCBbXSBzIHNdXHJcbiAgKGlmIChuZXh0IHMpIChyZWN1ciAoY29uaiByZXQgKGZpcnN0IHMpKSAobmV4dCBzKSkgKHNlcSByZXQpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnQsIDptZXRhIHs6ZG9jICJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnRcclxuIFwiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlwiXHJcbiAoW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0LWludCB4KSlcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlXHJcbiAgIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnRcclxuICAgKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QtaW50IHggeSlcclxuICAgbW9yZSkpKVxyXG4ifSB7OnN5bSAtaXRlcmF0b3IsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGl0ZXJhdG9yIGZvciBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJSXRlcmFibGV9IHs6c3ltICpwcmludC1uYW1lc3BhY2UtbWFwcyosIDptZXRhIHs6ZG9jICIqcHJpbnQtbmFtZXNwYWNlLW1hcHMqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHByaW50ZXIgd2lsbCBwcmludFxuICBuYW1lc3BhY2UgbWFwIGxpdGVyYWwgc3ludGF4LlxuXG4gIERlZmF1bHRzIHRvIGZhbHNlLCBidXQgdGhlIFJFUEwgYmluZHMgaXQgdG8gdHJ1ZS4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbmFtZXNwYWNlLW1hcHMqIGZhbHNlKVxyXG4ifSB7OnN5bSB0YWtlLW50aCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSBvZiBldmVyeSBudGggaXRlbSBpbiBjb2xsLiAgUmV0dXJucyBhIHN0YXRlZnVsXG4gIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW25dIFtuIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlLW50aFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgZXZlcnkgbnRoIGl0ZW0gaW4gY29sbC4gIFJldHVybnMgYSBzdGF0ZWZ1bFxcbiAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbbl1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtpYSAodm9sYXRpbGUhIC0xKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2kgKHZzd2FwISBpYSBpbmMpXVxyXG4gICAgICAgKGlmICh6ZXJvPyAocmVtIGkgbikpIChyZiByZXN1bHQgaW5wdXQpIHJlc3VsdCkpKSkpKSlcclxuIChbbiBjb2xsXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChjb25zIChmaXJzdCBzKSAodGFrZS1udGggbiAoZHJvcCBuIHMpKSkpKSkpXHJcbiJ9IHs6c3ltIGZpcnN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi4gQ2FsbHMgc2VxIG9uIGl0c1xuICBhcmd1bWVudC4gSWYgY29sbCBpcyBuaWwsIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaXJzdFxyXG4gXCJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLiBDYWxscyBzZXEgb24gaXRzXFxuICBhcmd1bWVudC4gSWYgY29sbCBpcyBuaWwsIHJldHVybnMgbmlsLlwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGlmXHJcbiAgIChpbXBsZW1lbnRzPyBJU2VxIGNvbGwpXHJcbiAgICgtZmlyc3QgY29sbClcclxuICAgKGxldCBbcyAoc2VxIGNvbGwpXSAod2hlbi1ub3QgKG5pbD8gcykgKC1maXJzdCBzKSkpKSkpXHJcbiJ9IHs6c3ltIG5hdGl2ZS1zYXRpc2ZpZXM/LCA6bWV0YSB7OmRvYyAiSW50ZXJuYWwgLSBkbyBub3QgdXNlISIsIDphcmdsaXN0cyAoW3AgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hdGl2ZS1zYXRpc2ZpZXM/XHJcbiBcIkludGVybmFsIC0gZG8gbm90IHVzZSFcIlxyXG4gW3AgeF1cclxuIChsZXRcclxuICBbeCAoaWYgKG5pbD8geCkgbmlsIHgpXVxyXG4gIChjb25kXHJcbiAgICh1bmNoZWNrZWQtZ2V0IHAgKGdvb2cvdHlwZU9mIHgpKVxyXG4gICB0cnVlXHJcbiAgICh1bmNoZWNrZWQtZ2V0IHAgXCJfXCIpXHJcbiAgIHRydWVcclxuICAgOmVsc2VcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gc2VxPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHMgc2F0aXNmaWVzIElTZXEiLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VxP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiBzIHNhdGlzZmllcyBJU2VxXCJcclxuIFtzXVxyXG4gKGlmIChuaWw/IHMpIGZhbHNlIChzYXRpc2ZpZXM/IElTZXEgcykpKVxyXG4ifSB7OnN5bSAtc29ydGVkLXNlcS1mcm9tLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNvcnRlZCBzZXEgZnJvbSBjb2xsIGluIGVpdGhlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlci5cbiAgICAgSWYgYXNjZW5kaW5nIGlzIHRydWUsIHRoZSByZXN1bHQgc2hvdWxkIGNvbnRhaW4gYWxsIGl0ZW1zIHdoaWNoIGFyZSA+IG9yID49XG4gICAgIHRoYW4gay4gSWYgYXNjZW5kaW5nIGlzIGZhbHNlLCB0aGUgcmVzdWx0IHNob3VsZCBjb250YWluIGFsbCBpdGVtcyB3aGljaFxuICAgICBhcmUgPCBvciA8PSB0aGFuIGssIGUuZy5cbiAgICAgKC1zb3J0ZWQtc2VxLWZyb20gKHNvcnRlZC1zZXQgMSAyIDMgNCA1KSAzIHRydWUpID0+ICgzIDQgNSlcbiAgICAgKC1zb3J0ZWQtc2VxLWZyb20gKHNvcnRlZC1zZXQgMSAyIDMgNCA1KSAzIGZhbHNlKSA9PiAoMyAyIDEpIiwgOmFyZ2xpc3RzIChbY29sbCBrIGFzY2VuZGluZz9dKX0sIDpwcm90b2NvbCBJU29ydGVkfSB7OnN5bSBwcmludGxuLXN0ciwgOm1ldGEgezpkb2MgInByaW50bG4gdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdCIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50bG4tc3RyXHJcbiBcInByaW50bG4gdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdFwiXHJcbiBbJiBvYmpzXVxyXG4gKHBybi1zdHItd2l0aC1vcHRzIG9ianMgKGFzc29jIChwci1vcHRzKSA6cmVhZGFibHkgZmFsc2UpKSlcclxuIn0gezpzeW0gaW5zdC1tcywgOm1ldGEgezpkb2MgIlJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAsIDAwOjAwOjAwIEdNVCIsIDphcmdsaXN0cyAoW2luc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnN0LW1zXHJcbiBcIlJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAsIDAwOjAwOjAwIEdNVFwiXHJcbiBbaW5zdF1cclxuIChpbnN0LW1zKiBpbnN0KSlcclxuIn0gezpzeW0gaXRlcmF0ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHgsIChmIHgpLCAoZiAoZiB4KSkgZXRjLiBmIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMiLCA6YXJnbGlzdHMgKFtmIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpdGVyYXRlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHgsIChmIHgpLCAoZiAoZiB4KSkgZXRjLiBmIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHNcIlxyXG4gezphZGRlZCBcIjEuMFwifVxyXG4gW2YgeF1cclxuIChJdGVyYXRlLiBuaWwgZiBuaWwgeCBuaWwpKVxyXG4ifSB7OnN5bSAtZW1wdHksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGVtcHR5IGNvbGxlY3Rpb24gb2YgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgY29sbC4gVXNlZFxuICAgICBieSBjbGpzLmNvcmUvZW1wdHkuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElFbXB0eWFibGVDb2xsZWN0aW9ufSB7OnN5bSBuZXdsaW5lLCA6bWV0YSB7OmRvYyAiUHJpbnRzIGEgbmV3bGluZSB1c2luZyAqcHJpbnQtZm4qIiwgOmFyZ2xpc3RzIFtbXSBbb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5ld2xpbmVcclxuIFwiUHJpbnRzIGEgbmV3bGluZSB1c2luZyAqcHJpbnQtZm4qXCJcclxuIChbXSAobmV3bGluZSBuaWwpKVxyXG4gKFtvcHRzXVxyXG4gIChzdHJpbmctcHJpbnQgXCJcXG5cIilcclxuICAod2hlbiAoZ2V0IG9wdHMgOmZsdXNoLW9uLW5ld2xpbmUpIChmbHVzaCkpKSlcclxuIn0gezpzeW0gSUxvb2t1cCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBsb29raW5nIHVwIGEgdmFsdWUgaW4gYSBkYXRhIHN0cnVjdHVyZS4ifSwgOm1ldGhvZHMgKC1sb29rdXApfSB7OnN5bSAtY2h1bmtlZC1yZXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRoIHRoZSBmaXJzdCBjaHVuayByZW1vdmVkLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJQ2h1bmtlZFNlcX0gezpzeW0gd3JpdGUtYWxsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3dyaXRlciAmIHNzXSl9LCA6c291cmNlICIoZGVmbiB3cml0ZS1hbGwgW3dyaXRlciAmIHNzXSAoZG9zZXEgW3Mgc3NdICgtd3JpdGUgd3JpdGVyIHMpKSlcclxuIn0gezpzeW0gZm4/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgZiBpcyBhIEphdmFTY3JpcHQgZnVuY3Rpb24gb3Igc2F0aXNmaWVzIHRoZSBGbiBwcm90b2NvbC4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm4/XHJcbiBcIlJldHVybiB0cnVlIGlmIGYgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIG9yIHNhdGlzZmllcyB0aGUgRm4gcHJvdG9jb2wuXCJcclxuIFtmXVxyXG4gKG9yIChnb29nL2lzRnVuY3Rpb24gZikgKHNhdGlzZmllcz8gRm4gZikpKVxyXG4ifSB7OnN5bSAtcHJlZmVyLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZiBkaXNwYXRjaC12YWwgZGlzcGF0Y2gtdmFsLXldKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gLWFzc29jLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aCBhIG1hcHBpbmcgZnJvbSBrZXkgayB0b1xuICAgICB2YWx1ZSB2IGFkZGVkIHRvIGl0LiIsIDphcmdsaXN0cyAoW2NvbGwgayB2XSl9LCA6cHJvdG9jb2wgSUFzc29jaWF0aXZlfSB7OnN5bSBkb2FsbCwgOm1ldGEgezpkb2MgIldoZW4gbGF6eSBzZXF1ZW5jZXMgYXJlIHByb2R1Y2VkIHZpYSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNpZGVcbiAgZWZmZWN0cywgYW55IGVmZmVjdHMgb3RoZXIgdGhhbiB0aG9zZSBuZWVkZWQgdG8gcHJvZHVjZSB0aGUgZmlyc3RcbiAgZWxlbWVudCBpbiB0aGUgc2VxIGRvIG5vdCBvY2N1ciB1bnRpbCB0aGUgc2VxIGlzIGNvbnN1bWVkLiBkb2FsbCBjYW5cbiAgYmUgdXNlZCB0byBmb3JjZSBhbnkgZWZmZWN0cy4gV2Fsa3MgdGhyb3VnaCB0aGUgc3VjY2Vzc2l2ZSBuZXh0cyBvZlxuICB0aGUgc2VxLCByZXRhaW5zIHRoZSBoZWFkIGFuZCByZXR1cm5zIGl0LCB0aHVzIGNhdXNpbmcgdGhlIGVudGlyZVxuICBzZXEgdG8gcmVzaWRlIGluIG1lbW9yeSBhdCBvbmUgdGltZS4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbbiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZG9hbGxcclxuIFwiV2hlbiBsYXp5IHNlcXVlbmNlcyBhcmUgcHJvZHVjZWQgdmlhIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2lkZVxcbiAgZWZmZWN0cywgYW55IGVmZmVjdHMgb3RoZXIgdGhhbiB0aG9zZSBuZWVkZWQgdG8gcHJvZHVjZSB0aGUgZmlyc3RcXG4gIGVsZW1lbnQgaW4gdGhlIHNlcSBkbyBub3Qgb2NjdXIgdW50aWwgdGhlIHNlcSBpcyBjb25zdW1lZC4gZG9hbGwgY2FuXFxuICBiZSB1c2VkIHRvIGZvcmNlIGFueSBlZmZlY3RzLiBXYWxrcyB0aHJvdWdoIHRoZSBzdWNjZXNzaXZlIG5leHRzIG9mXFxuICB0aGUgc2VxLCByZXRhaW5zIHRoZSBoZWFkIGFuZCByZXR1cm5zIGl0LCB0aHVzIGNhdXNpbmcgdGhlIGVudGlyZVxcbiAgc2VxIHRvIHJlc2lkZSBpbiBtZW1vcnkgYXQgb25lIHRpbWUuXCJcclxuIChbY29sbF0gKGRvcnVuIGNvbGwpIGNvbGwpXHJcbiAoW24gY29sbF0gKGRvcnVuIG4gY29sbCkgY29sbCkpXHJcbiJ9IHs6c3ltIGtleXdvcmQtaWRlbnRpY2FsPywgOm1ldGEgezpkb2MgIkVmZmljaWVudCB0ZXN0IHRvIGRldGVybWluZSB0aGF0IHR3byBrZXl3b3JkcyBhcmUgaWRlbnRpY2FsLiIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXdvcmQtaWRlbnRpY2FsP1xyXG4gXCJFZmZpY2llbnQgdGVzdCB0byBkZXRlcm1pbmUgdGhhdCB0d28ga2V5d29yZHMgYXJlIGlkZW50aWNhbC5cIlxyXG4gW3ggeV1cclxuIChpZlxyXG4gIChpZGVudGljYWw/IHggeSlcclxuICB0cnVlXHJcbiAgKGlmXHJcbiAgIChhbmQgKGtleXdvcmQ/IHgpIChrZXl3b3JkPyB5KSlcclxuICAgKGlkZW50aWNhbD8gKC4tZnFuIHgpICguLWZxbiB5KSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gKnByaW50LWVyci1mbiosIDptZXRhIHs6ZG9jICJFYWNoIHJ1bnRpbWUgZW52aXJvbm1lbnQgcHJvdmlkZXMgYSBkaWZmZXJlbnQgd2F5IHRvIHByaW50IGVycm9yIG91dHB1dC5cbiAgV2hhdGV2ZXIgZnVuY3Rpb24gKnByaW50LWVyci1mbiogaXMgYm91bmQgdG8gd2lsbCBiZSBwYXNzZWQgYW55XG4gIFN0cmluZ3Mgd2hpY2ggc2hvdWxkIGJlIHByaW50ZWQuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpwcmludC1lcnItZm4qIG5pbClcclxuIn0gezpzeW0gcHJlZmVycywgOm1ldGEgezpkb2MgIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybnMgYSBtYXAgb2YgcHJlZmVycmVkIHZhbHVlIC0+IHNldCBvZiBvdGhlciB2YWx1ZXMiLCA6YXJnbGlzdHMgKFttdWx0aWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJlZmVyc1xyXG4gXCJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm5zIGEgbWFwIG9mIHByZWZlcnJlZCB2YWx1ZSAtPiBzZXQgb2Ygb3RoZXIgdmFsdWVzXCJcclxuIFttdWx0aWZuXVxyXG4gKC1wcmVmZXJzIG11bHRpZm4pKVxyXG4ifSB7OnN5bSAtanMtPmNsaiwgOm1ldGEgezpkb2MgIlRyYW5zZm9ybXMgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gQ2xvanVyZSIsIDphcmdsaXN0cyAoW3ggb3B0aW9uc10pfSwgOnByb3RvY29sIElFbmNvZGVDbG9qdXJlfSB7OnN5bSBkZWR1cGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSByZW1vdmluZyBjb25zZWN1dGl2ZSBkdXBsaWNhdGVzIGluIGNvbGwuXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tdIFtjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVkdXBlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIHJlbW92aW5nIGNvbnNlY3V0aXZlIGR1cGxpY2F0ZXMgaW4gY29sbC5cXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW3BhICh2b2xhdGlsZSEgOmNsanMuY29yZS9ub25lKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW3ByaW9yIEBwYV1cclxuICAgICAgICh2cmVzZXQhIHBhIGlucHV0KVxyXG4gICAgICAgKGlmICg9IHByaW9yIGlucHV0KSByZXN1bHQgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSkpXHJcbiAoW2NvbGxdIChzZXF1ZW5jZSAoZGVkdXBlKSBjb2xsKSkpXHJcbiJ9IHs6c3ltIGRpc3NvYywgOm1ldGEgezpkb2MgImRpc3NvY1tpYXRlXS4gUmV0dXJucyBhIG5ldyBtYXAgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsXG4gIHRoYXQgZG9lcyBub3QgY29udGFpbiBhIG1hcHBpbmcgZm9yIGtleShzKS4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbY29sbCBrXSBbY29sbCBrICYga3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXNzb2NcclxuIFwiZGlzc29jW2lhdGVdLiBSZXR1cm5zIGEgbmV3IG1hcCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSxcXG4gIHRoYXQgZG9lcyBub3QgY29udGFpbiBhIG1hcHBpbmcgZm9yIGtleShzKS5cIlxyXG4gKFtjb2xsXSBjb2xsKVxyXG4gKFtjb2xsIGtdICh3aGVuLW5vdCAobmlsPyBjb2xsKSAoLWRpc3NvYyBjb2xsIGspKSlcclxuIChbY29sbCBrICYga3NdXHJcbiAgKHdoZW4tbm90XHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIChsZXRcclxuICAgIFtyZXQgKGRpc3NvYyBjb2xsIGspXVxyXG4gICAgKGlmIGtzIChyZWN1ciByZXQgKGZpcnN0IGtzKSAobmV4dCBrcykpIHJldCkpKSkpXHJcbiJ9IHs6c3ltIGF0b20sIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGFuIEF0b20gd2l0aCBhbiBpbml0aWFsIHZhbHVlIG9mIHggYW5kIHplcm8gb3JcbiAgbW9yZSBvcHRpb25zIChpbiBhbnkgb3JkZXIpOlxuXG4gIDptZXRhIG1ldGFkYXRhLW1hcFxuXG4gIDp2YWxpZGF0b3IgdmFsaWRhdGUtZm5cblxuICBJZiBtZXRhZGF0YS1tYXAgaXMgc3VwcGxpZWQsIGl0IHdpbGwgYmVjb21lIHRoZSBtZXRhZGF0YSBvbiB0aGVcbiAgYXRvbS4gdmFsaWRhdGUtZm4gbXVzdCBiZSBuaWwgb3IgYSBzaWRlLWVmZmVjdC1mcmVlIGZuIG9mIG9uZVxuICBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhlIGludGVuZGVkIG5ldyBzdGF0ZSBvbiBhbnkgc3RhdGVcbiAgY2hhbmdlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHVuYWNjZXB0YWJsZSwgdGhlIHZhbGlkYXRlLWZuIHNob3VsZFxuICByZXR1cm4gZmFsc2Ugb3IgdGhyb3cgYW4gRXJyb3IuICBJZiBlaXRoZXIgb2YgdGhlc2UgZXJyb3IgY29uZGl0aW9uc1xuICBvY2N1ciwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIGF0b20gd2lsbCBub3QgY2hhbmdlLiIsIDphcmdsaXN0cyBbW3hdIFt4ICYgezprZXlzIFttZXRhIHZhbGlkYXRvcl19XV19LCA6c291cmNlICIoZGVmblxyXG4gYXRvbVxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGFuIEF0b20gd2l0aCBhbiBpbml0aWFsIHZhbHVlIG9mIHggYW5kIHplcm8gb3JcXG4gIG1vcmUgb3B0aW9ucyAoaW4gYW55IG9yZGVyKTpcXG5cXG4gIDptZXRhIG1ldGFkYXRhLW1hcFxcblxcbiAgOnZhbGlkYXRvciB2YWxpZGF0ZS1mblxcblxcbiAgSWYgbWV0YWRhdGEtbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIGJlY29tZSB0aGUgbWV0YWRhdGEgb24gdGhlXFxuICBhdG9tLiB2YWxpZGF0ZS1mbiBtdXN0IGJlIG5pbCBvciBhIHNpZGUtZWZmZWN0LWZyZWUgZm4gb2Ygb25lXFxuICBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhlIGludGVuZGVkIG5ldyBzdGF0ZSBvbiBhbnkgc3RhdGVcXG4gIGNoYW5nZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB1bmFjY2VwdGFibGUsIHRoZSB2YWxpZGF0ZS1mbiBzaG91bGRcXG4gIHJldHVybiBmYWxzZSBvciB0aHJvdyBhbiBFcnJvci4gIElmIGVpdGhlciBvZiB0aGVzZSBlcnJvciBjb25kaXRpb25zXFxuICBvY2N1ciwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIGF0b20gd2lsbCBub3QgY2hhbmdlLlwiXHJcbiAoW3hdIChBdG9tLiB4IG5pbCBuaWwgbmlsKSlcclxuIChbeCAmIHs6a2V5cyBbbWV0YSB2YWxpZGF0b3JdfV0gKEF0b20uIHggbWV0YSB2YWxpZGF0b3IgbmlsKSkpXHJcbiJ9IHs6c3ltIGJpdC1zaGlmdC1yaWdodCwgOm1ldGEgezpkb2MgIkJpdHdpc2Ugc2hpZnQgcmlnaHQiLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtc2hpZnQtcmlnaHRcclxuIFwiQml0d2lzZSBzaGlmdCByaWdodFwiXHJcbiBbeCBuXVxyXG4gKGNsanMuY29yZS9iaXQtc2hpZnQtcmlnaHQgeCBuKSlcclxuIn0gezpzeW0gKmNsb2p1cmVzY3JpcHQtdmVyc2lvbiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbG9qdXJlc2NyaXB0LXZlcnNpb24qIFwiMS4xMC43NjRcIilcclxuIn0gezpzeW0gLWZpcnN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbiBjb2xsLiBVc2VkIGJ5IGNsanMuY29yZS9maXJzdC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVNlcX0gezpzeW0gcGVlaywgOm1ldGEgezpkb2MgIkZvciBhIGxpc3Qgb3IgcXVldWUsIHNhbWUgYXMgZmlyc3QsIGZvciBhIHZlY3Rvciwgc2FtZSBhcywgYnV0IG11Y2hcbiAgbW9yZSBlZmZpY2llbnQgdGhhbiwgbGFzdC4gSWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHksIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwZWVrXHJcbiBcIkZvciBhIGxpc3Qgb3IgcXVldWUsIHNhbWUgYXMgZmlyc3QsIGZvciBhIHZlY3Rvciwgc2FtZSBhcywgYnV0IG11Y2hcXG4gIG1vcmUgZWZmaWNpZW50IHRoYW4sIGxhc3QuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCByZXR1cm5zIG5pbC5cIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3QgKG5pbD8gY29sbCkgKC1wZWVrIGNvbGwpKSlcclxuIn0gezpzeW0gSUtWUmVkdWNlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFzc29jaWF0aXZlIHR5cGVzIHRoYXQgY2FuIHJlZHVjZSB0aGVtc2VsdmVzXG4gIHZpYSBhIGZ1bmN0aW9uIG9mIGtleSBhbmQgdmFsLiBDYWxsZWQgYnkgY2xqcy5jb3JlL3JlZHVjZS1rdi4ifSwgOm1ldGhvZHMgKC1rdi1yZWR1Y2UpfSB7OnN5bSBhZ2V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4L2luZGljZXMuIFdvcmtzIG9uIEphdmFTY3JpcHQgYXJyYXlzLiIsIDphcmdsaXN0cyBbW2FycmF5IGlkeF0gW2FycmF5IGlkeCAmIGlkeHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZ2V0XHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC9pbmRpY2VzLiBXb3JrcyBvbiBKYXZhU2NyaXB0IGFycmF5cy5cIlxyXG4gKFthcnJheSBpZHhdIChjbGpzLmNvcmUvYWdldCBhcnJheSBpZHgpKVxyXG4gKFthcnJheSBpZHggJiBpZHhzXSAoYXBwbHkgYWdldCAoYWdldCBhcnJheSBpZHgpIGlkeHMpKSlcclxuIn0gezpzeW0gLXdyaXRlLCA6bWV0YSB7OmRvYyAiV3JpdGVzIHMgd2l0aCB3cml0ZXIgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFt3cml0ZXIgc10pfSwgOnByb3RvY29sIElXcml0ZXJ9IHs6c3ltIGl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGl0ZXJcclxuIFtjb2xsXVxyXG4gKGNvbmRcclxuICAoaXRlcmFibGU/IGNvbGwpXHJcbiAgKC1pdGVyYXRvciBjb2xsKVxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKG5pbC1pdGVyKVxyXG4gIChzdHJpbmc/IGNvbGwpXHJcbiAgKHN0cmluZy1pdGVyIGNvbGwpXHJcbiAgKGFycmF5PyBjb2xsKVxyXG4gIChhcnJheS1pdGVyIGNvbGwpXHJcbiAgKHNlcWFibGU/IGNvbGwpXHJcbiAgKHNlcS1pdGVyIGNvbGwpXHJcbiAgOmVsc2VcclxuICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiQ2Fubm90IGNyZWF0ZSBpdGVyYXRvciBmcm9tIFwiIGNvbGwpKSkpKVxyXG4ifSB7OnN5bSBtay1ib3VuZC1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzYyB0ZXN0IGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1rLWJvdW5kLWZuXHJcbiBbc2MgdGVzdCBrZXldXHJcbiAoZm5cclxuICBbZV1cclxuICAobGV0IFtjb21wICgtY29tcGFyYXRvciBzYyldICh0ZXN0IChjb21wICgtZW50cnkta2V5IHNjIGUpIGtleSkgMCkpKSlcclxuIn0gezpzeW0gbGFzdCwgOm1ldGEgezpkb2MgIlJldHVybiB0aGUgbGFzdCBpdGVtIGluIGNvbGwsIGluIGxpbmVhciB0aW1lIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxhc3RcclxuIFwiUmV0dXJuIHRoZSBsYXN0IGl0ZW0gaW4gY29sbCwgaW4gbGluZWFyIHRpbWVcIlxyXG4gW3NdXHJcbiAobGV0IFtzbiAobmV4dCBzKV0gKGlmLW5vdCAobmlsPyBzbikgKHJlY3VyIHNuKSAoZmlyc3QgcykpKSlcclxuIn0gezpzeW0gLWRlZmF1bHQtZGlzcGF0Y2gtdmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIHByLCA6bWV0YSB7OmRvYyAiUHJpbnRzIHRoZSBvYmplY3QocykgdXNpbmcgc3RyaW5nLXByaW50LiAgUHJpbnRzIHRoZVxuICBvYmplY3QocyksIHNlcGFyYXRlZCBieSBzcGFjZXMgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZS5cbiAgQnkgZGVmYXVsdCwgcHIgYW5kIHBybiBwcmludCBpbiBhIHdheSB0aGF0IG9iamVjdHMgY2FuIGJlXG4gIHJlYWQgYnkgdGhlIHJlYWRlciIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByXHJcbiBcIlByaW50cyB0aGUgb2JqZWN0KHMpIHVzaW5nIHN0cmluZy1wcmludC4gIFByaW50cyB0aGVcXG4gIG9iamVjdChzKSwgc2VwYXJhdGVkIGJ5IHNwYWNlcyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lLlxcbiAgQnkgZGVmYXVsdCwgcHIgYW5kIHBybiBwcmludCBpbiBhIHdheSB0aGF0IG9iamVjdHMgY2FuIGJlXFxuICByZWFkIGJ5IHRoZSByZWFkZXJcIlxyXG4gWyYgb2Jqc11cclxuIChwci13aXRoLW9wdHMgb2JqcyAocHItb3B0cykpKVxyXG4ifSB7OnN5bSBuYW1lc3BhY2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lc3BhY2UgU3RyaW5nIG9mIGEgc3ltYm9sIG9yIGtleXdvcmQsIG9yIG5pbCBpZiBub3QgcHJlc2VudC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmFtZXNwYWNlXHJcbiBcIlJldHVybnMgdGhlIG5hbWVzcGFjZSBTdHJpbmcgb2YgYSBzeW1ib2wgb3Iga2V5d29yZCwgb3IgbmlsIGlmIG5vdCBwcmVzZW50LlwiXHJcbiBbeF1cclxuIChpZlxyXG4gIChpbXBsZW1lbnRzPyBJTmFtZWQgeClcclxuICAoLW5hbWVzcGFjZSB4KVxyXG4gICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJEb2Vzbid0IHN1cHBvcnQgbmFtZXNwYWNlOiBcIiB4KSkpKSlcclxuIn0gezpzeW0gb2JqLW1hcCwgOm1ldGEgezpkb2MgImtleXZhbCA9PiBrZXkgdmFsXG4gIFJldHVybnMgYSBuZXcgb2JqZWN0IG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLiIsIDphcmdsaXN0cyAoWyYga2V5dmFsc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9iai1tYXBcclxuIFwia2V5dmFsID0+IGtleSB2YWxcXG4gIFJldHVybnMgYSBuZXcgb2JqZWN0IG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLlwiXHJcbiBbJiBrZXl2YWxzXVxyXG4gKGxldFxyXG4gIFtrcyAoYXJyYXkpIG9iaiAoanMtb2JqKV1cclxuICAobG9vcFxyXG4gICBba3ZzIChzZXEga2V5dmFscyldXHJcbiAgIChpZlxyXG4gICAga3ZzXHJcbiAgICAoZG9cclxuICAgICAoLnB1c2gga3MgKGZpcnN0IGt2cykpXHJcbiAgICAgKGdvYmplY3Qvc2V0IG9iaiAoZmlyc3Qga3ZzKSAoc2Vjb25kIGt2cykpXHJcbiAgICAgKHJlY3VyIChubmV4dCBrdnMpKSlcclxuICAgICguZnJvbU9iamVjdCBPYmpNYXAga3Mgb2JqKSkpKSlcclxuIn0gezpzeW0gLWNvbmosIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRoIG8gYWRkZWQgdG8gaXQuIFRoZSBuZXcgaXRlbVxuICAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG1vc3QgZWZmaWNpZW50IHBsYWNlLCBlLmcuXG4gICAgIChjb25qIFsxIDIgMyA0XSA1KSA9PiBbMSAyIDMgNCA1XVxuICAgICAoY29uaiAnKDIgMyA0IDUpIDEpID0+ICcoMSAyIDMgNCA1KSIsIDphcmdsaXN0cyAoW2NvbGwgb10pfSwgOnByb3RvY29sIElDb2xsZWN0aW9ufSB7OnN5bSA9LCA6bWV0YSB7OmRvYyAiRXF1YWxpdHkuIFJldHVybnMgdHJ1ZSBpZiB4IGVxdWFscyB5LCBmYWxzZSBpZiBub3QuIENvbXBhcmVzXG4gIG51bWJlcnMgYW5kIGNvbGxlY3Rpb25zIGluIGEgdHlwZS1pbmRlcGVuZGVudCBtYW5uZXIuICBDbG9qdXJlJ3MgaW1tdXRhYmxlIGRhdGFcbiAgc3RydWN0dXJlcyBkZWZpbmUgLWVxdWl2IChhbmQgdGh1cyA9KSBhcyBhIHZhbHVlLCBub3QgYW4gaWRlbnRpdHksXG4gIGNvbXBhcmlzb24uIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA9XHJcbiBcIkVxdWFsaXR5LiBSZXR1cm5zIHRydWUgaWYgeCBlcXVhbHMgeSwgZmFsc2UgaWYgbm90LiBDb21wYXJlc1xcbiAgbnVtYmVycyBhbmQgY29sbGVjdGlvbnMgaW4gYSB0eXBlLWluZGVwZW5kZW50IG1hbm5lci4gIENsb2p1cmUncyBpbW11dGFibGUgZGF0YVxcbiAgc3RydWN0dXJlcyBkZWZpbmUgLWVxdWl2IChhbmQgdGh1cyA9KSBhcyBhIHZhbHVlLCBub3QgYW4gaWRlbnRpdHksXFxuICBjb21wYXJpc29uLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKGlmIChuaWw/IHgpIChuaWw/IHkpIChvciAoaWRlbnRpY2FsPyB4IHkpICgtZXF1aXYgeCB5KSkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoPSB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgICg9IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gSVRyYW5zaWVudE1hcCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgbWFwcGluZyBmdW5jdGlvbmFsaXR5IHRvIHRyYW5zaWVudCBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1kaXNzb2MhKX0gezpzeW0gdGFrZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBmaXJzdCBuIGl0ZW1zIGluIGNvbGwsIG9yIGFsbCBpdGVtcyBpZlxuICB0aGVyZSBhcmUgZmV3ZXIgdGhhbiBuLiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlblxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW25dIFtuIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBmaXJzdCBuIGl0ZW1zIGluIGNvbGwsIG9yIGFsbCBpdGVtcyBpZlxcbiAgdGhlcmUgYXJlIGZld2VyIHRoYW4gbi4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW5cXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbbl1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtuYSAodm9sYXRpbGUhIG4pXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbblxyXG4gICAgICAgIEBuYVxyXG4gICAgICAgIG5uXHJcbiAgICAgICAgKHZzd2FwISBuYSBkZWMpXHJcbiAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgKGlmIChwb3M/IG4pIChyZiByZXN1bHQgaW5wdXQpIHJlc3VsdCldXHJcbiAgICAgICAoaWYgKG5vdCAocG9zPyBubikpIChlbnN1cmUtcmVkdWNlZCByZXN1bHQpIHJlc3VsdCkpKSkpKSlcclxuIChbbiBjb2xsXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuXHJcbiAgICAocG9zPyBuKVxyXG4gICAgKHdoZW4tbGV0XHJcbiAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAoY29ucyAoZmlyc3QgcykgKHRha2UgKGRlYyBuKSAocmVzdCBzKSkpKSkpKSlcclxuIn0gezpzeW0gdmVjdG9yPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElWZWN0b3IiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdmVjdG9yP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJVmVjdG9yXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSVZlY3RvciB4KSlcclxuIn0gezpzeW0gYm9vbGVhbiwgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBib29sZWFuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJvb2xlYW5cclxuIFwiQ29lcmNlIHRvIGJvb2xlYW5cIlxyXG4gW3hdXHJcbiAoY29uZCAobmlsPyB4KSBmYWxzZSAoZmFsc2U/IHgpIGZhbHNlIDplbHNlIHRydWUpKVxyXG4ifSB7OnN5bSBJQ2h1bmssIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWNjZXNzaW5nIHRoZSBpdGVtcyBvZiBhIGNodW5rLiJ9LCA6bWV0aG9kcyAoLWRyb3AtZmlyc3QpfSB7OnN5bSBiaXQtc2hpZnQtbGVmdCwgOm1ldGEgezpkb2MgIkJpdHdpc2Ugc2hpZnQgbGVmdCIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1zaGlmdC1sZWZ0XHJcbiBcIkJpdHdpc2Ugc2hpZnQgbGVmdFwiXHJcbiBbeCBuXVxyXG4gKGNsanMuY29yZS9iaXQtc2hpZnQtbGVmdCB4IG4pKVxyXG4ifSB7OnN5bSByYW5kb20tdXVpZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kb20tdXVpZFxyXG4gW11cclxuIChsZXRmblxyXG4gIFsoaGV4IFtdICgudG9TdHJpbmcgKHJhbmQtaW50IDE2KSAxNikpXVxyXG4gIChsZXRcclxuICAgW3JoZXggKC50b1N0cmluZyAoYml0LW9yIDggKGJpdC1hbmQgMyAocmFuZC1pbnQgMTYpKSkgMTYpXVxyXG4gICAodXVpZFxyXG4gICAgKHN0clxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICBcIi1cIlxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgXCItXCJcclxuICAgICBcIjRcIlxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIFwiLVwiXHJcbiAgICAgcmhleFxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIFwiLVwiXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpKSkpKSlcclxuIn0gezpzeW0gYW55PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBnaXZlbiBhbnkgYXJndW1lbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYW55PyBcIlJldHVybnMgdHJ1ZSBpZiBnaXZlbiBhbnkgYXJndW1lbnQuXCIgW3hdIHRydWUpXHJcbiJ9IHs6c3ltIHJhbmQtaW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmQgbiAoZXhjbHVzaXZlKS4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmFuZC1pbnRcclxuIFwiUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmQgbiAoZXhjbHVzaXZlKS5cIlxyXG4gW25dXHJcbiAoTWF0aC9mbG9vciAoKiAoTWF0aC9yYW5kb20pIG4pKSlcclxuIn0gezpzeW0gYWNsb25lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGphdmFzY3JpcHQgYXJyYXksIGNsb25lZCBmcm9tIHRoZSBwYXNzZWQgaW4gYXJyYXkiLCA6YXJnbGlzdHMgKFthcnJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhY2xvbmVcclxuIFwiUmV0dXJucyBhIGphdmFzY3JpcHQgYXJyYXksIGNsb25lZCBmcm9tIHRoZSBwYXNzZWQgaW4gYXJyYXlcIlxyXG4gW2Fycl1cclxuIChsZXRcclxuICBbbGVuIChhbGVuZ3RoIGFycikgbmV3LWFyciAobWFrZS1hcnJheSBsZW4pXVxyXG4gIChkb3RpbWVzIFtpIGxlbl0gKGFzZXQgbmV3LWFyciBpIChhZ2V0IGFyciBpKSkpXHJcbiAgbmV3LWFycikpXHJcbiJ9IHs6c3ltIHZyZXNldCEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBvZiB2b2xhdGlsZSB0byBuZXd2YWwgd2l0aG91dCByZWdhcmQgZm9yIHRoZVxuICAgY3VycmVudCB2YWx1ZS4gUmV0dXJucyBuZXd2YWwuIiwgOmFyZ2xpc3RzIChbdm9sIG5ld3ZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZyZXNldCFcclxuIFwiU2V0cyB0aGUgdmFsdWUgb2Ygdm9sYXRpbGUgdG8gbmV3dmFsIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVcXG4gICBjdXJyZW50IHZhbHVlLiBSZXR1cm5zIG5ld3ZhbC5cIlxyXG4gW3ZvbCBuZXd2YWxdXHJcbiAoLXZyZXNldCEgdm9sIG5ld3ZhbCkpXHJcbiJ9IHs6c3ltIGNodW5rLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2JdKX0sIDpzb3VyY2UgIihkZWZuIGNodW5rIFtiXSAoLmNodW5rIGIpKVxyXG4ifSB7OnN5bSBkZWMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4gbnVtLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGRlYyBcIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiBudW0uXCIgW3hdICgtIHggMSkpXHJcbiJ9IHs6c3ltIEFQZXJzaXN0ZW50VmVjdG9yLCA6bWV0YSB7OmRvYyAiTWFya2VyIHByb3RvY29sIn0sIDptZXRob2RzICgpfSB7OnN5bSBtYXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0b1xuICB0aGUgc2V0IG9mIGZpcnN0IGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byB0aGVcbiAgc2V0IG9mIHNlY29uZCBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzXG4gIGV4aGF1c3RlZC4gIEFueSByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIEZ1bmN0aW9uXG4gIGYgc2hvdWxkIGFjY2VwdCBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzLiBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY29sbF0gW2YgYzEgYzJdIFtmIGMxIGMyIGMzXSBbZiBjMSBjMiBjMyAmIGNvbGxzXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvXFxuICB0aGUgc2V0IG9mIGZpcnN0IGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byB0aGVcXG4gIHNldCBvZiBzZWNvbmQgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpc1xcbiAgZXhoYXVzdGVkLiAgQW55IHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gRnVuY3Rpb25cXG4gIGYgc2hvdWxkIGFjY2VwdCBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzLiBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuXFxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGZuXHJcbiAgICAoW10gKHJmKSlcclxuICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgIChbcmVzdWx0IGlucHV0XSAocmYgcmVzdWx0IChmIGlucHV0KSkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dCAmIGlucHV0c10gKHJmIHJlc3VsdCAoYXBwbHkgZiBpbnB1dCBpbnB1dHMpKSkpKSlcclxuIChbZiBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAoaWZcclxuICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgKGxldFxyXG4gICAgICBbYyAoY2h1bmstZmlyc3Qgcykgc2l6ZSAoY291bnQgYykgYiAoY2h1bmstYnVmZmVyIHNpemUpXVxyXG4gICAgICAoZG90aW1lcyBbaSBzaXplXSAoY2h1bmstYXBwZW5kIGIgKGYgKC1udGggYyBpKSkpKVxyXG4gICAgICAoY2h1bmstY29ucyAoY2h1bmsgYikgKG1hcCBmIChjaHVuay1yZXN0IHMpKSkpXHJcbiAgICAgKGNvbnMgKGYgKGZpcnN0IHMpKSAobWFwIGYgKHJlc3QgcykpKSkpKSlcclxuIChbZiBjMSBjMl1cclxuICAobGF6eS1zZXFcclxuICAgKGxldFxyXG4gICAgW3MxIChzZXEgYzEpIHMyIChzZXEgYzIpXVxyXG4gICAgKHdoZW5cclxuICAgICAoYW5kIHMxIHMyKVxyXG4gICAgIChjb25zIChmIChmaXJzdCBzMSkgKGZpcnN0IHMyKSkgKG1hcCBmIChyZXN0IHMxKSAocmVzdCBzMikpKSkpKSlcclxuIChbZiBjMSBjMiBjM11cclxuICAobGF6eS1zZXFcclxuICAgKGxldFxyXG4gICAgW3MxIChzZXEgYzEpIHMyIChzZXEgYzIpIHMzIChzZXEgYzMpXVxyXG4gICAgKHdoZW5cclxuICAgICAoYW5kIHMxIHMyIHMzKVxyXG4gICAgIChjb25zXHJcbiAgICAgIChmIChmaXJzdCBzMSkgKGZpcnN0IHMyKSAoZmlyc3QgczMpKVxyXG4gICAgICAobWFwIGYgKHJlc3QgczEpIChyZXN0IHMyKSAocmVzdCBzMykpKSkpKSlcclxuIChbZiBjMSBjMiBjMyAmIGNvbGxzXVxyXG4gIChsZXRcclxuICAgW3N0ZXBcclxuICAgIChmblxyXG4gICAgIHN0ZXBcclxuICAgICBbY3NdXHJcbiAgICAgKGxhenktc2VxXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtzcyAobWFwIHNlcSBjcyldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIChldmVyeT8gaWRlbnRpdHkgc3MpXHJcbiAgICAgICAgKGNvbnMgKG1hcCBmaXJzdCBzcykgKHN0ZXAgKG1hcCByZXN0IHNzKSkpKSkpKV1cclxuICAgKG1hcFxyXG4gICAgKGZuKiBbcDFfXzQ4ODIzI10gKGFwcGx5IGYgcDFfXzQ4ODIzIykpXHJcbiAgICAoc3RlcCAoY29uaiBjb2xscyBjMyBjMiBjMSkpKSkpKVxyXG4ifSB7OnN5bSBqdXh0LCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFuZCByZXR1cm5zIGEgZm4gdGhhdCBpcyB0aGUganV4dGFwb3NpdGlvblxuICBvZiB0aG9zZSBmbnMuICBUaGUgcmV0dXJuZWQgZm4gdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJncywgYW5kXG4gIHJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGVhY2ggZm4gdG8gdGhlXG4gIGFyZ3MgKGxlZnQtdG8tcmlnaHQpLlxuICAoKGp1eHQgYSBiIGMpIHgpID0+IFsoYSB4KSAoYiB4KSAoYyB4KV0iLCA6YXJnbGlzdHMgW1tmXSBbZiBnXSBbZiBnIGhdIFtmIGcgaCAmIGZzXV19LCA6c291cmNlICIoZGVmblxyXG4ganV4dFxyXG4gXCJUYWtlcyBhIHNldCBvZiBmdW5jdGlvbnMgYW5kIHJldHVybnMgYSBmbiB0aGF0IGlzIHRoZSBqdXh0YXBvc2l0aW9uXFxuICBvZiB0aG9zZSBmbnMuICBUaGUgcmV0dXJuZWQgZm4gdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJncywgYW5kXFxuICByZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBlYWNoIGZuIHRvIHRoZVxcbiAgYXJncyAobGVmdC10by1yaWdodCkuXFxuICAoKGp1eHQgYSBiIGMpIHgpID0+IFsoYSB4KSAoYiB4KSAoYyB4KV1cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICAoW10gKHZlY3RvciAoZikpKVxyXG4gICAoW3hdICh2ZWN0b3IgKGYgeCkpKVxyXG4gICAoW3ggeV0gKHZlY3RvciAoZiB4IHkpKSlcclxuICAgKFt4IHkgel0gKHZlY3RvciAoZiB4IHkgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKHZlY3RvciAoYXBwbHkgZiB4IHkgeiBhcmdzKSkpKSlcclxuIChbZiBnXVxyXG4gIChmblxyXG4gICAoW10gKHZlY3RvciAoZikgKGcpKSlcclxuICAgKFt4XSAodmVjdG9yIChmIHgpIChnIHgpKSlcclxuICAgKFt4IHldICh2ZWN0b3IgKGYgeCB5KSAoZyB4IHkpKSlcclxuICAgKFt4IHkgel0gKHZlY3RvciAoZiB4IHkgeikgKGcgeCB5IHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAodmVjdG9yIChhcHBseSBmIHggeSB6IGFyZ3MpIChhcHBseSBnIHggeSB6IGFyZ3MpKSkpKVxyXG4gKFtmIGcgaF1cclxuICAoZm5cclxuICAgKFtdICh2ZWN0b3IgKGYpIChnKSAoaCkpKVxyXG4gICAoW3hdICh2ZWN0b3IgKGYgeCkgKGcgeCkgKGggeCkpKVxyXG4gICAoW3ggeV0gKHZlY3RvciAoZiB4IHkpIChnIHggeSkgKGggeCB5KSkpXHJcbiAgIChbeCB5IHpdICh2ZWN0b3IgKGYgeCB5IHopIChnIHggeSB6KSAoaCB4IHkgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgICh2ZWN0b3JcclxuICAgICAoYXBwbHkgZiB4IHkgeiBhcmdzKVxyXG4gICAgIChhcHBseSBnIHggeSB6IGFyZ3MpXHJcbiAgICAgKGFwcGx5IGggeCB5IHogYXJncykpKSkpXHJcbiAoW2YgZyBoICYgZnNdXHJcbiAgKGxldFxyXG4gICBbZnMgKGxpc3QqIGYgZyBoIGZzKV1cclxuICAgKGZuXHJcbiAgICAoW11cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmbiogW3AxX180ODgzOSMgcDJfXzQ4ODQwI10gKGNvbmogcDFfXzQ4ODM5IyAocDJfXzQ4ODQwIykpKVxyXG4gICAgICBbXVxyXG4gICAgICBmcykpXHJcbiAgICAoW3hdXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm4qIFtwMV9fNDg4NDEjIHAyX180ODg0MiNdIChjb25qIHAxX180ODg0MSMgKHAyX180ODg0MiMgeCkpKVxyXG4gICAgICBbXVxyXG4gICAgICBmcykpXHJcbiAgICAoW3ggeV1cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmbiogW3AxX180ODg0MyMgcDJfXzQ4ODQ0I10gKGNvbmogcDFfXzQ4ODQzIyAocDJfXzQ4ODQ0IyB4IHkpKSlcclxuICAgICAgW11cclxuICAgICAgZnMpKVxyXG4gICAgKFt4IHkgel1cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4NDUjIHAyX180ODg0NiNdXHJcbiAgICAgICAoY29uaiBwMV9fNDg4NDUjIChwMl9fNDg4NDYjIHggeSB6KSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGZzKSlcclxuICAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODg0NyMgcDJfXzQ4ODQ4I11cclxuICAgICAgIChjb25qIHAxX180ODg0NyMgKGFwcGx5IHAyX180ODg0OCMgeCB5IHogYXJncykpKVxyXG4gICAgICBbXVxyXG4gICAgICBmcykpKSkpKVxyXG4ifSB7OnN5bSA8LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvcmRlcixcbiAgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPFxyXG4gXCJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG9yZGVyLFxcbiAgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKGNsanMuY29yZS88IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChjbGpzLmNvcmUvPCB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgIChjbGpzLmNvcmUvPCB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltICpldmFsKiwgOm1ldGEgezpkb2MgIlJ1bnRpbWUgZW52aXJvbm1lbnRzIG1heSBwcm92aWRlIGEgd2F5IHRvIGV2YWx1YXRlIENsb2p1cmVTY3JpcHRcbiAgZm9ybXMuIFdoYXRldmVyIGZ1bmN0aW9uICpldmFsKiBpcyBib3VuZCB0byB3aWxsIGJlIHBhc3NlZCBhbnkgZm9ybXMgd2hpY2hcbiAgc2hvdWxkIGJlIGV2YWx1YXRlZC4ifSwgOnNvdXJjZSAiKGRlZm9uY2VcclxuICpldmFsKlxyXG4gKGZuIFtfXSAodGhyb3cgKGpzL0Vycm9yLiBcImNsanMuY29yZS8qZXZhbCogbm90IGJvdW5kXCIpKSkpXHJcbiJ9IHs6c3ltIHRlc3QsIDptZXRhIHs6ZG9jICJ0ZXN0IFt2XSBmaW5kcyBmbiBhdCBrZXkgOnRlc3QgaW4gdmFyIG1ldGFkYXRhIGFuZCBjYWxscyBpdCxcbiAgcHJlc3VtaW5nIGZhaWx1cmUgd2lsbCB0aHJvdyBleGNlcHRpb24iLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGVzdFxyXG4gXCJ0ZXN0IFt2XSBmaW5kcyBmbiBhdCBrZXkgOnRlc3QgaW4gdmFyIG1ldGFkYXRhIGFuZCBjYWxscyBpdCxcXG4gIHByZXN1bWluZyBmYWlsdXJlIHdpbGwgdGhyb3cgZXhjZXB0aW9uXCJcclxuIFt2XVxyXG4gKGxldCBbZiAoLi1jbGpzJGxhbmckdGVzdCB2KV0gKGlmIGYgKGRvIChmKSA6b2spIDpuby10ZXN0KSkpXHJcbiJ9IHs6c3ltIHJlc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcG9zc2libHkgZW1wdHkgc2VxIG9mIHRoZSBpdGVtcyBhZnRlciB0aGUgZmlyc3QuIENhbGxzIHNlcSBvbiBpdHNcbiAgYXJndW1lbnQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc3RcclxuIFwiUmV0dXJucyBhIHBvc3NpYmx5IGVtcHR5IHNlcSBvZiB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0LiBDYWxscyBzZXEgb24gaXRzXFxuICBhcmd1bWVudC5cIlxyXG4gW2NvbGxdXHJcbiAoaWYtbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoaWZcclxuICAgKGltcGxlbWVudHM/IElTZXEgY29sbClcclxuICAgKC1yZXN0IGNvbGwpXHJcbiAgIChsZXQgW3MgKHNlcSBjb2xsKV0gKGlmIHMgKC1yZXN0IHMpICgpKSkpXHJcbiAgKCkpKVxyXG4ifSB7OnN5bSBleC1kYXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBleGNlcHRpb24gZGF0YSAoYSBtYXApIGlmIGV4IGlzIGFuIEV4Y2VwdGlvbkluZm8uXG4gIE90aGVyd2lzZSByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4LWRhdGFcclxuIFwiUmV0dXJucyBleGNlcHRpb24gZGF0YSAoYSBtYXApIGlmIGV4IGlzIGFuIEV4Y2VwdGlvbkluZm8uXFxuICBPdGhlcndpc2UgcmV0dXJucyBuaWwuXCJcclxuIFtleF1cclxuICh3aGVuIChpbnN0YW5jZT8gRXhjZXB0aW9uSW5mbyBleCkgKC4tZGF0YSBleCkpKVxyXG4ifSB7OnN5bSAtZHJvcC1maXJzdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIG5ldyBjaHVuayBvZiBjb2xsIHdpdGggdGhlIGZpcnN0IGl0ZW0gcmVtb3ZlZC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUNodW5rfSB7OnN5bSBpc2E/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmICg9IGNoaWxkIHBhcmVudCksIG9yIGNoaWxkIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVyaXZlZCBmcm9tXG4gIHBhcmVudCwgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZSBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYVxuICByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkXG4gIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsXG4gIGhpZXJhcmNoeSIsIDphcmdsaXN0cyBbW2NoaWxkIHBhcmVudF0gW2ggY2hpbGQgcGFyZW50XV19LCA6c291cmNlICIoZGVmblxyXG4gaXNhP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgKD0gY2hpbGQgcGFyZW50KSwgb3IgY2hpbGQgaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBkZXJpdmVkIGZyb21cXG4gIHBhcmVudCwgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZSBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYVxcbiAgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZFxcbiAgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWxcXG4gIGhpZXJhcmNoeVwiXHJcbiAoW2NoaWxkIHBhcmVudF0gKGlzYT8gQChnZXQtZ2xvYmFsLWhpZXJhcmNoeSkgY2hpbGQgcGFyZW50KSlcclxuIChbaCBjaGlsZCBwYXJlbnRdXHJcbiAgKG9yXHJcbiAgICg9IGNoaWxkIHBhcmVudClcclxuICAgKGNvbnRhaW5zPyAoKDphbmNlc3RvcnMgaCkgY2hpbGQpIHBhcmVudClcclxuICAgKGFuZFxyXG4gICAgKHZlY3Rvcj8gcGFyZW50KVxyXG4gICAgKHZlY3Rvcj8gY2hpbGQpXHJcbiAgICAoPT0gKGNvdW50IHBhcmVudCkgKGNvdW50IGNoaWxkKSlcclxuICAgIChsb29wXHJcbiAgICAgW3JldCB0cnVlIGkgMF1cclxuICAgICAoaWZcclxuICAgICAgKG9yIChub3QgcmV0KSAoPT0gaSAoY291bnQgcGFyZW50KSkpXHJcbiAgICAgIHJldFxyXG4gICAgICAocmVjdXIgKGlzYT8gaCAoY2hpbGQgaSkgKHBhcmVudCBpKSkgKGluYyBpKSkpKSkpKSlcclxuIn0gezpzeW0gYm9vbGVhbj8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgQm9vbGVhbiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBib29sZWFuP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgQm9vbGVhblwiXHJcbiBbeF1cclxuIChvciAoY2xqcy5jb3JlL3RydWU/IHgpIChjbGpzLmNvcmUvZmFsc2U/IHgpKSlcclxuIn0gezpzeW0gLWNsb25lLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIGNsb25lIG9mIHZhbHVlLiIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6cHJvdG9jb2wgSUNsb25lYWJsZX0gezpzeW0gbXVuZ2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlXHJcbiBbbmFtZV1cclxuIChsZXRcclxuICBbbmFtZSdcclxuICAgKG11bmdlLXN0ciAoc3RyIG5hbWUpKVxyXG4gICBuYW1lJ1xyXG4gICAoY29uZFxyXG4gICAgKGlkZW50aWNhbD8gbmFtZScgXCIuLlwiKVxyXG4gICAgXCJfRE9UX19ET1RfXCJcclxuICAgIChqcy1yZXNlcnZlZD8gbmFtZScpXHJcbiAgICAoc3RyIG5hbWUnIFwiJFwiKVxyXG4gICAgOmVsc2VcclxuICAgIG5hbWUnKV1cclxuICAoaWYgKHN5bWJvbD8gbmFtZSkgKHN5bWJvbCBuYW1lJykgbmFtZScpKSlcclxuIn0gezpzeW0gREVNVU5HRV9NQVAsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBERU1VTkdFX01BUFxyXG4gI2pzIHtcIl9SQlJBQ0VfXCIgXCJ9XCIsIFwiX0NPTE9OX1wiIFwiOlwiLCBcIl9CQU5HX1wiIFwiIVwiLCBcIl9RTUFSS19cIiBcIj9cIiwgXCJfQlNMQVNIX1wiIFwiXFxcXFxcXFxcIiwgXCJfU0xBU0hfXCIgXCIvXCIsIFwiX1BFUkNFTlRfXCIgXCIlXCIsIFwiX1BMVVNfXCIgXCIrXCIsIFwiX1NIQVJQX1wiIFwiI1wiLCBcIl9MQlJBQ0VfXCIgXCJ7XCIsIFwiX0JBUl9cIiBcInxcIiwgXCJfTEJSQUNLX1wiIFwiW1wiLCBcIl9FUV9cIiBcIj1cIiwgXCJfXCIgXCItXCIsIFwiX1RJTERFX1wiIFwiflwiLCBcIl9SQlJBQ0tfXCIgXCJdXCIsIFwiX0dUX1wiIFwiPlwiLCBcIl9TSU5HTEVRVU9URV9cIiBcIidcIiwgXCJfQ0lSQ0FfXCIgXCJAXCIsIFwiX0FNUEVSU0FORF9cIiBcIiZcIiwgXCJfRE9VQkxFUVVPVEVfXCIgXCJcXFxcXFxcIlwiLCBcIl9DQVJFVF9cIiBcIl5cIiwgXCJfTFRfXCIgXCI8XCIsIFwiX1NUQVJfXCIgXCIqXCJ9KVxyXG4ifSB7OnN5bSByZS1zZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBzdWNjZXNzaXZlIG1hdGNoZXMgb2YgcmUgaW4gcy4iLCA6YXJnbGlzdHMgKFtyZSBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmUtc2VxXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHN1Y2Nlc3NpdmUgbWF0Y2hlcyBvZiByZSBpbiBzLlwiXHJcbiBbcmUgc11cclxuIChpZlxyXG4gIChzdHJpbmc/IHMpXHJcbiAgKHJlLXNlcSogcmUgcylcclxuICAodGhyb3cgKGpzL1R5cGVFcnJvci4gXCJyZS1zZXEgbXVzdCBtYXRjaCBhZ2FpbnN0IGEgc3RyaW5nLlwiKSkpKVxyXG4ifSB7OnN5bSBjaGFyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBzdHJpbmcgb2YgbGVuZ3RoIG9uZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hhcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IHN0cmluZyBvZiBsZW5ndGggb25lLlwiXHJcbiBbeF1cclxuIChhbmQgKHN0cmluZz8geCkgKD09IDEgKC4tbGVuZ3RoIHgpKSkpXHJcbiJ9IHs6c3ltIG1ha2UtaGllcmFyY2h5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIGhpZXJhcmNoeSBvYmplY3QgZm9yIHVzZSB3aXRoIGRlcml2ZSwgaXNhPyBldGMuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFrZS1oaWVyYXJjaHlcclxuIFwiQ3JlYXRlcyBhIGhpZXJhcmNoeSBvYmplY3QgZm9yIHVzZSB3aXRoIGRlcml2ZSwgaXNhPyBldGMuXCJcclxuIFtdXHJcbiB7OnBhcmVudHMge30sIDpkZXNjZW5kYW50cyB7fSwgOmFuY2VzdG9ycyB7fX0pXHJcbiJ9IHs6c3ltIFBST1RPQ09MX1NFTlRJTkVMLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZm9uY2UgUFJPVE9DT0xfU0VOVElORUwgI2pzIHt9KVxyXG4ifSB7OnN5bSAtcmVkdWNlLCA6bWV0YSB7OmRvYyAiZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAyIGFyZ3VtZW50cy4gSWYgc3RhcnQgaXMgbm90IHN1cHBsaWVkLFxuICAgICByZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB0aGUgZmlyc3QgMiBpdGVtcyBpbiBjb2xsLCB0aGVuXG4gICAgIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAzcmQgaXRlbSwgZXRjLiIsIDphcmdsaXN0cyAoW2NvbGwgZl0gW2NvbGwgZiBzdGFydF0pfSwgOnByb3RvY29sIElSZWR1Y2V9IHs6c3ltIC1jb3VudCwgOm1ldGEgezpkb2MgIkNhbGN1bGF0ZXMgdGhlIGNvdW50IG9mIGNvbGwgaW4gY29uc3RhbnQgdGltZS4gVXNlZCBieSBjbGpzLmNvcmUvY291bnQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElDb3VudGVkfSB7OnN5bSBzd2FwLXZhbHMhLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSBzd2FwcyB0aGUgdmFsdWUgb2YgYXRvbSB0byBiZTpcbiAgKGFwcGx5IGYgY3VycmVudC12YWx1ZS1vZi1hdG9tIGFyZ3MpLiBOb3RlIHRoYXQgZiBtYXkgYmUgY2FsbGVkXG4gIG11bHRpcGxlIHRpbWVzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuXG4gIFJldHVybnMgW29sZCBuZXddLCB0aGUgdmFsdWUgb2YgdGhlIGF0b20gYmVmb3JlIGFuZCBhZnRlciB0aGUgc3dhcC4iLCA6YXJnbGlzdHMgW1thIGZdIFthIGYgeF0gW2EgZiB4IHldIFthIGYgeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN3YXAtdmFscyFcclxuIFwiQXRvbWljYWxseSBzd2FwcyB0aGUgdmFsdWUgb2YgYXRvbSB0byBiZTpcXG4gIChhcHBseSBmIGN1cnJlbnQtdmFsdWUtb2YtYXRvbSBhcmdzKS4gTm90ZSB0aGF0IGYgbWF5IGJlIGNhbGxlZFxcbiAgbXVsdGlwbGUgdGltZXMsIGFuZCB0aHVzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy5cXG4gIFJldHVybnMgW29sZCBuZXddLCB0aGUgdmFsdWUgb2YgdGhlIGF0b20gYmVmb3JlIGFuZCBhZnRlciB0aGUgc3dhcC5cIlxyXG4gezphZGRlZCBcIjEuOVwifVxyXG4gKFthIGZdIChyZXNldC12YWxzISBhIChmICguLXN0YXRlIGEpKSkpXHJcbiAoW2EgZiB4XSAocmVzZXQtdmFscyEgYSAoZiAoLi1zdGF0ZSBhKSB4KSkpXHJcbiAoW2EgZiB4IHldIChyZXNldC12YWxzISBhIChmICguLXN0YXRlIGEpIHggeSkpKVxyXG4gKFthIGYgeCB5ICYgbW9yZV0gKHJlc2V0LXZhbHMhIGEgKGFwcGx5IGYgKC4tc3RhdGUgYSkgeCB5IG1vcmUpKSkpXHJcbiJ9IHs6c3ltIGtlZXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9uLW5pbCByZXN1bHRzIG9mIChmIGl0ZW0pLiBOb3RlLFxuICB0aGlzIG1lYW5zIGZhbHNlIHJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbmNsdWRlZC4gIGYgbXVzdCBiZSBmcmVlIG9mXG4gIHNpZGUtZWZmZWN0cy4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4ga2VlcFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9uLW5pbCByZXN1bHRzIG9mIChmIGl0ZW0pLiBOb3RlLFxcbiAgdGhpcyBtZWFucyBmYWxzZSByZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW5jbHVkZWQuICBmIG11c3QgYmUgZnJlZSBvZlxcbiAgc2lkZS1lZmZlY3RzLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGZuXHJcbiAgICAoW10gKHJmKSlcclxuICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgIChsZXQgW3YgKGYgaW5wdXQpXSAoaWYgKG5pbD8gdikgcmVzdWx0IChyZiByZXN1bHQgdikpKSkpKSlcclxuIChbZiBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAoaWZcclxuICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgKGxldFxyXG4gICAgICBbYyAoY2h1bmstZmlyc3Qgcykgc2l6ZSAoY291bnQgYykgYiAoY2h1bmstYnVmZmVyIHNpemUpXVxyXG4gICAgICAoZG90aW1lc1xyXG4gICAgICAgW2kgc2l6ZV1cclxuICAgICAgIChsZXQgW3ggKGYgKC1udGggYyBpKSldICh3aGVuLW5vdCAobmlsPyB4KSAoY2h1bmstYXBwZW5kIGIgeCkpKSlcclxuICAgICAgKGNodW5rLWNvbnMgKGNodW5rIGIpIChrZWVwIGYgKGNodW5rLXJlc3QgcykpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFt4IChmIChmaXJzdCBzKSldXHJcbiAgICAgIChpZiAobmlsPyB4KSAoa2VlcCBmIChyZXN0IHMpKSAoY29ucyB4IChrZWVwIGYgKHJlc3QgcykpKSkpKSkpKSlcclxuIn0gezpzeW0gY2hhciwgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBjaGFyIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYXJcclxuIFwiQ29lcmNlIHRvIGNoYXJcIlxyXG4gW3hdXHJcbiAoY29uZFxyXG4gIChudW1iZXI/IHgpXHJcbiAgKC5mcm9tQ2hhckNvZGUganMvU3RyaW5nIHgpXHJcbiAgKGFuZCAoc3RyaW5nPyB4KSAoPT0gKC4tbGVuZ3RoIHgpIDEpKVxyXG4gIHhcclxuICA6ZWxzZVxyXG4gICh0aHJvd1xyXG4gICAoanMvRXJyb3IuIFwiQXJndW1lbnQgdG8gY2hhciBtdXN0IGJlIGEgY2hhcmFjdGVyIG9yIG51bWJlclwiKSkpKVxyXG4ifSB7OnN5bSBtYXBjYXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgY29uY2F0IHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgbWFwXG4gIHRvIGYgYW5kIGNvbGxzLiAgVGh1cyBmdW5jdGlvbiBmIHNob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uLiBSZXR1cm5zXG4gIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb25zIGFyZSBwcm92aWRlZCIsIDphcmdsaXN0cyBbW2ZdIFtmICYgY29sbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXBjYXRcclxuIFwiUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGNvbmNhdCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIG1hcFxcbiAgdG8gZiBhbmQgY29sbHMuICBUaHVzIGZ1bmN0aW9uIGYgc2hvdWxkIHJldHVybiBhIGNvbGxlY3Rpb24uIFJldHVybnNcXG4gIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb25zIGFyZSBwcm92aWRlZFwiXHJcbiB7OmFkZGVkIFwiMS4wXCIsIDpzdGF0aWMgdHJ1ZX1cclxuIChbZl0gKGNvbXAgKG1hcCBmKSBjYXQpKVxyXG4gKFtmICYgY29sbHNdIChhcHBseSBjb25jYXQgKGFwcGx5IG1hcCBmIGNvbGxzKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtbG9uZywgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBsb25nIGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4gSWRlbnRpY2FsIHRvIGBpbnQnLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtbG9uZ1xyXG4gXCJDb2VyY2UgdG8gbG9uZyBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIElkZW50aWNhbCB0byBgaW50Jy5cIlxyXG4gW3hdXHJcbiAoZml4IHgpKVxyXG4ifSB7OnN5bSBtMy1zZWVkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBtMy1zZWVkIDApXHJcbiJ9IHs6c3ltIHNvbWU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgbm90IG5pbCwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb21lP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBub3QgbmlsLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKG5vdCAobmlsPyB4KSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1uZWdhdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLW5lZ2F0ZSBbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtbmVnYXRlIHgpKVxyXG4ifSB7OnN5bSByZW1vdmUtdGFwLCA6bWV0YSB7OmRvYyAiUmVtb3ZlIGYgZnJvbSB0aGUgdGFwIHNldC4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlLXRhcFxyXG4gXCJSZW1vdmUgZiBmcm9tIHRoZSB0YXAgc2V0LlwiXHJcbiBbZl1cclxuIChtYXliZS1pbml0LXRhcHNldClcclxuIChzd2FwISB0YXBzZXQgZGlzaiBmKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSBzeW1ib2wtaWRlbnRpY2FsPywgOm1ldGEgezpkb2MgIkVmZmljaWVudCB0ZXN0IHRvIGRldGVybWluZSB0aGF0IHR3byBzeW1ib2xzIGFyZSBpZGVudGljYWwuIiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3ltYm9sLWlkZW50aWNhbD9cclxuIFwiRWZmaWNpZW50IHRlc3QgdG8gZGV0ZXJtaW5lIHRoYXQgdHdvIHN5bWJvbHMgYXJlIGlkZW50aWNhbC5cIlxyXG4gW3ggeV1cclxuIChpZlxyXG4gIChpZGVudGljYWw/IHggeSlcclxuICB0cnVlXHJcbiAgKGlmXHJcbiAgIChhbmQgKHN5bWJvbD8geCkgKHN5bWJvbD8geSkpXHJcbiAgIChpZGVudGljYWw/ICguLXN0ciB4KSAoLi1zdHIgeSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltICpjb21tYW5kLWxpbmUtYXJncyosIDptZXRhIHs6ZG9jICJBIHNlcXVlbmNlIG9mIHRoZSBzdXBwbGllZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBvciBuaWwgaWZcbiAgbm9uZSB3ZXJlIHN1cHBsaWVkIn0sIDpzb3VyY2UgIihkZWYgKmNvbW1hbmQtbGluZS1hcmdzKiBuaWwpXHJcbiJ9IHs6c3ltIHJldmVyc2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGluIHJldmVyc2Ugb3JkZXIuIE5vdCBsYXp5LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXZlcnNlXHJcbiBcIlJldHVybnMgYSBzZXEgb2YgdGhlIGl0ZW1zIGluIGNvbGwgaW4gcmV2ZXJzZSBvcmRlci4gTm90IGxhenkuXCJcclxuIFtjb2xsXVxyXG4gKGlmIChyZXZlcnNpYmxlPyBjb2xsKSAob3IgKHJzZXEgY29sbCkgKCkpIChyZWR1Y2UgY29uaiAoKSBjb2xsKSkpXHJcbiJ9IHs6c3ltIGluc3Q/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSW5zdCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGluc3Q/IFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSW5zdFwiIFt4XSAoc2F0aXNmaWVzPyBJbnN0IHgpKVxyXG4ifSB7OnN5bSByYW5nZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSBvZiBudW1zIGZyb20gc3RhcnQgKGluY2x1c2l2ZSkgdG8gZW5kXG4gICAoZXhjbHVzaXZlKSwgYnkgc3RlcCwgd2hlcmUgc3RhcnQgZGVmYXVsdHMgdG8gMCwgc3RlcCB0byAxLFxuICAgYW5kIGVuZCB0byBpbmZpbml0eS4iLCA6YXJnbGlzdHMgW1tdIFtlbmRdIFtzdGFydCBlbmRdIFtzdGFydCBlbmQgc3RlcF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmdlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSBvZiBudW1zIGZyb20gc3RhcnQgKGluY2x1c2l2ZSkgdG8gZW5kXFxuICAgKGV4Y2x1c2l2ZSksIGJ5IHN0ZXAsIHdoZXJlIHN0YXJ0IGRlZmF1bHRzIHRvIDAsIHN0ZXAgdG8gMSxcXG4gICBhbmQgZW5kIHRvIGluZmluaXR5LlwiXHJcbiAoW10gKHJhbmdlIDAgKC4tTUFYX1ZBTFVFIGpzL051bWJlcikgMSkpXHJcbiAoW2VuZF0gKHJhbmdlIDAgZW5kIDEpKVxyXG4gKFtzdGFydCBlbmRdIChyYW5nZSBzdGFydCBlbmQgMSkpXHJcbiAoW3N0YXJ0IGVuZCBzdGVwXVxyXG4gIChjb25kXHJcbiAgIChwb3M/IHN0ZXApXHJcbiAgIChpZiAoPD0gZW5kIHN0YXJ0KSAoKSAoUmFuZ2UuIG5pbCBzdGFydCBlbmQgc3RlcCBuaWwgbmlsIG5pbCkpXHJcbiAgIChuZWc/IHN0ZXApXHJcbiAgIChpZiAoPj0gZW5kIHN0YXJ0KSAoKSAoUmFuZ2UuIG5pbCBzdGFydCBlbmQgc3RlcCBuaWwgbmlsIG5pbCkpXHJcbiAgIDplbHNlXHJcbiAgIChpZiAoPT0gZW5kIHN0YXJ0KSAoKSAocmVwZWF0IHN0YXJ0KSkpKSlcclxuIn0gezpzeW0gYml0LWNvdW50LCA6bWV0YSB7OmRvYyAiQ291bnRzIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gbiIsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtY291bnRcclxuIFwiQ291bnRzIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gblwiXHJcbiBbdl1cclxuIChsZXRcclxuICBbdlxyXG4gICAoLSB2IChiaXQtYW5kIChiaXQtc2hpZnQtcmlnaHQgdiAxKSAxNDMxNjU1NzY1KSlcclxuICAgdlxyXG4gICAoKyAoYml0LWFuZCB2IDg1ODk5MzQ1OSkgKGJpdC1hbmQgKGJpdC1zaGlmdC1yaWdodCB2IDIpIDg1ODk5MzQ1OSkpXVxyXG4gIChiaXQtc2hpZnQtcmlnaHRcclxuICAgKCogKGJpdC1hbmQgKCsgdiAoYml0LXNoaWZ0LXJpZ2h0IHYgNCkpIDI1MjY0NTEzNSkgMTY4NDMwMDkpXHJcbiAgIDI0KSkpXHJcbiJ9IHs6c3ltIHNvcnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc29ydGVkIHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsLiBDb21wIGNhbiBiZVxuICAgYm9vbGVhbi12YWx1ZWQgY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgYSAtLzAvKyB2YWx1ZWQgY29tcGFyYXRvci5cbiAgIENvbXAgZGVmYXVsdHMgdG8gY29tcGFyZS4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbY29tcCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydFxyXG4gXCJSZXR1cm5zIGEgc29ydGVkIHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsLiBDb21wIGNhbiBiZVxcbiAgIGJvb2xlYW4tdmFsdWVkIGNvbXBhcmlzb24gZnVuY3Rpb24sIG9yIGEgLS8wLysgdmFsdWVkIGNvbXBhcmF0b3IuXFxuICAgQ29tcCBkZWZhdWx0cyB0byBjb21wYXJlLlwiXHJcbiAoW2NvbGxdIChzb3J0IGNvbXBhcmUgY29sbCkpXHJcbiAoW2NvbXAgY29sbF1cclxuICAoaWZcclxuICAgKHNlcSBjb2xsKVxyXG4gICAobGV0XHJcbiAgICBbYSAodG8tYXJyYXkgY29sbCldXHJcbiAgICAoZ2FycmF5L3N0YWJsZVNvcnQgYSAoZm4tPmNvbXBhcmF0b3IgY29tcCkpXHJcbiAgICAoc2VxIGEpKVxyXG4gICAoKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtaW5jLWludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtaW5jLWludCBbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtaW5jLWludCB4KSlcclxuIn0gezpzeW0gLWNvbXBhcmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHggaXMgbG9naWNhbGx5XG4gICAgICdsZXNzIHRoYW4nLCAnZXF1YWwgdG8nLCBvciAnZ3JlYXRlciB0aGFuJyB5LiIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnByb3RvY29sIElDb21wYXJhYmxlfSB7OnN5bSBtYXAtaW5kZXhlZCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIDBcbiAgYW5kIHRoZSBmaXJzdCBpdGVtIG9mIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gMSBhbmQgdGhlIHNlY29uZFxuICBpdGVtIGluIGNvbGwsIGV0YywgdW50aWwgY29sbCBpcyBleGhhdXN0ZWQuIFRodXMgZnVuY3Rpb24gZiBzaG91bGRcbiAgYWNjZXB0IDIgYXJndW1lbnRzLCBpbmRleCBhbmQgaXRlbS4gUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlblxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtaW5kZXhlZFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byAwXFxuICBhbmQgdGhlIGZpcnN0IGl0ZW0gb2YgY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byAxIGFuZCB0aGUgc2Vjb25kXFxuICBpdGVtIGluIGNvbGwsIGV0YywgdW50aWwgY29sbCBpcyBleGhhdXN0ZWQuIFRodXMgZnVuY3Rpb24gZiBzaG91bGRcXG4gIGFjY2VwdCAyIGFyZ3VtZW50cywgaW5kZXggYW5kIGl0ZW0uIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW5cXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbaSAodm9sYXRpbGUhIC0xKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF0gKHJmIHJlc3VsdCAoZiAodnN3YXAhIGkgaW5jKSBpbnB1dCkpKSkpKSlcclxuIChbZiBjb2xsXVxyXG4gIChsZXRmblxyXG4gICBbKG1hcGlcclxuICAgICBbaWR4IGNvbGxdXHJcbiAgICAgKGxhenktc2VxXHJcbiAgICAgICh3aGVuLWxldFxyXG4gICAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtjIChjaHVuay1maXJzdCBzKSBzaXplIChjb3VudCBjKSBiIChjaHVuay1idWZmZXIgc2l6ZSldXHJcbiAgICAgICAgIChkb3RpbWVzIFtpIHNpemVdIChjaHVuay1hcHBlbmQgYiAoZiAoKyBpZHggaSkgKC1udGggYyBpKSkpKVxyXG4gICAgICAgICAoY2h1bmstY29ucyAoY2h1bmsgYikgKG1hcGkgKCsgaWR4IHNpemUpIChjaHVuay1yZXN0IHMpKSkpXHJcbiAgICAgICAgKGNvbnMgKGYgaWR4IChmaXJzdCBzKSkgKG1hcGkgKGluYyBpZHgpIChyZXN0IHMpKSkpKSkpXVxyXG4gICAobWFwaSAwIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIGFycmF5LWxpc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBhcnJheS1saXN0IFtdIChBcnJheUxpc3QuIChhcnJheSkpKVxyXG4ifSB7OnN5bSByYW5kLW50aCwgOm1ldGEgezpkb2MgIlJldHVybiBhIHJhbmRvbSBlbGVtZW50IG9mIHRoZSAoc2VxdWVudGlhbCkgY29sbGVjdGlvbi4gV2lsbCBoYXZlXG4gIHRoZSBzYW1lIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhcyBudGggZm9yIHRoZSBnaXZlblxuICBjb2xsZWN0aW9uLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kLW50aFxyXG4gXCJSZXR1cm4gYSByYW5kb20gZWxlbWVudCBvZiB0aGUgKHNlcXVlbnRpYWwpIGNvbGxlY3Rpb24uIFdpbGwgaGF2ZVxcbiAgdGhlIHNhbWUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFzIG50aCBmb3IgdGhlIGdpdmVuXFxuICBjb2xsZWN0aW9uLlwiXHJcbiBbY29sbF1cclxuIChudGggY29sbCAocmFuZC1pbnQgKGNvdW50IGNvbGwpKSkpXHJcbiJ9IHs6c3ltIGNvbXAsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHNldCBvZiBmdW5jdGlvbnMgYW5kIHJldHVybnMgYSBmbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvblxuICBvZiB0aG9zZSBmbnMuICBUaGUgcmV0dXJuZWQgZm4gdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJncyxcbiAgYXBwbGllcyB0aGUgcmlnaHRtb3N0IG9mIGZucyB0byB0aGUgYXJncywgdGhlIG5leHRcbiAgZm4gKHJpZ2h0LXRvLWxlZnQpIHRvIHRoZSByZXN1bHQsIGV0Yy4iLCA6YXJnbGlzdHMgW1tdIFtmXSBbZiBnXSBbZiBnIGhdIFtmMSBmMiBmMyAmIGZzXV19LCA6c291cmNlICIoZGVmblxyXG4gY29tcFxyXG4gXCJUYWtlcyBhIHNldCBvZiBmdW5jdGlvbnMgYW5kIHJldHVybnMgYSBmbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvblxcbiAgb2YgdGhvc2UgZm5zLiAgVGhlIHJldHVybmVkIGZuIHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3MsXFxuICBhcHBsaWVzIHRoZSByaWdodG1vc3Qgb2YgZm5zIHRvIHRoZSBhcmdzLCB0aGUgbmV4dFxcbiAgZm4gKHJpZ2h0LXRvLWxlZnQpIHRvIHRoZSByZXN1bHQsIGV0Yy5cIlxyXG4gKFtdIGlkZW50aXR5KVxyXG4gKFtmXSBmKVxyXG4gKFtmIGddXHJcbiAgKGZuXHJcbiAgIChbXSAoZiAoZykpKVxyXG4gICAoW3hdIChmIChnIHgpKSlcclxuICAgKFt4IHldIChmIChnIHggeSkpKVxyXG4gICAoW3ggeSB6XSAoZiAoZyB4IHkgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGYgKGFwcGx5IGcgeCB5IHogYXJncykpKSkpXHJcbiAoW2YgZyBoXVxyXG4gIChmblxyXG4gICAoW10gKGYgKGcgKGgpKSkpXHJcbiAgIChbeF0gKGYgKGcgKGggeCkpKSlcclxuICAgKFt4IHldIChmIChnIChoIHggeSkpKSlcclxuICAgKFt4IHkgel0gKGYgKGcgKGggeCB5IHopKSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoZiAoZyAoYXBwbHkgaCB4IHkgeiBhcmdzKSkpKSkpXHJcbiAoW2YxIGYyIGYzICYgZnNdXHJcbiAgKGxldFxyXG4gICBbZnMgKHJldmVyc2UgKGxpc3QqIGYxIGYyIGYzIGZzKSldXHJcbiAgIChmblxyXG4gICAgWyYgYXJnc11cclxuICAgIChsb29wXHJcbiAgICAgW3JldCAoYXBwbHkgKGZpcnN0IGZzKSBhcmdzKSBmcyAobmV4dCBmcyldXHJcbiAgICAgKGlmIGZzIChyZWN1ciAoKGZpcnN0IGZzKSByZXQpIChuZXh0IGZzKSkgcmV0KSkpKSkpXHJcbiJ9IHs6c3ltIGFycmF5LWNodW5rLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2Fycl0gW2FyciBvZmZdIFthcnIgb2ZmIGVuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5LWNodW5rXHJcbiAoW2Fycl0gKEFycmF5Q2h1bmsuIGFyciAwIChhbGVuZ3RoIGFycikpKVxyXG4gKFthcnIgb2ZmXSAoQXJyYXlDaHVuay4gYXJyIG9mZiAoYWxlbmd0aCBhcnIpKSlcclxuIChbYXJyIG9mZiBlbmRdIChBcnJheUNodW5rLiBhcnIgb2ZmIGVuZCkpKVxyXG4ifSB7OnN5bSBkaXNwYXRjaC1mbiwgOm1ldGEgezpkb2MgIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybiBpdCdzIGRpc3BhdGNoLWZuLiIsIDphcmdsaXN0cyAoW211bHRpZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXNwYXRjaC1mblxyXG4gXCJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm4gaXQncyBkaXNwYXRjaC1mbi5cIlxyXG4gW211bHRpZm5dXHJcbiAoLWRpc3BhdGNoLWZuIG11bHRpZm4pKVxyXG4ifSB7OnN5bSBiaXQtc2hpZnQtcmlnaHQtemVyby1maWxsLCA6bWV0YSB7OmRvYyAiREVQUkVDQVRFRDogQml0d2lzZSBzaGlmdCByaWdodCB3aXRoIHplcm8gZmlsbCIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1zaGlmdC1yaWdodC16ZXJvLWZpbGxcclxuIFwiREVQUkVDQVRFRDogQml0d2lzZSBzaGlmdCByaWdodCB3aXRoIHplcm8gZmlsbFwiXHJcbiBbeCBuXVxyXG4gKGNsanMuY29yZS9iaXQtc2hpZnQtcmlnaHQtemVyby1maWxsIHggbikpXHJcbiJ9IHs6c3ltIC1hcy10cmFuc2llbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3LCB0cmFuc2llbnQgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbiwgaW4gY29uc3RhbnQgdGltZS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUVkaXRhYmxlQ29sbGVjdGlvbn0gezpzeW0gZG9ydW4sIDptZXRhIHs6ZG9jICJXaGVuIGxhenkgc2VxdWVuY2VzIGFyZSBwcm9kdWNlZCB2aWEgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzaWRlXG4gIGVmZmVjdHMsIGFueSBlZmZlY3RzIG90aGVyIHRoYW4gdGhvc2UgbmVlZGVkIHRvIHByb2R1Y2UgdGhlIGZpcnN0XG4gIGVsZW1lbnQgaW4gdGhlIHNlcSBkbyBub3Qgb2NjdXIgdW50aWwgdGhlIHNlcSBpcyBjb25zdW1lZC4gZG9ydW4gY2FuXG4gIGJlIHVzZWQgdG8gZm9yY2UgYW55IGVmZmVjdHMuIFdhbGtzIHRocm91Z2ggdGhlIHN1Y2Nlc3NpdmUgbmV4dHMgb2ZcbiAgdGhlIHNlcSwgZG9lcyBub3QgcmV0YWluIHRoZSBoZWFkIGFuZCByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbbiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZG9ydW5cclxuIFwiV2hlbiBsYXp5IHNlcXVlbmNlcyBhcmUgcHJvZHVjZWQgdmlhIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2lkZVxcbiAgZWZmZWN0cywgYW55IGVmZmVjdHMgb3RoZXIgdGhhbiB0aG9zZSBuZWVkZWQgdG8gcHJvZHVjZSB0aGUgZmlyc3RcXG4gIGVsZW1lbnQgaW4gdGhlIHNlcSBkbyBub3Qgb2NjdXIgdW50aWwgdGhlIHNlcSBpcyBjb25zdW1lZC4gZG9ydW4gY2FuXFxuICBiZSB1c2VkIHRvIGZvcmNlIGFueSBlZmZlY3RzLiBXYWxrcyB0aHJvdWdoIHRoZSBzdWNjZXNzaXZlIG5leHRzIG9mXFxuICB0aGUgc2VxLCBkb2VzIG5vdCByZXRhaW4gdGhlIGhlYWQgYW5kIHJldHVybnMgbmlsLlwiXHJcbiAoW2NvbGxdICh3aGVuLWxldCBbcyAoc2VxIGNvbGwpXSAocmVjdXIgKG5leHQgcykpKSlcclxuIChbbiBjb2xsXVxyXG4gICh3aGVuIChhbmQgKHNlcSBjb2xsKSAocG9zPyBuKSkgKHJlY3VyIChkZWMgbikgKG5leHQgY29sbCkpKSkpXHJcbiJ9IHs6c3ltIHByLXNlcXVlbnRpYWwtd3JpdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3dyaXRlciBwcmludC1vbmUgYmVnaW4gc2VwIGVuZCBvcHRzIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwci1zZXF1ZW50aWFsLXdyaXRlclxyXG4gW3dyaXRlciBwcmludC1vbmUgYmVnaW4gc2VwIGVuZCBvcHRzIGNvbGxdXHJcbiAoYmluZGluZ1xyXG4gIFsqcHJpbnQtbGV2ZWwqICh3aGVuLW5vdCAobmlsPyAqcHJpbnQtbGV2ZWwqKSAoZGVjICpwcmludC1sZXZlbCopKV1cclxuICAoaWZcclxuICAgKGFuZCAobm90IChuaWw/ICpwcmludC1sZXZlbCopKSAobmVnPyAqcHJpbnQtbGV2ZWwqKSlcclxuICAgKC13cml0ZSB3cml0ZXIgXCIjXCIpXHJcbiAgIChkb1xyXG4gICAgKC13cml0ZSB3cml0ZXIgYmVnaW4pXHJcbiAgICAoaWZcclxuICAgICAoemVybz8gKDpwcmludC1sZW5ndGggb3B0cykpXHJcbiAgICAgKHdoZW4gKHNlcSBjb2xsKSAoLXdyaXRlIHdyaXRlciAob3IgKDptb3JlLW1hcmtlciBvcHRzKSBcIi4uLlwiKSkpXHJcbiAgICAgKGRvXHJcbiAgICAgICh3aGVuIChzZXEgY29sbCkgKHByaW50LW9uZSAoZmlyc3QgY29sbCkgd3JpdGVyIG9wdHMpKVxyXG4gICAgICAobG9vcFxyXG4gICAgICAgW2NvbGwgKG5leHQgY29sbCkgbiAoZGVjICg6cHJpbnQtbGVuZ3RoIG9wdHMpKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChhbmQgY29sbCAob3IgKG5pbD8gbikgKG5vdCAoemVybz8gbikpKSlcclxuICAgICAgICAoZG9cclxuICAgICAgICAgKC13cml0ZSB3cml0ZXIgc2VwKVxyXG4gICAgICAgICAocHJpbnQtb25lIChmaXJzdCBjb2xsKSB3cml0ZXIgb3B0cylcclxuICAgICAgICAgKHJlY3VyIChuZXh0IGNvbGwpIChkZWMgbikpKVxyXG4gICAgICAgICh3aGVuXHJcbiAgICAgICAgIChhbmQgKHNlcSBjb2xsKSAoemVybz8gbikpXHJcbiAgICAgICAgICgtd3JpdGUgd3JpdGVyIHNlcClcclxuICAgICAgICAgKC13cml0ZSB3cml0ZXIgKG9yICg6bW9yZS1tYXJrZXIgb3B0cykgXCIuLi5cIikpKSkpKSlcclxuICAgICgtd3JpdGUgd3JpdGVyIGVuZCkpKSkpXHJcbiJ9IHs6c3ltIHNpbXBsZS1zeW1ib2w/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCB3aXRob3V0IGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNpbXBsZS1zeW1ib2w/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgd2l0aG91dCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChhbmQgKHN5bWJvbD8geCkgKG5pbD8gKG5hbWVzcGFjZSB4KSkpKVxyXG4ifSB7OnN5bSBJSW5kZXhlZCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjb2xsZWN0aW9ucyB0byBwcm92aWRlIGluZGV4ZWQtYmFzZWQgYWNjZXNzIHRvIHRoZWlyIGl0ZW1zLiJ9LCA6bWV0aG9kcyAoLW50aCl9IHs6c3ltIGRpc2osIDptZXRhIHs6ZG9jICJkaXNqW29pbl0uIFJldHVybnMgYSBuZXcgc2V0IG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0XG4gIGRvZXMgbm90IGNvbnRhaW4ga2V5KHMpLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtjb2xsIGtdIFtjb2xsIGsgJiBrc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc2pcclxuIFwiZGlzaltvaW5dLiBSZXR1cm5zIGEgbmV3IHNldCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdFxcbiAgZG9lcyBub3QgY29udGFpbiBrZXkocykuXCJcclxuIChbY29sbF0gY29sbClcclxuIChbY29sbCBrXSAod2hlbi1ub3QgKG5pbD8gY29sbCkgKC1kaXNqb2luIGNvbGwgaykpKVxyXG4gKFtjb2xsIGsgJiBrc11cclxuICAod2hlbi1ub3RcclxuICAgKG5pbD8gY29sbClcclxuICAgKGxldFxyXG4gICAgW3JldCAoZGlzaiBjb2xsIGspXVxyXG4gICAgKGlmIGtzIChyZWN1ciByZXQgKGZpcnN0IGtzKSAobmV4dCBrcykpIHJldCkpKSkpXHJcbiJ9IHs6c3ltIElQcmludFdpdGhXcml0ZXIsIDptZXRhIHs6ZG9jICJUaGUgb2xkIElQcmludGFibGUgcHJvdG9jb2wncyBpbXBsZW1lbnRhdGlvbiBjb25zaXN0ZWQgb2YgYnVpbGRpbmcgYSBnaWFudFxuICAgbGlzdCBvZiBzdHJpbmdzIHRvIGNvbmNhdGVuYXRlLiAgVGhpcyBpbnZvbHZlZCBsb3RzIG9mIGNvbmNhdCBjYWxscyxcbiAgIGludGVybWVkaWF0ZSB2ZWN0b3JzLCBhbmQgbGF6eS1zZXFzLCBhbmQgd2FzIHZlcnkgc2xvdyBpbiBzb21lIG9sZGVyIEpTXG4gICBlbmdpbmVzLiAgSVByaW50V2l0aFdyaXRlciBpbXBsZW1lbnRzIHByaW50aW5nIHZpYSB0aGUgSVdyaXRlciBwcm90b2NvbCwgc28gaXRcbiAgIGJlIGltcGxlbWVudGVkIGVmZmljaWVudGx5IGluIHRlcm1zIG9mIGUuZy4gYSBTdHJpbmdCdWZmZXIgYXBwZW5kLiJ9LCA6bWV0aG9kcyAoLXByLXdyaXRlcil9IHs6c3ltIElWZWN0b3IsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHZlY3RvciBmdW5jdGlvbmFsaXR5IHRvIGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWFzc29jLW4pfSB7OnN5bSBJSXRlcmFibGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgaXRlcmF0aW5nIG92ZXIgYSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWl0ZXJhdG9yKX0gezpzeW0gZXZhbCwgOm1ldGEgezpkb2MgIkV2YWx1YXRlcyB0aGUgZm9ybSBkYXRhIHN0cnVjdHVyZSAobm90IHRleHQhKSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlxuICBEZWxlZ2F0ZXMgdG8gY2xqcy5jb3JlLypldmFsKi4gSW50ZW5kZWQgZm9yIHVzZSBpbiBzZWxmLWhvc3RlZCBDbG9qdXJlU2NyaXB0LFxuICB3aGljaCBzZXRzIHVwIGFuIGltcGxlbWVudGF0aW9uIG9mIGNsanMuY29yZS8qZXZhbCogZm9yIHRoYXQgZW52aXJvbm1lbnQuIiwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2YWxcclxuIFwiRXZhbHVhdGVzIHRoZSBmb3JtIGRhdGEgc3RydWN0dXJlIChub3QgdGV4dCEpIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXFxuICBEZWxlZ2F0ZXMgdG8gY2xqcy5jb3JlLypldmFsKi4gSW50ZW5kZWQgZm9yIHVzZSBpbiBzZWxmLWhvc3RlZCBDbG9qdXJlU2NyaXB0LFxcbiAgd2hpY2ggc2V0cyB1cCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBjbGpzLmNvcmUvKmV2YWwqIGZvciB0aGF0IGVudmlyb25tZW50LlwiXHJcbiBbZm9ybV1cclxuICgqZXZhbCogZm9ybSkpXHJcbiJ9IHs6c3ltIGNvbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHNlcSB3aGVyZSB4IGlzIHRoZSBmaXJzdCBlbGVtZW50IGFuZCBjb2xsIGlzIHRoZSByZXN0LiIsIDphcmdsaXN0cyAoW3ggY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnNcclxuIFwiUmV0dXJucyBhIG5ldyBzZXEgd2hlcmUgeCBpcyB0aGUgZmlyc3QgZWxlbWVudCBhbmQgY29sbCBpcyB0aGUgcmVzdC5cIlxyXG4gW3ggY29sbF1cclxuIChjb25kXHJcbiAgKG5pbD8gY29sbClcclxuICAoTGlzdC4gbmlsIHggbmlsIDEgbmlsKVxyXG4gIChpbXBsZW1lbnRzPyBJU2VxIGNvbGwpXHJcbiAgKENvbnMuIG5pbCB4IGNvbGwgbmlsKVxyXG4gIDpkZWZhdWx0XHJcbiAgKENvbnMuIG5pbCB4IChzZXEgY29sbCkgbmlsKSkpXHJcbiJ9IHs6c3ltIGZsb2F0cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBmbG9hdHMgW3hdIHgpXHJcbiJ9IHs6c3ltIHBvcz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIGZhbHNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvcz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG51bSBpcyBncmVhdGVyIHRoYW4gemVybywgZWxzZSBmYWxzZVwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvcG9zPyB4KSlcclxuIn0gezpzeW0gZm5pbCwgOm1ldGEgezpkb2MgIlRha2VzIGEgZnVuY3Rpb24gZiwgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIGYsIHJlcGxhY2luZ1xuICBhIG5pbCBmaXJzdCBhcmd1bWVudCB0byBmIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlIHguIEhpZ2hlciBhcml0eVxuICB2ZXJzaW9ucyBjYW4gcmVwbGFjZSBhcmd1bWVudHMgaW4gdGhlIHNlY29uZCBhbmQgdGhpcmRcbiAgcG9zaXRpb25zICh5LCB6KS4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBmIGNhbiB0YWtlIGFueSBudW1iZXIgb2ZcbiAgYXJndW1lbnRzLCBub3QganVzdCB0aGUgb25lKHMpIGJlaW5nIG5pbC1wYXRjaGVkLiIsIDphcmdsaXN0cyBbW2YgeF0gW2YgeCB5XSBbZiB4IHkgel1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZuaWxcclxuIFwiVGFrZXMgYSBmdW5jdGlvbiBmLCBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgZiwgcmVwbGFjaW5nXFxuICBhIG5pbCBmaXJzdCBhcmd1bWVudCB0byBmIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlIHguIEhpZ2hlciBhcml0eVxcbiAgdmVyc2lvbnMgY2FuIHJlcGxhY2UgYXJndW1lbnRzIGluIHRoZSBzZWNvbmQgYW5kIHRoaXJkXFxuICBwb3NpdGlvbnMgKHksIHopLiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGYgY2FuIHRha2UgYW55IG51bWJlciBvZlxcbiAgYXJndW1lbnRzLCBub3QganVzdCB0aGUgb25lKHMpIGJlaW5nIG5pbC1wYXRjaGVkLlwiXHJcbiAoW2YgeF1cclxuICAoZm5cclxuICAgKFthXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSkpXHJcbiAgIChbYSBiXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSBiKSlcclxuICAgKFthIGIgY10gKGYgKGlmIChuaWw/IGEpIHggYSkgYiBjKSlcclxuICAgKFthIGIgYyAmIGRzXSAoYXBwbHkgZiAoaWYgKG5pbD8gYSkgeCBhKSBiIGMgZHMpKSkpXHJcbiAoW2YgeCB5XVxyXG4gIChmblxyXG4gICAoW2EgYl0gKGYgKGlmIChuaWw/IGEpIHggYSkgKGlmIChuaWw/IGIpIHkgYikpKVxyXG4gICAoW2EgYiBjXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSAoaWYgKG5pbD8gYikgeSBiKSBjKSlcclxuICAgKFthIGIgYyAmIGRzXSAoYXBwbHkgZiAoaWYgKG5pbD8gYSkgeCBhKSAoaWYgKG5pbD8gYikgeSBiKSBjIGRzKSkpKVxyXG4gKFtmIHggeSB6XVxyXG4gIChmblxyXG4gICAoW2EgYl0gKGYgKGlmIChuaWw/IGEpIHggYSkgKGlmIChuaWw/IGIpIHkgYikpKVxyXG4gICAoW2EgYiBjXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSAoaWYgKG5pbD8gYikgeSBiKSAoaWYgKG5pbD8gYykgeiBjKSkpXHJcbiAgIChbYSBiIGMgJiBkc11cclxuICAgIChhcHBseVxyXG4gICAgIGZcclxuICAgICAoaWYgKG5pbD8gYSkgeCBhKVxyXG4gICAgIChpZiAobmlsPyBiKSB5IGIpXHJcbiAgICAgKGlmIChuaWw/IGMpIHogYylcclxuICAgICBkcykpKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLXdpdGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIHRoYXQgY29uc2lzdHMgb2YgdGhlIHJlc3Qgb2YgdGhlIG1hcHMgY29uai1lZCBvbnRvXG4gIHRoZSBmaXJzdC4gIElmIGEga2V5IG9jY3VycyBpbiBtb3JlIHRoYW4gb25lIG1hcCwgdGhlIG1hcHBpbmcocylcbiAgZnJvbSB0aGUgbGF0dGVyIChsZWZ0LXRvLXJpZ2h0KSB3aWxsIGJlIGNvbWJpbmVkIHdpdGggdGhlIG1hcHBpbmcgaW5cbiAgdGhlIHJlc3VsdCBieSBjYWxsaW5nIChmIHZhbC1pbi1yZXN1bHQgdmFsLWluLWxhdHRlcikuIiwgOmFyZ2xpc3RzIChbZiAmIG1hcHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS13aXRoXHJcbiBcIlJldHVybnMgYSBtYXAgdGhhdCBjb25zaXN0cyBvZiB0aGUgcmVzdCBvZiB0aGUgbWFwcyBjb25qLWVkIG9udG9cXG4gIHRoZSBmaXJzdC4gIElmIGEga2V5IG9jY3VycyBpbiBtb3JlIHRoYW4gb25lIG1hcCwgdGhlIG1hcHBpbmcocylcXG4gIGZyb20gdGhlIGxhdHRlciAobGVmdC10by1yaWdodCkgd2lsbCBiZSBjb21iaW5lZCB3aXRoIHRoZSBtYXBwaW5nIGluXFxuICB0aGUgcmVzdWx0IGJ5IGNhbGxpbmcgKGYgdmFsLWluLXJlc3VsdCB2YWwtaW4tbGF0dGVyKS5cIlxyXG4gW2YgJiBtYXBzXVxyXG4gKHdoZW5cclxuICAoc29tZSBpZGVudGl0eSBtYXBzKVxyXG4gIChsZXRcclxuICAgW21lcmdlLWVudHJ5XHJcbiAgICAoZm5cclxuICAgICBbbSBlXVxyXG4gICAgIChsZXRcclxuICAgICAgW2sgKGtleSBlKSB2ICh2YWwgZSldXHJcbiAgICAgIChpZiAoY29udGFpbnM/IG0gaykgKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgdikpIChhc3NvYyBtIGsgdikpKSlcclxuICAgIG1lcmdlMlxyXG4gICAgKGZuIFttMSBtMl0gKHJlZHVjZSBtZXJnZS1lbnRyeSAob3IgbTEge30pIChzZXEgbTIpKSldXHJcbiAgIChyZWR1Y2UgbWVyZ2UyIG1hcHMpKSkpXHJcbiJ9IHs6c3ltIG50aHJlc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudGggcmVzdCBvZiBjb2xsLCBjb2xsIHdoZW4gbiBpcyAwLiIsIDphcmdsaXN0cyAoW2NvbGwgbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG50aHJlc3RcclxuIFwiUmV0dXJucyB0aGUgbnRoIHJlc3Qgb2YgY29sbCwgY29sbCB3aGVuIG4gaXMgMC5cIlxyXG4gW2NvbGwgbl1cclxuIChsb29wXHJcbiAgW24gbiB4cyBjb2xsXVxyXG4gIChpZi1sZXQgW3hzIChhbmQgKHBvcz8gbikgKHNlcSB4cykpXSAocmVjdXIgKGRlYyBuKSAocmVzdCB4cykpIHhzKSkpXHJcbiJ9IHs6c3ltICp3YXJuLW9uLWluZmVyKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKndhcm4tb24taW5mZXIqIGZhbHNlKVxyXG4ifSB7OnN5bSAtZmluZCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1hcCBlbnRyeSBmb3Iga2V5LCBvciBuaWwgaWYga2V5IG5vdCBwcmVzZW50LiIsIDphcmdsaXN0cyAoW2NvbGwga10pfSwgOnByb3RvY29sIElGaW5kfSB7OnN5bSBzZXF1ZW50aWFsPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJU2VxdWVudGlhbCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXF1ZW50aWFsP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVNlcXVlbnRpYWxcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJU2VxdWVudGlhbCB4KSlcclxuIn0gezpzeW0gbTMtbWl4LUgxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2gxIGsxXSl9LCA6c291cmNlICIoZGVmblxyXG4gbTMtbWl4LUgxXHJcbiBbaDEgazFdXHJcbiAoaW50XHJcbiAgKC0+XHJcbiAgIChpbnQgaDEpXHJcbiAgIChiaXQteG9yIChpbnQgazEpKVxyXG4gICAoaW50LXJvdGF0ZS1sZWZ0IDEzKVxyXG4gICAoaW11bCA1KVxyXG4gICAoKyAoaW50IDM4NjQyOTIxOTYpKSkpKVxyXG4ifSB7OnN5bSBwcmltLXNlcSwgOm1ldGEgezpkb2MgIkNyZWF0ZSBzZXEgZnJvbSBhIHByaW1pdGl2ZSBKYXZhU2NyaXB0IEFycmF5LWxpa2UuIiwgOmFyZ2xpc3RzIFtbcHJpbV0gW3ByaW0gaV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW0tc2VxXHJcbiBcIkNyZWF0ZSBzZXEgZnJvbSBhIHByaW1pdGl2ZSBKYXZhU2NyaXB0IEFycmF5LWxpa2UuXCJcclxuIChbcHJpbV0gKHByaW0tc2VxIHByaW0gMCkpXHJcbiAoW3ByaW0gaV0gKHdoZW4gKDwgaSAoYWxlbmd0aCBwcmltKSkgKEluZGV4ZWRTZXEuIHByaW0gaSBuaWwpKSkpXHJcbiJ9IHs6c3ltICpwcmludC1sZXZlbCosIDptZXRhIHs6ZG9jICIqcHJpbnQtbGV2ZWwqIGNvbnRyb2xzIGhvdyBtYW55IGxldmVscyBkZWVwIHRoZSBwcmludGVyIHdpbGxcbiAgcHJpbnQgbmVzdGVkIG9iamVjdHMuIElmIGl0IGlzIGJvdW5kIHRvIGxvZ2ljYWwgZmFsc2UsIHRoZXJlIGlzIG5vXG4gIGxpbWl0LiBPdGhlcndpc2UsIGl0IG11c3QgYmUgYm91bmQgdG8gYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtXG4gIGxldmVsIHRvIHByaW50LiBFYWNoIGFyZ3VtZW50IHRvIHByaW50IGlzIGF0IGxldmVsIDA7IGlmIGFuIGFyZ3VtZW50IGlzIGFcbiAgY29sbGVjdGlvbiwgaXRzIGl0ZW1zIGFyZSBhdCBsZXZlbCAxOyBhbmQgc28gb24uIElmIGFuIG9iamVjdCBpcyBhXG4gIGNvbGxlY3Rpb24gYW5kIGlzIGF0IGEgbGV2ZWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBib3VuZCB0b1xuICAqcHJpbnQtbGV2ZWwqLCB0aGUgcHJpbnRlciBwcmludHMgJyMnIHRvIHJlcHJlc2VudCBpdC4gVGhlIHJvb3QgYmluZGluZ1xuICBpcyBuaWwgaW5kaWNhdGluZyBubyBsaW1pdC4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbGV2ZWwqIG5pbClcclxuIn0gezpzeW0gc2h1ZmZsZSwgOm1ldGEgezpkb2MgIlJldHVybiBhIHJhbmRvbSBwZXJtdXRhdGlvbiBvZiBjb2xsIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNodWZmbGVcclxuIFwiUmV0dXJuIGEgcmFuZG9tIHBlcm11dGF0aW9uIG9mIGNvbGxcIlxyXG4gW2NvbGxdXHJcbiAobGV0IFthICh0by1hcnJheSBjb2xsKV0gKGdhcnJheS9zaHVmZmxlIGEpICh2ZWMgYSkpKVxyXG4ifSB7OnN5bSBoYXNoLWtleXdvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm4gaGFzaC1rZXl3b3JkIFtrXSAoaW50ICgrIChoYXNoLXN5bWJvbCBrKSAyNjU0NDM1NzY5KSkpXHJcbiJ9IHs6c3ltIGZpbmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtYXAgZW50cnkgZm9yIGtleSwgb3IgbmlsIGlmIGtleSBub3QgcHJlc2VudC4iLCA6YXJnbGlzdHMgKFtjb2xsIGtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kXHJcbiBcIlJldHVybnMgdGhlIG1hcCBlbnRyeSBmb3Iga2V5LCBvciBuaWwgaWYga2V5IG5vdCBwcmVzZW50LlwiXHJcbiBbY29sbCBrXVxyXG4gKGlmXHJcbiAgKGlmaW5kPyBjb2xsKVxyXG4gICgtZmluZCBjb2xsIGspXHJcbiAgKHdoZW5cclxuICAgKGFuZCAobm90IChuaWw/IGNvbGwpKSAoYXNzb2NpYXRpdmU/IGNvbGwpIChjb250YWlucz8gY29sbCBrKSlcclxuICAgKE1hcEVudHJ5LiBrIChnZXQgY29sbCBrKSBuaWwpKSkpXHJcbiJ9IHs6c3ltIGFsZW5ndGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LiBXb3JrcyBvbiBhcnJheXMgb2YgYWxsIHR5cGVzLiIsIDphcmdsaXN0cyAoW2FycmF5XSl9LCA6c291cmNlICIoZGVmblxyXG4gYWxlbmd0aFxyXG4gXCJSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LiBXb3JrcyBvbiBhcnJheXMgb2YgYWxsIHR5cGVzLlwiXHJcbiBbYXJyYXldXHJcbiAoY2xqcy5jb3JlL2FsZW5ndGggYXJyYXkpKVxyXG4ifSB7OnN5bSBiaXQteG9yLCA6bWV0YSB7OmRvYyAiQml0d2lzZSBleGNsdXNpdmUgb3IiLCA6YXJnbGlzdHMgW1t4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gYml0LXhvclxyXG4gXCJCaXR3aXNlIGV4Y2x1c2l2ZSBvclwiXHJcbiAoW3ggeV0gKGNsanMuY29yZS9iaXQteG9yIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgYml0LXhvciAoY2xqcy5jb3JlL2JpdC14b3IgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCwgOm1ldGEgezpkb2MgIkJpdHdpc2Ugc2hpZnQgcmlnaHQgd2l0aCB6ZXJvIGZpbGwiLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHRcclxuIFwiQml0d2lzZSBzaGlmdCByaWdodCB3aXRoIHplcm8gZmlsbFwiXHJcbiBbeCBuXVxyXG4gKGNsanMuY29yZS91bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQgeCBuKSlcclxuIn0gezpzeW0gbmVnPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgbGVzcyB0aGFuIHplcm8sIGVsc2UgZmFsc2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmVnP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIGxlc3MgdGhhbiB6ZXJvLCBlbHNlIGZhbHNlXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS9uZWc/IHgpKVxyXG4ifSB7OnN5bSAtcmVtb3ZlLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZiBkaXNwYXRjaC12YWxdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0ganMtaW52b2tlLCA6bWV0YSB7OmRvYyAiSW52b2tlIEphdmFTY3JpcHQgb2JqZWN0IG1ldGhvZCB2aWEgc3RyaW5nLiBOZWVkZWQgd2hlbiB0aGVcbiAgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHVucXVvdGVkIHByb3BlcnR5IG5hbWUuIiwgOmFyZ2xpc3RzIChbb2JqIHMgJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtaW52b2tlXHJcbiBcIkludm9rZSBKYXZhU2NyaXB0IG9iamVjdCBtZXRob2QgdmlhIHN0cmluZy4gTmVlZGVkIHdoZW4gdGhlXFxuICBzdHJpbmcgaXMgbm90IGEgdmFsaWQgdW5xdW90ZWQgcHJvcGVydHkgbmFtZS5cIlxyXG4gW29iaiBzICYgYXJnc11cclxuICguYXBwbHkgKHVuY2hlY2tlZC1nZXQgb2JqIHMpIG9iaiAoaW50by1hcnJheSBhcmdzKSkpXHJcbiJ9IHs6c3ltIG0zLW1peC1LMSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrMV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG0zLW1peC1LMVxyXG4gW2sxXVxyXG4gKC0+IChpbnQgazEpIChpbXVsIG0zLUMxKSAoaW50LXJvdGF0ZS1sZWZ0IDE1KSAoaW11bCBtMy1DMikpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtZmxvYXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWZsb2F0IFt4XSB4KVxyXG4ifSB7OnN5bSB1bmRlZmluZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaWRlbnRpY2FsIHRvIHRoZSBKYXZhU2NyaXB0IHVuZGVmaW5lZCB2YWx1ZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5kZWZpbmVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpZGVudGljYWwgdG8gdGhlIEphdmFTY3JpcHQgdW5kZWZpbmVkIHZhbHVlLlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvdW5kZWZpbmVkPyB4KSlcclxuIn0gezpzeW0gSU1ldGEsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWNjZXNzaW5nIHRoZSBtZXRhZGF0YSBvZiBhbiBvYmplY3QuIn0sIDptZXRob2RzICgtbWV0YSl9IHs6c3ltIHJlZHVjZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gcmVkdWNlZCIsIDphcmdsaXN0cyAoW3JdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2VkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byByZWR1Y2VkXCJcclxuIFtyXVxyXG4gKGluc3RhbmNlPyBSZWR1Y2VkIHIpKVxyXG4ifSB7OnN5bSBkaXNqISwgOm1ldGEgezpkb2MgImRpc2pbb2luXS4gUmV0dXJucyBhIHRyYW5zaWVudCBzZXQgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXRcbiAgZG9lcyBub3QgY29udGFpbiBrZXkocykuIiwgOmFyZ2xpc3RzIFtbdGNvbGwgdmFsXSBbdGNvbGwgdmFsICYgdmFsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc2ohXHJcbiBcImRpc2pbb2luXS4gUmV0dXJucyBhIHRyYW5zaWVudCBzZXQgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXRcXG4gIGRvZXMgbm90IGNvbnRhaW4ga2V5KHMpLlwiXHJcbiAoW3Rjb2xsIHZhbF0gKC1kaXNqb2luISB0Y29sbCB2YWwpKVxyXG4gKFt0Y29sbCB2YWwgJiB2YWxzXVxyXG4gIChsZXRcclxuICAgW250Y29sbCAoLWRpc2pvaW4hIHRjb2xsIHZhbCldXHJcbiAgIChpZiB2YWxzIChyZWN1ciBudGNvbGwgKGZpcnN0IHZhbHMpIChuZXh0IHZhbHMpKSBudGNvbGwpKSkpXHJcbiJ9IHs6c3ltIC1sb29rdXAsIDptZXRhIHs6ZG9jICJVc2UgayB0byBsb29rIHVwIGEgdmFsdWUgaW4gby4gSWYgbm90LWZvdW5kIGlzIHN1cHBsaWVkIGFuZCBrIGlzIG5vdFxuICAgICBhIHZhbGlkIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGxvb2sgdXAsIG5vdC1mb3VuZCBpcyByZXR1cm5lZC4iLCA6YXJnbGlzdHMgKFtvIGtdIFtvIGsgbm90LWZvdW5kXSl9LCA6cHJvdG9jb2wgSUxvb2t1cH0gezpzeW0gZmxvYXQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGZvciBKYXZhU2NyaXB0IG51bWJlcnMsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZmxvYXQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBmb3IgSmF2YVNjcmlwdCBudW1iZXJzLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKG51bWJlcj8geCkpXHJcbiJ9IHs6c3ltIElDbG9uZWFibGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY2xvbmluZyBhIHZhbHVlLiJ9LCA6bWV0aG9kcyAoLWNsb25lKX0gezpzeW0gSUVuY29kZUNsb2p1cmUsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgtanMtPmNsail9IHs6c3ltIGJvb2xlYW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJvb2xlYW5zIFt4XSB4KVxyXG4ifSB7OnN5bSBpbnQtYXJyYXksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIGFycmF5IG9mIGludHMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcbiAgd2l0aCBDbG9qdXJlLiIsIDphcmdsaXN0cyBbW3NpemUtb3Itc2VxXSBbc2l6ZSBpbml0LXZhbC1vci1zZXFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnQtYXJyYXlcclxuIFwiQ3JlYXRlcyBhbiBhcnJheSBvZiBpbnRzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XFxuICB3aXRoIENsb2p1cmUuXCJcclxuIChbc2l6ZS1vci1zZXFdXHJcbiAgKGlmXHJcbiAgIChudW1iZXI/IHNpemUtb3Itc2VxKVxyXG4gICAoaW50LWFycmF5IHNpemUtb3Itc2VxIG5pbClcclxuICAgKGludG8tYXJyYXkgc2l6ZS1vci1zZXEpKSlcclxuIChbc2l6ZSBpbml0LXZhbC1vci1zZXFdXHJcbiAgKGxldFxyXG4gICBbYSAobWFrZS1hcnJheSBzaXplKV1cclxuICAgKGlmXHJcbiAgICAoc2VxPyBpbml0LXZhbC1vci1zZXEpXHJcbiAgICAobGV0XHJcbiAgICAgW3MgKHNlcSBpbml0LXZhbC1vci1zZXEpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtpIDAgcyBzXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgcyAoPCBpIHNpemUpKVxyXG4gICAgICAgKGRvIChhc2V0IGEgaSAoZmlyc3QgcykpIChyZWN1ciAoaW5jIGkpIChuZXh0IHMpKSlcclxuICAgICAgIGEpKSlcclxuICAgIChkbyAoZG90aW1lcyBbaSBzaXplXSAoYXNldCBhIGkgaW5pdC12YWwtb3Itc2VxKSkgYSkpKSkpXHJcbiJ9IHs6c3ltIHNldD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVNldCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJU2V0XCJcclxuIFt4XVxyXG4gKGlmIChuaWw/IHgpIGZhbHNlIChzYXRpc2ZpZXM/IElTZXQgeCkpKVxyXG4ifSB7OnN5bSBpdGVyYWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUl0ZXJhYmxlIHByb3RvY29sLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpdGVyYWJsZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpbXBsZW1lbnRzIElJdGVyYWJsZSBwcm90b2NvbC5cIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJSXRlcmFibGUgeCkpXHJcbiJ9IHs6c3ltIGNhdCwgOm1ldGEgezpkb2MgIkEgdHJhbnNkdWNlciB3aGljaCBjb25jYXRlbmF0ZXMgdGhlIGNvbnRlbnRzIG9mIGVhY2ggaW5wdXQsIHdoaWNoIG11c3QgYmUgYVxuICBjb2xsZWN0aW9uLCBpbnRvIHRoZSByZWR1Y3Rpb24uIiwgOmFyZ2xpc3RzIChbcmZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYXRcclxuIFwiQSB0cmFuc2R1Y2VyIHdoaWNoIGNvbmNhdGVuYXRlcyB0aGUgY29udGVudHMgb2YgZWFjaCBpbnB1dCwgd2hpY2ggbXVzdCBiZSBhXFxuICBjb2xsZWN0aW9uLCBpbnRvIHRoZSByZWR1Y3Rpb24uXCJcclxuIHs6YWRkZWQgXCIxLjdcIn1cclxuIFtyZl1cclxuIChsZXRcclxuICBbcmYxIChwcmVzZXJ2aW5nLXJlZHVjZWQgcmYpXVxyXG4gIChmblxyXG4gICAoW10gKHJmKSlcclxuICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAoW3Jlc3VsdCBpbnB1dF0gKHJlZHVjZSByZjEgcmVzdWx0IGlucHV0KSkpKSlcclxuIn0gezpzeW0gLXByLXdyaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvIHdyaXRlciBvcHRzXSl9LCA6cHJvdG9jb2wgSVByaW50V2l0aFdyaXRlcn0gezpzeW0gZmx1c2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBmbHVzaCBbXSBuaWwpXHJcbiJ9IHs6c3ltIHNldC1mcm9tLWluZGV4ZWQtc2VxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2lzZXFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQtZnJvbS1pbmRleGVkLXNlcVxyXG4gW2lzZXFdXHJcbiAobGV0XHJcbiAgW2FyclxyXG4gICAoLi1hcnIgaXNlcSlcclxuICAgcmV0XHJcbiAgIChhcmVkdWNlIGFyciBpIHJlcyAoLWFzLXRyYW5zaWVudCAje30pICgtY29uaiEgcmVzIChhZ2V0IGFyciBpKSkpXVxyXG4gICgtcGVyc2lzdGVudCEgcmV0KSkpXHJcbiJ9IHs6c3ltIHRha2Utd2hpbGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBzdWNjZXNzaXZlIGl0ZW1zIGZyb20gY29sbCB3aGlsZVxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbcHJlZF0gW3ByZWQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2Utd2hpbGVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2Ygc3VjY2Vzc2l2ZSBpdGVtcyBmcm9tIGNvbGwgd2hpbGVcXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXFxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbcHJlZF1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAoZm5cclxuICAgIChbXSAocmYpKVxyXG4gICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgKGlmIChwcmVkIGlucHV0KSAocmYgcmVzdWx0IGlucHV0KSAocmVkdWNlZCByZXN1bHQpKSkpKSlcclxuIChbcHJlZCBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAod2hlblxyXG4gICAgIChwcmVkIChmaXJzdCBzKSlcclxuICAgICAoY29ucyAoZmlyc3QgcykgKHRha2Utd2hpbGUgcHJlZCAocmVzdCBzKSkpKSkpKSlcclxuIn0gezpzeW0gdmFyeS1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgb2JqLCB3aXRoXG4gIChhcHBseSBmIChtZXRhIG9iaikgYXJncykgYXMgaXRzIG1ldGFkYXRhLiIsIDphcmdsaXN0cyBbW29iaiBmXSBbb2JqIGYgYV0gW29iaiBmIGEgYl0gW29iaiBmIGEgYiBjXSBbb2JqIGYgYSBiIGMgZF0gW29iaiBmIGEgYiBjIGQgJiBhcmdzXV19LCA6c291cmNlICIoZGVmblxyXG4gdmFyeS1tZXRhXHJcbiBcIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIG9iaiwgd2l0aFxcbiAgKGFwcGx5IGYgKG1ldGEgb2JqKSBhcmdzKSBhcyBpdHMgbWV0YWRhdGEuXCJcclxuIChbb2JqIGZdICh3aXRoLW1ldGEgb2JqIChmIChtZXRhIG9iaikpKSlcclxuIChbb2JqIGYgYV0gKHdpdGgtbWV0YSBvYmogKGYgKG1ldGEgb2JqKSBhKSkpXHJcbiAoW29iaiBmIGEgYl0gKHdpdGgtbWV0YSBvYmogKGYgKG1ldGEgb2JqKSBhIGIpKSlcclxuIChbb2JqIGYgYSBiIGNdICh3aXRoLW1ldGEgb2JqIChmIChtZXRhIG9iaikgYSBiIGMpKSlcclxuIChbb2JqIGYgYSBiIGMgZF0gKHdpdGgtbWV0YSBvYmogKGYgKG1ldGEgb2JqKSBhIGIgYyBkKSkpXHJcbiAoW29iaiBmIGEgYiBjIGQgJiBhcmdzXVxyXG4gICh3aXRoLW1ldGEgb2JqIChhcHBseSBmIChtZXRhIG9iaikgYSBiIGMgZCBhcmdzKSkpKVxyXG4ifSB7OnN5bSBJTmV4dCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhY2Nlc3NpbmcgdGhlIG5leHQgaXRlbXMgb2YgYSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLW5leHQpfSB7OnN5bSBpc19wcm90b18sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gaXNfcHJvdG9fIFt4XSAoaWRlbnRpY2FsPyAoLi1wcm90b3R5cGUgKC4tY29uc3RydWN0b3IgeCkpIHgpKVxyXG4ifSB7OnN5bSBTVEFSVCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgU1RBUlQgI2pzIHt9KVxyXG4ifSB7OnN5bSBJQ291bnRlZCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdGhlIGFiaWxpdHkgdG8gY291bnQgYSBjb2xsZWN0aW9uIGluIGNvbnN0YW50IHRpbWUuIn0sIDptZXRob2RzICgtY291bnQpfSB7OnN5bSBJTWFwRW50cnksIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgZXhhbWluaW5nIGEgbWFwIGVudHJ5LiJ9LCA6bWV0aG9kcyAoLWtleSAtdmFsKX0gezpzeW0gPD0sIDptZXRhIHs6ZG9jICJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBub24tZGVjcmVhc2luZyBvcmRlcixcbiAgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPD1cclxuIFwiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgbm9uLWRlY3JlYXNpbmcgb3JkZXIsXFxuICBvdGhlcndpc2UgZmFsc2UuXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoY2xqcy5jb3JlLzw9IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChjbGpzLmNvcmUvPD0geCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoY2xqcy5jb3JlLzw9IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gTU9EVUxFX0lORk9TLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNT0RVTEVfSU5GT1MgbmlsKVxyXG4ifSB7OnN5bSBjb25qISwgOm1ldGEgezpkb2MgIkFkZHMgdmFsIHRvIHRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiwgYW5kIHJldHVybiB0Y29sbC4gVGhlICdhZGRpdGlvbidcbiAgbWF5IGhhcHBlbiBhdCBkaWZmZXJlbnQgJ3BsYWNlcycgZGVwZW5kaW5nIG9uIHRoZSBjb25jcmV0ZSB0eXBlLiIsIDphcmdsaXN0cyBbW10gW3Rjb2xsXSBbdGNvbGwgdmFsXSBbdGNvbGwgdmFsICYgdmFsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmohXHJcbiBcIkFkZHMgdmFsIHRvIHRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiwgYW5kIHJldHVybiB0Y29sbC4gVGhlICdhZGRpdGlvbidcXG4gIG1heSBoYXBwZW4gYXQgZGlmZmVyZW50ICdwbGFjZXMnIGRlcGVuZGluZyBvbiB0aGUgY29uY3JldGUgdHlwZS5cIlxyXG4gKFtdICh0cmFuc2llbnQgW10pKVxyXG4gKFt0Y29sbF0gdGNvbGwpXHJcbiAoW3Rjb2xsIHZhbF0gKC1jb25qISB0Y29sbCB2YWwpKVxyXG4gKFt0Y29sbCB2YWwgJiB2YWxzXVxyXG4gIChsZXRcclxuICAgW250Y29sbCAoLWNvbmohIHRjb2xsIHZhbCldXHJcbiAgIChpZiB2YWxzIChyZWN1ciBudGNvbGwgKGZpcnN0IHZhbHMpIChuZXh0IHZhbHMpKSBudGNvbGwpKSkpXHJcbiJ9IHs6c3ltIC1wb3AsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHN0YWNrIHdpdGhvdXQgdGhlIGl0ZW0gb24gdG9wIG9mIHRoZSBzdGFjay4gSXMgdXNlZFxuICAgICBieSBjbGpzLmNvcmUvcG9wLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJU3RhY2t9IHs6c3ltIHJlcGVhdGVkbHksIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZ1bmN0aW9uIG9mIG5vIGFyZ3MsIHByZXN1bWFibHkgd2l0aCBzaWRlIGVmZmVjdHMsIGFuZFxuICByZXR1cm5zIGFuIGluZmluaXRlIChvciBsZW5ndGggbiBpZiBzdXBwbGllZCkgbGF6eSBzZXF1ZW5jZSBvZiBjYWxsc1xuICB0byBpdCIsIDphcmdsaXN0cyBbW2ZdIFtuIGZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBlYXRlZGx5XHJcbiBcIlRha2VzIGEgZnVuY3Rpb24gb2Ygbm8gYXJncywgcHJlc3VtYWJseSB3aXRoIHNpZGUgZWZmZWN0cywgYW5kXFxuICByZXR1cm5zIGFuIGluZmluaXRlIChvciBsZW5ndGggbiBpZiBzdXBwbGllZCkgbGF6eSBzZXF1ZW5jZSBvZiBjYWxsc1xcbiAgdG8gaXRcIlxyXG4gKFtmXSAobGF6eS1zZXEgKGNvbnMgKGYpIChyZXBlYXRlZGx5IGYpKSkpXHJcbiAoW24gZl0gKHRha2UgbiAocmVwZWF0ZWRseSBmKSkpKVxyXG4ifSB7OnN5bSB6aXBtYXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIHdpdGggdGhlIGtleXMgbWFwcGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHMuIiwgOmFyZ2xpc3RzIChba2V5cyB2YWxzXSl9LCA6c291cmNlICIoZGVmblxyXG4gemlwbWFwXHJcbiBcIlJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBtYXBwZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFscy5cIlxyXG4gW2tleXMgdmFsc11cclxuIChsb29wXHJcbiAgW21hcCAodHJhbnNpZW50IHt9KSBrcyAoc2VxIGtleXMpIHZzIChzZXEgdmFscyldXHJcbiAgKGlmXHJcbiAgIChhbmQga3MgdnMpXHJcbiAgIChyZWN1ciAoYXNzb2MhIG1hcCAoZmlyc3Qga3MpIChmaXJzdCB2cykpIChuZXh0IGtzKSAobmV4dCB2cykpXHJcbiAgIChwZXJzaXN0ZW50ISBtYXApKSkpXHJcbiJ9IHs6c3ltIHJlc2V0LXZhbHMhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwuIFJldHVybnMgW29sZCBuZXddLCB0aGUgdmFsdWUgb2YgdGhlXG4gICBhdG9tIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJlc2V0LiIsIDphcmdsaXN0cyAoW2EgbmV3LXZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzZXQtdmFscyFcclxuIFwiU2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwuIFJldHVybnMgW29sZCBuZXddLCB0aGUgdmFsdWUgb2YgdGhlXFxuICAgYXRvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZXNldC5cIlxyXG4gezphZGRlZCBcIjEuOVwifVxyXG4gW2EgbmV3LXZhbHVlXVxyXG4gKGxldFxyXG4gIFt2YWxpZGF0ZSAoLi12YWxpZGF0b3IgYSldXHJcbiAgKHdoZW4tbm90XHJcbiAgIChuaWw/IHZhbGlkYXRlKVxyXG4gICAod2hlbi1ub3RcclxuICAgICh2YWxpZGF0ZSBuZXctdmFsdWUpXHJcbiAgICAodGhyb3cgKGpzL0Vycm9yLiBcIlZhbGlkYXRvciByZWplY3RlZCByZWZlcmVuY2Ugc3RhdGVcIikpKSlcclxuICAobGV0XHJcbiAgIFtvbGQtdmFsdWUgKC4tc3RhdGUgYSldXHJcbiAgIChzZXQhICguLXN0YXRlIGEpIG5ldy12YWx1ZSlcclxuICAgKHdoZW4tbm90XHJcbiAgICAobmlsPyAoLi13YXRjaGVzIGEpKVxyXG4gICAgKC1ub3RpZnktd2F0Y2hlcyBhIG9sZC12YWx1ZSBuZXctdmFsdWUpKVxyXG4gICBbb2xkLXZhbHVlIG5ldy12YWx1ZV0pKSlcclxuIn0gezpzeW0gSVN0YWNrLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNvbGxlY3Rpb25zIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGl0ZW1zIGFzIHN0YWNrcy4gVGhlIHRvcFxuICBvZiB0aGUgc3RhY2sgc2hvdWxkIGJlIGFjY2Vzc2VkIGluIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgZm9yIHRoZSBkaWZmZXJlbnRcbiAgZGF0YSBzdHJ1Y3R1cmVzLiJ9LCA6bWV0aG9kcyAoLXBlZWsgLXBvcCl9IHs6c3ltIC1yZW1vdmUtd2F0Y2gsIDptZXRhIHs6ZG9jICJSZW1vdmVzIHdhdGNoZXIgdGhhdCBjb3JyZXNwb25kcyB0byBrZXkgZnJvbSB0aGlzLiIsIDphcmdsaXN0cyAoW3RoaXMga2V5XSl9LCA6cHJvdG9jb2wgSVdhdGNoYWJsZX0gezpzeW0gSVZvbGF0aWxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB2b2xhdGlsZSBmdW5jdGlvbmFsaXR5LiJ9LCA6bWV0aG9kcyAoLXZyZXNldCEpfSB7OnN5bSByZW1vdmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIGZhbHNlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1twcmVkXSBbcHJlZCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIGZhbHNlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXFxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbcHJlZF0gKGZpbHRlciAoY29tcGxlbWVudCBwcmVkKSkpXHJcbiAoW3ByZWQgY29sbF0gKGZpbHRlciAoY29tcGxlbWVudCBwcmVkKSBjb2xsKSkpXHJcbiJ9IHs6c3ltICosIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiAqXHJcbiBcIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS5cIlxyXG4gKFtdIDEpXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS8qIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgKiAoY2xqcy5jb3JlLyogeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHJlLXBhdHRlcm4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFJlZ0V4cCB3aGljaCBoYXMgY29tcGlsZWQgdGhlIHByb3ZpZGVkIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmUtcGF0dGVyblxyXG4gXCJSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFJlZ0V4cCB3aGljaCBoYXMgY29tcGlsZWQgdGhlIHByb3ZpZGVkIHN0cmluZy5cIlxyXG4gW3NdXHJcbiAoaWZcclxuICAoaW5zdGFuY2U/IGpzL1JlZ0V4cCBzKVxyXG4gIHNcclxuICAobGV0XHJcbiAgIFtbcHJlZml4IGZsYWdzXVxyXG4gICAgKHJlLWZpbmQgI1wiXlxcKFxcPyhbaWRtc3V4XSopXFwpXCIgcylcclxuICAgIHBhdHRlcm5cclxuICAgIChzdWJzIHMgKGlmIChuaWw/IHByZWZpeCkgMCAoY291bnQgcHJlZml4KSkpXVxyXG4gICAoanMvUmVnRXhwLiBwYXR0ZXJuIChvciBmbGFncyBcIlwiKSkpKSlcclxuIn0gezpzeW0gbWluLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbGVhc3Qgb2YgdGhlIG51bXMuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaW5cclxuIFwiUmV0dXJucyB0aGUgbGVhc3Qgb2YgdGhlIG51bXMuXCJcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL21pbiB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIG1pbiAoY2xqcy5jb3JlL21pbiB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gLXBlcnNpc3RlbnQhLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIHBlcnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmUgZnJvbSB0Y29sbCBhbmQgcmV0dXJucyBpdC4iLCA6YXJnbGlzdHMgKFt0Y29sbF0pfSwgOnByb3RvY29sIElUcmFuc2llbnRDb2xsZWN0aW9ufSB7OnN5bSAtbnRoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4IG4gaW4gdGhlIGNvbGxlY3Rpb24gY29sbC5cbiAgICAgUmV0dXJucyBub3QtZm91bmQgaWYgaW5kZXggbiBpcyBvdXQgb2YgYm91bmRzIGFuZCBub3QtZm91bmQgaXMgc3VwcGxpZWQuIiwgOmFyZ2xpc3RzIChbY29sbCBuXSBbY29sbCBuIG5vdC1mb3VuZF0pfSwgOnByb3RvY29sIElJbmRleGVkfSB7OnN5bSBwb3AhLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGZyb20gYSB0cmFuc2llbnQgdmVjdG9yLiBJZlxuICB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbi4gUmV0dXJucyB0Y29sbCIsIDphcmdsaXN0cyAoW3Rjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9wIVxyXG4gXCJSZW1vdmVzIHRoZSBsYXN0IGl0ZW0gZnJvbSBhIHRyYW5zaWVudCB2ZWN0b3IuIElmXFxuICB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbi4gUmV0dXJucyB0Y29sbFwiXHJcbiBbdGNvbGxdXHJcbiAoLXBvcCEgdGNvbGwpKVxyXG4ifSB7OnN5bSBjaHVuay1hcHBlbmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYiB4XSl9LCA6c291cmNlICIoZGVmbiBjaHVuay1hcHBlbmQgW2IgeF0gKC5hZGQgYiB4KSlcclxuIn0gezpzeW0gKnVuY2hlY2tlZC1hcnJheXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqdW5jaGVja2VkLWFycmF5cyogZmFsc2UpXHJcbiJ9IHs6c3ltIHBybi1zdHIsIDptZXRhIHs6ZG9jICJTYW1lIGFzIHByLXN0ciBmb2xsb3dlZCBieSAobmV3bGluZSkiLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm4tc3RyXHJcbiBcIlNhbWUgYXMgcHItc3RyIGZvbGxvd2VkIGJ5IChuZXdsaW5lKVwiXHJcbiBbJiBvYmpzXVxyXG4gKHBybi1zdHItd2l0aC1vcHRzIG9ianMgKHByLW9wdHMpKSlcclxuIn0gezpzeW0gSVJldmVyc2libGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgcmV2ZXJzaW5nIGEgc2VxLiJ9LCA6bWV0aG9kcyAoLXJzZXEpfSB7OnN5bSByZXZlcnNpYmxlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcz8gSVJldmVyc2libGUuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldmVyc2libGU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcz8gSVJldmVyc2libGUuXCJcclxuIFtjb2xsXVxyXG4gKHNhdGlzZmllcz8gSVJldmVyc2libGUgY29sbCkpXHJcbiJ9IHs6c3ltIC1yZWFsaXplZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBmb3IgeCBoYXMgYmVlbiBwcm9kdWNlZCwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBJUGVuZGluZ30gezpzeW0gLWFkZC13YXRjaCwgOm1ldGEgezpkb2MgIkFkZHMgYSB3YXRjaGVyIGZ1bmN0aW9uIGYgdG8gdGhpcy4gS2V5cyBtdXN0IGJlIHVuaXF1ZSBwZXIgcmVmZXJlbmNlLFxuICAgICBhbmQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRjaCB3aXRoIC1yZW1vdmUtd2F0Y2guIiwgOmFyZ2xpc3RzIChbdGhpcyBrZXkgZl0pfSwgOnByb3RvY29sIElXYXRjaGFibGV9IHs6c3ltIC1kZXJlZi13aXRoLXRpbWVvdXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbyBtc2VjIHRpbWVvdXQtdmFsXSl9LCA6cHJvdG9jb2wgSURlcmVmV2l0aFRpbWVvdXR9IHs6c3ltIGNvbmosIDptZXRhIHs6ZG9jICJjb25qW29pbl0uIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIHRoZSB4c1xuICAnYWRkZWQnLiAoY29uaiBuaWwgaXRlbSkgcmV0dXJucyAoaXRlbSkuICBUaGUgJ2FkZGl0aW9uJyBtYXlcbiAgaGFwcGVuIGF0IGRpZmZlcmVudCAncGxhY2VzJyBkZXBlbmRpbmcgb24gdGhlIGNvbmNyZXRlIHR5cGUuIiwgOmFyZ2xpc3RzIFtbXSBbY29sbF0gW2NvbGwgeF0gW2NvbGwgeCAmIHhzXV19LCA6c291cmNlICIoZGVmblxyXG4gY29ualxyXG4gXCJjb25qW29pbl0uIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIHRoZSB4c1xcbiAgJ2FkZGVkJy4gKGNvbmogbmlsIGl0ZW0pIHJldHVybnMgKGl0ZW0pLiAgVGhlICdhZGRpdGlvbicgbWF5XFxuICBoYXBwZW4gYXQgZGlmZmVyZW50ICdwbGFjZXMnIGRlcGVuZGluZyBvbiB0aGUgY29uY3JldGUgdHlwZS5cIlxyXG4gKFtdIFtdKVxyXG4gKFtjb2xsXSBjb2xsKVxyXG4gKFtjb2xsIHhdIChpZi1ub3QgKG5pbD8gY29sbCkgKC1jb25qIGNvbGwgeCkgKGxpc3QgeCkpKVxyXG4gKFtjb2xsIHggJiB4c11cclxuICAoaWYgeHMgKHJlY3VyIChjb25qIGNvbGwgeCkgKGZpcnN0IHhzKSAobmV4dCB4cykpIChjb25qIGNvbGwgeCkpKSlcclxuIn0gezpzeW0gLXNvcnRlZC1zZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc29ydGVkIHNlcSBmcm9tIGNvbGwgaW4gZWl0aGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLiIsIDphcmdsaXN0cyAoW2NvbGwgYXNjZW5kaW5nP10pfSwgOnByb3RvY29sIElTb3J0ZWR9IHs6c3ltIHRyYW5zZHVjZSwgOm1ldGEgezpkb2MgInJlZHVjZSB3aXRoIGEgdHJhbnNmb3JtYXRpb24gb2YgZiAoeGYpLiBJZiBpbml0IGlzIG5vdFxuICBzdXBwbGllZCwgKGYpIHdpbGwgYmUgY2FsbGVkIHRvIHByb2R1Y2UgaXQuIGYgc2hvdWxkIGJlIGEgcmVkdWNpbmdcbiAgc3RlcCBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYm90aCAxIGFuZCAyIGFyZ3VtZW50cywgaWYgaXQgYWNjZXB0c1xuICBvbmx5IDIgeW91IGNhbiBhZGQgdGhlIGFyaXR5LTEgd2l0aCAnY29tcGxldGluZycuIFJldHVybnMgdGhlIHJlc3VsdFxuICBvZiBhcHBseWluZyAodGhlIHRyYW5zZm9ybWVkKSB4ZiB0byBpbml0IGFuZCB0aGUgZmlyc3QgaXRlbSBpbiBjb2xsLFxuICB0aGVuIGFwcGx5aW5nIHhmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWYgY29sbFxuICBjb250YWlucyBubyBpdGVtcywgcmV0dXJucyBpbml0IGFuZCBmIGlzIG5vdCBjYWxsZWQuIE5vdGUgdGhhdFxuICBjZXJ0YWluIHRyYW5zZm9ybXMgbWF5IGluamVjdCBvciBza2lwIGl0ZW1zLiIsIDphcmdsaXN0cyBbW3hmb3JtIGYgY29sbF0gW3hmb3JtIGYgaW5pdCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNkdWNlXHJcbiBcInJlZHVjZSB3aXRoIGEgdHJhbnNmb3JtYXRpb24gb2YgZiAoeGYpLiBJZiBpbml0IGlzIG5vdFxcbiAgc3VwcGxpZWQsIChmKSB3aWxsIGJlIGNhbGxlZCB0byBwcm9kdWNlIGl0LiBmIHNob3VsZCBiZSBhIHJlZHVjaW5nXFxuICBzdGVwIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBib3RoIDEgYW5kIDIgYXJndW1lbnRzLCBpZiBpdCBhY2NlcHRzXFxuICBvbmx5IDIgeW91IGNhbiBhZGQgdGhlIGFyaXR5LTEgd2l0aCAnY29tcGxldGluZycuIFJldHVybnMgdGhlIHJlc3VsdFxcbiAgb2YgYXBwbHlpbmcgKHRoZSB0cmFuc2Zvcm1lZCkgeGYgdG8gaW5pdCBhbmQgdGhlIGZpcnN0IGl0ZW0gaW4gY29sbCxcXG4gIHRoZW4gYXBwbHlpbmcgeGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZiBjb2xsXFxuICBjb250YWlucyBubyBpdGVtcywgcmV0dXJucyBpbml0IGFuZCBmIGlzIG5vdCBjYWxsZWQuIE5vdGUgdGhhdFxcbiAgY2VydGFpbiB0cmFuc2Zvcm1zIG1heSBpbmplY3Qgb3Igc2tpcCBpdGVtcy5cIlxyXG4gKFt4Zm9ybSBmIGNvbGxdICh0cmFuc2R1Y2UgeGZvcm0gZiAoZikgY29sbCkpXHJcbiAoW3hmb3JtIGYgaW5pdCBjb2xsXVxyXG4gIChsZXQgW2YgKHhmb3JtIGYpIHJldCAocmVkdWNlIGYgaW5pdCBjb2xsKV0gKGYgcmV0KSkpKVxyXG4ifSB7OnN5bSAtc3dhcCEsIDptZXRhIHs6ZG9jICJTd2FwcyB0aGUgdmFsdWUgb2YgbyB0byBiZSAoYXBwbHkgZiBjdXJyZW50LXZhbHVlLW9mLWF0b20gYXJncykuIiwgOmFyZ2xpc3RzIChbbyBmXSBbbyBmIGFdIFtvIGYgYSBiXSBbbyBmIGEgYiB4c10pfSwgOnByb3RvY29sIElTd2FwfSB7OnN5bSAqcHJpbnQtbGVuZ3RoKiwgOm1ldGEgezpkb2MgIipwcmludC1sZW5ndGgqIGNvbnRyb2xzIGhvdyBtYW55IGl0ZW1zIG9mIGVhY2ggY29sbGVjdGlvbiB0aGVcbiAgcHJpbnRlciB3aWxsIHByaW50LiBJZiBpdCBpcyBib3VuZCB0byBsb2dpY2FsIGZhbHNlLCB0aGVyZSBpcyBub1xuICBsaW1pdC4gT3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGJvdW5kIHRvIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbWF4aW11bVxuICBudW1iZXIgb2YgaXRlbXMgb2YgZWFjaCBjb2xsZWN0aW9uIHRvIHByaW50LiBJZiBhIGNvbGxlY3Rpb24gY29udGFpbnNcbiAgbW9yZSBpdGVtcywgdGhlIHByaW50ZXIgd2lsbCBwcmludCBpdGVtcyB1cCB0byB0aGUgbGltaXQgZm9sbG93ZWQgYnlcbiAgJy4uLicgdG8gcmVwcmVzZW50IHRoZSByZW1haW5pbmcgaXRlbXMuIFRoZSByb290IGJpbmRpbmcgaXMgbmlsXG4gIGluZGljYXRpbmcgbm8gbGltaXQuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LWxlbmd0aCogbmlsKVxyXG4ifSB7OnN5bSBqcy1kZWxldGUsIDptZXRhIHs6ZG9jICJEZWxldGUgYSBwcm9wZXJ0eSBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFtvYmoga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtZGVsZXRlXHJcbiBcIkRlbGV0ZSBhIHByb3BlcnR5IGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdC5cXG4gIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW29iaiBrZXldXHJcbiAoY2xqcy5jb3JlL2pzLWRlbGV0ZSBvYmoga2V5KSlcclxuIn0gezpzeW0gdHJ1dGhfLCA6bWV0YSB7OmRvYyAiSW50ZXJuYWwgLSBkbyBub3QgdXNlISIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHRydXRoXyBcIkludGVybmFsIC0gZG8gbm90IHVzZSFcIiBbeF0gKGNsanMuY29yZS90cnV0aF8geCkpXHJcbiJ9IHs6c3ltIGFycmF5LWluZGV4LW9mLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FyciBrXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXktaW5kZXgtb2ZcclxuIFthcnIga11cclxuIChjb25kXHJcbiAgKGtleXdvcmQ/IGspXHJcbiAgKGFycmF5LWluZGV4LW9mLWtleXdvcmQ/IGFyciBrKVxyXG4gIChvciAoZ29vZy9pc1N0cmluZyBrKSAobnVtYmVyPyBrKSlcclxuICAoYXJyYXktaW5kZXgtb2YtaWRlbnRpY2FsPyBhcnIgaylcclxuICAoc3ltYm9sPyBrKVxyXG4gIChhcnJheS1pbmRleC1vZi1zeW1ib2w/IGFyciBrKVxyXG4gIChuaWw/IGspXHJcbiAgKGFycmF5LWluZGV4LW9mLW5pbD8gYXJyKVxyXG4gIDplbHNlXHJcbiAgKGFycmF5LWluZGV4LW9mLWVxdWl2PyBhcnIgaykpKVxyXG4ifSB7OnN5bSBrZXktPmpzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2tdIFtrIHByaW1pdGl2ZS1mbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleS0+anNcclxuIChba10gKGtleS0+anMgayBjbGotPmpzKSlcclxuIChbayBwcmltaXRpdmUtZm5dXHJcbiAgKGNvbmRcclxuICAgKHNhdGlzZmllcz8gSUVuY29kZUpTIGspXHJcbiAgICgtY2xqLT5qcyBrKVxyXG4gICAob3IgKHN0cmluZz8gaykgKG51bWJlcj8gaykgKGtleXdvcmQ/IGspIChzeW1ib2w/IGspKVxyXG4gICAocHJpbWl0aXZlLWZuIGspXHJcbiAgIDpkZWZhdWx0XHJcbiAgIChwci1zdHIgaykpKSlcclxuIn0gezpzeW0gSUVuY29kZUpTLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoLWNsai0+anMgLWtleS0+anMpfSB7OnN5bSBjb21wYXJlLWFuZC1zZXQhLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbCBpZiBhbmQgb25seSBpZiB0aGVcbiAgY3VycmVudCB2YWx1ZSBvZiB0aGUgYXRvbSBpcyBlcXVhbCB0byBvbGR2YWwuIFJldHVybnMgdHJ1ZSBpZlxuICBzZXQgaGFwcGVuZWQsIGVsc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIChbYSBvbGR2YWwgbmV3dmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFyZS1hbmQtc2V0IVxyXG4gXCJBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsIGlmIGFuZCBvbmx5IGlmIHRoZVxcbiAgY3VycmVudCB2YWx1ZSBvZiB0aGUgYXRvbSBpcyBlcXVhbCB0byBvbGR2YWwuIFJldHVybnMgdHJ1ZSBpZlxcbiAgc2V0IGhhcHBlbmVkLCBlbHNlIGZhbHNlLlwiXHJcbiBbYSBvbGR2YWwgbmV3dmFsXVxyXG4gKGlmICg9ICgtZGVyZWYgYSkgb2xkdmFsKSAoZG8gKHJlc2V0ISBhIG5ld3ZhbCkgdHJ1ZSkgZmFsc2UpKVxyXG4ifSB7OnN5bSBhcnJheS1zZXEsIDptZXRhIHs6ZG9jICJDcmVhdGUgYSBzZXEgZnJvbSBhIEphdmFTY3JpcHQgYXJyYXkuIiwgOmFyZ2xpc3RzIFtbYXJyYXldIFthcnJheSBpXV19LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXktc2VxXHJcbiBcIkNyZWF0ZSBhIHNlcSBmcm9tIGEgSmF2YVNjcmlwdCBhcnJheS5cIlxyXG4gKFthcnJheV0gKHByaW0tc2VxIGFycmF5IDApKVxyXG4gKFthcnJheSBpXSAocHJpbS1zZXEgYXJyYXkgaSkpKVxyXG4ifSB7OnN5bSBpbnRlcmxlYXZlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggY29sbCwgdGhlbiB0aGUgc2Vjb25kIGV0Yy4iLCA6YXJnbGlzdHMgW1tdIFtjMV0gW2MxIGMyXSBbYzEgYzIgJiBjb2xsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludGVybGVhdmVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggY29sbCwgdGhlbiB0aGUgc2Vjb25kIGV0Yy5cIlxyXG4gKFtdICgpKVxyXG4gKFtjMV0gKGxhenktc2VxIGMxKSlcclxuIChbYzEgYzJdXHJcbiAgKGxhenktc2VxXHJcbiAgIChsZXRcclxuICAgIFtzMSAoc2VxIGMxKSBzMiAoc2VxIGMyKV1cclxuICAgICh3aGVuXHJcbiAgICAgKGFuZCBzMSBzMilcclxuICAgICAoY29uc1xyXG4gICAgICAoZmlyc3QgczEpXHJcbiAgICAgIChjb25zIChmaXJzdCBzMikgKGludGVybGVhdmUgKHJlc3QgczEpIChyZXN0IHMyKSkpKSkpKSlcclxuIChbYzEgYzIgJiBjb2xsc11cclxuICAobGF6eS1zZXFcclxuICAgKGxldFxyXG4gICAgW3NzIChtYXAgc2VxIChjb25qIGNvbGxzIGMyIGMxKSldXHJcbiAgICAod2hlblxyXG4gICAgIChldmVyeT8gaWRlbnRpdHkgc3MpXHJcbiAgICAgKGNvbmNhdCAobWFwIGZpcnN0IHNzKSAoYXBwbHkgaW50ZXJsZWF2ZSAobWFwIHJlc3Qgc3MpKSkpKSkpKVxyXG4ifSB7OnN5bSBwcmludC1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBwcmludC1vbmUgd3JpdGVyIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1tYXBcclxuIFttIHByaW50LW9uZSB3cml0ZXIgb3B0c11cclxuIChsZXRcclxuICBbW25zIGxpZnQtbWFwXSAod2hlbiAobWFwPyBtKSAobGlmdC1ucyBtKSldXHJcbiAgKGlmXHJcbiAgIG5zXHJcbiAgIChwcmludC1wcmVmaXgtbWFwIChzdHIgXCIjOlwiIG5zKSBsaWZ0LW1hcCBwcmludC1vbmUgd3JpdGVyIG9wdHMpXHJcbiAgIChwcmludC1wcmVmaXgtbWFwIG5pbCBtIHByaW50LW9uZSB3cml0ZXIgb3B0cykpKSlcclxuIn0gezpzeW0gbWFwPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElNYXAiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJTWFwXCJcclxuIFt4XVxyXG4gKGlmIChuaWw/IHgpIGZhbHNlIChzYXRpc2ZpZXM/IElNYXAgeCkpKVxyXG4ifSB7OnN5bSBtMy1DMSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbTMtQzEgKGludCAzNDMyOTE4MzUzKSlcclxuIn0gezpzeW0gZ2V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgbWFwcGVkIHRvIGtleSwgbm90LWZvdW5kIG9yIG5pbCBpZiBrZXkgbm90IHByZXNlbnQuIiwgOmFyZ2xpc3RzIFtbbyBrXSBbbyBrIG5vdC1mb3VuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldFxyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBtYXBwZWQgdG8ga2V5LCBub3QtZm91bmQgb3IgbmlsIGlmIGtleSBub3QgcHJlc2VudC5cIlxyXG4gKFtvIGtdXHJcbiAgKHdoZW4tbm90XHJcbiAgIChuaWw/IG8pXHJcbiAgIChjb25kXHJcbiAgICAoaW1wbGVtZW50cz8gSUxvb2t1cCBvKVxyXG4gICAgKC1sb29rdXAgbyBrKVxyXG4gICAgKGFycmF5PyBvKVxyXG4gICAgKHdoZW4gKGFuZCAoc29tZT8gaykgKDwgayAoLi1sZW5ndGggbykpKSAoYWdldCBvIChpbnQgaykpKVxyXG4gICAgKHN0cmluZz8gbylcclxuICAgICh3aGVuIChhbmQgKHNvbWU/IGspICg8IC0xIGsgKC4tbGVuZ3RoIG8pKSkgKC5jaGFyQXQgbyAoaW50IGspKSlcclxuICAgIChuYXRpdmUtc2F0aXNmaWVzPyBJTG9va3VwIG8pXHJcbiAgICAoLWxvb2t1cCBvIGspXHJcbiAgICA6ZWxzZVxyXG4gICAgbmlsKSkpXHJcbiAoW28gayBub3QtZm91bmRdXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyBvKVxyXG4gICAoY29uZFxyXG4gICAgKGltcGxlbWVudHM/IElMb29rdXAgbylcclxuICAgICgtbG9va3VwIG8gayBub3QtZm91bmQpXHJcbiAgICAoYXJyYXk/IG8pXHJcbiAgICAoaWZcclxuICAgICAoYW5kIChzb21lPyBrKSAoPCAtMSBrICguLWxlbmd0aCBvKSkpXHJcbiAgICAgKGFnZXQgbyAoaW50IGspKVxyXG4gICAgIG5vdC1mb3VuZClcclxuICAgIChzdHJpbmc/IG8pXHJcbiAgICAoaWZcclxuICAgICAoYW5kIChzb21lPyBrKSAoPCAtMSBrICguLWxlbmd0aCBvKSkpXHJcbiAgICAgKC5jaGFyQXQgbyAoaW50IGspKVxyXG4gICAgIG5vdC1mb3VuZClcclxuICAgIChuYXRpdmUtc2F0aXNmaWVzPyBJTG9va3VwIG8pXHJcbiAgICAoLWxvb2t1cCBvIGsgbm90LWZvdW5kKVxyXG4gICAgOmVsc2VcclxuICAgIG5vdC1mb3VuZClcclxuICAgbm90LWZvdW5kKSkpXHJcbiJ9IHs6c3ltIGlkZW50aXR5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBpdHMgYXJndW1lbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gaWRlbnRpdHkgXCJSZXR1cm5zIGl0cyBhcmd1bWVudC5cIiBbeF0geClcclxuIn0gezpzeW0gaW50bywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbCBjb25zaXN0aW5nIG9mIHRvLWNvbGwgd2l0aCBhbGwgb2YgdGhlIGl0ZW1zIG9mXG4gIGZyb20tY29sbCBjb25qb2luZWQuIEEgdHJhbnNkdWNlciBtYXkgYmUgc3VwcGxpZWQuIiwgOmFyZ2xpc3RzIFtbXSBbdG9dIFt0byBmcm9tXSBbdG8geGZvcm0gZnJvbV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludG9cclxuIFwiUmV0dXJucyBhIG5ldyBjb2xsIGNvbnNpc3Rpbmcgb2YgdG8tY29sbCB3aXRoIGFsbCBvZiB0aGUgaXRlbXMgb2ZcXG4gIGZyb20tY29sbCBjb25qb2luZWQuIEEgdHJhbnNkdWNlciBtYXkgYmUgc3VwcGxpZWQuXCJcclxuIChbXSBbXSlcclxuIChbdG9dIHRvKVxyXG4gKFt0byBmcm9tXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gdG8pXHJcbiAgIChpZlxyXG4gICAgKGltcGxlbWVudHM/IElFZGl0YWJsZUNvbGxlY3Rpb24gdG8pXHJcbiAgICAoLXdpdGgtbWV0YVxyXG4gICAgIChwZXJzaXN0ZW50ISAocmVkdWNlIC1jb25qISAodHJhbnNpZW50IHRvKSBmcm9tKSlcclxuICAgICAobWV0YSB0bykpXHJcbiAgICAocmVkdWNlIC1jb25qIHRvIGZyb20pKVxyXG4gICAocmVkdWNlIGNvbmogdG8gZnJvbSkpKVxyXG4gKFt0byB4Zm9ybSBmcm9tXVxyXG4gIChpZlxyXG4gICAoaW1wbGVtZW50cz8gSUVkaXRhYmxlQ29sbGVjdGlvbiB0bylcclxuICAgKC13aXRoLW1ldGFcclxuICAgIChwZXJzaXN0ZW50ISAodHJhbnNkdWNlIHhmb3JtIGNvbmohICh0cmFuc2llbnQgdG8pIGZyb20pKVxyXG4gICAgKG1ldGEgdG8pKVxyXG4gICAodHJhbnNkdWNlIHhmb3JtIGNvbmogdG8gZnJvbSkpKSlcclxuIn0gezpzeW0gbG9uZywgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBsb25nIGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4gSWRlbnRpY2FsIHRvIGBpbnQnLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb25nXHJcbiBcIkNvZXJjZSB0byBsb25nIGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4gSWRlbnRpY2FsIHRvIGBpbnQnLlwiXHJcbiBbeF1cclxuIChmaXggeCkpXHJcbiJ9IHs6c3ltIGRvdWJsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBkb3VibGUgW3hdIHgpXHJcbiJ9IHs6c3ltIHZvbGF0aWxlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgdm9sYXRpbGUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZvbGF0aWxlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIHZvbGF0aWxlLlwiXHJcbiBbeF1cclxuIChpbnN0YW5jZT8gVm9sYXRpbGUgeCkpXHJcbiJ9IHs6c3ltIC1rZXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hcCBlbnRyeS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSU1hcEVudHJ5fSB7OnN5bSBuZmlyc3QsIDptZXRhIHs6ZG9jICJTYW1lIGFzIChuZXh0IChmaXJzdCB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBuZmlyc3QgXCJTYW1lIGFzIChuZXh0IChmaXJzdCB4KSlcIiBbY29sbF0gKG5leHQgKGZpcnN0IGNvbGwpKSlcclxuIn0gezpzeW0gbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1ldGFkYXRhIG9mIG9iaiwgcmV0dXJucyBuaWwgaWYgdGhlcmUgaXMgbm8gbWV0YWRhdGEuIiwgOmFyZ2xpc3RzIChbb10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1ldGFcclxuIFwiUmV0dXJucyB0aGUgbWV0YWRhdGEgb2Ygb2JqLCByZXR1cm5zIG5pbCBpZiB0aGVyZSBpcyBubyBtZXRhZGF0YS5cIlxyXG4gW29dXHJcbiAod2hlbiAoYW5kIChub3QgKG5pbD8gbykpIChzYXRpc2ZpZXM/IElNZXRhIG8pKSAoLW1ldGEgbykpKVxyXG4ifSB7OnN5bSAta3YtcmVkdWNlLCA6bWV0YSB7OmRvYyAiUmVkdWNlcyBhbiBhc3NvY2lhdGl2ZSBjb2xsZWN0aW9uIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIGYgc2hvdWxkIGJlXG4gICAgIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aHJlZSBhcmd1bWVudHMuIiwgOmFyZ2xpc3RzIChbY29sbCBmIGluaXRdKX0sIDpwcm90b2NvbCBJS1ZSZWR1Y2V9IHs6c3ltIElIYXNoLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBoYXNoaW5nIGZ1bmN0aW9uYWxpdHkgdG8gYSB0eXBlLiJ9LCA6bWV0aG9kcyAoLWhhc2gpfSB7OnN5bSBiaXQtYW5kLW5vdCwgOm1ldGEgezpkb2MgIkJpdHdpc2UgYW5kIHdpdGggY29tcGxlbWVudCIsIDphcmdsaXN0cyBbW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtYW5kLW5vdFxyXG4gXCJCaXR3aXNlIGFuZCB3aXRoIGNvbXBsZW1lbnRcIlxyXG4gKFt4IHldIChjbGpzLmNvcmUvYml0LWFuZC1ub3QgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBiaXQtYW5kLW5vdCAoY2xqcy5jb3JlL2JpdC1hbmQtbm90IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSB2YXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHYgaXMgb2YgdHlwZSBjbGpzLmNvcmUuVmFyIiwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHYgaXMgb2YgdHlwZSBjbGpzLmNvcmUuVmFyXCJcclxuIFt2XVxyXG4gKGluc3RhbmNlPyBjbGpzLmNvcmUuVmFyIHYpKVxyXG4ifSB7OnN5bSAtY29tcGFyYXRvciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvbXBhcmF0b3IgZm9yIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElTb3J0ZWR9IHs6c3ltIHVuY2hlY2tlZC1hZGQtaW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtYWRkLWludFxyXG4gXCJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC5cIlxyXG4gKFtdIDApXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtYWRkLWludCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2UgdW5jaGVja2VkLWFkZC1pbnQgKGNsanMuY29yZS91bmNoZWNrZWQtYWRkLWludCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gaGFzaC1vcmRlcmVkLWNvbGwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBoYXNoIGNvZGUsIGNvbnNpc3RlbnQgd2l0aCA9LCBmb3IgYW4gZXh0ZXJuYWwgb3JkZXJlZFxuICAgY29sbGVjdGlvbiBpbXBsZW1lbnRpbmcgSXRlcmFibGUuXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtb3JkZXJlZC1jb2xsXHJcbiBcIlJldHVybnMgdGhlIGhhc2ggY29kZSwgY29uc2lzdGVudCB3aXRoID0sIGZvciBhbiBleHRlcm5hbCBvcmRlcmVkXFxuICAgY29sbGVjdGlvbiBpbXBsZW1lbnRpbmcgSXRlcmFibGUuXFxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLlwiXHJcbiBbY29sbF1cclxuIChsb29wXHJcbiAgW24gMCBoYXNoLWNvZGUgMSBjb2xsIChzZXEgY29sbCldXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyBjb2xsKVxyXG4gICAocmVjdXJcclxuICAgIChpbmMgbilcclxuICAgIChiaXQtb3IgKCsgKGltdWwgMzEgaGFzaC1jb2RlKSAoaGFzaCAoZmlyc3QgY29sbCkpKSAwKVxyXG4gICAgKG5leHQgY29sbCkpXHJcbiAgIChtaXgtY29sbGVjdGlvbi1oYXNoIGhhc2gtY29kZSBuKSkpKVxyXG4ifSB7OnN5bSByZXNldC1tZXRhISwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgcmVzZXRzIHRoZSBtZXRhZGF0YSBmb3IgYW4gYXRvbSIsIDphcmdsaXN0cyAoW2lyZWYgbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc2V0LW1ldGEhXHJcbiBcIkF0b21pY2FsbHkgcmVzZXRzIHRoZSBtZXRhZGF0YSBmb3IgYW4gYXRvbVwiXHJcbiBbaXJlZiBtXVxyXG4gKHNldCEgKC4tbWV0YSBpcmVmKSBtKSlcclxuIn0gezpzeW0gSUVxdWl2LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB2YWx1ZSBjb21wYXJpc29uIGZ1bmN0aW9uYWxpdHkgdG8gYSB0eXBlLiJ9LCA6bWV0aG9kcyAoLWVxdWl2KX0gezpzeW0gY3ljbGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSAoaW5maW5pdGUhKSBzZXF1ZW5jZSBvZiByZXBldGl0aW9ucyBvZiB0aGUgaXRlbXMgaW4gY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3ljbGVcclxuIFwiUmV0dXJucyBhIGxhenkgKGluZmluaXRlISkgc2VxdWVuY2Ugb2YgcmVwZXRpdGlvbnMgb2YgdGhlIGl0ZW1zIGluIGNvbGwuXCJcclxuIFtjb2xsXVxyXG4gKGlmLWxldFxyXG4gIFt2YWxzIChzZXEgY29sbCldXHJcbiAgKEN5Y2xlLiBuaWwgdmFscyBuaWwgdmFscyBuaWwpXHJcbiAgKC4tRU1QVFkgTGlzdCkpKVxyXG4ifSB7OnN5bSAtZGVyZWYsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVmZXJlbmNlIG8uIiwgOmFyZ2xpc3RzIChbb10pfSwgOnByb3RvY29sIElEZXJlZn0gezpzeW0gZW1wdHk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgaGFzIG5vIGl0ZW1zIC0gc2FtZSBhcyAobm90IChzZXEgY29sbCkpLlxuICBQbGVhc2UgdXNlIHRoZSBpZGlvbSAoc2VxIHgpIHJhdGhlciB0aGFuIChub3QgKGVtcHR5PyB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1wdHk/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGhhcyBubyBpdGVtcyAtIHNhbWUgYXMgKG5vdCAoc2VxIGNvbGwpKS5cXG4gIFBsZWFzZSB1c2UgdGhlIGlkaW9tIChzZXEgeCkgcmF0aGVyIHRoYW4gKG5vdCAoZW1wdHk/IHgpKVwiXHJcbiBbY29sbF1cclxuIChvciAobmlsPyBjb2xsKSAobm90IChzZXEgY29sbCkpKSlcclxuIn0gezpzeW0gc2hvcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gc2hvcnQgW3hdIHgpXHJcbiJ9IHs6c3ltIC1jbGotPmpzLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBjbGogdmFsdWVzIHRvIEphdmFTY3JpcHQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgSUVuY29kZUpTfSB7OnN5bSAtY2h1bmtlZC1maXJzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpcnN0IGNodW5rIGluIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElDaHVua2VkU2VxfSB7OnN5bSBhZGQtdGFwLCA6bWV0YSB7OmRvYyAiQWRkcyBmLCBhIGZuIG9mIG9uZSBhcmd1bWVudCwgdG8gdGhlIHRhcCBzZXQuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aFxuICBhbnl0aGluZyBzZW50IHZpYSB0YXA+LiBSZW1lbWJlciBmIGluIG9yZGVyIHRvIHJlbW92ZS10YXAiLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXRhcFxyXG4gXCJBZGRzIGYsIGEgZm4gb2Ygb25lIGFyZ3VtZW50LCB0byB0aGUgdGFwIHNldC4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoXFxuICBhbnl0aGluZyBzZW50IHZpYSB0YXA+LiBSZW1lbWJlciBmIGluIG9yZGVyIHRvIHJlbW92ZS10YXBcIlxyXG4gW2ZdXHJcbiAobWF5YmUtaW5pdC10YXBzZXQpXHJcbiAoc3dhcCEgdGFwc2V0IGNvbmogZilcclxuIG5pbClcclxuIn0gezpzeW0gZmlsdGVydiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB2ZWN0b3Igb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmlsdGVydlxyXG4gXCJSZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cIlxyXG4gW3ByZWQgY29sbF1cclxuICgtPlxyXG4gIChyZWR1Y2UgKGZuIFt2IG9dIChpZiAocHJlZCBvKSAoY29uaiEgdiBvKSB2KSkgKHRyYW5zaWVudCBbXSkgY29sbClcclxuICBwZXJzaXN0ZW50ISkpXHJcbiJ9IHs6c3ltIGhhc2gsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBoYXNoIGNvZGUgb2YgaXRzIGFyZ3VtZW50LiBOb3RlIHRoaXMgaXMgdGhlIGhhc2ggY29kZVxuICAgY29uc2lzdGVudCB3aXRoID0uIiwgOmFyZ2xpc3RzIChbb10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2hcclxuIFwiUmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIGl0cyBhcmd1bWVudC4gTm90ZSB0aGlzIGlzIHRoZSBoYXNoIGNvZGVcXG4gICBjb25zaXN0ZW50IHdpdGggPS5cIlxyXG4gW29dXHJcbiAoY29uZFxyXG4gIChpbXBsZW1lbnRzPyBJSGFzaCBvKVxyXG4gIChiaXQteG9yICgtaGFzaCBvKSAwKVxyXG4gIChudW1iZXI/IG8pXHJcbiAgKGlmXHJcbiAgIChqcy9pc0Zpbml0ZSBvKVxyXG4gICAoanMtbW9kIChNYXRoL2Zsb29yIG8pIDIxNDc0ODM2NDcpXHJcbiAgIChjYXNlIG8gIyNJbmYgMjE0NjQzNTA3MiAjIy1JbmYgLTEwNDg1NzYgMjE0Njk1OTM2MCkpXHJcbiAgKHRydWU/IG8pXHJcbiAgMTIzMVxyXG4gIChmYWxzZT8gbylcclxuICAxMjM3XHJcbiAgKHN0cmluZz8gbylcclxuICAobTMtaGFzaC1pbnQgKGhhc2gtc3RyaW5nIG8pKVxyXG4gIChpbnN0YW5jZT8ganMvRGF0ZSBvKVxyXG4gIChiaXQteG9yICgudmFsdWVPZiBvKSAwKVxyXG4gIChuaWw/IG8pXHJcbiAgMFxyXG4gIDplbHNlXHJcbiAgKGJpdC14b3IgKC1oYXNoIG8pIDApKSlcclxuIn0gezpzeW0gcXVvdCwgOm1ldGEgezpkb2MgInF1b3RbaWVudF0gb2YgZGl2aWRpbmcgbnVtZXJhdG9yIGJ5IGRlbm9taW5hdG9yLiIsIDphcmdsaXN0cyAoW24gZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1b3RcclxuIFwicXVvdFtpZW50XSBvZiBkaXZpZGluZyBudW1lcmF0b3IgYnkgZGVub21pbmF0b3IuXCJcclxuIFtuIGRdXHJcbiAobGV0IFtyZW0gKGpzLW1vZCBuIGQpXSAoZml4ICgvICgtIG4gcmVtKSBkKSkpKVxyXG4ifSB7OnN5bSBucy1pbnRlcm5zKiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgb2YgdGhlIGludGVybiBtYXBwaW5ncyBmb3IgdGhlIG5hbWVzcGFjZS5cbiAgQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnMtaW50ZXJucypcclxuIFwiUmV0dXJucyBhIG1hcCBvZiB0aGUgaW50ZXJuIG1hcHBpbmdzIGZvciB0aGUgbmFtZXNwYWNlLlxcbiAgQm9vdHN0cmFwIG9ubHkuXCJcclxuIFtzeW1dXHJcbiAobGV0XHJcbiAgW25zLW9iaiAoZmluZC1ucy1vYmogc3ltKSBucyAoTmFtZXNwYWNlLiBucy1vYmogc3ltKV1cclxuICAobGV0Zm5cclxuICAgWyhzdGVwXHJcbiAgICAgW3JldCBrXVxyXG4gICAgIChsZXRcclxuICAgICAgW3Zhci1zeW0gKHN5bWJvbCAoZGVtdW5nZSBrKSldXHJcbiAgICAgIChhc3NvY1xyXG4gICAgICAgcmV0XHJcbiAgICAgICB2YXItc3ltXHJcbiAgICAgICAoVmFyLlxyXG4gICAgICAgIChmbiogW10gKGdvYmplY3QvZ2V0IG5zLW9iaiBrKSlcclxuICAgICAgICAoc3ltYm9sIChzdHIgc3ltKSAoc3RyIHZhci1zeW0pKVxyXG4gICAgICAgIHs6bnMgbnN9KSkpKV1cclxuICAgKHJlZHVjZSBzdGVwIHt9IChqcy1rZXlzIG5zLW9iaikpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1kb3VibGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWRvdWJsZSBbeF0geClcclxuIn0gezpzeW0gcmFuZ2VkLWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Ygc3RhcnQgZW5kXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmFuZ2VkLWl0ZXJhdG9yXHJcbiBbdiBzdGFydCBlbmRdXHJcbiAobGV0XHJcbiAgW2kgc3RhcnRdXHJcbiAgKFJhbmdlZEl0ZXJhdG9yLlxyXG4gICBpXHJcbiAgICgtIGkgKGpzLW1vZCBpIDMyKSlcclxuICAgKHdoZW4gKDwgc3RhcnQgKGNvdW50IHYpKSAodW5jaGVja2VkLWFycmF5LWZvciB2IGkpKVxyXG4gICB2XHJcbiAgIHN0YXJ0XHJcbiAgIGVuZCkpKVxyXG4ifSB7OnN5bSBJVHJhbnNpZW50VmVjdG9yLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB2ZWN0b3IgZnVuY3Rpb25hbGl0eSB0byB0cmFuc2llbnQgY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtYXNzb2MtbiEgLXBvcCEpfSB7OnN5bSBrZXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hcCBlbnRyeS4iLCA6YXJnbGlzdHMgKFttYXAtZW50cnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXlcclxuIFwiUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXAgZW50cnkuXCJcclxuIFttYXAtZW50cnldXHJcbiAoLWtleSBtYXAtZW50cnkpKVxyXG4ifSB7OnN5bSBsb25ncywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBsb25ncyBbeF0geClcclxuIn0gezpzeW0gbm90PSwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKG5vdCAoPSBvYmoxIG9iajIpKSIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbm90PVxyXG4gXCJTYW1lIGFzIChub3QgKD0gb2JqMSBvYmoyKSlcIlxyXG4gKFt4XSBmYWxzZSlcclxuIChbeCB5XSAobm90ICg9IHggeSkpKVxyXG4gKFt4IHkgJiBtb3JlXSAobm90IChhcHBseSA9IHggeSBtb3JlKSkpKVxyXG4ifSB7OnN5bSBzZXQtcHJpbnQtZXJyLWZuISwgOm1ldGEgezpkb2MgIlNldCAqcHJpbnQtZXJyLWZuKiB0byBmLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQtcHJpbnQtZXJyLWZuIVxyXG4gXCJTZXQgKnByaW50LWVyci1mbiogdG8gZi5cIlxyXG4gW2ZdXHJcbiAoc2V0ISAqcHJpbnQtZXJyLWZuKiBmKSlcclxuIn0gezpzeW0gZmFzdC1wYXRoLXByb3RvY29scywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGZhc3QtcGF0aC1wcm90b2NvbHNcclxuIFwicHJvdG9jb2wgZnFuIC0+IFtwYXJ0aXRpb24gbnVtYmVyLCBiaXRdXCJcclxuICh6aXBtYXBcclxuICAobWFwXHJcbiAgIChmbiogW3AxX180ODY4NyNdIChzeW1ib2wgXCJjbGpzLmNvcmVcIiAoY29yZS9zdHIgcDFfXzQ4Njg3IykpKVxyXG4gICAnW0lGblxyXG4gICAgIElDb3VudGVkXHJcbiAgICAgSUVtcHR5YWJsZUNvbGxlY3Rpb25cclxuICAgICBJQ29sbGVjdGlvblxyXG4gICAgIElJbmRleGVkXHJcbiAgICAgQVNlcVxyXG4gICAgIElTZXFcclxuICAgICBJTmV4dFxyXG4gICAgIElMb29rdXBcclxuICAgICBJQXNzb2NpYXRpdmVcclxuICAgICBJTWFwXHJcbiAgICAgSU1hcEVudHJ5XHJcbiAgICAgSVNldFxyXG4gICAgIElTdGFja1xyXG4gICAgIElWZWN0b3JcclxuICAgICBJRGVyZWZcclxuICAgICBJRGVyZWZXaXRoVGltZW91dFxyXG4gICAgIElNZXRhXHJcbiAgICAgSVdpdGhNZXRhXHJcbiAgICAgSVJlZHVjZVxyXG4gICAgIElLVlJlZHVjZVxyXG4gICAgIElFcXVpdlxyXG4gICAgIElIYXNoXHJcbiAgICAgSVNlcWFibGVcclxuICAgICBJU2VxdWVudGlhbFxyXG4gICAgIElMaXN0XHJcbiAgICAgSVJlY29yZFxyXG4gICAgIElSZXZlcnNpYmxlXHJcbiAgICAgSVNvcnRlZFxyXG4gICAgIElQcmludFdpdGhXcml0ZXJcclxuICAgICBJV3JpdGVyXHJcbiAgICAgSVByaW50V2l0aFdyaXRlclxyXG4gICAgIElQZW5kaW5nXHJcbiAgICAgSVdhdGNoYWJsZVxyXG4gICAgIElFZGl0YWJsZUNvbGxlY3Rpb25cclxuICAgICBJVHJhbnNpZW50Q29sbGVjdGlvblxyXG4gICAgIElUcmFuc2llbnRBc3NvY2lhdGl2ZVxyXG4gICAgIElUcmFuc2llbnRNYXBcclxuICAgICBJVHJhbnNpZW50VmVjdG9yXHJcbiAgICAgSVRyYW5zaWVudFNldFxyXG4gICAgIElNdWx0aUZuXHJcbiAgICAgSUNodW5rZWRTZXFcclxuICAgICBJQ2h1bmtlZE5leHRcclxuICAgICBJQ29tcGFyYWJsZVxyXG4gICAgIElOYW1lZFxyXG4gICAgIElDbG9uZWFibGVcclxuICAgICBJQXRvbVxyXG4gICAgIElSZXNldFxyXG4gICAgIElTd2FwXHJcbiAgICAgSUl0ZXJhYmxlXSlcclxuICAoaXRlcmF0ZVxyXG4gICAoY29yZS9mblxyXG4gICAgW1twIGJdXVxyXG4gICAgKGlmXHJcbiAgICAgKGNvcmUvPT0gMjE0NzQ4MzY0OCBiKVxyXG4gICAgIFsoY29yZS9pbmMgcCkgMV1cclxuICAgICBbcCAjPyg6Y2xqIChjb3JlL2JpdC1zaGlmdC1sZWZ0IGIgMSkgOmNsanMgKGNvcmUvKiAyIGIpKV0pKVxyXG4gICBbMCAxXSkpKVxyXG4ifSB7OnN5bSBzdHJpbmc/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IHN0cmluZy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgc3RyaW5nLlwiXHJcbiBbeF1cclxuIChnb29nL2lzU3RyaW5nIHgpKVxyXG4ifSB7OnN5bSB1cmk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIHggaXMgYSBnb29nLlVyaSBpbnN0YW5jZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdXJpP1xyXG4gXCJSZXR1cm5zIHRydWUgeCBpcyBhIGdvb2cuVXJpIGluc3RhbmNlLlwiXHJcbiB7OmFkZGVkIFwiMS45XCJ9XHJcbiBbeF1cclxuIChpbnN0YW5jZT8gZ29vZy5VcmkgeCkpXHJcbiJ9IHs6c3ltIGVzNi1pdGVyYXRvciwgOm1ldGEgezpkb2MgIkVYUEVSSU1FTlRBTDogUmV0dXJuIGEgRVMyMDE1IGNvbXBhdGlibGUgaXRlcmF0b3IgZm9yIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzNi1pdGVyYXRvclxyXG4gXCJFWFBFUklNRU5UQUw6IFJldHVybiBhIEVTMjAxNSBjb21wYXRpYmxlIGl0ZXJhdG9yIGZvciBjb2xsLlwiXHJcbiBbY29sbF1cclxuIChFUzZJdGVyYXRvci4gKHNlcSBjb2xsKSkpXHJcbiJ9IHs6c3ltIHByLXN0ci13aXRoLW9wdHMsIDptZXRhIHs6ZG9jICJQcmludHMgYSBzZXF1ZW5jZSBvZiBvYmplY3RzIHRvIGEgc3RyaW5nLCBvYnNlcnZpbmcgYWxsIHRoZVxuICBvcHRpb25zIGdpdmVuIGluIG9wdHMiLCA6YXJnbGlzdHMgKFtvYmpzIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwci1zdHItd2l0aC1vcHRzXHJcbiBcIlByaW50cyBhIHNlcXVlbmNlIG9mIG9iamVjdHMgdG8gYSBzdHJpbmcsIG9ic2VydmluZyBhbGwgdGhlXFxuICBvcHRpb25zIGdpdmVuIGluIG9wdHNcIlxyXG4gW29ianMgb3B0c11cclxuIChpZiAoZW1wdHk/IG9ianMpIFwiXCIgKHN0ciAocHItc2Itd2l0aC1vcHRzIG9ianMgb3B0cykpKSlcclxuIn0gezpzeW0gbTMtQzIsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG0zLUMyIChpbnQgNDYxODQ1OTA3KSlcclxuIn0gezpzeW0gKnByaW50LW5ld2xpbmUqLCA6bWV0YSB7OmRvYyAiV2hlbiBzZXQgdG8gbG9naWNhbCBmYWxzZSB3aWxsIGRyb3AgbmV3bGluZXMgZnJvbSBwcmludGluZyBjYWxscy5cbiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCB0aGUgaW1wbGljaXQgbmV3bGluZXMgZW1pdHRlZCBieSBzdGFuZGFyZCBKYXZhU2NyaXB0XG4gIGNvbnNvbGUgb2JqZWN0cy4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbmV3bGluZSogdHJ1ZSlcclxuIn0gezpzeW0gdW5jaGVja2VkLW11bHRpcGx5LWludCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1tdWx0aXBseS1pbnRcclxuIFwiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLlwiXHJcbiAoW10gMSlcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1tdWx0aXBseS1pbnQgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlXHJcbiAgIHVuY2hlY2tlZC1tdWx0aXBseS1pbnRcclxuICAgKGNsanMuY29yZS91bmNoZWNrZWQtbXVsdGlwbHktaW50IHggeSlcclxuICAgbW9yZSkpKVxyXG4ifSB7OnN5bSBjaHVuay1yZXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuIGNodW5rLXJlc3QgW3NdICgtY2h1bmtlZC1yZXN0IHMpKVxyXG4ifSB7OnN5bSByZW1vdmUtYWxsLW1ldGhvZHMsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGFsbCBvZiB0aGUgbWV0aG9kcyBvZiBtdWx0aW1ldGhvZC4iLCA6YXJnbGlzdHMgKFttdWx0aWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlLWFsbC1tZXRob2RzXHJcbiBcIlJlbW92ZXMgYWxsIG9mIHRoZSBtZXRob2RzIG9mIG11bHRpbWV0aG9kLlwiXHJcbiBbbXVsdGlmbl1cclxuICgtcmVzZXQgbXVsdGlmbikpXHJcbiJ9IHs6c3ltIHRyYW1wb2xpbmUsIDptZXRhIHs6ZG9jICJ0cmFtcG9saW5lIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYWxnb3JpdGhtcyByZXF1aXJpbmcgbXV0dWFsXG4gIHJlY3Vyc2lvbiB3aXRob3V0IHN0YWNrIGNvbnN1bXB0aW9uLiBDYWxscyBmIHdpdGggc3VwcGxpZWQgYXJncywgaWZcbiAgYW55LiBJZiBmIHJldHVybnMgYSBmbiwgY2FsbHMgdGhhdCBmbiB3aXRoIG5vIGFyZ3VtZW50cywgYW5kXG4gIGNvbnRpbnVlcyB0byByZXBlYXQsIHVudGlsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IGEgZm4sIHRoZW5cbiAgcmV0dXJucyB0aGF0IG5vbi1mbiB2YWx1ZS4gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJldHVybiBhIGZuIGFzIGFcbiAgZmluYWwgdmFsdWUsIHlvdSBtdXN0IHdyYXAgaXQgaW4gc29tZSBkYXRhIHN0cnVjdHVyZSBhbmQgdW5wYWNrIGl0XG4gIGFmdGVyIHRyYW1wb2xpbmUgcmV0dXJucy4iLCA6YXJnbGlzdHMgW1tmXSBbZiAmIGFyZ3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFtcG9saW5lXHJcbiBcInRyYW1wb2xpbmUgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhbGdvcml0aG1zIHJlcXVpcmluZyBtdXR1YWxcXG4gIHJlY3Vyc2lvbiB3aXRob3V0IHN0YWNrIGNvbnN1bXB0aW9uLiBDYWxscyBmIHdpdGggc3VwcGxpZWQgYXJncywgaWZcXG4gIGFueS4gSWYgZiByZXR1cm5zIGEgZm4sIGNhbGxzIHRoYXQgZm4gd2l0aCBubyBhcmd1bWVudHMsIGFuZFxcbiAgY29udGludWVzIHRvIHJlcGVhdCwgdW50aWwgdGhlIHJldHVybiB2YWx1ZSBpcyBub3QgYSBmbiwgdGhlblxcbiAgcmV0dXJucyB0aGF0IG5vbi1mbiB2YWx1ZS4gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJldHVybiBhIGZuIGFzIGFcXG4gIGZpbmFsIHZhbHVlLCB5b3UgbXVzdCB3cmFwIGl0IGluIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgYW5kIHVucGFjayBpdFxcbiAgYWZ0ZXIgdHJhbXBvbGluZSByZXR1cm5zLlwiXHJcbiAoW2ZdIChsZXQgW3JldCAoZildIChpZiAoZm4/IHJldCkgKHJlY3VyIHJldCkgcmV0KSkpXHJcbiAoW2YgJiBhcmdzXSAodHJhbXBvbGluZSAoZm4qIFtdIChhcHBseSBmIGFyZ3MpKSkpKVxyXG4ifSB7OnN5bSBkb3VibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGZvciBKYXZhU2NyaXB0IG51bWJlcnMsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZG91YmxlP1xyXG4gXCJSZXR1cm5zIHRydWUgZm9yIEphdmFTY3JpcHQgbnVtYmVycywgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChudW1iZXI/IHgpKVxyXG4ifSB7OnN5bSB2ZWMsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLiBKYXZhU2NyaXB0IGFycmF5c1xuICB3aWxsIGJlIGFsaWFzZWQgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZlY1xyXG4gXCJDcmVhdGVzIGEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLiBKYXZhU2NyaXB0IGFycmF5c1xcbiAgd2lsbCBiZSBhbGlhc2VkIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLlwiXHJcbiBbY29sbF1cclxuIChjb25kXHJcbiAgKG1hcC1lbnRyeT8gY29sbClcclxuICBbKGtleSBjb2xsKSAodmFsIGNvbGwpXVxyXG4gICh2ZWN0b3I/IGNvbGwpXHJcbiAgKHdpdGgtbWV0YSBjb2xsIG5pbClcclxuICAoYXJyYXk/IGNvbGwpXHJcbiAgKC5mcm9tQXJyYXkgUGVyc2lzdGVudFZlY3RvciBjb2xsIHRydWUpXHJcbiAgOmVsc2VcclxuICAoLXBlcnNpc3RlbnQhXHJcbiAgIChyZWR1Y2UgLWNvbmohICgtYXMtdHJhbnNpZW50ICguLUVNUFRZIFBlcnNpc3RlbnRWZWN0b3IpKSBjb2xsKSkpKVxyXG4ifSB7OnN5bSAqcHJpbnQtbWV0YSosIDptZXRhIHs6ZG9jICJJZiBzZXQgdG8gbG9naWNhbCB0cnVlLCB3aGVuIHByaW50aW5nIGFuIG9iamVjdCwgaXRzIG1ldGFkYXRhIHdpbGwgYWxzb1xuICBiZSBwcmludGVkIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZWFkIGJhY2sgYnkgdGhlIHJlYWRlci5cblxuICBEZWZhdWx0cyB0byBmYWxzZS4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbWV0YSogZmFsc2UpXHJcbiJ9IHs6c3ltIC1ub3RpZnktd2F0Y2hlcywgOm1ldGEgezpkb2MgIkNhbGxzIGFsbCB3YXRjaGVycyB3aXRoIHRoaXMsIG9sZHZhbCBhbmQgbmV3dmFsLiIsIDphcmdsaXN0cyAoW3RoaXMgb2xkdmFsIG5ld3ZhbF0pfSwgOnByb3RvY29sIElXYXRjaGFibGV9IHs6c3ltIGludCwgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBpbnQgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRcclxuIFwiQ29lcmNlIHRvIGludCBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuXCJcclxuIFt4XVxyXG4gKGJpdC1vciB4IDApKVxyXG4ifSB7OnN5bSBtYXAtZW50cnk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElNYXBFbnRyeSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtZW50cnk/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJTWFwRW50cnlcIlxyXG4gW3hdXHJcbiAoaW1wbGVtZW50cz8gSU1hcEVudHJ5IHgpKVxyXG4ifSB7OnN5bSByYW5kLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHJhbmRvbSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZFxuICBuIChkZWZhdWx0IDEpIChleGNsdXNpdmUpLiIsIDphcmdsaXN0cyBbW10gW25dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kXHJcbiBcIlJldHVybnMgYSByYW5kb20gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmRcXG4gIG4gKGRlZmF1bHQgMSkgKGV4Y2x1c2l2ZSkuXCJcclxuIChbXSAocmFuZCAxKSlcclxuIChbbl0gKCogKE1hdGgvcmFuZG9tKSBuKSkpXHJcbiJ9IHs6c3ltIHNlY29uZCwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKGZpcnN0IChuZXh0IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIHNlY29uZCBcIlNhbWUgYXMgKGZpcnN0IChuZXh0IHgpKVwiIFtjb2xsXSAoZmlyc3QgKG5leHQgY29sbCkpKVxyXG4ifSB7OnN5bSBmaW5kLW5zLW9iaiwgOm1ldGEgezpkb2MgIkJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1ucy1vYmpcclxuIFwiQm9vdHN0cmFwIG9ubHkuXCJcclxuIFtuc11cclxuIChsZXRcclxuICBbbXVuZ2VkLW5zIChtdW5nZSAoc3RyIG5zKSkgc2VncyAoLnNwbGl0IG11bmdlZC1ucyBcIi5cIildXHJcbiAgKGNhc2VcclxuICAgKnRhcmdldCpcclxuICAgXCJub2RlanNcIlxyXG4gICAoaWZcclxuICAgIGpzL0NPTVBJTEVEXHJcbiAgICAoZmluZC1ucy1vYmoqXHJcbiAgICAgKHRyeVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbY3R4dCAoanMvZXZhbCAoZmlyc3Qgc2VncykpXVxyXG4gICAgICAgKHdoZW4gKGFuZCBjdHh0IChvYmplY3Q/IGN0eHQpKSBjdHh0KSlcclxuICAgICAgKGNhdGNoIGpzL1JlZmVyZW5jZUVycm9yIGUgbmlsKSlcclxuICAgICAobmV4dCBzZWdzKSlcclxuICAgIChmaW5kLW5zLW9iaiogZ29vZy9nbG9iYWwgc2VncykpXHJcbiAgIChcImRlZmF1bHRcIiBcIndlYndvcmtlclwiKVxyXG4gICAoZmluZC1ucy1vYmoqIGdvb2cvZ2xvYmFsIHNlZ3MpXHJcbiAgICh0aHJvd1xyXG4gICAgKGpzL0Vycm9yLlxyXG4gICAgIChzdHIgXCJmaW5kLW5zLW9iaiBub3Qgc3VwcG9ydGVkIGZvciB0YXJnZXQgXCIgKnRhcmdldCopKSkpKSlcclxuIn0gezpzeW0gSUVkaXRhYmxlQ29sbGVjdGlvbiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjb2xsZWN0aW9ucyB3aGljaCBjYW4gdHJhbnNmb3JtZWQgdG8gdHJhbnNpZW50cy4ifSwgOm1ldGhvZHMgKC1hcy10cmFuc2llbnQpfSB7OnN5bSBoYXNoLWNvbWJpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc2VlZCBoYXNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1jb21iaW5lXHJcbiBbc2VlZCBoYXNoXVxyXG4gKGJpdC14b3JcclxuICBzZWVkXHJcbiAgKCtcclxuICAgaGFzaFxyXG4gICAyNjU0NDM1NzY5XHJcbiAgIChiaXQtc2hpZnQtbGVmdCBzZWVkIDYpXHJcbiAgIChiaXQtc2hpZnQtcmlnaHQgc2VlZCAyKSkpKVxyXG4ifSB7OnN5bSA+LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBvcmRlcixcbiAgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPlxyXG4gXCJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIG9yZGVyLFxcbiAgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKGNsanMuY29yZS8+IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChjbGpzLmNvcmUvPiB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgIChjbGpzLmNvcmUvPiB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIC1uYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZSBTdHJpbmcgb2YgeC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgSU5hbWVkfSB7OnN5bSByZXBsYWNlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtYXAgb2YgcmVwbGFjZW1lbnQgcGFpcnMgYW5kIGEgdmVjdG9yL2NvbGxlY3Rpb24sIHJldHVybnMgYVxuICB2ZWN0b3Ivc2VxIHdpdGggYW55IGVsZW1lbnRzID0gYSBrZXkgaW4gc21hcCByZXBsYWNlZCB3aXRoIHRoZVxuICBjb3JyZXNwb25kaW5nIHZhbCBpbiBzbWFwLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uXG4gIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3NtYXBdIFtzbWFwIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBsYWNlXHJcbiBcIkdpdmVuIGEgbWFwIG9mIHJlcGxhY2VtZW50IHBhaXJzIGFuZCBhIHZlY3Rvci9jb2xsZWN0aW9uLCByZXR1cm5zIGFcXG4gIHZlY3Rvci9zZXEgd2l0aCBhbnkgZWxlbWVudHMgPSBhIGtleSBpbiBzbWFwIHJlcGxhY2VkIHdpdGggdGhlXFxuICBjb3JyZXNwb25kaW5nIHZhbCBpbiBzbWFwLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uXFxuICBpcyBwcm92aWRlZC5cIlxyXG4gKFtzbWFwXVxyXG4gIChtYXBcclxuICAgKGZuKlxyXG4gICAgW3AxX180ODgzMiNdXHJcbiAgICAoaWYtbGV0IFtlIChmaW5kIHNtYXAgcDFfXzQ4ODMyIyldICh2YWwgZSkgcDFfXzQ4ODMyIykpKSlcclxuIChbc21hcCBjb2xsXVxyXG4gIChpZlxyXG4gICAodmVjdG9yPyBjb2xsKVxyXG4gICAobGV0XHJcbiAgICBbbiAoY291bnQgY29sbCldXHJcbiAgICAocmVkdWNlXHJcbiAgICAgKGZuXHJcbiAgICAgIFt2IGldXHJcbiAgICAgIChpZi1sZXQgW2UgKGZpbmQgc21hcCAobnRoIHYgaSkpXSAoYXNzb2MgdiBpIChzZWNvbmQgZSkpIHYpKVxyXG4gICAgIGNvbGxcclxuICAgICAodGFrZSBuIChpdGVyYXRlIGluYyAwKSkpKVxyXG4gICAobWFwXHJcbiAgICAoZm4qXHJcbiAgICAgW3AxX180ODgzMyNdXHJcbiAgICAgKGlmLWxldCBbZSAoZmluZCBzbWFwIHAxX180ODgzMyMpXSAoc2Vjb25kIGUpIHAxX180ODgzMyMpKVxyXG4gICAgY29sbCkpKSlcclxuIn0gezpzeW0gaW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludGVnZXI/IG9yIGlzIGFuIGluc3RhbmNlIG9mIGdvb2cubWF0aC5JbnRlZ2VyXG4gICBvciBnb29nLm1hdGguTG9uZy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnRlZ2VyPyBvciBpcyBhbiBpbnN0YW5jZSBvZiBnb29nLm1hdGguSW50ZWdlclxcbiAgIG9yIGdvb2cubWF0aC5Mb25nLlwiXHJcbiBbeF1cclxuIChvclxyXG4gIChpbnRlZ2VyPyB4KVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkludGVnZXIgeClcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5Mb25nIHgpKSlcclxuIn0gezpzeW0gYXNzb2NpYXRpdmU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBJQXNzb2NpYXRpdmUiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXNzb2NpYXRpdmU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgSUFzc29jaWF0aXZlXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUFzc29jaWF0aXZlIHgpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtaW50LCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGludCBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1pbnRcclxuIFwiQ29lcmNlIHRvIGludCBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuXCJcclxuIFt4XVxyXG4gKGZpeCB4KSlcclxuIn0gezpzeW0ganMta2V5cywgOm1ldGEgezpkb2MgIlJldHVybiB0aGUgSmF2YVNjcmlwdCBrZXlzIGZvciBhbiBvYmplY3QuIiwgOmFyZ2xpc3RzIChbb2JqXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMta2V5c1xyXG4gXCJSZXR1cm4gdGhlIEphdmFTY3JpcHQga2V5cyBmb3IgYW4gb2JqZWN0LlwiXHJcbiBbb2JqXVxyXG4gKGdvYmplY3QvZ2V0S2V5cyBvYmopKVxyXG4ifSB7OnN5bSBpbnN0LW1zKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpbnN0XSl9LCA6cHJvdG9jb2wgSW5zdH0gezpzeW0ga2V5d29yZD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgS2V5d29yZCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXl3b3JkP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgS2V5d29yZFwiXHJcbiBbeF1cclxuIChpbnN0YW5jZT8gS2V5d29yZCB4KSlcclxuIn0gezpzeW0gYXJyYXktaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBhcnJheS1pdGVyIFt4XSAoQXJyYXlJdGVyLiB4IDApKVxyXG4ifSB7OnN5bSBmb3JjZSwgOm1ldGEgezpkb2MgIklmIHggaXMgYSBEZWxheSwgcmV0dXJucyB0aGUgKHBvc3NpYmx5IGNhY2hlZCkgdmFsdWUgb2YgaXRzIGV4cHJlc3Npb24sIGVsc2UgcmV0dXJucyB4IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcmNlXHJcbiBcIklmIHggaXMgYSBEZWxheSwgcmV0dXJucyB0aGUgKHBvc3NpYmx5IGNhY2hlZCkgdmFsdWUgb2YgaXRzIGV4cHJlc3Npb24sIGVsc2UgcmV0dXJucyB4XCJcclxuIFt4XVxyXG4gKGlmIChkZWxheT8geCkgKGRlcmVmIHgpIHgpKVxyXG4ifSB7OnN5bSBncm91cC1ieSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwga2V5ZWQgYnkgdGhlIHJlc3VsdCBvZlxuICBmIG9uIGVhY2ggZWxlbWVudC4gVGhlIHZhbHVlIGF0IGVhY2gga2V5IHdpbGwgYmUgYSB2ZWN0b3Igb2YgdGhlXG4gIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMsIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhcmVkIGluIGNvbGwuIiwgOmFyZ2xpc3RzIChbZiBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ3JvdXAtYnlcclxuIFwiUmV0dXJucyBhIG1hcCBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCBrZXllZCBieSB0aGUgcmVzdWx0IG9mXFxuICBmIG9uIGVhY2ggZWxlbWVudC4gVGhlIHZhbHVlIGF0IGVhY2gga2V5IHdpbGwgYmUgYSB2ZWN0b3Igb2YgdGhlXFxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXJlZCBpbiBjb2xsLlwiXHJcbiBbZiBjb2xsXVxyXG4gKHBlcnNpc3RlbnQhXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4gW3JldCB4XSAobGV0IFtrIChmIHgpXSAoYXNzb2MhIHJldCBrIChjb25qIChnZXQgcmV0IGsgW10pIHgpKSkpXHJcbiAgICh0cmFuc2llbnQge30pXHJcbiAgIGNvbGwpKSlcclxuIn0gezpzeW0gLXJzZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGluIHJldmVyc2VkIG9yZGVyLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJUmV2ZXJzaWJsZX0gezpzeW0gcHJuLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBwciBmb2xsb3dlZCBieSAobmV3bGluZSkuIiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJuXHJcbiBcIlNhbWUgYXMgcHIgZm9sbG93ZWQgYnkgKG5ld2xpbmUpLlwiXHJcbiBbJiBvYmpzXVxyXG4gKHByLXdpdGgtb3B0cyBvYmpzIChwci1vcHRzKSlcclxuICh3aGVuICpwcmludC1uZXdsaW5lKiAobmV3bGluZSAocHItb3B0cykpKSlcclxuIn0gezpzeW0gZGVmYXVsdC1kaXNwYXRjaC12YWwsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm4gaXQncyBkZWZhdWx0LWRpc3BhdGNoLXZhbC4iLCA6YXJnbGlzdHMgKFttdWx0aWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVmYXVsdC1kaXNwYXRjaC12YWxcclxuIFwiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJuIGl0J3MgZGVmYXVsdC1kaXNwYXRjaC12YWwuXCJcclxuIFttdWx0aWZuXVxyXG4gKC1kZWZhdWx0LWRpc3BhdGNoLXZhbCBtdWx0aWZuKSlcclxuIn0gezpzeW0ganMtaXRlcmFibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBoYXMgYSBKYXZhU2NyaXB0IGl0ZXJhdG9yIHByb3BlcnR5IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLWl0ZXJhYmxlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGhhcyBhIEphdmFTY3JpcHQgaXRlcmF0b3IgcHJvcGVydHlcIlxyXG4gW3hdXHJcbiAoYW5kIChub3QgKG5pbD8geCkpIChub3QgKG5pbD8gKGpzKiBcIn57fVt+e31dXCIgeCBJVEVSX1NZTUJPTCkpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1tdWx0aXBseSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1tdWx0aXBseVxyXG4gXCJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuXCJcclxuIChbXSAxKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLW11bHRpcGx5IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZSB1bmNoZWNrZWQtbXVsdGlwbHkgKGNsanMuY29yZS91bmNoZWNrZWQtbXVsdGlwbHkgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIGV2ZW4/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG4gaXMgZXZlbiwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBuIGlzIG5vdCBhbiBpbnRlZ2VyIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2ZW4/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGV2ZW4sIHRocm93cyBhbiBleGNlcHRpb24gaWYgbiBpcyBub3QgYW4gaW50ZWdlclwiXHJcbiBbbl1cclxuIChpZlxyXG4gIChpbnRlZ2VyPyBuKVxyXG4gICh6ZXJvPyAoYml0LWFuZCBuIDEpKVxyXG4gICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJBcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXI6IFwiIG4pKSkpKVxyXG4ifSB7OnN5bSBlczYtaXRlcmF0b3Itc2VxLCA6bWV0YSB7OmRvYyAiRVhQRVJJTUVOVEFMOiBHaXZlbiBhbiBFUzIwMTUgY29tcGF0aWJsZSBpdGVyYXRvciByZXR1cm4gYSBzZXEuIiwgOmFyZ2xpc3RzIChbaXRlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzNi1pdGVyYXRvci1zZXFcclxuIFwiRVhQRVJJTUVOVEFMOiBHaXZlbiBhbiBFUzIwMTUgY29tcGF0aWJsZSBpdGVyYXRvciByZXR1cm4gYSBzZXEuXCJcclxuIFtpdGVyXVxyXG4gKGxldFxyXG4gIFt2ICgubmV4dCBpdGVyKV1cclxuICAoaWYgKC4tZG9uZSB2KSBuaWwgKEVTNkl0ZXJhdG9yU2VxLiAoLi12YWx1ZSB2KSBpdGVyIG5pbCkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWRlYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiB4LCBhbiBpbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1kZWNcclxuIFwiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIHgsIGFuIGludC5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3VuY2hlY2tlZC1kZWMgeCkpXHJcbiJ9IHs6c3ltIEluc3QsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChpbnN0LW1zKil9IHs6c3ltIHBlcnNpc3RlbnQtYXJyYXktbWFwLXNlcSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthcnIgaSBfbWV0YV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBlcnNpc3RlbnQtYXJyYXktbWFwLXNlcVxyXG4gW2FyciBpIF9tZXRhXVxyXG4gKHdoZW5cclxuICAoPD0gaSAoLSAoYWxlbmd0aCBhcnIpIDIpKVxyXG4gIChQZXJzaXN0ZW50QXJyYXlNYXBTZXEuIGFyciBpIF9tZXRhKSkpXHJcbiJ9IHs6c3ltIHRhZ2dlZC1saXRlcmFsPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHRhZ2dlZCBsaXRlcmFsIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWdnZWQtbGl0ZXJhbD9cclxuIFwiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGFnZ2VkIGxpdGVyYWxcIlxyXG4gW3ZhbHVlXVxyXG4gKGluc3RhbmNlPyBUYWdnZWRMaXRlcmFsIHZhbHVlKSlcclxuIn0gezpzeW0gZG91YmxlLWFycmF5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBhcnJheSBvZiBkb3VibGVzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XG4gIHdpdGggQ2xvanVyZS4iLCA6YXJnbGlzdHMgW1tzaXplLW9yLXNlcV0gW3NpemUgaW5pdC12YWwtb3Itc2VxXV19LCA6c291cmNlICIoZGVmblxyXG4gZG91YmxlLWFycmF5XHJcbiBcIkNyZWF0ZXMgYW4gYXJyYXkgb2YgZG91Ymxlcy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxcbiAgd2l0aCBDbG9qdXJlLlwiXHJcbiAoW3NpemUtb3Itc2VxXVxyXG4gIChpZlxyXG4gICAobnVtYmVyPyBzaXplLW9yLXNlcSlcclxuICAgKGRvdWJsZS1hcnJheSBzaXplLW9yLXNlcSBuaWwpXHJcbiAgIChpbnRvLWFycmF5IHNpemUtb3Itc2VxKSkpXHJcbiAoW3NpemUgaW5pdC12YWwtb3Itc2VxXVxyXG4gIChsZXRcclxuICAgW2EgKG1ha2UtYXJyYXkgc2l6ZSldXHJcbiAgIChpZlxyXG4gICAgKHNlcT8gaW5pdC12YWwtb3Itc2VxKVxyXG4gICAgKGxldFxyXG4gICAgIFtzIChzZXEgaW5pdC12YWwtb3Itc2VxKV1cclxuICAgICAobG9vcFxyXG4gICAgICBbaSAwIHMgc11cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIHMgKDwgaSBzaXplKSlcclxuICAgICAgIChkbyAoYXNldCBhIGkgKGZpcnN0IHMpKSAocmVjdXIgKGluYyBpKSAobmV4dCBzKSkpXHJcbiAgICAgICBhKSkpXHJcbiAgICAoZG8gKGRvdGltZXMgW2kgc2l6ZV0gKGFzZXQgYSBpIGluaXQtdmFsLW9yLXNlcSkpIGEpKSkpKVxyXG4ifSB7OnN5bSBjcmVhdGUtbnMsIDptZXRhIHs6ZG9jICJDcmVhdGUgYSBuZXcgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wuIEJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyBbW3N5bV0gW3N5bSBucy1vYmpdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjcmVhdGUtbnNcclxuIFwiQ3JlYXRlIGEgbmV3IG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sLiBCb290c3RyYXAgb25seS5cIlxyXG4gKFtzeW1dIChjcmVhdGUtbnMgc3ltIChmaW5kLW5zLW9iaiBzeW0pKSlcclxuIChbc3ltIG5zLW9ial0gKE5hbWVzcGFjZS4gbnMtb2JqIHN5bSkpKVxyXG4ifSB7OnN5bSBkZWZuLCA6bWV0YSB7OmFyZ2xpc3RzIChxdW90ZSAoW25hbWUgZG9jLXN0cmluZz8gYXR0ci1tYXA/IFtwYXJhbXMqXSBwcmVwb3N0LW1hcD8gYm9keV0gW25hbWUgZG9jLXN0cmluZz8gYXR0ci1tYXA/IChbcGFyYW1zKl0gcHJlcG9zdC1tYXA/IGJvZHkpICsgYXR0ci1tYXA/XSkpLCA6ZG9jICJTYW1lIGFzIChkZWYgbmFtZSAoY29yZS9mbiBbcGFyYW1zKiBdIGV4cHJzKikpIG9yIChkZWZcbiAgICBuYW1lIChjb3JlL2ZuIChbcGFyYW1zKiBdIGV4cHJzKikrKSkgd2l0aCBhbnkgZG9jLXN0cmluZyBvciBhdHRycyBhZGRlZFxuICAgIHRvIHRoZSB2YXIgbWV0YWRhdGEuIHByZXBvc3QtbWFwIGRlZmluZXMgYSBtYXAgd2l0aCBvcHRpb25hbCBrZXlzXG4gICAgOnByZSBhbmQgOnBvc3QgdGhhdCBjb250YWluIGNvbGxlY3Rpb25zIG9mIHByZSBvciBwb3N0IGNvbmRpdGlvbnMuIn0sIDpzb3VyY2UgIihkZWZcclxuIGRlZm5cclxuIChjb3JlL2ZuXHJcbiAgZGVmblxyXG4gIFsmZm9ybSAmZW52IG5hbWUgJiBmZGVjbF1cclxuICAoaWZcclxuICAgKGNvcmUvaW5zdGFuY2U/ICM/KDpjbGogY2xvanVyZS5sYW5nLlN5bWJvbCA6Y2xqcyBTeW1ib2wpIG5hbWUpXHJcbiAgIG5pbFxyXG4gICAodGhyb3dcclxuICAgICM/KDpjbGogKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi4gXCJGaXJzdCBhcmd1bWVudCB0byBkZWZuIG11c3QgYmUgYSBzeW1ib2xcIikgOmNsanMgKGpzL0Vycm9yLiBcIkZpcnN0IGFyZ3VtZW50IHRvIGRlZm4gbXVzdCBiZSBhIHN5bWJvbFwiKSkpKVxyXG4gIChjb3JlL2xldFxyXG4gICBbbVxyXG4gICAgKGlmIChjb3JlL3N0cmluZz8gKGZpcnN0IGZkZWNsKSkgezpkb2MgKGZpcnN0IGZkZWNsKX0ge30pXHJcbiAgICBmZGVjbFxyXG4gICAgKGlmIChjb3JlL3N0cmluZz8gKGZpcnN0IGZkZWNsKSkgKG5leHQgZmRlY2wpIGZkZWNsKVxyXG4gICAgbVxyXG4gICAgKGlmIChtYXA/IChmaXJzdCBmZGVjbCkpIChjb25qIG0gKGZpcnN0IGZkZWNsKSkgbSlcclxuICAgIGZkZWNsXHJcbiAgICAoaWYgKG1hcD8gKGZpcnN0IGZkZWNsKSkgKG5leHQgZmRlY2wpIGZkZWNsKVxyXG4gICAgZmRlY2xcclxuICAgIChpZiAodmVjdG9yPyAoZmlyc3QgZmRlY2wpKSAoY29yZS9saXN0IGZkZWNsKSBmZGVjbClcclxuICAgIG1cclxuICAgIChpZiAobWFwPyAobGFzdCBmZGVjbCkpIChjb25qIG0gKGxhc3QgZmRlY2wpKSBtKVxyXG4gICAgZmRlY2xcclxuICAgIChpZiAobWFwPyAobGFzdCBmZGVjbCkpIChidXRsYXN0IGZkZWNsKSBmZGVjbClcclxuICAgIG1cclxuICAgIChjb25qIHs6YXJnbGlzdHMgKGNvcmUvbGlzdCAncXVvdGUgKHNpZ3MgZmRlY2wpKX0gbSlcclxuICAgIG1cclxuICAgIChjb25qIChpZiAobWV0YSBuYW1lKSAobWV0YSBuYW1lKSB7fSkgbSldXHJcbiAgIChjb3JlL2NvbmRcclxuICAgIChtdWx0aS1hcml0eS1mbj8gZmRlY2wpXHJcbiAgICAobXVsdGktYXJpdHktZm5cclxuICAgICBuYW1lXHJcbiAgICAgKGlmXHJcbiAgICAgIChjb21wL2NoZWNraW5nLXR5cGVzPylcclxuICAgICAgKHVwZGF0ZS1pbiBtIFs6anNkb2NdIGNvbmogXCJAcGFyYW0gey4uLip9IHZhcl9hcmdzXCIpXHJcbiAgICAgIG0pXHJcbiAgICAgZmRlY2xcclxuICAgICAoOmRlZi1lbWl0cy12YXIgJmVudikpXHJcbiAgICAodmFyaWFkaWMtZm4/IGZkZWNsKVxyXG4gICAgKHZhcmlhZGljLWZuXHJcbiAgICAgbmFtZVxyXG4gICAgIChpZlxyXG4gICAgICAoY29tcC9jaGVja2luZy10eXBlcz8pXHJcbiAgICAgICh1cGRhdGUtaW4gbSBbOmpzZG9jXSBjb25qIFwiQHBhcmFtIHsuLi4qfSB2YXJfYXJnc1wiKVxyXG4gICAgICBtKVxyXG4gICAgIGZkZWNsXHJcbiAgICAgKDpkZWYtZW1pdHMtdmFyICZlbnYpKVxyXG4gICAgOmVsc2VcclxuICAgIChjb3JlL2xpc3QgJ2RlZiAod2l0aC1tZXRhIG5hbWUgbSkgKGNvbnMgJ2NsanMuY29yZS9mbiBmZGVjbCkpKSkpKVxyXG4ifSB7OnN5bSBzcHJlYWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXJnbGlzdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwcmVhZFxyXG4gW2FyZ2xpc3RdXHJcbiAod2hlbi1ub3RcclxuICAobmlsPyBhcmdsaXN0KVxyXG4gIChsZXRcclxuICAgW24gKG5leHQgYXJnbGlzdCldXHJcbiAgIChpZlxyXG4gICAgKG5pbD8gbilcclxuICAgIChzZXEgKGZpcnN0IGFyZ2xpc3QpKVxyXG4gICAgKGNvbnMgKGZpcnN0IGFyZ2xpc3QpIChzcHJlYWQgbikpKSkpKVxyXG4ifSB7OnN5bSByc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucywgaW4gY29uc3RhbnQgdGltZSwgYSBzZXEgb2YgdGhlIGl0ZW1zIGluIHJldiAod2hpY2hcbiAgY2FuIGJlIGEgdmVjdG9yIG9yIHNvcnRlZC1tYXApLCBpbiByZXZlcnNlIG9yZGVyLiBJZiByZXYgaXMgZW1wdHkgcmV0dXJucyBuaWwiLCA6YXJnbGlzdHMgKFtyZXZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByc2VxXHJcbiBcIlJldHVybnMsIGluIGNvbnN0YW50IHRpbWUsIGEgc2VxIG9mIHRoZSBpdGVtcyBpbiByZXYgKHdoaWNoXFxuICBjYW4gYmUgYSB2ZWN0b3Igb3Igc29ydGVkLW1hcCksIGluIHJldmVyc2Ugb3JkZXIuIElmIHJldiBpcyBlbXB0eSByZXR1cm5zIG5pbFwiXHJcbiBbcmV2XVxyXG4gKC1yc2VxIHJldikpXHJcbiJ9IHs6c3ltIGV4LWNhdXNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBleGNlcHRpb24gY2F1c2UgKGFuIEVycm9yIC8gRXhjZXB0aW9uSW5mbykgaWYgZXggaXMgYW5cbiAgRXhjZXB0aW9uSW5mby5cbiAgT3RoZXJ3aXNlIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXgtY2F1c2VcclxuIFwiUmV0dXJucyBleGNlcHRpb24gY2F1c2UgKGFuIEVycm9yIC8gRXhjZXB0aW9uSW5mbykgaWYgZXggaXMgYW5cXG4gIEV4Y2VwdGlvbkluZm8uXFxuICBPdGhlcndpc2UgcmV0dXJucyBuaWwuXCJcclxuIFtleF1cclxuICh3aGVuIChpbnN0YW5jZT8gRXhjZXB0aW9uSW5mbyBleCkgKC4tY2F1c2UgZXgpKSlcclxuIn0gezpzeW0gSVJlc2V0LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyByZXNldHRpbmcgZnVuY3Rpb25hbGl0eS4ifSwgOm1ldGhvZHMgKC1yZXNldCEpfSB7OnN5bSBJRW1wdHlhYmxlQ29sbGVjdGlvbiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjcmVhdGluZyBhbiBlbXB0eSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWVtcHR5KX0gezpzeW0gZXgtbWVzc2FnZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1lc3NhZ2UgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIEVycm9yIC8gRXhjZXB0aW9uSW5mbyBvYmplY3QuXG4gIEZvciBub24tRXJyb3JzIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXgtbWVzc2FnZVxyXG4gXCJSZXR1cm5zIHRoZSBtZXNzYWdlIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBFcnJvciAvIEV4Y2VwdGlvbkluZm8gb2JqZWN0LlxcbiAgRm9yIG5vbi1FcnJvcnMgcmV0dXJucyBuaWwuXCJcclxuIFtleF1cclxuICh3aGVuIChpbnN0YW5jZT8ganMvRXJyb3IgZXgpICguLW1lc3NhZ2UgZXgpKSlcclxuIn0gezpzeW0gKnByaW50LWZuLWJvZGllcyosIDptZXRhIHs6ZG9jICIqcHJpbnQtZm5zLWJvZGllcyogY29udHJvbHMgd2hldGhlciBmdW5jdGlvbnMgcHJpbnQgdGhlaXIgc291cmNlIG9yXG4gICAgb25seSB0aGVpciBuYW1lcy4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtZm4tYm9kaWVzKiBmYWxzZSlcclxuIn0gezpzeW0gc3RyaW5nLXByaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmctcHJpbnRcclxuIFt4XVxyXG4gKHdoZW5cclxuICAobmlsPyAqcHJpbnQtZm4qKVxyXG4gICh0aHJvd1xyXG4gICAoanMvRXJyb3IuIFwiTm8gKnByaW50LWZuKiBmbiBzZXQgZm9yIGV2YWx1YXRpb24gZW52aXJvbm1lbnRcIikpKVxyXG4gKCpwcmludC1mbiogeClcclxuIG5pbClcclxuIn0gezpzeW0gZmxvYXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gZmxvYXQgW3hdIHgpXHJcbiJ9IHs6c3ltIElSZWNvcmQsIDptZXRhIHs6ZG9jICJNYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgYSByZWNvcmQgb2JqZWN0In0sIDptZXRob2RzICgpfSB7OnN5bSBwci1zdHIsIDptZXRhIHs6ZG9jICJwciB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0LiBGdW5kYW1lbnRhbCBlbnRyeXBvaW50IHRvIElQcmludFdpdGhXcml0ZXIuIiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHItc3RyXHJcbiBcInByIHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXQuIEZ1bmRhbWVudGFsIGVudHJ5cG9pbnQgdG8gSVByaW50V2l0aFdyaXRlci5cIlxyXG4gWyYgb2Jqc11cclxuIChwci1zdHItd2l0aC1vcHRzIG9ianMgKHByLW9wdHMpKSlcclxuIn0gezpzeW0gZXM2LXNldC1lbnRyaWVzLWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlczYtc2V0LWVudHJpZXMtaXRlcmF0b3JcclxuIFtjb2xsXVxyXG4gKEVTNlNldEVudHJpZXNJdGVyYXRvci4gKHNlcSBjb2xsKSkpXHJcbiJ9IHs6c3ltIGNvbmNhdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSByZXByZXNlbnRpbmcgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzdXBwbGllZCBjb2xscy4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgenNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25jYXRcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIHJlcHJlc2VudGluZyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHN1cHBsaWVkIGNvbGxzLlwiXHJcbiAoW10gKGxhenktc2VxIG5pbCkpXHJcbiAoW3hdIChsYXp5LXNlcSB4KSlcclxuIChbeCB5XVxyXG4gIChsYXp5LXNlcVxyXG4gICAobGV0XHJcbiAgICBbcyAoc2VxIHgpXVxyXG4gICAgKGlmXHJcbiAgICAgc1xyXG4gICAgIChpZlxyXG4gICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgIChjaHVuay1jb25zIChjaHVuay1maXJzdCBzKSAoY29uY2F0IChjaHVuay1yZXN0IHMpIHkpKVxyXG4gICAgICAoY29ucyAoZmlyc3QgcykgKGNvbmNhdCAocmVzdCBzKSB5KSkpXHJcbiAgICAgeSkpKSlcclxuIChbeCB5ICYgenNdXHJcbiAgKGxldFxyXG4gICBbY2F0XHJcbiAgICAoZm5cclxuICAgICBjYXRcclxuICAgICBbeHlzIHpzXVxyXG4gICAgIChsYXp5LXNlcVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbeHlzIChzZXEgeHlzKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIHh5c1xyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoY2h1bmtlZC1zZXE/IHh5cylcclxuICAgICAgICAgKGNodW5rLWNvbnMgKGNodW5rLWZpcnN0IHh5cykgKGNhdCAoY2h1bmstcmVzdCB4eXMpIHpzKSlcclxuICAgICAgICAgKGNvbnMgKGZpcnN0IHh5cykgKGNhdCAocmVzdCB4eXMpIHpzKSkpXHJcbiAgICAgICAgKHdoZW4genMgKGNhdCAoZmlyc3QgenMpIChuZXh0IHpzKSkpKSkpKV1cclxuICAgKGNhdCAoY29uY2F0IHggeSkgenMpKSkpXHJcbiJ9IHs6c3ltIC1tZXRob2RzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIGpzLXJlc2VydmVkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBqcy1yZXNlcnZlZCBuaWwpXHJcbiJ9IHs6c3ltIElEZXJlZldpdGhUaW1lb3V0LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoLWRlcmVmLXdpdGgtdGltZW91dCl9IHs6c3ltIHN5bWJvbCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBTeW1ib2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBuYW1lLiBBcml0eS0xIHdvcmtzXG4gIG9uIHN0cmluZ3MsIGtleXdvcmRzLCBhbmQgdmFycy4iLCA6YXJnbGlzdHMgW1tuYW1lXSBbbnMgbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN5bWJvbFxyXG4gXCJSZXR1cm5zIGEgU3ltYm9sIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbmFtZS4gQXJpdHktMSB3b3Jrc1xcbiAgb24gc3RyaW5ncywga2V5d29yZHMsIGFuZCB2YXJzLlwiXHJcbiAoW25hbWVdXHJcbiAgKGNvbmRcclxuICAgKHN5bWJvbD8gbmFtZSlcclxuICAgbmFtZVxyXG4gICAoc3RyaW5nPyBuYW1lKVxyXG4gICAobGV0XHJcbiAgICBbaWR4ICguaW5kZXhPZiBuYW1lIFwiL1wiKV1cclxuICAgIChpZlxyXG4gICAgICg8IGlkeCAxKVxyXG4gICAgIChzeW1ib2wgbmlsIG5hbWUpXHJcbiAgICAgKHN5bWJvbFxyXG4gICAgICAoLnN1YnN0cmluZyBuYW1lIDAgaWR4KVxyXG4gICAgICAoLnN1YnN0cmluZyBuYW1lIChpbmMgaWR4KSAoLiBuYW1lIC1sZW5ndGgpKSkpKVxyXG4gICAodmFyPyBuYW1lKVxyXG4gICAoLi1zeW0gbmFtZSlcclxuICAgKGtleXdvcmQ/IG5hbWUpXHJcbiAgIChyZWN1ciAoLi1mcW4gbmFtZSkpXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvdyAobmV3IGpzL0Vycm9yIFwibm8gY29udmVyc2lvbiB0byBzeW1ib2xcIikpKSlcclxuIChbbnMgbmFtZV1cclxuICAobGV0XHJcbiAgIFtzeW0tc3RyIChpZi1ub3QgKG5pbD8gbnMpIChzdHIgbnMgXCIvXCIgbmFtZSkgbmFtZSldXHJcbiAgIChTeW1ib2wuIG5zIG5hbWUgc3ltLXN0ciBuaWwgbmlsKSkpKVxyXG4ifSB7OnN5bSB0by1hcnJheS0yZCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSAocG90ZW50aWFsbHktcmFnZ2VkKSAyLWRpbWVuc2lvbmFsIGFycmF5XG4gIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvLWFycmF5LTJkXHJcbiBcIlJldHVybnMgYSAocG90ZW50aWFsbHktcmFnZ2VkKSAyLWRpbWVuc2lvbmFsIGFycmF5XFxuICBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLlwiXHJcbiBbY29sbF1cclxuIChsZXRcclxuICBbcmV0IChtYWtlLWFycmF5IChjb3VudCBjb2xsKSldXHJcbiAgKGxvb3BcclxuICAgW2kgMCB4cyAoc2VxIGNvbGwpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChuaWw/IHhzKVxyXG4gICAgKGFzZXQgcmV0IGkgKHRvLWFycmF5IChmaXJzdCB4cykpKVxyXG4gICAgKHJlY3VyIChpbmMgaSkgKG5leHQgeHMpKSkpXHJcbiAgcmV0KSlcclxuIn0gezpzeW0gRXhjZXB0aW9uSW5mbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZXNzYWdlIGRhdGEgY2F1c2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBFeGNlcHRpb25JbmZvXHJcbiBbbWVzc2FnZSBkYXRhIGNhdXNlXVxyXG4gKGxldFxyXG4gIFtlIChqcy9FcnJvci4gbWVzc2FnZSldXHJcbiAgKHRoaXMtYXNcclxuICAgdGhpc1xyXG4gICAoc2V0ISAoLi1tZXNzYWdlIHRoaXMpIG1lc3NhZ2UpXHJcbiAgIChzZXQhICguLWRhdGEgdGhpcykgZGF0YSlcclxuICAgKHNldCEgKC4tY2F1c2UgdGhpcykgY2F1c2UpXHJcbiAgIChkb1xyXG4gICAgKHNldCEgKC4tbmFtZSB0aGlzKSAoLi1uYW1lIGUpKVxyXG4gICAgKHNldCEgKC4tZGVzY3JpcHRpb24gdGhpcykgKC4tZGVzY3JpcHRpb24gZSkpXHJcbiAgICAoc2V0ISAoLi1udW1iZXIgdGhpcykgKC4tbnVtYmVyIGUpKVxyXG4gICAgKHNldCEgKC4tZmlsZU5hbWUgdGhpcykgKC4tZmlsZU5hbWUgZSkpXHJcbiAgICAoc2V0ISAoLi1saW5lTnVtYmVyIHRoaXMpICguLWxpbmVOdW1iZXIgZSkpXHJcbiAgICAoc2V0ISAoLi1jb2x1bW5OdW1iZXIgdGhpcykgKC4tY29sdW1uTnVtYmVyIGUpKVxyXG4gICAgKHNldCEgKC4tc3RhY2sgdGhpcykgKC4tc3RhY2sgZSkpKVxyXG4gICB0aGlzKSkpXHJcbiJ9IHs6c3ltIG1vZCwgOm1ldGEgezpkb2MgIk1vZHVsdXMgb2YgbnVtIGFuZCBkaXYuIFRydW5jYXRlcyB0b3dhcmQgbmVnYXRpdmUgaW5maW5pdHkuIiwgOmFyZ2xpc3RzIChbbiBkXSl9LCA6c291cmNlICIoZGVmblxyXG4gbW9kXHJcbiBcIk1vZHVsdXMgb2YgbnVtIGFuZCBkaXYuIFRydW5jYXRlcyB0b3dhcmQgbmVnYXRpdmUgaW5maW5pdHkuXCJcclxuIFtuIGRdXHJcbiAoanMtbW9kICgrIChqcy1tb2QgbiBkKSBkKSBkKSlcclxuIn0gezpzeW0gSVNldCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgc2V0IGZ1bmN0aW9uYWxpdHkgdG8gYSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWRpc2pvaW4pfSB7OnN5bSBwb3AsIDptZXRhIHs6ZG9jICJGb3IgYSBsaXN0IG9yIHF1ZXVlLCByZXR1cm5zIGEgbmV3IGxpc3QvcXVldWUgd2l0aG91dCB0aGUgZmlyc3RcbiAgaXRlbSwgZm9yIGEgdmVjdG9yLCByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRob3V0IHRoZSBsYXN0IGl0ZW0uXG4gIE5vdGUgLSBub3QgdGhlIHNhbWUgYXMgbmV4dC9idXRsYXN0LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3BcclxuIFwiRm9yIGEgbGlzdCBvciBxdWV1ZSwgcmV0dXJucyBhIG5ldyBsaXN0L3F1ZXVlIHdpdGhvdXQgdGhlIGZpcnN0XFxuICBpdGVtLCBmb3IgYSB2ZWN0b3IsIHJldHVybnMgYSBuZXcgdmVjdG9yIHdpdGhvdXQgdGhlIGxhc3QgaXRlbS5cXG4gIE5vdGUgLSBub3QgdGhlIHNhbWUgYXMgbmV4dC9idXRsYXN0LlwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdCAobmlsPyBjb2xsKSAoLXBvcCBjb2xsKSkpXHJcbiJ9IHs6c3ltIElQZW5kaW5nLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHR5cGVzIHdoaWNoIGNhbiBoYXZlIGEgZGVmZXJyZWQgcmVhbGl6YXRpb24uIEN1cnJlbnRseSBvbmx5XG4gIGltcGxlbWVudGVkIGJ5IERlbGF5IGFuZCBMYXp5U2VxLiJ9LCA6bWV0aG9kcyAoLXJlYWxpemVkPyl9IHs6c3ltIC1lbnRyeS1rZXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBrZXkgZm9yIGVudHJ5LiIsIDphcmdsaXN0cyAoW2NvbGwgZW50cnldKX0sIDpwcm90b2NvbCBJU29ydGVkfSB7OnN5bSBDSEFSX01BUCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIENIQVJfTUFQXHJcbiAjanMge1wiXVwiIFwiX1JCUkFDS19cIiwgXCInXCIgXCJfU0lOR0xFUVVPVEVfXCIsIFwiPVwiIFwiX0VRX1wiLCBcIlxcXFxcXFwiXCIgXCJfRE9VQkxFUVVPVEVfXCIsIFwiIVwiIFwiX0JBTkdfXCIsIFwiKlwiIFwiX1NUQVJfXCIsIFwiJVwiIFwiX1BFUkNFTlRfXCIsIFwifFwiIFwiX0JBUl9cIiwgXCJ+XCIgXCJfVElMREVfXCIsIFwiL1wiIFwiX1NMQVNIX1wiLCBcIlxcXFxcXFxcXCIgXCJfQlNMQVNIX1wiLCBcIi1cIiBcIl9cIiwgXCI/XCIgXCJfUU1BUktfXCIsIFwiJlwiIFwiX0FNUEVSU0FORF9cIiwgXCI6XCIgXCJfQ09MT05fXCIsIFwiPFwiIFwiX0xUX1wiLCBcIntcIiBcIl9MQlJBQ0VfXCIsIFwifVwiIFwiX1JCUkFDRV9cIiwgXCJbXCIgXCJfTEJSQUNLX1wiLCBcIiNcIiBcIl9TSEFSUF9cIiwgXCJeXCIgXCJfQ0FSRVRfXCIsIFwiK1wiIFwiX1BMVVNfXCIsIFwiQFwiIFwiX0NJUkNBX1wiLCBcIj5cIiBcIl9HVF9cIn0pXHJcbiJ9IHs6c3ltIGRpc3NvYyEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdHJhbnNpZW50IG1hcCB0aGF0IGRvZXNuJ3QgY29udGFpbiBhIG1hcHBpbmcgZm9yIGtleShzKS4iLCA6YXJnbGlzdHMgW1t0Y29sbCBrZXldIFt0Y29sbCBrZXkgJiBrc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3NvYyFcclxuIFwiUmV0dXJucyBhIHRyYW5zaWVudCBtYXAgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYSBtYXBwaW5nIGZvciBrZXkocykuXCJcclxuIChbdGNvbGwga2V5XSAoLWRpc3NvYyEgdGNvbGwga2V5KSlcclxuIChbdGNvbGwga2V5ICYga3NdXHJcbiAgKGxldFxyXG4gICBbbnRjb2xsICgtZGlzc29jISB0Y29sbCBrZXkpXVxyXG4gICAoaWYga3MgKHJlY3VyIG50Y29sbCAoZmlyc3Qga3MpIChuZXh0IGtzKSkgbnRjb2xsKSkpKVxyXG4ifSB7OnN5bSByZWR1Y3Rpb25zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzIG9mIHRoZSByZWR1Y3Rpb24gKGFzXG4gIHBlciByZWR1Y2UpIG9mIGNvbGwgYnkgZiwgc3RhcnRpbmcgd2l0aCBpbml0LiIsIDphcmdsaXN0cyBbW2YgY29sbF0gW2YgaW5pdCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWN0aW9uc1xyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMgb2YgdGhlIHJlZHVjdGlvbiAoYXNcXG4gIHBlciByZWR1Y2UpIG9mIGNvbGwgYnkgZiwgc3RhcnRpbmcgd2l0aCBpbml0LlwiXHJcbiAoW2YgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKGlmLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChyZWR1Y3Rpb25zIGYgKGZpcnN0IHMpIChyZXN0IHMpKVxyXG4gICAgKGxpc3QgKGYpKSkpKVxyXG4gKFtmIGluaXQgY29sbF1cclxuICAoaWZcclxuICAgKHJlZHVjZWQ/IGluaXQpXHJcbiAgIChsaXN0IEBpbml0KVxyXG4gICAoY29uc1xyXG4gICAgaW5pdFxyXG4gICAgKGxhenktc2VxXHJcbiAgICAgKHdoZW4tbGV0XHJcbiAgICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgIChyZWR1Y3Rpb25zIGYgKGYgaW5pdCAoZmlyc3QgcykpIChyZXN0IHMpKSkpKSkpKVxyXG4ifSB7OnN5bSBmYXN0LXBhdGgtcHJvdG9jb2wtcGFydGl0aW9ucy1jb3VudCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGZhc3QtcGF0aC1wcm90b2NvbC1wYXJ0aXRpb25zLWNvdW50XHJcbiBcInRvdGFsIG51bWJlciBvZiBwYXJ0aXRpb25zXCJcclxuIChjb3JlL2xldFxyXG4gIFtjIChjb3VudCBmYXN0LXBhdGgtcHJvdG9jb2xzKSBtIChjb3JlL21vZCBjIDMyKV1cclxuICAoaWYgKGNvcmUvemVybz8gbSkgKGNvcmUvcXVvdCBjIDMyKSAoY29yZS9pbmMgKGNvcmUvcXVvdCBjIDMyKSkpKSlcclxuIn0gezpzeW0gaW5kZXhlZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIG50aCBpbiBjb25zdGFudCB0aW1lIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4ZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgbnRoIGluIGNvbnN0YW50IHRpbWVcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJSW5kZXhlZCB4KSlcclxuIn0gezpzeW0gLSwgOm1ldGEgezpkb2MgIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gLVxyXG4gXCJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXFxuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXCJcclxuIChbeF0gKGNsanMuY29yZS8tIHgpKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvLSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIC0gKGNsanMuY29yZS8tIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSAtZXF1aXYsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbyBhbmQgb3RoZXIgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbbyBvdGhlcl0pfSwgOnByb3RvY29sIElFcXVpdn0gezpzeW0gYXNzb2MhLCA6bWV0YSB7OmRvYyAiV2hlbiBhcHBsaWVkIHRvIGEgdHJhbnNpZW50IG1hcCwgYWRkcyBtYXBwaW5nIG9mIGtleShzKSB0b1xuICB2YWwocykuIFdoZW4gYXBwbGllZCB0byBhIHRyYW5zaWVudCB2ZWN0b3IsIHNldHMgdGhlIHZhbCBhdCBpbmRleC5cbiAgTm90ZSAtIGluZGV4IG11c3QgYmUgPD0gKGNvdW50IHZlY3RvcikuIFJldHVybnMgY29sbC4iLCA6YXJnbGlzdHMgW1t0Y29sbCBrZXkgdmFsXSBbdGNvbGwga2V5IHZhbCAmIGt2c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzc29jIVxyXG4gXCJXaGVuIGFwcGxpZWQgdG8gYSB0cmFuc2llbnQgbWFwLCBhZGRzIG1hcHBpbmcgb2Yga2V5KHMpIHRvXFxuICB2YWwocykuIFdoZW4gYXBwbGllZCB0byBhIHRyYW5zaWVudCB2ZWN0b3IsIHNldHMgdGhlIHZhbCBhdCBpbmRleC5cXG4gIE5vdGUgLSBpbmRleCBtdXN0IGJlIDw9IChjb3VudCB2ZWN0b3IpLiBSZXR1cm5zIGNvbGwuXCJcclxuIChbdGNvbGwga2V5IHZhbF0gKC1hc3NvYyEgdGNvbGwga2V5IHZhbCkpXHJcbiAoW3Rjb2xsIGtleSB2YWwgJiBrdnNdXHJcbiAgKGxldFxyXG4gICBbbnRjb2xsICgtYXNzb2MhIHRjb2xsIGtleSB2YWwpXVxyXG4gICAoaWZcclxuICAgIGt2c1xyXG4gICAgKHJlY3VyIG50Y29sbCAoZmlyc3Qga3ZzKSAoc2Vjb25kIGt2cykgKG5uZXh0IGt2cykpXHJcbiAgICBudGNvbGwpKSkpXHJcbiJ9IHs6c3ltIGhhc2gtc2V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBoYXNoIHNldCB3aXRoIHN1cHBsaWVkIGtleXMuICBBbnkgZXF1YWwga2V5cyBhcmVcbiAgaGFuZGxlZCBhcyBpZiBieSByZXBlYXRlZCB1c2VzIG9mIGNvbmouIiwgOmFyZ2xpc3RzIFtbXSBbJiBrZXlzXV19LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1zZXRcclxuIFwiUmV0dXJucyBhIG5ldyBoYXNoIHNldCB3aXRoIHN1cHBsaWVkIGtleXMuICBBbnkgZXF1YWwga2V5cyBhcmVcXG4gIGhhbmRsZWQgYXMgaWYgYnkgcmVwZWF0ZWQgdXNlcyBvZiBjb25qLlwiXHJcbiAoW10gI3t9KVxyXG4gKFsmIGtleXNdIChzZXQga2V5cykpKVxyXG4ifSB7OnN5bSByZWR1Y2Uta3YsIDptZXRhIHs6ZG9jICJSZWR1Y2VzIGFuIGFzc29jaWF0aXZlIGNvbGxlY3Rpb24uIGYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgM1xuICBhcmd1bWVudHMuIFJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIGluaXQsIHRoZSBmaXJzdCBrZXlcbiAgYW5kIHRoZSBmaXJzdCB2YWx1ZSBpbiBjb2xsLCB0aGVuIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZVxuICAybmQga2V5IGFuZCB2YWx1ZSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vIGVudHJpZXMsIHJldHVybnMgaW5pdFxuICBhbmQgZiBpcyBub3QgY2FsbGVkLiBOb3RlIHRoYXQgcmVkdWNlLWt2IGlzIHN1cHBvcnRlZCBvbiB2ZWN0b3JzLFxuICB3aGVyZSB0aGUga2V5cyB3aWxsIGJlIHRoZSBvcmRpbmFscy4iLCA6YXJnbGlzdHMgW1tmIGluaXQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZS1rdlxyXG4gXCJSZWR1Y2VzIGFuIGFzc29jaWF0aXZlIGNvbGxlY3Rpb24uIGYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgM1xcbiAgYXJndW1lbnRzLiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byBpbml0LCB0aGUgZmlyc3Qga2V5XFxuICBhbmQgdGhlIGZpcnN0IHZhbHVlIGluIGNvbGwsIHRoZW4gYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlXFxuICAybmQga2V5IGFuZCB2YWx1ZSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vIGVudHJpZXMsIHJldHVybnMgaW5pdFxcbiAgYW5kIGYgaXMgbm90IGNhbGxlZC4gTm90ZSB0aGF0IHJlZHVjZS1rdiBpcyBzdXBwb3J0ZWQgb24gdmVjdG9ycyxcXG4gIHdoZXJlIHRoZSBrZXlzIHdpbGwgYmUgdGhlIG9yZGluYWxzLlwiXHJcbiAoW2YgaW5pdCBjb2xsXSAoaWYtbm90IChuaWw/IGNvbGwpICgta3YtcmVkdWNlIGNvbGwgZiBpbml0KSBpbml0KSkpXHJcbiJ9IHs6c3ltIHJlc2V0ISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVcbiAgY3VycmVudCB2YWx1ZS4gUmV0dXJucyBuZXctdmFsdWUuIiwgOmFyZ2xpc3RzIChbYSBuZXctdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNldCFcclxuIFwiU2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwgd2l0aG91dCByZWdhcmQgZm9yIHRoZVxcbiAgY3VycmVudCB2YWx1ZS4gUmV0dXJucyBuZXctdmFsdWUuXCJcclxuIFthIG5ldy12YWx1ZV1cclxuIChpZlxyXG4gIChpbnN0YW5jZT8gQXRvbSBhKVxyXG4gIChsZXRcclxuICAgW3ZhbGlkYXRlICguLXZhbGlkYXRvciBhKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAobmlsPyB2YWxpZGF0ZSlcclxuICAgICh3aGVuLW5vdFxyXG4gICAgICh2YWxpZGF0ZSBuZXctdmFsdWUpXHJcbiAgICAgKHRocm93IChqcy9FcnJvci4gXCJWYWxpZGF0b3IgcmVqZWN0ZWQgcmVmZXJlbmNlIHN0YXRlXCIpKSkpXHJcbiAgIChsZXRcclxuICAgIFtvbGQtdmFsdWUgKC4tc3RhdGUgYSldXHJcbiAgICAoc2V0ISAoLi1zdGF0ZSBhKSBuZXctdmFsdWUpXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAobmlsPyAoLi13YXRjaGVzIGEpKVxyXG4gICAgICgtbm90aWZ5LXdhdGNoZXMgYSBvbGQtdmFsdWUgbmV3LXZhbHVlKSlcclxuICAgIG5ldy12YWx1ZSkpXHJcbiAgKC1yZXNldCEgYSBuZXctdmFsdWUpKSlcclxuIn0gezpzeW0gbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWUgU3RyaW5nIG9mIGEgc3RyaW5nLCBzeW1ib2wgb3Iga2V5d29yZC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmFtZVxyXG4gXCJSZXR1cm5zIHRoZSBuYW1lIFN0cmluZyBvZiBhIHN0cmluZywgc3ltYm9sIG9yIGtleXdvcmQuXCJcclxuIFt4XVxyXG4gKGlmXHJcbiAgKGltcGxlbWVudHM/IElOYW1lZCB4KVxyXG4gICgtbmFtZSB4KVxyXG4gIChpZlxyXG4gICAoc3RyaW5nPyB4KVxyXG4gICB4XHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJEb2Vzbid0IHN1cHBvcnQgbmFtZTogXCIgeCkpKSkpKVxyXG4ifSB7OnN5bSBGbiwgOm1ldGEgezpkb2MgIk1hcmtlciBwcm90b2NvbCJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gZmZpcnN0LCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAoZmlyc3QgKGZpcnN0IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIGZmaXJzdCBcIlNhbWUgYXMgKGZpcnN0IChmaXJzdCB4KSlcIiBbY29sbF0gKGZpcnN0IChmaXJzdCBjb2xsKSkpXHJcbiJ9IHs6c3ltIHNvcnRlZC1zZXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHNvcnRlZCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLiIsIDphcmdsaXN0cyBbWyYga2V5c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRlZC1zZXRcclxuIFwiUmV0dXJucyBhIG5ldyBzb3J0ZWQgc2V0IHdpdGggc3VwcGxpZWQga2V5cy5cIlxyXG4gKFsmIGtleXNdIChyZWR1Y2UgLWNvbmogKC4tRU1QVFkgUGVyc2lzdGVudFRyZWVTZXQpIGtleXMpKSlcclxuIn0gezpzeW0gY291bnRlZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIGNvdW50IGluIGNvbnN0YW50IHRpbWUiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY291bnRlZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBjb3VudCBpbiBjb25zdGFudCB0aW1lXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUNvdW50ZWQgeCkpXHJcbiJ9IHs6c3ltIHRhZ2dlZC1saXRlcmFsLCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHRhZ2dlZCBsaXRlcmFsIGZyb20gYVxuICB0YWcgc3ltYm9sIGFuZCBhIGZvcm0uIiwgOmFyZ2xpc3RzIChbdGFnIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWdnZWQtbGl0ZXJhbFxyXG4gXCJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGFnZ2VkIGxpdGVyYWwgZnJvbSBhXFxuICB0YWcgc3ltYm9sIGFuZCBhIGZvcm0uXCJcclxuIFt0YWcgZm9ybV1cclxuIHs6cHJlIFsoc3ltYm9sPyB0YWcpXX1cclxuIChUYWdnZWRMaXRlcmFsLiB0YWcgZm9ybSkpXHJcbiJ9IHs6c3ltIHByaW50bG4sIDptZXRhIHs6ZG9jICJTYW1lIGFzIHByaW50IGZvbGxvd2VkIGJ5IChuZXdsaW5lKSIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50bG5cclxuIFwiU2FtZSBhcyBwcmludCBmb2xsb3dlZCBieSAobmV3bGluZSlcIlxyXG4gWyYgb2Jqc11cclxuIChwci13aXRoLW9wdHMgb2JqcyAoYXNzb2MgKHByLW9wdHMpIDpyZWFkYWJseSBmYWxzZSkpXHJcbiAod2hlbiAqcHJpbnQtbmV3bGluZSogKG5ld2xpbmUgKHByLW9wdHMpKSkpXHJcbiJ9IHs6c3ltIGFzc29jLWluLCA6bWV0YSB7OmRvYyAiQXNzb2NpYXRlcyBhIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUga3MgaXMgYVxuICBzZXF1ZW5jZSBvZiBrZXlzIGFuZCB2IGlzIHRoZSBuZXcgdmFsdWUgYW5kIHJldHVybnMgYSBuZXcgbmVzdGVkIHN0cnVjdHVyZS5cbiAgSWYgYW55IGxldmVscyBkbyBub3QgZXhpc3QsIGhhc2gtbWFwcyB3aWxsIGJlIGNyZWF0ZWQuIiwgOmFyZ2xpc3RzIChbbSBbayAmIGtzXSB2XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXNzb2MtaW5cclxuIFwiQXNzb2NpYXRlcyBhIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUga3MgaXMgYVxcbiAgc2VxdWVuY2Ugb2Yga2V5cyBhbmQgdiBpcyB0aGUgbmV3IHZhbHVlIGFuZCByZXR1cm5zIGEgbmV3IG5lc3RlZCBzdHJ1Y3R1cmUuXFxuICBJZiBhbnkgbGV2ZWxzIGRvIG5vdCBleGlzdCwgaGFzaC1tYXBzIHdpbGwgYmUgY3JlYXRlZC5cIlxyXG4gW20gW2sgJiBrc10gdl1cclxuIChpZiBrcyAoYXNzb2MgbSBrIChhc3NvYy1pbiAoZ2V0IG0gaykga3MgdikpIChhc3NvYyBtIGsgdikpKVxyXG4ifSB7OnN5bSBiaXQtdGVzdCwgOm1ldGEgezpkb2MgIlRlc3QgYml0IGF0IGluZGV4IG4iLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuIGJpdC10ZXN0IFwiVGVzdCBiaXQgYXQgaW5kZXggblwiIFt4IG5dIChjbGpzLmNvcmUvYml0LXRlc3QgeCBuKSlcclxuIn0gezpzeW0gSVN3YXAsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHN3YXBwaW5nIGZ1bmN0aW9uYWxpdHkuIn0sIDptZXRob2RzICgtc3dhcCEpfSB7OnN5bSBtZW1vaXplLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2YgYSByZWZlcmVudGlhbGx5IHRyYW5zcGFyZW50IGZ1bmN0aW9uLiBUaGVcbiAgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24ga2VlcHMgYSBjYWNoZSBvZiB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50c1xuICB0byByZXN1bHRzIGFuZCwgd2hlbiBjYWxscyB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhcmUgcmVwZWF0ZWQgb2Z0ZW4sIGhhc1xuICBoaWdoZXIgcGVyZm9ybWFuY2UgYXQgdGhlIGV4cGVuc2Ugb2YgaGlnaGVyIG1lbW9yeSB1c2UuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lbW9pemVcclxuIFwiUmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2YgYSByZWZlcmVudGlhbGx5IHRyYW5zcGFyZW50IGZ1bmN0aW9uLiBUaGVcXG4gIG1lbW9pemVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGtlZXBzIGEgY2FjaGUgb2YgdGhlIG1hcHBpbmcgZnJvbSBhcmd1bWVudHNcXG4gIHRvIHJlc3VsdHMgYW5kLCB3aGVuIGNhbGxzIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFyZSByZXBlYXRlZCBvZnRlbiwgaGFzXFxuICBoaWdoZXIgcGVyZm9ybWFuY2UgYXQgdGhlIGV4cGVuc2Ugb2YgaGlnaGVyIG1lbW9yeSB1c2UuXCJcclxuIFtmXVxyXG4gKGxldFxyXG4gIFttZW0gKGF0b20ge30pXVxyXG4gIChmblxyXG4gICBbJiBhcmdzXVxyXG4gICAobGV0XHJcbiAgICBbdiAoZ2V0IEBtZW0gYXJncyBsb29rdXAtc2VudGluZWwpXVxyXG4gICAgKGlmXHJcbiAgICAgKGlkZW50aWNhbD8gdiBsb29rdXAtc2VudGluZWwpXHJcbiAgICAgKGxldCBbcmV0IChhcHBseSBmIGFyZ3MpXSAoc3dhcCEgbWVtIGFzc29jIGFyZ3MgcmV0KSByZXQpXHJcbiAgICAgdikpKSkpXHJcbiJ9IHs6c3ltIGFsdGVyLW1ldGEhLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSBzZXRzIHRoZSBtZXRhZGF0YSBmb3IgYSBuYW1lc3BhY2UvdmFyL3JlZi9hZ2VudC9hdG9tIHRvIGJlOlxuXG4gIChhcHBseSBmIGl0cy1jdXJyZW50LW1ldGEgYXJncylcblxuICBmIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMiLCA6YXJnbGlzdHMgKFtpcmVmIGYgJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWx0ZXItbWV0YSFcclxuIFwiQXRvbWljYWxseSBzZXRzIHRoZSBtZXRhZGF0YSBmb3IgYSBuYW1lc3BhY2UvdmFyL3JlZi9hZ2VudC9hdG9tIHRvIGJlOlxcblxcbiAgKGFwcGx5IGYgaXRzLWN1cnJlbnQtbWV0YSBhcmdzKVxcblxcbiAgZiBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzXCJcclxuIFtpcmVmIGYgJiBhcmdzXVxyXG4gKHNldCEgKC4tbWV0YSBpcmVmKSAoYXBwbHkgZiAoLi1tZXRhIGlyZWYpIGFyZ3MpKSlcclxuIn0gezpzeW0gemVybz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIHplcm8sIGVsc2UgZmFsc2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gemVybz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG51bSBpcyB6ZXJvLCBlbHNlIGZhbHNlXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS96ZXJvPyB4KSlcclxuIn0gezpzeW0gc2ltcGxlLWtleXdvcmQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIGtleXdvcmQgd2l0aG91dCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaW1wbGUta2V5d29yZD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIGtleXdvcmQgd2l0aG91dCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChhbmQgKGtleXdvcmQ/IHgpIChuaWw/IChuYW1lc3BhY2UgeCkpKSlcclxuIn0gezpzeW0gKm1haW4tY2xpLWZuKiwgOm1ldGEgezpkb2MgIldoZW4gY29tcGlsZWQgZm9yIGEgY29tbWFuZC1saW5lIHRhcmdldCwgd2hhdGV2ZXIgZnVuY3Rpb25cbiAgKm1haW4tY2xpLWZuKiBpcyBzZXQgdG8gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgY29tbWFuZC1saW5lXG4gIGFyZ3YgYXMgYXJndW1lbnRzIn0sIDpzb3VyY2UgIihkZWYgKm1haW4tY2xpLWZuKiBuaWwpXHJcbiJ9IHs6c3ltIC1hc3NvYy1uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyB2ZWN0b3Igd2l0aCB2YWx1ZSB2YWwgYWRkZWQgYXQgcG9zaXRpb24gbi4iLCA6YXJnbGlzdHMgKFtjb2xsIG4gdmFsXSl9LCA6cHJvdG9jb2wgSVZlY3Rvcn0gezpzeW0gdW5jaGVja2VkLWRlYy1pbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4geCwgYW4gaW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtZGVjLWludFxyXG4gXCJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4geCwgYW4gaW50LlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvdW5jaGVja2VkLWRlYy1pbnQgeCkpXHJcbiJ9IHs6c3ltIHBlcnNpc3RlbnQhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldywgcGVyc2lzdGVudCB2ZXJzaW9uIG9mIHRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiwgaW5cbiAgY29uc3RhbnQgdGltZS4gVGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uIGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXNcbiAgY2FsbCwgYW55IHN1Y2ggdXNlIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLiIsIDphcmdsaXN0cyAoW3Rjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGVyc2lzdGVudCFcclxuIFwiUmV0dXJucyBhIG5ldywgcGVyc2lzdGVudCB2ZXJzaW9uIG9mIHRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiwgaW5cXG4gIGNvbnN0YW50IHRpbWUuIFRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzXFxuICBjYWxsLCBhbnkgc3VjaCB1c2Ugd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uXCJcclxuIFt0Y29sbF1cclxuICgtcGVyc2lzdGVudCEgdGNvbGwpKVxyXG4ifSB7OnN5bSBzZXQtcHJpbnQtZm4hLCA6bWV0YSB7OmRvYyAiU2V0ICpwcmludC1mbiogdG8gZi4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmbiBzZXQtcHJpbnQtZm4hIFwiU2V0ICpwcmludC1mbiogdG8gZi5cIiBbZl0gKHNldCEgKnByaW50LWZuKiBmKSlcclxuIn0gezpzeW0gbm5leHQsIDptZXRhIHs6ZG9jICJTYW1lIGFzIChuZXh0IChuZXh0IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIG5uZXh0IFwiU2FtZSBhcyAobmV4dCAobmV4dCB4KSlcIiBbY29sbF0gKG5leHQgKG5leHQgY29sbCkpKVxyXG4ifSB7OnN5bSBhZGQtd2F0Y2gsIDptZXRhIHs6ZG9jICJBZGRzIGEgd2F0Y2ggZnVuY3Rpb24gdG8gYW4gYXRvbSByZWZlcmVuY2UuIFRoZSB3YXRjaCBmbiBtdXN0IGJlIGFcbiAgZm4gb2YgNCBhcmdzOiBhIGtleSwgdGhlIHJlZmVyZW5jZSwgaXRzIG9sZC1zdGF0ZSwgaXRzXG4gIG5ldy1zdGF0ZS4gV2hlbmV2ZXIgdGhlIHJlZmVyZW5jZSdzIHN0YXRlIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkLFxuICBhbnkgcmVnaXN0ZXJlZCB3YXRjaGVzIHdpbGwgaGF2ZSB0aGVpciBmdW5jdGlvbnMgY2FsbGVkLiBUaGUgd2F0Y2hcbiAgZm4gd2lsbCBiZSBjYWxsZWQgc3luY2hyb25vdXNseS4gTm90ZSB0aGF0IGFuIGF0b20ncyBzdGF0ZVxuICBtYXkgaGF2ZSBjaGFuZ2VkIGFnYWluIHByaW9yIHRvIHRoZSBmbiBjYWxsLCBzbyB1c2Ugb2xkL25ldy1zdGF0ZVxuICByYXRoZXIgdGhhbiBkZXJlZmluZyB0aGUgcmVmZXJlbmNlLiBLZXlzIG11c3QgYmUgdW5pcXVlIHBlclxuICByZWZlcmVuY2UsIGFuZCBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlIHdhdGNoIHdpdGggcmVtb3ZlLXdhdGNoLFxuICBidXQgYXJlIG90aGVyd2lzZSBjb25zaWRlcmVkIG9wYXF1ZSBieSB0aGUgd2F0Y2ggbWVjaGFuaXNtLiAgQmVhciBpblxuICBtaW5kIHRoYXQgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdWx0IG9yIGFjdGlvbiBvZiB0aGUgd2F0Y2ggZm5zIHRoZVxuICBhdG9tJ3MgdmFsdWUgd2lsbCBjaGFuZ2UuICBFeGFtcGxlOlxuXG4gICAgICAoZGVmIGEgKGF0b20gMCkpXG4gICAgICAoYWRkLXdhdGNoIGEgOmluYyAoZm4gW2sgciBvIG5dIChhc3NlcnQgKD09IDAgbikpKSlcbiAgICAgIChzd2FwISBhIGluYylcbiAgICAgIDs7IEFzc2VydGlvbiBFcnJvclxuICAgICAgKGRlcmVmIGEpXG4gICAgICA7PT4gMSIsIDphcmdsaXN0cyAoW2lyZWYga2V5IGZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtd2F0Y2hcclxuIFwiQWRkcyBhIHdhdGNoIGZ1bmN0aW9uIHRvIGFuIGF0b20gcmVmZXJlbmNlLiBUaGUgd2F0Y2ggZm4gbXVzdCBiZSBhXFxuICBmbiBvZiA0IGFyZ3M6IGEga2V5LCB0aGUgcmVmZXJlbmNlLCBpdHMgb2xkLXN0YXRlLCBpdHNcXG4gIG5ldy1zdGF0ZS4gV2hlbmV2ZXIgdGhlIHJlZmVyZW5jZSdzIHN0YXRlIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkLFxcbiAgYW55IHJlZ2lzdGVyZWQgd2F0Y2hlcyB3aWxsIGhhdmUgdGhlaXIgZnVuY3Rpb25zIGNhbGxlZC4gVGhlIHdhdGNoXFxuICBmbiB3aWxsIGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LiBOb3RlIHRoYXQgYW4gYXRvbSdzIHN0YXRlXFxuICBtYXkgaGF2ZSBjaGFuZ2VkIGFnYWluIHByaW9yIHRvIHRoZSBmbiBjYWxsLCBzbyB1c2Ugb2xkL25ldy1zdGF0ZVxcbiAgcmF0aGVyIHRoYW4gZGVyZWZpbmcgdGhlIHJlZmVyZW5jZS4gS2V5cyBtdXN0IGJlIHVuaXF1ZSBwZXJcXG4gIHJlZmVyZW5jZSwgYW5kIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgd2F0Y2ggd2l0aCByZW1vdmUtd2F0Y2gsXFxuICBidXQgYXJlIG90aGVyd2lzZSBjb25zaWRlcmVkIG9wYXF1ZSBieSB0aGUgd2F0Y2ggbWVjaGFuaXNtLiAgQmVhciBpblxcbiAgbWluZCB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3VsdCBvciBhY3Rpb24gb2YgdGhlIHdhdGNoIGZucyB0aGVcXG4gIGF0b20ncyB2YWx1ZSB3aWxsIGNoYW5nZS4gIEV4YW1wbGU6XFxuXFxuICAgICAgKGRlZiBhIChhdG9tIDApKVxcbiAgICAgIChhZGQtd2F0Y2ggYSA6aW5jIChmbiBbayByIG8gbl0gKGFzc2VydCAoPT0gMCBuKSkpKVxcbiAgICAgIChzd2FwISBhIGluYylcXG4gICAgICA7OyBBc3NlcnRpb24gRXJyb3JcXG4gICAgICAoZGVyZWYgYSlcXG4gICAgICA7PT4gMVwiXHJcbiBbaXJlZiBrZXkgZl1cclxuICgtYWRkLXdhdGNoIGlyZWYga2V5IGYpXHJcbiBpcmVmKVxyXG4ifSB7OnN5bSBub3QtZXZlcnk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBmYWxzZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGV2ZXJ5IHggaW5cbiAgY29sbCwgZWxzZSB0cnVlLiIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vdC1ldmVyeT9cclxuIFwiUmV0dXJucyBmYWxzZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGV2ZXJ5IHggaW5cXG4gIGNvbGwsIGVsc2UgdHJ1ZS5cIlxyXG4gW3ByZWQgY29sbF1cclxuIChub3QgKGV2ZXJ5PyBwcmVkIGNvbGwpKSlcclxuIn0gezpzeW0gcmVtLCA6bWV0YSB7OmRvYyAicmVtYWluZGVyIG9mIGRpdmlkaW5nIG51bWVyYXRvciBieSBkZW5vbWluYXRvci4iLCA6YXJnbGlzdHMgKFtuIGRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1cclxuIFwicmVtYWluZGVyIG9mIGRpdmlkaW5nIG51bWVyYXRvciBieSBkZW5vbWluYXRvci5cIlxyXG4gW24gZF1cclxuIChsZXQgW3EgKHF1b3QgbiBkKV0gKC0gbiAoKiBkIHEpKSkpXHJcbiJ9IHs6c3ltIGlmaW5kPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgSUZpbmQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaWZpbmQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgSUZpbmRcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJRmluZCB4KSlcclxuIn0gezpzeW0gc29tZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpcnN0IGxvZ2ljYWwgdHJ1ZSB2YWx1ZSBvZiAocHJlZCB4KSBmb3IgYW55IHggaW4gY29sbCxcbiAgZWxzZSBuaWwuICBPbmUgY29tbW9uIGlkaW9tIGlzIHRvIHVzZSBhIHNldCBhcyBwcmVkLCBmb3IgZXhhbXBsZVxuICB0aGlzIHdpbGwgcmV0dXJuIDpmcmVkIGlmIDpmcmVkIGlzIGluIHRoZSBzZXF1ZW5jZSwgb3RoZXJ3aXNlIG5pbDpcbiAgKHNvbWUgI3s6ZnJlZH0gY29sbCkiLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb21lXHJcbiBcIlJldHVybnMgdGhlIGZpcnN0IGxvZ2ljYWwgdHJ1ZSB2YWx1ZSBvZiAocHJlZCB4KSBmb3IgYW55IHggaW4gY29sbCxcXG4gIGVsc2UgbmlsLiAgT25lIGNvbW1vbiBpZGlvbSBpcyB0byB1c2UgYSBzZXQgYXMgcHJlZCwgZm9yIGV4YW1wbGVcXG4gIHRoaXMgd2lsbCByZXR1cm4gOmZyZWQgaWYgOmZyZWQgaXMgaW4gdGhlIHNlcXVlbmNlLCBvdGhlcndpc2UgbmlsOlxcbiAgKHNvbWUgI3s6ZnJlZH0gY29sbClcIlxyXG4gW3ByZWQgY29sbF1cclxuICh3aGVuLWxldCBbcyAoc2VxIGNvbGwpXSAob3IgKHByZWQgKGZpcnN0IHMpKSAocmVjdXIgcHJlZCAobmV4dCBzKSkpKSlcclxuIn0gezpzeW0gSU5hbWVkLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBhIG5hbWUuIn0sIDptZXRob2RzICgtbmFtZSAtbmFtZXNwYWNlKX0gezpzeW0gSVJlZHVjZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBzZXEgdHlwZXMgdGhhdCBjYW4gcmVkdWNlIHRoZW1zZWx2ZXMuXG4gIENhbGxlZCBieSBjbGpzLmNvcmUvcmVkdWNlLiJ9LCA6bWV0aG9kcyAoLXJlZHVjZSl9IHs6c3ltIG5lZy1pbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgbmVnYXRpdmUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5lZy1pbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIG5lZ2F0aXZlLlwiXHJcbiBbeF1cclxuIChjb25kXHJcbiAgKGludGVnZXI/IHgpXHJcbiAgKG5lZz8geClcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5JbnRlZ2VyIHgpXHJcbiAgKC5pc05lZ2F0aXZlIHgpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguTG9uZyB4KVxyXG4gICguaXNOZWdhdGl2ZSB4KVxyXG4gIDplbHNlXHJcbiAgZmFsc2UpKVxyXG4ifSB7OnN5bSBkcm9wLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgYWxsIGJ1dCB0aGUgZmlyc3QgbiBpdGVtcyBpbiBjb2xsLlxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbbl0gW24gY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRyb3BcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgYWxsIGJ1dCB0aGUgZmlyc3QgbiBpdGVtcyBpbiBjb2xsLlxcbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW25dXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbbmEgKHZvbGF0aWxlISBuKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW24gQG5hXVxyXG4gICAgICAgKHZzd2FwISBuYSBkZWMpXHJcbiAgICAgICAoaWYgKHBvcz8gbikgcmVzdWx0IChyZiByZXN1bHQgaW5wdXQpKSkpKSkpKVxyXG4gKFtuIGNvbGxdXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAobGV0XHJcbiAgIFtzdGVwXHJcbiAgICAoZm5cclxuICAgICBbbiBjb2xsXVxyXG4gICAgIChsZXRcclxuICAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAgKGlmIChhbmQgKHBvcz8gbikgcykgKHJlY3VyIChkZWMgbikgKHJlc3QgcykpIHMpKSldXHJcbiAgIChsYXp5LXNlcSAoc3RlcCBuIGNvbGwpKSkpKVxyXG4ifSB7OnN5bSBqcy1vYmosIDptZXRhIHs6ZG9jICJDcmVhdGUgSmF2YVNyaXB0IG9iamVjdCBmcm9tIGFuIGV2ZW4gbnVtYmVyIGFyZ3VtZW50cyByZXByZXNlbnRpbmdcbiAgaW50ZXJsZWF2ZWQga2V5cyBhbmQgdmFsdWVzLiIsIDphcmdsaXN0cyBbW10gWyYga2V5dmFsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLW9ialxyXG4gXCJDcmVhdGUgSmF2YVNyaXB0IG9iamVjdCBmcm9tIGFuIGV2ZW4gbnVtYmVyIGFyZ3VtZW50cyByZXByZXNlbnRpbmdcXG4gIGludGVybGVhdmVkIGtleXMgYW5kIHZhbHVlcy5cIlxyXG4gKFtdIChjbGpzLmNvcmUvanMtb2JqKSlcclxuIChbJiBrZXl2YWxzXSAoYXBwbHkgZ29iamVjdC9jcmVhdGUga2V5dmFscykpKVxyXG4ifSB7OnN5bSBJVHJhbnNpZW50Q29sbGVjdGlvbiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgYmFzaWMgZnVuY3Rpb25hbGl0eSB0byB0cmFuc2llbnQgY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtY29uaiEgLXBlcnNpc3RlbnQhKX0gezpzeW0gbnRoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4LiBnZXQgcmV0dXJucyBuaWwgaWYgaW5kZXggb3V0IG9mXG4gIGJvdW5kcywgbnRoIHRocm93cyBhbiBleGNlcHRpb24gdW5sZXNzIG5vdC1mb3VuZCBpcyBzdXBwbGllZC4gIG50aFxuICBhbHNvIHdvcmtzIGZvciBzdHJpbmdzLCBhcnJheXMsIHJlZ2V4IE1hdGNoZXJzIGFuZCBMaXN0cywgYW5kLFxuICBpbiBPKG4pIHRpbWUsIGZvciBzZXF1ZW5jZXMuIiwgOmFyZ2xpc3RzIFtbY29sbCBuXSBbY29sbCBuIG5vdC1mb3VuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG50aFxyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXguIGdldCByZXR1cm5zIG5pbCBpZiBpbmRleCBvdXQgb2ZcXG4gIGJvdW5kcywgbnRoIHRocm93cyBhbiBleGNlcHRpb24gdW5sZXNzIG5vdC1mb3VuZCBpcyBzdXBwbGllZC4gIG50aFxcbiAgYWxzbyB3b3JrcyBmb3Igc3RyaW5ncywgYXJyYXlzLCByZWdleCBNYXRjaGVycyBhbmQgTGlzdHMsIGFuZCxcXG4gIGluIE8obikgdGltZSwgZm9yIHNlcXVlbmNlcy5cIlxyXG4gKFtjb2xsIG5dXHJcbiAgKGNvbmRcclxuICAgKG5vdCAobnVtYmVyPyBuKSlcclxuICAgKHRocm93IChqcy9FcnJvci4gXCJJbmRleCBhcmd1bWVudCB0byBudGggbXVzdCBiZSBhIG51bWJlclwiKSlcclxuICAgKG5pbD8gY29sbClcclxuICAgY29sbFxyXG4gICAoaW1wbGVtZW50cz8gSUluZGV4ZWQgY29sbClcclxuICAgKC1udGggY29sbCBuKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgIChpZlxyXG4gICAgKGFuZCAoPCAtMSBuICguLWxlbmd0aCBjb2xsKSkpXHJcbiAgICAoYWdldCBjb2xsIChpbnQgbikpXHJcbiAgICAodGhyb3cgKGpzL0Vycm9yLiBcIkluZGV4IG91dCBvZiBib3VuZHNcIikpKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAoaWZcclxuICAgIChhbmQgKDwgLTEgbiAoLi1sZW5ndGggY29sbCkpKVxyXG4gICAgKC5jaGFyQXQgY29sbCAoaW50IG4pKVxyXG4gICAgKHRocm93IChqcy9FcnJvci4gXCJJbmRleCBvdXQgb2YgYm91bmRzXCIpKSlcclxuICAgKG9yIChpbXBsZW1lbnRzPyBJU2VxIGNvbGwpIChpbXBsZW1lbnRzPyBJU2VxdWVudGlhbCBjb2xsKSlcclxuICAgKGlmXHJcbiAgICAobmVnPyBuKVxyXG4gICAgKHRocm93IChqcy9FcnJvci4gXCJJbmRleCBvdXQgb2YgYm91bmRzXCIpKVxyXG4gICAgKGxpbmVhci10cmF2ZXJzYWwtbnRoIGNvbGwgbikpXHJcbiAgIChuYXRpdmUtc2F0aXNmaWVzPyBJSW5kZXhlZCBjb2xsKVxyXG4gICAoLW50aCBjb2xsIG4pXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvd1xyXG4gICAgKGpzL0Vycm9yLlxyXG4gICAgIChzdHJcclxuICAgICAgXCJudGggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHR5cGUgXCJcclxuICAgICAgKHR5cGUtPnN0ciAodHlwZSBjb2xsKSkpKSkpKVxyXG4gKFtjb2xsIG4gbm90LWZvdW5kXVxyXG4gIChjb25kXHJcbiAgIChub3QgKG51bWJlcj8gbikpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIFwiSW5kZXggYXJndW1lbnQgdG8gbnRoIG11c3QgYmUgYSBudW1iZXIuXCIpKVxyXG4gICAobmlsPyBjb2xsKVxyXG4gICBub3QtZm91bmRcclxuICAgKGltcGxlbWVudHM/IElJbmRleGVkIGNvbGwpXHJcbiAgICgtbnRoIGNvbGwgbiBub3QtZm91bmQpXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKGlmIChhbmQgKDwgLTEgbiAoLi1sZW5ndGggY29sbCkpKSAoYWdldCBjb2xsIChpbnQgbikpIG5vdC1mb3VuZClcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKGlmIChhbmQgKDwgLTEgbiAoLi1sZW5ndGggY29sbCkpKSAoLmNoYXJBdCBjb2xsIChpbnQgbikpIG5vdC1mb3VuZClcclxuICAgKG9yIChpbXBsZW1lbnRzPyBJU2VxIGNvbGwpIChpbXBsZW1lbnRzPyBJU2VxdWVudGlhbCBjb2xsKSlcclxuICAgKGlmIChuZWc/IG4pIG5vdC1mb3VuZCAobGluZWFyLXRyYXZlcnNhbC1udGggY29sbCBuIG5vdC1mb3VuZCkpXHJcbiAgIChuYXRpdmUtc2F0aXNmaWVzPyBJSW5kZXhlZCBjb2xsKVxyXG4gICAoLW50aCBjb2xsIG4gbm90LWZvdW5kKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3dcclxuICAgIChqcy9FcnJvci5cclxuICAgICAoc3RyXHJcbiAgICAgIFwibnRoIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0eXBlIFwiXHJcbiAgICAgICh0eXBlLT5zdHIgKHR5cGUgY29sbCkpKSkpKSkpXHJcbiJ9IHs6c3ltIHNvcnRlZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVNvcnRlZCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0ZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJU29ydGVkXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSVNvcnRlZCB4KSlcclxuIn0gezpzeW0gbmlsPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIG5pbCwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuaWw/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIG5pbCwgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChjb2VyY2l2ZS09IHggbmlsKSlcclxuIn0gezpzeW0gc3BsaXQtYXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdmVjdG9yIG9mIFsodGFrZSBuIGNvbGwpIChkcm9wIG4gY29sbCldIiwgOmFyZ2xpc3RzIChbbiBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXQtYXRcclxuIFwiUmV0dXJucyBhIHZlY3RvciBvZiBbKHRha2UgbiBjb2xsKSAoZHJvcCBuIGNvbGwpXVwiXHJcbiBbbiBjb2xsXVxyXG4gWyh0YWtlIG4gY29sbCkgKGRyb3AgbiBjb2xsKV0pXHJcbiJ9IHs6c3ltIHBybi1zdHItd2l0aC1vcHRzLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBwci1zdHItd2l0aC1vcHRzIGZvbGxvd2VkIGJ5IChuZXdsaW5lKSIsIDphcmdsaXN0cyAoW29ianMgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBybi1zdHItd2l0aC1vcHRzXHJcbiBcIlNhbWUgYXMgcHItc3RyLXdpdGgtb3B0cyBmb2xsb3dlZCBieSAobmV3bGluZSlcIlxyXG4gW29ianMgb3B0c11cclxuIChpZlxyXG4gIChlbXB0eT8gb2JqcylcclxuICBcIlxcblwiXHJcbiAgKGxldFxyXG4gICBbc2IgKHByLXNiLXdpdGgtb3B0cyBvYmpzIG9wdHMpXVxyXG4gICAoLmFwcGVuZCBzYiBcXG5ld2xpbmUpXHJcbiAgIChzdHIgc2IpKSkpXHJcbiJ9IHs6c3ltIG5vdC1uYXRpdmUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG5vdC1uYXRpdmUgbmlsKVxyXG4ifSB7OnN5bSByYW5kb20tc2FtcGxlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBpdGVtcyBmcm9tIGNvbGwgd2l0aCByYW5kb20gcHJvYmFiaWxpdHkgb2YgcHJvYiAoMC4wIC1cbiAgMS4wKS4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1twcm9iXSBbcHJvYiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmFuZG9tLXNhbXBsZVxyXG4gXCJSZXR1cm5zIGl0ZW1zIGZyb20gY29sbCB3aXRoIHJhbmRvbSBwcm9iYWJpbGl0eSBvZiBwcm9iICgwLjAgLVxcbiAgMS4wKS4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtwcm9iXSAoZmlsdGVyIChmbiBbX10gKDwgKHJhbmQpIHByb2IpKSkpXHJcbiAoW3Byb2IgY29sbF0gKGZpbHRlciAoZm4gW19dICg8IChyYW5kKSBwcm9iKSkgY29sbCkpKVxyXG4ifSB7OnN5bSBzZWxlY3Qta2V5cywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgY29udGFpbmluZyBvbmx5IHRob3NlIGVudHJpZXMgaW4gbWFwIHdob3NlIGtleSBpcyBpbiBrZXlzIiwgOmFyZ2xpc3RzIChbbWFwIGtleXNlcV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlbGVjdC1rZXlzXHJcbiBcIlJldHVybnMgYSBtYXAgY29udGFpbmluZyBvbmx5IHRob3NlIGVudHJpZXMgaW4gbWFwIHdob3NlIGtleSBpcyBpbiBrZXlzXCJcclxuIFttYXAga2V5c2VxXVxyXG4gKGxvb3BcclxuICBbcmV0IHt9IGtleXMgKHNlcSBrZXlzZXEpXVxyXG4gIChpZlxyXG4gICBrZXlzXHJcbiAgIChsZXRcclxuICAgIFtrZXkgKGZpcnN0IGtleXMpIGVudHJ5IChnZXQgbWFwIGtleSA6Y2xqcy5jb3JlL25vdC1mb3VuZCldXHJcbiAgICAocmVjdXJcclxuICAgICAoaWYgKG5vdD0gZW50cnkgOmNsanMuY29yZS9ub3QtZm91bmQpIChhc3NvYyByZXQga2V5IGVudHJ5KSByZXQpXHJcbiAgICAgKG5leHQga2V5cykpKVxyXG4gICAoLXdpdGgtbWV0YSByZXQgKG1ldGEgbWFwKSkpKSlcclxuIn0gezpzeW0gYml0LWFuZCwgOm1ldGEgezpkb2MgIkJpdHdpc2UgYW5kIiwgOmFyZ2xpc3RzIFtbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1hbmRcclxuIFwiQml0d2lzZSBhbmRcIlxyXG4gKFt4IHldIChjbGpzLmNvcmUvYml0LWFuZCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIGJpdC1hbmQgKGNsanMuY29yZS9iaXQtYW5kIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBib3VuZGVkLWNvdW50LCA6bWV0YSB7OmRvYyAiSWYgY29sbCBpcyBjb3VudGVkPyByZXR1cm5zIGl0cyBjb3VudCwgZWxzZSB3aWxsIGNvdW50IGF0IG1vc3QgdGhlIGZpcnN0IG5cbiAgIGVsZW1lbnRzIG9mIGNvbGwgdXNpbmcgaXRzIHNlcSIsIDphcmdsaXN0cyAoW24gY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJvdW5kZWQtY291bnRcclxuIFwiSWYgY29sbCBpcyBjb3VudGVkPyByZXR1cm5zIGl0cyBjb3VudCwgZWxzZSB3aWxsIGNvdW50IGF0IG1vc3QgdGhlIGZpcnN0IG5cXG4gICBlbGVtZW50cyBvZiBjb2xsIHVzaW5nIGl0cyBzZXFcIlxyXG4gezphZGRlZCBcIjEuOVwifVxyXG4gW24gY29sbF1cclxuIChpZlxyXG4gIChjb3VudGVkPyBjb2xsKVxyXG4gIChjb3VudCBjb2xsKVxyXG4gIChsb29wXHJcbiAgIFtpIDAgcyAoc2VxIGNvbGwpXVxyXG4gICAoaWYgKGFuZCAobm90IChuaWw/IHMpKSAoPCBpIG4pKSAocmVjdXIgKGluYyBpKSAobmV4dCBzKSkgaSkpKSlcclxuIn0gezpzeW0gdXBkYXRlLCA6bWV0YSB7OmRvYyAiJ1VwZGF0ZXMnIGEgdmFsdWUgaW4gYW4gYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrIGlzIGFcbiAga2V5IGFuZCBmIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgdGhlIG9sZCB2YWx1ZVxuICBhbmQgYW55IHN1cHBsaWVkIGFyZ3MgYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLCBhbmQgcmV0dXJucyBhIG5ld1xuICBzdHJ1Y3R1cmUuICBJZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LCBuaWwgaXMgcGFzc2VkIGFzIHRoZSBvbGQgdmFsdWUuIiwgOmFyZ2xpc3RzIFtbbSBrIGZdIFttIGsgZiB4XSBbbSBrIGYgeCB5XSBbbSBrIGYgeCB5IHpdIFttIGsgZiB4IHkgeiAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGVcclxuIFwiJ1VwZGF0ZXMnIGEgdmFsdWUgaW4gYW4gYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrIGlzIGFcXG4gIGtleSBhbmQgZiBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCB0YWtlIHRoZSBvbGQgdmFsdWVcXG4gIGFuZCBhbnkgc3VwcGxpZWQgYXJncyBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUsIGFuZCByZXR1cm5zIGEgbmV3XFxuICBzdHJ1Y3R1cmUuICBJZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LCBuaWwgaXMgcGFzc2VkIGFzIHRoZSBvbGQgdmFsdWUuXCJcclxuIChbbSBrIGZdIChhc3NvYyBtIGsgKGYgKGdldCBtIGspKSkpXHJcbiAoW20gayBmIHhdIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIHgpKSlcclxuIChbbSBrIGYgeCB5XSAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSB4IHkpKSlcclxuIChbbSBrIGYgeCB5IHpdIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIHggeSB6KSkpXHJcbiAoW20gayBmIHggeSB6ICYgbW9yZV0gKGFzc29jIG0gayAoYXBwbHkgZiAoZ2V0IG0gaykgeCB5IHogbW9yZSkpKSlcclxuIn0gezpzeW0gZ2Vuc3ltX2NvdW50ZXIsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGdlbnN5bV9jb3VudGVyIG5pbClcclxuIn0gezpzeW0gZmluZC1tYWNyb3MtbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtYWNyb3MgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wgb3IgbmlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gIEJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1tYWNyb3MtbnNcclxuIFwiUmV0dXJucyB0aGUgbWFjcm9zIG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sIG9yIG5pbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxcbiAgQm9vdHN0cmFwIG9ubHkuXCJcclxuIFtuc11cclxuICh3aGVuIChuaWw/IE5TX0NBQ0hFKSAoc2V0ISBOU19DQUNIRSAoYXRvbSB7fSkpKVxyXG4gKGxldFxyXG4gIFtucy1zdHJcclxuICAgKHN0ciBucylcclxuICAgbnNcclxuICAgKGlmXHJcbiAgICAobm90IChnc3RyaW5nL2NvbnRhaW5zIG5zLXN0ciBcIiRtYWNyb3NcIikpXHJcbiAgICAoc3ltYm9sIChzdHIgbnMtc3RyIFwiJG1hY3Jvc1wiKSlcclxuICAgIG5zKVxyXG4gICB0aGUtbnNcclxuICAgKGdldCBATlNfQ0FDSEUgbnMpXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gdGhlLW5zKVxyXG4gICB0aGUtbnNcclxuICAgKGxldFxyXG4gICAgW25zLW9iaiAoZmluZC1ucy1vYmogbnMpXVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKG5pbD8gbnMtb2JqKVxyXG4gICAgIChsZXRcclxuICAgICAgW25ldy1ucyAoY3JlYXRlLW5zIG5zIG5zLW9iaildXHJcbiAgICAgIChzd2FwISBOU19DQUNIRSBhc3NvYyBucyBuZXctbnMpXHJcbiAgICAgIG5ldy1ucykpKSkpKVxyXG4ifSB7OnN5bSBsaXN0KiwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVwZW5kZWQgdG8gdGhlIHJlc3QsIHRoZVxuICBsYXN0IG9mIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNlcXVlbmNlLiIsIDphcmdsaXN0cyBbW2FyZ3NdIFthIGFyZ3NdIFthIGIgYXJnc10gW2EgYiBjIGFyZ3NdIFthIGIgYyBkICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpc3QqXHJcbiBcIkNyZWF0ZXMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcyBwcmVwZW5kZWQgdG8gdGhlIHJlc3QsIHRoZVxcbiAgbGFzdCBvZiB3aGljaCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzZXF1ZW5jZS5cIlxyXG4gKFthcmdzXSAoc2VxIGFyZ3MpKVxyXG4gKFthIGFyZ3NdIChjb25zIGEgYXJncykpXHJcbiAoW2EgYiBhcmdzXSAoY29ucyBhIChjb25zIGIgYXJncykpKVxyXG4gKFthIGIgYyBhcmdzXSAoY29ucyBhIChjb25zIGIgKGNvbnMgYyBhcmdzKSkpKVxyXG4gKFthIGIgYyBkICYgbW9yZV0gKGNvbnMgYSAoY29ucyBiIChjb25zIGMgKGNvbnMgZCAoc3ByZWFkIG1vcmUpKSkpKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1pbiwgOm1ldGEgezpkb2MgIidVcGRhdGVzJyBhIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUga3MgaXMgYVxuICBzZXF1ZW5jZSBvZiBrZXlzIGFuZCBmIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgdGhlIG9sZCB2YWx1ZVxuICBhbmQgYW55IHN1cHBsaWVkIGFyZ3MgYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLCBhbmQgcmV0dXJucyBhIG5ld1xuICBuZXN0ZWQgc3RydWN0dXJlLiAgSWYgYW55IGxldmVscyBkbyBub3QgZXhpc3QsIGhhc2gtbWFwcyB3aWxsIGJlXG4gIGNyZWF0ZWQuIiwgOmFyZ2xpc3RzIFtbbSBbayAmIGtzXSBmXSBbbSBbayAmIGtzXSBmIGFdIFttIFtrICYga3NdIGYgYSBiXSBbbSBbayAmIGtzXSBmIGEgYiBjXSBbbSBbayAmIGtzXSBmIGEgYiBjICYgYXJnc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1pblxyXG4gXCInVXBkYXRlcycgYSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGtzIGlzIGFcXG4gIHNlcXVlbmNlIG9mIGtleXMgYW5kIGYgaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgdGFrZSB0aGUgb2xkIHZhbHVlXFxuICBhbmQgYW55IHN1cHBsaWVkIGFyZ3MgYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLCBhbmQgcmV0dXJucyBhIG5ld1xcbiAgbmVzdGVkIHN0cnVjdHVyZS4gIElmIGFueSBsZXZlbHMgZG8gbm90IGV4aXN0LCBoYXNoLW1hcHMgd2lsbCBiZVxcbiAgY3JlYXRlZC5cIlxyXG4gKFttIFtrICYga3NdIGZdXHJcbiAgKGlmXHJcbiAgIGtzXHJcbiAgIChhc3NvYyBtIGsgKHVwZGF0ZS1pbiAoZ2V0IG0gaykga3MgZikpXHJcbiAgIChhc3NvYyBtIGsgKGYgKGdldCBtIGspKSkpKVxyXG4gKFttIFtrICYga3NdIGYgYV1cclxuICAoaWZcclxuICAga3NcclxuICAgKGFzc29jIG0gayAodXBkYXRlLWluIChnZXQgbSBrKSBrcyBmIGEpKVxyXG4gICAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSBhKSkpKVxyXG4gKFttIFtrICYga3NdIGYgYSBiXVxyXG4gIChpZlxyXG4gICBrc1xyXG4gICAoYXNzb2MgbSBrICh1cGRhdGUtaW4gKGdldCBtIGspIGtzIGYgYSBiKSlcclxuICAgKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgYSBiKSkpKVxyXG4gKFttIFtrICYga3NdIGYgYSBiIGNdXHJcbiAgKGlmXHJcbiAgIGtzXHJcbiAgIChhc3NvYyBtIGsgKHVwZGF0ZS1pbiAoZ2V0IG0gaykga3MgZiBhIGIgYykpXHJcbiAgIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIGEgYiBjKSkpKVxyXG4gKFttIFtrICYga3NdIGYgYSBiIGMgJiBhcmdzXVxyXG4gIChpZlxyXG4gICBrc1xyXG4gICAoYXNzb2MgbSBrIChhcHBseSB1cGRhdGUtaW4gKGdldCBtIGspIGtzIGYgYSBiIGMgYXJncykpXHJcbiAgIChhc3NvYyBtIGsgKGFwcGx5IGYgKGdldCBtIGspIGEgYiBjIGFyZ3MpKSkpKVxyXG4ifSB7OnN5bSBwcmVmZXItbWV0aG9kLCA6bWV0YSB7OmRvYyAiQ2F1c2VzIHRoZSBtdWx0aW1ldGhvZCB0byBwcmVmZXIgbWF0Y2hlcyBvZiBkaXNwYXRjaC12YWwteCBvdmVyIGRpc3BhdGNoLXZhbC15XG4gICB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QiLCA6YXJnbGlzdHMgKFttdWx0aWZuIGRpc3BhdGNoLXZhbC14IGRpc3BhdGNoLXZhbC15XSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJlZmVyLW1ldGhvZFxyXG4gXCJDYXVzZXMgdGhlIG11bHRpbWV0aG9kIHRvIHByZWZlciBtYXRjaGVzIG9mIGRpc3BhdGNoLXZhbC14IG92ZXIgZGlzcGF0Y2gtdmFsLXlcXG4gICB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3RcIlxyXG4gW211bHRpZm4gZGlzcGF0Y2gtdmFsLXggZGlzcGF0Y2gtdmFsLXldXHJcbiAoLXByZWZlci1tZXRob2QgbXVsdGlmbiBkaXNwYXRjaC12YWwteCBkaXNwYXRjaC12YWwteSkpXHJcbiJ9IHs6c3ltIGVuc3VyZS1yZWR1Y2VkLCA6bWV0YSB7OmRvYyAiSWYgeCBpcyBhbHJlYWR5IHJlZHVjZWQ/LCByZXR1cm5zIGl0LCBlbHNlIHJldHVybnMgKHJlZHVjZWQgeCkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5zdXJlLXJlZHVjZWRcclxuIFwiSWYgeCBpcyBhbHJlYWR5IHJlZHVjZWQ/LCByZXR1cm5zIGl0LCBlbHNlIHJldHVybnMgKHJlZHVjZWQgeClcIlxyXG4gW3hdXHJcbiAoaWYgKHJlZHVjZWQ/IHgpIHggKHJlZHVjZWQgeCkpKVxyXG4ifSB7OnN5bSBpbnN0YW5jZT8sIDptZXRhIHs6ZG9jICJFdmFsdWF0ZXMgeCBhbmQgdGVzdHMgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHR5cGVcbiAgYy4gUmV0dXJucyB0cnVlIG9yIGZhbHNlIiwgOmFyZ2xpc3RzIChbYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5zdGFuY2U/XHJcbiBcIkV2YWx1YXRlcyB4IGFuZCB0ZXN0cyBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgdHlwZVxcbiAgYy4gUmV0dXJucyB0cnVlIG9yIGZhbHNlXCJcclxuIFtjIHhdXHJcbiAoY2xqcy5jb3JlL2luc3RhbmNlPyBjIHgpKVxyXG4ifSB7OnN5bSBtaXgtY29sbGVjdGlvbi1oYXNoLCA6bWV0YSB7OmRvYyAiTWl4IGZpbmFsIGNvbGxlY3Rpb24gaGFzaCBmb3Igb3JkZXJlZCBvciB1bm9yZGVyZWQgY29sbGVjdGlvbnMuXG4gICBoYXNoLWJhc2lzIGlzIHRoZSBjb21iaW5lZCBjb2xsZWN0aW9uIGhhc2gsIGNvdW50IGlzIHRoZSBudW1iZXJcbiAgIG9mIGVsZW1lbnRzIGluY2x1ZGVkIGluIHRoZSBiYXNpcy4gTm90ZSB0aGlzIGlzIHRoZSBoYXNoIGNvZGVcbiAgIGNvbnNpc3RlbnQgd2l0aCA9LCBkaWZmZXJlbnQgZnJvbSAuaGFzaENvZGUuXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuIiwgOmFyZ2xpc3RzIChbaGFzaC1iYXNpcyBjb3VudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1peC1jb2xsZWN0aW9uLWhhc2hcclxuIFwiTWl4IGZpbmFsIGNvbGxlY3Rpb24gaGFzaCBmb3Igb3JkZXJlZCBvciB1bm9yZGVyZWQgY29sbGVjdGlvbnMuXFxuICAgaGFzaC1iYXNpcyBpcyB0aGUgY29tYmluZWQgY29sbGVjdGlvbiBoYXNoLCBjb3VudCBpcyB0aGUgbnVtYmVyXFxuICAgb2YgZWxlbWVudHMgaW5jbHVkZWQgaW4gdGhlIGJhc2lzLiBOb3RlIHRoaXMgaXMgdGhlIGhhc2ggY29kZVxcbiAgIGNvbnNpc3RlbnQgd2l0aCA9LCBkaWZmZXJlbnQgZnJvbSAuaGFzaENvZGUuXFxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLlwiXHJcbiBbaGFzaC1iYXNpcyBjb3VudF1cclxuIChsZXRcclxuICBbaDEgbTMtc2VlZCBrMSAobTMtbWl4LUsxIGhhc2gtYmFzaXMpIGgxIChtMy1taXgtSDEgaDEgazEpXVxyXG4gIChtMy1mbWl4IGgxIGNvdW50KSkpXHJcbiJ9IHs6c3ltIHJlLWZpbmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaXJzdCByZWdleCBtYXRjaCwgaWYgYW55LCBvZiBzIHRvIHJlLCB1c2luZ1xuICByZS5leGVjKHMpLiBSZXR1cm5zIGEgdmVjdG9yLCBjb250YWluaW5nIGZpcnN0IHRoZSBtYXRjaGluZ1xuICBzdWJzdHJpbmcsIHRoZW4gYW55IGNhcHR1cmluZyBncm91cHMgaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb250YWluc1xuICBjYXB0dXJpbmcgZ3JvdXBzLiIsIDphcmdsaXN0cyAoW3JlIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZS1maW5kXHJcbiBcIlJldHVybnMgdGhlIGZpcnN0IHJlZ2V4IG1hdGNoLCBpZiBhbnksIG9mIHMgdG8gcmUsIHVzaW5nXFxuICByZS5leGVjKHMpLiBSZXR1cm5zIGEgdmVjdG9yLCBjb250YWluaW5nIGZpcnN0IHRoZSBtYXRjaGluZ1xcbiAgc3Vic3RyaW5nLCB0aGVuIGFueSBjYXB0dXJpbmcgZ3JvdXBzIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY29udGFpbnNcXG4gIGNhcHR1cmluZyBncm91cHMuXCJcclxuIFtyZSBzXVxyXG4gKGlmXHJcbiAgKHN0cmluZz8gcylcclxuICAobGV0XHJcbiAgIFttYXRjaGVzICguZXhlYyByZSBzKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAobmlsPyBtYXRjaGVzKVxyXG4gICAgKGlmICg9PSAoY291bnQgbWF0Y2hlcykgMSkgKGFnZXQgbWF0Y2hlcyAwKSAodmVjIG1hdGNoZXMpKSkpXHJcbiAgKHRocm93IChqcy9UeXBlRXJyb3IuIFwicmUtZmluZCBtdXN0IG1hdGNoIGFnYWluc3QgYSBzdHJpbmcuXCIpKSkpXHJcbiJ9IHs6c3ltIHJ1biEsIDptZXRhIHs6ZG9jICJSdW5zIHRoZSBzdXBwbGllZCBwcm9jZWR1cmUgKHZpYSByZWR1Y2UpLCBmb3IgcHVycG9zZXMgb2Ygc2lkZVxuICBlZmZlY3RzLCBvbiBzdWNjZXNzaXZlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLiBSZXR1cm5zIG5pbCIsIDphcmdsaXN0cyAoW3Byb2MgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJ1biFcclxuIFwiUnVucyB0aGUgc3VwcGxpZWQgcHJvY2VkdXJlICh2aWEgcmVkdWNlKSwgZm9yIHB1cnBvc2VzIG9mIHNpZGVcXG4gIGVmZmVjdHMsIG9uIHN1Y2Nlc3NpdmUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uIFJldHVybnMgbmlsXCJcclxuIFtwcm9jIGNvbGxdXHJcbiAocmVkdWNlIChmbiogW3AxX180ODg1MiMgcDJfXzQ4ODUxI10gKHByb2MgcDJfXzQ4ODUxIykpIG5pbCBjb2xsKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSB2YWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBpbiB0aGUgbWFwIGVudHJ5LiIsIDphcmdsaXN0cyAoW21hcC1lbnRyeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbFxyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBpbiB0aGUgbWFwIGVudHJ5LlwiXHJcbiBbbWFwLWVudHJ5XVxyXG4gKC12YWwgbWFwLWVudHJ5KSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWFkZCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWFkZFxyXG4gXCJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC5cIlxyXG4gKFtdIDApXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtYWRkIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZSB1bmNoZWNrZWQtYWRkIChjbGpzLmNvcmUvdW5jaGVja2VkLWFkZCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gdHJhbnNmb3JtZXItaXRlcmF0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeGZvcm0gc291cmNlSXRlciBtdWx0aV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zZm9ybWVyLWl0ZXJhdG9yXHJcbiBbeGZvcm0gc291cmNlSXRlciBtdWx0aV1cclxuIChsZXRcclxuICBbaXRlcmF0b3JcclxuICAgKFRyYW5zZm9ybWVySXRlcmF0b3IuIEVNUFRZIE5PTkUgZmFsc2UgbmlsIHNvdXJjZUl0ZXIgbXVsdGkpXVxyXG4gIChzZXQhXHJcbiAgICguLXhmIGl0ZXJhdG9yKVxyXG4gICAoeGZvcm1cclxuICAgIChmblxyXG4gICAgIChbXSBuaWwpXHJcbiAgICAgKFthY2NdIGFjYylcclxuICAgICAoW2FjYyBvXVxyXG4gICAgICAoc2V0ISAoLi1idWZmZXIgaXRlcmF0b3IpICguYWRkICguLWJ1ZmZlciBpdGVyYXRvcikgbykpXHJcbiAgICAgIGFjYykpKSlcclxuICBpdGVyYXRvcikpXHJcbiJ9IHs6c3ltIG5vdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGxvZ2ljYWwgZmFsc2UsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbm90XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGxvZ2ljYWwgZmFsc2UsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAoY29uZCAobmlsPyB4KSB0cnVlIChmYWxzZT8geCkgdHJ1ZSA6ZWxzZSBmYWxzZSkpXHJcbiJ9IHs6c3ltIC12cmVzZXQhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgb2Ygdm9sYXRpbGUgbyB0byBuZXctdmFsdWUgd2l0aG91dCByZWdhcmQgZm9yIHRoZVxuICAgICBjdXJyZW50IHZhbHVlLiBSZXR1cm5zIG5ldy12YWx1ZS4iLCA6YXJnbGlzdHMgKFtvIG5ldy12YWx1ZV0pfSwgOnByb3RvY29sIElWb2xhdGlsZX0gezpzeW0gd2l0aC1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgb2JqLCB3aXRoXG4gIG1hcCBtIGFzIGl0cyBtZXRhZGF0YS4iLCA6YXJnbGlzdHMgKFtvIG1ldGFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aXRoLW1ldGFcclxuIFwiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgb2JqLCB3aXRoXFxuICBtYXAgbSBhcyBpdHMgbWV0YWRhdGEuXCJcclxuIFtvIG1ldGFdXHJcbiAoaWZcclxuICAoZ29vZy9pc0Z1bmN0aW9uIG8pXHJcbiAgKE1ldGFGbi4gbyBtZXRhKVxyXG4gICh3aGVuLW5vdCAobmlsPyBvKSAoLXdpdGgtbWV0YSBvIG1ldGEpKSkpXHJcbiJ9IHs6c3ltIHVucmVkdWNlZCwgOm1ldGEgezpkb2MgIklmIHggaXMgcmVkdWNlZD8sIHJldHVybnMgKGRlcmVmIHgpLCBlbHNlIHJldHVybnMgeCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnJlZHVjZWRcclxuIFwiSWYgeCBpcyByZWR1Y2VkPywgcmV0dXJucyAoZGVyZWYgeCksIGVsc2UgcmV0dXJucyB4XCJcclxuIFt4XVxyXG4gKGlmIChyZWR1Y2VkPyB4KSAoZGVyZWYgeCkgeCkpXHJcbiJ9IHs6c3ltIHJlY29yZD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJUmVjb3JkIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlY29yZD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVJlY29yZFwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElSZWNvcmQgeCkpXHJcbiJ9IHs6c3ltIHR5cGUsIDptZXRhIHs6ZG9jICJSZXR1cm4geCdzIGNvbnN0cnVjdG9yLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0eXBlXHJcbiBcIlJldHVybiB4J3MgY29uc3RydWN0b3IuXCJcclxuIFt4XVxyXG4gKHdoZW4tbm90IChuaWw/IHgpICguLWNvbnN0cnVjdG9yIHgpKSlcclxuIn0gezpzeW0gaWRlbnRpY2FsPywgOm1ldGEgezpkb2MgIlRlc3RzIGlmIDIgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBvYmplY3QiLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpZGVudGljYWw/XHJcbiBcIlRlc3RzIGlmIDIgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBvYmplY3RcIlxyXG4gW3ggeV1cclxuIChjbGpzLmNvcmUvaWRlbnRpY2FsPyB4IHkpKVxyXG4ifSB7OnN5bSAtbmFtZXNwYWNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZXNwYWNlIFN0cmluZyBvZiB4LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBJTmFtZWR9IHs6c3ltIHVuY2hlY2tlZC1kaXZpZGUtaW50LCA6bWV0YSB7OmRvYyAiSWYgbm8gZGVub21pbmF0b3JzIGFyZSBzdXBwbGllZCwgcmV0dXJucyAxL251bWVyYXRvcixcbiAgZWxzZSByZXR1cm5zIG51bWVyYXRvciBkaXZpZGVkIGJ5IGFsbCBvZiB0aGUgZGVub21pbmF0b3JzLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWRpdmlkZS1pbnRcclxuIFwiSWYgbm8gZGVub21pbmF0b3JzIGFyZSBzdXBwbGllZCwgcmV0dXJucyAxL251bWVyYXRvcixcXG4gIGVsc2UgcmV0dXJucyBudW1lcmF0b3IgZGl2aWRlZCBieSBhbGwgb2YgdGhlIGRlbm9taW5hdG9ycy5cIlxyXG4gKFt4XSAodW5jaGVja2VkLWRpdmlkZS1pbnQgMSB4KSlcclxuIChbeCB5XSAoY2xqcy5jb3JlL2RpdmlkZSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2UgdW5jaGVja2VkLWRpdmlkZS1pbnQgKHVuY2hlY2tlZC1kaXZpZGUtaW50IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBucy1uYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbmFtZXNwYWNlLCBhIE5hbWVzcGFjZSBvYmplY3QuXG4gIEJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyAoW25zLW9ial0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5zLW5hbWVcclxuIFwiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbmFtZXNwYWNlLCBhIE5hbWVzcGFjZSBvYmplY3QuXFxuICBCb290c3RyYXAgb25seS5cIlxyXG4gW25zLW9ial1cclxuICguLW5hbWUgbnMtb2JqKSlcclxuIn0gezpzeW0gbWF4LWtleSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHggZm9yIHdoaWNoIChrIHgpLCBhIG51bWJlciwgaXMgZ3JlYXRlc3QuXG5cbiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggeHMsIHRoZSBsYXN0IG9uZSBpcyByZXR1cm5lZC4iLCA6YXJnbGlzdHMgW1trIHhdIFtrIHggeV0gW2sgeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1heC1rZXlcclxuIFwiUmV0dXJucyB0aGUgeCBmb3Igd2hpY2ggKGsgeCksIGEgbnVtYmVyLCBpcyBncmVhdGVzdC5cXG5cXG4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWNoIHhzLCB0aGUgbGFzdCBvbmUgaXMgcmV0dXJuZWQuXCJcclxuIChbayB4XSB4KVxyXG4gKFtrIHggeV0gKGlmICg+IChrIHgpIChrIHkpKSB4IHkpKVxyXG4gKFtrIHggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4qIFtwMV9fNDg4MzQjIHAyX180ODgzNSNdIChtYXgta2V5IGsgcDFfXzQ4ODM0IyBwMl9fNDg4MzUjKSlcclxuICAgKG1heC1rZXkgayB4IHkpXHJcbiAgIG1vcmUpKSlcclxuIn0gezpzeW0gKm91dCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpvdXQqIG5pbClcclxuIn0gezpzeW0gaGFzaC1zdHJpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtc3RyaW5nXHJcbiBba11cclxuICh3aGVuXHJcbiAgKD4gc3RyaW5nLWhhc2gtY2FjaGUtY291bnQgMjU1KVxyXG4gIChzZXQhIHN0cmluZy1oYXNoLWNhY2hlIChqcy1vYmopKVxyXG4gIChzZXQhIHN0cmluZy1oYXNoLWNhY2hlLWNvdW50IDApKVxyXG4gKGlmXHJcbiAgKG5pbD8gaylcclxuICAwXHJcbiAgKGxldFxyXG4gICBbaCAodW5jaGVja2VkLWdldCBzdHJpbmctaGFzaC1jYWNoZSBrKV1cclxuICAgKGlmIChudW1iZXI/IGgpIGggKGFkZC10by1zdHJpbmctaGFzaC1jYWNoZSBrKSkpKSlcclxuIn0gezpzeW0gLXByZWZlcnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWZdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gc2V0LXZhbGlkYXRvciEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWxpZGF0b3ItZm4gZm9yIGFuIGF0b20uIHZhbGlkYXRvci1mbiBtdXN0IGJlIG5pbCBvciBhXG4gIHNpZGUtZWZmZWN0LWZyZWUgZm4gb2Ygb25lIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aGUgaW50ZW5kZWRcbiAgbmV3IHN0YXRlIG9uIGFueSBzdGF0ZSBjaGFuZ2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdW5hY2NlcHRhYmxlLCB0aGVcbiAgdmFsaWRhdG9yLWZuIHNob3VsZCByZXR1cm4gZmFsc2Ugb3IgdGhyb3cgYW4gRXJyb3IuIElmIHRoZSBjdXJyZW50IHN0YXRlXG4gIGlzIG5vdCBhY2NlcHRhYmxlIHRvIHRoZSBuZXcgdmFsaWRhdG9yLCBhbiBFcnJvciB3aWxsIGJlIHRocm93biBhbmQgdGhlXG4gIHZhbGlkYXRvciB3aWxsIG5vdCBiZSBjaGFuZ2VkLiIsIDphcmdsaXN0cyAoW2lyZWYgdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0LXZhbGlkYXRvciFcclxuIFwiU2V0cyB0aGUgdmFsaWRhdG9yLWZuIGZvciBhbiBhdG9tLiB2YWxpZGF0b3ItZm4gbXVzdCBiZSBuaWwgb3IgYVxcbiAgc2lkZS1lZmZlY3QtZnJlZSBmbiBvZiBvbmUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRoZSBpbnRlbmRlZFxcbiAgbmV3IHN0YXRlIG9uIGFueSBzdGF0ZSBjaGFuZ2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdW5hY2NlcHRhYmxlLCB0aGVcXG4gIHZhbGlkYXRvci1mbiBzaG91bGQgcmV0dXJuIGZhbHNlIG9yIHRocm93IGFuIEVycm9yLiBJZiB0aGUgY3VycmVudCBzdGF0ZVxcbiAgaXMgbm90IGFjY2VwdGFibGUgdG8gdGhlIG5ldyB2YWxpZGF0b3IsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCB0aGVcXG4gIHZhbGlkYXRvciB3aWxsIG5vdCBiZSBjaGFuZ2VkLlwiXHJcbiBbaXJlZiB2YWxdXHJcbiAod2hlblxyXG4gIChhbmQgKHNvbWU/IHZhbCkgKG5vdCAodmFsICgtZGVyZWYgaXJlZikpKSlcclxuICAodGhyb3cgKGpzL0Vycm9yLiBcIlZhbGlkYXRvciByZWplY3RlZCByZWZlcmVuY2Ugc3RhdGVcIikpKVxyXG4gKHNldCEgKC4tdmFsaWRhdG9yIGlyZWYpIHZhbCkpXHJcbiJ9IHs6c3ltIGlkZW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpZGVudD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkXCJcclxuIFt4XVxyXG4gKG9yIChrZXl3b3JkPyB4KSAoc3ltYm9sPyB4KSkpXHJcbiJ9IHs6c3ltIC1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWV0YWRhdGEgb2Ygb2JqZWN0IG8uIiwgOmFyZ2xpc3RzIChbb10pfSwgOnByb3RvY29sIElNZXRhfSB7OnN5bSAtZGlzcGF0Y2gtZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWZdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gLWFkZC1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWYgZGlzcGF0Y2gtdmFsIG1ldGhvZF0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBzd2FwISwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgc3dhcHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gYmU6XG4gIChhcHBseSBmIGN1cnJlbnQtdmFsdWUtb2YtYXRvbSBhcmdzKS4gTm90ZSB0aGF0IGYgbWF5IGJlIGNhbGxlZFxuICBtdWx0aXBsZSB0aW1lcywgYW5kIHRodXMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLiAgUmV0dXJuc1xuICB0aGUgdmFsdWUgdGhhdCB3YXMgc3dhcHBlZCBpbi4iLCA6YXJnbGlzdHMgW1thIGZdIFthIGYgeF0gW2EgZiB4IHldIFthIGYgeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN3YXAhXHJcbiBcIkF0b21pY2FsbHkgc3dhcHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gYmU6XFxuICAoYXBwbHkgZiBjdXJyZW50LXZhbHVlLW9mLWF0b20gYXJncykuIE5vdGUgdGhhdCBmIG1heSBiZSBjYWxsZWRcXG4gIG11bHRpcGxlIHRpbWVzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuICBSZXR1cm5zXFxuICB0aGUgdmFsdWUgdGhhdCB3YXMgc3dhcHBlZCBpbi5cIlxyXG4gKFthIGZdXHJcbiAgKGlmIChpbnN0YW5jZT8gQXRvbSBhKSAocmVzZXQhIGEgKGYgKC4tc3RhdGUgYSkpKSAoLXN3YXAhIGEgZikpKVxyXG4gKFthIGYgeF1cclxuICAoaWYgKGluc3RhbmNlPyBBdG9tIGEpIChyZXNldCEgYSAoZiAoLi1zdGF0ZSBhKSB4KSkgKC1zd2FwISBhIGYgeCkpKVxyXG4gKFthIGYgeCB5XVxyXG4gIChpZlxyXG4gICAoaW5zdGFuY2U/IEF0b20gYSlcclxuICAgKHJlc2V0ISBhIChmICguLXN0YXRlIGEpIHggeSkpXHJcbiAgICgtc3dhcCEgYSBmIHggeSkpKVxyXG4gKFthIGYgeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKGluc3RhbmNlPyBBdG9tIGEpXHJcbiAgIChyZXNldCEgYSAoYXBwbHkgZiAoLi1zdGF0ZSBhKSB4IHkgbW9yZSkpXHJcbiAgICgtc3dhcCEgYSBmIHggeSBtb3JlKSkpKVxyXG4ifSB7OnN5bSB2YWxzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBtYXAncyB2YWx1ZXMsIGluIHRoZSBzYW1lIG9yZGVyIGFzIChzZXEgbWFwKS4iLCA6YXJnbGlzdHMgKFttYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWxzXHJcbiBcIlJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgbWFwJ3MgdmFsdWVzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyAoc2VxIG1hcCkuXCJcclxuIFttYXBdXHJcbiAod2hlbi1sZXQgW21zZXEgKHNlcSBtYXApXSAoVmFsU2VxLiBtc2VxIG5pbCkpKVxyXG4ifSB7OnN5bSAtY2h1bmtlZC1uZXh0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aG91dCB0aGUgZmlyc3QgY2h1bmsuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElDaHVua2VkTmV4dH0gezpzeW0gdW5jaGVja2VkLXN1YnRyYWN0LCA6bWV0YSB7OmRvYyAiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtc3VidHJhY3RcclxuIFwiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlwiXHJcbiAoW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0IHgpKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZSB1bmNoZWNrZWQtc3VidHJhY3QgKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHRhcD4sIDptZXRhIHs6ZG9jICJTZW5kcyB4IHRvIGFueSB0YXBzLiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgKmV4ZWMtdGFwLWZuKiwgYSBCb29sZWFuIHZhbHVlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YXA+XHJcbiBcIlNlbmRzIHggdG8gYW55IHRhcHMuIFJldHVybnMgdGhlIHJlc3VsdCBvZiAqZXhlYy10YXAtZm4qLCBhIEJvb2xlYW4gdmFsdWUuXCJcclxuIFt4XVxyXG4gKG1heWJlLWluaXQtdGFwc2V0KVxyXG4gKCpleGVjLXRhcC1mbipcclxuICAoZm4gW10gKGRvc2VxIFt0YXAgQHRhcHNldF0gKHRyeSAodGFwIHgpIChjYXRjaCBqcy9FcnJvciBleCkpKSkpKVxyXG4ifSB7OnN5bSBJTWFwLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgdG8gY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtZGlzc29jKX0gezpzeW0gc29ydGVkLXNldC1ieSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgc29ydGVkIHNldCB3aXRoIHN1cHBsaWVkIGtleXMsIHVzaW5nIHRoZSBzdXBwbGllZCBjb21wYXJhdG9yLiIsIDphcmdsaXN0cyBbW2NvbXBhcmF0b3IgJiBrZXlzXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydGVkLXNldC1ieVxyXG4gXCJSZXR1cm5zIGEgbmV3IHNvcnRlZCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLCB1c2luZyB0aGUgc3VwcGxpZWQgY29tcGFyYXRvci5cIlxyXG4gKFtjb21wYXJhdG9yICYga2V5c11cclxuICAocmVkdWNlXHJcbiAgIC1jb25qXHJcbiAgIChQZXJzaXN0ZW50VHJlZVNldC4gbmlsIChzb3J0ZWQtbWFwLWJ5IGNvbXBhcmF0b3IpIDApXHJcbiAgIGtleXMpKSlcclxuIn0gezpzeW0gY2xvbmVhYmxlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaW1wbGVtZW50cyBJQ2xvbmVhYmxlIHByb3RvY29sLiIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xvbmVhYmxlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUNsb25lYWJsZSBwcm90b2NvbC5cIlxyXG4gW3ZhbHVlXVxyXG4gKHNhdGlzZmllcz8gSUNsb25lYWJsZSB2YWx1ZSkpXHJcbiJ9IHs6c3ltIHF1YWxpZmllZC1pZGVudD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmQgd2l0aCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdWFsaWZpZWQtaWRlbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZCB3aXRoIGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGJvb2xlYW4gKGFuZCAoaWRlbnQ/IHgpIChuYW1lc3BhY2UgeCkgdHJ1ZSkpKVxyXG4ifSB7OnN5bSBoYXNoLXN0cmluZyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtc3RyaW5nKlxyXG4gW3NdXHJcbiAoaWYtbm90XHJcbiAgKG5pbD8gcylcclxuICAobGV0XHJcbiAgIFtsZW4gKC4tbGVuZ3RoIHMpXVxyXG4gICAoaWZcclxuICAgIChwb3M/IGxlbilcclxuICAgIChsb29wXHJcbiAgICAgW2kgMCBoYXNoIDBdXHJcbiAgICAgKGlmXHJcbiAgICAgICg8IGkgbGVuKVxyXG4gICAgICAocmVjdXIgKGluYyBpKSAoKyAoaW11bCAzMSBoYXNoKSAoLmNoYXJDb2RlQXQgcyBpKSkpXHJcbiAgICAgIGhhc2gpKVxyXG4gICAgMCkpXHJcbiAgMCkpXHJcbiJ9IHs6c3ltIGtleS10ZXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleSBvdGhlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleS10ZXN0XHJcbiBba2V5IG90aGVyXVxyXG4gKGNvbmRcclxuICAoaWRlbnRpY2FsPyBrZXkgb3RoZXIpXHJcbiAgdHJ1ZVxyXG4gIChrZXl3b3JkLWlkZW50aWNhbD8ga2V5IG90aGVyKVxyXG4gIHRydWVcclxuICA6ZWxzZVxyXG4gICg9IGtleSBvdGhlcikpKVxyXG4ifSB7OnN5bSAtcmVzZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWZdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gdHJ1ZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgdmFsdWUgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cnVlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgdmFsdWUgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvdHJ1ZT8geCkpXHJcbiJ9IHs6c3ltIGFycmF5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIG5ldyBqYXZhc2NyaXB0IGFycmF5LlxuQHBhcmFtIHsuLi4qfSB2YXJfYXJncyIsIDphcmdsaXN0cyAoW3Zhci1hcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXlcclxuIFwiQ3JlYXRlcyBhIG5ldyBqYXZhc2NyaXB0IGFycmF5LlxcbkBwYXJhbSB7Li4uKn0gdmFyX2FyZ3NcIlxyXG4gW3Zhci1hcmdzXVxyXG4gKGxldFxyXG4gIFthIChqcy9BcnJheS4gKGFsZW5ndGggKGNsanMuY29yZS9qcy1hcmd1bWVudHMpKSldXHJcbiAgKGxvb3BcclxuICAgW2kgMF1cclxuICAgKGlmXHJcbiAgICAoPCBpIChhbGVuZ3RoIGEpKVxyXG4gICAgKGRvIChhc2V0IGEgaSAoYWdldCAoY2xqcy5jb3JlL2pzLWFyZ3VtZW50cykgaSkpIChyZWN1ciAoaW5jIGkpKSlcclxuICAgIGEpKSkpXHJcbiJ9IHs6c3ltIHByaW50LCA6bWV0YSB7OmRvYyAiUHJpbnRzIHRoZSBvYmplY3QocykgdXNpbmcgc3RyaW5nLXByaW50LlxuICBwcmludCBhbmQgcHJpbnRsbiBwcm9kdWNlIG91dHB1dCBmb3IgaHVtYW4gY29uc3VtcHRpb24uIn0sIDpzb3VyY2UgIihkZWZcclxuIHByaW50XHJcbiAoZm5cclxuICBjbGpzLWNvcmUtcHJpbnRcclxuICBbJiBvYmpzXVxyXG4gIChwci13aXRoLW9wdHMgb2JqcyAoYXNzb2MgKHByLW9wdHMpIDpyZWFkYWJseSBmYWxzZSkpKSlcclxuIn0gezpzeW0gLXBlZWssIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBpdGVtIGZyb20gdGhlIHRvcCBvZiB0aGUgc3RhY2suIElzIHVzZWQgYnkgY2xqcy5jb3JlL3BlZWsuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElTdGFja30gezpzeW0gSVNlcSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjb2xsZWN0aW9ucyB0byBwcm92aWRlIGFjY2VzcyB0byB0aGVpciBpdGVtcyBhcyBzZXF1ZW5jZXMuIn0sIDptZXRob2RzICgtZmlyc3QgLXJlc3QpfSB7OnN5bSBlbXB0eSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gZW1wdHkgY29sbGVjdGlvbiBvZiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBjb2xsLCBvciBuaWwiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1wdHlcclxuIFwiUmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIG9mIHRoZSBzYW1lIGNhdGVnb3J5IGFzIGNvbGwsIG9yIG5pbFwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGNvbmRcclxuICAgKGltcGxlbWVudHM/IElFbXB0eWFibGVDb2xsZWN0aW9uIGNvbGwpXHJcbiAgICgtZW1wdHkgY29sbClcclxuICAgKHNhdGlzZmllcz8gSUVtcHR5YWJsZUNvbGxlY3Rpb24gY29sbClcclxuICAgKC1lbXB0eSBjb2xsKVxyXG4gICA6ZWxzZVxyXG4gICBuaWwpKSlcclxuIn0gezpzeW0gcmVtb3ZlLW1ldGhvZCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgdGhlIG1ldGhvZCBvZiBtdWx0aW1ldGhvZCBhc3NvY2lhdGVkIHdpdGggZGlzcGF0Y2gtdmFsdWUuIiwgOmFyZ2xpc3RzIChbbXVsdGlmbiBkaXNwYXRjaC12YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmUtbWV0aG9kXHJcbiBcIlJlbW92ZXMgdGhlIG1ldGhvZCBvZiBtdWx0aW1ldGhvZCBhc3NvY2lhdGVkIHdpdGggZGlzcGF0Y2gtdmFsdWUuXCJcclxuIFttdWx0aWZuIGRpc3BhdGNoLXZhbF1cclxuICgtcmVtb3ZlLW1ldGhvZCBtdWx0aWZuIGRpc3BhdGNoLXZhbCkpXHJcbiJ9IHs6c3ltIHZvbGF0aWxlISwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBWb2xhdGlsZSB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgdmFsLiIsIDphcmdsaXN0cyAoW3ZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZvbGF0aWxlIVxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGEgVm9sYXRpbGUgd2l0aCBhbiBpbml0aWFsIHZhbHVlIG9mIHZhbC5cIlxyXG4gW3ZhbF1cclxuIChWb2xhdGlsZS4gdmFsKSlcclxuIn0gezpzeW0gLywgOm1ldGEgezpkb2MgIklmIG5vIGRlbm9taW5hdG9ycyBhcmUgc3VwcGxpZWQsIHJldHVybnMgMS9udW1lcmF0b3IsXG4gIGVsc2UgcmV0dXJucyBudW1lcmF0b3IgZGl2aWRlZCBieSBhbGwgb2YgdGhlIGRlbm9taW5hdG9ycy4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIC9cclxuIFwiSWYgbm8gZGVub21pbmF0b3JzIGFyZSBzdXBwbGllZCwgcmV0dXJucyAxL251bWVyYXRvcixcXG4gIGVsc2UgcmV0dXJucyBudW1lcmF0b3IgZGl2aWRlZCBieSBhbGwgb2YgdGhlIGRlbm9taW5hdG9ycy5cIlxyXG4gKFt4XSAoLyAxIHgpKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvZGl2aWRlIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgLyAoLyB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gYml0LW9yLCA6bWV0YSB7OmRvYyAiQml0d2lzZSBvciIsIDphcmdsaXN0cyBbW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtb3JcclxuIFwiQml0d2lzZSBvclwiXHJcbiAoW3ggeV0gKGNsanMuY29yZS9iaXQtb3IgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBiaXQtb3IgKGNsanMuY29yZS9iaXQtb3IgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIG0zLWZtaXgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaDEgbGVuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbTMtZm1peFxyXG4gW2gxIGxlbl1cclxuIChhcy0+XHJcbiAgKGludCBoMSlcclxuICBoMVxyXG4gIChiaXQteG9yIGgxIGxlbilcclxuICAoYml0LXhvciBoMSAodW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0IGgxIDE2KSlcclxuICAoaW11bCBoMSAoaW50IDIyNDY4MjI1MDcpKVxyXG4gIChiaXQteG9yIGgxICh1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQgaDEgMTMpKVxyXG4gIChpbXVsIGgxIChpbnQgMzI2NjQ4OTkwOSkpXHJcbiAgKGJpdC14b3IgaDEgKHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCBoMSAxNikpKSlcclxuIn0gezpzeW0gdmVjdG9yLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgYXJncy4iLCA6YXJnbGlzdHMgKFsmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2ZWN0b3JcclxuIFwiQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgYXJncy5cIlxyXG4gWyYgYXJnc11cclxuIChpZlxyXG4gIChhbmQgKGluc3RhbmNlPyBJbmRleGVkU2VxIGFyZ3MpICh6ZXJvPyAoLi1pIGFyZ3MpKSlcclxuICAoLmZyb21BcnJheVxyXG4gICBQZXJzaXN0ZW50VmVjdG9yXHJcbiAgICguLWFyciBhcmdzKVxyXG4gICAobm90IChhcnJheT8gKC4tYXJyIGFyZ3MpKSkpXHJcbiAgKHZlYyBhcmdzKSkpXHJcbiJ9IHs6c3ltID49LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgbm9uLWluY3JlYXNpbmcgb3JkZXIsXG4gIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuID49XHJcbiBcIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IG5vbi1pbmNyZWFzaW5nIG9yZGVyLFxcbiAgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKGNsanMuY29yZS8+PSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoY2xqcy5jb3JlLz49IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKGNsanMuY29yZS8+PSB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIGRyb3AtbGFzdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIGxhenkgc2VxdWVuY2Ugb2YgYWxsIGJ1dCB0aGUgbGFzdCBuIChkZWZhdWx0IDEpIGl0ZW1zIGluIGNvbGwiLCA6YXJnbGlzdHMgW1tzXSBbbiBzXV19LCA6c291cmNlICIoZGVmblxyXG4gZHJvcC1sYXN0XHJcbiBcIlJldHVybiBhIGxhenkgc2VxdWVuY2Ugb2YgYWxsIGJ1dCB0aGUgbGFzdCBuIChkZWZhdWx0IDEpIGl0ZW1zIGluIGNvbGxcIlxyXG4gKFtzXSAoZHJvcC1sYXN0IDEgcykpXHJcbiAoW24gc10gKG1hcCAoZm4gW3ggX10geCkgcyAoZHJvcCBuIHMpKSkpXHJcbiJ9IHs6c3ltIG9iamVjdD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCdzIGNvbnN0cnVjdG9yIGlzIE9iamVjdCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvYmplY3Q/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4J3MgY29uc3RydWN0b3IgaXMgT2JqZWN0XCJcclxuIFt4XVxyXG4gKGlmLW5vdCAobmlsPyB4KSAoaWRlbnRpY2FsPyAoLi1jb25zdHJ1Y3RvciB4KSBqcy9PYmplY3QpIGZhbHNlKSlcclxuIn0gezpzeW0gbm90LWVtcHR5LCA6bWV0YSB7OmRvYyAiSWYgY29sbCBpcyBlbXB0eSwgcmV0dXJucyBuaWwsIGVsc2UgY29sbCIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3QtZW1wdHlcclxuIFwiSWYgY29sbCBpcyBlbXB0eSwgcmV0dXJucyBuaWwsIGVsc2UgY29sbFwiXHJcbiBbY29sbF1cclxuICh3aGVuIChzZXEgY29sbCkgY29sbCkpXHJcbiJ9IHs6c3ltIGRpc3RpbmN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwgd2l0aCBkdXBsaWNhdGVzIHJlbW92ZWQuXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tdIFtjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzdGluY3RcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwgd2l0aCBkdXBsaWNhdGVzIHJlbW92ZWQuXFxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtzZWVuICh2b2xhdGlsZSEgI3t9KV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGlmXHJcbiAgICAgICAoY29udGFpbnM/IEBzZWVuIGlucHV0KVxyXG4gICAgICAgcmVzdWx0XHJcbiAgICAgICAoZG8gKHZzd2FwISBzZWVuIGNvbmogaW5wdXQpIChyZiByZXN1bHQgaW5wdXQpKSkpKSkpKVxyXG4gKFtjb2xsXVxyXG4gIChsZXRcclxuICAgW3N0ZXBcclxuICAgIChmblxyXG4gICAgIHN0ZXBcclxuICAgICBbeHMgc2Vlbl1cclxuICAgICAobGF6eS1zZXFcclxuICAgICAgKChmblxyXG4gICAgICAgIFtbZiA6YXMgeHNdIHNlZW5dXHJcbiAgICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgIFtzIChzZXEgeHMpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChjb250YWlucz8gc2VlbiBmKVxyXG4gICAgICAgICAgKHJlY3VyIChyZXN0IHMpIHNlZW4pXHJcbiAgICAgICAgICAoY29ucyBmIChzdGVwIChyZXN0IHMpIChjb25qIHNlZW4gZikpKSkpKVxyXG4gICAgICAgeHNcclxuICAgICAgIHNlZW4pKSldXHJcbiAgIChzdGVwIGNvbGwgI3t9KSkpKVxyXG4ifSB7OnN5bSBwYXJ0aXRpb24sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBsaXN0cyBvZiBuIGl0ZW1zIGVhY2gsIGF0IG9mZnNldHMgc3RlcFxuICBhcGFydC4gSWYgc3RlcCBpcyBub3Qgc3VwcGxpZWQsIGRlZmF1bHRzIHRvIG4sIGkuZS4gdGhlIHBhcnRpdGlvbnNcbiAgZG8gbm90IG92ZXJsYXAuIElmIGEgcGFkIGNvbGxlY3Rpb24gaXMgc3VwcGxpZWQsIHVzZSBpdHMgZWxlbWVudHMgYXNcbiAgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGxhc3QgcGFydGl0aW9uIHVwIHRvIG4gaXRlbXMuIEluIGNhc2UgdGhlcmUgYXJlXG4gIG5vdCBlbm91Z2ggcGFkZGluZyBlbGVtZW50cywgcmV0dXJuIGEgcGFydGl0aW9uIHdpdGggbGVzcyB0aGFuIG4gaXRlbXMuIiwgOmFyZ2xpc3RzIFtbbiBjb2xsXSBbbiBzdGVwIGNvbGxdIFtuIHN0ZXAgcGFkIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aXRpb25cclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgbGlzdHMgb2YgbiBpdGVtcyBlYWNoLCBhdCBvZmZzZXRzIHN0ZXBcXG4gIGFwYXJ0LiBJZiBzdGVwIGlzIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG8gbiwgaS5lLiB0aGUgcGFydGl0aW9uc1xcbiAgZG8gbm90IG92ZXJsYXAuIElmIGEgcGFkIGNvbGxlY3Rpb24gaXMgc3VwcGxpZWQsIHVzZSBpdHMgZWxlbWVudHMgYXNcXG4gIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBsYXN0IHBhcnRpdGlvbiB1cCB0byBuIGl0ZW1zLiBJbiBjYXNlIHRoZXJlIGFyZVxcbiAgbm90IGVub3VnaCBwYWRkaW5nIGVsZW1lbnRzLCByZXR1cm4gYSBwYXJ0aXRpb24gd2l0aCBsZXNzIHRoYW4gbiBpdGVtcy5cIlxyXG4gKFtuIGNvbGxdIChwYXJ0aXRpb24gbiBuIGNvbGwpKVxyXG4gKFtuIHN0ZXAgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGxldFxyXG4gICAgIFtwICh0YWtlIG4gcyldXHJcbiAgICAgKHdoZW5cclxuICAgICAgKD09IG4gKGNvdW50IHApKVxyXG4gICAgICAoY29ucyBwIChwYXJ0aXRpb24gbiBzdGVwIChkcm9wIHN0ZXAgcykpKSkpKSkpXHJcbiAoW24gc3RlcCBwYWQgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGxldFxyXG4gICAgIFtwICh0YWtlIG4gcyldXHJcbiAgICAgKGlmXHJcbiAgICAgICg9PSBuIChjb3VudCBwKSlcclxuICAgICAgKGNvbnMgcCAocGFydGl0aW9uIG4gc3RlcCBwYWQgKGRyb3Agc3RlcCBzKSkpXHJcbiAgICAgIChsaXN0ICh0YWtlIG4gKGNvbmNhdCBwIHBhZCkpKSkpKSkpKVxyXG4ifSB7OnN5bSBJTXVsdGlGbiwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKC1hZGQtbWV0aG9kIC1kZWZhdWx0LWRpc3BhdGNoLXZhbCAtZGlzcGF0Y2gtZm4gLWdldC1tZXRob2QgLW1ldGhvZHMgLXByZWZlci1tZXRob2QgLXByZWZlcnMgLXJlbW92ZS1tZXRob2QgLXJlc2V0KX0gezpzeW0gREVNVU5HRV9QQVRURVJOLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBERU1VTkdFX1BBVFRFUk4gbmlsKVxyXG4ifSB7OnN5bSBJQXNzb2NpYXRpdmUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGFzc29jaWF0aXZpdHkgdG8gY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtYXNzb2MgLWNvbnRhaW5zLWtleT8pfSB7OnN5bSBiaXQtZmxpcCwgOm1ldGEgezpkb2MgIkZsaXAgYml0IGF0IGluZGV4IG4iLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuIGJpdC1mbGlwIFwiRmxpcCBiaXQgYXQgaW5kZXggblwiIFt4IG5dIChjbGpzLmNvcmUvYml0LWZsaXAgeCBuKSlcclxuIn0gezpzeW0gbG9uZy1hcnJheSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gYXJyYXkgb2YgbG9uZ3MuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcbiAgd2l0aCBDbG9qdXJlLiIsIDphcmdsaXN0cyBbW3NpemUtb3Itc2VxXSBbc2l6ZSBpbml0LXZhbC1vci1zZXFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb25nLWFycmF5XHJcbiBcIkNyZWF0ZXMgYW4gYXJyYXkgb2YgbG9uZ3MuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcXG4gIHdpdGggQ2xvanVyZS5cIlxyXG4gKFtzaXplLW9yLXNlcV1cclxuICAoaWZcclxuICAgKG51bWJlcj8gc2l6ZS1vci1zZXEpXHJcbiAgIChsb25nLWFycmF5IHNpemUtb3Itc2VxIG5pbClcclxuICAgKGludG8tYXJyYXkgc2l6ZS1vci1zZXEpKSlcclxuIChbc2l6ZSBpbml0LXZhbC1vci1zZXFdXHJcbiAgKGxldFxyXG4gICBbYSAobWFrZS1hcnJheSBzaXplKV1cclxuICAgKGlmXHJcbiAgICAoc2VxPyBpbml0LXZhbC1vci1zZXEpXHJcbiAgICAobGV0XHJcbiAgICAgW3MgKHNlcSBpbml0LXZhbC1vci1zZXEpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtpIDAgcyBzXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgcyAoPCBpIHNpemUpKVxyXG4gICAgICAgKGRvIChhc2V0IGEgaSAoZmlyc3QgcykpIChyZWN1ciAoaW5jIGkpIChuZXh0IHMpKSlcclxuICAgICAgIGEpKSlcclxuICAgIChkbyAoZG90aW1lcyBbaSBzaXplXSAoYXNldCBhIGkgaW5pdC12YWwtb3Itc2VxKSkgYSkpKSkpXHJcbiJ9IHs6c3ltIGRlc2NlbmRhbnRzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaW1tZWRpYXRlIGFuZCBpbmRpcmVjdCBjaGlsZHJlbiBvZiB0YWcsIHRocm91Z2ggYVxuICByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkXG4gIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsXG4gIGhpZXJhcmNoeS4gTm90ZTogZG9lcyBub3Qgd29yayBvbiBKYXZhU2NyaXB0IHR5cGUgaW5oZXJpdGFuY2VcbiAgcmVsYXRpb25zaGlwcy4iLCA6YXJnbGlzdHMgW1t0YWddIFtoIHRhZ11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc2NlbmRhbnRzXHJcbiBcIlJldHVybnMgdGhlIGltbWVkaWF0ZSBhbmQgaW5kaXJlY3QgY2hpbGRyZW4gb2YgdGFnLCB0aHJvdWdoIGFcXG4gIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWRcXG4gIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsXFxuICBoaWVyYXJjaHkuIE5vdGU6IGRvZXMgbm90IHdvcmsgb24gSmF2YVNjcmlwdCB0eXBlIGluaGVyaXRhbmNlXFxuICByZWxhdGlvbnNoaXBzLlwiXHJcbiAoW3RhZ10gKGRlc2NlbmRhbnRzIEAoZ2V0LWdsb2JhbC1oaWVyYXJjaHkpIHRhZykpXHJcbiAoW2ggdGFnXSAobm90LWVtcHR5IChnZXQgKDpkZXNjZW5kYW50cyBoKSB0YWcpKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCB0aGF0IGNvbnNpc3RzIG9mIHRoZSByZXN0IG9mIHRoZSBtYXBzIGNvbmotZWQgb250b1xuICB0aGUgZmlyc3QuICBJZiBhIGtleSBvY2N1cnMgaW4gbW9yZSB0aGFuIG9uZSBtYXAsIHRoZSBtYXBwaW5nIGZyb21cbiAgdGhlIGxhdHRlciAobGVmdC10by1yaWdodCkgd2lsbCBiZSB0aGUgbWFwcGluZyBpbiB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyAoWyYgbWFwc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlXHJcbiBcIlJldHVybnMgYSBtYXAgdGhhdCBjb25zaXN0cyBvZiB0aGUgcmVzdCBvZiB0aGUgbWFwcyBjb25qLWVkIG9udG9cXG4gIHRoZSBmaXJzdC4gIElmIGEga2V5IG9jY3VycyBpbiBtb3JlIHRoYW4gb25lIG1hcCwgdGhlIG1hcHBpbmcgZnJvbVxcbiAgdGhlIGxhdHRlciAobGVmdC10by1yaWdodCkgd2lsbCBiZSB0aGUgbWFwcGluZyBpbiB0aGUgcmVzdWx0LlwiXHJcbiBbJiBtYXBzXVxyXG4gKHdoZW5cclxuICAoc29tZSBpZGVudGl0eSBtYXBzKVxyXG4gIChyZWR1Y2VcclxuICAgKGZuKiBbcDFfXzQ4ODI2IyBwMl9fNDg4MjcjXSAoY29uaiAob3IgcDFfXzQ4ODI2IyB7fSkgcDJfXzQ4ODI3IykpXHJcbiAgIG1hcHMpKSlcclxuIn0gezpzeW0gSVNlcWFibGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIGEgdHlwZSB0byBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgc2VxdWVuY2UuIn0sIDptZXRob2RzICgtc2VxKX0gezpzeW0ganMtbW9kLCA6bWV0YSB7OmRvYyAiTW9kdWx1cyBvZiBudW0gYW5kIGRpdiB3aXRoIG9yaWdpbmFsIGphdmFzY3JpcHQgYmVoYXZpb3IuIGkuZS4gYnVnIGZvciBuZWdhdGl2ZSBudW1iZXJzIiwgOmFyZ2xpc3RzIChbbiBkXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtbW9kXHJcbiBcIk1vZHVsdXMgb2YgbnVtIGFuZCBkaXYgd2l0aCBvcmlnaW5hbCBqYXZhc2NyaXB0IGJlaGF2aW9yLiBpLmUuIGJ1ZyBmb3IgbmVnYXRpdmUgbnVtYmVyc1wiXHJcbiBbbiBkXVxyXG4gKGNsanMuY29yZS9qcy1tb2QgbiBkKSlcclxuIn0gezpzeW0gaW50ZWdlcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbiBpcyBhIEphdmFTY3JpcHQgbnVtYmVyIHdpdGggbm8gZGVjaW1hbCBwYXJ0LiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRlZ2VyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbiBpcyBhIEphdmFTY3JpcHQgbnVtYmVyIHdpdGggbm8gZGVjaW1hbCBwYXJ0LlwiXHJcbiBbbl1cclxuIChhbmRcclxuICAobnVtYmVyPyBuKVxyXG4gIChub3QgKGpzL2lzTmFOIG4pKVxyXG4gIChub3QgKGlkZW50aWNhbD8gbiBqcy9JbmZpbml0eSkpXHJcbiAgKD09IChqcy9wYXJzZUZsb2F0IG4pIChqcy9wYXJzZUludCBuIDEwKSkpKVxyXG4ifSB7OnN5bSBOU19DQUNIRSwgOm1ldGEgezpkb2MgIkJvb3RzdHJhcCBvbmx5LiJ9LCA6c291cmNlICIoZGVmIE5TX0NBQ0hFIG5pbClcclxuIn0gezpzeW0gbWFwdiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB2ZWN0b3IgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdGhlXG4gIHNldCBvZiBmaXJzdCBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlIHNldFxuICBvZiBzZWNvbmQgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpc1xuICBleGhhdXN0ZWQuICBBbnkgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBGdW5jdGlvblxuICBmIHNob3VsZCBhY2NlcHQgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50cy4iLCA6YXJnbGlzdHMgW1tmIGNvbGxdIFtmIGMxIGMyXSBbZiBjMSBjMiBjM10gW2YgYzEgYzIgYzMgJiBjb2xsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcHZcclxuIFwiUmV0dXJucyBhIHZlY3RvciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB0aGVcXG4gIHNldCBvZiBmaXJzdCBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlIHNldFxcbiAgb2Ygc2Vjb25kIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXNcXG4gIGV4aGF1c3RlZC4gIEFueSByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIEZ1bmN0aW9uXFxuICBmIHNob3VsZCBhY2NlcHQgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50cy5cIlxyXG4gKFtmIGNvbGxdXHJcbiAgKC0+XHJcbiAgIChyZWR1Y2UgKGZuIFt2IG9dIChjb25qISB2IChmIG8pKSkgKHRyYW5zaWVudCBbXSkgY29sbClcclxuICAgcGVyc2lzdGVudCEpKVxyXG4gKFtmIGMxIGMyXSAoaW50byBbXSAobWFwIGYgYzEgYzIpKSlcclxuIChbZiBjMSBjMiBjM10gKGludG8gW10gKG1hcCBmIGMxIGMyIGMzKSkpXHJcbiAoW2YgYzEgYzIgYzMgJiBjb2xsc10gKGludG8gW10gKGFwcGx5IG1hcCBmIGMxIGMyIGMzIGNvbGxzKSkpKVxyXG4ifSB7OnN5bSBpbmZpbml0ZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgZm9yIEluZmluaXR5IGFuZCAtSW5maW5pdHkgdmFsdWVzLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZpbml0ZT9cclxuIFwiUmV0dXJucyB0cnVlIGZvciBJbmZpbml0eSBhbmQgLUluZmluaXR5IHZhbHVlcy5cIlxyXG4gW3hdXHJcbiAob3JcclxuICAoaWRlbnRpY2FsPyB4IGpzL051bWJlci5QT1NJVElWRV9JTkZJTklUWSlcclxuICAoaWRlbnRpY2FsPyB4IGpzL051bWJlci5ORUdBVElWRV9JTkZJTklUWSkpKVxyXG4ifSB7OnN5bSBwYXJ0aXRpb24tYWxsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgbGlzdHMgbGlrZSBwYXJ0aXRpb24sIGJ1dCBtYXkgaW5jbHVkZVxuICBwYXJ0aXRpb25zIHdpdGggZmV3ZXIgdGhhbiBuIGl0ZW1zIGF0IHRoZSBlbmQuICBSZXR1cm5zIGEgc3RhdGVmdWxcbiAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbbl0gW24gY29sbF0gW24gc3RlcCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGl0aW9uLWFsbFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBsaXN0cyBsaWtlIHBhcnRpdGlvbiwgYnV0IG1heSBpbmNsdWRlXFxuICBwYXJ0aXRpb25zIHdpdGggZmV3ZXIgdGhhbiBuIGl0ZW1zIGF0IHRoZSBlbmQuICBSZXR1cm5zIGEgc3RhdGVmdWxcXG4gIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW25dXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2EgKGFycmF5LWxpc3QpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtyZXN1bHRcclxuICAgICAgICAoaWZcclxuICAgICAgICAgKC5pc0VtcHR5IGEpXHJcbiAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbdiAodmVjICgudG9BcnJheSBhKSldXHJcbiAgICAgICAgICAoLmNsZWFyIGEpXHJcbiAgICAgICAgICAodW5yZWR1Y2VkIChyZiByZXN1bHQgdikpKSldXHJcbiAgICAgICAocmYgcmVzdWx0KSkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgICguYWRkIGEgaW5wdXQpXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD09IG4gKC5zaXplIGEpKVxyXG4gICAgICAgKGxldCBbdiAodmVjICgudG9BcnJheSBhKSldICguY2xlYXIgYSkgKHJmIHJlc3VsdCB2KSlcclxuICAgICAgIHJlc3VsdCkpKSkpKVxyXG4gKFtuIGNvbGxdIChwYXJ0aXRpb24tYWxsIG4gbiBjb2xsKSlcclxuIChbbiBzdGVwIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChjb25zICh0YWtlIG4gcykgKHBhcnRpdGlvbi1hbGwgbiBzdGVwIChkcm9wIHN0ZXAgcykpKSkpKSlcclxuIn0gezpzeW0gcGFydGl0aW9uLWJ5LCA6bWV0YSB7OmRvYyAiQXBwbGllcyBmIHRvIGVhY2ggdmFsdWUgaW4gY29sbCwgc3BsaXR0aW5nIGl0IGVhY2ggdGltZSBmIHJldHVybnMgYVxuICAgbmV3IHZhbHVlLiAgUmV0dXJucyBhIGxhenkgc2VxIG9mIHBhcnRpdGlvbnMuICBSZXR1cm5zIGEgc3RhdGVmdWxcbiAgIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aXRpb24tYnlcclxuIFwiQXBwbGllcyBmIHRvIGVhY2ggdmFsdWUgaW4gY29sbCwgc3BsaXR0aW5nIGl0IGVhY2ggdGltZSBmIHJldHVybnMgYVxcbiAgIG5ldyB2YWx1ZS4gIFJldHVybnMgYSBsYXp5IHNlcSBvZiBwYXJ0aXRpb25zLiAgUmV0dXJucyBhIHN0YXRlZnVsXFxuICAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbYSAoYXJyYXktbGlzdCkgcGEgKHZvbGF0aWxlISA6Y2xqcy5jb3JlL25vbmUpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtyZXN1bHRcclxuICAgICAgICAoaWZcclxuICAgICAgICAgKC5pc0VtcHR5IGEpXHJcbiAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbdiAodmVjICgudG9BcnJheSBhKSldXHJcbiAgICAgICAgICAoLmNsZWFyIGEpXHJcbiAgICAgICAgICAodW5yZWR1Y2VkIChyZiByZXN1bHQgdikpKSldXHJcbiAgICAgICAocmYgcmVzdWx0KSkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtwdmFsIEBwYSB2YWwgKGYgaW5wdXQpXVxyXG4gICAgICAgKHZyZXNldCEgcGEgdmFsKVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKG9yIChrZXl3b3JkLWlkZW50aWNhbD8gcHZhbCA6Y2xqcy5jb3JlL25vbmUpICg9IHZhbCBwdmFsKSlcclxuICAgICAgICAoZG8gKC5hZGQgYSBpbnB1dCkgcmVzdWx0KVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3YgKHZlYyAoLnRvQXJyYXkgYSkpXVxyXG4gICAgICAgICAoLmNsZWFyIGEpXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtyZXQgKHJmIHJlc3VsdCB2KV1cclxuICAgICAgICAgICh3aGVuLW5vdCAocmVkdWNlZD8gcmV0KSAoLmFkZCBhIGlucHV0KSlcclxuICAgICAgICAgIHJldCkpKSkpKSkpKVxyXG4gKFtmIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChsZXRcclxuICAgICBbZnN0XHJcbiAgICAgIChmaXJzdCBzKVxyXG4gICAgICBmdlxyXG4gICAgICAoZiBmc3QpXHJcbiAgICAgIHJ1blxyXG4gICAgICAoY29uc1xyXG4gICAgICAgZnN0XHJcbiAgICAgICAodGFrZS13aGlsZSAoZm4qIFtwMV9fNDg4MzgjXSAoPSBmdiAoZiBwMV9fNDg4MzgjKSkpIChuZXh0IHMpKSldXHJcbiAgICAgKGNvbnMgcnVuIChwYXJ0aXRpb24tYnkgZiAobGF6eS1zZXEgKGRyb3AgKGNvdW50IHJ1bikgcykpKSkpKSkpKVxyXG4ifSB7OnN5bSBJU2VxdWVudGlhbCwgOm1ldGEgezpkb2MgIk1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyBhIHBlcnNpc3RlbnQgY29sbGVjdGlvbiBvZiBzZXF1ZW50aWFsIGl0ZW1zIn0sIDptZXRob2RzICgpfSB7OnN5bSBlcXVpdi1tYXAsIDptZXRhIHs6ZG9jICJUZXN0IG1hcCBlcXVpdmFsZW5jZS4gUmV0dXJucyB0cnVlIGlmIHggZXF1YWxzIHksIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLiIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVxdWl2LW1hcFxyXG4gXCJUZXN0IG1hcCBlcXVpdmFsZW5jZS4gUmV0dXJucyB0cnVlIGlmIHggZXF1YWxzIHksIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlwiXHJcbiBbeCB5XVxyXG4gKGJvb2xlYW5cclxuICAod2hlblxyXG4gICAoYW5kIChtYXA/IHkpIChub3QgKHJlY29yZD8geSkpKVxyXG4gICAod2hlblxyXG4gICAgKD09IChjb3VudCB4KSAoY291bnQgeSkpXHJcbiAgICAoaWZcclxuICAgICAoc2F0aXNmaWVzPyBJS1ZSZWR1Y2UgeClcclxuICAgICAocmVkdWNlLWt2XHJcbiAgICAgIChmblxyXG4gICAgICAgW18gayB2XVxyXG4gICAgICAgKGlmICg9IChnZXQgeSBrIG5ldmVyLWVxdWl2KSB2KSB0cnVlIChyZWR1Y2VkIGZhbHNlKSkpXHJcbiAgICAgIHRydWVcclxuICAgICAgeClcclxuICAgICAoZXZlcnk/XHJcbiAgICAgIChmbiBbeGt2XSAoPSAoZ2V0IHkgKGZpcnN0IHhrdikgbmV2ZXItZXF1aXYpIChzZWNvbmQgeGt2KSkpXHJcbiAgICAgIHgpKSkpKSlcclxuIn0gezpzeW0gb2JqZWN0LWFycmF5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBhcnJheSBvZiBvYmplY3RzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XG4gIHdpdGggQ2xvanVyZS4iLCA6YXJnbGlzdHMgW1tzaXplLW9yLXNlcV0gW3NpemUgaW5pdC12YWwtb3Itc2VxXV19LCA6c291cmNlICIoZGVmblxyXG4gb2JqZWN0LWFycmF5XHJcbiBcIkNyZWF0ZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxcbiAgd2l0aCBDbG9qdXJlLlwiXHJcbiAoW3NpemUtb3Itc2VxXVxyXG4gIChpZlxyXG4gICAobnVtYmVyPyBzaXplLW9yLXNlcSlcclxuICAgKG9iamVjdC1hcnJheSBzaXplLW9yLXNlcSBuaWwpXHJcbiAgIChpbnRvLWFycmF5IHNpemUtb3Itc2VxKSkpXHJcbiAoW3NpemUgaW5pdC12YWwtb3Itc2VxXVxyXG4gIChsZXRcclxuICAgW2EgKG1ha2UtYXJyYXkgc2l6ZSldXHJcbiAgIChpZlxyXG4gICAgKHNlcT8gaW5pdC12YWwtb3Itc2VxKVxyXG4gICAgKGxldFxyXG4gICAgIFtzIChzZXEgaW5pdC12YWwtb3Itc2VxKV1cclxuICAgICAobG9vcFxyXG4gICAgICBbaSAwIHMgc11cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIHMgKDwgaSBzaXplKSlcclxuICAgICAgIChkbyAoYXNldCBhIGkgKGZpcnN0IHMpKSAocmVjdXIgKGluYyBpKSAobmV4dCBzKSkpXHJcbiAgICAgICBhKSkpXHJcbiAgICAoZG8gKGRvdGltZXMgW2kgc2l6ZV0gKGFzZXQgYSBpIGluaXQtdmFsLW9yLXNlcSkpIGEpKSkpKVxyXG4ifSB7OnN5bSBkZXJpdmUsIDptZXRhIHs6ZG9jICJFc3RhYmxpc2hlcyBhIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYXJlbnQgYW5kXG4gIHRhZy4gUGFyZW50IG11c3QgYmUgYSBuYW1lc3BhY2UtcXVhbGlmaWVkIHN5bWJvbCBvciBrZXl3b3JkIGFuZFxuICBjaGlsZCBjYW4gYmUgZWl0aGVyIGEgbmFtZXNwYWNlLXF1YWxpZmllZCBzeW1ib2wgb3Iga2V5d29yZCBvciBhXG4gIGNsYXNzLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90XG4gIHN1cHBsaWVkIGRlZmF1bHRzIHRvLCBhbmQgbW9kaWZpZXMsIHRoZSBnbG9iYWwgaGllcmFyY2h5LiIsIDphcmdsaXN0cyBbW3RhZyBwYXJlbnRdIFtoIHRhZyBwYXJlbnRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXJpdmVcclxuIFwiRXN0YWJsaXNoZXMgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFyZW50IGFuZFxcbiAgdGFnLiBQYXJlbnQgbXVzdCBiZSBhIG5hbWVzcGFjZS1xdWFsaWZpZWQgc3ltYm9sIG9yIGtleXdvcmQgYW5kXFxuICBjaGlsZCBjYW4gYmUgZWl0aGVyIGEgbmFtZXNwYWNlLXF1YWxpZmllZCBzeW1ib2wgb3Iga2V5d29yZCBvciBhXFxuICBjbGFzcy4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdFxcbiAgc3VwcGxpZWQgZGVmYXVsdHMgdG8sIGFuZCBtb2RpZmllcywgdGhlIGdsb2JhbCBoaWVyYXJjaHkuXCJcclxuIChbdGFnIHBhcmVudF1cclxuICAoYXNzZXJ0IChuYW1lc3BhY2UgcGFyZW50KSlcclxuICAoc3dhcC1nbG9iYWwtaGllcmFyY2h5ISBkZXJpdmUgdGFnIHBhcmVudClcclxuICBuaWwpXHJcbiAoW2ggdGFnIHBhcmVudF1cclxuICAoYXNzZXJ0IChub3Q9IHRhZyBwYXJlbnQpKVxyXG4gIChsZXRcclxuICAgW3RwXHJcbiAgICAoOnBhcmVudHMgaClcclxuICAgIHRkXHJcbiAgICAoOmRlc2NlbmRhbnRzIGgpXHJcbiAgICB0YVxyXG4gICAgKDphbmNlc3RvcnMgaClcclxuICAgIHRmXHJcbiAgICAoZm5cclxuICAgICBbbSBzb3VyY2Ugc291cmNlcyB0YXJnZXQgdGFyZ2V0c11cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmblxyXG4gICAgICAgW3JldCBrXVxyXG4gICAgICAgKGFzc29jXHJcbiAgICAgICAgcmV0XHJcbiAgICAgICAga1xyXG4gICAgICAgIChyZWR1Y2VcclxuICAgICAgICAgY29ualxyXG4gICAgICAgICAoZ2V0IHRhcmdldHMgayAje30pXHJcbiAgICAgICAgIChjb25zIHRhcmdldCAodGFyZ2V0cyB0YXJnZXQpKSkpKVxyXG4gICAgICBtXHJcbiAgICAgIChjb25zIHNvdXJjZSAoc291cmNlcyBzb3VyY2UpKSkpXVxyXG4gICAob3JcclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChjb250YWlucz8gKHRwIHRhZykgcGFyZW50KVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChjb250YWlucz8gKHRhIHRhZykgcGFyZW50KVxyXG4gICAgICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIHRhZyBcImFscmVhZHkgaGFzXCIgcGFyZW50IFwiYXMgYW5jZXN0b3JcIikpKSlcclxuICAgICAod2hlblxyXG4gICAgICAoY29udGFpbnM/ICh0YSBwYXJlbnQpIHRhZylcclxuICAgICAgKHRocm93XHJcbiAgICAgICAoanMvRXJyb3IuXHJcbiAgICAgICAgKHN0ciBcIkN5Y2xpYyBkZXJpdmF0aW9uOlwiIHBhcmVudCBcImhhc1wiIHRhZyBcImFzIGFuY2VzdG9yXCIpKSkpXHJcbiAgICAgezpwYXJlbnRzIChhc3NvYyAoOnBhcmVudHMgaCkgdGFnIChjb25qIChnZXQgdHAgdGFnICN7fSkgcGFyZW50KSksXHJcbiAgICAgIDphbmNlc3RvcnMgKHRmICg6YW5jZXN0b3JzIGgpIHRhZyB0ZCBwYXJlbnQgdGEpLFxyXG4gICAgICA6ZGVzY2VuZGFudHMgKHRmICg6ZGVzY2VuZGFudHMgaCkgcGFyZW50IHRhIHRhZyB0ZCl9KVxyXG4gICAgaCkpKSlcclxuIn0gezpzeW0gc2VxLWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gc2VxLWl0ZXIgW2NvbGxdIChTZXFJdGVyLiBJTklUIGNvbGwpKVxyXG4ifSB7OnN5bSBJQ2h1bmtlZFNlcSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhY2Nlc3NpbmcgYSBjb2xsZWN0aW9uIGFzIHNlcXVlbnRpYWwgY2h1bmtzLiJ9LCA6bWV0aG9kcyAoLWNodW5rZWQtZmlyc3QgLWNodW5rZWQtcmVzdCl9IHs6c3ltIHNwZWNpYWwtc3ltYm9sPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IG5hbWVzIGEgc3BlY2lhbCBmb3JtIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwZWNpYWwtc3ltYm9sP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBuYW1lcyBhIHNwZWNpYWwgZm9ybVwiXHJcbiBbeF1cclxuIChjb250YWlucz9cclxuICAnI3smIGNhc2UqIGRlZnJlY29yZCogdHJ5IG5zKiBmaW5hbGx5IGxvb3AqIGRvIGxldGZuKiBpZiBuZXcgbnNcclxuICAgICBkZWZ0eXBlKiBsZXQqIGpzKiBmbiogcmVjdXIgc2V0ISAuIHZhciBxdW90ZSBjYXRjaCB0aHJvdyBkZWZ9XHJcbiAgeCkpXHJcbiJ9IHs6c3ltIGFuY2VzdG9ycywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGltbWVkaWF0ZSBhbmQgaW5kaXJlY3QgcGFyZW50cyBvZiB0YWcsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGVcbiAgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGEgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGhcbiAgbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWRcbiAgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCBoaWVyYXJjaHkiLCA6YXJnbGlzdHMgW1t0YWddIFtoIHRhZ11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuY2VzdG9yc1xyXG4gXCJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgYW5kIGluZGlyZWN0IHBhcmVudHMgb2YgdGFnLCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlXFxuICBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYSByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaFxcbiAgbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWRcXG4gIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgaGllcmFyY2h5XCJcclxuIChbdGFnXSAoYW5jZXN0b3JzIEAoZ2V0LWdsb2JhbC1oaWVyYXJjaHkpIHRhZykpXHJcbiAoW2ggdGFnXSAobm90LWVtcHR5IChnZXQgKDphbmNlc3RvcnMgaCkgdGFnKSkpKVxyXG4ifSB7OnN5bSBzdWJzZXEsIDptZXRhIHs6ZG9jICJzYyBtdXN0IGJlIGEgc29ydGVkIGNvbGxlY3Rpb24sIHRlc3Qocykgb25lIG9mIDwsIDw9LCA+IG9yXG4gID49LiBSZXR1cm5zIGEgc2VxIG9mIHRob3NlIGVudHJpZXMgd2l0aCBrZXlzIGVrIGZvclxuICB3aGljaCAodGVzdCAoLi4gc2MgY29tcGFyYXRvciAoY29tcGFyZSBlayBrZXkpKSAwKSBpcyB0cnVlIiwgOmFyZ2xpc3RzIFtbc2MgdGVzdCBrZXldIFtzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSBlbmQtdGVzdCBlbmQta2V5XV19LCA6c291cmNlICIoZGVmblxyXG4gc3Vic2VxXHJcbiBcInNjIG11c3QgYmUgYSBzb3J0ZWQgY29sbGVjdGlvbiwgdGVzdChzKSBvbmUgb2YgPCwgPD0sID4gb3JcXG4gID49LiBSZXR1cm5zIGEgc2VxIG9mIHRob3NlIGVudHJpZXMgd2l0aCBrZXlzIGVrIGZvclxcbiAgd2hpY2ggKHRlc3QgKC4uIHNjIGNvbXBhcmF0b3IgKGNvbXBhcmUgZWsga2V5KSkgMCkgaXMgdHJ1ZVwiXHJcbiAoW3NjIHRlc3Qga2V5XVxyXG4gIChsZXRcclxuICAgW2luY2x1ZGUgKG1rLWJvdW5kLWZuIHNjIHRlc3Qga2V5KV1cclxuICAgKGlmXHJcbiAgICAoI3s+ID49fSB0ZXN0KVxyXG4gICAgKHdoZW4tbGV0XHJcbiAgICAgW1tlIDphcyBzXSAoLXNvcnRlZC1zZXEtZnJvbSBzYyBrZXkgdHJ1ZSldXHJcbiAgICAgKGlmIChpbmNsdWRlIGUpIHMgKG5leHQgcykpKVxyXG4gICAgKHRha2Utd2hpbGUgaW5jbHVkZSAoLXNvcnRlZC1zZXEgc2MgdHJ1ZSkpKSkpXHJcbiAoW3NjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5IGVuZC10ZXN0IGVuZC1rZXldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtbZSA6YXMgc10gKC1zb3J0ZWQtc2VxLWZyb20gc2Mgc3RhcnQta2V5IHRydWUpXVxyXG4gICAodGFrZS13aGlsZVxyXG4gICAgKG1rLWJvdW5kLWZuIHNjIGVuZC10ZXN0IGVuZC1rZXkpXHJcbiAgICAoaWYgKChtay1ib3VuZC1mbiBzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSkgZSkgcyAobmV4dCBzKSkpKSkpXHJcbiJ9IHs6c3ltIGdlbnN5bSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgc3ltYm9sIHdpdGggYSB1bmlxdWUgbmFtZS4gSWYgYSBwcmVmaXggc3RyaW5nIGlzXG4gIHN1cHBsaWVkLCB0aGUgbmFtZSBpcyBwcmVmaXgjIHdoZXJlICMgaXMgc29tZSB1bmlxdWUgbnVtYmVyLiBJZlxuICBwcmVmaXggaXMgbm90IHN1cHBsaWVkLCB0aGUgcHJlZml4IGlzICdHX18nLiIsIDphcmdsaXN0cyBbW10gW3ByZWZpeC1zdHJpbmddXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZW5zeW1cclxuIFwiUmV0dXJucyBhIG5ldyBzeW1ib2wgd2l0aCBhIHVuaXF1ZSBuYW1lLiBJZiBhIHByZWZpeCBzdHJpbmcgaXNcXG4gIHN1cHBsaWVkLCB0aGUgbmFtZSBpcyBwcmVmaXgjIHdoZXJlICMgaXMgc29tZSB1bmlxdWUgbnVtYmVyLiBJZlxcbiAgcHJlZml4IGlzIG5vdCBzdXBwbGllZCwgdGhlIHByZWZpeCBpcyAnR19fJy5cIlxyXG4gKFtdIChnZW5zeW0gXCJHX19cIikpXHJcbiAoW3ByZWZpeC1zdHJpbmddXHJcbiAgKHdoZW4gKG5pbD8gZ2Vuc3ltX2NvdW50ZXIpIChzZXQhIGdlbnN5bV9jb3VudGVyIChhdG9tIDApKSlcclxuICAoc3ltYm9sIChzdHIgcHJlZml4LXN0cmluZyAoc3dhcCEgZ2Vuc3ltX2NvdW50ZXIgaW5jKSkpKSlcclxuIn0gezpzeW0gLW5leHQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRob3V0IHRoZSBmaXJzdCBpdGVtLiBJbiBjb250cmFzdCB0b1xuICAgICByZXN0LCBpdCBzaG91bGQgcmV0dXJuIG5pbCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcywgZS5nLlxuICAgICAobmV4dCBbXSkgPT4gbmlsXG4gICAgIChuZXh0IG5pbCkgPT4gbmlsIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElOZXh0fSB7OnN5bSBkZWxheT8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRydWUgaWYgeCBpcyBhIERlbGF5IGNyZWF0ZWQgd2l0aCBkZWxheSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWxheT9cclxuIFwicmV0dXJucyB0cnVlIGlmIHggaXMgYSBEZWxheSBjcmVhdGVkIHdpdGggZGVsYXlcIlxyXG4gW3hdXHJcbiAoaW5zdGFuY2U/IERlbGF5IHgpKVxyXG4ifSB7OnN5bSBmbGF0dGVuLCA6bWV0YSB7OmRvYyAiVGFrZXMgYW55IG5lc3RlZCBjb21iaW5hdGlvbiBvZiBzZXF1ZW50aWFsIHRoaW5ncyAobGlzdHMsIHZlY3RvcnMsXG4gIGV0Yy4pIGFuZCByZXR1cm5zIHRoZWlyIGNvbnRlbnRzIGFzIGEgc2luZ2xlLCBmbGF0IHNlcXVlbmNlLlxuICAoZmxhdHRlbiBuaWwpIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbGF0dGVuXHJcbiBcIlRha2VzIGFueSBuZXN0ZWQgY29tYmluYXRpb24gb2Ygc2VxdWVudGlhbCB0aGluZ3MgKGxpc3RzLCB2ZWN0b3JzLFxcbiAgZXRjLikgYW5kIHJldHVybnMgdGhlaXIgY29udGVudHMgYXMgYSBzaW5nbGUsIGZsYXQgc2VxdWVuY2UuXFxuICAoZmxhdHRlbiBuaWwpIHJldHVybnMgbmlsLlwiXHJcbiBbeF1cclxuIChmaWx0ZXJcclxuICAoZm4qIFtwMV9fNDg4MjQjXSAobm90IChzZXF1ZW50aWFsPyBwMV9fNDg4MjQjKSkpXHJcbiAgKHJlc3QgKHRyZWUtc2VxIHNlcXVlbnRpYWw/IHNlcSB4KSkpKVxyXG4ifSB7OnN5bSAtZGlzc29jLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aG91dCB0aGUgbWFwcGluZyBmb3Iga2V5IGsuIiwgOmFyZ2xpc3RzIChbY29sbCBrXSl9LCA6cHJvdG9jb2wgSU1hcH0gezpzeW0gZG91YmxlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBkb3VibGVzIFt4XSB4KVxyXG4ifSB7OnN5bSBoYWx0LXdoZW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IGVuZHMgdHJhbnNkdWN0aW9uIHdoZW4gcHJlZCByZXR1cm5zIHRydWVcbiAgZm9yIGFuIGlucHV0LiBXaGVuIHJldGYgaXMgc3VwcGxpZWQgaXQgbXVzdCBiZSBhIGZuIG9mIDIgYXJndW1lbnRzIC1cbiAgaXQgd2lsbCBiZSBwYXNzZWQgdGhlIChjb21wbGV0ZWQpIHJlc3VsdCBzbyBmYXIgYW5kIHRoZSBpbnB1dCB0aGF0XG4gIHRyaWdnZXJlZCB0aGUgcHJlZGljYXRlLCBhbmQgaXRzIHJldHVybiB2YWx1ZSAoaWYgaXQgZG9lcyBub3QgdGhyb3dcbiAgYW4gZXhjZXB0aW9uKSB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRyYW5zZHVjZXIuIElmIHJldGZcbiAgaXMgbm90IHN1cHBsaWVkLCB0aGUgaW5wdXQgdGhhdCB0cmlnZ2VyZWQgdGhlIHByZWRpY2F0ZSB3aWxsIGJlXG4gIHJldHVybmVkLiBJZiB0aGUgcHJlZGljYXRlIG5ldmVyIHJldHVybnMgdHJ1ZSB0aGUgdHJhbnNkdWN0aW9uIGlzXG4gIHVuYWZmZWN0ZWQuIiwgOmFyZ2xpc3RzIFtbcHJlZF0gW3ByZWQgcmV0Zl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhbHQtd2hlblxyXG4gXCJSZXR1cm5zIGEgdHJhbnNkdWNlciB0aGF0IGVuZHMgdHJhbnNkdWN0aW9uIHdoZW4gcHJlZCByZXR1cm5zIHRydWVcXG4gIGZvciBhbiBpbnB1dC4gV2hlbiByZXRmIGlzIHN1cHBsaWVkIGl0IG11c3QgYmUgYSBmbiBvZiAyIGFyZ3VtZW50cyAtXFxuICBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgKGNvbXBsZXRlZCkgcmVzdWx0IHNvIGZhciBhbmQgdGhlIGlucHV0IHRoYXRcXG4gIHRyaWdnZXJlZCB0aGUgcHJlZGljYXRlLCBhbmQgaXRzIHJldHVybiB2YWx1ZSAoaWYgaXQgZG9lcyBub3QgdGhyb3dcXG4gIGFuIGV4Y2VwdGlvbikgd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB0cmFuc2R1Y2VyLiBJZiByZXRmXFxuICBpcyBub3Qgc3VwcGxpZWQsIHRoZSBpbnB1dCB0aGF0IHRyaWdnZXJlZCB0aGUgcHJlZGljYXRlIHdpbGwgYmVcXG4gIHJldHVybmVkLiBJZiB0aGUgcHJlZGljYXRlIG5ldmVyIHJldHVybnMgdHJ1ZSB0aGUgdHJhbnNkdWN0aW9uIGlzXFxuICB1bmFmZmVjdGVkLlwiXHJcbiB7OmFkZGVkIFwiMS45XCJ9XHJcbiAoW3ByZWRdIChoYWx0LXdoZW4gcHJlZCBuaWwpKVxyXG4gKFtwcmVkIHJldGZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGZuXHJcbiAgICAoW10gKHJmKSlcclxuICAgIChbcmVzdWx0XVxyXG4gICAgIChpZlxyXG4gICAgICAoYW5kIChtYXA/IHJlc3VsdCkgKGNvbnRhaW5zPyByZXN1bHQgOmNsanMuY29yZS9oYWx0KSlcclxuICAgICAgKDpjbGpzLmNvcmUvaGFsdCByZXN1bHQpXHJcbiAgICAgIChyZiByZXN1bHQpKSlcclxuICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgIChpZlxyXG4gICAgICAocHJlZCBpbnB1dClcclxuICAgICAgKHJlZHVjZWRcclxuICAgICAgIHs6Y2xqcy5jb3JlL2hhbHQgKGlmIHJldGYgKHJldGYgKHJmIHJlc3VsdCkgaW5wdXQpIGlucHV0KX0pXHJcbiAgICAgIChyZiByZXN1bHQgaW5wdXQpKSkpKSkpXHJcbiJ9IHs6c3ltIC1jb250YWlucy1rZXk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGsgaXMgYSBrZXkgaW4gY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsIGtdKX0sIDpwcm90b2NvbCBJQXNzb2NpYXRpdmV9IHs6c3ltIHJlbW92ZS13YXRjaCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgYSB3YXRjaCAoc2V0IGJ5IGFkZC13YXRjaCkgZnJvbSBhIHJlZmVyZW5jZSIsIDphcmdsaXN0cyAoW2lyZWYga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlLXdhdGNoXHJcbiBcIlJlbW92ZXMgYSB3YXRjaCAoc2V0IGJ5IGFkZC13YXRjaCkgZnJvbSBhIHJlZmVyZW5jZVwiXHJcbiBbaXJlZiBrZXldXHJcbiAoLXJlbW92ZS13YXRjaCBpcmVmIGtleSlcclxuIGlyZWYpXHJcbiJ9IHs6c3ltIGV4LWluZm8sIDptZXRhIHs6ZG9jICJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgRXhjZXB0aW9uSW5mbywgYW4gRXJyb3IgdHlwZSB0aGF0IGNhcnJpZXMgYVxuICBtYXAgb2YgYWRkaXRpb25hbCBkYXRhLiIsIDphcmdsaXN0cyBbW21zZyBkYXRhXSBbbXNnIGRhdGEgY2F1c2VdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleC1pbmZvXHJcbiBcIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBFeGNlcHRpb25JbmZvLCBhbiBFcnJvciB0eXBlIHRoYXQgY2FycmllcyBhXFxuICBtYXAgb2YgYWRkaXRpb25hbCBkYXRhLlwiXHJcbiAoW21zZyBkYXRhXSAoZXgtaW5mbyBtc2cgZGF0YSBuaWwpKVxyXG4gKFttc2cgZGF0YSBjYXVzZV0gKEV4Y2VwdGlvbkluZm8uIG1zZyBkYXRhIGNhdXNlKSkpXHJcbiJ9IHs6c3ltIGlmbj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgZiByZXR1cm5zIHRydWUgZm9yIGZuPyBvciBzYXRpc2ZpZXMgSUZuLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpZm4/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBmIHJldHVybnMgdHJ1ZSBmb3IgZm4/IG9yIHNhdGlzZmllcyBJRm4uXCJcclxuIFtmXVxyXG4gKG9yIChmbj8gZikgKHNhdGlzZmllcz8gSUZuIGYpKSlcclxuIn0gezpzeW0gSUF0b20sIDptZXRhIHs6ZG9jICJNYXJrZXIgcHJvdG9jb2wgaW5kaWNhdGluZyBhbiBhdG9tLiJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gbmF0LWludD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBhIG5hdHVyYWwgaW50ZWdlciB2YWx1ZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmF0LWludD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgYSBuYXR1cmFsIGludGVnZXIgdmFsdWUuXCJcclxuIFt4XVxyXG4gKGNvbmRcclxuICAoaW50ZWdlcj8geClcclxuICAobm90IChuZWc/IHgpKVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkludGVnZXIgeClcclxuICAobm90ICguaXNOZWdhdGl2ZSB4KSlcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5Mb25nIHgpXHJcbiAgKG5vdCAoLmlzTmVnYXRpdmUgeCkpXHJcbiAgOmVsc2VcclxuICBmYWxzZSkpXHJcbiJ9IHs6c3ltIElXYXRjaGFibGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgdHlwZXMgdGhhdCBjYW4gYmUgd2F0Y2hlZC4gQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgYnkgQXRvbS4ifSwgOm1ldGhvZHMgKC1hZGQtd2F0Y2ggLW5vdGlmeS13YXRjaGVzIC1yZW1vdmUtd2F0Y2gpfSB7OnN5bSBzdWJ2ZWMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcGVyc2lzdGVudCB2ZWN0b3Igb2YgdGhlIGl0ZW1zIGluIHZlY3RvciBmcm9tXG4gIHN0YXJ0IChpbmNsdXNpdmUpIHRvIGVuZCAoZXhjbHVzaXZlKS4gIElmIGVuZCBpcyBub3Qgc3VwcGxpZWQsXG4gIGRlZmF1bHRzIHRvIChjb3VudCB2ZWN0b3IpLiBUaGlzIG9wZXJhdGlvbiBpcyBPKDEpIGFuZCB2ZXJ5IGZhc3QsIGFzXG4gIHRoZSByZXN1bHRpbmcgdmVjdG9yIHNoYXJlcyBzdHJ1Y3R1cmUgd2l0aCB0aGUgb3JpZ2luYWwgYW5kIG5vXG4gIHRyaW1taW5nIGlzIGRvbmUuIiwgOmFyZ2xpc3RzIFtbdiBzdGFydF0gW3Ygc3RhcnQgZW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gc3VidmVjXHJcbiBcIlJldHVybnMgYSBwZXJzaXN0ZW50IHZlY3RvciBvZiB0aGUgaXRlbXMgaW4gdmVjdG9yIGZyb21cXG4gIHN0YXJ0IChpbmNsdXNpdmUpIHRvIGVuZCAoZXhjbHVzaXZlKS4gIElmIGVuZCBpcyBub3Qgc3VwcGxpZWQsXFxuICBkZWZhdWx0cyB0byAoY291bnQgdmVjdG9yKS4gVGhpcyBvcGVyYXRpb24gaXMgTygxKSBhbmQgdmVyeSBmYXN0LCBhc1xcbiAgdGhlIHJlc3VsdGluZyB2ZWN0b3Igc2hhcmVzIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBhbmQgbm9cXG4gIHRyaW1taW5nIGlzIGRvbmUuXCJcclxuIChbdiBzdGFydF0gKHN1YnZlYyB2IHN0YXJ0IChjb3VudCB2KSkpXHJcbiAoW3Ygc3RhcnQgZW5kXVxyXG4gIChhc3NlcnQgKGFuZCAobm90IChuaWw/IHN0YXJ0KSkgKG5vdCAobmlsPyBlbmQpKSkpXHJcbiAgKGJ1aWxkLXN1YnZlYyBuaWwgdiAoaW50IHN0YXJ0KSAoaW50IGVuZCkgbmlsKSkpXHJcbiJ9IHs6c3ltIC1wb3AhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0Y29sbCB3aXRoIHRoZSBsYXN0IGl0ZW0gcmVtb3ZlZCBmcm9tIGl0LiIsIDphcmdsaXN0cyAoW3Rjb2xsXSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudFZlY3Rvcn0gezpzeW0gcGFydGlhbCwgOm1ldGEgezpkb2MgIlRha2VzIGEgZnVuY3Rpb24gZiBhbmQgZmV3ZXIgdGhhbiB0aGUgbm9ybWFsIGFyZ3VtZW50cyB0byBmLCBhbmRcbiAgcmV0dXJucyBhIGZuIHRoYXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYWRkaXRpb25hbCBhcmdzLiBXaGVuXG4gIGNhbGxlZCwgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGNhbGxzIGYgd2l0aCBhcmdzICsgYWRkaXRpb25hbCBhcmdzLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGFyZzFdIFtmIGFyZzEgYXJnMl0gW2YgYXJnMSBhcmcyIGFyZzNdIFtmIGFyZzEgYXJnMiBhcmczICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpYWxcclxuIFwiVGFrZXMgYSBmdW5jdGlvbiBmIGFuZCBmZXdlciB0aGFuIHRoZSBub3JtYWwgYXJndW1lbnRzIHRvIGYsIGFuZFxcbiAgcmV0dXJucyBhIGZuIHRoYXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYWRkaXRpb25hbCBhcmdzLiBXaGVuXFxuICBjYWxsZWQsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBjYWxscyBmIHdpdGggYXJncyArIGFkZGl0aW9uYWwgYXJncy5cIlxyXG4gKFtmXSBmKVxyXG4gKFtmIGFyZzFdXHJcbiAgKGZuXHJcbiAgIChbXSAoZiBhcmcxKSlcclxuICAgKFt4XSAoZiBhcmcxIHgpKVxyXG4gICAoW3ggeV0gKGYgYXJnMSB4IHkpKVxyXG4gICAoW3ggeSB6XSAoZiBhcmcxIHggeSB6KSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChhcHBseSBmIGFyZzEgeCB5IHogYXJncykpKSlcclxuIChbZiBhcmcxIGFyZzJdXHJcbiAgKGZuXHJcbiAgIChbXSAoZiBhcmcxIGFyZzIpKVxyXG4gICAoW3hdIChmIGFyZzEgYXJnMiB4KSlcclxuICAgKFt4IHldIChmIGFyZzEgYXJnMiB4IHkpKVxyXG4gICAoW3ggeSB6XSAoZiBhcmcxIGFyZzIgeCB5IHopKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGFwcGx5IGYgYXJnMSBhcmcyIHggeSB6IGFyZ3MpKSkpXHJcbiAoW2YgYXJnMSBhcmcyIGFyZzNdXHJcbiAgKGZuXHJcbiAgIChbXSAoZiBhcmcxIGFyZzIgYXJnMykpXHJcbiAgIChbeF0gKGYgYXJnMSBhcmcyIGFyZzMgeCkpXHJcbiAgIChbeCB5XSAoZiBhcmcxIGFyZzIgYXJnMyB4IHkpKVxyXG4gICAoW3ggeSB6XSAoZiBhcmcxIGFyZzIgYXJnMyB4IHkgeikpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoYXBwbHkgZiBhcmcxIGFyZzIgYXJnMyB4IHkgeiBhcmdzKSkpKVxyXG4gKFtmIGFyZzEgYXJnMiBhcmczICYgbW9yZV1cclxuICAoZm4gWyYgYXJnc10gKGFwcGx5IGYgYXJnMSBhcmcyIGFyZzMgKGNvbmNhdCBtb3JlIGFyZ3MpKSkpKVxyXG4ifSB7OnN5bSBjaHVua2VkLXNlcT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJQ2h1bmtlZFNlcS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2h1bmtlZC1zZXE/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElDaHVua2VkU2VxLlwiXHJcbiBbeF1cclxuIChpbXBsZW1lbnRzPyBJQ2h1bmtlZFNlcSB4KSlcclxuIn0gezpzeW0gcmVwbGljYXRlLCA6bWV0YSB7OmRvYyAiREVQUkVDQVRFRDogVXNlICdyZXBlYXQnIGluc3RlYWQuXG4gIFJldHVybnMgYSBsYXp5IHNlcSBvZiBuIHhzLiIsIDphcmdsaXN0cyAoW24geF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGxpY2F0ZVxyXG4gXCJERVBSRUNBVEVEOiBVc2UgJ3JlcGVhdCcgaW5zdGVhZC5cXG4gIFJldHVybnMgYSBsYXp5IHNlcSBvZiBuIHhzLlwiXHJcbiBbbiB4XVxyXG4gKHRha2UgbiAocmVwZWF0IHgpKSlcclxuIn0gezpzeW0gbWluLWtleSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHggZm9yIHdoaWNoIChrIHgpLCBhIG51bWJlciwgaXMgbGVhc3QuXG5cbiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggeHMsIHRoZSBsYXN0IG9uZSBpcyByZXR1cm5lZC4iLCA6YXJnbGlzdHMgW1trIHhdIFtrIHggeV0gW2sgeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pbi1rZXlcclxuIFwiUmV0dXJucyB0aGUgeCBmb3Igd2hpY2ggKGsgeCksIGEgbnVtYmVyLCBpcyBsZWFzdC5cXG5cXG4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWNoIHhzLCB0aGUgbGFzdCBvbmUgaXMgcmV0dXJuZWQuXCJcclxuIChbayB4XSB4KVxyXG4gKFtrIHggeV0gKGlmICg8IChrIHgpIChrIHkpKSB4IHkpKVxyXG4gKFtrIHggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4qIFtwMV9fNDg4MzYjIHAyX180ODgzNyNdIChtaW4ta2V5IGsgcDFfXzQ4ODM2IyBwMl9fNDg4MzcjKSlcclxuICAgKG1pbi1rZXkgayB4IHkpXHJcbiAgIG1vcmUpKSlcclxuIn0gezpzeW0gcmVkdWNlZCwgOm1ldGEgezpkb2MgIldyYXBzIHggaW4gYSB3YXkgc3VjaCB0aGF0IGEgcmVkdWNlIHdpbGwgdGVybWluYXRlIHdpdGggdGhlIHZhbHVlIHgiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlZFxyXG4gXCJXcmFwcyB4IGluIGEgd2F5IHN1Y2ggdGhhdCBhIHJlZHVjZSB3aWxsIHRlcm1pbmF0ZSB3aXRoIHRoZSB2YWx1ZSB4XCJcclxuIFt4XVxyXG4gKFJlZHVjZWQuIHgpKVxyXG4ifSB7OnN5bSByZS1tYXRjaGVzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcmVzdWx0IG9mIChyZS1maW5kIHJlIHMpIGlmIHJlIGZ1bGx5IG1hdGNoZXMgcy4iLCA6YXJnbGlzdHMgKFtyZSBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmUtbWF0Y2hlc1xyXG4gXCJSZXR1cm5zIHRoZSByZXN1bHQgb2YgKHJlLWZpbmQgcmUgcykgaWYgcmUgZnVsbHkgbWF0Y2hlcyBzLlwiXHJcbiBbcmUgc11cclxuIChpZlxyXG4gIChzdHJpbmc/IHMpXHJcbiAgKGxldFxyXG4gICBbbWF0Y2hlcyAoLmV4ZWMgcmUgcyldXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kIChub3QgKG5pbD8gbWF0Y2hlcykpICg9IChhZ2V0IG1hdGNoZXMgMCkgcykpXHJcbiAgICAoaWYgKD09IChjb3VudCBtYXRjaGVzKSAxKSAoYWdldCBtYXRjaGVzIDApICh2ZWMgbWF0Y2hlcykpKSlcclxuICAodGhyb3cgKGpzL1R5cGVFcnJvci4gXCJyZS1tYXRjaGVzIG11c3QgbWF0Y2ggYWdhaW5zdCBhIHN0cmluZy5cIikpKSlcclxuIn0gezpzeW0gYXJyYXktbWFwLCA6bWV0YSB7OmRvYyAia2V5dmFsID0+IGtleSB2YWxcbiAgUmV0dXJucyBhIG5ldyBhcnJheSBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy4iLCA6YXJnbGlzdHMgKFsmIGtleXZhbHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheS1tYXBcclxuIFwia2V5dmFsID0+IGtleSB2YWxcXG4gIFJldHVybnMgYSBuZXcgYXJyYXkgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuXCJcclxuIFsmIGtleXZhbHNdXHJcbiAobGV0XHJcbiAgW2FyclxyXG4gICAoaWZcclxuICAgIChhbmQgKGluc3RhbmNlPyBJbmRleGVkU2VxIGtleXZhbHMpICh6ZXJvPyAoLi1pIGtleXZhbHMpKSlcclxuICAgICguLWFyciBrZXl2YWxzKVxyXG4gICAgKGludG8tYXJyYXkga2V5dmFscykpXVxyXG4gICguY3JlYXRlQXNJZkJ5QXNzb2MgUGVyc2lzdGVudEFycmF5TWFwIGFycikpKVxyXG4ifSB7OnN5bSBJVHJhbnNpZW50U2V0LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBzZXQgZnVuY3Rpb25hbGl0eSB0byBhIHRyYW5zaWVudCBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWRpc2pvaW4hKX0gezpzeW0gdW5jaGVja2VkLWJ5dGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWJ5dGUgW3hdIHgpXHJcbiJ9IHs6c3ltIGV2ZXJ5LXByZWQsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHNldCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gZiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhbGwgb2YgaXRzXG4gIGNvbXBvc2luZyBwcmVkaWNhdGVzIHJldHVybiBhIGxvZ2ljYWwgdHJ1ZSB2YWx1ZSBhZ2FpbnN0IGFsbCBvZiBpdHMgYXJndW1lbnRzLCBlbHNlIGl0IHJldHVybnNcbiAgZmFsc2UuIE5vdGUgdGhhdCBmIGlzIHNob3J0LWNpcmN1aXRpbmcgaW4gdGhhdCBpdCB3aWxsIHN0b3AgZXhlY3V0aW9uIG9uIHRoZSBmaXJzdFxuICBhcmd1bWVudCB0aGF0IHRyaWdnZXJzIGEgbG9naWNhbCBmYWxzZSByZXN1bHQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgcHJlZGljYXRlcy4iLCA6YXJnbGlzdHMgW1twXSBbcDEgcDJdIFtwMSBwMiBwM10gW3AxIHAyIHAzICYgcHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmVyeS1wcmVkXHJcbiBcIlRha2VzIGEgc2V0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBmIHRoYXQgcmV0dXJucyB0cnVlIGlmIGFsbCBvZiBpdHNcXG4gIGNvbXBvc2luZyBwcmVkaWNhdGVzIHJldHVybiBhIGxvZ2ljYWwgdHJ1ZSB2YWx1ZSBhZ2FpbnN0IGFsbCBvZiBpdHMgYXJndW1lbnRzLCBlbHNlIGl0IHJldHVybnNcXG4gIGZhbHNlLiBOb3RlIHRoYXQgZiBpcyBzaG9ydC1jaXJjdWl0aW5nIGluIHRoYXQgaXQgd2lsbCBzdG9wIGV4ZWN1dGlvbiBvbiB0aGUgZmlyc3RcXG4gIGFyZ3VtZW50IHRoYXQgdHJpZ2dlcnMgYSBsb2dpY2FsIGZhbHNlIHJlc3VsdCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBwcmVkaWNhdGVzLlwiXHJcbiAoW3BdXHJcbiAgKGZuXHJcbiAgIGVwMVxyXG4gICAoW10gdHJ1ZSlcclxuICAgKFt4XSAoYm9vbGVhbiAocCB4KSkpXHJcbiAgIChbeCB5XSAoYm9vbGVhbiAoYW5kIChwIHgpIChwIHkpKSkpXHJcbiAgIChbeCB5IHpdIChib29sZWFuIChhbmQgKHAgeCkgKHAgeSkgKHAgeikpKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChib29sZWFuIChhbmQgKGVwMSB4IHkgeikgKGV2ZXJ5PyBwIGFyZ3MpKSkpKSlcclxuIChbcDEgcDJdXHJcbiAgKGZuXHJcbiAgIGVwMlxyXG4gICAoW10gdHJ1ZSlcclxuICAgKFt4XSAoYm9vbGVhbiAoYW5kIChwMSB4KSAocDIgeCkpKSlcclxuICAgKFt4IHldIChib29sZWFuIChhbmQgKHAxIHgpIChwMSB5KSAocDIgeCkgKHAyIHkpKSkpXHJcbiAgIChbeCB5IHpdIChib29sZWFuIChhbmQgKHAxIHgpIChwMSB5KSAocDEgeikgKHAyIHgpIChwMiB5KSAocDIgeikpKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAoYm9vbGVhblxyXG4gICAgIChhbmRcclxuICAgICAgKGVwMiB4IHkgeilcclxuICAgICAgKGV2ZXJ5P1xyXG4gICAgICAgKGZuKiBbcDFfXzQ4ODExI10gKGFuZCAocDEgcDFfXzQ4ODExIykgKHAyIHAxX180ODgxMSMpKSlcclxuICAgICAgIGFyZ3MpKSkpKSlcclxuIChbcDEgcDIgcDNdXHJcbiAgKGZuXHJcbiAgIGVwM1xyXG4gICAoW10gdHJ1ZSlcclxuICAgKFt4XSAoYm9vbGVhbiAoYW5kIChwMSB4KSAocDIgeCkgKHAzIHgpKSkpXHJcbiAgIChbeCB5XSAoYm9vbGVhbiAoYW5kIChwMSB4KSAocDIgeCkgKHAzIHgpIChwMSB5KSAocDIgeSkgKHAzIHkpKSkpXHJcbiAgIChbeCB5IHpdXHJcbiAgICAoYm9vbGVhblxyXG4gICAgIChhbmRcclxuICAgICAgKHAxIHgpXHJcbiAgICAgIChwMiB4KVxyXG4gICAgICAocDMgeClcclxuICAgICAgKHAxIHkpXHJcbiAgICAgIChwMiB5KVxyXG4gICAgICAocDMgeSlcclxuICAgICAgKHAxIHopXHJcbiAgICAgIChwMiB6KVxyXG4gICAgICAocDMgeikpKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAoYm9vbGVhblxyXG4gICAgIChhbmRcclxuICAgICAgKGVwMyB4IHkgeilcclxuICAgICAgKGV2ZXJ5P1xyXG4gICAgICAgKGZuKlxyXG4gICAgICAgIFtwMV9fNDg4MTIjXVxyXG4gICAgICAgIChhbmQgKHAxIHAxX180ODgxMiMpIChwMiBwMV9fNDg4MTIjKSAocDMgcDFfXzQ4ODEyIykpKVxyXG4gICAgICAgYXJncykpKSkpKVxyXG4gKFtwMSBwMiBwMyAmIHBzXVxyXG4gIChsZXRcclxuICAgW3BzIChsaXN0KiBwMSBwMiBwMyBwcyldXHJcbiAgIChmblxyXG4gICAgZXBuXHJcbiAgICAoW10gdHJ1ZSlcclxuICAgIChbeF0gKGV2ZXJ5PyAoZm4qIFtwMV9fNDg4MTMjXSAocDFfXzQ4ODEzIyB4KSkgcHMpKVxyXG4gICAgKFt4IHldXHJcbiAgICAgKGV2ZXJ5P1xyXG4gICAgICAoZm4qIFtwMV9fNDg4MTQjXSAoYW5kIChwMV9fNDg4MTQjIHgpIChwMV9fNDg4MTQjIHkpKSlcclxuICAgICAgcHMpKVxyXG4gICAgKFt4IHkgel1cclxuICAgICAoZXZlcnk/XHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4MTUjXVxyXG4gICAgICAgKGFuZCAocDFfXzQ4ODE1IyB4KSAocDFfXzQ4ODE1IyB5KSAocDFfXzQ4ODE1IyB6KSkpXHJcbiAgICAgIHBzKSlcclxuICAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgIChib29sZWFuXHJcbiAgICAgIChhbmRcclxuICAgICAgIChlcG4geCB5IHopXHJcbiAgICAgICAoZXZlcnk/IChmbiogW3AxX180ODgxNiNdIChldmVyeT8gcDFfXzQ4ODE2IyBhcmdzKSkgcHMpKSkpKSkpKVxyXG4ifSB7OnN5bSBrZXlzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBtYXAncyBrZXlzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyAoc2VxIG1hcCkuIiwgOmFyZ2xpc3RzIChbbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5c1xyXG4gXCJSZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIG1hcCdzIGtleXMsIGluIHRoZSBzYW1lIG9yZGVyIGFzIChzZXEgbWFwKS5cIlxyXG4gW21hcF1cclxuICh3aGVuLWxldCBbbXNlcSAoc2VxIG1hcCldIChLZXlTZXEuIG1zZXEgbmlsKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctcHJvdG9jb2wsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHJvdG8gb2JqXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy1wcm90b2NvbFxyXG4gW3Byb3RvIG9ial1cclxuIChsZXRcclxuICBbdHlcclxuICAgKHR5cGUgb2JqKVxyXG4gICB0eVxyXG4gICAoaWZcclxuICAgIChhbmQgdHkgKC4tY2xqcyRsYW5nJHR5cGUgdHkpKVxyXG4gICAgKC4tY2xqcyRsYW5nJGN0b3JTdHIgdHkpXHJcbiAgICAoZ29vZy90eXBlT2Ygb2JqKSldXHJcbiAgKGpzL0Vycm9yLlxyXG4gICAoLmpvaW5cclxuICAgIChhcnJheVxyXG4gICAgIFwiTm8gcHJvdG9jb2wgbWV0aG9kIFwiXHJcbiAgICAgcHJvdG9cclxuICAgICBcIiBkZWZpbmVkIGZvciB0eXBlIFwiXHJcbiAgICAgdHlcclxuICAgICBcIjogXCJcclxuICAgICBvYmopXHJcbiAgICBcIlwiKSkpKVxyXG4ifSB7OnN5bSBsb2FkLWZpbGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZmlsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvYWQtZmlsZVxyXG4gW2ZpbGVdXHJcbiAod2hlbi1ub3QganMvQ09NUElMRUQgKGNsanMuY29yZS9sb2FkLWZpbGUqIGZpbGUpKSlcclxuIn0gezpzeW0gZGlzdGluY3Q/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG5vIHR3byBvZiB0aGUgYXJndW1lbnRzIGFyZSA9IiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXN0aW5jdD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG5vIHR3byBvZiB0aGUgYXJndW1lbnRzIGFyZSA9XCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAobm90ICg9IHggeSkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAobm90ICg9IHggeSkpXHJcbiAgIChsb29wXHJcbiAgICBbcyAje3ggeX0geHMgbW9yZV1cclxuICAgIChsZXRcclxuICAgICBbeCAoZmlyc3QgeHMpIGV0YyAobmV4dCB4cyldXHJcbiAgICAgKGlmIHhzIChpZiAoY29udGFpbnM/IHMgeCkgZmFsc2UgKHJlY3VyIChjb25qIHMgeCkgZXRjKSkgdHJ1ZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBwb3MtaW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIHBvc2l0aXZlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3MtaW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBwb3NpdGl2ZS5cIlxyXG4gW3hdXHJcbiAoY29uZFxyXG4gIChpbnRlZ2VyPyB4KVxyXG4gIChwb3M/IHgpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguSW50ZWdlciB4KVxyXG4gIChhbmQgKG5vdCAoLmlzTmVnYXRpdmUgeCkpIChub3QgKC5pc1plcm8geCkpKVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkxvbmcgeClcclxuICAoYW5kIChub3QgKC5pc05lZ2F0aXZlIHgpKSAobm90ICguaXNaZXJvIHgpKSlcclxuICA6ZWxzZVxyXG4gIGZhbHNlKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLXNob3J0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1zaG9ydCBbeF0geClcclxuIn0gezpzeW0gbWV0aG9kcywgOm1ldGEgezpkb2MgIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybnMgYSBtYXAgb2YgZGlzcGF0Y2ggdmFsdWVzIC0+IGRpc3BhdGNoIGZucyIsIDphcmdsaXN0cyAoW211bHRpZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXRob2RzXHJcbiBcIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybnMgYSBtYXAgb2YgZGlzcGF0Y2ggdmFsdWVzIC0+IGRpc3BhdGNoIGZuc1wiXHJcbiBbbXVsdGlmbl1cclxuICgtbWV0aG9kcyBtdWx0aWZuKSlcclxuIn0gezpzeW0gb2RkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBuIGlzIG9kZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBuIGlzIG5vdCBhbiBpbnRlZ2VyIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9kZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG4gaXMgb2RkLCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIG4gaXMgbm90IGFuIGludGVnZXJcIlxyXG4gW25dXHJcbiAobm90IChldmVuPyBuKSkpXHJcbiJ9IHs6c3ltIC1nZXQtbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mIGRpc3BhdGNoLXZhbF0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBmcmVxdWVuY2llcywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgZnJvbSBkaXN0aW5jdCBpdGVtcyBpbiBjb2xsIHRvIHRoZSBudW1iZXIgb2YgdGltZXNcbiAgdGhleSBhcHBlYXIuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZyZXF1ZW5jaWVzXHJcbiBcIlJldHVybnMgYSBtYXAgZnJvbSBkaXN0aW5jdCBpdGVtcyBpbiBjb2xsIHRvIHRoZSBudW1iZXIgb2YgdGltZXNcXG4gIHRoZXkgYXBwZWFyLlwiXHJcbiBbY29sbF1cclxuIChwZXJzaXN0ZW50IVxyXG4gIChyZWR1Y2VcclxuICAgKGZuIFtjb3VudHMgeF0gKGFzc29jISBjb3VudHMgeCAoaW5jIChnZXQgY291bnRzIHggMCkpKSlcclxuICAgKHRyYW5zaWVudCB7fSlcclxuICAgY29sbCkpKVxyXG4ifSB7OnN5bSByZWR1Y2VhYmxlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJUmVkdWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZWFibGU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJUmVkdWNlXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSVJlZHVjZSB4KSlcclxuIn0gezpzeW0gc3RyaW5nLWhhc2gtY2FjaGUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHN0cmluZy1oYXNoLWNhY2hlIChqcy1vYmopKVxyXG4ifSB7OnN5bSByc3Vic2VxLCA6bWV0YSB7OmRvYyAic2MgbXVzdCBiZSBhIHNvcnRlZCBjb2xsZWN0aW9uLCB0ZXN0KHMpIG9uZSBvZiA8LCA8PSwgPiBvclxuICA+PS4gUmV0dXJucyBhIHJldmVyc2Ugc2VxIG9mIHRob3NlIGVudHJpZXMgd2l0aCBrZXlzIGVrIGZvclxuICB3aGljaCAodGVzdCAoLi4gc2MgY29tcGFyYXRvciAoY29tcGFyZSBlayBrZXkpKSAwKSBpcyB0cnVlIiwgOmFyZ2xpc3RzIFtbc2MgdGVzdCBrZXldIFtzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSBlbmQtdGVzdCBlbmQta2V5XV19LCA6c291cmNlICIoZGVmblxyXG4gcnN1YnNlcVxyXG4gXCJzYyBtdXN0IGJlIGEgc29ydGVkIGNvbGxlY3Rpb24sIHRlc3Qocykgb25lIG9mIDwsIDw9LCA+IG9yXFxuICA+PS4gUmV0dXJucyBhIHJldmVyc2Ugc2VxIG9mIHRob3NlIGVudHJpZXMgd2l0aCBrZXlzIGVrIGZvclxcbiAgd2hpY2ggKHRlc3QgKC4uIHNjIGNvbXBhcmF0b3IgKGNvbXBhcmUgZWsga2V5KSkgMCkgaXMgdHJ1ZVwiXHJcbiAoW3NjIHRlc3Qga2V5XVxyXG4gIChsZXRcclxuICAgW2luY2x1ZGUgKG1rLWJvdW5kLWZuIHNjIHRlc3Qga2V5KV1cclxuICAgKGlmXHJcbiAgICAoI3s8IDw9fSB0ZXN0KVxyXG4gICAgKHdoZW4tbGV0XHJcbiAgICAgW1tlIDphcyBzXSAoLXNvcnRlZC1zZXEtZnJvbSBzYyBrZXkgZmFsc2UpXVxyXG4gICAgIChpZiAoaW5jbHVkZSBlKSBzIChuZXh0IHMpKSlcclxuICAgICh0YWtlLXdoaWxlIGluY2x1ZGUgKC1zb3J0ZWQtc2VxIHNjIGZhbHNlKSkpKSlcclxuIChbc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkgZW5kLXRlc3QgZW5kLWtleV1cclxuICAod2hlbi1sZXRcclxuICAgW1tlIDphcyBzXSAoLXNvcnRlZC1zZXEtZnJvbSBzYyBlbmQta2V5IGZhbHNlKV1cclxuICAgKHRha2Utd2hpbGVcclxuICAgIChtay1ib3VuZC1mbiBzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSlcclxuICAgIChpZiAoKG1rLWJvdW5kLWZuIHNjIGVuZC10ZXN0IGVuZC1rZXkpIGUpIHMgKG5leHQgcykpKSkpKVxyXG4ifSB7OnN5bSBpbmMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbnVtYmVyIG9uZSBncmVhdGVyIHRoYW4gbnVtLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmNcclxuIFwiUmV0dXJucyBhIG51bWJlciBvbmUgZ3JlYXRlciB0aGFuIG51bS5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlLysgeCAxKSlcclxuIn0gezpzeW0gdHlwZS0+c3RyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3R5XSl9LCA6c291cmNlICIoZGVmbiB0eXBlLT5zdHIgW3R5XSAoaWYtbGV0IFtzICguLWNsanMkbGFuZyRjdG9yU3RyIHR5KV0gcyAoc3RyIHR5KSkpXHJcbiJ9IHs6c3ltIGdldC1tZXRob2QsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG11bHRpbWV0aG9kIGFuZCBhIGRpc3BhdGNoIHZhbHVlLCByZXR1cm5zIHRoZSBkaXNwYXRjaCBmblxuICB0aGF0IHdvdWxkIGFwcGx5IHRvIHRoYXQgdmFsdWUsIG9yIG5pbCBpZiBub25lIGFwcGx5IGFuZCBubyBkZWZhdWx0IiwgOmFyZ2xpc3RzIChbbXVsdGlmbiBkaXNwYXRjaC12YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbWV0aG9kXHJcbiBcIkdpdmVuIGEgbXVsdGltZXRob2QgYW5kIGEgZGlzcGF0Y2ggdmFsdWUsIHJldHVybnMgdGhlIGRpc3BhdGNoIGZuXFxuICB0aGF0IHdvdWxkIGFwcGx5IHRvIHRoYXQgdmFsdWUsIG9yIG5pbCBpZiBub25lIGFwcGx5IGFuZCBubyBkZWZhdWx0XCJcclxuIFttdWx0aWZuIGRpc3BhdGNoLXZhbF1cclxuICgtZ2V0LW1ldGhvZCBtdWx0aWZuIGRpc3BhdGNoLXZhbCkpXHJcbiJ9IHs6c3ltIHV1aWQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHV1aWQ/IFt4XSAoaW1wbGVtZW50cz8gSVVVSUQgeCkpXHJcbiJ9IHs6c3ltIGVzNi1lbnRyaWVzLWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIGVzNi1lbnRyaWVzLWl0ZXJhdG9yIFtjb2xsXSAoRVM2RW50cmllc0l0ZXJhdG9yLiAoc2VxIGNvbGwpKSlcclxuIn0gezpzeW0gYml0LWNsZWFyLCA6bWV0YSB7OmRvYyAiQ2xlYXIgYml0IGF0IGluZGV4IG4iLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuIGJpdC1jbGVhciBcIkNsZWFyIGJpdCBhdCBpbmRleCBuXCIgW3ggbl0gKGNsanMuY29yZS9iaXQtY2xlYXIgeCBuKSlcclxuIn0gezpzeW0gZmlsdGVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1twcmVkXSBbcHJlZCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZmlsdGVyXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtwcmVkXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChmblxyXG4gICAgKFtdIChyZikpXHJcbiAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dF0gKGlmIChwcmVkIGlucHV0KSAocmYgcmVzdWx0IGlucHV0KSByZXN1bHQpKSkpKVxyXG4gKFtwcmVkIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChpZlxyXG4gICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAobGV0XHJcbiAgICAgIFtjIChjaHVuay1maXJzdCBzKSBzaXplIChjb3VudCBjKSBiIChjaHVuay1idWZmZXIgc2l6ZSldXHJcbiAgICAgIChkb3RpbWVzXHJcbiAgICAgICBbaSBzaXplXVxyXG4gICAgICAgKHdoZW4gKHByZWQgKC1udGggYyBpKSkgKGNodW5rLWFwcGVuZCBiICgtbnRoIGMgaSkpKSlcclxuICAgICAgKGNodW5rLWNvbnMgKGNodW5rIGIpIChmaWx0ZXIgcHJlZCAoY2h1bmstcmVzdCBzKSkpKVxyXG4gICAgIChsZXRcclxuICAgICAgW2YgKGZpcnN0IHMpIHIgKHJlc3QgcyldXHJcbiAgICAgIChpZiAocHJlZCBmKSAoY29ucyBmIChmaWx0ZXIgcHJlZCByKSkgKGZpbHRlciBwcmVkIHIpKSkpKSkpKVxyXG4ifSB7OnN5bSAtYXNzb2MtbiEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRjb2xsIHdpdGggdmFsdWUgdmFsIGFkZGVkIGF0IHBvc2l0aW9uIG4uIiwgOmFyZ2xpc3RzIChbdGNvbGwgbiB2YWxdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50VmVjdG9yfSB7OnN5bSBJV2l0aE1ldGEsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIG1ldGFkYXRhIHRvIGFuIG9iamVjdC4ifSwgOm1ldGhvZHMgKC13aXRoLW1ldGEpfSB7OnN5bSBsaXN0LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLiIsIDphcmdsaXN0cyAoWyYgeHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaXN0XHJcbiBcIkNyZWF0ZXMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcy5cIlxyXG4gWyYgeHNdXHJcbiAobGV0XHJcbiAgW2FyclxyXG4gICAoaWZcclxuICAgIChhbmQgKGluc3RhbmNlPyBJbmRleGVkU2VxIHhzKSAoemVybz8gKC4taSB4cykpKVxyXG4gICAgKC4tYXJyIHhzKVxyXG4gICAgKGxldFxyXG4gICAgIFthcnIgKGFycmF5KV1cclxuICAgICAobG9vcFxyXG4gICAgICBbeHMgeHNdXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgIChuaWw/IHhzKVxyXG4gICAgICAgKGRvICgucHVzaCBhcnIgKC1maXJzdCB4cykpIChyZWN1ciAoLW5leHQgeHMpKSlcclxuICAgICAgIGFycikpKSldXHJcbiAgKGxvb3BcclxuICAgW2kgKGFsZW5ndGggYXJyKSByICgpXVxyXG4gICAoaWYgKD4gaSAwKSAocmVjdXIgKGRlYyBpKSAoLWNvbmogciAoYWdldCBhcnIgKGRlYyBpKSkpKSByKSkpKVxyXG4ifSB7OnN5bSArLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiArXHJcbiBcIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLlwiXHJcbiAoW10gMClcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlLysgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSArIChjbGpzLmNvcmUvKyB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gc3BsaXQtd2l0aCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB2ZWN0b3Igb2YgWyh0YWtlLXdoaWxlIHByZWQgY29sbCkgKGRyb3Atd2hpbGUgcHJlZCBjb2xsKV0iLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdC13aXRoXHJcbiBcIlJldHVybnMgYSB2ZWN0b3Igb2YgWyh0YWtlLXdoaWxlIHByZWQgY29sbCkgKGRyb3Atd2hpbGUgcHJlZCBjb2xsKV1cIlxyXG4gW3ByZWQgY29sbF1cclxuIFsodGFrZS13aGlsZSBwcmVkIGNvbGwpIChkcm9wLXdoaWxlIHByZWQgY29sbCldKVxyXG4ifSB7OnN5bSBhc2V0LCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4L2luZGljZXMuIFdvcmtzIG9uIEphdmFTY3JpcHQgYXJyYXlzLlxuICBSZXR1cm5zIHZhbC4iLCA6YXJnbGlzdHMgW1thcnJheSBpZHggdmFsXSBbYXJyYXkgaWR4IGlkeDIgJiBpZHh2XV19LCA6c291cmNlICIoZGVmblxyXG4gYXNldFxyXG4gXCJTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXgvaW5kaWNlcy4gV29ya3Mgb24gSmF2YVNjcmlwdCBhcnJheXMuXFxuICBSZXR1cm5zIHZhbC5cIlxyXG4gKFthcnJheSBpZHggdmFsXSAoY2xqcy5jb3JlL2FzZXQgYXJyYXkgaWR4IHZhbCkpXHJcbiAoW2FycmF5IGlkeCBpZHgyICYgaWR4dl0gKGFwcGx5IGFzZXQgKGFnZXQgYXJyYXkgaWR4KSBpZHgyIGlkeHYpKSlcclxuIn0gezpzeW0gaW50LXJvdGF0ZS1sZWZ0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludC1yb3RhdGUtbGVmdFxyXG4gW3ggbl1cclxuIChiaXQtb3IgKGJpdC1zaGlmdC1sZWZ0IHggbikgKHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCB4ICgtIG4pKSkpXHJcbiJ9IHs6c3ltIGtleXdvcmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgS2V5d29yZCB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIG5hbWUuICBEbyBub3QgdXNlIDpcbiAgaW4gdGhlIGtleXdvcmQgc3RyaW5ncywgaXQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LiIsIDphcmdsaXN0cyBbW25hbWVdIFtucyBuYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4ga2V5d29yZFxyXG4gXCJSZXR1cm5zIGEgS2V5d29yZCB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIG5hbWUuICBEbyBub3QgdXNlIDpcXG4gIGluIHRoZSBrZXl3b3JkIHN0cmluZ3MsIGl0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS5cIlxyXG4gKFtuYW1lXVxyXG4gIChjb25kXHJcbiAgIChrZXl3b3JkPyBuYW1lKVxyXG4gICBuYW1lXHJcbiAgIChzeW1ib2w/IG5hbWUpXHJcbiAgIChLZXl3b3JkLlxyXG4gICAgKGNsanMuY29yZS9uYW1lc3BhY2UgbmFtZSlcclxuICAgIChjbGpzLmNvcmUvbmFtZSBuYW1lKVxyXG4gICAgKC4tc3RyIG5hbWUpXHJcbiAgICBuaWwpXHJcbiAgICg9IFwiL1wiIG5hbWUpXHJcbiAgIChLZXl3b3JkLiBuaWwgbmFtZSBuYW1lIG5pbClcclxuICAgKHN0cmluZz8gbmFtZSlcclxuICAgKGxldFxyXG4gICAgW3BhcnRzICguc3BsaXQgbmFtZSBcIi9cIildXHJcbiAgICAoaWZcclxuICAgICAoPT0gKGFsZW5ndGggcGFydHMpIDIpXHJcbiAgICAgKEtleXdvcmQuIChhZ2V0IHBhcnRzIDApIChhZ2V0IHBhcnRzIDEpIG5hbWUgbmlsKVxyXG4gICAgIChLZXl3b3JkLiBuaWwgKGFnZXQgcGFydHMgMCkgbmFtZSBuaWwpKSkpKVxyXG4gKFtucyBuYW1lXVxyXG4gIChsZXRcclxuICAgW25zXHJcbiAgICAoY29uZFxyXG4gICAgIChrZXl3b3JkPyBucylcclxuICAgICAoY2xqcy5jb3JlL25hbWUgbnMpXHJcbiAgICAgKHN5bWJvbD8gbnMpXHJcbiAgICAgKGNsanMuY29yZS9uYW1lIG5zKVxyXG4gICAgIDplbHNlXHJcbiAgICAgbnMpXHJcbiAgICBuYW1lXHJcbiAgICAoY29uZFxyXG4gICAgIChrZXl3b3JkPyBuYW1lKVxyXG4gICAgIChjbGpzLmNvcmUvbmFtZSBuYW1lKVxyXG4gICAgIChzeW1ib2w/IG5hbWUpXHJcbiAgICAgKGNsanMuY29yZS9uYW1lIG5hbWUpXHJcbiAgICAgOmVsc2VcclxuICAgICBuYW1lKV1cclxuICAgKEtleXdvcmQuIG5zIG5hbWUgKHN0ciAod2hlbiBucyAoc3RyIG5zIFwiL1wiKSkgbmFtZSkgbmlsKSkpKVxyXG4ifSB7OnN5bSAqbnMqLCA6bWV0YSB7OmRvYyAiVmFyIGJvdW5kIHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4gT25seSB1c2VkIGZvciBib290c3RyYXBwaW5nLiJ9LCA6c291cmNlICIoZGVmICpucyogbmlsKVxyXG4ifSB7OnN5bSAqYXNzZXJ0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmFzc2VydCogdHJ1ZSlcclxuIn0gezpzeW0gSUNvbGxlY3Rpb24sIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHRvIGEgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1jb25qKX0gezpzeW0gY2hhcnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gY2hhcnMgW3hdIHgpXHJcbiJ9IHs6c3ltIHN0ciwgOm1ldGEgezpkb2MgIldpdGggbm8gYXJncywgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLiBXaXRoIG9uZSBhcmcgeCwgcmV0dXJuc1xuICB4LnRvU3RyaW5nKCkuICAoc3RyIG5pbCkgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLiBXaXRoIG1vcmUgdGhhblxuICBvbmUgYXJnLCByZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHIgdmFsdWVzIG9mIHRoZSBhcmdzLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4ICYgeXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJcclxuIFwiV2l0aCBubyBhcmdzLCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuIFdpdGggb25lIGFyZyB4LCByZXR1cm5zXFxuICB4LnRvU3RyaW5nKCkuICAoc3RyIG5pbCkgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLiBXaXRoIG1vcmUgdGhhblxcbiAgb25lIGFyZywgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyIHZhbHVlcyBvZiB0aGUgYXJncy5cIlxyXG4gKFtdIFwiXCIpXHJcbiAoW3hdIChpZiAobmlsPyB4KSBcIlwiICguam9pbiAjanMgW3hdIFwiXCIpKSlcclxuIChbeCAmIHlzXVxyXG4gIChsb29wXHJcbiAgIFtzYiAoU3RyaW5nQnVmZmVyLiAoc3RyIHgpKSBtb3JlIHlzXVxyXG4gICAoaWZcclxuICAgIG1vcmVcclxuICAgIChyZWN1ciAoLiBzYiAoYXBwZW5kIChzdHIgKGZpcnN0IG1vcmUpKSkpIChuZXh0IG1vcmUpKVxyXG4gICAgKC50b1N0cmluZyBzYikpKSkpXHJcbiJ9IHs6c3ltIG5leHQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9mIHRoZSBpdGVtcyBhZnRlciB0aGUgZmlyc3QuIENhbGxzIHNlcSBvbiBpdHNcbiAgYXJndW1lbnQuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcywgcmV0dXJucyBuaWwiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmV4dFxyXG4gXCJSZXR1cm5zIGEgc2VxIG9mIHRoZSBpdGVtcyBhZnRlciB0aGUgZmlyc3QuIENhbGxzIHNlcSBvbiBpdHNcXG4gIGFyZ3VtZW50LiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMsIHJldHVybnMgbmlsXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoaWYgKGltcGxlbWVudHM/IElOZXh0IGNvbGwpICgtbmV4dCBjb2xsKSAoc2VxIChyZXN0IGNvbGwpKSkpKVxyXG4ifSB7OnN5bSBBU2VxLCA6bWV0YSB7OmRvYyAiTWFya2VyIHByb3RvY29sIGluZGljYXRpbmcgYW4gYXJyYXkgc2VxdWVuY2UuIn0sIDptZXRob2RzICgpfSB7OnN5bSBwci1zZXEtd3JpdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29ianMgd3JpdGVyIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwci1zZXEtd3JpdGVyXHJcbiBbb2JqcyB3cml0ZXIgb3B0c11cclxuIChwci13cml0ZXIgKGZpcnN0IG9ianMpIHdyaXRlciBvcHRzKVxyXG4gKGRvc2VxXHJcbiAgW29iaiAobmV4dCBvYmpzKV1cclxuICAoLXdyaXRlIHdyaXRlciBcIiBcIilcclxuICAocHItd3JpdGVyIG9iaiB3cml0ZXIgb3B0cykpKVxyXG4ifSB7OnN5bSBJRm4sIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIGludm9rZSBhbiBvYmplY3QgYXMgYSBmdW5jdGlvbi5cbiAgRm9yIGV4YW1wbGUsIGEgdmVjdG9yIGNhbiBhbHNvIGJlIHVzZWQgdG8gbG9vayB1cCBhIHZhbHVlOlxuICAoWzEgMiAzIDRdIDEpID0+IDIifSwgOm1ldGhvZHMgKC1pbnZva2UpfSB7OnN5bSByZWdleHA/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IFJlZ0V4cCBpbnN0YW5jZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnZXhwP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgUmVnRXhwIGluc3RhbmNlLlwiXHJcbiBbeF1cclxuIChpbnN0YW5jZT8ganMvUmVnRXhwIHgpKVxyXG4ifSB7OnN5bSBoYXNoLW1hcCwgOm1ldGEgezpkb2MgImtleXZhbCA9PiBrZXkgdmFsXG4gIFJldHVybnMgYSBuZXcgaGFzaCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy4iLCA6YXJnbGlzdHMgKFsmIGtleXZhbHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLW1hcFxyXG4gXCJrZXl2YWwgPT4ga2V5IHZhbFxcbiAgUmV0dXJucyBhIG5ldyBoYXNoIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLlwiXHJcbiBbJiBrZXl2YWxzXVxyXG4gKGxvb3BcclxuICBbaW4gKHNlcSBrZXl2YWxzKSBvdXQgKHRyYW5zaWVudCAoLi1FTVBUWSBQZXJzaXN0ZW50SGFzaE1hcCkpXVxyXG4gIChpZlxyXG4gICBpblxyXG4gICAocmVjdXIgKG5uZXh0IGluKSAoYXNzb2MhIG91dCAoZmlyc3QgaW4pIChzZWNvbmQgaW4pKSlcclxuICAgKHBlcnNpc3RlbnQhIG91dCkpKSlcclxuIn0gezpzeW0gKmV4ZWMtdGFwLWZuKiwgOm1ldGEgezpkb2MgIkFycmFuZ2VzIHRvIGhhdmUgdGFwIGZ1bmN0aW9ucyBleGVjdXRlZCB2aWEgdGhlIHN1cHBsaWVkIGYsIGFcbiAgZnVuY3Rpb24gb2Ygbm8gYXJndW1lbnRzLiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiAqZXhlYy10YXAtZm4qXHJcbiBbZl1cclxuIChhbmQgKGV4aXN0cz8ganMvc2V0VGltZW91dCkgKGpzL3NldFRpbWVvdXQgZiAwKSB0cnVlKSlcclxuIn0gezpzeW0gdW5kZXJpdmUsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhcmVudCBhbmRcbiAgdGFnLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90XG4gIHN1cHBsaWVkIGRlZmF1bHRzIHRvLCBhbmQgbW9kaWZpZXMsIHRoZSBnbG9iYWwgaGllcmFyY2h5LiIsIDphcmdsaXN0cyBbW3RhZyBwYXJlbnRdIFtoIHRhZyBwYXJlbnRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmRlcml2ZVxyXG4gXCJSZW1vdmVzIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhcmVudCBhbmRcXG4gIHRhZy4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdFxcbiAgc3VwcGxpZWQgZGVmYXVsdHMgdG8sIGFuZCBtb2RpZmllcywgdGhlIGdsb2JhbCBoaWVyYXJjaHkuXCJcclxuIChbdGFnIHBhcmVudF0gKHN3YXAtZ2xvYmFsLWhpZXJhcmNoeSEgdW5kZXJpdmUgdGFnIHBhcmVudCkgbmlsKVxyXG4gKFtoIHRhZyBwYXJlbnRdXHJcbiAgKGxldFxyXG4gICBbcGFyZW50TWFwXHJcbiAgICAoOnBhcmVudHMgaClcclxuICAgIGNoaWxkc1BhcmVudHNcclxuICAgIChpZiAocGFyZW50TWFwIHRhZykgKGRpc2ogKHBhcmVudE1hcCB0YWcpIHBhcmVudCkgI3t9KVxyXG4gICAgbmV3UGFyZW50c1xyXG4gICAgKGlmXHJcbiAgICAgKG5vdC1lbXB0eSBjaGlsZHNQYXJlbnRzKVxyXG4gICAgIChhc3NvYyBwYXJlbnRNYXAgdGFnIGNoaWxkc1BhcmVudHMpXHJcbiAgICAgKGRpc3NvYyBwYXJlbnRNYXAgdGFnKSlcclxuICAgIGRlcml2LXNlcVxyXG4gICAgKGZsYXR0ZW5cclxuICAgICAobWFwXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4NTUjXVxyXG4gICAgICAgKGNvbnNcclxuICAgICAgICAoZmlyc3QgcDFfXzQ4ODU1IylcclxuICAgICAgICAoaW50ZXJwb3NlIChmaXJzdCBwMV9fNDg4NTUjKSAoc2Vjb25kIHAxX180ODg1NSMpKSkpXHJcbiAgICAgIChzZXEgbmV3UGFyZW50cykpKV1cclxuICAgKGlmXHJcbiAgICAoY29udGFpbnM/IChwYXJlbnRNYXAgdGFnKSBwYXJlbnQpXHJcbiAgICAocmVkdWNlXHJcbiAgICAgKGZuKiBbcDFfXzQ4ODU2IyBwMl9fNDg4NTcjXSAoYXBwbHkgZGVyaXZlIHAxX180ODg1NiMgcDJfXzQ4ODU3IykpXHJcbiAgICAgKG1ha2UtaGllcmFyY2h5KVxyXG4gICAgIChwYXJ0aXRpb24gMiBkZXJpdi1zZXEpKVxyXG4gICAgaCkpKSlcclxuIn0gezpzeW0gLXJlc2V0ISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIG9mIG8gdG8gbmV3LXZhbHVlLiIsIDphcmdsaXN0cyAoW28gbmV3LXZhbHVlXSl9LCA6cHJvdG9jb2wgSVJlc2V0fSB7OnN5bSAtcmVzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGhvdXQgdGhlIGZpcnN0IGl0ZW0uIEl0IHNob3VsZFxuICAgICBhbHdheXMgcmV0dXJuIGEgc2VxLCBlLmcuXG4gICAgIChyZXN0IFtdKSA9PiAoKVxuICAgICAocmVzdCBuaWwpID0+ICgpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElTZXF9IHs6c3ltIG5pbC1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5pbC1pdGVyXHJcbiBbXVxyXG4gKHJlaWZ5XHJcbiAgT2JqZWN0XHJcbiAgKGhhc05leHQgW19dIGZhbHNlKVxyXG4gIChuZXh0IFtfXSAoanMvRXJyb3IuIFwiTm8gc3VjaCBlbGVtZW50XCIpKVxyXG4gIChyZW1vdmUgW19dIChqcy9FcnJvci4gXCJVbnN1cHBvcnRlZCBvcGVyYXRpb25cIikpKSlcclxuIn0gezpzeW0gZmFsc2U/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHZhbHVlIGZhbHNlLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZhbHNlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgdmFsdWUgZmFsc2UsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL2ZhbHNlPyB4KSlcclxuIn0gezpzeW0gKnByaW50LXJlYWRhYmx5KiwgOm1ldGEgezpkb2MgIldoZW4gc2V0IHRvIGxvZ2ljYWwgZmFsc2UsIHN0cmluZ3MgYW5kIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmludGVkIHdpdGhcbiAgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgZXNjYXBlIHNlcXVlbmNlcy5cblxuICBEZWZhdWx0cyB0byB0cnVlIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LXJlYWRhYmx5KiB0cnVlKVxyXG4ifSB7OnN5bSBpbnRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGludHMgW3hdIHgpXHJcbiJ9IHs6c3ltIHNvbWUtZm4sIDptZXRhIHs6ZG9jICJUYWtlcyBhIHNldCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gZiB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGxvZ2ljYWwgdHJ1ZSB2YWx1ZVxuICByZXR1cm5lZCBieSBvbmUgb2YgaXRzIGNvbXBvc2luZyBwcmVkaWNhdGVzIGFnYWluc3QgYW55IG9mIGl0cyBhcmd1bWVudHMsIGVsc2UgaXQgcmV0dXJuc1xuICBsb2dpY2FsIGZhbHNlLiBOb3RlIHRoYXQgZiBpcyBzaG9ydC1jaXJjdWl0aW5nIGluIHRoYXQgaXQgd2lsbCBzdG9wIGV4ZWN1dGlvbiBvbiB0aGUgZmlyc3RcbiAgYXJndW1lbnQgdGhhdCB0cmlnZ2VycyBhIGxvZ2ljYWwgdHJ1ZSByZXN1bHQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgcHJlZGljYXRlcy4iLCA6YXJnbGlzdHMgW1twXSBbcDEgcDJdIFtwMSBwMiBwM10gW3AxIHAyIHAzICYgcHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb21lLWZuXHJcbiBcIlRha2VzIGEgc2V0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBmIHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgbG9naWNhbCB0cnVlIHZhbHVlXFxuICByZXR1cm5lZCBieSBvbmUgb2YgaXRzIGNvbXBvc2luZyBwcmVkaWNhdGVzIGFnYWluc3QgYW55IG9mIGl0cyBhcmd1bWVudHMsIGVsc2UgaXQgcmV0dXJuc1xcbiAgbG9naWNhbCBmYWxzZS4gTm90ZSB0aGF0IGYgaXMgc2hvcnQtY2lyY3VpdGluZyBpbiB0aGF0IGl0IHdpbGwgc3RvcCBleGVjdXRpb24gb24gdGhlIGZpcnN0XFxuICBhcmd1bWVudCB0aGF0IHRyaWdnZXJzIGEgbG9naWNhbCB0cnVlIHJlc3VsdCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBwcmVkaWNhdGVzLlwiXHJcbiAoW3BdXHJcbiAgKGZuXHJcbiAgIHNwMVxyXG4gICAoW10gbmlsKVxyXG4gICAoW3hdIChwIHgpKVxyXG4gICAoW3ggeV0gKG9yIChwIHgpIChwIHkpKSlcclxuICAgKFt4IHkgel0gKG9yIChwIHgpIChwIHkpIChwIHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChvciAoc3AxIHggeSB6KSAoc29tZSBwIGFyZ3MpKSkpKVxyXG4gKFtwMSBwMl1cclxuICAoZm5cclxuICAgc3AyXHJcbiAgIChbXSBuaWwpXHJcbiAgIChbeF0gKG9yIChwMSB4KSAocDIgeCkpKVxyXG4gICAoW3ggeV0gKG9yIChwMSB4KSAocDEgeSkgKHAyIHgpIChwMiB5KSkpXHJcbiAgIChbeCB5IHpdIChvciAocDEgeCkgKHAxIHkpIChwMSB6KSAocDIgeCkgKHAyIHkpIChwMiB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKG9yXHJcbiAgICAgKHNwMiB4IHkgeilcclxuICAgICAoc29tZVxyXG4gICAgICAoZm4qIFtwMV9fNDg4MTcjXSAob3IgKHAxIHAxX180ODgxNyMpIChwMiBwMV9fNDg4MTcjKSkpXHJcbiAgICAgIGFyZ3MpKSkpKVxyXG4gKFtwMSBwMiBwM11cclxuICAoZm5cclxuICAgc3AzXHJcbiAgIChbXSBuaWwpXHJcbiAgIChbeF0gKG9yIChwMSB4KSAocDIgeCkgKHAzIHgpKSlcclxuICAgKFt4IHldIChvciAocDEgeCkgKHAyIHgpIChwMyB4KSAocDEgeSkgKHAyIHkpIChwMyB5KSkpXHJcbiAgIChbeCB5IHpdXHJcbiAgICAob3JcclxuICAgICAocDEgeClcclxuICAgICAocDIgeClcclxuICAgICAocDMgeClcclxuICAgICAocDEgeSlcclxuICAgICAocDIgeSlcclxuICAgICAocDMgeSlcclxuICAgICAocDEgeilcclxuICAgICAocDIgeilcclxuICAgICAocDMgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgIChvclxyXG4gICAgIChzcDMgeCB5IHopXHJcbiAgICAgKHNvbWVcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODgxOCNdXHJcbiAgICAgICAob3IgKHAxIHAxX180ODgxOCMpIChwMiBwMV9fNDg4MTgjKSAocDMgcDFfXzQ4ODE4IykpKVxyXG4gICAgICBhcmdzKSkpKSlcclxuIChbcDEgcDIgcDMgJiBwc11cclxuICAobGV0XHJcbiAgIFtwcyAobGlzdCogcDEgcDIgcDMgcHMpXVxyXG4gICAoZm5cclxuICAgIHNwblxyXG4gICAgKFtdIG5pbClcclxuICAgIChbeF0gKHNvbWUgKGZuKiBbcDFfXzQ4ODE5I10gKHAxX180ODgxOSMgeCkpIHBzKSlcclxuICAgIChbeCB5XVxyXG4gICAgIChzb21lIChmbiogW3AxX180ODgyMCNdIChvciAocDFfXzQ4ODIwIyB4KSAocDFfXzQ4ODIwIyB5KSkpIHBzKSlcclxuICAgIChbeCB5IHpdXHJcbiAgICAgKHNvbWVcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODgyMSNdXHJcbiAgICAgICAob3IgKHAxX180ODgyMSMgeCkgKHAxX180ODgyMSMgeSkgKHAxX180ODgyMSMgeikpKVxyXG4gICAgICBwcykpXHJcbiAgICAoW3ggeSB6ICYgYXJnc11cclxuICAgICAob3JcclxuICAgICAgKHNwbiB4IHkgeilcclxuICAgICAgKHNvbWUgKGZuKiBbcDFfXzQ4ODIyI10gKHNvbWUgcDFfXzQ4ODIyIyBhcmdzKSkgcHMpKSkpKSkpXHJcbiJ9IHs6c3ltICpmbHVzaC1vbi1uZXdsaW5lKiwgOm1ldGEgezpkb2MgIldoZW4gc2V0IHRvIHRydWUsIG91dHB1dCB3aWxsIGJlIGZsdXNoZWQgd2hlbmV2ZXIgYSBuZXdsaW5lIGlzIHByaW50ZWQuXG5cbiAgRGVmYXVsdHMgdG8gdHJ1ZS4ifSwgOnNvdXJjZSAiKGRlZiAqZmx1c2gtb24tbmV3bGluZSogdHJ1ZSlcclxuIn0gezpzeW0gdG8tYXJyYXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvLWFycmF5XHJcbiBcIlJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC5cIlxyXG4gW2NvbGxdXHJcbiAobGV0XHJcbiAgW2FyeSAoYXJyYXkpXVxyXG4gIChsb29wXHJcbiAgIFtzIChzZXEgY29sbCldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IHMpXHJcbiAgICAoZG8gKC4gYXJ5IHB1c2ggKGZpcnN0IHMpKSAocmVjdXIgKG5leHQgcykpKVxyXG4gICAgYXJ5KSkpKVxyXG4ifSB7OnN5bSBsaXN0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUxpc3QiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbGlzdD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaW1wbGVtZW50cyBJTGlzdFwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElMaXN0IHgpKVxyXG4ifSB7OnN5bSBhcnJheT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgYXJyYXkuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgYXJyYXkuXCJcclxuIFt4XVxyXG4gKGlmXHJcbiAgKGlkZW50aWNhbD8gKnRhcmdldCogXCJub2RlanNcIilcclxuICAoLmlzQXJyYXkganMvQXJyYXkgeClcclxuICAoaW5zdGFuY2U/IGpzL0FycmF5IHgpKSlcclxuIn0gezpzeW0gc2ltcGxlLWlkZW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZCB3aXRob3V0IGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNpbXBsZS1pZGVudD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkIHdpdGhvdXQgYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYW5kIChpZGVudD8geCkgKG5pbD8gKG5hbWVzcGFjZSB4KSkpKVxyXG4ifSB7OnN5bSBjbG9uZSwgOm1ldGEgezpkb2MgIkNsb25lIHRoZSBzdXBwbGllZCB2YWx1ZSB3aGljaCBtdXN0IGltcGxlbWVudCBJQ2xvbmVhYmxlLiIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xvbmVcclxuIFwiQ2xvbmUgdGhlIHN1cHBsaWVkIHZhbHVlIHdoaWNoIG11c3QgaW1wbGVtZW50IElDbG9uZWFibGUuXCJcclxuIFt2YWx1ZV1cclxuICgtY2xvbmUgdmFsdWUpKVxyXG4ifSB7OnN5bSBkZW11bmdlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZW11bmdlXHJcbiBbbmFtZV1cclxuICgoaWYgKHN5bWJvbD8gbmFtZSkgc3ltYm9sIHN0cilcclxuICAobGV0XHJcbiAgIFtuYW1lJyAoc3RyIG5hbWUpXVxyXG4gICAoaWYgKGlkZW50aWNhbD8gbmFtZScgXCJfRE9UX19ET1RfXCIpIFwiLi5cIiAoZGVtdW5nZS1zdHIgbmFtZScpKSkpKVxyXG4ifSB7OnN5bSBiaXQtbm90LCA6bWV0YSB7OmRvYyAiQml0d2lzZSBjb21wbGVtZW50IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYml0LW5vdCBcIkJpdHdpc2UgY29tcGxlbWVudFwiIFt4XSAoY2xqcy5jb3JlL2JpdC1ub3QgeCkpXHJcbiJ9IHs6c3ltIGJ5dGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYnl0ZSBbeF0geClcclxuIn0gezpzeW0gbWF4LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZ3JlYXRlc3Qgb2YgdGhlIG51bXMuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXhcclxuIFwiUmV0dXJucyB0aGUgZ3JlYXRlc3Qgb2YgdGhlIG51bXMuXCJcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL21heCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIG1heCAoY2xqcy5jb3JlL21heCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gSUNvbXBhcmFibGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgdmFsdWVzIHRoYXQgY2FuIGJlIGNvbXBhcmVkLiJ9LCA6bWV0aG9kcyAoLWNvbXBhcmUpfSB7OnN5bSA9PSwgOm1ldGEgezpkb2MgIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFsbCBoYXZlIHRoZSBlcXVpdmFsZW50XG4gIHZhbHVlLCBvdGhlcndpc2UgZmFsc2UuIEJlaGF2aW9yIG9uIG5vbiBudW1zIGlzXG4gIHVuZGVmaW5lZC4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuID09XHJcbiBcIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFsbCBoYXZlIHRoZSBlcXVpdmFsZW50XFxuICB2YWx1ZSwgb3RoZXJ3aXNlIGZhbHNlLiBCZWhhdmlvciBvbiBub24gbnVtcyBpc1xcbiAgdW5kZWZpbmVkLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKC1lcXVpdiB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoPT0geCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoPT0geSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBwYXJlbnRzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaW1tZWRpYXRlIHBhcmVudHMgb2YgdGFnLCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlXG4gIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoXG4gIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkXG4gIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgaGllcmFyY2h5IiwgOmFyZ2xpc3RzIFtbdGFnXSBbaCB0YWddXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJlbnRzXHJcbiBcIlJldHVybnMgdGhlIGltbWVkaWF0ZSBwYXJlbnRzIG9mIHRhZywgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZVxcbiAgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGEgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGhcXG4gIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkXFxuICBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGhpZXJhcmNoeVwiXHJcbiAoW3RhZ10gKHBhcmVudHMgQChnZXQtZ2xvYmFsLWhpZXJhcmNoeSkgdGFnKSlcclxuIChbaCB0YWddIChub3QtZW1wdHkgKGdldCAoOnBhcmVudHMgaCkgdGFnKSkpKVxyXG4ifSB7OnN5bSBjb3VudCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gKGNvdW50IG5pbCkgcmV0dXJuc1xuICAwLiAgQWxzbyB3b3JrcyBvbiBzdHJpbmdzLCBhcnJheXMsIGFuZCBNYXBzIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvdW50XHJcbiBcIlJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gKGNvdW50IG5pbCkgcmV0dXJuc1xcbiAgMC4gIEFsc28gd29ya3Mgb24gc3RyaW5ncywgYXJyYXlzLCBhbmQgTWFwc1wiXHJcbiBbY29sbF1cclxuIChpZi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChjb25kXHJcbiAgIChpbXBsZW1lbnRzPyBJQ291bnRlZCBjb2xsKVxyXG4gICAoLWNvdW50IGNvbGwpXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKGFsZW5ndGggY29sbClcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKC4tbGVuZ3RoIGNvbGwpXHJcbiAgIChpbXBsZW1lbnRzPyBJU2VxYWJsZSBjb2xsKVxyXG4gICAoYWNjdW11bGF0aW5nLXNlcS1jb3VudCBjb2xsKVxyXG4gICA6ZWxzZVxyXG4gICAoLWNvdW50IGNvbGwpKVxyXG4gIDApKVxyXG4ifSB7OnN5bSAtZGlzam9pbiEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRjb2xsIHdpdGhvdXQgdi4iLCA6YXJnbGlzdHMgKFt0Y29sbCB2XSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudFNldH0gezpzeW0gKmxvYWRlZC1saWJzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZvbmNlICpsb2FkZWQtbGlicyogbmlsKVxyXG4ifSB7OnN5bSBzb3J0ZWQtbWFwLWJ5LCA6bWV0YSB7OmRvYyAia2V5dmFsID0+IGtleSB2YWxcbiAgUmV0dXJucyBhIG5ldyBzb3J0ZWQgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MsIHVzaW5nIHRoZSBzdXBwbGllZCBjb21wYXJhdG9yLiIsIDphcmdsaXN0cyBbW2NvbXBhcmF0b3IgJiBrZXl2YWxzXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydGVkLW1hcC1ieVxyXG4gXCJrZXl2YWwgPT4ga2V5IHZhbFxcbiAgUmV0dXJucyBhIG5ldyBzb3J0ZWQgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MsIHVzaW5nIHRoZSBzdXBwbGllZCBjb21wYXJhdG9yLlwiXHJcbiAoW2NvbXBhcmF0b3IgJiBrZXl2YWxzXVxyXG4gIChsb29wXHJcbiAgIFtpblxyXG4gICAgKHNlcSBrZXl2YWxzKVxyXG4gICAgb3V0XHJcbiAgICAoUGVyc2lzdGVudFRyZWVNYXAuIChmbi0+Y29tcGFyYXRvciBjb21wYXJhdG9yKSBuaWwgMCBuaWwgMCldXHJcbiAgIChpZiBpbiAocmVjdXIgKG5uZXh0IGluKSAoYXNzb2Mgb3V0IChmaXJzdCBpbikgKHNlY29uZCBpbikpKSBvdXQpKSkpXHJcbiJ9IHs6c3ltIGFwcGx5LCA6bWV0YSB7OmRvYyAiQXBwbGllcyBmbiBmIHRvIHRoZSBhcmd1bWVudCBsaXN0IGZvcm1lZCBieSBwcmVwZW5kaW5nIGludGVydmVuaW5nIGFyZ3VtZW50cyB0byBhcmdzLiIsIDphcmdsaXN0cyBbW2YgYXJnc10gW2YgeCBhcmdzXSBbZiB4IHkgYXJnc10gW2YgeCB5IHogYXJnc10gW2YgYSBiIGMgZCAmIGFyZ3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcHBseVxyXG4gXCJBcHBsaWVzIGZuIGYgdG8gdGhlIGFyZ3VtZW50IGxpc3QgZm9ybWVkIGJ5IHByZXBlbmRpbmcgaW50ZXJ2ZW5pbmcgYXJndW1lbnRzIHRvIGFyZ3MuXCJcclxuIChbZiBhcmdzXVxyXG4gIChpZlxyXG4gICAoLi1jbGpzJGxhbmckYXBwbHlUbyBmKVxyXG4gICAobGV0XHJcbiAgICBbZml4ZWQtYXJpdHlcclxuICAgICAoLi1jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSBmKVxyXG4gICAgIGJjXHJcbiAgICAgKGJvdW5kZWQtY291bnQgKGluYyBmaXhlZC1hcml0eSkgYXJncyldXHJcbiAgICAoaWZcclxuICAgICAoPD0gYmMgZml4ZWQtYXJpdHkpXHJcbiAgICAgKGFwcGx5LXRvIGYgYmMgYXJncylcclxuICAgICAoLmNsanMkbGFuZyRhcHBseVRvIGYgYXJncykpKVxyXG4gICAoYXBwbHktdG8tc2ltcGxlIGYgKHNlcSBhcmdzKSkpKVxyXG4gKFtmIHggYXJnc11cclxuICAoaWZcclxuICAgKC4tY2xqcyRsYW5nJGFwcGx5VG8gZilcclxuICAgKGxldFxyXG4gICAgW2FyZ2xpc3RcclxuICAgICAobGlzdCogeCBhcmdzKVxyXG4gICAgIGZpeGVkLWFyaXR5XHJcbiAgICAgKC4tY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgZilcclxuICAgICBiY1xyXG4gICAgIChpbmMgKGJvdW5kZWQtY291bnQgZml4ZWQtYXJpdHkgYXJncykpXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IGJjIGZpeGVkLWFyaXR5KVxyXG4gICAgIChhcHBseS10byBmIGJjIGFyZ2xpc3QpXHJcbiAgICAgKC5jbGpzJGxhbmckYXBwbHlUbyBmIGFyZ2xpc3QpKSlcclxuICAgKGFwcGx5LXRvLXNpbXBsZSBmIHggKHNlcSBhcmdzKSkpKVxyXG4gKFtmIHggeSBhcmdzXVxyXG4gIChpZlxyXG4gICAoLi1jbGpzJGxhbmckYXBwbHlUbyBmKVxyXG4gICAobGV0XHJcbiAgICBbYXJnbGlzdFxyXG4gICAgIChsaXN0KiB4IHkgYXJncylcclxuICAgICBmaXhlZC1hcml0eVxyXG4gICAgICguLWNsanMkbGFuZyRtYXhGaXhlZEFyaXR5IGYpXHJcbiAgICAgYmNcclxuICAgICAoKyAyIChib3VuZGVkLWNvdW50IChkZWMgZml4ZWQtYXJpdHkpIGFyZ3MpKV1cclxuICAgIChpZlxyXG4gICAgICg8PSBiYyBmaXhlZC1hcml0eSlcclxuICAgICAoYXBwbHktdG8gZiBiYyBhcmdsaXN0KVxyXG4gICAgICguY2xqcyRsYW5nJGFwcGx5VG8gZiBhcmdsaXN0KSkpXHJcbiAgIChhcHBseS10by1zaW1wbGUgZiB4IHkgKHNlcSBhcmdzKSkpKVxyXG4gKFtmIHggeSB6IGFyZ3NdXHJcbiAgKGlmXHJcbiAgICguLWNsanMkbGFuZyRhcHBseVRvIGYpXHJcbiAgIChsZXRcclxuICAgIFthcmdsaXN0XHJcbiAgICAgKGxpc3QqIHggeSB6IGFyZ3MpXHJcbiAgICAgZml4ZWQtYXJpdHlcclxuICAgICAoLi1jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSBmKVxyXG4gICAgIGJjXHJcbiAgICAgKCsgMyAoYm91bmRlZC1jb3VudCAoLSBmaXhlZC1hcml0eSAyKSBhcmdzKSldXHJcbiAgICAoaWZcclxuICAgICAoPD0gYmMgZml4ZWQtYXJpdHkpXHJcbiAgICAgKGFwcGx5LXRvIGYgYmMgYXJnbGlzdClcclxuICAgICAoLmNsanMkbGFuZyRhcHBseVRvIGYgYXJnbGlzdCkpKVxyXG4gICAoYXBwbHktdG8tc2ltcGxlIGYgeCB5IHogKHNlcSBhcmdzKSkpKVxyXG4gKFtmIGEgYiBjIGQgJiBhcmdzXVxyXG4gIChpZlxyXG4gICAoLi1jbGpzJGxhbmckYXBwbHlUbyBmKVxyXG4gICAobGV0XHJcbiAgICBbc3ByZWFkLWFyZ3NcclxuICAgICAoc3ByZWFkIGFyZ3MpXHJcbiAgICAgYXJnbGlzdFxyXG4gICAgIChjb25zIGEgKGNvbnMgYiAoY29ucyBjIChjb25zIGQgc3ByZWFkLWFyZ3MpKSkpXHJcbiAgICAgZml4ZWQtYXJpdHlcclxuICAgICAoLi1jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSBmKVxyXG4gICAgIGJjXHJcbiAgICAgKCsgNCAoYm91bmRlZC1jb3VudCAoLSBmaXhlZC1hcml0eSAzKSBzcHJlYWQtYXJncykpXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IGJjIGZpeGVkLWFyaXR5KVxyXG4gICAgIChhcHBseS10byBmIGJjIGFyZ2xpc3QpXHJcbiAgICAgKC5jbGpzJGxhbmckYXBwbHlUbyBmIGFyZ2xpc3QpKSlcclxuICAgKGFwcGx5LXRvLXNpbXBsZSBmIGEgYiBjIGQgKHNwcmVhZCBhcmdzKSkpKSlcclxuIn0gezpzeW0gYWRkLXRvLXN0cmluZy1oYXNoLWNhY2hlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtdG8tc3RyaW5nLWhhc2gtY2FjaGVcclxuIFtrXVxyXG4gKGxldFxyXG4gIFtoIChoYXNoLXN0cmluZyogayldXHJcbiAgKGdvYmplY3Qvc2V0IHN0cmluZy1oYXNoLWNhY2hlIGsgaClcclxuICAoc2V0ISBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCAoaW5jIHN0cmluZy1oYXNoLWNhY2hlLWNvdW50KSlcclxuICBoKSlcclxuIn0gezpzeW0gY2xqLT5qcywgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgQ2xvanVyZVNjcmlwdCB2YWx1ZXMgdG8gSmF2YVNjcmlwdC5cbiAgc2V0cy92ZWN0b3JzL2xpc3RzIGJlY29tZSBBcnJheXMsIEtleXdvcmRzIGFuZCBTeW1ib2wgYmVjb21lIFN0cmluZ3MsXG4gIE1hcHMgYmVjb21lIE9iamVjdHMuIEFyYml0cmFyeSBrZXlzIGFyZSBlbmNvZGVkIHRvIGJ5IGBrZXktPmpzYC5cbiAgT3B0aW9ucyBpcyBhIGtleS12YWx1ZSBwYWlyLCB3aGVyZSB0aGUgb25seSB2YWxpZCBrZXkgaXNcbiAgOmtleXdvcmQtZm4sIHdoaWNoIHNob3VsZCBwb2ludCB0byBhIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbiB0byBiZVxuICBjYWxsZWQgb24ga2V5d29yZCBrZXlzLiBEZWZhdWx0IHRvIGBuYW1lYC4iLCA6YXJnbGlzdHMgKFt4ICYgezprZXlzIFtrZXl3b3JkLWZuXSwgOm9yIHtrZXl3b3JkLWZuIG5hbWV9LCA6YXMgb3B0aW9uc31dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGotPmpzXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgQ2xvanVyZVNjcmlwdCB2YWx1ZXMgdG8gSmF2YVNjcmlwdC5cXG4gIHNldHMvdmVjdG9ycy9saXN0cyBiZWNvbWUgQXJyYXlzLCBLZXl3b3JkcyBhbmQgU3ltYm9sIGJlY29tZSBTdHJpbmdzLFxcbiAgTWFwcyBiZWNvbWUgT2JqZWN0cy4gQXJiaXRyYXJ5IGtleXMgYXJlIGVuY29kZWQgdG8gYnkgYGtleS0+anNgLlxcbiAgT3B0aW9ucyBpcyBhIGtleS12YWx1ZSBwYWlyLCB3aGVyZSB0aGUgb25seSB2YWxpZCBrZXkgaXNcXG4gIDprZXl3b3JkLWZuLCB3aGljaCBzaG91bGQgcG9pbnQgdG8gYSBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb24gdG8gYmVcXG4gIGNhbGxlZCBvbiBrZXl3b3JkIGtleXMuIERlZmF1bHQgdG8gYG5hbWVgLlwiXHJcbiBbeCAmIHs6a2V5cyBba2V5d29yZC1mbl0sIDpvciB7a2V5d29yZC1mbiBuYW1lfSwgOmFzIG9wdGlvbnN9XVxyXG4gKGxldGZuXHJcbiAgWyhrZXlmbiBba10gKGtleS0+anMgayB0aGlzZm4pKVxyXG4gICAodGhpc2ZuXHJcbiAgICBbeF1cclxuICAgIChjb25kXHJcbiAgICAgKG5pbD8geClcclxuICAgICBuaWxcclxuICAgICAoc2F0aXNmaWVzPyBJRW5jb2RlSlMgeClcclxuICAgICAoLWNsai0+anMgeClcclxuICAgICAoa2V5d29yZD8geClcclxuICAgICAoa2V5d29yZC1mbiB4KVxyXG4gICAgIChzeW1ib2w/IHgpXHJcbiAgICAgKHN0ciB4KVxyXG4gICAgIChtYXA/IHgpXHJcbiAgICAgKGxldFxyXG4gICAgICBbbSAoanMtb2JqKV1cclxuICAgICAgKGRvc2VxIFtbayB2XSB4XSAoZ29iamVjdC9zZXQgbSAoa2V5Zm4gaykgKHRoaXNmbiB2KSkpXHJcbiAgICAgIG0pXHJcbiAgICAgKGNvbGw/IHgpXHJcbiAgICAgKGxldCBbYXJyIChhcnJheSldIChkb3NlcSBbeCAobWFwIHRoaXNmbiB4KV0gKC5wdXNoIGFyciB4KSkgYXJyKVxyXG4gICAgIDplbHNlXHJcbiAgICAgeCkpXVxyXG4gICh0aGlzZm4geCkpKVxyXG4ifSB7OnN5bSBJQ2h1bmtlZE5leHQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWNjZXNzaW5nIHRoZSBjaHVua3Mgb2YgYSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWNodW5rZWQtbmV4dCl9IHs6c3ltIGludGVycG9zZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCBzZXBhcmF0ZWQgYnkgc2VwLlxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbc2VwXSBbc2VwIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRlcnBvc2VcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIHNlcGFyYXRlZCBieSBzZXAuXFxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbc2VwXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtzdGFydGVkICh2b2xhdGlsZSEgZmFsc2UpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAoaWZcclxuICAgICAgIEBzdGFydGVkXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3NlcHIgKHJmIHJlc3VsdCBzZXApXVxyXG4gICAgICAgIChpZiAocmVkdWNlZD8gc2Vwcikgc2VwciAocmYgc2VwciBpbnB1dCkpKVxyXG4gICAgICAgKGRvICh2cmVzZXQhIHN0YXJ0ZWQgdHJ1ZSkgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSkpXHJcbiAoW3NlcCBjb2xsXSAoZHJvcCAxIChpbnRlcmxlYXZlIChyZXBlYXQgc2VwKSBjb2xsKSkpKVxyXG4ifSB7OnN5bSBkZXJlZiwgOm1ldGEgezpkb2MgIkFsc28gcmVhZGVyIG1hY3JvOiBAdmFyL0BhdG9tL0BkZWxheS4gUmV0dXJucyB0aGVcbiAgIG1vc3QtcmVjZW50bHktY29tbWl0dGVkIHZhbHVlIG9mIHJlZi4gV2hlbiBhcHBsaWVkIHRvIGEgdmFyXG4gICBvciBhdG9tLCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLiBXaGVuIGFwcGxpZWQgdG8gYSBkZWxheSwgZm9yY2VzXG4gICBpdCBpZiBub3QgYWxyZWFkeSBmb3JjZWQuIFNlZSBhbHNvIC0gcmVhbGl6ZWQ/LiIsIDphcmdsaXN0cyAoW29dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXJlZlxyXG4gXCJBbHNvIHJlYWRlciBtYWNybzogQHZhci9AYXRvbS9AZGVsYXkuIFJldHVybnMgdGhlXFxuICAgbW9zdC1yZWNlbnRseS1jb21taXR0ZWQgdmFsdWUgb2YgcmVmLiBXaGVuIGFwcGxpZWQgdG8gYSB2YXJcXG4gICBvciBhdG9tLCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLiBXaGVuIGFwcGxpZWQgdG8gYSBkZWxheSwgZm9yY2VzXFxuICAgaXQgaWYgbm90IGFscmVhZHkgZm9yY2VkLiBTZWUgYWxzbyAtIHJlYWxpemVkPy5cIlxyXG4gW29dXHJcbiAoLWRlcmVmIG8pKVxyXG4ifSB7OnN5bSBhc3NvYywgOm1ldGEgezpkb2MgImFzc29jW2lhdGVdLiBXaGVuIGFwcGxpZWQgdG8gYSBtYXAsIHJldHVybnMgYSBuZXcgbWFwIG9mIHRoZVxuICAgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdCBjb250YWlucyB0aGUgbWFwcGluZyBvZiBrZXkocykgdG9cbiAgIHZhbChzKS4gV2hlbiBhcHBsaWVkIHRvIGEgdmVjdG9yLCByZXR1cm5zIGEgbmV3IHZlY3RvciB0aGF0XG4gICBjb250YWlucyB2YWwgYXQgaW5kZXguIE5vdGUgLSBpbmRleCBtdXN0IGJlIDw9IChjb3VudCB2ZWN0b3IpLiIsIDphcmdsaXN0cyBbW2NvbGwgayB2XSBbY29sbCBrIHYgJiBrdnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3NvY1xyXG4gXCJhc3NvY1tpYXRlXS4gV2hlbiBhcHBsaWVkIHRvIGEgbWFwLCByZXR1cm5zIGEgbmV3IG1hcCBvZiB0aGVcXG4gICBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0IGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGtleShzKSB0b1xcbiAgIHZhbChzKS4gV2hlbiBhcHBsaWVkIHRvIGEgdmVjdG9yLCByZXR1cm5zIGEgbmV3IHZlY3RvciB0aGF0XFxuICAgY29udGFpbnMgdmFsIGF0IGluZGV4LiBOb3RlIC0gaW5kZXggbXVzdCBiZSA8PSAoY291bnQgdmVjdG9yKS5cIlxyXG4gKFtjb2xsIGsgdl1cclxuICAoaWZcclxuICAgKGltcGxlbWVudHM/IElBc3NvY2lhdGl2ZSBjb2xsKVxyXG4gICAoLWFzc29jIGNvbGwgayB2KVxyXG4gICAoaWYtbm90IChuaWw/IGNvbGwpICgtYXNzb2MgY29sbCBrIHYpIChhcnJheS1tYXAgayB2KSkpKVxyXG4gKFtjb2xsIGsgdiAmIGt2c11cclxuICAobGV0XHJcbiAgIFtyZXQgKGFzc29jIGNvbGwgayB2KV1cclxuICAgKGlmIGt2cyAocmVjdXIgcmV0IChmaXJzdCBrdnMpIChzZWNvbmQga3ZzKSAobm5leHQga3ZzKSkgcmV0KSkpKVxyXG4ifSB7OnN5bSB0cmFuc2llbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3LCB0cmFuc2llbnQgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbiwgaW4gY29uc3RhbnQgdGltZS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNpZW50XHJcbiBcIlJldHVybnMgYSBuZXcsIHRyYW5zaWVudCB2ZXJzaW9uIG9mIHRoZSBjb2xsZWN0aW9uLCBpbiBjb25zdGFudCB0aW1lLlwiXHJcbiBbY29sbF1cclxuICgtYXMtdHJhbnNpZW50IGNvbGwpKVxyXG4ifSB7OnN5bSAtZGlzam9pbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHRoYXQgZG9lcyBub3QgY29udGFpbiB2LiIsIDphcmdsaXN0cyAoW2NvbGwgdl0pfSwgOnByb3RvY29sIElTZXR9IHs6c3ltIGNodW5rLWNvbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2h1bmsgcmVzdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNodW5rLWNvbnNcclxuIFtjaHVuayByZXN0XVxyXG4gKGlmICh6ZXJvPyAoLWNvdW50IGNodW5rKSkgcmVzdCAoQ2h1bmtlZENvbnMuIGNodW5rIHJlc3QgbmlsIG5pbCkpKVxyXG4ifSB7OnN5bSBjb21wYXJhdG9yLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBKYXZhU2NyaXB0IGNvbXBhdGlibGUgY29tcGFyYXRvciBiYXNlZCB1cG9uIHByZWQuIiwgOmFyZ2xpc3RzIChbcHJlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhcmF0b3JcclxuIFwiUmV0dXJucyBhbiBKYXZhU2NyaXB0IGNvbXBhdGlibGUgY29tcGFyYXRvciBiYXNlZCB1cG9uIHByZWQuXCJcclxuIFtwcmVkXVxyXG4gKGZuIFt4IHldIChjb25kIChwcmVkIHggeSkgLTEgKHByZWQgeSB4KSAxIDplbHNlIDApKSlcclxuIn0gezpzeW0gcHJpbnQtcHJlZml4LW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcmVmaXggbSBwcmludC1vbmUgd3JpdGVyIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1wcmVmaXgtbWFwXHJcbiBbcHJlZml4IG0gcHJpbnQtb25lIHdyaXRlciBvcHRzXVxyXG4gKHByLXNlcXVlbnRpYWwtd3JpdGVyXHJcbiAgd3JpdGVyXHJcbiAgKGZuXHJcbiAgIFtlIHcgb3B0c11cclxuICAgKGRvXHJcbiAgICAocHJpbnQtb25lIChrZXkgZSkgdyBvcHRzKVxyXG4gICAgKC13cml0ZSB3IFxcc3BhY2UpXHJcbiAgICAocHJpbnQtb25lICh2YWwgZSkgdyBvcHRzKSkpXHJcbiAgKHN0ciBwcmVmaXggXCJ7XCIpXHJcbiAgXCIsIFwiXHJcbiAgXCJ9XCJcclxuICBvcHRzXHJcbiAgKHNlcSBtKSkpXHJcbiJ9IHs6c3ltIHNvcnRlZC1tYXAsIDptZXRhIHs6ZG9jICJrZXl2YWwgPT4ga2V5IHZhbFxuICBSZXR1cm5zIGEgbmV3IHNvcnRlZCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy4iLCA6YXJnbGlzdHMgW1smIGtleXZhbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0ZWQtbWFwXHJcbiBcImtleXZhbCA9PiBrZXkgdmFsXFxuICBSZXR1cm5zIGEgbmV3IHNvcnRlZCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy5cIlxyXG4gKFsmIGtleXZhbHNdXHJcbiAgKGxvb3BcclxuICAgW2luIChzZXEga2V5dmFscykgb3V0ICguLUVNUFRZIFBlcnNpc3RlbnRUcmVlTWFwKV1cclxuICAgKGlmIGluIChyZWN1ciAobm5leHQgaW4pIChhc3NvYyBvdXQgKGZpcnN0IGluKSAoc2Vjb25kIGluKSkpIG91dCkpKSlcclxuIn0gezpzeW0gZHJvcC13aGlsZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIHN0YXJ0aW5nIGZyb20gdGhlXG4gIGZpcnN0IGl0ZW0gZm9yIHdoaWNoIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCBmYWxzZS4gIFJldHVybnMgYVxuICBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1twcmVkXSBbcHJlZCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZHJvcC13aGlsZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBzdGFydGluZyBmcm9tIHRoZVxcbiAgZmlyc3QgaXRlbSBmb3Igd2hpY2ggKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIGZhbHNlLiAgUmV0dXJucyBhXFxuICBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtwcmVkXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtkYSAodm9sYXRpbGUhIHRydWUpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZHJvcD8gQGRhXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGFuZCBkcm9wPyAocHJlZCBpbnB1dCkpXHJcbiAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgKGRvICh2cmVzZXQhIGRhIG5pbCkgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSkpKVxyXG4gKFtwcmVkIGNvbGxdXHJcbiAgKGxldFxyXG4gICBbc3RlcFxyXG4gICAgKGZuXHJcbiAgICAgW3ByZWQgY29sbF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgIChpZiAoYW5kIHMgKHByZWQgKGZpcnN0IHMpKSkgKHJlY3VyIHByZWQgKHJlc3QgcykpIHMpKSldXHJcbiAgIChsYXp5LXNlcSAoc3RlcCBwcmVkIGNvbGwpKSkpKVxyXG4ifSB7OnN5bSBJV3JpdGVyLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHdyaXRpbmcuIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGJ5IFN0cmluZ0J1ZmZlcldyaXRlci4ifSwgOm1ldGhvZHMgKC1mbHVzaCAtd3JpdGUpfSB7OnN5bSByZWFsaXplZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBoYXMgYmVlbiBwcm9kdWNlZCBmb3IgYSBkZWxheSBvciBsYXp5IHNlcXVlbmNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFsaXplZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaGFzIGJlZW4gcHJvZHVjZWQgZm9yIGEgZGVsYXkgb3IgbGF6eSBzZXF1ZW5jZS5cIlxyXG4gW3hdXHJcbiAoLXJlYWxpemVkPyB4KSlcclxuIn0gezpzeW0gKnByaW50LWZuKiwgOm1ldGEgezpkb2MgIkVhY2ggcnVudGltZSBlbnZpcm9ubWVudCBwcm92aWRlcyBhIGRpZmZlcmVudCB3YXkgdG8gcHJpbnQgb3V0cHV0LlxuICBXaGF0ZXZlciBmdW5jdGlvbiAqcHJpbnQtZm4qIGlzIGJvdW5kIHRvIHdpbGwgYmUgcGFzc2VkIGFueVxuICBTdHJpbmdzIHdoaWNoIHNob3VsZCBiZSBwcmludGVkLiJ9LCA6c291cmNlICIoZGVmb25jZSAqcHJpbnQtZm4qIG5pbClcclxuIn0gezpzeW0gY29tcGFyZSwgOm1ldGEgezpkb2MgIkNvbXBhcmF0b3IuIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyXG4gIHdoZW4geCBpcyBsb2dpY2FsbHkgJ2xlc3MgdGhhbicsICdlcXVhbCB0bycsIG9yICdncmVhdGVyIHRoYW4nXG4gIHkuIFVzZXMgSUNvbXBhcmFibGUgaWYgYXZhaWxhYmxlIGFuZCBnb29nbGUuYXJyYXkuZGVmYXVsdENvbXBhcmUgZm9yIG9iamVjdHNcbiBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzcGVjaWFsLWNhc2VzIG5pbCB0byBiZSBsZXNzIHRoYW4gYW55IG90aGVyIG9iamVjdC4iLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYXJlXHJcbiBcIkNvbXBhcmF0b3IuIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyXFxuICB3aGVuIHggaXMgbG9naWNhbGx5ICdsZXNzIHRoYW4nLCAnZXF1YWwgdG8nLCBvciAnZ3JlYXRlciB0aGFuJ1xcbiAgeS4gVXNlcyBJQ29tcGFyYWJsZSBpZiBhdmFpbGFibGUgYW5kIGdvb2dsZS5hcnJheS5kZWZhdWx0Q29tcGFyZSBmb3Igb2JqZWN0c1xcbiBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzcGVjaWFsLWNhc2VzIG5pbCB0byBiZSBsZXNzIHRoYW4gYW55IG90aGVyIG9iamVjdC5cIlxyXG4gW3ggeV1cclxuIChjb25kXHJcbiAgKGlkZW50aWNhbD8geCB5KVxyXG4gIDBcclxuICAobmlsPyB4KVxyXG4gIC0xXHJcbiAgKG5pbD8geSlcclxuICAxXHJcbiAgKG51bWJlcj8geClcclxuICAoaWZcclxuICAgKG51bWJlcj8geSlcclxuICAgKGdhcnJheS9kZWZhdWx0Q29tcGFyZSB4IHkpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJDYW5ub3QgY29tcGFyZSBcIiB4IFwiIHRvIFwiIHkpKSkpXHJcbiAgKHNhdGlzZmllcz8gSUNvbXBhcmFibGUgeClcclxuICAoLWNvbXBhcmUgeCB5KVxyXG4gIDplbHNlXHJcbiAgKGlmXHJcbiAgIChhbmRcclxuICAgIChvciAoc3RyaW5nPyB4KSAoYXJyYXk/IHgpICh0cnVlPyB4KSAoZmFsc2U/IHgpKVxyXG4gICAgKGlkZW50aWNhbD8gKHR5cGUgeCkgKHR5cGUgeSkpKVxyXG4gICAoZ2FycmF5L2RlZmF1bHRDb21wYXJlIHggeSlcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkNhbm5vdCBjb21wYXJlIFwiIHggXCIgdG8gXCIgeSkpKSkpKVxyXG4ifSB7OnN5bSBjb21wbGVtZW50LCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmbiBmIGFuZCByZXR1cm5zIGEgZm4gdGhhdCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgZixcbiAgaGFzIHRoZSBzYW1lIGVmZmVjdHMsIGlmIGFueSwgYW5kIHJldHVybnMgdGhlIG9wcG9zaXRlIHRydXRoIHZhbHVlLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wbGVtZW50XHJcbiBcIlRha2VzIGEgZm4gZiBhbmQgcmV0dXJucyBhIGZuIHRoYXQgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGYsXFxuICBoYXMgdGhlIHNhbWUgZWZmZWN0cywgaWYgYW55LCBhbmQgcmV0dXJucyB0aGUgb3Bwb3NpdGUgdHJ1dGggdmFsdWUuXCJcclxuIFtmXVxyXG4gKGZuXHJcbiAgKFtdIChub3QgKGYpKSlcclxuICAoW3hdIChub3QgKGYgeCkpKVxyXG4gIChbeCB5XSAobm90IChmIHggeSkpKVxyXG4gIChbeCB5ICYgenNdIChub3QgKGFwcGx5IGYgeCB5IHpzKSkpKSlcclxuIn0gezpzeW0gLWFzc29jISwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgdHJhbnNpZW50IGNvbGxlY3Rpb24gb2YgdGNvbGwgd2l0aCBhIG1hcHBpbmcgZnJvbSBrZXkgdG9cbiAgICAgdmFsIGFkZGVkIHRvIGl0LiIsIDphcmdsaXN0cyAoW3Rjb2xsIGtleSB2YWxdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50QXNzb2NpYXRpdmV9IHs6c3ltICpwcmludC1kdXAqLCA6bWV0YSB7OmRvYyAiV2hlbiBzZXQgdG8gbG9naWNhbCB0cnVlLCBvYmplY3RzIHdpbGwgYmUgcHJpbnRlZCBpbiBhIHdheSB0aGF0IHByZXNlcnZlc1xuICB0aGVpciB0eXBlIHdoZW4gcmVhZCBpbiBsYXRlci5cblxuICBEZWZhdWx0cyB0byBmYWxzZS4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtZHVwKiBmYWxzZSlcclxuIn0gezpzeW0gc3RyaW5nLWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gc3RyaW5nLWl0ZXIgW3hdIChTdHJpbmdJdGVyLiB4IDApKVxyXG4ifSB7OnN5bSAta2V5LT5qcywgOm1ldGEgezpkb2MgIlRyYW5zZm9ybXMgbWFwIGtleXMgdG8gdmFsaWQgSmF2YVNjcmlwdCBrZXlzLiBBcmJpdHJhcnkga2V5cyBhcmVcbiAgZW5jb2RlZCB0byB0aGVpciBzdHJpbmcgcmVwcmVzZW50YXRpb24gdmlhIChwci1zdHIgeCkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgSUVuY29kZUpTfSB7OnN5bSBJRGVyZWYsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGRlcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkgdG8gYSByZWZlcmVuY2UuIn0sIDptZXRob2RzICgtZGVyZWYpfSB7OnN5bSBzZXF1ZW5jZSwgOm1ldGEgezpkb2MgIkNvZXJjZXMgY29sbCB0byBhIChwb3NzaWJseSBlbXB0eSkgc2VxdWVuY2UsIGlmIGl0IGlzIG5vdCBhbHJlYWR5XG4gIG9uZS4gV2lsbCBub3QgZm9yY2UgYSBsYXp5IHNlcS4gKHNlcXVlbmNlIG5pbCkgeWllbGRzICgpLCBXaGVuIGFcbiAgdHJhbnNkdWNlciBpcyBzdXBwbGllZCwgcmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgYXBwbGljYXRpb25zIG9mXG4gIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGl0ZW1zIGluIGNvbGwocyksIGkuZS4gdG8gdGhlIHNldCBvZiBmaXJzdFxuICBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IHRoZSBzZXQgb2Ygc2Vjb25kXG4gIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXMgZXhoYXVzdGVkLiAgQW55XG4gIHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gVGhlIHRyYW5zZm9ybSBzaG91bGQgYWNjZXB0XG4gIG51bWJlci1vZi1jb2xscyBhcmd1bWVudHMiLCA6YXJnbGlzdHMgW1tjb2xsXSBbeGZvcm0gY29sbF0gW3hmb3JtIGNvbGwgJiBjb2xsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlcXVlbmNlXHJcbiBcIkNvZXJjZXMgY29sbCB0byBhIChwb3NzaWJseSBlbXB0eSkgc2VxdWVuY2UsIGlmIGl0IGlzIG5vdCBhbHJlYWR5XFxuICBvbmUuIFdpbGwgbm90IGZvcmNlIGEgbGF6eSBzZXEuIChzZXF1ZW5jZSBuaWwpIHlpZWxkcyAoKSwgV2hlbiBhXFxuICB0cmFuc2R1Y2VyIGlzIHN1cHBsaWVkLCByZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBhcHBsaWNhdGlvbnMgb2ZcXG4gIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGl0ZW1zIGluIGNvbGwocyksIGkuZS4gdG8gdGhlIHNldCBvZiBmaXJzdFxcbiAgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSB0aGUgc2V0IG9mIHNlY29uZFxcbiAgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpcyBleGhhdXN0ZWQuICBBbnlcXG4gIHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gVGhlIHRyYW5zZm9ybSBzaG91bGQgYWNjZXB0XFxuICBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzXCJcclxuIChbY29sbF0gKGlmIChzZXE/IGNvbGwpIGNvbGwgKG9yIChzZXEgY29sbCkgKCkpKSlcclxuIChbeGZvcm0gY29sbF1cclxuICAob3JcclxuICAgKGNodW5rSXRlcmF0b3JTZXEgKC5jcmVhdGUgVHJhbnNmb3JtZXJJdGVyYXRvciB4Zm9ybSAoaXRlciBjb2xsKSkpXHJcbiAgICgpKSlcclxuIChbeGZvcm0gY29sbCAmIGNvbGxzXVxyXG4gIChvclxyXG4gICAoY2h1bmtJdGVyYXRvclNlcVxyXG4gICAgKC5jcmVhdGVNdWx0aVxyXG4gICAgIFRyYW5zZm9ybWVySXRlcmF0b3JcclxuICAgICB4Zm9ybVxyXG4gICAgIChtYXAgaXRlciAoY29ucyBjb2xsIGNvbGxzKSkpKVxyXG4gICAoKSkpKVxyXG4ifSB7OnN5bSBjb25zdGFudGx5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uc3RhbnRseVxyXG4gXCJSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB4LlwiXHJcbiBbeF1cclxuIChmbiBbJiBhcmdzXSB4KSlcclxuIn0gezpzeW0gY2h1bmtlZC1zZXEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbdmVjIGkgb2ZmXSBbdmVjIG5vZGUgaSBvZmZdIFt2ZWMgbm9kZSBpIG9mZiBtZXRhXV19LCA6c291cmNlICIoZGVmblxyXG4gY2h1bmtlZC1zZXFcclxuIChbdmVjIGkgb2ZmXSAoQ2h1bmtlZFNlcS4gdmVjIChhcnJheS1mb3IgdmVjIGkpIGkgb2ZmIG5pbCBuaWwpKVxyXG4gKFt2ZWMgbm9kZSBpIG9mZl0gKENodW5rZWRTZXEuIHZlYyBub2RlIGkgb2ZmIG5pbCBuaWwpKVxyXG4gKFt2ZWMgbm9kZSBpIG9mZiBtZXRhXSAoQ2h1bmtlZFNlcS4gdmVjIG5vZGUgaSBvZmYgbWV0YSBuaWwpKSlcclxuIn0gezpzeW0gSVNvcnRlZCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhIGNvbGxlY3Rpb24gd2hpY2ggY2FuIHJlcHJlc2VudCB0aGVpciBpdGVtc1xuICBpbiBhIHNvcnRlZCBtYW5uZXIuICJ9LCA6bWV0aG9kcyAoLWNvbXBhcmF0b3IgLWVudHJ5LWtleSAtc29ydGVkLXNlcSAtc29ydGVkLXNlcS1mcm9tKX0gezpzeW0gbWFrZS1hcnJheSwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhIEphdmFTY3JpcHQgYXJyYXkgb2YgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLiBBY2NlcHRzIGlnbm9yZWRcbiAgdHlwZSBhcmd1bWVudCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENsb2p1cmUuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlZmZpY2llbnRcbiAgd2F5IHRvIGFsbG9jYXRlIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5cyBpbiBKYXZhU2NyaXB0OyBhcyBzdWNoLCB0aGlzIGZ1bmN0aW9uXG4gIHdpbGwgcnVuIGluIHBvbHlub21pYWwgdGltZSB3aGVuIGNhbGxlZCB3aXRoIDMgb3IgbW9yZSBhcmd1bWVudHMuIiwgOmFyZ2xpc3RzIFtbc2l6ZV0gW3R5cGUgc2l6ZV0gW3R5cGUgc2l6ZSAmIG1vcmUtc2l6ZXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWtlLWFycmF5XHJcbiBcIkNvbnN0cnVjdCBhIEphdmFTY3JpcHQgYXJyYXkgb2YgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLiBBY2NlcHRzIGlnbm9yZWRcXG4gIHR5cGUgYXJndW1lbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDbG9qdXJlLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZWZmaWNpZW50XFxuICB3YXkgdG8gYWxsb2NhdGUgbXVsdGktZGltZW5zaW9uYWwgYXJyYXlzIGluIEphdmFTY3JpcHQ7IGFzIHN1Y2gsIHRoaXMgZnVuY3Rpb25cXG4gIHdpbGwgcnVuIGluIHBvbHlub21pYWwgdGltZSB3aGVuIGNhbGxlZCB3aXRoIDMgb3IgbW9yZSBhcmd1bWVudHMuXCJcclxuIChbc2l6ZV0gKGpzL0FycmF5LiBzaXplKSlcclxuIChbdHlwZSBzaXplXSAobWFrZS1hcnJheSBzaXplKSlcclxuIChbdHlwZSBzaXplICYgbW9yZS1zaXplc11cclxuICAobGV0XHJcbiAgIFtkaW1zIG1vcmUtc2l6ZXMgZGltYXJyYXkgKG1ha2UtYXJyYXkgc2l6ZSldXHJcbiAgIChkb3RpbWVzXHJcbiAgICBbaSAoYWxlbmd0aCBkaW1hcnJheSldXHJcbiAgICAoYXNldCBkaW1hcnJheSBpIChhcHBseSBtYWtlLWFycmF5IG5pbCBkaW1zKSkpXHJcbiAgIGRpbWFycmF5KSkpXHJcbiJ9IHs6c3ltIHNob3J0cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBzaG9ydHMgW3hdIHgpXHJcbiJ9IHs6c3ltICp1bmNoZWNrZWQtaWYqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqdW5jaGVja2VkLWlmKiBmYWxzZSlcclxuIn0gezpzeW0gZW5hYmxlLWNvbnNvbGUtcHJpbnQhLCA6bWV0YSB7OmRvYyAiU2V0ICpwcmludC1mbiogdG8gY29uc29sZS5sb2ciLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbmFibGUtY29uc29sZS1wcmludCFcclxuIFwiU2V0ICpwcmludC1mbiogdG8gY29uc29sZS5sb2dcIlxyXG4gW11cclxuIChzZXQhICpwcmludC1uZXdsaW5lKiBmYWxzZSlcclxuIChzZXQtcHJpbnQtZm4hXHJcbiAgKGZuXHJcbiAgIFtdXHJcbiAgIChsZXRcclxuICAgIFt4cyAoanMtYXJndW1lbnRzKV1cclxuICAgICguYXBwbHkgKC4tbG9nIGpzL2NvbnNvbGUpIGpzL2NvbnNvbGUgKGdhcnJheS9jbG9uZSB4cykpKSkpXHJcbiAoc2V0LXByaW50LWVyci1mbiFcclxuICAoZm5cclxuICAgW11cclxuICAgKGxldFxyXG4gICAgW3hzIChqcy1hcmd1bWVudHMpXVxyXG4gICAgKC5hcHBseSAoLi1lcnJvciBqcy9jb25zb2xlKSBqcy9jb25zb2xlIChnYXJyYXkvY2xvbmUgeHMpKSkpKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSAtZmx1c2gsIDptZXRhIHs6ZG9jICJGbHVzaCB3cml0ZXIuIiwgOmFyZ2xpc3RzIChbd3JpdGVyXSl9LCA6cHJvdG9jb2wgSVdyaXRlcn0gezpzeW0gY29tcGxldGluZywgOm1ldGEgezpkb2MgIlRha2VzIGEgcmVkdWNpbmcgZnVuY3Rpb24gZiBvZiAyIGFyZ3MgYW5kIHJldHVybnMgYSBmbiBzdWl0YWJsZSBmb3JcbiAgdHJhbnNkdWNlIGJ5IGFkZGluZyBhbiBhcml0eS0xIHNpZ25hdHVyZSB0aGF0IGNhbGxzIGNmIChkZWZhdWx0IC1cbiAgaWRlbnRpdHkpIG9uIHRoZSByZXN1bHQgYXJndW1lbnQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY2ZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wbGV0aW5nXHJcbiBcIlRha2VzIGEgcmVkdWNpbmcgZnVuY3Rpb24gZiBvZiAyIGFyZ3MgYW5kIHJldHVybnMgYSBmbiBzdWl0YWJsZSBmb3JcXG4gIHRyYW5zZHVjZSBieSBhZGRpbmcgYW4gYXJpdHktMSBzaWduYXR1cmUgdGhhdCBjYWxscyBjZiAoZGVmYXVsdCAtXFxuICBpZGVudGl0eSkgb24gdGhlIHJlc3VsdCBhcmd1bWVudC5cIlxyXG4gKFtmXSAoY29tcGxldGluZyBmIGlkZW50aXR5KSlcclxuIChbZiBjZl0gKGZuIChbXSAoZikpIChbeF0gKGNmIHgpKSAoW3ggeV0gKGYgeCB5KSkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLW5lZ2F0ZS1pbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLW5lZ2F0ZS1pbnQgW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLW5lZ2F0ZS1pbnQgeCkpXHJcbiJ9IHs6c3ltIGhhc2gtdW5vcmRlcmVkLWNvbGwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBoYXNoIGNvZGUsIGNvbnNpc3RlbnQgd2l0aCA9LCBmb3IgYW4gZXh0ZXJuYWwgdW5vcmRlcmVkXG4gICBjb2xsZWN0aW9uIGltcGxlbWVudGluZyBJdGVyYWJsZS4gRm9yIG1hcHMsIHRoZSBpdGVyYXRvciBzaG91bGRcbiAgIHJldHVybiBtYXAgZW50cmllcyB3aG9zZSBoYXNoIGlzIGNvbXB1dGVkIGFzXG4gICAgIChoYXNoLW9yZGVyZWQtY29sbCBbayB2XSkuXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtdW5vcmRlcmVkLWNvbGxcclxuIFwiUmV0dXJucyB0aGUgaGFzaCBjb2RlLCBjb25zaXN0ZW50IHdpdGggPSwgZm9yIGFuIGV4dGVybmFsIHVub3JkZXJlZFxcbiAgIGNvbGxlY3Rpb24gaW1wbGVtZW50aW5nIEl0ZXJhYmxlLiBGb3IgbWFwcywgdGhlIGl0ZXJhdG9yIHNob3VsZFxcbiAgIHJldHVybiBtYXAgZW50cmllcyB3aG9zZSBoYXNoIGlzIGNvbXB1dGVkIGFzXFxuICAgICAoaGFzaC1vcmRlcmVkLWNvbGwgW2sgdl0pLlxcbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy5cIlxyXG4gW2NvbGxdXHJcbiAobG9vcFxyXG4gIFtuIDAgaGFzaC1jb2RlIDAgY29sbCAoc2VxIGNvbGwpXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gY29sbClcclxuICAgKHJlY3VyXHJcbiAgICAoaW5jIG4pXHJcbiAgICAoYml0LW9yICgrIGhhc2gtY29kZSAoaGFzaCAoZmlyc3QgY29sbCkpKSAwKVxyXG4gICAgKG5leHQgY29sbCkpXHJcbiAgIChtaXgtY29sbGVjdGlvbi1oYXNoIGhhc2gtY29kZSBuKSkpKVxyXG4ifSB7OnN5bSByZXBlYXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSAoaW5maW5pdGUhLCBvciBsZW5ndGggbiBpZiBzdXBwbGllZCkgc2VxdWVuY2Ugb2YgeHMuIiwgOmFyZ2xpc3RzIFtbeF0gW24geF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGVhdFxyXG4gXCJSZXR1cm5zIGEgbGF6eSAoaW5maW5pdGUhLCBvciBsZW5ndGggbiBpZiBzdXBwbGllZCkgc2VxdWVuY2Ugb2YgeHMuXCJcclxuIChbeF0gKFJlcGVhdC4gbmlsIC0xIHggbmlsIG5pbCkpXHJcbiAoW24geF0gKGlmIChwb3M/IG4pIChSZXBlYXQuIG5pbCBuIHggbmlsIG5pbCkgKC4tRU1QVFkgTGlzdCkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWluYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtaW5jIFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1pbmMgeCkpXHJcbiJ9IHs6c3ltIG50aG5leHQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudGggbmV4dCBvZiBjb2xsLCAoc2VxIGNvbGwpIHdoZW4gbiBpcyAwLiIsIDphcmdsaXN0cyAoW2NvbGwgbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG50aG5leHRcclxuIFwiUmV0dXJucyB0aGUgbnRoIG5leHQgb2YgY29sbCwgKHNlcSBjb2xsKSB3aGVuIG4gaXMgMC5cIlxyXG4gW2NvbGwgbl1cclxuIChsb29wXHJcbiAgW24gbiB4cyAoc2VxIGNvbGwpXVxyXG4gIChpZiAoYW5kIHhzIChwb3M/IG4pKSAocmVjdXIgKGRlYyBuKSAobmV4dCB4cykpIHhzKSkpXHJcbiJ9IHs6c3ltIGdldC12YWxpZGF0b3IsIDptZXRhIHs6ZG9jICJHZXRzIHRoZSB2YWxpZGF0b3ItZm4gZm9yIGEgdmFyL3JlZi9hZ2VudC9hdG9tLiIsIDphcmdsaXN0cyAoW2lyZWZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtdmFsaWRhdG9yXHJcbiBcIkdldHMgdGhlIHZhbGlkYXRvci1mbiBmb3IgYSB2YXIvcmVmL2FnZW50L2F0b20uXCJcclxuIFtpcmVmXVxyXG4gKC4tdmFsaWRhdG9yIGlyZWYpKVxyXG4ifSB7OnN5bSBudW1iZXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IG51bWJlci4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtYmVyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgbnVtYmVyLlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvbnVtYmVyPyB4KSlcclxuIn0gezpzeW0gLWNvbmohLCA6bWV0YSB7OmRvYyAiQWRkcyB2YWx1ZSB2YWwgdG8gdGNvbGwgYW5kIHJldHVybnMgdGNvbGwuIiwgOmFyZ2xpc3RzIChbdGNvbGwgdmFsXSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudENvbGxlY3Rpb259IHs6c3ltIGNodW5rLW5leHQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNodW5rLW5leHRcclxuIFtzXVxyXG4gKGlmXHJcbiAgKGltcGxlbWVudHM/IElDaHVua2VkTmV4dCBzKVxyXG4gICgtY2h1bmtlZC1uZXh0IHMpXHJcbiAgKHNlcSAoLWNodW5rZWQtcmVzdCBzKSkpKVxyXG4ifSB7OnN5bSBwcmludC1zdHIsIDptZXRhIHs6ZG9jICJwcmludCB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0IiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtc3RyXHJcbiBcInByaW50IHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXRcIlxyXG4gWyYgb2Jqc11cclxuIChwci1zdHItd2l0aC1vcHRzIG9ianMgKGFzc29jIChwci1vcHRzKSA6cmVhZGFibHkgZmFsc2UpKSlcclxuIn0gezpzeW0gbm90LWFueT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGZhbHNlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgYW55IHggaW4gY29sbCxcbiAgZWxzZSB0cnVlLiIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vdC1hbnk/XHJcbiBcIlJldHVybnMgZmFsc2UgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBhbnkgeCBpbiBjb2xsLFxcbiAgZWxzZSB0cnVlLlwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gKG5vdCAoc29tZSBwcmVkIGNvbGwpKSlcclxuIn0gezpzeW0gaW50by1hcnJheSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gYXJyYXkgd2l0aCBjb21wb25lbnRzIHNldCB0byB0aGUgdmFsdWVzIGluIGFzZXEuIE9wdGlvbmFsIHR5cGVcbiAgYXJndW1lbnQgYWNjZXB0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDbG9qdXJlLiIsIDphcmdsaXN0cyBbW2FzZXFdIFt0eXBlIGFzZXFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRvLWFycmF5XHJcbiBcIlJldHVybnMgYW4gYXJyYXkgd2l0aCBjb21wb25lbnRzIHNldCB0byB0aGUgdmFsdWVzIGluIGFzZXEuIE9wdGlvbmFsIHR5cGVcXG4gIGFyZ3VtZW50IGFjY2VwdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ2xvanVyZS5cIlxyXG4gKFthc2VxXSAoaW50by1hcnJheSBuaWwgYXNlcSkpXHJcbiAoW3R5cGUgYXNlcV0gKHJlZHVjZSAoZm4gW2EgeF0gKC5wdXNoIGEgeCkgYSkgKGFycmF5KSBhc2VxKSkpXHJcbiJ9IHs6c3ltIC1oYXNoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIG8uIiwgOmFyZ2xpc3RzIChbb10pfSwgOnByb3RvY29sIElIYXNofSB7OnN5bSBxdWFsaWZpZWQtc3ltYm9sPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgd2l0aCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdWFsaWZpZWQtc3ltYm9sP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIHdpdGggYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYm9vbGVhbiAoYW5kIChzeW1ib2w/IHgpIChuYW1lc3BhY2UgeCkgdHJ1ZSkpKVxyXG4ifSB7OnN5bSAtZGlzc29jISwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgdHJhbnNpZW50IGNvbGxlY3Rpb24gb2YgdGNvbGwgd2l0aG91dCB0aGUgbWFwcGluZyBmb3Iga2V5LiIsIDphcmdsaXN0cyAoW3Rjb2xsIGtleV0pfSwgOnByb3RvY29sIElUcmFuc2llbnRNYXB9IHs6c3ltIGNodW5rLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjYXBhY2l0eV0pfSwgOnNvdXJjZSAiKGRlZm4gY2h1bmstYnVmZmVyIFtjYXBhY2l0eV0gKENodW5rQnVmZmVyLiAobWFrZS1hcnJheSBjYXBhY2l0eSkgMCkpXHJcbiJ9IHs6c3ltIHNlcWFibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgdGhlIHNlcSBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHMiLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VxYWJsZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgdGhlIHNlcSBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHNcIlxyXG4gW3NdXHJcbiAob3IgKG5pbD8gcykgKHNhdGlzZmllcz8gSVNlcWFibGUgcykgKGFycmF5PyBzKSAoc3RyaW5nPyBzKSkpXHJcbiJ9IHs6c3ltIHN5bWJvbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgU3ltYm9sIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gc3ltYm9sPyBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBTeW1ib2xcIiBbeF0gKGluc3RhbmNlPyBTeW1ib2wgeCkpXHJcbiJ9IHs6c3ltIG0zLWhhc2gtdW5lbmNvZGVkLWNoYXJzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2luXSl9LCA6c291cmNlICIoZGVmblxyXG4gbTMtaGFzaC11bmVuY29kZWQtY2hhcnNcclxuIFtpbl1cclxuIChsZXRcclxuICBbaDFcclxuICAgKGxvb3BcclxuICAgIFtpIDEgaDEgbTMtc2VlZF1cclxuICAgIChpZlxyXG4gICAgICg8IGkgKC4tbGVuZ3RoIGluKSlcclxuICAgICAocmVjdXJcclxuICAgICAgKCsgaSAyKVxyXG4gICAgICAobTMtbWl4LUgxXHJcbiAgICAgICBoMVxyXG4gICAgICAgKG0zLW1peC1LMVxyXG4gICAgICAgIChiaXQtb3JcclxuICAgICAgICAgKC5jaGFyQ29kZUF0IGluIChkZWMgaSkpXHJcbiAgICAgICAgIChiaXQtc2hpZnQtbGVmdCAoLmNoYXJDb2RlQXQgaW4gaSkgMTYpKSkpKVxyXG4gICAgIGgxKSlcclxuICAgaDFcclxuICAgKGlmXHJcbiAgICAoPT0gKGJpdC1hbmQgKC4tbGVuZ3RoIGluKSAxKSAxKVxyXG4gICAgKGJpdC14b3IgaDEgKG0zLW1peC1LMSAoLmNoYXJDb2RlQXQgaW4gKGRlYyAoLi1sZW5ndGggaW4pKSkpKVxyXG4gICAgaDEpXVxyXG4gIChtMy1mbWl4IGgxIChpbXVsIDIgKC4tbGVuZ3RoIGluKSkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWNoYXIgW3hdIHgpXHJcbiJ9IHs6c3ltIHN5c3RlbS10aW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBoaWdoZXN0IHJlc29sdXRpb24gdGltZSBvZmZlcmVkIGJ5IGhvc3QgaW4gbWlsbGlzZWNvbmRzLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN5c3RlbS10aW1lXHJcbiBcIlJldHVybnMgaGlnaGVzdCByZXNvbHV0aW9uIHRpbWUgb2ZmZXJlZCBieSBob3N0IGluIG1pbGxpc2Vjb25kcy5cIlxyXG4gW11cclxuIChjb25kXHJcbiAgKGFuZCAoZXhpc3RzPyBqcy9wZXJmb3JtYW5jZSkgKG5vdCAobmlsPyAoLiBqcy9wZXJmb3JtYW5jZSAtbm93KSkpKVxyXG4gICgubm93IGpzL3BlcmZvcm1hbmNlKVxyXG4gIChhbmQgKGV4aXN0cz8ganMvcHJvY2VzcykgKG5vdCAobmlsPyAoLiBqcy9wcm9jZXNzIC1ocnRpbWUpKSkpXHJcbiAgKGxldFxyXG4gICBbdCAoLmhydGltZSBqcy9wcm9jZXNzKV1cclxuICAgKC8gKCsgKCogKGFnZXQgdCAwKSAxLjBFOSkgKGFnZXQgdCAxKSkgMTAwMDAwMC4wKSlcclxuICA6ZWxzZVxyXG4gICguZ2V0VGltZSAoanMvRGF0ZS4pKSkpXHJcbiJ9IHs6c3ltIC1pbnZva2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10gW3RoaXMgYV0gW3RoaXMgYSBiXSBbdGhpcyBhIGIgY10gW3RoaXMgYSBiIGMgZF0gW3RoaXMgYSBiIGMgZCBlXSBbdGhpcyBhIGIgYyBkIGUgZl0gW3RoaXMgYSBiIGMgZCBlIGYgZ10gW3RoaXMgYSBiIGMgZCBlIGYgZyBoXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaV0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgal0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbF0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbV0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gb10gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcF0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgcl0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgc10gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0XSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgcmVzdF0pfSwgOnByb3RvY29sIElGbn0gezpzeW0gY29sbD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSUNvbGxlY3Rpb24iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sbD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElDb2xsZWN0aW9uXCJcclxuIFt4XVxyXG4gKGlmIChuaWw/IHgpIGZhbHNlIChzYXRpc2ZpZXM/IElDb2xsZWN0aW9uIHgpKSlcclxuIn0gezpzeW0gZ2V0LWluLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLFxuICB3aGVyZSBrcyBpcyBhIHNlcXVlbmNlIG9mIGtleXMuIFJldHVybnMgbmlsIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQsXG4gIG9yIHRoZSBub3QtZm91bmQgdmFsdWUgaWYgc3VwcGxpZWQuIiwgOmFyZ2xpc3RzIFtbbSBrc10gW20ga3Mgbm90LWZvdW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWluXHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSxcXG4gIHdoZXJlIGtzIGlzIGEgc2VxdWVuY2Ugb2Yga2V5cy4gUmV0dXJucyBuaWwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudCxcXG4gIG9yIHRoZSBub3QtZm91bmQgdmFsdWUgaWYgc3VwcGxpZWQuXCJcclxuIHs6YWRkZWQgXCIxLjJcIiwgOnN0YXRpYyB0cnVlfVxyXG4gKFttIGtzXSAocmVkdWNlIGdldCBtIGtzKSlcclxuIChbbSBrcyBub3QtZm91bmRdXHJcbiAgKGxvb3BcclxuICAgW3NlbnRpbmVsIGxvb2t1cC1zZW50aW5lbCBtIG0ga3MgKHNlcSBrcyldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IGtzKVxyXG4gICAgKGxldFxyXG4gICAgIFttIChnZXQgbSAoZmlyc3Qga3MpIHNlbnRpbmVsKV1cclxuICAgICAoaWZcclxuICAgICAgKGlkZW50aWNhbD8gc2VudGluZWwgbSlcclxuICAgICAgbm90LWZvdW5kXHJcbiAgICAgIChyZWN1ciBzZW50aW5lbCBtIChuZXh0IGtzKSkpKVxyXG4gICAgbSkpKSlcclxuIn0gezpzeW0gZm5leHQsIDptZXRhIHs6ZG9jICJTYW1lIGFzIChmaXJzdCAobmV4dCB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBmbmV4dCBcIlNhbWUgYXMgKGZpcnN0IChuZXh0IHgpKVwiIFtjb2xsXSAoZmlyc3QgKG5leHQgY29sbCkpKVxyXG4ifSB7OnN5bSBJTGlzdCwgOm1ldGEgezpkb2MgIk1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyBhIHBlcnNpc3RlbnQgbGlzdCJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gLXZhbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBtYXAgZW50cnkuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElNYXBFbnRyeX0gezpzeW0gYnl0ZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYnl0ZXMgW3hdIHgpXHJcbiJ9IHs6c3ltIC1zZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9mIG8sIG9yIG5pbCBpZiBvIGlzIGVtcHR5LiIsIDphcmdsaXN0cyAoW29dKX0sIDpwcm90b2NvbCBJU2VxYWJsZX0pLCBjbGpzLnRvb2xzLnJlYWRlci5yZWFkZXItdHlwZXMgKHs6c3ltIGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIEluZGV4aW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlciIsIDphcmdsaXN0cyBbW3Mtb3ItcmRyXSBbcy1vci1yZHIgYnVmLWxlbl0gW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGFuIEluZGV4aW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlclwiXHJcbiAoW3Mtb3ItcmRyXSAoaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciAxKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbl0gKGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbiBuaWwpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1cclxuICAoSW5kZXhpbmdQdXNoYmFja1JlYWRlci5cclxuICAgKGlmXHJcbiAgICAoc3RyaW5nPyBzLW9yLXJkcilcclxuICAgIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuKVxyXG4gICAgcy1vci1yZHIpXHJcbiAgIDFcclxuICAgMVxyXG4gICB0cnVlXHJcbiAgIG5pbFxyXG4gICAwXHJcbiAgIGZpbGUtbmFtZSkpKVxyXG4ifSB7OnN5bSBsb2ctc291cmNlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWFkZXIgZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvZy1zb3VyY2UqXHJcbiBbcmVhZGVyIGZdXHJcbiAobGV0XHJcbiAgW2J1ZmZlciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHJlYWRlcikpXVxyXG4gICh0cnlcclxuICAgKHN3YXAhXHJcbiAgICAoLi1mcmFtZXMgcmVhZGVyKVxyXG4gICAgdXBkYXRlLWluXHJcbiAgICBbOm9mZnNldF1cclxuICAgIGNvbmpcclxuICAgICguZ2V0TGVuZ3RoIGJ1ZmZlcikpXHJcbiAgIChsZXRcclxuICAgIFtyZXQgKGYpXVxyXG4gICAgKGlmXHJcbiAgICAgKGltcGxlbWVudHM/IElNZXRhIHJldClcclxuICAgICAobWVyZ2UtbWV0YSByZXQgezpzb3VyY2UgKHBlZWstc291cmNlLWxvZyBAKC4tZnJhbWVzIHJlYWRlcikpfSlcclxuICAgICByZXQpKVxyXG4gICAoZmluYWxseSAoc3dhcCEgKC4tZnJhbWVzIHJlYWRlcikgdXBkYXRlLWluIFs6b2Zmc2V0XSByZXN0KSkpKSlcclxuIn0gezpzeW0gbWVyZ2UtbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIGBvYmpgLCB3aXRoIGl0c1xubWV0YWRhdGEgbWVyZ2VkIG92ZXIgYG1gLiIsIDphcmdsaXN0cyAoW29iaiBtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2UtbWV0YVxyXG4gXCJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBgb2JqYCwgd2l0aCBpdHNcXG5tZXRhZGF0YSBtZXJnZWQgb3ZlciBgbWAuXCJcclxuIFtvYmogbV1cclxuIChsZXRcclxuICBbb3JpZy1tZXRhIChtZXRhIG9iaildXHJcbiAgKHdpdGgtbWV0YSBvYmogKG1lcmdlIG0gKGRpc3NvYyBvcmlnLW1ldGEgOnNvdXJjZSkpKSkpXHJcbiJ9IHs6c3ltIFJlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHBlZWstY2hhciByZWFkLWNoYXIpfSB7OnN5bSBzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyIiwgOmFyZ2xpc3RzIFtbcy1vci1yZHJdIFtzLW9yLXJkciBidWYtbGVuXSBbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlclwiXHJcbiAoW3Mtb3ItcmRyXSAoc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciAxKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbl1cclxuICAoc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuIG5pbCkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXVxyXG4gIChTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChpZlxyXG4gICAgKHN0cmluZz8gcy1vci1yZHIpXHJcbiAgICAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbilcclxuICAgIHMtb3ItcmRyKVxyXG4gICAxXHJcbiAgIDFcclxuICAgdHJ1ZVxyXG4gICBuaWxcclxuICAgMFxyXG4gICBmaWxlLW5hbWVcclxuICAgKGF0b20gezpidWZmZXIgKFN0cmluZ0J1ZmZlci4pLCA6b2Zmc2V0ICcoMCl9KSkpKVxyXG4ifSB7OnN5bSB1bnJlYWQsIDptZXRhIHs6ZG9jICJQdXNoZXMgYmFjayBhIHNpbmdsZSBjaGFyYWN0ZXIgb24gdG8gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlciBjaF0pfSwgOnByb3RvY29sIElQdXNoYmFja1JlYWRlcn0gezpzeW0gcGVlay1jaGFyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIFJlYWRlciB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHJlYWRlciBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBSZWFkZXJ9IHs6c3ltIElQdXNoYmFja1JlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHVucmVhZCl9IHs6c3ltIGluZGV4aW5nLXJlYWRlcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgdGhlIHJlYWRlciBzYXRpc2ZpZXMgSW5kZXhpbmdSZWFkZXIiLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGluZy1yZWFkZXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB0aGUgcmVhZGVyIHNhdGlzZmllcyBJbmRleGluZ1JlYWRlclwiXHJcbiBbcmRyXVxyXG4gKGltcGxlbWVudHM/IEluZGV4aW5nUmVhZGVyIHJkcikpXHJcbiJ9IHs6c3ltIHN0cmluZy1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgU3RyaW5nUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmciLCA6YXJnbGlzdHMgW1tzXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgU3RyaW5nUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmdcIlxyXG4gKFtzXSAoU3RyaW5nUmVhZGVyLiBzIChjb3VudCBzKSAwKSkpXHJcbiJ9IHs6c3ltIHJlYWQtY2hhciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgY2hhciBmcm9tIHRoZSBSZWFkZXIsIG5pbCBpZiB0aGUgZW5kIG9mIHN0cmVhbSBoYXMgYmVlbiByZWFjaGVkIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgUmVhZGVyfSB7OnN5bSBnZXQtY29sdW1uLW51bWJlciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9IHs6c3ltIGdldC1maWxlLW5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaWxlIG5hbWUgdGhlIHJlYWRlciBpcyByZWFkaW5nIGZyb20sIG9yIG5pbCIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSB7OnN5bSByZWFkLWxpbmUsIDptZXRhIHs6ZG9jICJSZWFkcyBhIGxpbmUgZnJvbSB0aGUgcmVhZGVyIG9yIGZyb20gKmluKiBpZiBubyByZWFkZXIgaXMgc3BlY2lmaWVkIiwgOmFyZ2xpc3RzIFtbcmRyXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1saW5lXHJcbiBcIlJlYWRzIGEgbGluZSBmcm9tIHRoZSByZWFkZXIgb3IgZnJvbSAqaW4qIGlmIG5vIHJlYWRlciBpcyBzcGVjaWZpZWRcIlxyXG4gKFtyZHJdXHJcbiAgKGxvb3BcclxuICAgW2MgKHJlYWQtY2hhciByZHIpIHMgKFN0cmluZ0J1ZmZlci4pXVxyXG4gICAoaWYgKG5ld2xpbmU/IGMpIChzdHIgcykgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSAoLmFwcGVuZCBzIGMpKSkpKSlcclxuIn0gezpzeW0gc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyIsIDphcmdsaXN0cyBbW3NdIFtzIGJ1Zi1sZW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZ1wiXHJcbiAoW3NdIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzIDEpKVxyXG4gKFtzIGJ1Zi1sZW5dXHJcbiAgKFB1c2hiYWNrUmVhZGVyLlxyXG4gICAoc3RyaW5nLXJlYWRlciBzKVxyXG4gICAob2JqZWN0LWFycmF5IGJ1Zi1sZW4pXHJcbiAgIGJ1Zi1sZW5cclxuICAgYnVmLWxlbikpKVxyXG4ifSB7OnN5bSBsaW5lLXN0YXJ0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIgYW5kIHRoZSBjdXJyZW50IGNoYXIgc3RhcnRzIGEgbmV3IGxpbmUiLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLXN0YXJ0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyIGFuZCB0aGUgY3VycmVudCBjaGFyIHN0YXJ0cyBhIG5ldyBsaW5lXCJcclxuIFtyZHJdXHJcbiAod2hlbiAoaW5kZXhpbmctcmVhZGVyPyByZHIpICg9PSAxIChnZXQtY29sdW1uLW51bWJlciByZHIpKSkpXHJcbiJ9IHs6c3ltIHNvdXJjZS1sb2dnaW5nLXJlYWRlcj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWxvZ2dpbmctcmVhZGVyP1xyXG4gW3Jkcl1cclxuIChpbnN0YW5jZT8gU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIHJkcikpXHJcbiJ9IHs6c3ltIEluZGV4aW5nUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoZ2V0LWNvbHVtbi1udW1iZXIgZ2V0LWZpbGUtbmFtZSBnZXQtbGluZS1udW1iZXIpfSB7OnN5bSBub2RlLXJlYWRhYmxlLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVhZGFibGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub2RlLXJlYWRhYmxlLXB1c2gtYmFjay1yZWFkZXJcclxuIFtyZWFkYWJsZV1cclxuIChQdXNoYmFja1JlYWRlci5cclxuICAoTm9kZVJlYWRhYmxlUmVhZGVyLiByZWFkYWJsZSBuaWwpXHJcbiAgKG9iamVjdC1hcnJheSAxKVxyXG4gIDFcclxuICAxKSlcclxuIn0gezpzeW0gZ2V0LWxpbmUtbnVtYmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9KSwgY2xqcy5lbnYgKHs6c3ltICpjb21waWxlciosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjb21waWxlciogbmlsKVxyXG4ifSB7OnN5bSBkZWZhdWx0LWNvbXBpbGVyLWVudiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3B0aW9uc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZmF1bHQtY29tcGlsZXItZW52KlxyXG4gW29wdGlvbnNdXHJcbiAobWVyZ2VcclxuICB7OmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyB7J2NsanMudXNlciB7Om5hbWUgJ2NsanMudXNlcn19LFxyXG4gICA6Y2xqcy5hbmFseXplci9jb25zdGFudC10YWJsZSB7fSxcclxuICAgOmNsanMuYW5hbHl6ZXIvZGF0YS1yZWFkZXJzIHt9LFxyXG4gICA6Y2xqcy5hbmFseXplci9leHRlcm5zXHJcbiAgICM/KDpjbGogKGV4dGVybnMvZXh0ZXJucy1tYXAgKDpleHRlcm5zLXNvdXJjZXMgb3B0aW9ucykpIDpjbGpzIG5pbCksXHJcbiAgIDpvcHRpb25zIG9wdGlvbnN9XHJcbiAgIz9AKDpjbGogWyh3aGVuIChhbmQgKD0gOm5vZGVqcyAoOnRhcmdldCBvcHRpb25zKSkgKG5vdCAoZmFsc2U/ICg6bm9kZWpzLXJ0IG9wdGlvbnMpKSkpIHs6bm9kZS1tb2R1bGUtaW5kZXggZGVwcy9uYXRpdmUtbm9kZS1tb2R1bGVzfSkgezpqcy1kZXBlbmRlbmN5LWluZGV4IChkZXBzL2pzLWRlcGVuZGVuY3ktaW5kZXggb3B0aW9ucyl9XSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LWNvbXBpbGVyLWVudiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tdIFtvcHRpb25zXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVmYXVsdC1jb21waWxlci1lbnZcclxuIChbXSAoZGVmYXVsdC1jb21waWxlci1lbnYge30pKVxyXG4gKFtvcHRpb25zXSAoYXRvbSAoZGVmYXVsdC1jb21waWxlci1lbnYqIG9wdGlvbnMpKSkpXHJcbiJ9KSwgcGFyZW4tc291cC5jb25zb2xlICh7OnN5bSBjcmVhdGUtY29uc29sZS1oaXN0b3J5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNyZWF0ZS1jb25zb2xlLWhpc3RvcnlcclxuIFtdXHJcbiAoYXRvbSB7OmN1cnJlbnQtbGluZSAwLCA6bGluZXMgW10sIDpzdGFydCAwfSkpXHJcbiJ9IHs6c3ltIGdldC1jb25zb2xlLXN0YXJ0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY29uc29sZS1zdGFydFxyXG4gWypjb25zb2xlLWhpc3RvcnldXHJcbiAoLT4gKmNvbnNvbGUtaGlzdG9yeSBkZXJlZiA6c3RhcnQpKVxyXG4ifSB7OnN5bSB1cGRhdGUtY29uc29sZS1zdGFydCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeSBzdGFydF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1jb25zb2xlLXN0YXJ0IVxyXG4gWypjb25zb2xlLWhpc3Rvcnkgc3RhcnRdXHJcbiAoc3dhcCEgKmNvbnNvbGUtaGlzdG9yeSBhc3NvYyA6c3RhcnQgc3RhcnQpKVxyXG4ifSB7OnN5bSB1cGRhdGUtY29uc29sZS1oaXN0b3J5ISwgOm1ldGEgezpkb2MgIlVwZGF0ZXMgdGhlIGNvbnNvbGUgaGlzdG9yeSBhdG9tLiIsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnkgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1jb25zb2xlLWhpc3RvcnkhXHJcbiBcIlVwZGF0ZXMgdGhlIGNvbnNvbGUgaGlzdG9yeSBhdG9tLlwiXHJcbiBbKmNvbnNvbGUtaGlzdG9yeSBsaW5lXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtbGluZSBsaW5lc119IEAqY29uc29sZS1oaXN0b3J5XVxyXG4gIChzd2FwIVxyXG4gICAqY29uc29sZS1oaXN0b3J5XHJcbiAgIChmblxyXG4gICAgW2NvbnNvbGUtaGlzdG9yeV1cclxuICAgIChsZXRcclxuICAgICBbbGluZXNcclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIChzZXEgbGluZSkgKG5vdD0gbGluZSAobGFzdCBsaW5lcykpKVxyXG4gICAgICAgKGNvbmogbGluZXMgbGluZSlcclxuICAgICAgIGxpbmVzKV1cclxuICAgICAoYXNzb2NcclxuICAgICAgY29uc29sZS1oaXN0b3J5XHJcbiAgICAgIDpjdXJyZW50LWxpbmVcclxuICAgICAgKGNvdW50IGxpbmVzKVxyXG4gICAgICA6bGluZXNcclxuICAgICAgbGluZXMpKSkpKSlcclxuIn0gezpzeW0gZ2V0LXByZXZpb3VzLWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcmV2aW91cyBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXByZXZpb3VzLWxpbmVcclxuIFwiUmV0dXJucyB0aGUgcHJldmlvdXMgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqY29uc29sZS1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtbGluZSBsaW5lc119IEAqY29uc29sZS1oaXN0b3J5XVxyXG4gIChnZXQgbGluZXMgKGRlYyBjdXJyZW50LWxpbmUpKSkpXHJcbiJ9IHs6c3ltIGdldC1uZXh0LWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbmV4dC1saW5lXHJcbiBcIlJldHVybnMgdGhlIG5leHQgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqY29uc29sZS1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtbGluZSBsaW5lc119IEAqY29uc29sZS1oaXN0b3J5XVxyXG4gIChnZXQgbGluZXMgKGluYyBjdXJyZW50LWxpbmUpKSkpXHJcbiJ9IHs6c3ltIHVwISwgOm1ldGEgezpkb2MgIkNoYW5nZXMgdGhlIGN1cnJlbnQgbGluZSBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwIVxyXG4gXCJDaGFuZ2VzIHRoZSBjdXJyZW50IGxpbmUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmNvbnNvbGUtaGlzdG9yeV1cclxuIChsZXRcclxuICBbbGluZSAoZ2V0LXByZXZpb3VzLWxpbmUgKmNvbnNvbGUtaGlzdG9yeSldXHJcbiAgKGlmXHJcbiAgIGxpbmVcclxuICAgKHN3YXAhICpjb25zb2xlLWhpc3RvcnkgdXBkYXRlIDpjdXJyZW50LWxpbmUgZGVjKVxyXG4gICAoc3dhcCEgKmNvbnNvbGUtaGlzdG9yeSBhc3NvYyA6Y3VycmVudC1saW5lIC0xKSlcclxuICBsaW5lKSlcclxuIn0gezpzeW0gZG93biEsIDptZXRhIHs6ZG9jICJDaGFuZ2VzIHRoZSBjdXJyZW50IGxpbmUgYW5kIHJldHVybnMgdGhlIG5leHQgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvd24hXHJcbiBcIkNoYW5nZXMgdGhlIGN1cnJlbnQgbGluZSBhbmQgcmV0dXJucyB0aGUgbmV4dCBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWypjb25zb2xlLWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW2xpbmUgKGdldC1uZXh0LWxpbmUgKmNvbnNvbGUtaGlzdG9yeSldXHJcbiAgKGlmXHJcbiAgIGxpbmVcclxuICAgKHN3YXAhICpjb25zb2xlLWhpc3RvcnkgdXBkYXRlIDpjdXJyZW50LWxpbmUgaW5jKVxyXG4gICAoc3dhcCFcclxuICAgICpjb25zb2xlLWhpc3RvcnlcclxuICAgIGFzc29jXHJcbiAgICA6Y3VycmVudC1saW5lXHJcbiAgICAoLT4gQCpjb25zb2xlLWhpc3RvcnkgOmxpbmVzIGNvdW50KSkpXHJcbiAgbGluZSkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jICh7OnN5bSBQdWIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChzdWIqIHVuc3ViKiB1bnN1Yi1hbGwqKX0gezpzeW0gcmVkdWNlLCA6bWV0YSB7OmRvYyAiZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAyIGFyZ3VtZW50cy4gUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZ1xuICB0aGUgc2luZ2xlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIGluaXQgYW5kIHRoZSBmaXJzdCBpdGVtIGZyb20gdGhlXG4gIGNoYW5uZWwsIHRoZW4gYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmXG4gIHRoZSBjaGFubmVsIGNsb3NlcyB3aXRob3V0IHlpZWxkaW5nIGl0ZW1zLCByZXR1cm5zIGluaXQgYW5kIGYgaXMgbm90XG4gIGNhbGxlZC4gY2ggbXVzdCBjbG9zZSBiZWZvcmUgcmVkdWNlIHByb2R1Y2VzIGEgcmVzdWx0LiIsIDphcmdsaXN0cyAoW2YgaW5pdCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZVxyXG4gXCJmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDIgYXJndW1lbnRzLiBSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nXFxuICB0aGUgc2luZ2xlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIGluaXQgYW5kIHRoZSBmaXJzdCBpdGVtIGZyb20gdGhlXFxuICBjaGFubmVsLCB0aGVuIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZlxcbiAgdGhlIGNoYW5uZWwgY2xvc2VzIHdpdGhvdXQgeWllbGRpbmcgaXRlbXMsIHJldHVybnMgaW5pdCBhbmQgZiBpcyBub3RcXG4gIGNhbGxlZC4gY2ggbXVzdCBjbG9zZSBiZWZvcmUgcmVkdWNlIHByb2R1Y2VzIGEgcmVzdWx0LlwiXHJcbiBbZiBpbml0IGNoXVxyXG4gKGdvLWxvb3BcclxuICBbcmV0IGluaXRdXHJcbiAgKGxldFxyXG4gICBbdiAoPCEgY2gpXVxyXG4gICAoaWZcclxuICAgIChuaWw/IHYpXHJcbiAgICByZXRcclxuICAgIChsZXQgW3JldCcgKGYgcmV0IHYpXSAoaWYgKHJlZHVjZWQ/IHJldCcpIEByZXQnIChyZWN1ciByZXQnKSkpKSkpKVxyXG4ifSB7OnN5bSByZW1vdmU+LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIChbcCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZT5cclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIFtwIGNoXVxyXG4gKGZpbHRlcj4gKGNvbXBsZW1lbnQgcCkgY2gpKVxyXG4ifSB7OnN5bSB0aW1lb3V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIGNsb3NlIGFmdGVyIG1zZWNzIiwgOmFyZ2xpc3RzIChbbXNlY3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aW1lb3V0XHJcbiBcIlJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCBjbG9zZSBhZnRlciBtc2Vjc1wiXHJcbiBbbXNlY3NdXHJcbiAodGltZXJzL3RpbWVvdXQgbXNlY3MpKVxyXG4ifSB7OnN5bSB1bnN1YiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcCB2IGNoXSl9LCA6cHJvdG9jb2wgUHVifSB7OnN5bSBhZG1peCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBjaF0pfSwgOnByb3RvY29sIE1peH0gezpzeW0gdW5taXgqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gY2hdKX0sIDpwcm90b2NvbCBNaXh9IHs6c3ltIG1peCwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBtaXggb2Ygb25lIG9yIG1vcmUgaW5wdXQgY2hhbm5lbHMgd2hpY2ggd2lsbFxuICBiZSBwdXQgb24gdGhlIHN1cHBsaWVkIG91dCBjaGFubmVsLiBJbnB1dCBzb3VyY2VzIGNhbiBiZSBhZGRlZCB0b1xuICB0aGUgbWl4IHdpdGggJ2FkbWl4JywgYW5kIHJlbW92ZWQgd2l0aCAndW5taXgnLiBBIG1peCBzdXBwb3J0c1xuICBzb2xvaW5nLCBtdXRpbmcgYW5kIHBhdXNpbmcgbXVsdGlwbGUgaW5wdXRzIGF0b21pY2FsbHkgdXNpbmdcbiAgJ3RvZ2dsZScsIGFuZCBjYW4gc29sbyB1c2luZyBlaXRoZXIgbXV0aW5nIG9yIHBhdXNpbmcgYXMgZGV0ZXJtaW5lZFxuICBieSAnc29sby1tb2RlJy5cblxuICBFYWNoIGNoYW5uZWwgY2FuIGhhdmUgemVybyBvciBtb3JlIGJvb2xlYW4gbW9kZXMgc2V0IHZpYSAndG9nZ2xlJzpcblxuICA6c29sbyAtIHdoZW4gdHJ1ZSwgb25seSB0aGlzIChvbmQgb3RoZXIgc29sb2VkKSBjaGFubmVsKHMpIHdpbGwgYXBwZWFyXG4gICAgICAgICAgaW4gdGhlIG1peCBvdXRwdXQgY2hhbm5lbC4gOm11dGUgYW5kIDpwYXVzZSBzdGF0ZXMgb2Ygc29sb2VkXG4gICAgICAgICAgY2hhbm5lbHMgYXJlIGlnbm9yZWQuIElmIHNvbG8tbW9kZSBpcyA6bXV0ZSwgbm9uLXNvbG9lZFxuICAgICAgICAgIGNoYW5uZWxzIGFyZSBtdXRlZCwgaWYgOnBhdXNlLCBub24tc29sb2VkIGNoYW5uZWxzIGFyZVxuICAgICAgICAgIHBhdXNlZC5cblxuICA6bXV0ZSAtIG11dGVkIGNoYW5uZWxzIHdpbGwgaGF2ZSB0aGVpciBjb250ZW50cyBjb25zdW1lZCBidXQgbm90IGluY2x1ZGVkIGluIHRoZSBtaXhcbiAgOnBhdXNlIC0gcGF1c2VkIGNoYW5uZWxzIHdpbGwgbm90IGhhdmUgdGhlaXIgY29udGVudHMgY29uc3VtZWQgKGFuZCB0aHVzIGFsc28gbm90IGluY2x1ZGVkIGluIHRoZSBtaXgpXG4iLCA6YXJnbGlzdHMgKFtvdXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXhcclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG1peCBvZiBvbmUgb3IgbW9yZSBpbnB1dCBjaGFubmVscyB3aGljaCB3aWxsXFxuICBiZSBwdXQgb24gdGhlIHN1cHBsaWVkIG91dCBjaGFubmVsLiBJbnB1dCBzb3VyY2VzIGNhbiBiZSBhZGRlZCB0b1xcbiAgdGhlIG1peCB3aXRoICdhZG1peCcsIGFuZCByZW1vdmVkIHdpdGggJ3VubWl4Jy4gQSBtaXggc3VwcG9ydHNcXG4gIHNvbG9pbmcsIG11dGluZyBhbmQgcGF1c2luZyBtdWx0aXBsZSBpbnB1dHMgYXRvbWljYWxseSB1c2luZ1xcbiAgJ3RvZ2dsZScsIGFuZCBjYW4gc29sbyB1c2luZyBlaXRoZXIgbXV0aW5nIG9yIHBhdXNpbmcgYXMgZGV0ZXJtaW5lZFxcbiAgYnkgJ3NvbG8tbW9kZScuXFxuXFxuICBFYWNoIGNoYW5uZWwgY2FuIGhhdmUgemVybyBvciBtb3JlIGJvb2xlYW4gbW9kZXMgc2V0IHZpYSAndG9nZ2xlJzpcXG5cXG4gIDpzb2xvIC0gd2hlbiB0cnVlLCBvbmx5IHRoaXMgKG9uZCBvdGhlciBzb2xvZWQpIGNoYW5uZWwocykgd2lsbCBhcHBlYXJcXG4gICAgICAgICAgaW4gdGhlIG1peCBvdXRwdXQgY2hhbm5lbC4gOm11dGUgYW5kIDpwYXVzZSBzdGF0ZXMgb2Ygc29sb2VkXFxuICAgICAgICAgIGNoYW5uZWxzIGFyZSBpZ25vcmVkLiBJZiBzb2xvLW1vZGUgaXMgOm11dGUsIG5vbi1zb2xvZWRcXG4gICAgICAgICAgY2hhbm5lbHMgYXJlIG11dGVkLCBpZiA6cGF1c2UsIG5vbi1zb2xvZWQgY2hhbm5lbHMgYXJlXFxuICAgICAgICAgIHBhdXNlZC5cXG5cXG4gIDptdXRlIC0gbXV0ZWQgY2hhbm5lbHMgd2lsbCBoYXZlIHRoZWlyIGNvbnRlbnRzIGNvbnN1bWVkIGJ1dCBub3QgaW5jbHVkZWQgaW4gdGhlIG1peFxcbiAgOnBhdXNlIC0gcGF1c2VkIGNoYW5uZWxzIHdpbGwgbm90IGhhdmUgdGhlaXIgY29udGVudHMgY29uc3VtZWQgKGFuZCB0aHVzIGFsc28gbm90IGluY2x1ZGVkIGluIHRoZSBtaXgpXFxuXCJcclxuIFtvdXRdXHJcbiAobGV0XHJcbiAgW2NzXHJcbiAgIChhdG9tIHt9KVxyXG4gICBzb2xvLW1vZGVzXHJcbiAgICN7OnBhdXNlIDptdXRlfVxyXG4gICBhdHRyc1xyXG4gICAoY29uaiBzb2xvLW1vZGVzIDpzb2xvKVxyXG4gICBzb2xvLW1vZGVcclxuICAgKGF0b20gOm11dGUpXHJcbiAgIGNoYW5nZVxyXG4gICAoY2hhbilcclxuICAgY2hhbmdlZFxyXG4gICAoZm4qIFtdIChwdXQhIGNoYW5nZSB0cnVlKSlcclxuICAgcGlja1xyXG4gICAoZm5cclxuICAgIFthdHRyIGNoc11cclxuICAgIChyZWR1Y2Uta3YgKGZuIFtyZXQgYyB2XSAoaWYgKGF0dHIgdikgKGNvbmogcmV0IGMpIHJldCkpICN7fSBjaHMpKVxyXG4gICBjYWxjLXN0YXRlXHJcbiAgIChmblxyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbY2hzXHJcbiAgICAgIEBjc1xyXG4gICAgICBtb2RlXHJcbiAgICAgIEBzb2xvLW1vZGVcclxuICAgICAgc29sb3NcclxuICAgICAgKHBpY2sgOnNvbG8gY2hzKVxyXG4gICAgICBwYXVzZXNcclxuICAgICAgKHBpY2sgOnBhdXNlIGNocyldXHJcbiAgICAgezpzb2xvcyBzb2xvcyxcclxuICAgICAgOm11dGVzIChwaWNrIDptdXRlIGNocyksXHJcbiAgICAgIDpyZWFkc1xyXG4gICAgICAoY29ualxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGFuZCAoPSBtb2RlIDpwYXVzZSkgKG5vdCAoZW1wdHk/IHNvbG9zKSkpXHJcbiAgICAgICAgKHZlYyBzb2xvcylcclxuICAgICAgICAodmVjIChyZW1vdmUgcGF1c2VzIChrZXlzIGNocykpKSlcclxuICAgICAgIGNoYW5nZSl9KSlcclxuICAgbVxyXG4gICAocmVpZnlcclxuICAgIE11eFxyXG4gICAgKG11eGNoKiBbX10gb3V0KVxyXG4gICAgTWl4XHJcbiAgICAoYWRtaXgqIFtfIGNoXSAoc3dhcCEgY3MgYXNzb2MgY2gge30pIChjaGFuZ2VkKSlcclxuICAgICh1bm1peCogW18gY2hdIChzd2FwISBjcyBkaXNzb2MgY2gpIChjaGFuZ2VkKSlcclxuICAgICh1bm1peC1hbGwqIFtfXSAocmVzZXQhIGNzIHt9KSAoY2hhbmdlZCkpXHJcbiAgICAodG9nZ2xlKlxyXG4gICAgIFtfIHN0YXRlLW1hcF1cclxuICAgICAoc3dhcCEgY3MgKHBhcnRpYWwgbWVyZ2Utd2l0aCBjbGpzLmNvcmUvbWVyZ2UpIHN0YXRlLW1hcClcclxuICAgICAoY2hhbmdlZCkpXHJcbiAgICAoc29sby1tb2RlKlxyXG4gICAgIFtfIG1vZGVdXHJcbiAgICAgKGFzc2VydFxyXG4gICAgICAoc29sby1tb2RlcyBtb2RlKVxyXG4gICAgICAoc3RyIFwibW9kZSBtdXN0IGJlIG9uZSBvZjogXCIgc29sby1tb2RlcykpXHJcbiAgICAgKHJlc2V0ISBzb2xvLW1vZGUgbW9kZSlcclxuICAgICAoY2hhbmdlZCkpKV1cclxuICAoZ28tbG9vcFxyXG4gICBbezprZXlzIFtzb2xvcyBtdXRlcyByZWFkc10sIDphcyBzdGF0ZX0gKGNhbGMtc3RhdGUpXVxyXG4gICAobGV0XHJcbiAgICBbW3YgY10gKGFsdHMhIHJlYWRzKV1cclxuICAgIChpZlxyXG4gICAgIChvciAobmlsPyB2KSAoPSBjIGNoYW5nZSkpXHJcbiAgICAgKGRvICh3aGVuIChuaWw/IHYpIChzd2FwISBjcyBkaXNzb2MgYykpIChyZWN1ciAoY2FsYy1zdGF0ZSkpKVxyXG4gICAgIChpZlxyXG4gICAgICAob3IgKHNvbG9zIGMpIChhbmQgKGVtcHR5PyBzb2xvcykgKG5vdCAobXV0ZXMgYykpKSlcclxuICAgICAgKHdoZW4gKD4hIG91dCB2KSAocmVjdXIgc3RhdGUpKVxyXG4gICAgICAocmVjdXIgc3RhdGUpKSkpKVxyXG4gIG0pKVxyXG4ifSB7OnN5bSBwdWIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGEgcHViKGxpY2F0aW9uKSBvZiB0aGUgc3VwcGxpZWQgY2hhbm5lbCxcbiAgcGFydGl0aW9uZWQgaW50byB0b3BpY3MgYnkgdGhlIHRvcGljLWZuLiB0b3BpYy1mbiB3aWxsIGJlIGFwcGxpZWQgdG9cbiAgZWFjaCB2YWx1ZSBvbiB0aGUgY2hhbm5lbCBhbmQgdGhlIHJlc3VsdCB3aWxsIGRldGVybWluZSB0aGUgJ3RvcGljJ1xuICBvbiB3aGljaCB0aGF0IHZhbHVlIHdpbGwgYmUgcHV0LiBDaGFubmVscyBjYW4gYmUgc3Vic2NyaWJlZCB0b1xuICByZWNlaXZlIGNvcGllcyBvZiB0b3BpY3MgdXNpbmcgJ3N1YicsIGFuZCB1bnN1YnNjcmliZWQgdXNpbmdcbiAgJ3Vuc3ViJy4gRWFjaCB0b3BpYyB3aWxsIGJlIGhhbmRsZWQgYnkgYW4gaW50ZXJuYWwgbXVsdCBvbiBhXG4gIGRlZGljYXRlZCBjaGFubmVsLiBCeSBkZWZhdWx0IHRoZXNlIGludGVybmFsIGNoYW5uZWxzIGFyZVxuICB1bmJ1ZmZlcmVkLCBidXQgYSBidWYtZm4gY2FuIGJlIHN1cHBsaWVkIHdoaWNoLCBnaXZlbiBhIHRvcGljLFxuICBjcmVhdGVzIGEgYnVmZmVyIHdpdGggZGVzaXJlZCBwcm9wZXJ0aWVzLlxuXG4gIEVhY2ggaXRlbSBpcyBkaXN0cmlidXRlZCB0byBhbGwgc3VicyBpbiBwYXJhbGxlbCBhbmQgc3luY2hyb25vdXNseSxcbiAgaS5lLiBlYWNoIHN1YiBtdXN0IGFjY2VwdCBiZWZvcmUgdGhlIG5leHQgaXRlbSBpcyBkaXN0cmlidXRlZC4gVXNlXG4gIGJ1ZmZlcmluZy93aW5kb3dpbmcgdG8gcHJldmVudCBzbG93IHN1YnMgZnJvbSBob2xkaW5nIHVwIHRoZSBwdWIuXG5cbiAgSXRlbXMgcmVjZWl2ZWQgd2hlbiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgc3VicyBnZXQgZHJvcHBlZC5cblxuICBOb3RlIHRoYXQgaWYgYnVmLWZucyBhcmUgdXNlZCB0aGVuIGVhY2ggdG9waWMgaXMgaGFuZGxlZFxuICBhc3luY2hyb25vdXNseSwgaS5lLiBpZiBhIGNoYW5uZWwgaXMgc3Vic2NyaWJlZCB0byBtb3JlIHRoYW4gb25lXG4gIHRvcGljIGl0IHNob3VsZCBub3QgZXhwZWN0IHRoZW0gdG8gYmUgaW50ZXJsZWF2ZWQgaWRlbnRpY2FsbHkgd2l0aFxuICB0aGUgc291cmNlLiIsIDphcmdsaXN0cyBbW2NoIHRvcGljLWZuXSBbY2ggdG9waWMtZm4gYnVmLWZuXV19LCA6c291cmNlICIoZGVmblxyXG4gcHViXHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBwdWIobGljYXRpb24pIG9mIHRoZSBzdXBwbGllZCBjaGFubmVsLFxcbiAgcGFydGl0aW9uZWQgaW50byB0b3BpY3MgYnkgdGhlIHRvcGljLWZuLiB0b3BpYy1mbiB3aWxsIGJlIGFwcGxpZWQgdG9cXG4gIGVhY2ggdmFsdWUgb24gdGhlIGNoYW5uZWwgYW5kIHRoZSByZXN1bHQgd2lsbCBkZXRlcm1pbmUgdGhlICd0b3BpYydcXG4gIG9uIHdoaWNoIHRoYXQgdmFsdWUgd2lsbCBiZSBwdXQuIENoYW5uZWxzIGNhbiBiZSBzdWJzY3JpYmVkIHRvXFxuICByZWNlaXZlIGNvcGllcyBvZiB0b3BpY3MgdXNpbmcgJ3N1YicsIGFuZCB1bnN1YnNjcmliZWQgdXNpbmdcXG4gICd1bnN1YicuIEVhY2ggdG9waWMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFuIGludGVybmFsIG11bHQgb24gYVxcbiAgZGVkaWNhdGVkIGNoYW5uZWwuIEJ5IGRlZmF1bHQgdGhlc2UgaW50ZXJuYWwgY2hhbm5lbHMgYXJlXFxuICB1bmJ1ZmZlcmVkLCBidXQgYSBidWYtZm4gY2FuIGJlIHN1cHBsaWVkIHdoaWNoLCBnaXZlbiBhIHRvcGljLFxcbiAgY3JlYXRlcyBhIGJ1ZmZlciB3aXRoIGRlc2lyZWQgcHJvcGVydGllcy5cXG5cXG4gIEVhY2ggaXRlbSBpcyBkaXN0cmlidXRlZCB0byBhbGwgc3VicyBpbiBwYXJhbGxlbCBhbmQgc3luY2hyb25vdXNseSxcXG4gIGkuZS4gZWFjaCBzdWIgbXVzdCBhY2NlcHQgYmVmb3JlIHRoZSBuZXh0IGl0ZW0gaXMgZGlzdHJpYnV0ZWQuIFVzZVxcbiAgYnVmZmVyaW5nL3dpbmRvd2luZyB0byBwcmV2ZW50IHNsb3cgc3VicyBmcm9tIGhvbGRpbmcgdXAgdGhlIHB1Yi5cXG5cXG4gIEl0ZW1zIHJlY2VpdmVkIHdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHN1YnMgZ2V0IGRyb3BwZWQuXFxuXFxuICBOb3RlIHRoYXQgaWYgYnVmLWZucyBhcmUgdXNlZCB0aGVuIGVhY2ggdG9waWMgaXMgaGFuZGxlZFxcbiAgYXN5bmNocm9ub3VzbHksIGkuZS4gaWYgYSBjaGFubmVsIGlzIHN1YnNjcmliZWQgdG8gbW9yZSB0aGFuIG9uZVxcbiAgdG9waWMgaXQgc2hvdWxkIG5vdCBleHBlY3QgdGhlbSB0byBiZSBpbnRlcmxlYXZlZCBpZGVudGljYWxseSB3aXRoXFxuICB0aGUgc291cmNlLlwiXHJcbiAoW2NoIHRvcGljLWZuXSAocHViIGNoIHRvcGljLWZuIChjb25zdGFudGx5IG5pbCkpKVxyXG4gKFtjaCB0b3BpYy1mbiBidWYtZm5dXHJcbiAgKGxldFxyXG4gICBbbXVsdHNcclxuICAgIChhdG9tIHt9KVxyXG4gICAgZW5zdXJlLW11bHRcclxuICAgIChmblxyXG4gICAgIFt0b3BpY11cclxuICAgICAob3JcclxuICAgICAgKGdldCBAbXVsdHMgdG9waWMpXHJcbiAgICAgIChnZXRcclxuICAgICAgIChzd2FwIVxyXG4gICAgICAgIG11bHRzXHJcbiAgICAgICAgKGZuKlxyXG4gICAgICAgICBbcDFfXzQ4NjY4I11cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAocDFfXzQ4NjY4IyB0b3BpYylcclxuICAgICAgICAgIHAxX180ODY2OCNcclxuICAgICAgICAgIChhc3NvYyBwMV9fNDg2NjgjIHRvcGljIChtdWx0IChjaGFuIChidWYtZm4gdG9waWMpKSkpKSkpXHJcbiAgICAgICB0b3BpYykpKVxyXG4gICAgcFxyXG4gICAgKHJlaWZ5XHJcbiAgICAgTXV4XHJcbiAgICAgKG11eGNoKiBbX10gY2gpXHJcbiAgICAgUHViXHJcbiAgICAgKHN1YipcclxuICAgICAgW3AgdG9waWMgY2ggY2xvc2U/XVxyXG4gICAgICAobGV0IFttIChlbnN1cmUtbXVsdCB0b3BpYyldICh0YXAgbSBjaCBjbG9zZT8pKSlcclxuICAgICAodW5zdWIqXHJcbiAgICAgIFtwIHRvcGljIGNoXVxyXG4gICAgICAod2hlbi1sZXQgW20gKGdldCBAbXVsdHMgdG9waWMpXSAodW50YXAgbSBjaCkpKVxyXG4gICAgICh1bnN1Yi1hbGwqIFtfXSAocmVzZXQhIG11bHRzIHt9KSlcclxuICAgICAodW5zdWItYWxsKiBbXyB0b3BpY10gKHN3YXAhIG11bHRzIGRpc3NvYyB0b3BpYykpKV1cclxuICAgKGdvLWxvb3BcclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW3ZhbCAoPCEgY2gpXVxyXG4gICAgIChpZlxyXG4gICAgICAobmlsPyB2YWwpXHJcbiAgICAgIChkb3NlcSBbbSAodmFscyBAbXVsdHMpXSAoY2xvc2UhIChtdXhjaCogbSkpKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbdG9waWMgKHRvcGljLWZuIHZhbCkgbSAoZ2V0IEBtdWx0cyB0b3BpYyldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIG1cclxuICAgICAgICAod2hlbi1ub3QgKD4hIChtdXhjaCogbSkgdmFsKSAoc3dhcCEgbXVsdHMgZGlzc29jIHRvcGljKSkpXHJcbiAgICAgICAocmVjdXIpKSkpKVxyXG4gICBwKSkpXHJcbiJ9IHs6c3ltIHRha2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgcmV0dXJuLCBhdCBtb3N0LCBuIGl0ZW1zIGZyb20gY2guIEFmdGVyIG4gaXRlbXNcbiAgIGhhdmUgYmVlbiByZXR1cm5lZCwgb3IgY2ggaGFzIGJlZW4gY2xvc2VkLCB0aGUgcmV0dXJuIGNoYW5lbCB3aWxsIGNsb3NlLlxuXG4gIFRoZSBvdXRwdXQgY2hhbm5lbCBpcyB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIHVubGVzcyBidWYtb3ItbiBpcyBnaXZlbi4iLCA6YXJnbGlzdHMgW1tuIGNoXSBbbiBjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2VcclxuIFwiUmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIHJldHVybiwgYXQgbW9zdCwgbiBpdGVtcyBmcm9tIGNoLiBBZnRlciBuIGl0ZW1zXFxuICAgaGF2ZSBiZWVuIHJldHVybmVkLCBvciBjaCBoYXMgYmVlbiBjbG9zZWQsIHRoZSByZXR1cm4gY2hhbmVsIHdpbGwgY2xvc2UuXFxuXFxuICBUaGUgb3V0cHV0IGNoYW5uZWwgaXMgdW5idWZmZXJlZCBieSBkZWZhdWx0LCB1bmxlc3MgYnVmLW9yLW4gaXMgZ2l2ZW4uXCJcclxuIChbbiBjaF0gKHRha2UgbiBjaCBuaWwpKVxyXG4gKFtuIGNoIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnb1xyXG4gICAgKGxvb3BcclxuICAgICBbeCAwXVxyXG4gICAgICh3aGVuXHJcbiAgICAgICg8IHggbilcclxuICAgICAgKGxldFxyXG4gICAgICAgW3YgKDwhIGNoKV1cclxuICAgICAgICh3aGVuIChub3QgKG5pbD8gdikpICg+ISBvdXQgdikgKHJlY3VyIChpbmMgeCkpKSkpKVxyXG4gICAgKGNsb3NlISBvdXQpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gdW5zdWItYWxsKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwXSBbcCB2XSl9LCA6cHJvdG9jb2wgUHVifSB7OnN5bSA8ISwgOm1ldGEgezpkb2MgInRha2VzIGEgdmFsIGZyb20gcG9ydC4gTXVzdCBiZSBjYWxsZWQgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIFdpbGxcbiAgcmV0dXJuIG5pbCBpZiBjbG9zZWQuIFdpbGwgcGFyayBpZiBub3RoaW5nIGlzIGF2YWlsYWJsZS5cbiAgUmV0dXJucyB0cnVlIHVubGVzcyBwb3J0IGlzIGFscmVhZHkgY2xvc2VkIiwgOmFyZ2xpc3RzIChbcG9ydF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIDwhXHJcbiBcInRha2VzIGEgdmFsIGZyb20gcG9ydC4gTXVzdCBiZSBjYWxsZWQgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIFdpbGxcXG4gIHJldHVybiBuaWwgaWYgY2xvc2VkLiBXaWxsIHBhcmsgaWYgbm90aGluZyBpcyBhdmFpbGFibGUuXFxuICBSZXR1cm5zIHRydWUgdW5sZXNzIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWRcIlxyXG4gW3BvcnRdXHJcbiAodGhyb3cgKGpzL0Vycm9yLiBcIjwhIHVzZWQgbm90IGluIChnbyAuLi4pIGJsb2NrXCIpKSlcclxuIn0gezpzeW0gbWFwLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmdW5jdGlvbiBhbmQgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBjaGFubmVscywgYW5kIHJldHVybnMgYVxuICBjaGFubmVsIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZXMgcHJvZHVjZWQgYnkgYXBwbHlpbmcgZiB0byB0aGUgc2V0XG4gIG9mIGZpcnN0IGl0ZW1zIHRha2VuIGZyb20gZWFjaCBzb3VyY2UgY2hhbm5lbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmdcbiAgZiB0byB0aGUgc2V0IG9mIHNlY29uZCBpdGVtcyBmcm9tIGVhY2ggY2hhbm5lbCwgdW50aWwgYW55IG9uZSBvZiB0aGVcbiAgY2hhbm5lbHMgaXMgY2xvc2VkLCBhdCB3aGljaCBwb2ludCB0aGUgb3V0cHV0IGNoYW5uZWwgd2lsbCBiZVxuICBjbG9zZWQuIFRoZSByZXR1cm5lZCBjaGFubmVsIHdpbGwgYmUgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciBhXG4gIGJ1Zi1vci1uIGNhbiBiZSBzdXBwbGllZCIsIDphcmdsaXN0cyBbW2YgY2hzXSBbZiBjaHMgYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXBcclxuIFwiVGFrZXMgYSBmdW5jdGlvbiBhbmQgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBjaGFubmVscywgYW5kIHJldHVybnMgYVxcbiAgY2hhbm5lbCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlIHNldFxcbiAgb2YgZmlyc3QgaXRlbXMgdGFrZW4gZnJvbSBlYWNoIHNvdXJjZSBjaGFubmVsLCBmb2xsb3dlZCBieSBhcHBseWluZ1xcbiAgZiB0byB0aGUgc2V0IG9mIHNlY29uZCBpdGVtcyBmcm9tIGVhY2ggY2hhbm5lbCwgdW50aWwgYW55IG9uZSBvZiB0aGVcXG4gIGNoYW5uZWxzIGlzIGNsb3NlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG91dHB1dCBjaGFubmVsIHdpbGwgYmVcXG4gIGNsb3NlZC4gVGhlIHJldHVybmVkIGNoYW5uZWwgd2lsbCBiZSB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIGFcXG4gIGJ1Zi1vci1uIGNhbiBiZSBzdXBwbGllZFwiXHJcbiAoW2YgY2hzXSAobWFwIGYgY2hzIG5pbCkpXHJcbiAoW2YgY2hzIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW2Noc1xyXG4gICAgKHZlYyBjaHMpXHJcbiAgICBvdXRcclxuICAgIChjaGFuIGJ1Zi1vci1uKVxyXG4gICAgY250XHJcbiAgICAoY291bnQgY2hzKVxyXG4gICAgcmV0c1xyXG4gICAgKG9iamVjdC1hcnJheSBjbnQpXHJcbiAgICBkY2hhblxyXG4gICAgKGNoYW4gMSlcclxuICAgIGRjdHJcclxuICAgIChhdG9tIG5pbClcclxuICAgIGRvbmVcclxuICAgIChtYXB2XHJcbiAgICAgKGZuXHJcbiAgICAgIFtpXVxyXG4gICAgICAoZm5cclxuICAgICAgIFtyZXRdXHJcbiAgICAgICAoYXNldCByZXRzIGkgcmV0KVxyXG4gICAgICAgKHdoZW4gKHplcm8/IChzd2FwISBkY3RyIGRlYykpIChwdXQhIGRjaGFuICguc2xpY2UgcmV0cyAwKSkpKSlcclxuICAgICAocmFuZ2UgY250KSldXHJcbiAgIChnby1sb29wXHJcbiAgICBbXVxyXG4gICAgKHJlc2V0ISBkY3RyIGNudClcclxuICAgIChkb3RpbWVzXHJcbiAgICAgW2kgY250XVxyXG4gICAgICh0cnlcclxuICAgICAgKHRha2UhIChjaHMgaSkgKGRvbmUgaSkpXHJcbiAgICAgIChjYXRjaCBqcy9PYmplY3QgZSAoc3dhcCEgZGN0ciBkZWMpKSkpXHJcbiAgICAobGV0XHJcbiAgICAgW3JldHMgKDwhIGRjaGFuKV1cclxuICAgICAoaWZcclxuICAgICAgKHNvbWUgbmlsPyByZXRzKVxyXG4gICAgICAoY2xvc2UhIG91dClcclxuICAgICAgKGRvICg+ISBvdXQgKGFwcGx5IGYgcmV0cykpIChyZWN1cikpKSkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSBNdXgsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChtdXhjaCopfSB7OnN5bSBtYXBjYXQ+LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbZiBvdXRdIFtmIG91dCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcGNhdD5cclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbZiBvdXRdIChtYXBjYXQ+IGYgb3V0IG5pbCkpXHJcbiAoW2Ygb3V0IGJ1Zi1vci1uXSAobGV0IFtpbiAoY2hhbiBidWYtb3ItbildIChtYXBjYXQqIGYgaW4gb3V0KSBpbikpKVxyXG4ifSB7OnN5bSBidWZmZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgZml4ZWQgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgYmxvY2svcGFyay4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYnVmZmVyXHJcbiBcIlJldHVybnMgYSBmaXhlZCBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBibG9jay9wYXJrLlwiXHJcbiBbbl1cclxuIChidWZmZXJzL2ZpeGVkLWJ1ZmZlciBuKSlcclxuIn0gezpzeW0gY2xvc2UhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3BvcnRdXX0sIDpzb3VyY2UgIihkZWZuIGNsb3NlISAoW3BvcnRdIChpbXBsL2Nsb3NlISBwb3J0KSkpXHJcbiJ9IHs6c3ltIG9mZmVyISwgOm1ldGEgezpkb2MgIlB1dHMgYSB2YWwgaW50byBwb3J0IGlmIGl0J3MgcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkuXG4gIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBOZXZlciBibG9ja3MuIFJldHVybnMgdHJ1ZSBpZiBvZmZlciBzdWNjZWVkcy4iLCA6YXJnbGlzdHMgKFtwb3J0IHZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9mZmVyIVxyXG4gXCJQdXRzIGEgdmFsIGludG8gcG9ydCBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIHNvIGltbWVkaWF0ZWx5LlxcbiAgbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIE5ldmVyIGJsb2Nrcy4gUmV0dXJucyB0cnVlIGlmIG9mZmVyIHN1Y2NlZWRzLlwiXHJcbiBbcG9ydCB2YWxdXHJcbiAobGV0XHJcbiAgW3JldCAoaW1wbC9wdXQhIHBvcnQgdmFsIChmbi1oYW5kbGVyIG5vcCBmYWxzZSkpXVxyXG4gICh3aGVuIHJldCBAcmV0KSkpXHJcbiJ9IHs6c3ltIGNoYW4sIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgY2hhbm5lbCB3aXRoIGFuIG9wdGlvbmFsIGJ1ZmZlciwgYW4gb3B0aW9uYWwgdHJhbnNkdWNlciAobGlrZSAobWFwIGYpLFxuICAoZmlsdGVyIHApIGV0YyBvciBhIGNvbXBvc2l0aW9uIHRoZXJlb2YpLCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIGhhbmRsZXIuXG4gIElmIGJ1Zi1vci1uIGlzIGEgbnVtYmVyLCB3aWxsIGNyZWF0ZSBhbmQgdXNlIGEgZml4ZWQgYnVmZmVyIG9mIHRoYXQgc2l6ZS4gSWYgYVxuICB0cmFuc2R1Y2VyIGlzIHN1cHBsaWVkIGEgYnVmZmVyIG11c3QgYmUgc3BlY2lmaWVkLiBleC1oYW5kbGVyIG11c3QgYmUgYVxuICBmbiBvZiBvbmUgYXJndW1lbnQgLSBpZiBhbiBleGNlcHRpb24gb2NjdXJzIGR1cmluZyB0cmFuc2Zvcm1hdGlvbiBpdCB3aWxsIGJlIGNhbGxlZFxuICB3aXRoIHRoZSB0aHJvd24gdmFsdWUgYXMgYW4gYXJndW1lbnQsIGFuZCBhbnkgbm9uLW5pbCByZXR1cm4gdmFsdWUgd2lsbCBiZSBwbGFjZWRcbiAgaW4gdGhlIGNoYW5uZWwuIiwgOmFyZ2xpc3RzIFtbXSBbYnVmLW9yLW5dIFtidWYtb3ItbiB4Zm9ybV0gW2J1Zi1vci1uIHhmb3JtIGV4LWhhbmRsZXJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFuXHJcbiBcIkNyZWF0ZXMgYSBjaGFubmVsIHdpdGggYW4gb3B0aW9uYWwgYnVmZmVyLCBhbiBvcHRpb25hbCB0cmFuc2R1Y2VyIChsaWtlIChtYXAgZiksXFxuICAoZmlsdGVyIHApIGV0YyBvciBhIGNvbXBvc2l0aW9uIHRoZXJlb2YpLCBhbmQgYW4gb3B0aW9uYWwgZXhjZXB0aW9uIGhhbmRsZXIuXFxuICBJZiBidWYtb3ItbiBpcyBhIG51bWJlciwgd2lsbCBjcmVhdGUgYW5kIHVzZSBhIGZpeGVkIGJ1ZmZlciBvZiB0aGF0IHNpemUuIElmIGFcXG4gIHRyYW5zZHVjZXIgaXMgc3VwcGxpZWQgYSBidWZmZXIgbXVzdCBiZSBzcGVjaWZpZWQuIGV4LWhhbmRsZXIgbXVzdCBiZSBhXFxuICBmbiBvZiBvbmUgYXJndW1lbnQgLSBpZiBhbiBleGNlcHRpb24gb2NjdXJzIGR1cmluZyB0cmFuc2Zvcm1hdGlvbiBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgd2l0aCB0aGUgdGhyb3duIHZhbHVlIGFzIGFuIGFyZ3VtZW50LCBhbmQgYW55IG5vbi1uaWwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgcGxhY2VkXFxuICBpbiB0aGUgY2hhbm5lbC5cIlxyXG4gKFtdIChjaGFuIG5pbCkpXHJcbiAoW2J1Zi1vci1uXSAoY2hhbiBidWYtb3ItbiBuaWwgbmlsKSlcclxuIChbYnVmLW9yLW4geGZvcm1dIChjaGFuIGJ1Zi1vci1uIHhmb3JtIG5pbCkpXHJcbiAoW2J1Zi1vci1uIHhmb3JtIGV4LWhhbmRsZXJdXHJcbiAgKGxldFxyXG4gICBbYnVmLW9yLW4gKGlmICg9IGJ1Zi1vci1uIDApIG5pbCBidWYtb3ItbildXHJcbiAgICh3aGVuXHJcbiAgICB4Zm9ybVxyXG4gICAgKGFzc2VydCBidWYtb3ItbiBcImJ1ZmZlciBtdXN0IGJlIHN1cHBsaWVkIHdoZW4gdHJhbnNkdWNlciBpc1wiKSlcclxuICAgKGNoYW5uZWxzL2NoYW5cclxuICAgIChpZiAobnVtYmVyPyBidWYtb3ItbikgKGJ1ZmZlciBidWYtb3ItbikgYnVmLW9yLW4pXHJcbiAgICB4Zm9ybVxyXG4gICAgZXgtaGFuZGxlcikpKSlcclxuIn0gezpzeW0gc29sby1tb2RlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIG1vZGVdKX0sIDpwcm90b2NvbCBNaXh9IHs6c3ltIHRhcCwgOm1ldGEgezpkb2MgIkNvcGllcyB0aGUgbXVsdCBzb3VyY2Ugb250byB0aGUgc3VwcGxpZWQgY2hhbm5lbC5cblxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIHNvdXJjZSBjbG9zZXMsXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci4iLCA6YXJnbGlzdHMgW1ttdWx0IGNoXSBbbXVsdCBjaCBjbG9zZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YXBcclxuIFwiQ29waWVzIHRoZSBtdWx0IHNvdXJjZSBvbnRvIHRoZSBzdXBwbGllZCBjaGFubmVsLlxcblxcbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBzb3VyY2UgY2xvc2VzLFxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLlwiXHJcbiAoW211bHQgY2hdICh0YXAgbXVsdCBjaCB0cnVlKSlcclxuIChbbXVsdCBjaCBjbG9zZT9dICh0YXAqIG11bHQgY2ggY2xvc2U/KSBjaCkpXHJcbiJ9IHs6c3ltIGFkbWl4LCA6bWV0YSB7OmRvYyAiQWRkcyBjaCBhcyBhbiBpbnB1dCB0byB0aGUgbWl4IiwgOmFyZ2xpc3RzIChbbWl4IGNoXSl9LCA6c291cmNlICIoZGVmbiBhZG1peCBcIkFkZHMgY2ggYXMgYW4gaW5wdXQgdG8gdGhlIG1peFwiIFttaXggY2hdIChhZG1peCogbWl4IGNoKSlcclxuIn0gezpzeW0gcHJvbWlzZS1jaGFuLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIHByb21pc2UgY2hhbm5lbCB3aXRoIGFuIG9wdGlvbmFsIHRyYW5zZHVjZXIsIGFuZCBhbiBvcHRpb25hbFxuICBleGNlcHRpb24taGFuZGxlci4gQSBwcm9taXNlIGNoYW5uZWwgY2FuIHRha2UgZXhhY3RseSBvbmUgdmFsdWUgdGhhdCBjb25zdW1lcnNcbiAgd2lsbCByZWNlaXZlLiBPbmNlIGZ1bGwsIHB1dHMgY29tcGxldGUgYnV0IHZhbCBpcyBkcm9wcGVkIChubyB0cmFuc2ZlcikuXG4gIENvbnN1bWVycyB3aWxsIGJsb2NrIHVudGlsIGVpdGhlciBhIHZhbHVlIGlzIHBsYWNlZCBpbiB0aGUgY2hhbm5lbCBvciB0aGVcbiAgY2hhbm5lbCBpcyBjbG9zZWQuIFNlZSBjaGFuIGZvciB0aGUgc2VtYW50aWNzIG9mIHhmb3JtIGFuZCBleC1oYW5kbGVyLiIsIDphcmdsaXN0cyBbW10gW3hmb3JtXSBbeGZvcm0gZXgtaGFuZGxlcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb21pc2UtY2hhblxyXG4gXCJDcmVhdGVzIGEgcHJvbWlzZSBjaGFubmVsIHdpdGggYW4gb3B0aW9uYWwgdHJhbnNkdWNlciwgYW5kIGFuIG9wdGlvbmFsXFxuICBleGNlcHRpb24taGFuZGxlci4gQSBwcm9taXNlIGNoYW5uZWwgY2FuIHRha2UgZXhhY3RseSBvbmUgdmFsdWUgdGhhdCBjb25zdW1lcnNcXG4gIHdpbGwgcmVjZWl2ZS4gT25jZSBmdWxsLCBwdXRzIGNvbXBsZXRlIGJ1dCB2YWwgaXMgZHJvcHBlZCAobm8gdHJhbnNmZXIpLlxcbiAgQ29uc3VtZXJzIHdpbGwgYmxvY2sgdW50aWwgZWl0aGVyIGEgdmFsdWUgaXMgcGxhY2VkIGluIHRoZSBjaGFubmVsIG9yIHRoZVxcbiAgY2hhbm5lbCBpcyBjbG9zZWQuIFNlZSBjaGFuIGZvciB0aGUgc2VtYW50aWNzIG9mIHhmb3JtIGFuZCBleC1oYW5kbGVyLlwiXHJcbiAoW10gKHByb21pc2UtY2hhbiBuaWwpKVxyXG4gKFt4Zm9ybV0gKHByb21pc2UtY2hhbiB4Zm9ybSBuaWwpKVxyXG4gKFt4Zm9ybSBleC1oYW5kbGVyXSAoY2hhbiAoYnVmZmVycy9wcm9taXNlLWJ1ZmZlcikgeGZvcm0gZXgtaGFuZGxlcikpKVxyXG4ifSB7OnN5bSB1bmlxdWUsIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1tjaF0gW2NoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5pcXVlXHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW2NoXSAodW5pcXVlIGNoIG5pbCkpXHJcbiAoW2NoIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnb1xyXG4gICAgKGxvb3BcclxuICAgICBbbGFzdCBuaWxdXHJcbiAgICAgKGxldFxyXG4gICAgICBbdiAoPCEgY2gpXVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKG5vdCAobmlsPyB2KSlcclxuICAgICAgIChpZiAoPSB2IGxhc3QpIChyZWN1ciBsYXN0KSAoZG8gKD4hIG91dCB2KSAocmVjdXIgdikpKSkpKVxyXG4gICAgKGNsb3NlISBvdXQpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gbXV4Y2gqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW19dKX0sIDpwcm90b2NvbCBNdXh9IHs6c3ltIHNvbG8tbW9kZSwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHNvbG8gbW9kZSBvZiB0aGUgbWl4LiBtb2RlIG11c3QgYmUgb25lIG9mIDptdXRlIG9yIDpwYXVzZSIsIDphcmdsaXN0cyAoW21peCBtb2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gc29sby1tb2RlXHJcbiBcIlNldHMgdGhlIHNvbG8gbW9kZSBvZiB0aGUgbWl4LiBtb2RlIG11c3QgYmUgb25lIG9mIDptdXRlIG9yIDpwYXVzZVwiXHJcbiBbbWl4IG1vZGVdXHJcbiAoc29sby1tb2RlKiBtaXggbW9kZSkpXHJcbiJ9IHs6c3ltIHRyYW5zZHVjZSwgOm1ldGEgezpkb2MgImFzeW5jL3JlZHVjZXMgYSBjaGFubmVsIHdpdGggYSB0cmFuc2Zvcm1hdGlvbiAoeGZvcm0gZikuXG4gIFJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC4gIGNoIG11c3QgY2xvc2UgYmVmb3JlXG4gIHRyYW5zZHVjZSBwcm9kdWNlcyBhIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFt4Zm9ybSBmIGluaXQgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2R1Y2VcclxuIFwiYXN5bmMvcmVkdWNlcyBhIGNoYW5uZWwgd2l0aCBhIHRyYW5zZm9ybWF0aW9uICh4Zm9ybSBmKS5cXG4gIFJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC4gIGNoIG11c3QgY2xvc2UgYmVmb3JlXFxuICB0cmFuc2R1Y2UgcHJvZHVjZXMgYSByZXN1bHQuXCJcclxuIFt4Zm9ybSBmIGluaXQgY2hdXHJcbiAobGV0IFtmICh4Zm9ybSBmKV0gKGdvIChsZXQgW3JldCAoPCEgKHJlZHVjZSBmIGluaXQgY2gpKV0gKGYgcmV0KSkpKSlcclxuIn0gezpzeW0gb250by1jaGFuLCA6bWV0YSB7OmRvYyAiUHV0cyB0aGUgY29udGVudHMgb2YgY29sbCBpbnRvIHRoZSBzdXBwbGllZCBjaGFubmVsLlxuXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgdGhlIGl0ZW1zIGFyZSBjb3BpZWQsXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci5cblxuICBSZXR1cm5zIGEgY2hhbm5lbCB3aGljaCB3aWxsIGNsb3NlIGFmdGVyIHRoZSBpdGVtcyBhcmUgY29waWVkLiIsIDphcmdsaXN0cyBbW2NoIGNvbGxdIFtjaCBjb2xsIGNsb3NlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9udG8tY2hhblxyXG4gXCJQdXRzIHRoZSBjb250ZW50cyBvZiBjb2xsIGludG8gdGhlIHN1cHBsaWVkIGNoYW5uZWwuXFxuXFxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIGFmdGVyIHRoZSBpdGVtcyBhcmUgY29waWVkLFxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLlxcblxcbiAgUmV0dXJucyBhIGNoYW5uZWwgd2hpY2ggd2lsbCBjbG9zZSBhZnRlciB0aGUgaXRlbXMgYXJlIGNvcGllZC5cIlxyXG4gKFtjaCBjb2xsXSAob250by1jaGFuIGNoIGNvbGwgdHJ1ZSkpXHJcbiAoW2NoIGNvbGwgY2xvc2U/XVxyXG4gIChnby1sb29wXHJcbiAgIFt2cyAoc2VxIGNvbGwpXVxyXG4gICAoaWZcclxuICAgIChhbmQgdnMgKD4hIGNoIChmaXJzdCB2cykpKVxyXG4gICAgKHJlY3VyIChuZXh0IHZzKSlcclxuICAgICh3aGVuIGNsb3NlPyAoY2xvc2UhIGNoKSkpKSkpXHJcbiJ9IHs6c3ltIHRvLWNoYW4sIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGEgY2hhbm5lbCB3aGljaCBjb250YWlucyB0aGUgY29udGVudHMgb2YgY29sbCxcbiAgY2xvc2luZyB3aGVuIGV4aGF1c3RlZC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdG8tY2hhblxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGEgY2hhbm5lbCB3aGljaCBjb250YWlucyB0aGUgY29udGVudHMgb2YgY29sbCxcXG4gIGNsb3Npbmcgd2hlbiBleGhhdXN0ZWQuXCJcclxuIFtjb2xsXVxyXG4gKGxldCBbY2ggKGNoYW4gKGJvdW5kZWQtY291bnQgMTAwIGNvbGwpKV0gKG9udG8tY2hhbiBjaCBjb2xsKSBjaCkpXHJcbiJ9IHs6c3ltIGRyb3BwaW5nLWJ1ZmZlciwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBjb21wbGV0ZSBidXRcbiAgdmFsIHdpbGwgYmUgZHJvcHBlZCAobm8gdHJhbnNmZXIpLiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkcm9wcGluZy1idWZmZXJcclxuIFwiUmV0dXJucyBhIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGNvbXBsZXRlIGJ1dFxcbiAgdmFsIHdpbGwgYmUgZHJvcHBlZCAobm8gdHJhbnNmZXIpLlwiXHJcbiBbbl1cclxuIChidWZmZXJzL2Ryb3BwaW5nLWJ1ZmZlciBuKSlcclxuIn0gezpzeW0gdW50YXAtYWxsLCA6bWV0YSB7OmRvYyAiRGlzY29ubmVjdHMgYWxsIHRhcmdldCBjaGFubmVscyBmcm9tIGEgbXVsdCIsIDphcmdsaXN0cyAoW211bHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnRhcC1hbGxcclxuIFwiRGlzY29ubmVjdHMgYWxsIHRhcmdldCBjaGFubmVscyBmcm9tIGEgbXVsdFwiXHJcbiBbbXVsdF1cclxuICh1bnRhcC1hbGwqIG11bHQpKVxyXG4ifSB7OnN5bSBpbnRvLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZyB0aGUgc2luZ2xlIChjb2xsZWN0aW9uKSByZXN1bHQgb2YgdGhlXG4gIGl0ZW1zIHRha2VuIGZyb20gdGhlIGNoYW5uZWwgY29uam9pbmVkIHRvIHRoZSBzdXBwbGllZFxuICBjb2xsZWN0aW9uLiBjaCBtdXN0IGNsb3NlIGJlZm9yZSBpbnRvIHByb2R1Y2VzIGEgcmVzdWx0LiIsIDphcmdsaXN0cyAoW2NvbGwgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRvXHJcbiBcIlJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmcgdGhlIHNpbmdsZSAoY29sbGVjdGlvbikgcmVzdWx0IG9mIHRoZVxcbiAgaXRlbXMgdGFrZW4gZnJvbSB0aGUgY2hhbm5lbCBjb25qb2luZWQgdG8gdGhlIHN1cHBsaWVkXFxuICBjb2xsZWN0aW9uLiBjaCBtdXN0IGNsb3NlIGJlZm9yZSBpbnRvIHByb2R1Y2VzIGEgcmVzdWx0LlwiXHJcbiBbY29sbCBjaF1cclxuIChyZWR1Y2UgY29uaiBjb2xsIGNoKSlcclxuIn0gezpzeW0gcGlwZWxpbmUsIDptZXRhIHs6ZG9jICJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXG4gIGNoYW5uZWwsIHN1YmplY3QgdG8gdGhlIHRyYW5zZHVjZXIgeGYsIHdpdGggcGFyYWxsZWxpc20gbi4gQmVjYXVzZVxuICBpdCBpcyBwYXJhbGxlbCwgdGhlIHRyYW5zZHVjZXIgd2lsbCBiZSBhcHBsaWVkIGluZGVwZW5kZW50bHkgdG8gZWFjaFxuICBlbGVtZW50LCBub3QgYWNyb3NzIGVsZW1lbnRzLCBhbmQgbWF5IHByb2R1Y2UgemVybyBvciBtb3JlIG91dHB1dHNcbiAgcGVyIGlucHV0LiAgT3V0cHV0cyB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHJlbGF0aXZlIHRvIHRoZVxuICBpbnB1dHMuIEJ5IGRlZmF1bHQsIHRoZSB0byBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb21cbiAgY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGxcbiAgc3RvcCBjb25zdW1pbmcgdGhlIGZyb20gY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXMuXG5cbiAgTm90ZSB0aGlzIGlzIHN1cHBsaWVkIGZvciBBUEkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDbG9qdXJlIHZlcnNpb24uXG4gIFZhbHVlcyBvZiBOID4gMSB3aWxsIG5vdCByZXN1bHQgaW4gYWN0dWFsIGNvbmN1cnJlbmN5IGluIGFcbiAgc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWUuIiwgOmFyZ2xpc3RzIFtbbiB0byB4ZiBmcm9tXSBbbiB0byB4ZiBmcm9tIGNsb3NlP10gW24gdG8geGYgZnJvbSBjbG9zZT8gZXgtaGFuZGxlcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBpcGVsaW5lXHJcbiBcIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cXG4gIGNoYW5uZWwsIHN1YmplY3QgdG8gdGhlIHRyYW5zZHVjZXIgeGYsIHdpdGggcGFyYWxsZWxpc20gbi4gQmVjYXVzZVxcbiAgaXQgaXMgcGFyYWxsZWwsIHRoZSB0cmFuc2R1Y2VyIHdpbGwgYmUgYXBwbGllZCBpbmRlcGVuZGVudGx5IHRvIGVhY2hcXG4gIGVsZW1lbnQsIG5vdCBhY3Jvc3MgZWxlbWVudHMsIGFuZCBtYXkgcHJvZHVjZSB6ZXJvIG9yIG1vcmUgb3V0cHV0c1xcbiAgcGVyIGlucHV0LiAgT3V0cHV0cyB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHJlbGF0aXZlIHRvIHRoZVxcbiAgaW5wdXRzLiBCeSBkZWZhdWx0LCB0aGUgdG8gY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tXFxuICBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbFxcbiAgc3RvcCBjb25zdW1pbmcgdGhlIGZyb20gY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXMuXFxuXFxuICBOb3RlIHRoaXMgaXMgc3VwcGxpZWQgZm9yIEFQSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIENsb2p1cmUgdmVyc2lvbi5cXG4gIFZhbHVlcyBvZiBOID4gMSB3aWxsIG5vdCByZXN1bHQgaW4gYWN0dWFsIGNvbmN1cnJlbmN5IGluIGFcXG4gIHNpbmdsZS10aHJlYWRlZCBydW50aW1lLlwiXHJcbiAoW24gdG8geGYgZnJvbV0gKHBpcGVsaW5lIG4gdG8geGYgZnJvbSB0cnVlKSlcclxuIChbbiB0byB4ZiBmcm9tIGNsb3NlP10gKHBpcGVsaW5lIG4gdG8geGYgZnJvbSBjbG9zZT8gbmlsKSlcclxuIChbbiB0byB4ZiBmcm9tIGNsb3NlPyBleC1oYW5kbGVyXVxyXG4gIChwaXBlbGluZSogbiB0byB4ZiBmcm9tIGNsb3NlPyBleC1oYW5kbGVyIDpjb21wdXRlKSkpXHJcbiJ9IHs6c3ltIHN1YiwgOm1ldGEgezpkb2MgIlN1YnNjcmliZXMgYSBjaGFubmVsIHRvIGEgdG9waWMgb2YgYSBwdWIuXG5cbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBzb3VyY2UgY2xvc2VzLFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuIiwgOmFyZ2xpc3RzIFtbcCB0b3BpYyBjaF0gW3AgdG9waWMgY2ggY2xvc2U/XV19LCA6c291cmNlICIoZGVmblxyXG4gc3ViXHJcbiBcIlN1YnNjcmliZXMgYSBjaGFubmVsIHRvIGEgdG9waWMgb2YgYSBwdWIuXFxuXFxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIHNvdXJjZSBjbG9zZXMsXFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuXCJcclxuIChbcCB0b3BpYyBjaF0gKHN1YiBwIHRvcGljIGNoIHRydWUpKVxyXG4gKFtwIHRvcGljIGNoIGNsb3NlP10gKHN1YiogcCB0b3BpYyBjaCBjbG9zZT8pKSlcclxuIn0gezpzeW0gbWFwPiwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyAoW2YgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXA+XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiBbZiBjaF1cclxuIChyZWlmeVxyXG4gIGltcGwvQ2hhbm5lbFxyXG4gIChjbG9zZSEgW19dIChpbXBsL2Nsb3NlISBjaCkpXHJcbiAgaW1wbC9SZWFkUG9ydFxyXG4gICh0YWtlISBbXyBmbjFdIChpbXBsL3Rha2UhIGNoIGZuMSkpXHJcbiAgaW1wbC9Xcml0ZVBvcnRcclxuICAocHV0ISBbXyB2YWwgZm4xXSAoaW1wbC9wdXQhIGNoIChmIHZhbCkgZm4xKSkpKVxyXG4ifSB7OnN5bSBwaXBlLCA6bWV0YSB7OmRvYyAiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xuICAgY2hhbm5lbC4gQnkgZGVmYXVsdCwgdGhlIHRvIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbVxuICAgY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGxcbiAgIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzIiwgOmFyZ2xpc3RzIFtbZnJvbSB0b10gW2Zyb20gdG8gY2xvc2U/XV19LCA6c291cmNlICIoZGVmblxyXG4gcGlwZVxyXG4gXCJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXFxuICAgY2hhbm5lbC4gQnkgZGVmYXVsdCwgdGhlIHRvIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbVxcbiAgIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsXFxuICAgc3RvcCBjb25zdW1pbmcgdGhlIGZyb20gY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXNcIlxyXG4gKFtmcm9tIHRvXSAocGlwZSBmcm9tIHRvIHRydWUpKVxyXG4gKFtmcm9tIHRvIGNsb3NlP11cclxuICAoZ28tbG9vcFxyXG4gICBbXVxyXG4gICAobGV0XHJcbiAgICBbdiAoPCEgZnJvbSldXHJcbiAgICAoaWYgKG5pbD8gdikgKHdoZW4gY2xvc2U/IChjbG9zZSEgdG8pKSAod2hlbiAoPiEgdG8gdikgKHJlY3VyKSkpKSlcclxuICB0bykpXHJcbiJ9IHs6c3ltIHVubWl4LCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBjaCBhcyBhbiBpbnB1dCB0byB0aGUgbWl4IiwgOmFyZ2xpc3RzIChbbWl4IGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5taXhcclxuIFwiUmVtb3ZlcyBjaCBhcyBhbiBpbnB1dCB0byB0aGUgbWl4XCJcclxuIFttaXggY2hdXHJcbiAodW5taXgqIG1peCBjaCkpXHJcbiJ9IHs6c3ltIGZpbHRlcjwsIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1twIGNoXSBbcCBjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbHRlcjxcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbcCBjaF0gKGZpbHRlcjwgcCBjaCBuaWwpKVxyXG4gKFtwIGNoIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnby1sb29wXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFt2YWwgKDwhIGNoKV1cclxuICAgICAoaWZcclxuICAgICAgKG5pbD8gdmFsKVxyXG4gICAgICAoY2xvc2UhIG91dClcclxuICAgICAgKGRvICh3aGVuIChwIHZhbCkgKD4hIG91dCB2YWwpKSAocmVjdXIpKSkpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gc3ViKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwIHYgY2ggY2xvc2U/XSl9LCA6cHJvdG9jb2wgUHVifSB7OnN5bSByZW1vdmU8LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbcCBjaF0gW3AgY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmU8XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW3AgY2hdIChyZW1vdmU8IHAgY2ggbmlsKSlcclxuIChbcCBjaCBidWYtb3Itbl0gKGZpbHRlcjwgKGNvbXBsZW1lbnQgcCkgY2ggYnVmLW9yLW4pKSlcclxuIn0gezpzeW0gdW50YXAqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gY2hdKX0sIDpwcm90b2NvbCBNdWx0fSB7OnN5bSB0b2dnbGUsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHNldHMgdGhlIHN0YXRlKHMpIG9mIG9uZSBvciBtb3JlIGNoYW5uZWxzIGluIGEgbWl4LiBUaGVcbiAgc3RhdGUgbWFwIGlzIGEgbWFwIG9mIGNoYW5uZWxzIC0+IGNoYW5uZWwtc3RhdGUtbWFwLiBBXG4gIGNoYW5uZWwtc3RhdGUtbWFwIGlzIGEgbWFwIG9mIGF0dHJzIC0+IGJvb2xlYW4sIHdoZXJlIGF0dHIgaXMgb25lIG9yXG4gIG1vcmUgb2YgOm11dGUsIDpwYXVzZSBvciA6c29sby4gQW55IHN0YXRlcyBzdXBwbGllZCBhcmUgbWVyZ2VkIHdpdGhcbiAgdGhlIGN1cnJlbnQgc3RhdGUuXG5cbiAgTm90ZSB0aGF0IGNoYW5uZWxzIGNhbiBiZSBhZGRlZCB0byBhIG1peCB2aWEgdG9nZ2xlLCB3aGljaCBjYW4gYmVcbiAgdXNlZCB0byBhZGQgY2hhbm5lbHMgaW4gYSBwYXJ0aWN1bGFyIChlLmcuIHBhdXNlZCkgc3RhdGUuIiwgOmFyZ2xpc3RzIChbbWl4IHN0YXRlLW1hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvZ2dsZVxyXG4gXCJBdG9taWNhbGx5IHNldHMgdGhlIHN0YXRlKHMpIG9mIG9uZSBvciBtb3JlIGNoYW5uZWxzIGluIGEgbWl4LiBUaGVcXG4gIHN0YXRlIG1hcCBpcyBhIG1hcCBvZiBjaGFubmVscyAtPiBjaGFubmVsLXN0YXRlLW1hcC4gQVxcbiAgY2hhbm5lbC1zdGF0ZS1tYXAgaXMgYSBtYXAgb2YgYXR0cnMgLT4gYm9vbGVhbiwgd2hlcmUgYXR0ciBpcyBvbmUgb3JcXG4gIG1vcmUgb2YgOm11dGUsIDpwYXVzZSBvciA6c29sby4gQW55IHN0YXRlcyBzdXBwbGllZCBhcmUgbWVyZ2VkIHdpdGhcXG4gIHRoZSBjdXJyZW50IHN0YXRlLlxcblxcbiAgTm90ZSB0aGF0IGNoYW5uZWxzIGNhbiBiZSBhZGRlZCB0byBhIG1peCB2aWEgdG9nZ2xlLCB3aGljaCBjYW4gYmVcXG4gIHVzZWQgdG8gYWRkIGNoYW5uZWxzIGluIGEgcGFydGljdWxhciAoZS5nLiBwYXVzZWQpIHN0YXRlLlwiXHJcbiBbbWl4IHN0YXRlLW1hcF1cclxuICh0b2dnbGUqIG1peCBzdGF0ZS1tYXApKVxyXG4ifSB7OnN5bSB1bnRhcC1hbGwqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21dKX0sIDpwcm90b2NvbCBNdWx0fSB7OnN5bSBzbGlkaW5nLWJ1ZmZlciwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBjb21wbGV0ZSwgYW5kIGJlXG4gIGJ1ZmZlcmVkLCBidXQgb2xkZXN0IGVsZW1lbnRzIGluIGJ1ZmZlciB3aWxsIGJlIGRyb3BwZWQgKG5vdFxuICB0cmFuc2ZlcnJlZCkuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNsaWRpbmctYnVmZmVyXHJcbiBcIlJldHVybnMgYSBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBjb21wbGV0ZSwgYW5kIGJlXFxuICBidWZmZXJlZCwgYnV0IG9sZGVzdCBlbGVtZW50cyBpbiBidWZmZXIgd2lsbCBiZSBkcm9wcGVkIChub3RcXG4gIHRyYW5zZmVycmVkKS5cIlxyXG4gW25dXHJcbiAoYnVmZmVycy9zbGlkaW5nLWJ1ZmZlciBuKSlcclxuIn0gezpzeW0gcGFydGl0aW9uLCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbbiBjaF0gW24gY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aXRpb25cclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbbiBjaF0gKHBhcnRpdGlvbiBuIGNoIG5pbCkpXHJcbiAoW24gY2ggYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvXHJcbiAgICAobG9vcFxyXG4gICAgIFthcnIgKG1ha2UtYXJyYXkgbikgaWR4IDBdXHJcbiAgICAgKGxldFxyXG4gICAgICBbdiAoPCEgY2gpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChub3QgKG5pbD8gdikpXHJcbiAgICAgICAoZG9cclxuICAgICAgICAoYXNldCBhcnIgaWR4IHYpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbbmV3LWlkeCAoaW5jIGlkeCldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKDwgbmV3LWlkeCBuKVxyXG4gICAgICAgICAgKHJlY3VyIGFyciBuZXctaWR4KVxyXG4gICAgICAgICAgKGRvICg+ISBvdXQgKHZlYyBhcnIpKSAocmVjdXIgKG1ha2UtYXJyYXkgbikgMCkpKSkpXHJcbiAgICAgICAoZG8gKHdoZW4gKD4gaWR4IDApICg+ISBvdXQgKHZlYyBhcnIpKSkgKGNsb3NlISBvdXQpKSkpKSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIE11bHQsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh0YXAqIHVudGFwKiB1bnRhcC1hbGwqKX0gezpzeW0gbWVyZ2UsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNoYW5uZWxzIGFuZCByZXR1cm5zIGEgY2hhbm5lbCB3aGljaFxuICBjb250YWlucyBhbGwgdmFsdWVzIHRha2VuIGZyb20gdGhlbS4gVGhlIHJldHVybmVkIGNoYW5uZWwgd2lsbCBiZVxuICB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIGEgYnVmLW9yLW4gY2FuIGJlIHN1cHBsaWVkLiBUaGUgY2hhbm5lbFxuICB3aWxsIGNsb3NlIGFmdGVyIGFsbCB0aGUgc291cmNlIGNoYW5uZWxzIGhhdmUgY2xvc2VkLiIsIDphcmdsaXN0cyBbW2Noc10gW2NocyBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlXHJcbiBcIlRha2VzIGEgY29sbGVjdGlvbiBvZiBzb3VyY2UgY2hhbm5lbHMgYW5kIHJldHVybnMgYSBjaGFubmVsIHdoaWNoXFxuICBjb250YWlucyBhbGwgdmFsdWVzIHRha2VuIGZyb20gdGhlbS4gVGhlIHJldHVybmVkIGNoYW5uZWwgd2lsbCBiZVxcbiAgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciBhIGJ1Zi1vci1uIGNhbiBiZSBzdXBwbGllZC4gVGhlIGNoYW5uZWxcXG4gIHdpbGwgY2xvc2UgYWZ0ZXIgYWxsIHRoZSBzb3VyY2UgY2hhbm5lbHMgaGF2ZSBjbG9zZWQuXCJcclxuIChbY2hzXSAobWVyZ2UgY2hzIG5pbCkpXHJcbiAoW2NocyBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ28tbG9vcFxyXG4gICAgW2NzICh2ZWMgY2hzKV1cclxuICAgIChpZlxyXG4gICAgIChwb3M/IChjb3VudCBjcykpXHJcbiAgICAgKGxldFxyXG4gICAgICBbW3YgY10gKGFsdHMhIGNzKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAobmlsPyB2KVxyXG4gICAgICAgKHJlY3VyIChmaWx0ZXJ2IChmbiogW3AxX180ODY2OSNdIChub3Q9IGMgcDFfXzQ4NjY5IykpIGNzKSlcclxuICAgICAgIChkbyAoPiEgb3V0IHYpIChyZWN1ciBjcykpKSlcclxuICAgICAoY2xvc2UhIG91dCkpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gcGFydGl0aW9uLWJ5LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbZiBjaF0gW2YgY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aXRpb24tYnlcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbZiBjaF0gKHBhcnRpdGlvbi1ieSBmIGNoIG5pbCkpXHJcbiAoW2YgY2ggYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvXHJcbiAgICAobG9vcFxyXG4gICAgIFtsc3QgKG1ha2UtYXJyYXkgMCkgbGFzdCA6Y2xqcy5jb3JlLmFzeW5jL25vdGhpbmddXHJcbiAgICAgKGxldFxyXG4gICAgICBbdiAoPCEgY2gpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChub3QgKG5pbD8gdikpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW25ldy1pdG0gKGYgdildXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChvclxyXG4gICAgICAgICAgKD0gbmV3LWl0bSBsYXN0KVxyXG4gICAgICAgICAgKGtleXdvcmQtaWRlbnRpY2FsPyBsYXN0IDpjbGpzLmNvcmUuYXN5bmMvbm90aGluZykpXHJcbiAgICAgICAgIChkbyAoLnB1c2ggbHN0IHYpIChyZWN1ciBsc3QgbmV3LWl0bSkpXHJcbiAgICAgICAgIChkb1xyXG4gICAgICAgICAgKD4hIG91dCAodmVjIGxzdCkpXHJcbiAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgW25ldy1sc3QgKG1ha2UtYXJyYXkgMCldXHJcbiAgICAgICAgICAgKC5wdXNoIG5ldy1sc3QgdilcclxuICAgICAgICAgICAocmVjdXIgbmV3LWxzdCBuZXctaXRtKSkpKSlcclxuICAgICAgIChkb1xyXG4gICAgICAgICh3aGVuICg+IChhbGVuZ3RoIGxzdCkgMCkgKD4hIG91dCAodmVjIGxzdCkpKVxyXG4gICAgICAgIChjbG9zZSEgb3V0KSkpKSkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSB1bnN1Yi1hbGwsIDptZXRhIHs6ZG9jICJVbnN1YnNjcmliZXMgYWxsIGNoYW5uZWxzIGZyb20gYSBwdWIsIG9yIGEgdG9waWMgb2YgYSBwdWIiLCA6YXJnbGlzdHMgW1twXSBbcCB0b3BpY11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuc3ViLWFsbFxyXG4gXCJVbnN1YnNjcmliZXMgYWxsIGNoYW5uZWxzIGZyb20gYSBwdWIsIG9yIGEgdG9waWMgb2YgYSBwdWJcIlxyXG4gKFtwXSAodW5zdWItYWxsKiBwKSlcclxuIChbcCB0b3BpY10gKHVuc3ViLWFsbCogcCB0b3BpYykpKVxyXG4ifSB7OnN5bSA+ISwgOm1ldGEgezpkb2MgInB1dHMgYSB2YWwgaW50byBwb3J0LiBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gTXVzdCBiZSBjYWxsZWRcbiAgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIFdpbGwgcGFyayBpZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLlxuICBSZXR1cm5zIHRydWUgdW5sZXNzIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWQuIiwgOmFyZ2xpc3RzIChbcG9ydCB2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiA+IVxyXG4gXCJwdXRzIGEgdmFsIGludG8gcG9ydC4gbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIE11c3QgYmUgY2FsbGVkXFxuICBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gV2lsbCBwYXJrIGlmIG5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUuXFxuICBSZXR1cm5zIHRydWUgdW5sZXNzIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWQuXCJcclxuIFtwb3J0IHZhbF1cclxuICh0aHJvdyAoanMvRXJyb3IuIFwiPiEgdXNlZCBub3QgaW4gKGdvIC4uLikgYmxvY2tcIikpKVxyXG4ifSB7OnN5bSB1bm1peC1hbGwqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21dKX0sIDpwcm90b2NvbCBNaXh9IHs6c3ltIHNwbGl0LCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBwcmVkaWNhdGUgYW5kIGEgc291cmNlIGNoYW5uZWwgYW5kIHJldHVybnMgYSB2ZWN0b3Igb2YgdHdvXG4gIGNoYW5uZWxzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggd2lsbCBjb250YWluIHRoZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZVxuICBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSwgdGhlIHNlY29uZCB0aG9zZSBmb3Igd2hpY2ggaXQgcmV0dXJuZWRcbiAgZmFsc2UuXG5cbiAgVGhlIG91dCBjaGFubmVscyB3aWxsIGJlIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgdHdvIGJ1Zi1vci1ucyBjYW5cbiAgYmUgc3VwcGxpZWQuIFRoZSBjaGFubmVscyB3aWxsIGNsb3NlIGFmdGVyIHRoZSBzb3VyY2UgY2hhbm5lbCBoYXNcbiAgY2xvc2VkLiIsIDphcmdsaXN0cyBbW3AgY2hdIFtwIGNoIHQtYnVmLW9yLW4gZi1idWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0XHJcbiBcIlRha2VzIGEgcHJlZGljYXRlIGFuZCBhIHNvdXJjZSBjaGFubmVsIGFuZCByZXR1cm5zIGEgdmVjdG9yIG9mIHR3b1xcbiAgY2hhbm5lbHMsIHRoZSBmaXJzdCBvZiB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlcyBmb3Igd2hpY2ggdGhlXFxuICBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSwgdGhlIHNlY29uZCB0aG9zZSBmb3Igd2hpY2ggaXQgcmV0dXJuZWRcXG4gIGZhbHNlLlxcblxcbiAgVGhlIG91dCBjaGFubmVscyB3aWxsIGJlIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgdHdvIGJ1Zi1vci1ucyBjYW5cXG4gIGJlIHN1cHBsaWVkLiBUaGUgY2hhbm5lbHMgd2lsbCBjbG9zZSBhZnRlciB0aGUgc291cmNlIGNoYW5uZWwgaGFzXFxuICBjbG9zZWQuXCJcclxuIChbcCBjaF0gKHNwbGl0IHAgY2ggbmlsIG5pbCkpXHJcbiAoW3AgY2ggdC1idWYtb3ItbiBmLWJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW3RjIChjaGFuIHQtYnVmLW9yLW4pIGZjIChjaGFuIGYtYnVmLW9yLW4pXVxyXG4gICAoZ28tbG9vcFxyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbdiAoPCEgY2gpXVxyXG4gICAgIChpZlxyXG4gICAgICAobmlsPyB2KVxyXG4gICAgICAoZG8gKGNsb3NlISB0YykgKGNsb3NlISBmYykpXHJcbiAgICAgICh3aGVuICg+ISAoaWYgKHAgdikgdGMgZmMpIHYpIChyZWN1cikpKSkpXHJcbiAgIFt0YyBmY10pKSlcclxuIn0gezpzeW0gdW5taXgtYWxsLCA6bWV0YSB7OmRvYyAicmVtb3ZlcyBhbGwgaW5wdXRzIGZyb20gdGhlIG1peCIsIDphcmdsaXN0cyAoW21peF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVubWl4LWFsbFxyXG4gXCJyZW1vdmVzIGFsbCBpbnB1dHMgZnJvbSB0aGUgbWl4XCJcclxuIFttaXhdXHJcbiAodW5taXgtYWxsKiBtaXgpKVxyXG4ifSB7OnN5bSBmaWx0ZXI+LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIChbcCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbHRlcj5cclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIFtwIGNoXVxyXG4gKHJlaWZ5XHJcbiAgaW1wbC9DaGFubmVsXHJcbiAgKGNsb3NlISBbX10gKGltcGwvY2xvc2UhIGNoKSlcclxuICAoY2xvc2VkPyBbX10gKGltcGwvY2xvc2VkPyBjaCkpXHJcbiAgaW1wbC9SZWFkUG9ydFxyXG4gICh0YWtlISBbXyBmbjFdIChpbXBsL3Rha2UhIGNoIGZuMSkpXHJcbiAgaW1wbC9Xcml0ZVBvcnRcclxuICAocHV0IVxyXG4gICBbXyB2YWwgZm4xXVxyXG4gICAoaWZcclxuICAgIChwIHZhbClcclxuICAgIChpbXBsL3B1dCEgY2ggdmFsIGZuMSlcclxuICAgIChjaGFubmVscy9ib3ggKG5vdCAoaW1wbC9jbG9zZWQ/IGNoKSkpKSkpKVxyXG4ifSB7OnN5bSB0YXAqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gY2ggY2xvc2U/XSl9LCA6cHJvdG9jb2wgTXVsdH0gezpzeW0gdW50YXAsIDptZXRhIHs6ZG9jICJEaXNjb25uZWN0cyBhIHRhcmdldCBjaGFubmVsIGZyb20gYSBtdWx0IiwgOmFyZ2xpc3RzIChbbXVsdCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVudGFwXHJcbiBcIkRpc2Nvbm5lY3RzIGEgdGFyZ2V0IGNoYW5uZWwgZnJvbSBhIG11bHRcIlxyXG4gW211bHQgY2hdXHJcbiAodW50YXAqIG11bHQgY2gpKVxyXG4ifSB7OnN5bSBhbHRzISwgOm1ldGEgezpkb2MgIkNvbXBsZXRlcyBhdCBtb3N0IG9uZSBvZiBzZXZlcmFsIGNoYW5uZWwgb3BlcmF0aW9ucy4gTXVzdCBiZSBjYWxsZWRcbiAgIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBwb3J0cyBpcyBhIHZlY3RvciBvZiBjaGFubmVsIGVuZHBvaW50cyxcbiAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBjaGFubmVsIHRvIHRha2UgZnJvbSBvciBhIHZlY3RvciBvZlxuICBbY2hhbm5lbC10by1wdXQtdG8gdmFsLXRvLXB1dF0sIGluIGFueSBjb21iaW5hdGlvbi4gVGFrZXMgd2lsbCBiZVxuICBtYWRlIGFzIGlmIGJ5IDwhLCBhbmQgcHV0cyB3aWxsIGJlIG1hZGUgYXMgaWYgYnkgPiEuIFVubGVzc1xuICB0aGUgOnByaW9yaXR5IG9wdGlvbiBpcyB0cnVlLCBpZiBtb3JlIHRoYW4gb25lIHBvcnQgb3BlcmF0aW9uIGlzXG4gIHJlYWR5IGEgbm9uLWRldGVybWluaXN0aWMgY2hvaWNlIHdpbGwgYmUgbWFkZS4gSWYgbm8gb3BlcmF0aW9uIGlzXG4gIHJlYWR5IGFuZCBhIDpkZWZhdWx0IHZhbHVlIGlzIHN1cHBsaWVkLCBbZGVmYXVsdC12YWwgOmRlZmF1bHRdIHdpbGxcbiAgYmUgcmV0dXJuZWQsIG90aGVyd2lzZSBhbHRzISB3aWxsIHBhcmsgdW50aWwgdGhlIGZpcnN0IG9wZXJhdGlvbiB0b1xuICBiZWNvbWUgcmVhZHkgY29tcGxldGVzLiBSZXR1cm5zIFt2YWwgcG9ydF0gb2YgdGhlIGNvbXBsZXRlZFxuICBvcGVyYXRpb24sIHdoZXJlIHZhbCBpcyB0aGUgdmFsdWUgdGFrZW4gZm9yIHRha2VzLCBhbmQgYVxuICBib29sZWFuICh0cnVlIHVubGVzcyBhbHJlYWR5IGNsb3NlZCwgYXMgcGVyIHB1dCEpIGZvciBwdXRzLlxuXG4gIG9wdHMgYXJlIHBhc3NlZCBhcyA6a2V5IHZhbCAuLi4gU3VwcG9ydGVkIG9wdGlvbnM6XG5cbiAgOmRlZmF1bHQgdmFsIC0gdGhlIHZhbHVlIHRvIHVzZSBpZiBub25lIG9mIHRoZSBvcGVyYXRpb25zIGFyZSBpbW1lZGlhdGVseSByZWFkeVxuICA6cHJpb3JpdHkgdHJ1ZSAtIChkZWZhdWx0IG5pbCkgd2hlbiB0cnVlLCB0aGUgb3BlcmF0aW9ucyB3aWxsIGJlIHRyaWVkIGluIG9yZGVyLlxuXG4gIE5vdGU6IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBwb3J0IGV4cHMgb3IgdmFsIGV4cHJzIHdpbGwgYmVcbiAgdXNlZCwgbm9yIGluIHdoYXQgb3JkZXIgc2hvdWxkIHRoZXkgYmUsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZVxuICBkZXBlbmRlZCB1cG9uIGZvciBzaWRlIGVmZmVjdHMuIiwgOmFyZ2xpc3RzIChbcG9ydHMgJiB7OmFzIG9wdHN9XSl9LCA6c291cmNlICIoZGVmblxyXG4gYWx0cyFcclxuIFwiQ29tcGxldGVzIGF0IG1vc3Qgb25lIG9mIHNldmVyYWwgY2hhbm5lbCBvcGVyYXRpb25zLiBNdXN0IGJlIGNhbGxlZFxcbiAgIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBwb3J0cyBpcyBhIHZlY3RvciBvZiBjaGFubmVsIGVuZHBvaW50cyxcXG4gICB3aGljaCBjYW4gYmUgZWl0aGVyIGEgY2hhbm5lbCB0byB0YWtlIGZyb20gb3IgYSB2ZWN0b3Igb2ZcXG4gIFtjaGFubmVsLXRvLXB1dC10byB2YWwtdG8tcHV0XSwgaW4gYW55IGNvbWJpbmF0aW9uLiBUYWtlcyB3aWxsIGJlXFxuICBtYWRlIGFzIGlmIGJ5IDwhLCBhbmQgcHV0cyB3aWxsIGJlIG1hZGUgYXMgaWYgYnkgPiEuIFVubGVzc1xcbiAgdGhlIDpwcmlvcml0eSBvcHRpb24gaXMgdHJ1ZSwgaWYgbW9yZSB0aGFuIG9uZSBwb3J0IG9wZXJhdGlvbiBpc1xcbiAgcmVhZHkgYSBub24tZGV0ZXJtaW5pc3RpYyBjaG9pY2Ugd2lsbCBiZSBtYWRlLiBJZiBubyBvcGVyYXRpb24gaXNcXG4gIHJlYWR5IGFuZCBhIDpkZWZhdWx0IHZhbHVlIGlzIHN1cHBsaWVkLCBbZGVmYXVsdC12YWwgOmRlZmF1bHRdIHdpbGxcXG4gIGJlIHJldHVybmVkLCBvdGhlcndpc2UgYWx0cyEgd2lsbCBwYXJrIHVudGlsIHRoZSBmaXJzdCBvcGVyYXRpb24gdG9cXG4gIGJlY29tZSByZWFkeSBjb21wbGV0ZXMuIFJldHVybnMgW3ZhbCBwb3J0XSBvZiB0aGUgY29tcGxldGVkXFxuICBvcGVyYXRpb24sIHdoZXJlIHZhbCBpcyB0aGUgdmFsdWUgdGFrZW4gZm9yIHRha2VzLCBhbmQgYVxcbiAgYm9vbGVhbiAodHJ1ZSB1bmxlc3MgYWxyZWFkeSBjbG9zZWQsIGFzIHBlciBwdXQhKSBmb3IgcHV0cy5cXG5cXG4gIG9wdHMgYXJlIHBhc3NlZCBhcyA6a2V5IHZhbCAuLi4gU3VwcG9ydGVkIG9wdGlvbnM6XFxuXFxuICA6ZGVmYXVsdCB2YWwgLSB0aGUgdmFsdWUgdG8gdXNlIGlmIG5vbmUgb2YgdGhlIG9wZXJhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHJlYWR5XFxuICA6cHJpb3JpdHkgdHJ1ZSAtIChkZWZhdWx0IG5pbCkgd2hlbiB0cnVlLCB0aGUgb3BlcmF0aW9ucyB3aWxsIGJlIHRyaWVkIGluIG9yZGVyLlxcblxcbiAgTm90ZTogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHBvcnQgZXhwcyBvciB2YWwgZXhwcnMgd2lsbCBiZVxcbiAgdXNlZCwgbm9yIGluIHdoYXQgb3JkZXIgc2hvdWxkIHRoZXkgYmUsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZVxcbiAgZGVwZW5kZWQgdXBvbiBmb3Igc2lkZSBlZmZlY3RzLlwiXHJcbiBbcG9ydHMgJiB7OmFzIG9wdHN9XVxyXG4gKHRocm93IChqcy9FcnJvci4gXCJhbHRzISB1c2VkIG5vdCBpbiAoZ28gLi4uKSBibG9ja1wiKSkpXHJcbiJ9IHs6c3ltIHVuc3ViLCA6bWV0YSB7OmRvYyAiVW5zdWJzY3JpYmVzIGEgY2hhbm5lbCBmcm9tIGEgdG9waWMgb2YgYSBwdWIiLCA6YXJnbGlzdHMgKFtwIHRvcGljIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5zdWJcclxuIFwiVW5zdWJzY3JpYmVzIGEgY2hhbm5lbCBmcm9tIGEgdG9waWMgb2YgYSBwdWJcIlxyXG4gW3AgdG9waWMgY2hdXHJcbiAodW5zdWIqIHAgdG9waWMgY2gpKVxyXG4ifSB7OnN5bSBwb2xsISwgOm1ldGEgezpkb2MgIlRha2VzIGEgdmFsIGZyb20gcG9ydCBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIHNvIGltbWVkaWF0ZWx5LlxuICBOZXZlciBibG9ja3MuIFJldHVybnMgdmFsdWUgaWYgc3VjY2Vzc2Z1bCwgbmlsIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFtwb3J0XSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9sbCFcclxuIFwiVGFrZXMgYSB2YWwgZnJvbSBwb3J0IGlmIGl0J3MgcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkuXFxuICBOZXZlciBibG9ja3MuIFJldHVybnMgdmFsdWUgaWYgc3VjY2Vzc2Z1bCwgbmlsIG90aGVyd2lzZS5cIlxyXG4gW3BvcnRdXHJcbiAobGV0IFtyZXQgKGltcGwvdGFrZSEgcG9ydCAoZm4taGFuZGxlciBub3AgZmFsc2UpKV0gKHdoZW4gcmV0IEByZXQpKSlcclxuIn0gezpzeW0gbWFwPCwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyAoW2YgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXA8XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiBbZiBjaF1cclxuIChyZWlmeVxyXG4gIGltcGwvQ2hhbm5lbFxyXG4gIChjbG9zZSEgW19dIChpbXBsL2Nsb3NlISBjaCkpXHJcbiAgKGNsb3NlZD8gW19dIChpbXBsL2Nsb3NlZD8gY2gpKVxyXG4gIGltcGwvUmVhZFBvcnRcclxuICAodGFrZSFcclxuICAgW18gZm4xXVxyXG4gICAobGV0XHJcbiAgICBbcmV0XHJcbiAgICAgKGltcGwvdGFrZSFcclxuICAgICAgY2hcclxuICAgICAgKHJlaWZ5XHJcbiAgICAgICBpbXBsL0hhbmRsZXJcclxuICAgICAgIChhY3RpdmU/IFtfXSAoaW1wbC9hY3RpdmU/IGZuMSkpXHJcbiAgICAgICAoYmxvY2thYmxlPyBbX10gdHJ1ZSlcclxuICAgICAgIChjb21taXRcclxuICAgICAgICBbX11cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtmMSAoaW1wbC9jb21taXQgZm4xKV1cclxuICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgW3AxX180ODY3MCNdXHJcbiAgICAgICAgICAoZjEgKGlmIChuaWw/IHAxX180ODY3MCMpIG5pbCAoZiBwMV9fNDg2NzAjKSkpKSkpKSldXHJcbiAgICAoaWYgKGFuZCByZXQgKG5vdCAobmlsPyBAcmV0KSkpIChjaGFubmVscy9ib3ggKGYgQHJldCkpIHJldCkpKVxyXG4gIGltcGwvV3JpdGVQb3J0XHJcbiAgKHB1dCEgW18gdmFsIGZuMV0gKGltcGwvcHV0ISBjaCB2YWwgZm4xKSkpKVxyXG4ifSB7OnN5bSBkby1hbHRzLCA6bWV0YSB7OmRvYyAicmV0dXJucyBkZXJlZmFibGUgW3ZhbCBwb3J0XSBpZiBpbW1lZGlhdGUsIG5pbCBpZiBlbnF1ZXVlZCIsIDphcmdsaXN0cyAoW2ZyZXQgcG9ydHMgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvLWFsdHNcclxuIFwicmV0dXJucyBkZXJlZmFibGUgW3ZhbCBwb3J0XSBpZiBpbW1lZGlhdGUsIG5pbCBpZiBlbnF1ZXVlZFwiXHJcbiBbZnJldCBwb3J0cyBvcHRzXVxyXG4gKGxldFxyXG4gIFtmbGFnXHJcbiAgIChhbHQtZmxhZylcclxuICAgblxyXG4gICAoY291bnQgcG9ydHMpXHJcbiAgIGlkeHNcclxuICAgKHJhbmRvbS1hcnJheSBuKVxyXG4gICBwcmlvcml0eVxyXG4gICAoOnByaW9yaXR5IG9wdHMpXHJcbiAgIHJldFxyXG4gICAobG9vcFxyXG4gICAgW2kgMF1cclxuICAgICh3aGVuXHJcbiAgICAgKDwgaSBuKVxyXG4gICAgIChsZXRcclxuICAgICAgW2lkeFxyXG4gICAgICAgKGlmIHByaW9yaXR5IGkgKGFnZXQgaWR4cyBpKSlcclxuICAgICAgIHBvcnRcclxuICAgICAgIChudGggcG9ydHMgaWR4KVxyXG4gICAgICAgd3BvcnRcclxuICAgICAgICh3aGVuICh2ZWN0b3I/IHBvcnQpIChwb3J0IDApKVxyXG4gICAgICAgdmJveFxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgd3BvcnRcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFt2YWwgKHBvcnQgMSldXHJcbiAgICAgICAgIChpbXBsL3B1dCFcclxuICAgICAgICAgIHdwb3J0XHJcbiAgICAgICAgICB2YWxcclxuICAgICAgICAgIChhbHQtaGFuZGxlclxyXG4gICAgICAgICAgIGZsYWdcclxuICAgICAgICAgICAoZm4qIFtwMV9fNDg2NjYjXSAoZnJldCBbcDFfXzQ4NjY2IyB3cG9ydF0pKSkpKVxyXG4gICAgICAgIChpbXBsL3Rha2UhXHJcbiAgICAgICAgIHBvcnRcclxuICAgICAgICAgKGFsdC1oYW5kbGVyXHJcbiAgICAgICAgICBmbGFnXHJcbiAgICAgICAgICAoZm4qIFtwMV9fNDg2NjcjXSAoZnJldCBbcDFfXzQ4NjY3IyBwb3J0XSkpKSkpXVxyXG4gICAgICAoaWZcclxuICAgICAgIHZib3hcclxuICAgICAgIChjaGFubmVscy9ib3ggW0B2Ym94IChvciB3cG9ydCBwb3J0KV0pXHJcbiAgICAgICAocmVjdXIgKGluYyBpKSkpKSkpXVxyXG4gIChvclxyXG4gICByZXRcclxuICAgKHdoZW5cclxuICAgIChjb250YWlucz8gb3B0cyA6ZGVmYXVsdClcclxuICAgICh3aGVuLWxldFxyXG4gICAgIFtnb3QgKGFuZCAoaW1wbC9hY3RpdmU/IGZsYWcpIChpbXBsL2NvbW1pdCBmbGFnKSldXHJcbiAgICAgKGNoYW5uZWxzL2JveCBbKDpkZWZhdWx0IG9wdHMpIDpkZWZhdWx0XSkpKSkpKVxyXG4ifSB7OnN5bSBwaXBlbGluZS1hc3luYywgOm1ldGEgezpkb2MgIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cbiAgY2hhbm5lbCwgc3ViamVjdCB0byB0aGUgYXN5bmMgZnVuY3Rpb24gYWYsIHdpdGggcGFyYWxsZWxpc20gbi4gYWZcbiAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBhbiBpbnB1dCB2YWx1ZSBhbmRcbiAgdGhlIHNlY29uZCBhIGNoYW5uZWwgb24gd2hpY2ggdG8gcGxhY2UgdGhlIHJlc3VsdChzKS4gYWYgbXVzdCBjbG9zZSFcbiAgdGhlIGNoYW5uZWwgYmVmb3JlIHJldHVybmluZy4gIFRoZSBwcmVzdW1wdGlvbiBpcyB0aGF0IGFmIHdpbGxcbiAgcmV0dXJuIGltbWVkaWF0ZWx5LCBoYXZpbmcgbGF1bmNoZWQgc29tZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uXG4gIHdob3NlIGNvbXBsZXRpb24vY2FsbGJhY2sgd2lsbCBtYW5pcHVsYXRlIHRoZSByZXN1bHQgY2hhbm5lbC4gT3V0cHV0c1xuICB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHJlbGF0aXZlIHRvICB0aGUgaW5wdXRzLiBCeSBkZWZhdWx0LCB0aGUgdG9cbiAgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlXG4gIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tXG4gIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzLiIsIDphcmdsaXN0cyBbW24gdG8gYWYgZnJvbV0gW24gdG8gYWYgZnJvbSBjbG9zZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwaXBlbGluZS1hc3luY1xyXG4gXCJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXFxuICBjaGFubmVsLCBzdWJqZWN0IHRvIHRoZSBhc3luYyBmdW5jdGlvbiBhZiwgd2l0aCBwYXJhbGxlbGlzbSBuLiBhZlxcbiAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBhbiBpbnB1dCB2YWx1ZSBhbmRcXG4gIHRoZSBzZWNvbmQgYSBjaGFubmVsIG9uIHdoaWNoIHRvIHBsYWNlIHRoZSByZXN1bHQocykuIGFmIG11c3QgY2xvc2UhXFxuICB0aGUgY2hhbm5lbCBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIHByZXN1bXB0aW9uIGlzIHRoYXQgYWYgd2lsbFxcbiAgcmV0dXJuIGltbWVkaWF0ZWx5LCBoYXZpbmcgbGF1bmNoZWQgc29tZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uXFxuICB3aG9zZSBjb21wbGV0aW9uL2NhbGxiYWNrIHdpbGwgbWFuaXB1bGF0ZSB0aGUgcmVzdWx0IGNoYW5uZWwuIE91dHB1dHNcXG4gIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIgcmVsYXRpdmUgdG8gIHRoZSBpbnB1dHMuIEJ5IGRlZmF1bHQsIHRoZSB0b1xcbiAgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlXFxuICBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbCBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbVxcbiAgY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXMuXCJcclxuIChbbiB0byBhZiBmcm9tXSAocGlwZWxpbmUtYXN5bmMgbiB0byBhZiBmcm9tIHRydWUpKVxyXG4gKFtuIHRvIGFmIGZyb20gY2xvc2U/XSAocGlwZWxpbmUqIG4gdG8gYWYgZnJvbSBjbG9zZT8gbmlsIDphc3luYykpKVxyXG4ifSB7OnN5bSBNaXgsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChhZG1peCogc29sby1tb2RlKiB0b2dnbGUqIHVubWl4KiB1bm1peC1hbGwqKX0gezpzeW0gdG9nZ2xlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIHN0YXRlLW1hcF0pfSwgOnByb3RvY29sIE1peH0gezpzeW0gbXVsdCwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBtdWx0KGlwbGUpIG9mIHRoZSBzdXBwbGllZCBjaGFubmVsLiBDaGFubmVsc1xuICBjb250YWluaW5nIGNvcGllcyBvZiB0aGUgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZCB3aXRoICd0YXAnLCBhbmRcbiAgZGV0YWNoZWQgd2l0aCAndW50YXAnLlxuXG4gIEVhY2ggaXRlbSBpcyBkaXN0cmlidXRlZCB0byBhbGwgdGFwcyBpbiBwYXJhbGxlbCBhbmQgc3luY2hyb25vdXNseSxcbiAgaS5lLiBlYWNoIHRhcCBtdXN0IGFjY2VwdCBiZWZvcmUgdGhlIG5leHQgaXRlbSBpcyBkaXN0cmlidXRlZC4gVXNlXG4gIGJ1ZmZlcmluZy93aW5kb3dpbmcgdG8gcHJldmVudCBzbG93IHRhcHMgZnJvbSBob2xkaW5nIHVwIHRoZSBtdWx0LlxuXG4gIEl0ZW1zIHJlY2VpdmVkIHdoZW4gdGhlcmUgYXJlIG5vIHRhcHMgZ2V0IGRyb3BwZWQuXG5cbiAgSWYgYSB0YXAgcHV0cyB0byBhIGNsb3NlZCBjaGFubmVsLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbXVsdC4iLCA6YXJnbGlzdHMgKFtjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bHRcclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG11bHQoaXBsZSkgb2YgdGhlIHN1cHBsaWVkIGNoYW5uZWwuIENoYW5uZWxzXFxuICBjb250YWluaW5nIGNvcGllcyBvZiB0aGUgY2hhbm5lbCBjYW4gYmUgY3JlYXRlZCB3aXRoICd0YXAnLCBhbmRcXG4gIGRldGFjaGVkIHdpdGggJ3VudGFwJy5cXG5cXG4gIEVhY2ggaXRlbSBpcyBkaXN0cmlidXRlZCB0byBhbGwgdGFwcyBpbiBwYXJhbGxlbCBhbmQgc3luY2hyb25vdXNseSxcXG4gIGkuZS4gZWFjaCB0YXAgbXVzdCBhY2NlcHQgYmVmb3JlIHRoZSBuZXh0IGl0ZW0gaXMgZGlzdHJpYnV0ZWQuIFVzZVxcbiAgYnVmZmVyaW5nL3dpbmRvd2luZyB0byBwcmV2ZW50IHNsb3cgdGFwcyBmcm9tIGhvbGRpbmcgdXAgdGhlIG11bHQuXFxuXFxuICBJdGVtcyByZWNlaXZlZCB3aGVuIHRoZXJlIGFyZSBubyB0YXBzIGdldCBkcm9wcGVkLlxcblxcbiAgSWYgYSB0YXAgcHV0cyB0byBhIGNsb3NlZCBjaGFubmVsLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbXVsdC5cIlxyXG4gW2NoXVxyXG4gKGxldFxyXG4gIFtjc1xyXG4gICAoYXRvbSB7fSlcclxuICAgbVxyXG4gICAocmVpZnlcclxuICAgIE11eFxyXG4gICAgKG11eGNoKiBbX10gY2gpXHJcbiAgICBNdWx0XHJcbiAgICAodGFwKiBbXyBjaCBjbG9zZT9dIChzd2FwISBjcyBhc3NvYyBjaCBjbG9zZT8pIG5pbClcclxuICAgICh1bnRhcCogW18gY2hdIChzd2FwISBjcyBkaXNzb2MgY2gpIG5pbClcclxuICAgICh1bnRhcC1hbGwqIFtfXSAocmVzZXQhIGNzIHt9KSBuaWwpKVxyXG4gICBkY2hhblxyXG4gICAoY2hhbiAxKVxyXG4gICBkY3RyXHJcbiAgIChhdG9tIG5pbClcclxuICAgZG9uZVxyXG4gICAoZm4gW19dICh3aGVuICh6ZXJvPyAoc3dhcCEgZGN0ciBkZWMpKSAocHV0ISBkY2hhbiB0cnVlKSkpXVxyXG4gIChnby1sb29wXHJcbiAgIFtdXHJcbiAgIChsZXRcclxuICAgIFt2YWwgKDwhIGNoKV1cclxuICAgIChpZlxyXG4gICAgIChuaWw/IHZhbClcclxuICAgICAoZG9zZXEgW1tjIGNsb3NlP10gQGNzXSAod2hlbiBjbG9zZT8gKGNsb3NlISBjKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbY2hzIChrZXlzIEBjcyldXHJcbiAgICAgIChyZXNldCEgZGN0ciAoY291bnQgY2hzKSlcclxuICAgICAgKGRvc2VxXHJcbiAgICAgICBbYyBjaHNdXHJcbiAgICAgICAod2hlbi1ub3QgKHB1dCEgYyB2YWwgZG9uZSkgKGRvbmUgbmlsKSAodW50YXAqIG0gYykpKVxyXG4gICAgICAod2hlbiAoc2VxIGNocykgKDwhIGRjaGFuKSlcclxuICAgICAgKHJlY3VyKSkpKSlcclxuICBtKSlcclxuIn0gezpzeW0gbWFwY2F0PCwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW2YgaW5dIFtmIGluIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwY2F0PFxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtmIGluXSAobWFwY2F0PCBmIGluIG5pbCkpXHJcbiAoW2YgaW4gYnVmLW9yLW5dIChsZXQgW291dCAoY2hhbiBidWYtb3ItbildIChtYXBjYXQqIGYgaW4gb3V0KSBvdXQpKSlcclxuIn0gezpzeW0gaW9jLWFsdHMhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIGNvbnQtYmxvY2sgcG9ydHMgJiB7OmFzIG9wdHN9XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW9jLWFsdHMhXHJcbiBbc3RhdGUgY29udC1ibG9jayBwb3J0cyAmIHs6YXMgb3B0c31dXHJcbiAoaW9jL2FzZXQtYWxsISBzdGF0ZSBoZWxwZXJzL1NUQVRFLUlEWCBjb250LWJsb2NrKVxyXG4gKHdoZW4tbGV0XHJcbiAgW2NiXHJcbiAgIChjbGpzLmNvcmUuYXN5bmMvZG8tYWx0c1xyXG4gICAgKGZuXHJcbiAgICAgW3ZhbF1cclxuICAgICAoaW9jL2FzZXQtYWxsISBzdGF0ZSBoZWxwZXJzL1ZBTFVFLUlEWCB2YWwpXHJcbiAgICAgKGhlbHBlcnMvcnVuLXN0YXRlLW1hY2hpbmUtd3JhcHBlZCBzdGF0ZSkpXHJcbiAgICBwb3J0c1xyXG4gICAgb3B0cyldXHJcbiAgKGlvYy9hc2V0LWFsbCEgc3RhdGUgaGVscGVycy9WQUxVRS1JRFggQGNiKVxyXG4gIDpyZWN1cikpXHJcbiJ9IHs6c3ltIHVuYmxvY2tpbmctYnVmZmVyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBhIGNoYW5uZWwgY3JlYXRlZCB3aXRoIGJ1ZmYgd2lsbCBuZXZlciBibG9jay4gVGhhdCBpcyB0byBzYXksXG4gICBwdXRzIGludG8gdGhpcyBidWZmZXIgd2lsbCBuZXZlciBjYXVzZSB0aGUgYnVmZmVyIHRvIGJlIGZ1bGwuICIsIDphcmdsaXN0cyAoW2J1ZmZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmJsb2NraW5nLWJ1ZmZlcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGEgY2hhbm5lbCBjcmVhdGVkIHdpdGggYnVmZiB3aWxsIG5ldmVyIGJsb2NrLiBUaGF0IGlzIHRvIHNheSxcXG4gICBwdXRzIGludG8gdGhpcyBidWZmZXIgd2lsbCBuZXZlciBjYXVzZSB0aGUgYnVmZmVyIHRvIGJlIGZ1bGwuIFwiXHJcbiBbYnVmZl1cclxuIChzYXRpc2ZpZXM/IGltcGwvVW5ibG9ja2luZ0J1ZmZlciBidWZmKSlcclxuIn0gezpzeW0gcHV0ISwgOm1ldGEgezpkb2MgIkFzeW5jaHJvbm91c2x5IHB1dHMgYSB2YWwgaW50byBwb3J0LCBjYWxsaW5nIGZuMSAoaWYgc3VwcGxpZWQpIHdoZW5cbiAgIGNvbXBsZXRlLiBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gV2lsbCB0aHJvdyBpZiBjbG9zZWQuIElmXG4gICBvbi1jYWxsZXI/IChkZWZhdWx0IHRydWUpIGlzIHRydWUsIGFuZCB0aGUgcHV0IGlzIGltbWVkaWF0ZWx5XG4gICBhY2NlcHRlZCwgd2lsbCBjYWxsIGZuMSBvbiBjYWxsaW5nIHRocmVhZC4gIFJldHVybnMgbmlsLiIsIDphcmdsaXN0cyBbW3BvcnQgdmFsXSBbcG9ydCB2YWwgZm4xXSBbcG9ydCB2YWwgZm4xIG9uLWNhbGxlcj9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwdXQhXHJcbiBcIkFzeW5jaHJvbm91c2x5IHB1dHMgYSB2YWwgaW50byBwb3J0LCBjYWxsaW5nIGZuMSAoaWYgc3VwcGxpZWQpIHdoZW5cXG4gICBjb21wbGV0ZS4gbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIFdpbGwgdGhyb3cgaWYgY2xvc2VkLiBJZlxcbiAgIG9uLWNhbGxlcj8gKGRlZmF1bHQgdHJ1ZSkgaXMgdHJ1ZSwgYW5kIHRoZSBwdXQgaXMgaW1tZWRpYXRlbHlcXG4gICBhY2NlcHRlZCwgd2lsbCBjYWxsIGZuMSBvbiBjYWxsaW5nIHRocmVhZC4gIFJldHVybnMgbmlsLlwiXHJcbiAoW3BvcnQgdmFsXSAoaWYtbGV0IFtyZXQgKGltcGwvcHV0ISBwb3J0IHZhbCBmaG5vcCldIEByZXQgdHJ1ZSkpXHJcbiAoW3BvcnQgdmFsIGZuMV0gKHB1dCEgcG9ydCB2YWwgZm4xIHRydWUpKVxyXG4gKFtwb3J0IHZhbCBmbjEgb24tY2FsbGVyP11cclxuICAoaWYtbGV0XHJcbiAgIFtyZXRiIChpbXBsL3B1dCEgcG9ydCB2YWwgKGZuLWhhbmRsZXIgZm4xKSldXHJcbiAgIChsZXRcclxuICAgIFtyZXQgQHJldGJdXHJcbiAgICAoaWYgb24tY2FsbGVyPyAoZm4xIHJldCkgKGRpc3BhdGNoL3J1biAoZm4qIFtdIChmbjEgcmV0KSkpKVxyXG4gICAgcmV0KVxyXG4gICB0cnVlKSkpXHJcbiJ9IHs6c3ltIHRha2UhLCA6bWV0YSB7OmRvYyAiQXN5bmNocm9ub3VzbHkgdGFrZXMgYSB2YWwgZnJvbSBwb3J0LCBwYXNzaW5nIHRvIGZuMS4gV2lsbCBwYXNzIG5pbFxuICAgaWYgY2xvc2VkLiBJZiBvbi1jYWxsZXI/IChkZWZhdWx0IHRydWUpIGlzIHRydWUsIGFuZCB2YWx1ZSBpc1xuICAgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCB3aWxsIGNhbGwgZm4xIG9uIGNhbGxpbmcgdGhyZWFkLlxuICAgUmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIFtbcG9ydCBmbjFdIFtwb3J0IGZuMSBvbi1jYWxsZXI/XV19LCA6c291cmNlICIoZGVmblxyXG4gdGFrZSFcclxuIFwiQXN5bmNocm9ub3VzbHkgdGFrZXMgYSB2YWwgZnJvbSBwb3J0LCBwYXNzaW5nIHRvIGZuMS4gV2lsbCBwYXNzIG5pbFxcbiAgIGlmIGNsb3NlZC4gSWYgb24tY2FsbGVyPyAoZGVmYXVsdCB0cnVlKSBpcyB0cnVlLCBhbmQgdmFsdWUgaXNcXG4gICBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHdpbGwgY2FsbCBmbjEgb24gY2FsbGluZyB0aHJlYWQuXFxuICAgUmV0dXJucyBuaWwuXCJcclxuIChbcG9ydCBmbjFdICh0YWtlISBwb3J0IGZuMSB0cnVlKSlcclxuIChbcG9ydCBmbjEgb24tY2FsbGVyP11cclxuICAobGV0XHJcbiAgIFtyZXQgKGltcGwvdGFrZSEgcG9ydCAoZm4taGFuZGxlciBmbjEpKV1cclxuICAgKHdoZW5cclxuICAgIHJldFxyXG4gICAgKGxldFxyXG4gICAgIFt2YWwgQHJldF1cclxuICAgICAoaWYgb24tY2FsbGVyPyAoZm4xIHZhbCkgKGRpc3BhdGNoL3J1biAoZm4qIFtdIChmbjEgdmFsKSkpKSkpXHJcbiAgIG5pbCkpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLmJ1ZmZlcnMgKHs6c3ltIGFjb3B5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NyYyBzcmMtc3RhcnQgZGVzdCBkZXN0LXN0YXJ0IGxlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFjb3B5XHJcbiBbc3JjIHNyYy1zdGFydCBkZXN0IGRlc3Qtc3RhcnQgbGVuXVxyXG4gKGxvb3BcclxuICBbY250IDBdXHJcbiAgKHdoZW5cclxuICAgKDwgY250IGxlbilcclxuICAgKGFzZXQgZGVzdCAoKyBkZXN0LXN0YXJ0IGNudCkgKGFnZXQgc3JjICgrIHNyYy1zdGFydCBjbnQpKSlcclxuICAgKHJlY3VyIChpbmMgY250KSkpKSlcclxuIn0gezpzeW0gcmluZy1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJpbmctYnVmZmVyXHJcbiBbbl1cclxuIChhc3NlcnQgKD4gbiAwKSBcIkNhbid0IGNyZWF0ZSBhIHJpbmcgYnVmZmVyIG9mIHNpemUgMFwiKVxyXG4gKFJpbmdCdWZmZXIuIDAgMCAwIChtYWtlLWFycmF5IG4pKSlcclxuIn0gezpzeW0gZml4ZWQtYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuIGZpeGVkLWJ1ZmZlciBbbl0gKEZpeGVkQnVmZmVyLiAocmluZy1idWZmZXIgbikgbikpXHJcbiJ9IHs6c3ltIGRyb3BwaW5nLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmbiBkcm9wcGluZy1idWZmZXIgW25dIChEcm9wcGluZ0J1ZmZlci4gKHJpbmctYnVmZmVyIG4pIG4pKVxyXG4ifSB7OnN5bSBzbGlkaW5nLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmbiBzbGlkaW5nLWJ1ZmZlciBbbl0gKFNsaWRpbmdCdWZmZXIuIChyaW5nLWJ1ZmZlciBuKSBuKSlcclxuIn0gezpzeW0gcHJvbWlzZS1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBwcm9taXNlLWJ1ZmZlciBbXSAoUHJvbWlzZUJ1ZmZlci4gTk8tVkFMKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC5wcm90b2NvbHMgKHs6c3ltIHJlbW92ZSEsIDptZXRhIHs6ZG9jICJyZW1vdmUgYW5kIHJldHVybiBuZXh0IGl0ZW0gZnJvbSBidWZmZXIsIGNhbGxlZCB1bmRlciBjaGFuIG11dGV4IiwgOmFyZ2xpc3RzIChbYl0pfSwgOnByb3RvY29sIEJ1ZmZlcn0gezpzeW0gY2xvc2UtYnVmISwgOm1ldGEgezpkb2MgImNhbGxlZCBvbiBjaGFuIGNsb3NlZCB1bmRlciBjaGFuIG11dGV4LCByZXR1cm4gaWdub3JlZCIsIDphcmdsaXN0cyAoW2JdKX0sIDpwcm90b2NvbCBCdWZmZXJ9IHs6c3ltIGNsb3NlISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjaGFuXSl9LCA6cHJvdG9jb2wgQ2hhbm5lbH0gezpzeW0gSGFuZGxlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGFjdGl2ZT8gYmxvY2thYmxlPyBjb21taXQpfSB7OnN5bSBibG9ja2FibGU/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB0cnVlIGlmIHRoaXMgaGFuZGxlciBtYXkgYmUgYmxvY2tlZCwgb3RoZXJ3aXNlIGl0IG11c3Qgbm90IGJsb2NrIiwgOmFyZ2xpc3RzIChbaF0pfSwgOnByb3RvY29sIEhhbmRsZXJ9IHs6c3ltIGFjdGl2ZT8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRydWUgaWYgaGFzIGNhbGxiYWNrLiBNdXN0IHdvcmsgdy9vIGxvY2siLCA6YXJnbGlzdHMgKFtoXSl9LCA6cHJvdG9jb2wgSGFuZGxlcn0gezpzeW0gQnVmZmVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoYWRkISogY2xvc2UtYnVmISBmdWxsPyByZW1vdmUhKX0gezpzeW0gZnVsbD8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRydWUgaWYgYnVmZmVyIGNhbm5vdCBhY2NlcHQgcHV0IiwgOmFyZ2xpc3RzIChbYl0pfSwgOnByb3RvY29sIEJ1ZmZlcn0gezpzeW0gYWRkISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tiXSBbYiBpdG1dXX0sIDpzb3VyY2UgIihkZWZuIGFkZCEgKFtiXSBiKSAoW2IgaXRtXSAoYXNzZXJ0IChub3QgKG5pbD8gaXRtKSkpIChhZGQhKiBiIGl0bSkpKVxyXG4ifSB7OnN5bSBhZGQhKiwgOm1ldGEgezpkb2MgImlmIHJvb20sIGFkZCBpdGVtIHRvIHRoZSBidWZmZXIsIHJldHVybnMgYiwgY2FsbGVkIHVuZGVyIGNoYW4gbXV0ZXgiLCA6YXJnbGlzdHMgKFtiIGl0bV0pfSwgOnByb3RvY29sIEJ1ZmZlcn0gezpzeW0gUmVhZFBvcnQsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh0YWtlISl9IHs6c3ltIENoYW5uZWwsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChjbG9zZSEgY2xvc2VkPyl9IHs6c3ltIGNsb3NlZD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2hhbl0pfSwgOnByb3RvY29sIENoYW5uZWx9IHs6c3ltIFVuYmxvY2tpbmdCdWZmZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgpfSB7OnN5bSBNQVgtUVVFVUUtU0laRSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTUFYLVFVRVVFLVNJWkUgMTAyNClcclxuIn0gezpzeW0gY29tbWl0LCA6bWV0YSB7OmRvYyAiY29tbWl0IHRvIGZ1bGZpbGxpbmcgaXRzIGVuZCBvZiB0aGUgdHJhbnNmZXIsIHJldHVybnMgY2IuIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBsb2NrIiwgOmFyZ2xpc3RzIChbaF0pfSwgOnByb3RvY29sIEhhbmRsZXJ9IHs6c3ltIHB1dCEsIDptZXRhIHs6ZG9jICJkZXJlZmFibGUgYm9vbGVhbiAoZmFsc2UgaWYgYWxyZWFkeSBjbG9zZWQpIGlmIGhhbmRsZWQsIG5pbCBpZiBwdXQgd2FzIGVucXVldWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgdGhyb3cgb24gbmlsIHZhbC4iLCA6YXJnbGlzdHMgKFtwb3J0IHZhbCBmbjEtaGFuZGxlcl0pfSwgOnByb3RvY29sIFdyaXRlUG9ydH0gezpzeW0gdGFrZSEsIDptZXRhIHs6ZG9jICJkZXJlZmFibGUgdmFsIGlmIHRha2VuLCBuaWwgaWYgdGFrZSB3YXMgZW5xdWV1ZWQiLCA6YXJnbGlzdHMgKFtwb3J0IGZuMS1oYW5kbGVyXSl9LCA6cHJvdG9jb2wgUmVhZFBvcnR9IHs6c3ltIFdyaXRlUG9ydCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHB1dCEpfSksIHJ1bS5kZXJpdmVkLWF0b20gKHs6c3ltIGRlcml2ZWQtYXRvbSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tyZWZzIGtleSBmXSBbcmVmcyBrZXkgZiBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVyaXZlZC1hdG9tXHJcbiAoW3JlZnMga2V5IGZdIChkZXJpdmVkLWF0b20gcmVmcyBrZXkgZiB7fSkpXHJcbiAoW3JlZnMga2V5IGYgb3B0c11cclxuICAobGV0XHJcbiAgIFt7OmtleXMgW3JlZiBjaGVjay1lcXVhbHM/XSwgOm9yIHtjaGVjay1lcXVhbHM/IHRydWV9fVxyXG4gICAgb3B0c1xyXG4gICAgcmVjYWxjXHJcbiAgICAoY2FzZVxyXG4gICAgIChjb3VudCByZWZzKVxyXG4gICAgIDFcclxuICAgICAobGV0IFtbYV0gcmVmc10gKGZuKiBbXSAoZiBAYSkpKVxyXG4gICAgIDJcclxuICAgICAobGV0IFtbYSBiXSByZWZzXSAoZm4qIFtdIChmIEBhIEBiKSkpXHJcbiAgICAgM1xyXG4gICAgIChsZXQgW1thIGIgY10gcmVmc10gKGZuKiBbXSAoZiBAYSBAYiBAYykpKVxyXG4gICAgIChmbiogW10gKGFwcGx5IGYgKG1hcCBkZXJlZiByZWZzKSkpKVxyXG4gICAgc2lua1xyXG4gICAgKGlmIHJlZiAoZG90byByZWYgKHJlc2V0ISAocmVjYWxjKSkpIChhdG9tIChyZWNhbGMpKSlcclxuICAgIHdhdGNoXHJcbiAgICAoaWZcclxuICAgICBjaGVjay1lcXVhbHM/XHJcbiAgICAgKGZuXHJcbiAgICAgIFtfIF8gXyBfXVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbbmV3LXZhbCAocmVjYWxjKV1cclxuICAgICAgICh3aGVuIChub3Q9IEBzaW5rIG5ldy12YWwpIChyZXNldCEgc2luayBuZXctdmFsKSkpKVxyXG4gICAgIChmbiBbXyBfIF8gX10gKHJlc2V0ISBzaW5rIChyZWNhbGMpKSkpXVxyXG4gICAoZG9zZXEgW3JlZiByZWZzXSAoYWRkLXdhdGNoIHJlZiBrZXkgd2F0Y2gpKVxyXG4gICBzaW5rKSkpXHJcbiJ9KSwgbWlzdGFrZXMtd2VyZS1tYWRlLmNvcmUgKHs6c3ltIGNhbi1yZWRvPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gcmVkby4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FuLXJlZG8/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gcmVkby5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAoc29tZT8gKGdldC1uZXh0LXN0YXRlICplZGl0LWhpc3RvcnkpKSlcclxuIn0gezpzeW0gYXRvbT8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBhdG9tP1xyXG4gKGZuKlxyXG4gIFtwMV9fNDkwMTUjXVxyXG4gIChpbnN0YW5jZT9cclxuICAgIz8oOmNsaiBjbG9qdXJlLmxhbmcuQXRvbSA6Y2xqcyBjbGpzLmNvcmUvQXRvbSlcclxuICAgcDFfXzQ5MDE1IykpKVxyXG4ifSB7OnN5bSBnZXQtY3VycmVudC1zdGF0ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY3VycmVudC1zdGF0ZVxyXG4gXCJSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZSBzdGF0ZXNdfSBAKmVkaXQtaGlzdG9yeV1cclxuICAoZ2V0IHN0YXRlcyBjdXJyZW50LXN0YXRlKSkpXHJcbiJ9IHs6c3ltIHVuZG8hLCA6bWV0YSB7OmRvYyAiQ2hhbmdlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmRvIVxyXG4gXCJDaGFuZ2VzIHRoZSBjdXJyZW50IHN0YXRlIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKHdoZW4tbGV0XHJcbiAgW3N0YXRlIChnZXQtcHJldmlvdXMtc3RhdGUgKmVkaXQtaGlzdG9yeSldXHJcbiAgKHN3YXAhICplZGl0LWhpc3RvcnkgdXBkYXRlIDpjdXJyZW50LXN0YXRlIGRlYylcclxuICBzdGF0ZSkpXHJcbiJ9IHs6c3ltIHJlZG8hLCA6bWV0YSB7OmRvYyAiQ2hhbmdlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZG8hXHJcbiBcIkNoYW5nZXMgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJldHVybnMgdGhlIG5leHQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuICh3aGVuLWxldFxyXG4gIFtzdGF0ZSAoZ2V0LW5leHQtc3RhdGUgKmVkaXQtaGlzdG9yeSldXHJcbiAgKHN3YXAhICplZGl0LWhpc3RvcnkgdXBkYXRlIDpjdXJyZW50LXN0YXRlIGluYylcclxuICBzdGF0ZSkpXHJcbiJ9IHs6c3ltIGNhbi11bmRvPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gdW5kby4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FuLXVuZG8/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gdW5kby5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAoc29tZT8gKGdldC1wcmV2aW91cy1zdGF0ZSAqZWRpdC1oaXN0b3J5KSkpXHJcbiJ9IHs6c3ltIGdldC1uZXh0LXN0YXRlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1uZXh0LXN0YXRlXHJcbiBcIlJldHVybnMgdGhlIG5leHQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LXN0YXRlIHN0YXRlc119IEAqZWRpdC1oaXN0b3J5XVxyXG4gIChnZXQgc3RhdGVzIChpbmMgY3VycmVudC1zdGF0ZSkpKSlcclxuIn0gezpzeW0gdXBkYXRlLWN1cnNvci1wb3NpdGlvbiEsIDptZXRhIHs6ZG9jICJVcGRhdGVzIG9ubHkgdGhlIGN1cnNvciBwb3NpdGlvbi4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5IGN1cnNvci1wb3NpdGlvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hXHJcbiBcIlVwZGF0ZXMgb25seSB0aGUgY3Vyc29yIHBvc2l0aW9uLlwiXHJcbiBbKmVkaXQtaGlzdG9yeSBjdXJzb3ItcG9zaXRpb25dXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZV19IEAqZWRpdC1oaXN0b3J5XVxyXG4gICh3aGVuXHJcbiAgICg+PSBjdXJyZW50LXN0YXRlIDApXHJcbiAgIChzd2FwIVxyXG4gICAgKmVkaXQtaGlzdG9yeVxyXG4gICAgYXNzb2MtaW5cclxuICAgIFs6c3RhdGVzIGN1cnJlbnQtc3RhdGUgOmN1cnNvci1wb3NpdGlvbl1cclxuICAgIGN1cnNvci1wb3NpdGlvbikpKSlcclxuIn0gezpzeW0gdXBkYXRlLWVkaXQtaGlzdG9yeSEsIDptZXRhIHs6ZG9jICJVcGRhdGVzIHRoZSBlZGl0IGhpc3RvcnkgYXRvbS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5IHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWVkaXQtaGlzdG9yeSFcclxuIFwiVXBkYXRlcyB0aGUgZWRpdCBoaXN0b3J5IGF0b20uXCJcclxuIFsqZWRpdC1oaXN0b3J5IHN0YXRlXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtc3RhdGUgc3RhdGVzIGxpbWl0XX1cclxuICAgQCplZGl0LWhpc3RvcnlcclxuICAgb2xkLXN0YXRlXHJcbiAgIChnZXQgc3RhdGVzIGN1cnJlbnQtc3RhdGUpXHJcbiAgIG9sZC1jdXJzb3ItcG9zaXRpb25cclxuICAgKG9yIChmaXJzdCAoOm9yaWdpbmFsLWN1cnNvci1wb3NpdGlvbiBvbGQtc3RhdGUpKSAwKVxyXG4gICBuZXctY3Vyc29yLXBvc2l0aW9uXHJcbiAgIChmaXJzdCAoOmN1cnNvci1wb3NpdGlvbiBzdGF0ZSkpXHJcbiAgIG5ldy1jdXJzb3ItY2hhbmdlXHJcbiAgICgtIG5ldy1jdXJzb3ItcG9zaXRpb24gb2xkLWN1cnNvci1wb3NpdGlvbilcclxuICAgc3RhdGVcclxuICAgKGFzc29jIHN0YXRlIDpvcmlnaW5hbC1jdXJzb3ItcG9zaXRpb24gKDpjdXJzb3ItcG9zaXRpb24gc3RhdGUpKV1cclxuICAod2hlblxyXG4gICAob3JcclxuICAgIChub3Q9ICg6dGV4dCBvbGQtc3RhdGUpICg6dGV4dCBzdGF0ZSkpXHJcbiAgICAoOnNlbGVjdGlvbi1jaGFuZ2U/IHN0YXRlKSlcclxuICAgKHN3YXAhXHJcbiAgICAqZWRpdC1oaXN0b3J5XHJcbiAgICAoZm5cclxuICAgICBbZWRpdC1oaXN0b3J5XVxyXG4gICAgIChsZXRcclxuICAgICAgW25ldy1jdXJyZW50LXN0YXRlXHJcbiAgICAgICAoaWZcclxuICAgICAgICAob3IgKDw9IGN1cnJlbnQtc3RhdGUgMSkgKG5vdD0gbmV3LWN1cnNvci1jaGFuZ2UgMSkpXHJcbiAgICAgICAgKGluYyBjdXJyZW50LXN0YXRlKVxyXG4gICAgICAgIGN1cnJlbnQtc3RhdGUpXHJcbiAgICAgICBuZXctc3RhdGVzXHJcbiAgICAgICAoc3VidmVjIHN0YXRlcyAwIG5ldy1jdXJyZW50LXN0YXRlKVxyXG4gICAgICAgbmV3LXN0YXRlc1xyXG4gICAgICAgKGNvbmogbmV3LXN0YXRlcyBzdGF0ZSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCBsaW1pdCAoPiAoY291bnQgbmV3LXN0YXRlcykgbGltaXQpKVxyXG4gICAgICAgKGFzc29jXHJcbiAgICAgICAgZWRpdC1oaXN0b3J5XHJcbiAgICAgICAgOmN1cnJlbnQtc3RhdGVcclxuICAgICAgICAoZGVjIG5ldy1jdXJyZW50LXN0YXRlKVxyXG4gICAgICAgIDpzdGF0ZXNcclxuICAgICAgICAoc3VidmVjIG5ldy1zdGF0ZXMgMSkpXHJcbiAgICAgICAoYXNzb2NcclxuICAgICAgICBlZGl0LWhpc3RvcnlcclxuICAgICAgICA6Y3VycmVudC1zdGF0ZVxyXG4gICAgICAgIG5ldy1jdXJyZW50LXN0YXRlXHJcbiAgICAgICAgOnN0YXRlc1xyXG4gICAgICAgIG5ldy1zdGF0ZXMpKSkpKSkpKVxyXG4ifSB7OnN5bSBjcmVhdGUtZWRpdC1oaXN0b3J5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gY3JlYXRlLWVkaXQtaGlzdG9yeSBbXSAoYXRvbSB7OmN1cnJlbnQtc3RhdGUgLTEsIDpzdGF0ZXMgW119KSlcclxuIn0gezpzeW0gZ2V0LXByZXZpb3VzLXN0YXRlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtcHJldmlvdXMtc3RhdGVcclxuIFwiUmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LXN0YXRlIHN0YXRlc119IEAqZWRpdC1oaXN0b3J5XVxyXG4gIChnZXQgc3RhdGVzIChkZWMgY3VycmVudC1zdGF0ZSkpKSlcclxuIn0pLCBjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmluc3BlY3QgKHs6c3ltIGluc3BlY3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlIHN1cHBsaWVkLlxuICAgTWF5IGJlIHRoZSBhIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpdHNlbGYgKGUuZy4gXCJ0cnVlXCIpXG4gICBvciBpdCBtYXkgYmUgYSBkZXNjcmlwdGlvbiAoZS5nLiBcImFuIGluc3RhbmNlIG9mIEZvb1wiKS5cbiAgIElmIHRydW5jYXRlIGlzIHRydWUgdGhlbiByZXR1cm4gYSB2ZXJ5IHRlcnNlIHZlcnNpb24gb2ZcbiAgIHRoZSBpbnNwZWN0aW9uLiIsIDphcmdsaXN0cyBbW3hdIFt0cnVuY2F0ZSB4XV19LCA6c291cmNlICIoZGVmblxyXG4gaW5zcGVjdFxyXG4gXCJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlIHN1cHBsaWVkLlxcbiAgIE1heSBiZSB0aGUgYSBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXRzZWxmIChlLmcuIFxcXCJ0cnVlXFxcIilcXG4gICBvciBpdCBtYXkgYmUgYSBkZXNjcmlwdGlvbiAoZS5nLiBcXFwiYW4gaW5zdGFuY2Ugb2YgRm9vXFxcIikuXFxuICAgSWYgdHJ1bmNhdGUgaXMgdHJ1ZSB0aGVuIHJldHVybiBhIHZlcnkgdGVyc2UgdmVyc2lvbiBvZlxcbiAgIHRoZSBpbnNwZWN0aW9uLlwiXHJcbiAoW3hdIChpbnNwZWN0KiBmYWxzZSB4KSlcclxuIChbdHJ1bmNhdGUgeF0gKGluc3BlY3QqIHRydW5jYXRlIHgpKSlcclxuIn0pLCBzYWJsb25vLmNvcmUgKHs6c3ltIHdyYXAtYXR0cnMsIDptZXRhIHs6ZG9jICJBZGQgYW4gb3B0aW9uYWwgYXR0cmlidXRlIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZWxlbWVudCB2ZWN0b3IuIiwgOmFyZ2xpc3RzIChbZnVuY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdyYXAtYXR0cnNcclxuIFwiQWRkIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSBhcmd1bWVudCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGVsZW1lbnQgdmVjdG9yLlwiXHJcbiBbZnVuY11cclxuIChmblxyXG4gIFsmIGFyZ3NdXHJcbiAgKGlmXHJcbiAgIChtYXA/IChmaXJzdCBhcmdzKSlcclxuICAgKGxldFxyXG4gICAgW1t0YWcgJiBib2R5XSAoYXBwbHkgZnVuYyAocmVzdCBhcmdzKSldXHJcbiAgICAoaWZcclxuICAgICAobWFwPyAoZmlyc3QgYm9keSkpXHJcbiAgICAgKGludG8gW3RhZyAobWVyZ2UgKGZpcnN0IGJvZHkpIChmaXJzdCBhcmdzKSldIChyZXN0IGJvZHkpKVxyXG4gICAgIChpbnRvIFt0YWcgKGZpcnN0IGFyZ3MpXSBib2R5KSkpXHJcbiAgIChhcHBseSBmdW5jIGFyZ3MpKSkpXHJcbiJ9IHs6c3ltIGluY2x1ZGUtY3NzLCA6bWV0YSB7OmRvYyAiSW5jbHVkZSBhIGxpc3Qgb2YgZXh0ZXJuYWwgc3R5bGVzaGVldCBmaWxlcy4iLCA6YXJnbGlzdHMgKFsmIHN0eWxlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluY2x1ZGUtY3NzXHJcbiBcIkluY2x1ZGUgYSBsaXN0IG9mIGV4dGVybmFsIHN0eWxlc2hlZXQgZmlsZXMuXCJcclxuIFsmIHN0eWxlc11cclxuIChmb3JcclxuICBbc3R5bGUgc3R5bGVzXVxyXG4gIFs6bGluayB7OnR5cGUgXCJ0ZXh0L2Nzc1wiLCA6aHJlZiAoYXMtc3RyIHN0eWxlKSwgOnJlbCBcInN0eWxlc2hlZXRcIn1dKSlcclxuIn0gezpzeW0gaW5jbHVkZS1qcywgOm1ldGEgezpkb2MgIkluY2x1ZGUgdGhlIEphdmFTY3JpcHQgbGlicmFyeSBhdCBgc3JjYC4iLCA6YXJnbGlzdHMgKFtzcmNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmNsdWRlLWpzXHJcbiBcIkluY2x1ZGUgdGhlIEphdmFTY3JpcHQgbGlicmFyeSBhdCBgc3JjYC5cIlxyXG4gW3NyY11cclxuIChkb20vYXBwZW5kQ2hpbGRcclxuICAoLi1ib2R5IChkb20vZ2V0RG9jdW1lbnQpKVxyXG4gIChkb20vY3JlYXRlRG9tIFwic2NyaXB0XCIgI2pzIHs6c3JjIHNyY30pKSlcclxuIn0gezpzeW0gaW5jbHVkZS1yZWFjdCwgOm1ldGEgezpkb2MgIkluY2x1ZGUgRmFjZWJvb2sncyBSZWFjdCBKYXZhU2NyaXB0IGxpYnJhcnkuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5jbHVkZS1yZWFjdFxyXG4gXCJJbmNsdWRlIEZhY2Vib29rJ3MgUmVhY3QgSmF2YVNjcmlwdCBsaWJyYXJ5LlwiXHJcbiBbXVxyXG4gKGluY2x1ZGUtanMgXCJodHRwOi8vZmIubWUvcmVhY3QtMC4xMi4yLmpzXCIpKVxyXG4ifSB7OnN5bSAqZ3JvdXAqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZ3JvdXAqIFtdKVxyXG4ifSB7OnN5bSBmaWxlLXVwbG9hZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZmlsZS11cGxvYWQgZmlsZS1maWVsZClcclxuIn0pLCBjbG9qdXJlLnNldCAoezpzeW0gdW5pb24sIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhlIGlucHV0IHNldHMiLCA6YXJnbGlzdHMgW1tdIFtzMV0gW3MxIHMyXSBbczEgczIgJiBzZXRzXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5pb25cclxuIFwiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoZSBpbnB1dCBzZXRzXCJcclxuIChbXSAje30pXHJcbiAoW3MxXSBzMSlcclxuIChbczEgczJdXHJcbiAgKGlmXHJcbiAgICg8IChjb3VudCBzMSkgKGNvdW50IHMyKSlcclxuICAgKHJlZHVjZSBjb25qIHMyIHMxKVxyXG4gICAocmVkdWNlIGNvbmogczEgczIpKSlcclxuIChbczEgczIgJiBzZXRzXVxyXG4gIChsZXRcclxuICAgW2J1YmJsZWQtc2V0cyAoYnViYmxlLW1heC1rZXkgY291bnQgKGNvbmogc2V0cyBzMiBzMSkpXVxyXG4gICAocmVkdWNlIGludG8gKGZpcnN0IGJ1YmJsZWQtc2V0cykgKHJlc3QgYnViYmxlZC1zZXRzKSkpKSlcclxuIn0gezpzeW0gbWFwLWludmVydCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1hcCB3aXRoIHRoZSB2YWxzIG1hcHBlZCB0byB0aGUga2V5cy4iLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWludmVydFxyXG4gXCJSZXR1cm5zIHRoZSBtYXAgd2l0aCB0aGUgdmFscyBtYXBwZWQgdG8gdGhlIGtleXMuXCJcclxuIFttXVxyXG4gKHJlZHVjZSAoZm4gW20gW2sgdl1dIChhc3NvYyBtIHYgaykpIHt9IG0pKVxyXG4ifSB7OnN5bSBqb2luLCA6bWV0YSB7OmRvYyAiV2hlbiBwYXNzZWQgMiByZWxzLCByZXR1cm5zIHRoZSByZWwgY29ycmVzcG9uZGluZyB0byB0aGUgbmF0dXJhbFxuICBqb2luLiBXaGVuIHBhc3NlZCBhbiBhZGRpdGlvbmFsIGtleW1hcCwgam9pbnMgb24gdGhlIGNvcnJlc3BvbmRpbmdcbiAga2V5cy4iLCA6YXJnbGlzdHMgW1t4cmVsIHlyZWxdIFt4cmVsIHlyZWwga21dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqb2luXHJcbiBcIldoZW4gcGFzc2VkIDIgcmVscywgcmV0dXJucyB0aGUgcmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hdHVyYWxcXG4gIGpvaW4uIFdoZW4gcGFzc2VkIGFuIGFkZGl0aW9uYWwga2V5bWFwLCBqb2lucyBvbiB0aGUgY29ycmVzcG9uZGluZ1xcbiAga2V5cy5cIlxyXG4gKFt4cmVsIHlyZWxdXHJcbiAgKGlmXHJcbiAgIChhbmQgKHNlcSB4cmVsKSAoc2VxIHlyZWwpKVxyXG4gICAobGV0XHJcbiAgICBba3NcclxuICAgICAoaW50ZXJzZWN0aW9uIChzZXQgKGtleXMgKGZpcnN0IHhyZWwpKSkgKHNldCAoa2V5cyAoZmlyc3QgeXJlbCkpKSlcclxuICAgICBbciBzXVxyXG4gICAgIChpZiAoPD0gKGNvdW50IHhyZWwpIChjb3VudCB5cmVsKSkgW3hyZWwgeXJlbF0gW3lyZWwgeHJlbF0pXHJcbiAgICAgaWR4XHJcbiAgICAgKGluZGV4IHIga3MpXVxyXG4gICAgKHJlZHVjZVxyXG4gICAgIChmblxyXG4gICAgICBbcmV0IHhdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtmb3VuZCAoaWR4IChzZWxlY3Qta2V5cyB4IGtzKSldXHJcbiAgICAgICAoaWZcclxuICAgICAgICBmb3VuZFxyXG4gICAgICAgIChyZWR1Y2VcclxuICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgW3AxX180ODk4MiMgcDJfXzQ4OTgzI11cclxuICAgICAgICAgIChjb25qIHAxX180ODk4MiMgKG1lcmdlIHAyX180ODk4MyMgeCkpKVxyXG4gICAgICAgICByZXRcclxuICAgICAgICAgZm91bmQpXHJcbiAgICAgICAgcmV0KSkpXHJcbiAgICAgI3t9XHJcbiAgICAgcykpXHJcbiAgICN7fSkpXHJcbiAoW3hyZWwgeXJlbCBrbV1cclxuICAobGV0XHJcbiAgIFtbciBzIGtdXHJcbiAgICAoaWZcclxuICAgICAoPD0gKGNvdW50IHhyZWwpIChjb3VudCB5cmVsKSlcclxuICAgICBbeHJlbCB5cmVsIChtYXAtaW52ZXJ0IGttKV1cclxuICAgICBbeXJlbCB4cmVsIGttXSlcclxuICAgIGlkeFxyXG4gICAgKGluZGV4IHIgKHZhbHMgaykpXVxyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbcmV0IHhdXHJcbiAgICAgKGxldFxyXG4gICAgICBbZm91bmQgKGlkeCAocmVuYW1lLWtleXMgKHNlbGVjdC1rZXlzIHggKGtleXMgaykpIGspKV1cclxuICAgICAgKGlmXHJcbiAgICAgICBmb3VuZFxyXG4gICAgICAgKHJlZHVjZVxyXG4gICAgICAgIChmbipcclxuICAgICAgICAgW3AxX180ODk4NCMgcDJfXzQ4OTg1I11cclxuICAgICAgICAgKGNvbmogcDFfXzQ4OTg0IyAobWVyZ2UgcDJfXzQ4OTg1IyB4KSkpXHJcbiAgICAgICAgcmV0XHJcbiAgICAgICAgZm91bmQpXHJcbiAgICAgICByZXQpKSlcclxuICAgICN7fVxyXG4gICAgcykpKSlcclxuIn0gezpzeW0gc2VsZWN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNldCBvZiB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIHByZWQgaXMgdHJ1ZSIsIDphcmdsaXN0cyAoW3ByZWQgeHNldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlbGVjdFxyXG4gXCJSZXR1cm5zIGEgc2V0IG9mIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggcHJlZCBpcyB0cnVlXCJcclxuIFtwcmVkIHhzZXRdXHJcbiAocmVkdWNlIChmbiBbcyBrXSAoaWYgKHByZWQgaykgcyAoZGlzaiBzIGspKSkgeHNldCB4c2V0KSlcclxuIn0gezpzeW0gaW50ZXJzZWN0aW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgaW5wdXQgc2V0cyIsIDphcmdsaXN0cyBbW3MxXSBbczEgczJdIFtzMSBzMiAmIHNldHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRlcnNlY3Rpb25cclxuIFwiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgaW5wdXQgc2V0c1wiXHJcbiAoW3MxXSBzMSlcclxuIChbczEgczJdXHJcbiAgKGlmXHJcbiAgICg8IChjb3VudCBzMikgKGNvdW50IHMxKSlcclxuICAgKHJlY3VyIHMyIHMxKVxyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbcmVzdWx0IGl0ZW1dXHJcbiAgICAgKGlmIChjb250YWlucz8gczIgaXRlbSkgcmVzdWx0IChkaXNqIHJlc3VsdCBpdGVtKSkpXHJcbiAgICBzMVxyXG4gICAgczEpKSlcclxuIChbczEgczIgJiBzZXRzXVxyXG4gIChsZXRcclxuICAgW2J1YmJsZWQtc2V0c1xyXG4gICAgKGJ1YmJsZS1tYXgta2V5XHJcbiAgICAgKGZuKiBbcDFfXzQ4OTc5I10gKC0gKGNvdW50IHAxX180ODk3OSMpKSlcclxuICAgICAoY29uaiBzZXRzIHMyIHMxKSldXHJcbiAgIChyZWR1Y2UgaW50ZXJzZWN0aW9uIChmaXJzdCBidWJibGVkLXNldHMpIChyZXN0IGJ1YmJsZWQtc2V0cykpKSkpXHJcbiJ9IHs6c3ltIHN1cGVyc2V0PywgOm1ldGEgezpkb2MgIklzIHNldDEgYSBzdXBlcnNldCBvZiBzZXQyPyIsIDphcmdsaXN0cyAoW3NldDEgc2V0Ml0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1cGVyc2V0P1xyXG4gXCJJcyBzZXQxIGEgc3VwZXJzZXQgb2Ygc2V0Mj9cIlxyXG4gW3NldDEgc2V0Ml1cclxuIChhbmRcclxuICAoPj0gKGNvdW50IHNldDEpIChjb3VudCBzZXQyKSlcclxuICAoZXZlcnk/IChmbiogW3AxX180ODk4NyNdIChjb250YWlucz8gc2V0MSBwMV9fNDg5ODcjKSkgc2V0MikpKVxyXG4ifSB7OnN5bSBpbmRleCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgb2YgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBrcyBpbiB0aGUgeHJlbCBtYXBwZWQgdG8gYVxuICBzZXQgb2YgdGhlIG1hcHMgaW4geHJlbCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBvZiBrcy4iLCA6YXJnbGlzdHMgKFt4cmVsIGtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhcclxuIFwiUmV0dXJucyBhIG1hcCBvZiB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGtzIGluIHRoZSB4cmVsIG1hcHBlZCB0byBhXFxuICBzZXQgb2YgdGhlIG1hcHMgaW4geHJlbCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBvZiBrcy5cIlxyXG4gW3hyZWwga3NdXHJcbiAocmVkdWNlXHJcbiAgKGZuXHJcbiAgIFttIHhdXHJcbiAgIChsZXQgW2lrIChzZWxlY3Qta2V5cyB4IGtzKV0gKGFzc29jIG0gaWsgKGNvbmogKGdldCBtIGlrICN7fSkgeCkpKSlcclxuICB7fVxyXG4gIHhyZWwpKVxyXG4ifSB7OnN5bSBzdWJzZXQ/LCA6bWV0YSB7OmRvYyAiSXMgc2V0MSBhIHN1YnNldCBvZiBzZXQyPyIsIDphcmdsaXN0cyAoW3NldDEgc2V0Ml0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1YnNldD9cclxuIFwiSXMgc2V0MSBhIHN1YnNldCBvZiBzZXQyP1wiXHJcbiBbc2V0MSBzZXQyXVxyXG4gKGFuZFxyXG4gICg8PSAoY291bnQgc2V0MSkgKGNvdW50IHNldDIpKVxyXG4gIChldmVyeT8gKGZuKiBbcDFfXzQ4OTg2I10gKGNvbnRhaW5zPyBzZXQyIHAxX180ODk4NiMpKSBzZXQxKSkpXHJcbiJ9IHs6c3ltIHJlbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSByZWwgb2YgdGhlIG1hcHMgaW4geHJlbCB3aXRoIHRoZSBrZXlzIGluIGttYXAgcmVuYW1lZCB0byB0aGUgdmFscyBpbiBrbWFwIiwgOmFyZ2xpc3RzIChbeHJlbCBrbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVuYW1lXHJcbiBcIlJldHVybnMgYSByZWwgb2YgdGhlIG1hcHMgaW4geHJlbCB3aXRoIHRoZSBrZXlzIGluIGttYXAgcmVuYW1lZCB0byB0aGUgdmFscyBpbiBrbWFwXCJcclxuIFt4cmVsIGttYXBdXHJcbiAoc2V0IChtYXAgKGZuKiBbcDFfXzQ4OTgxI10gKHJlbmFtZS1rZXlzIHAxX180ODk4MSMga21hcCkpIHhyZWwpKSlcclxuIn0gezpzeW0gcmVuYW1lLWtleXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtYXAgd2l0aCB0aGUga2V5cyBpbiBrbWFwIHJlbmFtZWQgdG8gdGhlIHZhbHMgaW4ga21hcCIsIDphcmdsaXN0cyAoW21hcCBrbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVuYW1lLWtleXNcclxuIFwiUmV0dXJucyB0aGUgbWFwIHdpdGggdGhlIGtleXMgaW4ga21hcCByZW5hbWVkIHRvIHRoZSB2YWxzIGluIGttYXBcIlxyXG4gW21hcCBrbWFwXVxyXG4gKHJlZHVjZVxyXG4gIChmblxyXG4gICBbbSBbb2xkIG5ld11dXHJcbiAgIChpZiAoY29udGFpbnM/IG1hcCBvbGQpIChhc3NvYyBtIG5ldyAoZ2V0IG1hcCBvbGQpKSBtKSlcclxuICAoYXBwbHkgZGlzc29jIG1hcCAoa2V5cyBrbWFwKSlcclxuICBrbWFwKSlcclxuIn0gezpzeW0gcHJvamVjdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSByZWwgb2YgdGhlIGVsZW1lbnRzIG9mIHhyZWwgd2l0aCBvbmx5IHRoZSBrZXlzIGluIGtzIiwgOmFyZ2xpc3RzIChbeHJlbCBrc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb2plY3RcclxuIFwiUmV0dXJucyBhIHJlbCBvZiB0aGUgZWxlbWVudHMgb2YgeHJlbCB3aXRoIG9ubHkgdGhlIGtleXMgaW4ga3NcIlxyXG4gW3hyZWwga3NdXHJcbiAoc2V0IChtYXAgKGZuKiBbcDFfXzQ4OTgwI10gKHNlbGVjdC1rZXlzIHAxX180ODk4MCMga3MpKSB4cmVsKSkpXHJcbiJ9IHs6c3ltIGRpZmZlcmVuY2UsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgZmlyc3Qgc2V0IHdpdGhvdXQgZWxlbWVudHMgb2YgdGhlIHJlbWFpbmluZyBzZXRzIiwgOmFyZ2xpc3RzIFtbczFdIFtzMSBzMl0gW3MxIHMyICYgc2V0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpZmZlcmVuY2VcclxuIFwiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIGZpcnN0IHNldCB3aXRob3V0IGVsZW1lbnRzIG9mIHRoZSByZW1haW5pbmcgc2V0c1wiXHJcbiAoW3MxXSBzMSlcclxuIChbczEgczJdXHJcbiAgKGlmXHJcbiAgICg8IChjb3VudCBzMSkgKGNvdW50IHMyKSlcclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW3Jlc3VsdCBpdGVtXVxyXG4gICAgIChpZiAoY29udGFpbnM/IHMyIGl0ZW0pIChkaXNqIHJlc3VsdCBpdGVtKSByZXN1bHQpKVxyXG4gICAgczFcclxuICAgIHMxKVxyXG4gICAocmVkdWNlIGRpc2ogczEgczIpKSlcclxuIChbczEgczIgJiBzZXRzXSAocmVkdWNlIGRpZmZlcmVuY2UgczEgKGNvbmogc2V0cyBzMikpKSlcclxuIn0pLCBvZG95bGUucnVtICh7OnN5bSAqbWF0Y2hlcyosIDptZXRhIHs6ZG9jICJJZiBib3VuZCB0byBhbiB2b2xhdGlsZSBjb250YWluaW5nIGEgaGFzaCBtYXAsXG4gICAgICAgICAgICBtYXRjaGVzIHRyaWdnZXJlZCBieSBgZmlyZS1ydWxlc2Agd2lsbCBiZSBzdG9yZWQgaW4gaXRcbiAgICAgICAgICAgIHJhdGhlciB0aGFuIGluIHRoZSBhdG9tIGNyZWF0ZWQgYnkgYHJ1bGVzZXRgLlxuICAgICAgICAgICAgVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBtb2RpZnlpbmcgdGhlIHNlc3Npb24gaW4gYSBzZXJ2ZXItc2lkZVxuICAgICAgICAgICAgcm91dGUgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSBtb2RpZmljYXRpb25zIHdpbGwgYmUgbG9jYWxcbiAgICAgICAgICAgIGFuZCB3aWxsIG5vdCBhZmZlY3Qgb3RoZXIgY29ubmVjdGlvbnMgaGFwcGVuaW5nIHNpbXVsdGFuZW91c2x5LlxuICAgICAgICAgICAgRG8gbm90IHVzZSBpdCBmcm9tIGNsb2p1cmVzY3JpcHQuIn0sIDpzb3VyY2UgIihkZWYgKm1hdGNoZXMqIG5pbClcclxuIn0gezpzeW0gYXRvbSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gYXRvbSB0aGF0IGNhbiBob2xkIGxvY2FsIHN0YXRlIGZvciBhIGNvbXBvbmVudC5cbiAgT25seSB3b3JrcyBpbiBhIDp0aGVuIGJsb2NrLiIsIDphcmdsaXN0cyAoW2luaXRpYWwtdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhdG9tXHJcbiBcIlJldHVybnMgYW4gYXRvbSB0aGF0IGNhbiBob2xkIGxvY2FsIHN0YXRlIGZvciBhIGNvbXBvbmVudC5cXG4gIE9ubHkgd29ya3MgaW4gYSA6dGhlbiBibG9jay5cIlxyXG4gW2luaXRpYWwtdmFsdWVdXHJcbiAod2hlbi1ub3RcclxuICAqbG9jYWwtcG9pbnRlcipcclxuICAodGhyb3cgKGV4LWluZm8gXCJZb3UgY2Fubm90IGNhbGwgYGF0b21gIGhlcmVcIiB7fSkpKVxyXG4gKHdoZW4tbm90XHJcbiAgQCpjYW4tcmV0dXJuLWF0b20/KlxyXG4gICh0aHJvd1xyXG4gICAoZXgtaW5mbyBcIllvdSBjYW4gb25seSBjYWxsIGBhdG9tYCBvbmNlIGluIGVhY2ggOnRoZW4gYmxvY2tcIiB7fSkpKVxyXG4gKHZyZXNldCEgKmNhbi1yZXR1cm4tYXRvbT8qIGZhbHNlKVxyXG4gKGlmLWxldFxyXG4gIFsqbG9jYWwgQCpsb2NhbC1wb2ludGVyKl1cclxuICAqbG9jYWxcclxuICAobGV0XHJcbiAgIFsqbG9jYWwgKHJlc2V0ISAqbG9jYWwtcG9pbnRlciogKGNsb2p1cmUuY29yZS9hdG9tIGluaXRpYWwtdmFsdWUpKV1cclxuICAgKHdoZW4tbGV0XHJcbiAgICBbY21wICpyZWFjdC1jb21wb25lbnQqXVxyXG4gICAgKGFkZC13YXRjaFxyXG4gICAgICpsb2NhbFxyXG4gICAgIDpvZG95bGUucnVtL2xvY2FsXHJcbiAgICAgKGZuIFtfIF8gcCBuXSAod2hlbiAobm90PSBwIG4pICguZm9yY2VVcGRhdGUgY21wKSkpKSlcclxuICAgKmxvY2FsKSkpXHJcbiJ9IHs6c3ltIHByb3AsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcm9wIHNlbnQgdG8gdGhlIGNvbXBvbmVudC4gT25seSB3b3JrcyBpbiBhIDp0aGVuIGJsb2NrLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb3BcclxuIFwiUmV0dXJucyB0aGUgcHJvcCBzZW50IHRvIHRoZSBjb21wb25lbnQuIE9ubHkgd29ya3MgaW4gYSA6dGhlbiBibG9jay5cIlxyXG4gW11cclxuICh3aGVuLW5vdFxyXG4gICpsb2NhbC1wb2ludGVyKlxyXG4gICh0aHJvdyAoZXgtaW5mbyBcIllvdSBjYW5ub3QgY2FsbCBgcHJvcGAgaGVyZVwiIHt9KSkpXHJcbiAqcHJvcCopXHJcbiJ9IHs6c3ltIHJlYWN0aXZlLCA6bWV0YSB7OmRvYyAiQSBydW0gbWl4aW4gdGhhdCBtYWtlcyB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgcmVhY3QgdG8gY2hhbmdlcyBmcm9tXG4gIHRoZSBzZXNzaW9uIGFuZCB0aGUgbG9jYWwgYXRvbS4iLCA6YXJnbGlzdHMgKFtydWxlLWtleSAqbWF0Y2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFjdGl2ZVxyXG4gXCJBIHJ1bSBtaXhpbiB0aGF0IG1ha2VzIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCByZWFjdCB0byBjaGFuZ2VzIGZyb21cXG4gIHRoZSBzZXNzaW9uIGFuZCB0aGUgbG9jYWwgYXRvbS5cIlxyXG4gW3J1bGUta2V5ICptYXRjaF1cclxuIHs6aW5pdFxyXG4gIChmblxyXG4gICBbc3RhdGUgcHJvcHNdXHJcbiAgICgtPlxyXG4gICAgc3RhdGVcclxuICAgIChhc3NvYyA6b2RveWxlLnJ1bS9sb2NhbC1wb2ludGVyIChjbG9qdXJlLmNvcmUvYXRvbSBuaWwpKVxyXG4gICAgIz8oOmNsanMgKGFzc29jIDpvZG95bGUucnVtL2dsb2JhbC1rZXkgKGxldCBbZ2xvYmFsLWtleSAocmFuZG9tLXV1aWQpIGNtcCAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpXSAoYWRkLXdhdGNoICptYXRjaCBnbG9iYWwta2V5IChmbiBbXyBfIHAgbl0gKHdoZW4gKG5vdD0gcCBuKSAoLmZvcmNlVXBkYXRlIGNtcCkpKSkgZ2xvYmFsLWtleSkpKSkpLFxyXG4gIDp3cmFwLXJlbmRlclxyXG4gIChmblxyXG4gICBbcmVuZGVyLWZuXVxyXG4gICAoZm5cclxuICAgIFtzdGF0ZV1cclxuICAgIChiaW5kaW5nXHJcbiAgICAgWypsb2NhbC1wb2ludGVyKlxyXG4gICAgICAoOm9kb3lsZS5ydW0vbG9jYWwtcG9pbnRlciBzdGF0ZSlcclxuICAgICAgKnJlYWN0LWNvbXBvbmVudCpcclxuICAgICAgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKVxyXG4gICAgICAqY2FuLXJldHVybi1hdG9tPypcclxuICAgICAgKHZvbGF0aWxlISB0cnVlKVxyXG4gICAgICAqcHJvcCpcclxuICAgICAgKGZpcnN0ICg6cnVtL2FyZ3Mgc3RhdGUpKVxyXG4gICAgICBvLyptYXRjaCpcclxuICAgICAgIz8oOmNsanMgKGNsb2p1cmUuY29yZS9kZXJlZiAqbWF0Y2gpIDpjbGogKG9yIChzb21lLT4gKm1hdGNoZXMqIGRlcmVmIHJ1bGUta2V5KSAoY2xvanVyZS5jb3JlL2RlcmVmICptYXRjaCkpKV1cclxuICAgICAocmVuZGVyLWZuIHN0YXRlKSkpKSxcclxuICA6d2lsbC11bm1vdW50XHJcbiAgKGZuXHJcbiAgIFtzdGF0ZV1cclxuICAgIz8oOmNsanMgKHJlbW92ZS13YXRjaCAqbWF0Y2ggKDpvZG95bGUucnVtL2dsb2JhbC1rZXkgc3RhdGUpKSlcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbKmxvY2FsIEAoOm9kb3lsZS5ydW0vbG9jYWwtcG9pbnRlciBzdGF0ZSldXHJcbiAgICAocmVtb3ZlLXdhdGNoICpsb2NhbCA6b2RveWxlLnJ1bS9sb2NhbCkpXHJcbiAgIChkaXNzb2Mgc3RhdGUgOm9kb3lsZS5ydW0vbG9jYWwtcG9pbnRlcikpfSlcclxuIn0pLCBwYXJlbi1zb3VwLmluc3RhcmVwbCAoezpzeW0gKndlYi13b3JrZXItcGF0aCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp3ZWItd29ya2VyLXBhdGgqIG5pbClcclxuIn0gezpzeW0gZm9ybS0+c2VyaWFsaXphYmxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3JtLT5zZXJpYWxpemFibGVcclxuIFtmb3JtXVxyXG4gKGlmXHJcbiAgKGluc3RhbmNlPyBqcy9FcnJvciBmb3JtKVxyXG4gIChhcnJheVxyXG4gICAob3IgKHNvbWUtPiBmb3JtIC4tY2F1c2UgLi1tZXNzYWdlKSAoLi1tZXNzYWdlIGZvcm0pKVxyXG4gICAoLi1maWxlTmFtZSBmb3JtKVxyXG4gICAoLi1saW5lTnVtYmVyIGZvcm0pKVxyXG4gIChwci1zdHIgZm9ybSkpKVxyXG4ifSB7OnN5bSByZXN1bHRzLT5odG1sLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBIVE1MIGZvciB0aGUgZ2l2ZW4gZXZhbCByZXN1bHRzLiIsIDphcmdsaXN0cyAoW3Jlc3VsdHMgbG9jYXRpb25zIGxpbWl0XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzdWx0cy0+aHRtbFxyXG4gXCJSZXR1cm5zIEhUTUwgZm9yIHRoZSBnaXZlbiBldmFsIHJlc3VsdHMuXCJcclxuIFtyZXN1bHRzIGxvY2F0aW9ucyBsaW1pdF1cclxuIChsb29wXHJcbiAgW2kgMCBldmFscyAodHJhbnNpZW50IFtdKV1cclxuICAobGV0XHJcbiAgIFtyZXMgKGdldCByZXN1bHRzIGkpIHs6a2V5cyBbdG9wIGhlaWdodF19IChnZXQgbG9jYXRpb25zIGkpXVxyXG4gICAoaWZcclxuICAgIChhbmQgcmVzIHRvcCBoZWlnaHQpXHJcbiAgICAocmVjdXJcclxuICAgICAoaW5jIGkpXHJcbiAgICAgKGNvbmohXHJcbiAgICAgIGV2YWxzXHJcbiAgICAgIChmb3JtYXRcclxuICAgICAgIFwiPGRpdiBjbGFzcz0nJXMnIHN0eWxlPSd0b3A6ICVzcHg7IGhlaWdodDogJXNweDsgbWluLWhlaWdodDogJXNweCc+JXM8L2Rpdj5cIlxyXG4gICAgICAgKGlmIChhcnJheT8gcmVzKSBcInJlc3VsdCBlcnJvclwiIFwicmVzdWx0XCIpXHJcbiAgICAgICB0b3BcclxuICAgICAgIGhlaWdodFxyXG4gICAgICAgaGVpZ2h0XHJcbiAgICAgICAoc29tZS0+XHJcbiAgICAgICAgKGlmIChhcnJheT8gcmVzKSAoZmlyc3QgcmVzKSByZXMpXHJcbiAgICAgICAgKHRydW5jYXRlIGxpbWl0KVxyXG4gICAgICAgIGhzL2VzY2FwZS1odG1sLXN0cikpKSlcclxuICAgIChqb2luIChwZXJzaXN0ZW50ISBldmFscykpKSkpKVxyXG4ifSB7OnN5bSB1c2Utd2ViLXdvcmtlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXNlLXdlYi13b3JrZXIhXHJcbiBbXVxyXG4gKHNldCEgKndlYi13b3JrZXItcGF0aCogXCJwYXJlbi1zb3VwLWNvbXBpbGVyLmpzXCIpKVxyXG4ifSB7OnN5bSBlbGVtPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZWxlbT8gKGZuKiBbcDFfXzQ5MDQwI10gKGluc3RhbmNlPyBqcy9FbGVtZW50IHAxX180OTA0MCMpKSlcclxuIn0gezpzeW0gY29sbGVjdGlvbi0+Y29udGVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sbGVjdGlvbi0+Y29udGVudFxyXG4gW2VsZW1dXHJcbiAobG9vcFxyXG4gIFtlIGVsZW0gY29udGVudCAoLi10ZXh0Q29udGVudCBlbGVtKV1cclxuICAoaWYtbGV0XHJcbiAgIFtwcmV2ICguLXByZXZpb3VzU2libGluZyBlKV1cclxuICAgKGlmXHJcbiAgICAodGV4dC1ub2RlPyBwcmV2KVxyXG4gICAgKHJlY3VyIHByZXYgKHN0ciAoLi10ZXh0Q29udGVudCBwcmV2KSBjb250ZW50KSlcclxuICAgIGNvbnRlbnQpXHJcbiAgIGNvbnRlbnQpKSlcclxuIn0gezpzeW0gdHJ1bmNhdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGV4dCBsaW1pdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRydW5jYXRlXHJcbiBbdGV4dCBsaW1pdF1cclxuIChpZiAoPiAoY291bnQgdGV4dCkgbGltaXQpIChzdHIgKHN1YnMgdGV4dCAwIGxpbWl0KSBcIi4uLlwiKSB0ZXh0KSlcclxuIn0gezpzeW0gY3JlYXRlLWNvbXBpbGVyLWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjcmVhdGUtY29tcGlsZXItZm5cclxuIFtvcHRzXVxyXG4gKGlmLWxldFxyXG4gIFt3b3JrZXIgKHNvbWUtPiAqd2ViLXdvcmtlci1wYXRoKiBqcy9Xb3JrZXIuKV1cclxuICAoZm5cclxuICAgW2NvbGwgcmVjZWl2ZS1mbl1cclxuICAgKHNldCFcclxuICAgICguLW9ubWVzc2FnZSB3b3JrZXIpXHJcbiAgICAoZm4qIFtwMV9fNDkwNDEjXSAocmVjZWl2ZS1mbiAodmVjICguLWRhdGEgcDFfXzQ5MDQxIykpKSkpXHJcbiAgICgucG9zdE1lc3NhZ2Ugd29ya2VyIChpbnRvLWFycmF5IGNvbGwpKSlcclxuICAoZm5cclxuICAgW2NvbGwgcmVjZWl2ZS1mbl1cclxuICAgKGVzL2NvZGUtPnJlc3VsdHNcclxuICAgIGNvbGxcclxuICAgIChmblxyXG4gICAgIFtyZXN1bHRzXVxyXG4gICAgIChyZWNlaXZlLWZuIChpbnRvLWFycmF5IChtYXB2IGZvcm0tPnNlcmlhbGl6YWJsZSByZXN1bHRzKSkpKVxyXG4gICAgb3B0cykpKSlcclxuIn0gezpzeW0gZ2V0LWNvbGxlY3Rpb25zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBjb2xsZWN0aW9ucyBmcm9tIHRoZSBnaXZlbiBET00gbm9kZS4iLCA6YXJnbGlzdHMgKFtlbGVtZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWNvbGxlY3Rpb25zXHJcbiBcIlJldHVybnMgY29sbGVjdGlvbnMgZnJvbSB0aGUgZ2l2ZW4gRE9NIG5vZGUuXCJcclxuIFtlbGVtZW50XVxyXG4gKHZlY1xyXG4gIChmb3JcclxuICAgW2VsZW1cclxuICAgICgtPiBlbGVtZW50IC4tY2hpbGRyZW4gYXJyYXktc2VxKVxyXG4gICAgOmxldFxyXG4gICAgW2NsYXNzZXMgKC4tY2xhc3NMaXN0IGVsZW0pXVxyXG4gICAgOndoZW5cclxuICAgIChvciAoLmNvbnRhaW5zIGNsYXNzZXMgXCJjb2xsZWN0aW9uXCIpICguY29udGFpbnMgY2xhc3NlcyBcInN5bWJvbFwiKSldXHJcbiAgIGVsZW0pKSlcclxuIn0gezpzeW0gZWxlbXMtPmxvY2F0aW9ucywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxvY2F0aW9uIG9mIGVhY2ggZWxlbS4iLCA6YXJnbGlzdHMgKFtlbGVtcyB0b3Atb2Zmc2V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxlbXMtPmxvY2F0aW9uc1xyXG4gXCJSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiBlYWNoIGVsZW0uXCJcclxuIFtlbGVtcyB0b3Atb2Zmc2V0XVxyXG4gKGxvb3BcclxuICBbaSAwIGxvY2F0aW9ucyAodHJhbnNpZW50IFtdKV1cclxuICAoaWYtbGV0XHJcbiAgIFtlbGVtIChnZXQgZWxlbXMgaSldXHJcbiAgIChsZXRcclxuICAgIFt0b3BcclxuICAgICAoLT4gZWxlbSAuLW9mZnNldFRvcCAoLSB0b3Atb2Zmc2V0KSlcclxuICAgICBoZWlnaHRcclxuICAgICAoLT4gZWxlbSAuLW9mZnNldEhlaWdodCldXHJcbiAgICAocmVjdXIgKGluYyBpKSAoY29uaiEgbG9jYXRpb25zIHs6dG9wIHRvcCwgOmhlaWdodCBoZWlnaHR9KSkpXHJcbiAgIChwZXJzaXN0ZW50ISBsb2NhdGlvbnMpKSkpXHJcbiJ9KSwgY2xqcy5wcHJpbnQgKHs6c3ltIHBwcmludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tvYmplY3RdIFtvYmplY3Qgd3JpdGVyXV19LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50XHJcbiAoW29iamVjdF1cclxuICAobGV0XHJcbiAgIFtzYiAoU3RyaW5nQnVmZmVyLildXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbKm91dCogKFN0cmluZ0J1ZmZlcldyaXRlci4gc2IpXVxyXG4gICAgKHBwcmludCBvYmplY3QgKm91dCopXHJcbiAgICAoc3RyaW5nLXByaW50IChzdHIgc2IpKSkpKVxyXG4gKFtvYmplY3Qgd3JpdGVyXVxyXG4gICh3aXRoLXByZXR0eS13cml0ZXJcclxuICAgd3JpdGVyXHJcbiAgIChiaW5kaW5nIFsqcHJpbnQtcHJldHR5KiB0cnVlXSAod3JpdGUtb3V0IG9iamVjdCkpXHJcbiAgIChpZiAobm90ICg9IDAgKGdldC1jb2x1bW4gKm91dCopKSkgKC13cml0ZSAqb3V0KiBcXG5ld2xpbmUpKSkpKVxyXG4ifSB7OnN5bSBnZXQtcHJldHR5LXdyaXRlciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIElXcml0ZXIgcGFzc2VkIGluIHdyYXBwZWQgaW4gYSBwcmV0dHkgd3JpdGVyIHByb3h5LCB1bmxlc3MgaXQnc1xuYWxyZWFkeSBhIHByZXR0eSB3cml0ZXIuIEdlbmVyYWxseSwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLCBzaW5jZSBwcHJpbnQsXG53cml0ZSwgYW5kIGNsLWZvcm1hdCBhbGwgY2FsbCBpdCBpZiB0aGV5IG5lZWQgdG8uIEhvd2V2ZXIgaWYgeW91IHdhbnQgdGhlIHN0YXRlIHRvIGJlXG5wcmVzZXJ2ZWQgYWNyb3NzIGNhbGxzLCB5b3Ugd2lsbCB3YW50IHRvIHdyYXAgdGhlbSB3aXRoIHRoaXMuXG5cbkZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGdlbmVyYXRlIGNvbHVtbi1hd2FyZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBjYWxscyB0byBjbC1mb3JtYXQsXG5kbyBpdCBsaWtlIGluIHRoaXMgZXhhbXBsZTpcblxuICAgIChkZWZuIHByaW50LXRhYmxlIFthc2VxIGNvbHVtbi13aWR0aF1cbiAgICAgIChiaW5kaW5nIFsqb3V0KiAoZ2V0LXByZXR0eS13cml0ZXIgKm91dCopXVxuICAgICAgICAoZG9zZXEgW3JvdyBhc2VxXVxuICAgICAgICAgIChkb3NlcSBbY29sIHJvd11cbiAgICAgICAgICAgIChjbC1mb3JtYXQgdHJ1ZSBcIn40RH43LHZUXCIgY29sIGNvbHVtbi13aWR0aCkpXG4gICAgICAgICAgKHBybikpKSlcblxuTm93IHdoZW4geW91IHJ1bjpcblxuICAgIHVzZXI+IChwcmludC10YWJsZSAobWFwICModmVjdG9yICUgKCogJSAlKSAoKiAlICUgJSkpIChyYW5nZSAxIDExKSkgOClcblxuSXQgcHJpbnRzIGEgdGFibGUgb2Ygc3F1YXJlcyBhbmQgY3ViZXMgZm9yIHRoZSBudW1iZXJzIGZyb20gMSB0byAxMDpcblxuICAgICAgIDEgICAgICAxICAgICAgIDFcbiAgICAgICAyICAgICAgNCAgICAgICA4XG4gICAgICAgMyAgICAgIDkgICAgICAyN1xuICAgICAgIDQgICAgIDE2ICAgICAgNjRcbiAgICAgICA1ICAgICAyNSAgICAgMTI1XG4gICAgICAgNiAgICAgMzYgICAgIDIxNlxuICAgICAgIDcgICAgIDQ5ICAgICAzNDNcbiAgICAgICA4ICAgICA2NCAgICAgNTEyXG4gICAgICAgOSAgICAgODEgICAgIDcyOVxuICAgICAgMTAgICAgMTAwICAgIDEwMDAiLCA6YXJnbGlzdHMgKFt3cml0ZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtcHJldHR5LXdyaXRlclxyXG4gXCJSZXR1cm5zIHRoZSBJV3JpdGVyIHBhc3NlZCBpbiB3cmFwcGVkIGluIGEgcHJldHR5IHdyaXRlciBwcm94eSwgdW5sZXNzIGl0J3NcXG5hbHJlYWR5IGEgcHJldHR5IHdyaXRlci4gR2VuZXJhbGx5LCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIHNpbmNlIHBwcmludCxcXG53cml0ZSwgYW5kIGNsLWZvcm1hdCBhbGwgY2FsbCBpdCBpZiB0aGV5IG5lZWQgdG8uIEhvd2V2ZXIgaWYgeW91IHdhbnQgdGhlIHN0YXRlIHRvIGJlXFxucHJlc2VydmVkIGFjcm9zcyBjYWxscywgeW91IHdpbGwgd2FudCB0byB3cmFwIHRoZW0gd2l0aCB0aGlzLlxcblxcbkZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGdlbmVyYXRlIGNvbHVtbi1hd2FyZSBvdXRwdXQgd2l0aCBtdWx0aXBsZSBjYWxscyB0byBjbC1mb3JtYXQsXFxuZG8gaXQgbGlrZSBpbiB0aGlzIGV4YW1wbGU6XFxuXFxuICAgIChkZWZuIHByaW50LXRhYmxlIFthc2VxIGNvbHVtbi13aWR0aF1cXG4gICAgICAoYmluZGluZyBbKm91dCogKGdldC1wcmV0dHktd3JpdGVyICpvdXQqKV1cXG4gICAgICAgIChkb3NlcSBbcm93IGFzZXFdXFxuICAgICAgICAgIChkb3NlcSBbY29sIHJvd11cXG4gICAgICAgICAgICAoY2wtZm9ybWF0IHRydWUgXFxcIn40RH43LHZUXFxcIiBjb2wgY29sdW1uLXdpZHRoKSlcXG4gICAgICAgICAgKHBybikpKSlcXG5cXG5Ob3cgd2hlbiB5b3UgcnVuOlxcblxcbiAgICB1c2VyPiAocHJpbnQtdGFibGUgKG1hcCAjKHZlY3RvciAlICgqICUgJSkgKCogJSAlICUpKSAocmFuZ2UgMSAxMSkpIDgpXFxuXFxuSXQgcHJpbnRzIGEgdGFibGUgb2Ygc3F1YXJlcyBhbmQgY3ViZXMgZm9yIHRoZSBudW1iZXJzIGZyb20gMSB0byAxMDpcXG5cXG4gICAgICAgMSAgICAgIDEgICAgICAgMVxcbiAgICAgICAyICAgICAgNCAgICAgICA4XFxuICAgICAgIDMgICAgICA5ICAgICAgMjdcXG4gICAgICAgNCAgICAgMTYgICAgICA2NFxcbiAgICAgICA1ICAgICAyNSAgICAgMTI1XFxuICAgICAgIDYgICAgIDM2ICAgICAyMTZcXG4gICAgICAgNyAgICAgNDkgICAgIDM0M1xcbiAgICAgICA4ICAgICA2NCAgICAgNTEyXFxuICAgICAgIDkgICAgIDgxICAgICA3MjlcXG4gICAgICAxMCAgICAxMDAgICAgMTAwMFwiXHJcbiBbd3JpdGVyXVxyXG4gKGlmXHJcbiAgKHByZXR0eS13cml0ZXI/IHdyaXRlcilcclxuICB3cml0ZXJcclxuICAocHJldHR5LXdyaXRlciB3cml0ZXIgKnByaW50LXJpZ2h0LW1hcmdpbiogKnByaW50LW1pc2VyLXdpZHRoKikpKVxyXG4ifSB7OnN5bSAqcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcyosIDptZXRhIHs6ZG9jICJEb24ndCBwcmludCBuYW1lc3BhY2VzIHdpdGggc3ltYm9scy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW5cbnByZXR0eSBwcmludGluZyB0aGUgcmVzdWx0cyBvZiBtYWNybyBleHBhbnNpb25zIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqIG5pbClcclxuIn0gezpzeW0gY2hhci1jb2RlLCA6bWV0YSB7OmRvYyAiQ29udmVydCBjaGFyIHRvIGludCIsIDphcmdsaXN0cyAoW2NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFyLWNvZGVcclxuIFwiQ29udmVydCBjaGFyIHRvIGludFwiXHJcbiBbY11cclxuIChjb25kXHJcbiAgKG51bWJlcj8gYylcclxuICBjXHJcbiAgKGFuZCAoc3RyaW5nPyBjKSAoPT0gKC4tbGVuZ3RoIGMpIDEpKVxyXG4gICguY2hhckNvZGVBdCBjIDApXHJcbiAgOmVsc2VcclxuICAodGhyb3dcclxuICAgKGpzL0Vycm9yLiBcIkFyZ3VtZW50IHRvIGNoYXIgbXVzdCBiZSBhIGNoYXJhY3RlciBvciBudW1iZXJcIikpKSlcclxuIn0gezpzeW0gKnByaW50LXByZXR0eSosIDptZXRhIHs6ZG9jICJCaW5kIHRvIHRydWUgaWYgeW91IHdhbnQgd3JpdGUgdG8gdXNlIHByZXR0eSBwcmludGluZyJ9LCA6c291cmNlICIoZGVmICpwcmludC1wcmV0dHkqIHRydWUpXHJcbiJ9IHs6c3ltICpwcmludC1wcHJpbnQtZGlzcGF0Y2gqLCA6bWV0YSB7OmRvYyAiVGhlIHByZXR0eSBwcmludCBkaXNwYXRjaCBmdW5jdGlvbi4gVXNlIHdpdGgtcHByaW50LWRpc3BhdGNoIG9yXG5zZXQtcHByaW50LWRpc3BhdGNoIHRvIG1vZGlmeS4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKnByaW50LXBwcmludC1kaXNwYXRjaCogbmlsKVxyXG4ifSB7OnN5bSBwcHJpbnQtbmV3bGluZSwgOm1ldGEgezpkb2MgIlByaW50IGEgY29uZGl0aW9uYWwgbmV3bGluZSB0byBhIHByZXR0eSBwcmludGluZyBzdHJlYW0uIGtpbmQgc3BlY2lmaWVzIGlmIHRoZVxuICBuZXdsaW5lIGlzIDpsaW5lYXIsIDptaXNlciwgOmZpbGwsIG9yIDptYW5kYXRvcnkuXG5cbiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxuXG4gIE91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLiIsIDphcmdsaXN0cyAoW2tpbmRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnQtbmV3bGluZVxyXG4gXCJQcmludCBhIGNvbmRpdGlvbmFsIG5ld2xpbmUgdG8gYSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBraW5kIHNwZWNpZmllcyBpZiB0aGVcXG4gIG5ld2xpbmUgaXMgOmxpbmVhciwgOm1pc2VyLCA6ZmlsbCwgb3IgOm1hbmRhdG9yeS5cXG5cXG4gIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cXG5cXG4gIE91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLlwiXHJcbiBba2luZF1cclxuIChjaGVjay1lbnVtZXJhdGVkLWFyZyBraW5kICN7Om1hbmRhdG9yeSA6bWlzZXIgOmZpbGwgOmxpbmVhcn0pXHJcbiAobmwgKm91dCoga2luZCkpXHJcbiJ9IHs6c3ltIGZsb2F0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGFuIGZsb2F0LiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbG9hdD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG4gaXMgYW4gZmxvYXQuXCJcclxuIFtuXVxyXG4gKGFuZFxyXG4gIChudW1iZXI/IG4pXHJcbiAgKG5vdCAoanMvaXNOYU4gbikpXHJcbiAgKG5vdCAoaWRlbnRpY2FsPyBuIGpzL0luZmluaXR5KSlcclxuICAobm90ICg9PSAoanMvcGFyc2VGbG9hdCBuKSAoanMvcGFyc2VJbnQgbiAxMCkpKSkpXHJcbiJ9IHs6c3ltIHBwcmludC10YWIsIDptZXRhIHs6ZG9jICJUYWIgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJldHR5IHByaW50aW5nIHN0cmVhbS4ga2luZCBzcGVjaWZpZXMgd2hldGhlciB0aGUgdGFiXG5pcyA6bGluZSwgOnNlY3Rpb24sIDpsaW5lLXJlbGF0aXZlLCBvciA6c2VjdGlvbi1yZWxhdGl2ZS5cblxuQ29sbnVtIGFuZCBjb2xpbmMgc3BlY2lmeSB0aGUgdGFyZ2V0IGNvbHVtbiBhbmQgdGhlIGluY3JlbWVudCB0byBtb3ZlIHRoZSB0YXJnZXRcbmZvcndhcmQgaWYgdGhlIG91dHB1dCBpcyBhbHJlYWR5IHBhc3QgdGhlIG9yaWdpbmFsIHRhcmdldC5cblxuVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxuXG5PdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci5cblxuVEhJUyBGVU5DVElPTiBJUyBOT1QgWUVUIElNUExFTUVOVEVELiIsIDphcmdsaXN0cyAoW2tpbmQgY29sbnVtIGNvbGluY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludC10YWJcclxuIFwiVGFiIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByZXR0eSBwcmludGluZyBzdHJlYW0uIGtpbmQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHRhYlxcbmlzIDpsaW5lLCA6c2VjdGlvbiwgOmxpbmUtcmVsYXRpdmUsIG9yIDpzZWN0aW9uLXJlbGF0aXZlLlxcblxcbkNvbG51bSBhbmQgY29saW5jIHNwZWNpZnkgdGhlIHRhcmdldCBjb2x1bW4gYW5kIHRoZSBpbmNyZW1lbnQgdG8gbW92ZSB0aGUgdGFyZ2V0XFxuZm9yd2FyZCBpZiB0aGUgb3V0cHV0IGlzIGFscmVhZHkgcGFzdCB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxcblxcblRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cXG5cXG5PdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci5cXG5cXG5USElTIEZVTkNUSU9OIElTIE5PVCBZRVQgSU1QTEVNRU5URUQuXCJcclxuIHs6YWRkZWQgXCIxLjJcIn1cclxuIFtraW5kIGNvbG51bSBjb2xpbmNdXHJcbiAoY2hlY2stZW51bWVyYXRlZC1hcmdcclxuICBraW5kXHJcbiAgI3s6c2VjdGlvbiA6bGluZSA6bGluZS1yZWxhdGl2ZSA6c2VjdGlvbi1yZWxhdGl2ZX0pXHJcbiAodGhyb3cgKGpzL0Vycm9yLiBcInBwcmludC10YWIgaXMgbm90IHlldCBpbXBsZW1lbnRlZFwiKSkpXHJcbiJ9IHs6c3ltIHBwcmludC1zZXQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHBwcmludC1zZXQgKGZvcm1hdHRlci1vdXQgXCJ+PCN7fjt+QHt+d35eIH46X359fjt9fjo+XCIpKVxyXG4ifSB7OnN5bSBwcmludC10YWJsZSwgOm1ldGEgezpkb2MgIlByaW50cyBhIGNvbGxlY3Rpb24gb2YgbWFwcyBpbiBhIHRleHR1YWwgdGFibGUuIFByaW50cyB0YWJsZSBoZWFkaW5nc1xuICAga3MsIGFuZCB0aGVuIGEgbGluZSBvZiBvdXRwdXQgZm9yIGVhY2ggcm93LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXlzXG4gICBpbiBrcy4gSWYga3MgYXJlIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUga2V5cyBvZiB0aGUgZmlyc3QgaXRlbSBpbiByb3dzLiIsIDphcmdsaXN0cyBbW2tzIHJvd3NdIFtyb3dzXV19LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtdGFibGVcclxuIFwiUHJpbnRzIGEgY29sbGVjdGlvbiBvZiBtYXBzIGluIGEgdGV4dHVhbCB0YWJsZS4gUHJpbnRzIHRhYmxlIGhlYWRpbmdzXFxuICAga3MsIGFuZCB0aGVuIGEgbGluZSBvZiBvdXRwdXQgZm9yIGVhY2ggcm93LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXlzXFxuICAgaW4ga3MuIElmIGtzIGFyZSBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGtleXMgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gcm93cy5cIlxyXG4gezphZGRlZCBcIjEuM1wifVxyXG4gKFtrcyByb3dzXVxyXG4gICh3aGVuXHJcbiAgIChzZXEgcm93cylcclxuICAgKGxldFxyXG4gICAgW3dpZHRoc1xyXG4gICAgIChtYXBcclxuICAgICAgKGZuXHJcbiAgICAgICBba11cclxuICAgICAgIChhcHBseVxyXG4gICAgICAgIG1heFxyXG4gICAgICAgIChjb3VudCAoc3RyIGspKVxyXG4gICAgICAgIChtYXBcclxuICAgICAgICAgKGZuKiBbcDFfXzQ4OTI4I10gKGNvdW50IChzdHIgKGdldCBwMV9fNDg5MjgjIGspKSkpXHJcbiAgICAgICAgIHJvd3MpKSlcclxuICAgICAga3MpXHJcbiAgICAgc3BhY2Vyc1xyXG4gICAgIChtYXBcclxuICAgICAgKGZuKiBbcDFfXzQ4OTI5I10gKGFwcGx5IHN0ciAocmVwZWF0IHAxX180ODkyOSMgXCItXCIpKSlcclxuICAgICAgd2lkdGhzKVxyXG4gICAgIGZtdC1yb3dcclxuICAgICAoZm5cclxuICAgICAgW2xlYWRlciBkaXZpZGVyIHRyYWlsZXIgcm93XVxyXG4gICAgICAoc3RyXHJcbiAgICAgICBsZWFkZXJcclxuICAgICAgIChhcHBseVxyXG4gICAgICAgIHN0clxyXG4gICAgICAgIChpbnRlcnBvc2VcclxuICAgICAgICAgZGl2aWRlclxyXG4gICAgICAgICAoZm9yXHJcbiAgICAgICAgICBbW2NvbCB3aWR0aF1cclxuICAgICAgICAgICAobWFwXHJcbiAgICAgICAgICAgIHZlY3RvclxyXG4gICAgICAgICAgICAobWFwIChmbiogW3AxX180ODkzMCNdIChnZXQgcm93IHAxX180ODkzMCMpKSBrcylcclxuICAgICAgICAgICAgd2lkdGhzKV1cclxuICAgICAgICAgIChhZGQtcGFkZGluZyB3aWR0aCAoc3RyIGNvbCkpKSkpXHJcbiAgICAgICB0cmFpbGVyKSldXHJcbiAgICAoY2xqcy5jb3JlL3ByaW50bG4pXHJcbiAgICAoY2xqcy5jb3JlL3ByaW50bG4gKGZtdC1yb3cgXCJ8IFwiIFwiIHwgXCIgXCIgfFwiICh6aXBtYXAga3Mga3MpKSlcclxuICAgIChjbGpzLmNvcmUvcHJpbnRsbiAoZm10LXJvdyBcInwtXCIgXCItKy1cIiBcIi18XCIgKHppcG1hcCBrcyBzcGFjZXJzKSkpXHJcbiAgICAoZG9zZXFcclxuICAgICBbcm93IHJvd3NdXHJcbiAgICAgKGNsanMuY29yZS9wcmludGxuIChmbXQtcm93IFwifCBcIiBcIiB8IFwiIFwiIHxcIiByb3cpKSkpKSlcclxuIChbcm93c10gKHByaW50LXRhYmxlIChrZXlzIChmaXJzdCByb3dzKSkgcm93cykpKVxyXG4ifSB7OnN5bSBzZXQtcHByaW50LWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Z1bmN0aW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0LXBwcmludC1kaXNwYXRjaFxyXG4gW2Z1bmN0aW9uXVxyXG4gKHNldCEgKnByaW50LXBwcmludC1kaXNwYXRjaCogZnVuY3Rpb24pXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIGZyZXNoLWxpbmUsIDptZXRhIHs6ZG9jICJNYWtlIGEgbmV3bGluZSBpZiAqb3V0KiBpcyBub3QgYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLiBJZiAqb3V0KiBpc1xubm90IGEgcHJldHR5IHdyaXRlciAod2hpY2gga2VlcHMgdHJhY2sgb2YgY29sdW1ucyksIHRoaXMgZnVuY3Rpb24gYWx3YXlzIG91dHB1dHMgYSBuZXdsaW5lLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZyZXNoLWxpbmVcclxuIFwiTWFrZSBhIG5ld2xpbmUgaWYgKm91dCogaXMgbm90IGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gSWYgKm91dCogaXNcXG5ub3QgYSBwcmV0dHkgd3JpdGVyICh3aGljaCBrZWVwcyB0cmFjayBvZiBjb2x1bW5zKSwgdGhpcyBmdW5jdGlvbiBhbHdheXMgb3V0cHV0cyBhIG5ld2xpbmUuXCJcclxuIFtdXHJcbiAoaWZcclxuICAoc2F0aXNmaWVzPyBJRGVyZWYgKm91dCopXHJcbiAgKGlmIChub3QgKD0gMCAoZ2V0LWNvbHVtbiAoOmJhc2UgQEAqb3V0KikpKSkgKHBybikpXHJcbiAgKHBybikpKVxyXG4ifSB7OnN5bSBwcHJpbnQtaW5kZW50LCA6bWV0YSB7OmRvYyAiQ3JlYXRlIGFuIGluZGVudCBhdCB0aGlzIHBvaW50IGluIHRoZSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBUaGlzIGRlZmluZXMgaG93XG5mb2xsb3dpbmcgbGluZXMgYXJlIGluZGVudGVkLiByZWxhdGl2ZS10byBjYW4gYmUgZWl0aGVyIDpibG9jayBvciA6Y3VycmVudCBkZXBlbmRpbmdcbndoZXRoZXIgdGhlIGluZGVudCBzaG91bGQgYmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsb2dpY2FsIGJsb2NrIG9yXG50aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb24uIG4gaXMgYW4gb2Zmc2V0LlxuXG5UaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXG5cbk91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLiIsIDphcmdsaXN0cyAoW3JlbGF0aXZlLXRvIG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnQtaW5kZW50XHJcbiBcIkNyZWF0ZSBhbiBpbmRlbnQgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJldHR5IHByaW50aW5nIHN0cmVhbS4gVGhpcyBkZWZpbmVzIGhvd1xcbmZvbGxvd2luZyBsaW5lcyBhcmUgaW5kZW50ZWQuIHJlbGF0aXZlLXRvIGNhbiBiZSBlaXRoZXIgOmJsb2NrIG9yIDpjdXJyZW50IGRlcGVuZGluZ1xcbndoZXRoZXIgdGhlIGluZGVudCBzaG91bGQgYmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBsb2dpY2FsIGJsb2NrIG9yXFxudGhlIGN1cnJlbnQgY29sdW1uIHBvc2l0aW9uLiBuIGlzIGFuIG9mZnNldC5cXG5cXG5UaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXFxuXFxuT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuXCJcclxuIFtyZWxhdGl2ZS10byBuXVxyXG4gKGNoZWNrLWVudW1lcmF0ZWQtYXJnIHJlbGF0aXZlLXRvICN7OmJsb2NrIDpjdXJyZW50fSlcclxuIChpbmRlbnQgKm91dCogcmVsYXRpdmUtdG8gbikpXHJcbiJ9IHs6c3ltICpwcmludC1yYWRpeCosIDptZXRhIHs6ZG9jICJQcmludCBhIHJhZGl4IHNwZWNpZmllciBpbiBmcm9udCBvZiBpbnRlZ2VycyBhbmQgcmF0aW9uYWxzLiBJZiAqcHJpbnQtYmFzZSogaXMgMiwgOCxcbm9yIDE2LCB0aGVuIHRoZSByYWRpeCBzcGVjaWZpZXIgdXNlZCBpcyAjYiwgI28sIG9yICN4LCByZXNwZWN0aXZlbHkuIE90aGVyd2lzZSB0aGVcbnJhZGl4IHNwZWNpZmllciBpcyBpbiB0aGUgZm9ybSAjWFhyIHdoZXJlIFhYIGlzIHRoZSBkZWNpbWFsIHZhbHVlIG9mICpwcmludC1iYXNlKiAifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtcmFkaXgqIG5pbClcclxuIn0gezpzeW0gSVByZXR0eUZsdXNoLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoLXBwZmx1c2gpfSB7OnN5bSBjbC1mb3JtYXQsIDptZXRhIHs6ZG9jICJBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIENvbW1vbiBMaXNwIGNvbXBhdGlibGUgZm9ybWF0IGZ1bmN0aW9uLiBjbC1mb3JtYXQgZm9ybWF0cyBpdHNcbmFyZ3VtZW50cyB0byBhbiBvdXRwdXQgc3RyZWFtIG9yIHN0cmluZyBiYXNlZCBvbiB0aGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGdpdmVuLiBJdFxuc3VwcG9ydHMgc29waGlzdGljYXRlZCBmb3JtYXR0aW5nIG9mIHN0cnVjdHVyZWQgZGF0YS5cblxuV3JpdGVyIHNhdGlzZmllcyBJV3JpdGVyLCB0cnVlIHRvIG91dHB1dCB2aWEgKnByaW50LWZuKiBvciBuaWwgdG8gb3V0cHV0XG50byBhIHN0cmluZywgZm9ybWF0LWluIGlzIHRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzXG5hcmUgdGhlIGRhdGEgdG8gYmUgZm9ybWF0dGVkLlxuXG5UaGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGlzIGEgc3RyaW5nIHRvIGJlIG91dHB1dCB3aXRoIGVtYmVkZGVkICdmb3JtYXQgZGlyZWN0aXZlcydcbmRlc2NyaWJpbmcgaG93IHRvIGZvcm1hdCB0aGUgdmFyaW91cyBhcmd1bWVudHMgcGFzc2VkIGluLlxuXG5JZiB3cml0ZXIgaXMgbmlsLCBjbC1mb3JtYXQgcmV0dXJucyB0aGUgZm9ybWF0dGVkIHJlc3VsdCBzdHJpbmcuIE90aGVyd2lzZSwgY2wtZm9ybWF0XG5yZXR1cm5zIG5pbC5cblxuRm9yIGV4YW1wbGU6XG4gKGxldCBbcmVzdWx0cyBbNDYgMzggMjJdXVxuICAgICAgICAoY2wtZm9ybWF0IHRydWUgXCJUaGVyZSB+W2FyZX47aXN+OjthcmV+XX46KiB+ZCByZXN1bHR+OnA6IH57fmR+Xiwgfn1+JVwiXG4gICAgICAgICAgICAgICAgICAgKGNvdW50IHJlc3VsdHMpIHJlc3VsdHMpKVxuXG5QcmludHMgdmlhICpwcmludC1mbio6XG4gVGhlcmUgYXJlIDMgcmVzdWx0czogNDYsIDM4LCAyMlxuXG5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9uIGZvcm1hdCBjb250cm9sIHN0cmluZ3MgaXMgYXZhaWxhYmxlIGluIHRoZSBcIkNvbW1vbiBMaXNwIHRoZVxuTGFuZ3VhZ2UsIDJuZCBlZGl0aW9uXCIsIENoYXB0ZXIgMjIgKGF2YWlsYWJsZSBvbmxpbmUgYXQ6XG5odHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2NzLmNtdS5lZHUvcHJvamVjdC9haS1yZXBvc2l0b3J5L2FpL2h0bWwvY2x0bC9jbG0vbm9kZTIwMC5odG1sI1NFQ1RJT04wMDI2MzMwMDAwMDAwMDAwMDAwMDApXG5hbmQgaW4gdGhlIENvbW1vbiBMaXNwIEh5cGVyU3BlYyBhdFxuaHR0cDovL3d3dy5saXNwd29ya3MuY29tL2RvY3VtZW50YXRpb24vSHlwZXJTcGVjL0JvZHkvMjJfYy5odG0iLCA6YXJnbGlzdHMgKFt3cml0ZXIgZm9ybWF0LWluICYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsLWZvcm1hdFxyXG4gXCJBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIENvbW1vbiBMaXNwIGNvbXBhdGlibGUgZm9ybWF0IGZ1bmN0aW9uLiBjbC1mb3JtYXQgZm9ybWF0cyBpdHNcXG5hcmd1bWVudHMgdG8gYW4gb3V0cHV0IHN0cmVhbSBvciBzdHJpbmcgYmFzZWQgb24gdGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBnaXZlbi4gSXRcXG5zdXBwb3J0cyBzb3BoaXN0aWNhdGVkIGZvcm1hdHRpbmcgb2Ygc3RydWN0dXJlZCBkYXRhLlxcblxcbldyaXRlciBzYXRpc2ZpZXMgSVdyaXRlciwgdHJ1ZSB0byBvdXRwdXQgdmlhICpwcmludC1mbiogb3IgbmlsIHRvIG91dHB1dFxcbnRvIGEgc3RyaW5nLCBmb3JtYXQtaW4gaXMgdGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHNcXG5hcmUgdGhlIGRhdGEgdG8gYmUgZm9ybWF0dGVkLlxcblxcblRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgaXMgYSBzdHJpbmcgdG8gYmUgb3V0cHV0IHdpdGggZW1iZWRkZWQgJ2Zvcm1hdCBkaXJlY3RpdmVzJ1xcbmRlc2NyaWJpbmcgaG93IHRvIGZvcm1hdCB0aGUgdmFyaW91cyBhcmd1bWVudHMgcGFzc2VkIGluLlxcblxcbklmIHdyaXRlciBpcyBuaWwsIGNsLWZvcm1hdCByZXR1cm5zIHRoZSBmb3JtYXR0ZWQgcmVzdWx0IHN0cmluZy4gT3RoZXJ3aXNlLCBjbC1mb3JtYXRcXG5yZXR1cm5zIG5pbC5cXG5cXG5Gb3IgZXhhbXBsZTpcXG4gKGxldCBbcmVzdWx0cyBbNDYgMzggMjJdXVxcbiAgICAgICAgKGNsLWZvcm1hdCB0cnVlIFxcXCJUaGVyZSB+W2FyZX47aXN+OjthcmV+XX46KiB+ZCByZXN1bHR+OnA6IH57fmR+Xiwgfn1+JVxcXCJcXG4gICAgICAgICAgICAgICAgICAgKGNvdW50IHJlc3VsdHMpIHJlc3VsdHMpKVxcblxcblByaW50cyB2aWEgKnByaW50LWZuKjpcXG4gVGhlcmUgYXJlIDMgcmVzdWx0czogNDYsIDM4LCAyMlxcblxcbkRldGFpbGVkIGRvY3VtZW50YXRpb24gb24gZm9ybWF0IGNvbnRyb2wgc3RyaW5ncyBpcyBhdmFpbGFibGUgaW4gdGhlIFxcXCJDb21tb24gTGlzcCB0aGVcXG5MYW5ndWFnZSwgMm5kIGVkaXRpb25cXFwiLCBDaGFwdGVyIDIyIChhdmFpbGFibGUgb25saW5lIGF0Olxcbmh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MuY211LmVkdS9wcm9qZWN0L2FpLXJlcG9zaXRvcnkvYWkvaHRtbC9jbHRsL2NsbS9ub2RlMjAwLmh0bWwjU0VDVElPTjAwMjYzMzAwMDAwMDAwMDAwMDAwMClcXG5hbmQgaW4gdGhlIENvbW1vbiBMaXNwIEh5cGVyU3BlYyBhdFxcbmh0dHA6Ly93d3cubGlzcHdvcmtzLmNvbS9kb2N1bWVudGF0aW9uL0h5cGVyU3BlYy9Cb2R5LzIyX2MuaHRtXCJcclxuIHs6c2VlLWFsc29cclxuICBbW1wiaHR0cDovL3d3dy5jcy5jbXUuZWR1L2Fmcy9jcy5jbXUuZWR1L3Byb2plY3QvYWktcmVwb3NpdG9yeS9haS9odG1sL2NsdGwvY2xtL25vZGUyMDAuaHRtbCNTRUNUSU9OMDAyNjMzMDAwMDAwMDAwMDAwMDAwXCJcclxuICAgIFwiQ29tbW9uIExpc3AgdGhlIExhbmd1YWdlXCJdXHJcbiAgIFtcImh0dHA6Ly93d3cubGlzcHdvcmtzLmNvbS9kb2N1bWVudGF0aW9uL0h5cGVyU3BlYy9Cb2R5LzIyX2MuaHRtXCJcclxuICAgIFwiQ29tbW9uIExpc3AgSHlwZXJTcGVjXCJdXX1cclxuIFt3cml0ZXIgZm9ybWF0LWluICYgYXJnc11cclxuIChsZXRcclxuICBbY29tcGlsZWQtZm9ybWF0XHJcbiAgIChpZiAoc3RyaW5nPyBmb3JtYXQtaW4pIChjb21waWxlLWZvcm1hdCBmb3JtYXQtaW4pIGZvcm1hdC1pbilcclxuICAgbmF2aWdhdG9yXHJcbiAgIChpbml0LW5hdmlnYXRvciBhcmdzKV1cclxuICAoZXhlY3V0ZS1mb3JtYXQgd3JpdGVyIGNvbXBpbGVkLWZvcm1hdCBuYXZpZ2F0b3IpKSlcclxuIn0gezpzeW0gKnByaW50LW1pc2VyLXdpZHRoKiwgOm1ldGEgezpkb2MgIlRoZSBjb2x1bW4gYXQgd2hpY2ggdG8gZW50ZXIgbWlzZXIgc3R5bGUuIERlcGVuZGluZyBvbiB0aGUgZGlzcGF0Y2ggdGFibGUsXG5taXNlciBzdHlsZSBhZGQgbmV3bGluZXMgaW4gbW9yZSBwbGFjZXMgdG8gdHJ5IHRvIGtlZXAgbGluZXMgc2hvcnQgYWxsb3dpbmcgZm9yIGZ1cnRoZXJcbmxldmVscyBvZiBuZXN0aW5nLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1taXNlci13aWR0aCogNDApXHJcbiJ9IHs6c3ltIHdyaXRlLCA6bWV0YSB7OmRvYyAiV3JpdGUgYW4gb2JqZWN0IHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgYmluZGluZ3Mgb2YgdGhlIHByaW50ZXIgY29udHJvbCB2YXJpYWJsZXMuXG5Vc2UgdGhlIGt3LWFyZ3MgYXJndW1lbnQgdG8gb3ZlcnJpZGUgaW5kaXZpZHVhbCB2YXJpYWJsZXMgZm9yIHRoaXMgY2FsbCAoYW5kIGFueVxucmVjdXJzaXZlIGNhbGxzKS4gUmV0dXJucyB0aGUgc3RyaW5nIHJlc3VsdCBpZiA6c3RyZWFtIGlzIG5pbCBvciBuaWwgb3RoZXJ3aXNlLlxuXG5UaGUgZm9sbG93aW5nIGtleXdvcmQgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgd2l0aCB2YWx1ZXM6XG4gIEtleXdvcmQgICAgICAgICAgICAgIE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlXG4gIDpzdHJlYW0gICAgICAgICAgICAgIFdyaXRlciBmb3Igb3V0cHV0IG9yIG5pbCAgICAgICAgICAgICB0cnVlIChpbmRpY2F0ZXMgKm91dCopXG4gIDpiYXNlICAgICAgICAgICAgICAgIEJhc2UgdG8gdXNlIGZvciB3cml0aW5nIHJhdGlvbmFscyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1iYXNlKlxuICA6Y2lyY2xlKiAgICAgICAgICAgICBJZiB0cnVlLCBtYXJrIGNpcmN1bGFyIHN0cnVjdHVyZXMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtY2lyY2xlKlxuICA6bGVuZ3RoICAgICAgICAgICAgICBNYXhpbXVtIGVsZW1lbnRzIHRvIHNob3cgaW4gc3VibGlzdHMgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGVuZ3RoKlxuICA6bGV2ZWwgICAgICAgICAgICAgICBNYXhpbXVtIGRlcHRoICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGV2ZWwqXG4gIDpsaW5lcyogICAgICAgICAgICAgIE1heGltdW0gbGluZXMgb2Ygb3V0cHV0ICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1saW5lcypcbiAgOm1pc2VyLXdpZHRoICAgICAgICAgV2lkdGggdG8gZW50ZXIgbWlzZXIgbW9kZSAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LW1pc2VyLXdpZHRoKlxuICA6ZGlzcGF0Y2ggICAgICAgICAgICBUaGUgcHJldHR5IHByaW50IGRpc3BhdGNoIGZ1bmN0aW9uICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcHByaW50LWRpc3BhdGNoKlxuICA6cHJldHR5ICAgICAgICAgICAgICBJZiB0cnVlLCBkbyBwcmV0dHkgcHJpbnRpbmcgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcHJldHR5KlxuICA6cmFkaXggICAgICAgICAgICAgICBJZiB0cnVlLCBwcmVwZW5kIGEgcmFkaXggc3BlY2lmaWVyICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmFkaXgqXG4gIDpyZWFkYWJseSogICAgICAgICAgIElmIHRydWUsIHByaW50IHJlYWRhYmx5ICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yZWFkYWJseSpcbiAgOnJpZ2h0LW1hcmdpbiAgICAgICAgVGhlIGNvbHVtbiBmb3IgdGhlIHJpZ2h0IG1hcmdpbiAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJpZ2h0LW1hcmdpbipcbiAgOnN1cHByZXNzLW5hbWVzcGFjZXMgSWYgdHJ1ZSwgbm8gbmFtZXNwYWNlcyBpbiBzeW1ib2xzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqXG5cbiAgKiA9IG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCA6YXJnbGlzdHMgKFtvYmplY3QgJiBrdy1hcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gd3JpdGVcclxuIFwiV3JpdGUgYW4gb2JqZWN0IHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgYmluZGluZ3Mgb2YgdGhlIHByaW50ZXIgY29udHJvbCB2YXJpYWJsZXMuXFxuVXNlIHRoZSBrdy1hcmdzIGFyZ3VtZW50IHRvIG92ZXJyaWRlIGluZGl2aWR1YWwgdmFyaWFibGVzIGZvciB0aGlzIGNhbGwgKGFuZCBhbnlcXG5yZWN1cnNpdmUgY2FsbHMpLiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVzdWx0IGlmIDpzdHJlYW0gaXMgbmlsIG9yIG5pbCBvdGhlcndpc2UuXFxuXFxuVGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBjYW4gYmUgcGFzc2VkIHdpdGggdmFsdWVzOlxcbiAgS2V5d29yZCAgICAgICAgICAgICAgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWVcXG4gIDpzdHJlYW0gICAgICAgICAgICAgIFdyaXRlciBmb3Igb3V0cHV0IG9yIG5pbCAgICAgICAgICAgICB0cnVlIChpbmRpY2F0ZXMgKm91dCopXFxuICA6YmFzZSAgICAgICAgICAgICAgICBCYXNlIHRvIHVzZSBmb3Igd3JpdGluZyByYXRpb25hbHMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtYmFzZSpcXG4gIDpjaXJjbGUqICAgICAgICAgICAgIElmIHRydWUsIG1hcmsgY2lyY3VsYXIgc3RydWN0dXJlcyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1jaXJjbGUqXFxuICA6bGVuZ3RoICAgICAgICAgICAgICBNYXhpbXVtIGVsZW1lbnRzIHRvIHNob3cgaW4gc3VibGlzdHMgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGVuZ3RoKlxcbiAgOmxldmVsICAgICAgICAgICAgICAgTWF4aW11bSBkZXB0aCAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxldmVsKlxcbiAgOmxpbmVzKiAgICAgICAgICAgICAgTWF4aW11bSBsaW5lcyBvZiBvdXRwdXQgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxpbmVzKlxcbiAgOm1pc2VyLXdpZHRoICAgICAgICAgV2lkdGggdG8gZW50ZXIgbWlzZXIgbW9kZSAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LW1pc2VyLXdpZHRoKlxcbiAgOmRpc3BhdGNoICAgICAgICAgICAgVGhlIHByZXR0eSBwcmludCBkaXNwYXRjaCBmdW5jdGlvbiAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXBwcmludC1kaXNwYXRjaCpcXG4gIDpwcmV0dHkgICAgICAgICAgICAgIElmIHRydWUsIGRvIHByZXR0eSBwcmludGluZyAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1wcmV0dHkqXFxuICA6cmFkaXggICAgICAgICAgICAgICBJZiB0cnVlLCBwcmVwZW5kIGEgcmFkaXggc3BlY2lmaWVyICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmFkaXgqXFxuICA6cmVhZGFibHkqICAgICAgICAgICBJZiB0cnVlLCBwcmludCByZWFkYWJseSAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmVhZGFibHkqXFxuICA6cmlnaHQtbWFyZ2luICAgICAgICBUaGUgY29sdW1uIGZvciB0aGUgcmlnaHQgbWFyZ2luICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmlnaHQtbWFyZ2luKlxcbiAgOnN1cHByZXNzLW5hbWVzcGFjZXMgSWYgdHJ1ZSwgbm8gbmFtZXNwYWNlcyBpbiBzeW1ib2xzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqXFxuXFxuICAqID0gbm90IHlldCBzdXBwb3J0ZWRcXG5cIlxyXG4gW29iamVjdCAmIGt3LWFyZ3NdXHJcbiAobGV0XHJcbiAgW29wdGlvbnMgKG1lcmdlIHs6c3RyZWFtIHRydWV9IChhcHBseSBoYXNoLW1hcCBrdy1hcmdzKSldXHJcbiAgKGJpbmRpbmdcclxuICAgW2NsanMucHByaW50LypwcmludC1iYXNlKlxyXG4gICAgKDpiYXNlIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LWJhc2UqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LWNpcmNsZSpcclxuICAgICg6Y2lyY2xlIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LWNpcmNsZSopXHJcbiAgICBjbGpzLmNvcmUvKnByaW50LWxlbmd0aCpcclxuICAgICg6bGVuZ3RoIG9wdGlvbnMgY2xqcy5jb3JlLypwcmludC1sZW5ndGgqKVxyXG4gICAgY2xqcy5jb3JlLypwcmludC1sZXZlbCpcclxuICAgICg6bGV2ZWwgb3B0aW9ucyBjbGpzLmNvcmUvKnByaW50LWxldmVsKilcclxuICAgIGNsanMucHByaW50LypwcmludC1saW5lcypcclxuICAgICg6bGluZXMgb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtbGluZXMqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LW1pc2VyLXdpZHRoKlxyXG4gICAgKDptaXNlci13aWR0aCBvcHRpb25zIGNsanMucHByaW50LypwcmludC1taXNlci13aWR0aCopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtcHByaW50LWRpc3BhdGNoKlxyXG4gICAgKDpkaXNwYXRjaCBvcHRpb25zIGNsanMucHByaW50LypwcmludC1wcHJpbnQtZGlzcGF0Y2gqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LXByZXR0eSpcclxuICAgICg6cHJldHR5IG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LXByZXR0eSopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtcmFkaXgqXHJcbiAgICAoOnJhZGl4IG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LXJhZGl4KilcclxuICAgIGNsanMuY29yZS8qcHJpbnQtcmVhZGFibHkqXHJcbiAgICAoOnJlYWRhYmx5IG9wdGlvbnMgY2xqcy5jb3JlLypwcmludC1yZWFkYWJseSopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtcmlnaHQtbWFyZ2luKlxyXG4gICAgKDpyaWdodC1tYXJnaW4gb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtcmlnaHQtbWFyZ2luKilcclxuICAgIGNsanMucHByaW50LypwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKlxyXG4gICAgKDpzdXBwcmVzcy1uYW1lc3BhY2VzXHJcbiAgICAgb3B0aW9uc1xyXG4gICAgIGNsanMucHByaW50LypwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKildXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFtzYlxyXG4gICAgICAoU3RyaW5nQnVmZmVyLilcclxuICAgICAgb3B0dmFsXHJcbiAgICAgIChpZiAoY29udGFpbnM/IG9wdGlvbnMgOnN0cmVhbSkgKDpzdHJlYW0gb3B0aW9ucykgdHJ1ZSlcclxuICAgICAgYmFzZS13cml0ZXJcclxuICAgICAgKGlmXHJcbiAgICAgICAob3IgKHRydWU/IG9wdHZhbCkgKG5pbD8gb3B0dmFsKSlcclxuICAgICAgIChTdHJpbmdCdWZmZXJXcml0ZXIuIHNiKVxyXG4gICAgICAgb3B0dmFsKV1cclxuICAgICAoaWZcclxuICAgICAgKnByaW50LXByZXR0eSpcclxuICAgICAgKHdpdGgtcHJldHR5LXdyaXRlciBiYXNlLXdyaXRlciAod3JpdGUtb3V0IG9iamVjdCkpXHJcbiAgICAgIChiaW5kaW5nIFsqb3V0KiBiYXNlLXdyaXRlcl0gKHByIG9iamVjdCkpKVxyXG4gICAgIChpZiAodHJ1ZT8gb3B0dmFsKSAoc3RyaW5nLXByaW50IChzdHIgc2IpKSlcclxuICAgICAoaWYgKG5pbD8gb3B0dmFsKSAoc3RyIHNiKSkpKSkpKVxyXG4ifSB7OnN5bSAtcHBmbHVzaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcF0pfSwgOnByb3RvY29sIElQcmV0dHlGbHVzaH0gezpzeW0gKnByaW50LXJpZ2h0LW1hcmdpbiosIDptZXRhIHs6ZG9jICJQcmV0dHkgcHJpbnRpbmcgd2lsbCB0cnkgdG8gYXZvaWQgYW55dGhpbmcgZ29pbmcgYmV5b25kIHRoaXMgY29sdW1uLlxuU2V0IGl0IHRvIG5pbCB0byBoYXZlIHBwcmludCBsZXQgdGhlIGxpbmUgYmUgYXJiaXRyYXJpbHkgbG9uZy4gVGhpcyB3aWxsIGlnbm9yZSBhbGxcbm5vbi1tYW5kYXRvcnkgbmV3bGluZXMuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LXJpZ2h0LW1hcmdpbiogNzIpXHJcbiJ9IHs6c3ltIHdyaXRlLW91dCwgOm1ldGEgezpkb2MgIldyaXRlIGFuIG9iamVjdCB0byAqb3V0KiBzdWJqZWN0IHRvIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIHRoZSBwcmludGVyIGNvbnRyb2xcbnZhcmlhYmxlcy4gVXNlIHRoZSBrdy1hcmdzIGFyZ3VtZW50IHRvIG92ZXJyaWRlIGluZGl2aWR1YWwgdmFyaWFibGVzIGZvciB0aGlzIGNhbGwgKGFuZFxuYW55IHJlY3Vyc2l2ZSBjYWxscykuXG5cbipvdXQqIG11c3QgYmUgYSBQcmV0dHlXcml0ZXIgaWYgcHJldHR5IHByaW50aW5nIGlzIGVuYWJsZWQuIFRoaXMgaXMgdGhlIHJlc3BvbnNpYmlsaXR5XG5vZiB0aGUgY2FsbGVyLlxuXG5UaGlzIG1ldGhvZCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSBieSBwcmV0dHkgcHJpbnQgZGlzcGF0Y2ggZnVuY3Rpb25zIHRoYXRcbmFscmVhZHkga25vdyB0aGF0IHRoZSBwcmV0dHkgcHJpbnRlciB3aWxsIGhhdmUgc2V0IHVwIHRoZWlyIGVudmlyb25tZW50IGFwcHJvcHJpYXRlbHkuXG5Ob3JtYWwgbGlicmFyeSBjbGllbnRzIHNob3VsZCB1c2UgdGhlIHN0YW5kYXJkIFwid3JpdGVcIiBpbnRlcmZhY2UuICIsIDphcmdsaXN0cyAoW29iamVjdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdyaXRlLW91dFxyXG4gXCJXcml0ZSBhbiBvYmplY3QgdG8gKm91dCogc3ViamVjdCB0byB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiB0aGUgcHJpbnRlciBjb250cm9sXFxudmFyaWFibGVzLiBVc2UgdGhlIGt3LWFyZ3MgYXJndW1lbnQgdG8gb3ZlcnJpZGUgaW5kaXZpZHVhbCB2YXJpYWJsZXMgZm9yIHRoaXMgY2FsbCAoYW5kXFxuYW55IHJlY3Vyc2l2ZSBjYWxscykuXFxuXFxuKm91dCogbXVzdCBiZSBhIFByZXR0eVdyaXRlciBpZiBwcmV0dHkgcHJpbnRpbmcgaXMgZW5hYmxlZC4gVGhpcyBpcyB0aGUgcmVzcG9uc2liaWxpdHlcXG5vZiB0aGUgY2FsbGVyLlxcblxcblRoaXMgbWV0aG9kIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IHByZXR0eSBwcmludCBkaXNwYXRjaCBmdW5jdGlvbnMgdGhhdFxcbmFscmVhZHkga25vdyB0aGF0IHRoZSBwcmV0dHkgcHJpbnRlciB3aWxsIGhhdmUgc2V0IHVwIHRoZWlyIGVudmlyb25tZW50IGFwcHJvcHJpYXRlbHkuXFxuTm9ybWFsIGxpYnJhcnkgY2xpZW50cyBzaG91bGQgdXNlIHRoZSBzdGFuZGFyZCBcXFwid3JpdGVcXFwiIGludGVyZmFjZS4gXCJcclxuIFtvYmplY3RdXHJcbiAobGV0XHJcbiAgW2xlbmd0aC1yZWFjaGVkXHJcbiAgIChhbmRcclxuICAgICpjdXJyZW50LWxlbmd0aCpcclxuICAgICpwcmludC1sZW5ndGgqXHJcbiAgICAoPj0gKmN1cnJlbnQtbGVuZ3RoKiAqcHJpbnQtbGVuZ3RoKikpXVxyXG4gIChpZi1ub3RcclxuICAgKnByaW50LXByZXR0eSpcclxuICAgKHByIG9iamVjdClcclxuICAgKGlmXHJcbiAgICBsZW5ndGgtcmVhY2hlZFxyXG4gICAgKC13cml0ZSAqb3V0KiBcIi4uLlwiKVxyXG4gICAgKGRvXHJcbiAgICAgKGlmXHJcbiAgICAgICpjdXJyZW50LWxlbmd0aCpcclxuICAgICAgKHNldCEgKmN1cnJlbnQtbGVuZ3RoKiAoaW5jICpjdXJyZW50LWxlbmd0aCopKSlcclxuICAgICAoKnByaW50LXBwcmludC1kaXNwYXRjaCogb2JqZWN0KSkpKVxyXG4gIGxlbmd0aC1yZWFjaGVkKSlcclxuIn0gezpzeW0gKnByaW50LWJhc2UqLCA6bWV0YSB7OmRvYyAiVGhlIGJhc2UgdG8gdXNlIGZvciBwcmludGluZyBpbnRlZ2VycyBhbmQgcmF0aW9uYWxzLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1iYXNlKiAxMClcclxuIn0pLCBydW0udXRpbCAoezpzeW0gY29sbGVjdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXkgbWl4aW5zXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sbGVjdFxyXG4gW2tleSBtaXhpbnNdXHJcbiAoaW50byBbXSAoa2VlcCAoZm4gW21dIChnZXQgbSBrZXkpKSkgbWl4aW5zKSlcclxuIn0gezpzeW0gY29sbGVjdCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5cyBtaXhpbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xsZWN0KlxyXG4gW2tleXMgbWl4aW5zXVxyXG4gKGludG8gW10gKG1hcGNhdCAoZm4gW21dIChrZWVwIChmbiBba10gKGdldCBtIGspKSBrZXlzKSkpIG1peGlucykpXHJcbiJ9IHs6c3ltIGNhbGwtYWxsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIGZucyAmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYWxsLWFsbFxyXG4gW3N0YXRlIGZucyAmIGFyZ3NdXHJcbiAocmVkdWNlIChmbiBbc3RhdGUgZm5dIChhcHBseSBmbiBzdGF0ZSBhcmdzKSkgc3RhdGUgZm5zKSlcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmluc3BlY3QgKHs6c3ltIGluc3BlY3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlIHN1cHBsaWVkLlxuICAgTWF5IGJlIHRoZSBhIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpdHNlbGYgKGUuZy4gXCJ0cnVlXCIpXG4gICBvciBpdCBtYXkgYmUgYSBkZXNjcmlwdGlvbiAoZS5nLiBcImFuIGluc3RhbmNlIG9mIEZvb1wiKS5cbiAgIElmIHRydW5jYXRlIGlzIHRydWUgdGhlbiByZXR1cm4gYSB2ZXJ5IHRlcnNlIHZlcnNpb24gb2ZcbiAgIHRoZSBpbnNwZWN0aW9uLiIsIDphcmdsaXN0cyBbW3hdIFt0cnVuY2F0ZSB4XV19LCA6c291cmNlICIoZGVmblxyXG4gaW5zcGVjdFxyXG4gXCJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlIHN1cHBsaWVkLlxcbiAgIE1heSBiZSB0aGUgYSBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXRzZWxmIChlLmcuIFxcXCJ0cnVlXFxcIilcXG4gICBvciBpdCBtYXkgYmUgYSBkZXNjcmlwdGlvbiAoZS5nLiBcXFwiYW4gaW5zdGFuY2Ugb2YgRm9vXFxcIikuXFxuICAgSWYgdHJ1bmNhdGUgaXMgdHJ1ZSB0aGVuIHJldHVybiBhIHZlcnkgdGVyc2UgdmVyc2lvbiBvZlxcbiAgIHRoZSBpbnNwZWN0aW9uLlwiXHJcbiAoW3hdIChpbnNwZWN0KiBmYWxzZSB4KSlcclxuIChbdHJ1bmNhdGUgeF0gKGluc3BlY3QqIHRydW5jYXRlIHgpKSlcclxuIn0pLCBzYWJsb25vLmludGVycHJldGVyICh7OnN5bSBpbnRlcnByZXQsIDptZXRhIHs6ZG9jICJJbnRlcnByZXQgYSBDbG9qdXJlIGRhdGEgc3RydWN0dXJlIGFzIGEgUmVhY3QgZm4gY2FsbC4iLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgSUludGVycHJldGVyfSB7OnN5bSBJSW50ZXJwcmV0ZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChpbnRlcnByZXQpfSB7OnN5bSBjb250cm9sbGVkLWlucHV0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBgdHlwZWAgYW5kIGBwcm9wc2AgYXJlIHVzZWQgYSBjb250cm9sbGVkIGlucHV0LFxuICBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIChbdHlwZSBwcm9wc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnRyb2xsZWQtaW5wdXQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBgdHlwZWAgYW5kIGBwcm9wc2AgYXJlIHVzZWQgYSBjb250cm9sbGVkIGlucHV0LFxcbiAgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiBbdHlwZSBwcm9wc11cclxuICM/KDpjbGpzIChhbmQgKG9iamVjdD8gcHJvcHMpIChjYXNlIHR5cGUgXCJpbnB1dFwiIChvciAoZXhpc3RzPyAoLi1jaGVja2VkIHByb3BzKSkgKGV4aXN0cz8gKC4tdmFsdWUgcHJvcHMpKSkgXCJzZWxlY3RcIiAoZXhpc3RzPyAoLi12YWx1ZSBwcm9wcykpIFwidGV4dGFyZWFcIiAoZXhpc3RzPyAoLi12YWx1ZSBwcm9wcykpIGZhbHNlKSkpKVxyXG4ifSB7OnN5bSBjcmVhdGUtZWxlbWVudCwgOm1ldGEgezpkb2MgIkNyZWF0ZSBhIFJlYWN0IGVsZW1lbnQuIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aGVuIHJ1bm5pbmdcbiAgdW5kZXIgQ2xvanVyZVNjcmlwdCwgYW5kIGEgb20uZG9tLkVsZW1lbnQgcmVjb3JkIGluIENsb2p1cmUuIiwgOmFyZ2xpc3RzIChbdHlwZSBwcm9wcyAmIGNoaWxkcmVuXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3JlYXRlLWVsZW1lbnRcclxuIFwiQ3JlYXRlIGEgUmVhY3QgZWxlbWVudC4gUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdoZW4gcnVubmluZ1xcbiAgdW5kZXIgQ2xvanVyZVNjcmlwdCwgYW5kIGEgb20uZG9tLkVsZW1lbnQgcmVjb3JkIGluIENsb2p1cmUuXCJcclxuIFt0eXBlIHByb3BzICYgY2hpbGRyZW5dXHJcbiAjPyg6Y2xqIChkb20vZWxlbWVudCB7OmF0dHJzIHByb3BzLCA6Y2hpbGRyZW4gY2hpbGRyZW4sIDpyZWFjdC1rZXkgbmlsLCA6dGFnIHR5cGV9KSA6Y2xqcyAoYXBwbHkganMvUmVhY3QuY3JlYXRlRWxlbWVudCAoZWxlbWVudC1jbGFzcyB0eXBlIHByb3BzKSBwcm9wcyBjaGlsZHJlbikpKVxyXG4ifSB7OnN5bSBhdHRyaWJ1dGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2F0dHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXR0cmlidXRlc1xyXG4gW2F0dHJzXVxyXG4gIz8oOmNsaiAoLT4gKHV0aWwvaHRtbC10by1kb20tYXR0cnMgYXR0cnMpICh1cGRhdGUgOmNsYXNzTmFtZSAoZm4qIFtwMV9fNDkwNTMjXSAoc29tZS0+PiBwMV9fNDkwNTMjIChzdHIvam9pbiBcIiBcIikpKSkpIDpjbGpzICh3aGVuLWxldCBbanMtYXR0cnMgKGNsai0+anMgKHV0aWwvaHRtbC10by1kb20tYXR0cnMgYXR0cnMpKV0gKGxldCBbY2xhc3MgKC4tY2xhc3NOYW1lIGpzLWF0dHJzKSBjbGFzcyAoaWYgKGFycmF5PyBjbGFzcykgKGpvaW4gXCIgXCIgY2xhc3MpIGNsYXNzKV0gKGlmIChibGFuaz8gY2xhc3MpIChqcy1kZWxldGUganMtYXR0cnMgXCJjbGFzc05hbWVcIikgKHNldCEgKC4tY2xhc3NOYW1lIGpzLWF0dHJzKSBjbGFzcykpIGpzLWF0dHJzKSkpKVxyXG4ifSB7OnN5bSBlbGVtZW50LCA6bWV0YSB7OmRvYyAiUmVuZGVyIGFuIGVsZW1lbnQgdmVjdG9yIGFzIGEgSFRNTCBlbGVtZW50LiIsIDphcmdsaXN0cyAoW2VsZW1lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGVtZW50XHJcbiBcIlJlbmRlciBhbiBlbGVtZW50IHZlY3RvciBhcyBhIEhUTUwgZWxlbWVudC5cIlxyXG4gW2VsZW1lbnRdXHJcbiAobGV0XHJcbiAgW1t0eXBlIGF0dHJzIGNvbnRlbnRdIChub3JtYWxpemUvZWxlbWVudCBlbGVtZW50KV1cclxuICAoYXBwbHlcclxuICAgY3JlYXRlLWVsZW1lbnRcclxuICAgdHlwZVxyXG4gICAoYXR0cmlidXRlcyBhdHRycylcclxuICAgKGludGVycHJldC1zZXEgY29udGVudCkpKSlcclxuIn0pLCBlZG5hLnBhcnNlICh7OnN5bSBhY2NpZGVudGFscywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgYWNjaWRlbnRhbHMgI3tcXCMgXFw9IFxcX30pXHJcbiJ9IHs6c3ltIGFjY2lkZW50YWwtPmtleXdvcmQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGFjY2lkZW50YWwtPmtleXdvcmQge1xcIyA6c2hhcnAsIFxcPSA6ZmxhdCwgXFxfIDpuYXR1cmFsfSlcclxuIn0gezpzeW0gbm90ZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gbm90ZT8gW3hdIChub3Q9IDpjbG9qdXJlLnNwZWMuYWxwaGEvaW52YWxpZCAocGFyc2Utbm90ZSB4KSkpXHJcbiJ9IHs6c3ltIGRpZ2l0cywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZGlnaXRzICN7XFwwIFxcMSBcXDIgXFwzIFxcNCBcXDUgXFw2IFxcNyBcXDggXFw5fSlcclxuIn0gezpzeW0gaW5zdHJ1bWVudHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGluc3RydW1lbnRzIChnZXQtaW5zdHJ1bWVudHMpKVxyXG4ifSB7OnN5bSBwYXJzZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2VcclxuIFtjb250ZW50XVxyXG4gKGxldFxyXG4gIFtyZXMgKHMvY29uZm9ybSA6ZWRuYS5wYXJzZS9zdWJzY29yZSBjb250ZW50KV1cclxuICAoaWZcclxuICAgKD0gcmVzIDpjbG9qdXJlLnNwZWMuYWxwaGEvaW52YWxpZClcclxuICAgKHRocm93XHJcbiAgICAoIz8oOmNsaiBFeGNlcHRpb24uIDpjbGpzIGpzL0Vycm9yLilcclxuICAgICAoZXhwb3VuZC9leHBvdW5kLXN0ciA6ZWRuYS5wYXJzZS9zdWJzY29yZSBjb250ZW50KSkpXHJcbiAgIHJlcykpKVxyXG4ifSB7OnN5bSBub3RlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbm90ZXMgI3tcXGEgXFxiIFxcYyBcXGQgXFxlIFxcZiBcXGd9KVxyXG4ifSB7OnN5bSBvY3RhdmUtb3BlcmF0b3JzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBvY3RhdmUtb3BlcmF0b3JzICN7XFwrIFxcLX0pXHJcbiJ9IHs6c3ltIHBhcnNlLW5vdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm90ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLW5vdGVcclxuIFtub3RlXVxyXG4gKGlmLW5vdFxyXG4gIChrZXl3b3JkPyBub3RlKVxyXG4gIDpjbG9qdXJlLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gIChzL2NvbmZvcm0gOmVkbmEucGFyc2Uvbm90ZS1wYXJ0cyAoc2VxIChuYW1lIG5vdGUpKSkpKVxyXG4ifSksIGNsanMudG9vbHMucmVhZGVyLmltcGwudXRpbHMgKHs6c3ltIHJlYWRlci1jb25kaXRpb25hbCwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwuXG4gIElmIHRydWUsIHNwbGljaW5nPyBpbmRpY2F0ZXMgcmVhZC1jb25kLXNwbGljaW5nLiIsIDphcmdsaXN0cyAoW2Zvcm0gc3BsaWNpbmc/XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWNvbmRpdGlvbmFsXHJcbiBcIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwuXFxuICBJZiB0cnVlLCBzcGxpY2luZz8gaW5kaWNhdGVzIHJlYWQtY29uZC1zcGxpY2luZy5cIlxyXG4gW2Zvcm0gc3BsaWNpbmc/XVxyXG4gKFJlYWRlckNvbmRpdGlvbmFsLiBzcGxpY2luZz8gZm9ybSkpXHJcbiJ9IHs6c3ltIHdoaXRlc3BhY2U/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZSIsIDphcmdsaXN0cyAoW2NoXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2hpdGVzcGFjZT9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZVwiXHJcbiBbY2hdXHJcbiAod2hlbi1ub3QgKG5pbD8gY2gpIChpZiAoaWRlbnRpY2FsPyBjaCBcXCwpIHRydWUgKC50ZXN0IHdzLXJ4IGNoKSkpKVxyXG4ifSB7OnN5bSBjaGFyLWNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2ggYmFzZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYXItY29kZVxyXG4gW2NoIGJhc2VdXHJcbiAobGV0IFtjb2RlIChqcy9wYXJzZUludCBjaCBiYXNlKV0gKGlmIChqcy9pc05hTiBjb2RlKSAtMSBjb2RlKSkpXHJcbiJ9IHs6c3ltIGxhc3QtaWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGxhc3QtaWQgKGF0b20gMCkpXHJcbiJ9IHs6c3ltIGNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gY2hhciBbeF0gKHdoZW4tbm90IChuaWw/IHgpIChjbGpzLmNvcmUvY2hhciB4KSkpXHJcbiJ9IHs6c3ltIG51bWVyaWM/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgbnVtZXJpYyIsIDphcmdsaXN0cyAoW2NoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtZXJpYz9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgbnVtZXJpY1wiXHJcbiBbY2hdXHJcbiAod2hlbi1ub3QgKG5pbD8gY2gpIChnc3RyaW5nL2lzTnVtZXJpYyBjaCkpKVxyXG4ifSB7OnN5bSBzZWNvbmQnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW1thIGJdXSl9LCA6c291cmNlICIoZGVmbiBzZWNvbmQnIFtbYSBiXV0gKHdoZW4tbm90IGEgYikpXHJcbiJ9IHs6c3ltIGRlc3VnYXItbWV0YSwgOm1ldGEgezpkb2MgIlJlc29sdmVzIHN5bnRhY3RpY2FsIHN1Z2FyIGluIG1ldGFkYXRhIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc3VnYXItbWV0YVxyXG4gXCJSZXNvbHZlcyBzeW50YWN0aWNhbCBzdWdhciBpbiBtZXRhZGF0YVwiXHJcbiBbZl1cclxuIChjb25kXHJcbiAgKGtleXdvcmQ/IGYpXHJcbiAge2YgdHJ1ZX1cclxuICAoc3ltYm9sPyBmKVxyXG4gIHs6dGFnIGZ9XHJcbiAgKHN0cmluZz8gZilcclxuICB7OnRhZyBmfVxyXG4gIDplbHNlXHJcbiAgZikpXHJcbiJ9IHs6c3ltIG5leHQtaWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBuZXh0LWlkIFtdIChzd2FwISBsYXN0LWlkIGluYykpXHJcbiJ9IHs6c3ltIGV4LWluZm8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmbiBleC1pbmZvPyBbZXhdIChpbnN0YW5jZT8gY2xqcy5jb3JlLkV4Y2VwdGlvbkluZm8gZXgpKVxyXG4ifSB7OnN5bSByZWFkZXItY29uZGl0aW9uYWw/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItY29uZGl0aW9uYWw/XHJcbiBcIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbFwiXHJcbiBbdmFsdWVdXHJcbiAoaW5zdGFuY2U/IFJlYWRlckNvbmRpdGlvbmFsIHZhbHVlKSlcclxuIn0gezpzeW0gbmV3bGluZT8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZSIsIDphcmdsaXN0cyAoW2NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZXdsaW5lP1xyXG4gXCJDaGVja3Mgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVwiXHJcbiBbY11cclxuIChvciAoaWRlbnRpY2FsPyBcXG5ld2xpbmUgYykgKGlkZW50aWNhbD8gXCJcXG5cIiBjKSAobmlsPyBjKSkpXHJcbiJ9IHs6c3ltIG5hbWVzcGFjZS1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zIGtleXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYW1lc3BhY2Uta2V5c1xyXG4gW25zIGtleXNdXHJcbiAoZm9yXHJcbiAgW2tleSBrZXlzXVxyXG4gIChpZlxyXG4gICAob3IgKHN5bWJvbD8ga2V5KSAoa2V5d29yZD8ga2V5KSlcclxuICAgKGxldFxyXG4gICAgW1trZXktbnMga2V5LW5hbWVdXHJcbiAgICAgKChqdXh0IG5hbWVzcGFjZSBuYW1lKSBrZXkpXHJcbiAgICAgLT5rZXlcclxuICAgICAoaWYgKHN5bWJvbD8ga2V5KSBzeW1ib2wga2V5d29yZCldXHJcbiAgICAoY29uZFxyXG4gICAgIChuaWw/IGtleS1ucylcclxuICAgICAoLT5rZXkgbnMga2V5LW5hbWUpXHJcbiAgICAgKD0gXCJfXCIga2V5LW5zKVxyXG4gICAgICgtPmtleSBrZXktbmFtZSlcclxuICAgICA6ZWxzZVxyXG4gICAgIGtleSkpXHJcbiAgIGtleSkpKVxyXG4ifSB7OnN5bSB3cy1yeCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgd3MtcnggI1wiW1xcc11cIilcclxuIn0pLCBjbGpzLnRhZ2dlZC1saXRlcmFscyAoezpzeW0gcmVhZC1xdWV1ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1xdWV1ZVxyXG4gW2Zvcm1dXHJcbiAod2hlbi1ub3RcclxuICAodmVjdG9yPyBmb3JtKVxyXG4gICh0aHJvd1xyXG4gICAjPyg6Y2xqIChSdW50aW1lRXhjZXB0aW9uLiBcIlF1ZXVlIGxpdGVyYWwgZXhwZWN0cyBhIHZlY3RvciBmb3IgaXRzIGVsZW1lbnRzLlwiKSA6Y2xqcyAoanMvRXJyb3IuIFwiUXVldWUgbGl0ZXJhbCBleHBlY3RzIGEgdmVjdG9yIGZvciBpdHMgZWxlbWVudHMuXCIpKSkpXHJcbiAobGlzdCAnY2xqcy5jb3JlL2ludG8gJ2NsanMuY29yZS5QZXJzaXN0ZW50UXVldWUuRU1QVFkgZm9ybSkpXHJcbiJ9IHs6c3ltIHZhbGlkLWpzLWxpdGVyYWwta2V5PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFsaWQtanMtbGl0ZXJhbC1rZXk/XHJcbiBba11cclxuIChvciAoc3RyaW5nPyBrKSAoYW5kIChrZXl3b3JkPyBrKSAobmlsPyAobmFtZXNwYWNlIGspKSkpKVxyXG4ifSB7OnN5bSByZWFkLWpzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLWpzXHJcbiBbZm9ybV1cclxuICh3aGVuLW5vdFxyXG4gIChvciAodmVjdG9yPyBmb3JtKSAobWFwPyBmb3JtKSlcclxuICAodGhyb3dcclxuICAgIz8oOmNsaiAoUnVudGltZUV4Y2VwdGlvbi4gXCJKYXZhU2NyaXB0IGxpdGVyYWwgbXVzdCB1c2UgbWFwIG9yIHZlY3RvciBub3RhdGlvblwiKSA6Y2xqcyAoanMvRXJyb3IuIFwiSmF2YVNjcmlwdCBsaXRlcmFsIG11c3QgdXNlIG1hcCBvciB2ZWN0b3Igbm90YXRpb25cIikpKSlcclxuICh3aGVuLW5vdFxyXG4gIChvciAobm90IChtYXA/IGZvcm0pKSAoZXZlcnk/IHZhbGlkLWpzLWxpdGVyYWwta2V5PyAoa2V5cyBmb3JtKSkpXHJcbiAgKHRocm93XHJcbiAgICM/KDpjbGogKFJ1bnRpbWVFeGNlcHRpb24uIFwiSmF2YVNjcmlwdCBsaXRlcmFsIGtleXMgbXVzdCBiZSBzdHJpbmdzIG9yIHVucXVhbGlmaWVkIGtleXdvcmRzXCIpIDpjbGpzIChqcy9FcnJvci4gXCJKYXZhU2NyaXB0IGxpdGVyYWwga2V5cyBtdXN0IGJlIHN0cmluZ3Mgb3IgdW5xdWFsaWZpZWQga2V5d29yZHNcIikpKSlcclxuIChKU1ZhbHVlLiBmb3JtKSlcclxuIn0gezpzeW0gKmNsanMtZGF0YS1yZWFkZXJzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpjbGpzLWRhdGEtcmVhZGVycypcclxuIChtZXJnZVxyXG4gICM/KDpjbGogKmRhdGEtcmVhZGVycyopXHJcbiAgeydxdWV1ZSByZWFkLXF1ZXVlLCAndXVpZCByZWFkLXV1aWQsICdpbnN0IHJlYWQtaW5zdCwgJ2pzIHJlYWQtanN9KSlcclxuIn0pLCBjbGpzLmFuYWx5emVyICh7OnN5bSB0eXBlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHR5cGU/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgdF1cclxuICh3aGVuXHJcbiAgKGFuZCAoc29tZT8gdCkgKHN5bWJvbD8gdCkpXHJcbiAgKGxldFxyXG4gICBbdmFyIChyZXNvbHZlLXZhciBlbnYgdCldXHJcbiAgIChpZi1zb21lXHJcbiAgICBbdHlwZSAoOnR5cGUgdmFyKV1cclxuICAgIHR5cGVcclxuICAgIChpZi1zb21lXHJcbiAgICAgW3R5cGUgKC0+IHZhciA6aW5mbyA6dHlwZSldXHJcbiAgICAgdHlwZVxyXG4gICAgIChpZi1zb21lXHJcbiAgICAgIFtwcm90byAoOnByb3RvY29sLXN5bWJvbCB2YXIpXVxyXG4gICAgICBwcm90b1xyXG4gICAgICAoZ2V0ICcje2NsanMuY29yZS9QZXJzaXN0ZW50SGFzaE1hcCBjbGpzLmNvcmUvTGlzdH0gdCkpKSkpKSlcclxuIn0gezpzeW0gZ2V0LW5hbWVzcGFjZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1trZXldIFtjZW52IGtleV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1uYW1lc3BhY2VcclxuIChba2V5XSAoZ2V0LW5hbWVzcGFjZSBlbnYvKmNvbXBpbGVyKiBrZXkpKVxyXG4gKFtjZW52IGtleV1cclxuICAoaWYtc29tZVxyXG4gICBbbnMgKGdldC1pbiBAY2VudiBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBrZXldKV1cclxuICAgbnNcclxuICAgKHdoZW4gKD0gJ2NsanMudXNlciBrZXkpIHs6bmFtZSAnY2xqcy51c2VyfSkpKSlcclxuIn0gezpzeW0gZWxpZGUtcmVhZGVyLW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsaWRlLXJlYWRlci1tZXRhXHJcbiBbbV1cclxuIChkaXNzb2MgbSA6ZmlsZSA6bGluZSA6Y29sdW1uIDplbmQtY29sdW1uIDplbmQtbGluZSA6c291cmNlKSlcclxuIn0gezpzeW0gbWlzc2luZy1yZW5hbWU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bSBjZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy1yZW5hbWU/XHJcbiBbc3ltIGNlbnZdXHJcbiAobGV0XHJcbiAgW2xpYiAoc3ltYm9sIChuYW1lc3BhY2Ugc3ltKSkgc3ltIChzeW1ib2wgKG5hbWUgc3ltKSldXHJcbiAgKG1pc3NpbmctdXNlPyBsaWIgc3ltIGNlbnYpKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1pbnZva2VhYmxlLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zIGN1cnJlbnQtbnMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1pbnZva2VhYmxlLW5zXHJcbiBbbnMgY3VycmVudC1ucyBlbnZdXHJcbiAobGV0XHJcbiAgW25zIChyZXNvbHZlLW5zLWFsaWFzIGVudiBucykgbW9kdWxlLXR5cGUgKG5zLT5tb2R1bGUtdHlwZSBucyldXHJcbiAgKGNhc2VcclxuICAgbW9kdWxlLXR5cGVcclxuICAgOmpzXHJcbiAgIHs6bmFtZVxyXG4gICAgKHN5bWJvbFxyXG4gICAgIChvclxyXG4gICAgICAoZ2V0cyBAZW52Lypjb21waWxlciogOmpzLW1vZHVsZS1pbmRleCBucyA6bmFtZSlcclxuICAgICAgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zKSkpLFxyXG4gICAgOm9wIDpqcy12YXIsXHJcbiAgICA6bnMgJ2pzfVxyXG4gICA6bm9kZVxyXG4gICB7Om5hbWVcclxuICAgIChzeW1ib2xcclxuICAgICAoc3RyIGN1cnJlbnQtbnMpXHJcbiAgICAgKG11bmdlLW5vZGUtbGliIChyZXNvbHZlLW5zLWFsaWFzIGVudiBucykpKSxcclxuICAgIDpvcCA6anMtdmFyLFxyXG4gICAgOm5zIGN1cnJlbnQtbnN9XHJcbiAgIDpnbG9iYWxcclxuICAgezpuYW1lXHJcbiAgICAoc3ltYm9sXHJcbiAgICAgKHN0ciBjdXJyZW50LW5zKVxyXG4gICAgIChtdW5nZS1nbG9iYWwtZXhwb3J0IChyZXNvbHZlLW5zLWFsaWFzIGVudiBucykpKSxcclxuICAgIDpvcCA6anMtdmFyLFxyXG4gICAgOm5zIGN1cnJlbnQtbnN9KSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VuY2wtZW52IFtfIGJpbmRpbmdzICYgZXhwcnMgOmFzIGZvcm1dIGlzLWxvb3Agd2lkZW5lZC10YWdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXRcclxuIFtlbmNsLWVudiBbXyBiaW5kaW5ncyAmIGV4cHJzIDphcyBmb3JtXSBpcy1sb29wIHdpZGVuZWQtdGFnc11cclxuICh3aGVuLW5vdFxyXG4gIChhbmQgKHZlY3Rvcj8gYmluZGluZ3MpIChldmVuPyAoY291bnQgYmluZGluZ3MpKSlcclxuICAodGhyb3dcclxuICAgKGVycm9yXHJcbiAgICBlbmNsLWVudlxyXG4gICAgXCJiaW5kaW5ncyBtdXN0IGJlIHZlY3RvciBvZiBldmVuIG51bWJlciBvZiBlbGVtZW50c1wiKSkpXHJcbiAobGV0XHJcbiAgW2NvbnRleHRcclxuICAgKDpjb250ZXh0IGVuY2wtZW52KVxyXG4gICBvcFxyXG4gICAoaWYgKHRydWU/IGlzLWxvb3ApIDpsb29wIDpsZXQpXHJcbiAgIGJpbmRpbmdzXHJcbiAgIChpZlxyXG4gICAgd2lkZW5lZC10YWdzXHJcbiAgICAodmVjXHJcbiAgICAgKG1hcGNhdFxyXG4gICAgICAoZm5cclxuICAgICAgIFtbbmFtZSBpbml0XSB3aWRlbmVkLXRhZ11cclxuICAgICAgIFsodmFyeS1tZXRhIG5hbWUgYXNzb2MgOnRhZyB3aWRlbmVkLXRhZykgaW5pdF0pXHJcbiAgICAgIChwYXJ0aXRpb24gMiBiaW5kaW5ncylcclxuICAgICAgd2lkZW5lZC10YWdzKSlcclxuICAgIGJpbmRpbmdzKVxyXG4gICBbYmVzIGVudl1cclxuICAgKC0+XHJcbiAgICBlbmNsLWVudlxyXG4gICAgKGNvbmQtPiAodHJ1ZT8gaXMtbG9vcCkgKGFzc29jIDppbi1sb29wIHRydWUpKVxyXG4gICAgKGFuYWx5emUtbGV0LWJpbmRpbmdzIGJpbmRpbmdzIG9wKSlcclxuICAgcmVjdXItZnJhbWVcclxuICAgKHdoZW5cclxuICAgICh0cnVlPyBpcy1sb29wKVxyXG4gICAgezpwYXJhbXMgYmVzLCA6ZmxhZyAoYXRvbSBuaWwpLCA6dGFncyAoYXRvbSAobWFwdiA6dGFnIGJlcykpfSlcclxuICAgcmVjdXItZnJhbWVzXHJcbiAgIChpZiByZWN1ci1mcmFtZSAoY29ucyByZWN1ci1mcmFtZSAqcmVjdXItZnJhbWVzKikgKnJlY3VyLWZyYW1lcyopXHJcbiAgIGxvb3AtbGV0c1xyXG4gICAoY29uZFxyXG4gICAgKHRydWU/IGlzLWxvb3ApXHJcbiAgICAqbG9vcC1sZXRzKlxyXG4gICAgKHNvbWU/ICpsb29wLWxldHMqKVxyXG4gICAgKGNvbnMgezpwYXJhbXMgYmVzfSAqbG9vcC1sZXRzKikpXHJcbiAgIHdhcm4tYWNjXHJcbiAgICh3aGVuIChhbmQgaXMtbG9vcCAobm90IHdpZGVuZWQtdGFncykpIChhdG9tIFtdKSlcclxuICAgZXhwclxyXG4gICAoaWZcclxuICAgIHdhcm4tYWNjXHJcbiAgICAod2l0aC13YXJuaW5nLWhhbmRsZXJzXHJcbiAgICAgWyhhY2N1bXVsYXRpbmctd2FybmluZy1oYW5kbGVyIHdhcm4tYWNjKV1cclxuICAgICAoYW5hbHl6ZS1sZXQtYm9keSBlbnYgY29udGV4dCBleHBycyByZWN1ci1mcmFtZXMgbG9vcC1sZXRzKSlcclxuICAgIChhbmFseXplLWxldC1ib2R5IGVudiBjb250ZXh0IGV4cHJzIHJlY3VyLWZyYW1lcyBsb29wLWxldHMpKVxyXG4gICBjaGlsZHJlblxyXG4gICBbOmJpbmRpbmdzIDpib2R5XVxyXG4gICBuaWwtPmFueVxyXG4gICAoZm5pbCBpZGVudGl0eSAnYW55KV1cclxuICAoaWZcclxuICAgKGFuZFxyXG4gICAgaXMtbG9vcFxyXG4gICAgKG5vdCB3aWRlbmVkLXRhZ3MpXHJcbiAgICAobm90PVxyXG4gICAgIChtYXB2IG5pbC0+YW55IEAoOnRhZ3MgcmVjdXItZnJhbWUpKVxyXG4gICAgIChtYXB2IChjb21wIG5pbC0+YW55IDp0YWcpIGJlcykpKVxyXG4gICAocmVjdXIgZW5jbC1lbnYgZm9ybSBpcy1sb29wIEAoOnRhZ3MgcmVjdXItZnJhbWUpKVxyXG4gICAoZG9cclxuICAgICh3aGVuIHdhcm4tYWNjIChyZXBsYXktYWNjdW11bGF0ZWQtd2FybmluZ3Mgd2Fybi1hY2MpKVxyXG4gICAgezpvcCBvcCxcclxuICAgICA6ZW52IGVuY2wtZW52LFxyXG4gICAgIDpiaW5kaW5ncyBiZXMsXHJcbiAgICAgOmJvZHkgKGFzc29jIGV4cHIgOmJvZHk/IHRydWUpLFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOmNoaWxkcmVuIGNoaWxkcmVufSkpKSlcclxuIn0gezpzeW0gdmFyLW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbdmFyXSBbdmFyIGV4cHItZW52XV19LCA6c291cmNlICIoZGVmblxyXG4gdmFyLW1ldGFcclxuIChbdmFyXSAodmFyLW1ldGEgdmFyIG5pbCkpXHJcbiAoW3ZhciBleHByLWVudl1cclxuICAobGV0XHJcbiAgIFtzeW1cclxuICAgICg6bmFtZSB2YXIpXHJcbiAgICBrc1xyXG4gICAgWzpucyA6ZG9jIDpmaWxlIDpsaW5lIDpjb2x1bW5dXHJcbiAgICBtXHJcbiAgICAobWVyZ2VcclxuICAgICAobGV0XHJcbiAgICAgIFt1c2VyLW1ldGEgKDptZXRhIHZhcikgdWtzIChrZXlzIHVzZXItbWV0YSldXHJcbiAgICAgICh6aXBtYXBcclxuICAgICAgIHVrc1xyXG4gICAgICAgKG1hcFxyXG4gICAgICAgIChmbiogW3AxX180ODU5NiNdIChsaXN0ICdxdW90ZSAoZ2V0IHVzZXItbWV0YSBwMV9fNDg1OTYjKSkpXHJcbiAgICAgICAgdWtzKSkpXHJcbiAgICAgKGFzc29jXHJcbiAgICAgICh6aXBtYXBcclxuICAgICAgIGtzXHJcbiAgICAgICAobWFwIChmbiogW3AxX180ODU5NyNdIChsaXN0ICdxdW90ZSAoZ2V0IHZhciBwMV9fNDg1OTcjKSkpIGtzKSlcclxuICAgICAgOm5hbWVcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ3F1b3RlKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKHN5bWJvbCAobmFtZSAoOm5hbWUgdmFyKSkpKSkpKVxyXG4gICAgICA6dGVzdFxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL3doZW4pXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBzeW0pXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJy4tY2xqcyRsYW5nJHRlc3QpXHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3Qgc3ltKSkpKSkpKSlcclxuICAgICAgOmFyZ2xpc3RzXHJcbiAgICAgIChsZXRcclxuICAgICAgIFthcmdsaXN0c1xyXG4gICAgICAgICg6YXJnbGlzdHMgdmFyKVxyXG4gICAgICAgIGFyZ2xpc3RzJ1xyXG4gICAgICAgIChpZiAoPSAncXVvdGUgKGZpcnN0IGFyZ2xpc3RzKSkgKHNlY29uZCBhcmdsaXN0cykgYXJnbGlzdHMpXVxyXG4gICAgICAgKGxpc3RcclxuICAgICAgICAncXVvdGVcclxuICAgICAgICAoZG9hbGwgKG1hcCB3aXRoLW1ldGEgYXJnbGlzdHMnICg6YXJnbGlzdHMtbWV0YSB2YXIpKSkpKSkpXVxyXG4gICAoaWYgZXhwci1lbnYgKGFuYWx5emUgZXhwci1lbnYgbSkgbSkpKSlcclxuIn0gezpzeW0gZGVzdWdhci1ucy1zcGVjcywgOm1ldGEgezpkb2MgIkdpdmVuIGFuIG9yaWdpbmFsIHNldCBvZiBucyBzcGVjcyBkZXN1Z2FyIDppbmNsdWRlLW1hY3JvcyBhbmQgOnJlZmVyLW1hY3Jvc1xuICAgdXNhZ2UgaW50byBvbmx5IHByaW1pdGl2ZSBzcGVjIGZvcm1zIC0gOnVzZSwgOnJlcXVpcmUsIDp1c2UtbWFjcm9zLFxuICAgOnJlcXVpcmUtbWFjcm9zLiBJZiBhIGxpYnJhcnkgaW5jbHVkZXMgYSBtYWNybyBmaWxlIG9mIHdpdGggdGhlIHNhbWUgbmFtZVxuICAgYXMgdGhlIG5hbWVzcGFjZSB3aWxsIGFsc28gYmUgZGVzdWdhcmVkLiIsIDphcmdsaXN0cyAoW2FyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXN1Z2FyLW5zLXNwZWNzXHJcbiBcIkdpdmVuIGFuIG9yaWdpbmFsIHNldCBvZiBucyBzcGVjcyBkZXN1Z2FyIDppbmNsdWRlLW1hY3JvcyBhbmQgOnJlZmVyLW1hY3Jvc1xcbiAgIHVzYWdlIGludG8gb25seSBwcmltaXRpdmUgc3BlYyBmb3JtcyAtIDp1c2UsIDpyZXF1aXJlLCA6dXNlLW1hY3JvcyxcXG4gICA6cmVxdWlyZS1tYWNyb3MuIElmIGEgbGlicmFyeSBpbmNsdWRlcyBhIG1hY3JvIGZpbGUgb2Ygd2l0aCB0aGUgc2FtZSBuYW1lXFxuICAgYXMgdGhlIG5hbWVzcGFjZSB3aWxsIGFsc28gYmUgZGVzdWdhcmVkLlwiXHJcbiBbYXJnc11cclxuIChsZXRcclxuICBbezprZXlzIFtyZXF1aXJlXSwgOmFzIGluZGV4ZWR9XHJcbiAgICgtPj4gYXJncyAobWFwIChmbiBbW2sgJiBzcGVjc11dIFtrIChpbnRvIFtdIHNwZWNzKV0pKSAoaW50byB7fSkpXHJcbiAgIHN1Z2FyLWtleXNcclxuICAgI3s6aW5jbHVkZS1tYWNyb3MgOnJlZmVyLW1hY3Jvc31cclxuICAgcmVtb3ZlLWZyb20tc3BlY1xyXG4gICAoZm5cclxuICAgIFtwcmVkIHNwZWNdXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKGFuZCAoc2VxdWVudGlhbD8gc3BlYykgKHNvbWUgcHJlZCBzcGVjKSlcclxuICAgICBzcGVjXHJcbiAgICAgKGxldFxyXG4gICAgICBbW2wgcl0gKHNwbGl0LXdpdGggKGNvbXBsZW1lbnQgcHJlZCkgc3BlYyldXHJcbiAgICAgIChyZWN1ciBwcmVkIChjb25jYXQgbCAoZHJvcCAyIHIpKSkpKSlcclxuICAgcmVwbGFjZS1yZWZlci1tYWNyb3NcclxuICAgKGZuXHJcbiAgICBbc3BlY11cclxuICAgIChpZi1ub3RcclxuICAgICAoc2VxdWVudGlhbD8gc3BlYylcclxuICAgICBzcGVjXHJcbiAgICAgKG1hcCAoZm4gW3hdIChpZiAoPSB4IDpyZWZlci1tYWNyb3MpIDpyZWZlciB4KSkgc3BlYykpKVxyXG4gICByZWxvYWQtc3BlYz9cclxuICAgKGZuKiBbcDFfXzQ4NjIxI10gKCN7OnJlbG9hZCA6cmVsb2FkLWFsbH0gcDFfXzQ4NjIxIykpXHJcbiAgIHRvLW1hY3JvLXNwZWNzXHJcbiAgIChmblxyXG4gICAgW3NwZWNzXVxyXG4gICAgKC0+PlxyXG4gICAgIHNwZWNzXHJcbiAgICAgKGZpbHRlclxyXG4gICAgICAoZm5cclxuICAgICAgIFt4XVxyXG4gICAgICAgKG9yXHJcbiAgICAgICAgKGFuZCAoc2VxdWVudGlhbD8geCkgKHNvbWUgc3VnYXIta2V5cyB4KSlcclxuICAgICAgICAocmVsb2FkLXNwZWM/IHgpXHJcbiAgICAgICAgKG1hY3JvLWF1dG9sb2FkLW5zPyB4KSkpKVxyXG4gICAgIChtYXBcclxuICAgICAgKGZuXHJcbiAgICAgICBbeF1cclxuICAgICAgIChpZi1ub3RcclxuICAgICAgICAocmVsb2FkLXNwZWM/IHgpXHJcbiAgICAgICAgKC0+PlxyXG4gICAgICAgICB4XHJcbiAgICAgICAgIChyZW1vdmUtZnJvbS1zcGVjICN7OmluY2x1ZGUtbWFjcm9zfSlcclxuICAgICAgICAgKHJlbW92ZS1mcm9tLXNwZWMgI3s6cmVmZXJ9KVxyXG4gICAgICAgICAocmVtb3ZlLWZyb20tc3BlYyAjezpyZW5hbWV9KVxyXG4gICAgICAgICAocmVwbGFjZS1yZWZlci1tYWNyb3MpKVxyXG4gICAgICAgIHgpKSkpKVxyXG4gICByZW1vdmUtc3VnYXJcclxuICAgKHBhcnRpYWwgcmVtb3ZlLWZyb20tc3BlYyBzdWdhci1rZXlzKV1cclxuICAoaWYtc29tZVxyXG4gICBbcmVxdWlyZS1zcGVjcyAoc2VxICh0by1tYWNyby1zcGVjcyByZXF1aXJlKSldXHJcbiAgIChtYXBcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChpZi1ub3RcclxuICAgICAgKHJlbG9hZC1zcGVjPyB4KVxyXG4gICAgICAobGV0IFtbayB2XSB4XSAoY29ucyBrIChtYXAgcmVtb3ZlLXN1Z2FyIHYpKSlcclxuICAgICAgeCkpXHJcbiAgICAodXBkYXRlLWluIGluZGV4ZWQgWzpyZXF1aXJlLW1hY3Jvc10gKGZuaWwgaW50byBbXSkgcmVxdWlyZS1zcGVjcykpXHJcbiAgIGFyZ3MpKSlcclxuIn0gezpzeW0ganMtdGFnPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtdGFnP1xyXG4gW3hdXHJcbiAoYW5kIChzeW1ib2w/IHgpIChvciAoPSAnanMgeCkgKD0gXCJqc1wiIChuYW1lc3BhY2UgeCkpKSkpXHJcbiJ9IHs6c3ltIGVuc3VyZS1kZWZzLCA6bWV0YSB7OmRvYyAiRW5zdXJlcyB0aGF0IGEgbm9uLW5pbCBkZWZzIG1hcCBleGlzdHMgaW4gdGhlIGNvbXBpbGVyIHN0YXRlIGZvciBhIGdpdmVuXG4gIG5zLiAoQSBub24tbmlsIGRlZnMgbWFwIHNpZ25pZmllcyB0aGF0IHRoZSBuYW1lc3BhY2UgaGFzIGJlZW4gYW5hbHl6ZWQuKSIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5zdXJlLWRlZnNcclxuIFwiRW5zdXJlcyB0aGF0IGEgbm9uLW5pbCBkZWZzIG1hcCBleGlzdHMgaW4gdGhlIGNvbXBpbGVyIHN0YXRlIGZvciBhIGdpdmVuXFxuICBucy4gKEEgbm9uLW5pbCBkZWZzIG1hcCBzaWduaWZpZXMgdGhhdCB0aGUgbmFtZXNwYWNlIGhhcyBiZWVuIGFuYWx5emVkLilcIlxyXG4gW25zXVxyXG4gKHN3YXAhXHJcbiAgZW52Lypjb21waWxlcipcclxuICB1cGRhdGUtaW5cclxuICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6ZGVmc11cclxuICAoZm4qIFtwMV9fNDg2NDYjXSAob3IgcDFfXzQ4NjQ2IyB7fSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLW1hcFxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFtleHByLWVudlxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBrc1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgIChtYXB2XHJcbiAgICAgKGZuKiBbcDFfXzQ4NjM1I10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjM1IykpXHJcbiAgICAgKGtleXMgZm9ybSkpKVxyXG4gICB2c1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgIChtYXB2XHJcbiAgICAgKGZuKiBbcDFfXzQ4NjM2I10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjM2IykpXHJcbiAgICAgKHZhbHMgZm9ybSkpKV1cclxuICAoYW5hbHl6ZS13cmFwLW1ldGFcclxuICAgezpvcCA6bWFwLFxyXG4gICAgOmVudiBlbnYsXHJcbiAgICA6Zm9ybSBmb3JtLFxyXG4gICAgOmtleXMga3MsXHJcbiAgICA6dmFscyB2cyxcclxuICAgIDpjaGlsZHJlbiBbOmtleXMgOnZhbHNdLFxyXG4gICAgOnRhZyAnY2xqcy5jb3JlL0lNYXB9KSkpXHJcbiJ9IHs6c3ltIE5VTUVSSUNfU0VULCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBOVU1FUklDX1NFVCAnI3thbnkgbG9uZyBkb3VibGUgbnVtYmVyfSlcclxuIn0gezpzeW0gYW5hbHl6ZS1yZWNvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXJlY29yZFxyXG4gW2VudiB4XVxyXG4gKGxldFxyXG4gIFtfaXRlbXNfXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1ciAoYW5hbHl6ZSAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKSAoaW50byB7fSB4KSkpXHJcbiAgIFtucyBuYW1lXVxyXG4gICAocmVjb3JkLW5zK25hbWUgeCldXHJcbiAgezpvcCA6Y29uc3QsXHJcbiAgIDp2YWwgeCxcclxuICAgOmVudiBlbnYsXHJcbiAgIDpmb3JtIHgsXHJcbiAgIDp0YWcgKHN5bWJvbCAoc3RyIG5zKSAoc3RyIG5hbWUpKX0pKVxyXG4ifSB7OnN5bSBhbmFseXplLXNlcSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3AgZW52IGZvcm0gbmFtZSBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zZXEqXHJcbiBbb3AgZW52IGZvcm0gbmFtZSBvcHRzXVxyXG4gKGlmXHJcbiAgKGNvbnRhaW5zPyBzcGVjaWFscyBvcClcclxuICAocGFyc2Ugb3AgZW52IGZvcm0gbmFtZSBvcHRzKVxyXG4gIChwYXJzZS1pbnZva2UgZW52IGZvcm0pKSlcclxuIn0gezpzeW0gY29uc3RhbnRzLW5zLXN5bSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGNvbnN0YW50cy1ucy1zeW1cclxuIFwiVGhlIG5hbWVzcGFjZSBvZiB0aGUgY29uc3RhbnRzIHRhYmxlIGFzIGEgc3ltYm9sLlwiXHJcbiAnY2xqcy5jb3JlLmNvbnN0YW50cylcclxuIn0gezpzeW0gcmVzb2x2ZS1hbGlhcywgOm1ldGEgezpkb2MgIlRha2VzIGEgbmFtZXNwYWNlIGFuZCBhbiB1bnF1YWxpZmllZCBzeW1ib2wgYW5kIHBvdGVudGlhbGx5IHJldHVybnMgYSBuZXdcbiAgc3ltYm9sIHRvIGJlIHVzZWQgaW4gbGlldSBvZiB0aGUgb3JpZ2luYWwuIiwgOmFyZ2xpc3RzIChbbnMgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1hbGlhc1xyXG4gXCJUYWtlcyBhIG5hbWVzcGFjZSBhbmQgYW4gdW5xdWFsaWZpZWQgc3ltYm9sIGFuZCBwb3RlbnRpYWxseSByZXR1cm5zIGEgbmV3XFxuICBzeW1ib2wgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIHRoZSBvcmlnaW5hbC5cIlxyXG4gW25zIHN5bV1cclxuIChpZlxyXG4gIChhbmQgKD0gJ2NsanMuY29yZSBucykgKCcje2FnZXQgYXNldH0gc3ltKSAoY2hlY2tlZC1hcnJheXMpKVxyXG4gIChnZXQtaW5cclxuICAgJ3s6d2FybiB7YWdldCBjaGVja2VkLWFnZXQsIGFzZXQgY2hlY2tlZC1hc2V0fSxcclxuICAgICA6ZXJyb3Ige2FnZXQgY2hlY2tlZC1hZ2V0JywgYXNldCBjaGVja2VkLWFzZXQnfX1cclxuICAgWyhjaGVja2VkLWFycmF5cykgc3ltXSlcclxuICBzeW0pKVxyXG4ifSB7OnN5bSAqY2xqcy1kZXAtc2V0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtZGVwLXNldCogKHdpdGgtbWV0YSAje30gezpkZXAtcGF0aCBbXX0pKVxyXG4ifSB7OnN5bSByZXNvbHZlLXZhciwgOm1ldGEgezpkb2MgIlJlc29sdmUgYSB2YXIuIEFjY2VwdHMgYSBzaWRlLWVmZmVjdGluZyBjb25maXJtIGZuIGZvciBwcm9kdWNpbmdcbiAgIHdhcm5pbmdzIGFib3V0IHVucmVzb2x2ZWQgdmFycy4iLCA6YXJnbGlzdHMgW1tlbnYgc3ltXSBbZW52IHN5bSBjb25maXJtXSBbZW52IHN5bSBjb25maXJtIGRlZmF1bHQ/XV19LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS12YXJcclxuIFwiUmVzb2x2ZSBhIHZhci4gQWNjZXB0cyBhIHNpZGUtZWZmZWN0aW5nIGNvbmZpcm0gZm4gZm9yIHByb2R1Y2luZ1xcbiAgIHdhcm5pbmdzIGFib3V0IHVucmVzb2x2ZWQgdmFycy5cIlxyXG4gKFtlbnYgc3ltXSAocmVzb2x2ZS12YXIgZW52IHN5bSBuaWwpKVxyXG4gKFtlbnYgc3ltIGNvbmZpcm1dIChyZXNvbHZlLXZhciBlbnYgc3ltIGNvbmZpcm0gdHJ1ZSkpXHJcbiAoW2VudiBzeW0gY29uZmlybSBkZWZhdWx0P11cclxuICAobGV0XHJcbiAgIFtsb2NhbHMgKDpsb2NhbHMgZW52KV1cclxuICAgKGlmXHJcbiAgICAjPyg6Y2xqICg9IFwianNcIiAobmFtZXNwYWNlIHN5bSkpIDpjbGpzIChpZGVudGljYWw/IFwianNcIiAobmFtZXNwYWNlIHN5bSkpKVxyXG4gICAgKGxldFxyXG4gICAgIFtzeW1uXHJcbiAgICAgICgtPiBzeW0gbmFtZSBzeW1ib2wpXHJcbiAgICAgIHNoYWRvd2VkLWJ5LWxvY2FsXHJcbiAgICAgIChoYW5kbGUtc3ltYm9sLWxvY2FsIHN5bW4gKGdldCBsb2NhbHMgc3ltbikpXVxyXG4gICAgIChjb25kXHJcbiAgICAgIChzb21lPyBzaGFkb3dlZC1ieS1sb2NhbClcclxuICAgICAgKGRvXHJcbiAgICAgICAod2FybmluZyA6anMtc2hhZG93ZWQtYnktbG9jYWwgZW52IHs6bmFtZSBzeW19KVxyXG4gICAgICAgKGFzc29jIHNoYWRvd2VkLWJ5LWxvY2FsIDpvcCA6bG9jYWwpKVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcHJlICgtPj4gKHN0cmluZy9zcGxpdCAobmFtZSBzeW0pICNcIlxcLlwiKSAobWFwIHN5bWJvbCkgdmVjKV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgKGFuZFxyXG4gICAgICAgICAobm90IChoYXMtZXh0ZXJuPyBwcmUpKVxyXG4gICAgICAgICAobm90ICgtPiBzeW0gbWV0YSA6Y2xqcy5hbmFseXplci9uby1yZXNvbHZlKSkpXHJcbiAgICAgICAgKHN3YXAhXHJcbiAgICAgICAgIGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIHVwZGF0ZS1pblxyXG4gICAgICAgICAoaW50b1xyXG4gICAgICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKC0+IGVudiA6bnMgOm5hbWUpIDpleHRlcm5zXVxyXG4gICAgICAgICAgcHJlKVxyXG4gICAgICAgICBtZXJnZVxyXG4gICAgICAgICB7fSkpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICB7Om5hbWUgc3ltLFxyXG4gICAgICAgICA6b3AgOmpzLXZhcixcclxuICAgICAgICAgOm5zICdqcyxcclxuICAgICAgICAgOnRhZ1xyXG4gICAgICAgICAod2l0aC1tZXRhXHJcbiAgICAgICAgICAob3IgKGpzLXRhZyBwcmUpICg6dGFnIChtZXRhIHN5bSkpICdqcylcclxuICAgICAgICAgIHs6cHJlZml4IHByZX0pfVxyXG4gICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgICBbcmV0LXRhZyAoanMtdGFnIHByZSA6cmV0LXRhZyldXHJcbiAgICAgICAgIHs6anMtZm4tdmFyIHRydWUsIDpyZXQtdGFnIHJldC10YWd9KSkpKSlcclxuICAgIChsZXRcclxuICAgICBbc1xyXG4gICAgICAoc3RyIHN5bSlcclxuICAgICAgbGJcclxuICAgICAgKGhhbmRsZS1zeW1ib2wtbG9jYWwgc3ltIChnZXQgbG9jYWxzIHN5bSkpXHJcbiAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgKC0+IGVudiA6bnMgOm5hbWUpXVxyXG4gICAgIChjb25kXHJcbiAgICAgIChzb21lPyBsYilcclxuICAgICAgKGFzc29jIGxiIDpvcCA6bG9jYWwpXHJcbiAgICAgIChzb21lPyAobmFtZXNwYWNlIHN5bSkpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtuc1xyXG4gICAgICAgIChuYW1lc3BhY2Ugc3ltKVxyXG4gICAgICAgIG5zXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICM/KDpjbGogKD0gXCJjbG9qdXJlLmNvcmVcIiBucykgOmNsanMgKGlkZW50aWNhbD8gXCJjbG9qdXJlLmNvcmVcIiBucykpXHJcbiAgICAgICAgIFwiY2xqcy5jb3JlXCJcclxuICAgICAgICAgbnMpXHJcbiAgICAgICAgZnVsbC1uc1xyXG4gICAgICAgIChyZXNvbHZlLW5zLWFsaWFzXHJcbiAgICAgICAgIGVudlxyXG4gICAgICAgICBuc1xyXG4gICAgICAgICAob3JcclxuICAgICAgICAgIChhbmRcclxuICAgICAgICAgICAoanMtbW9kdWxlLWV4aXN0cz8gbnMpXHJcbiAgICAgICAgICAgKGdldHMgQGVudi8qY29tcGlsZXIqIDpqcy1tb2R1bGUtaW5kZXggbnMgOm5hbWUpKVxyXG4gICAgICAgICAgKHN5bWJvbCBucykpKV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgKHNvbWU/IGNvbmZpcm0pXHJcbiAgICAgICAgKHdoZW4gKG5vdD0gY3VycmVudC1ucyBmdWxsLW5zKSAoY29uZmlybS1ucyBlbnYgZnVsbC1ucykpXHJcbiAgICAgICAgKGNvbmZpcm0gZW52IGZ1bGwtbnMgKHN5bWJvbCAobmFtZSBzeW0pKSkpXHJcbiAgICAgICAocmVzb2x2ZSogZW52IHN5bSBmdWxsLW5zIGN1cnJlbnQtbnMpKVxyXG4gICAgICAoZG90dGVkLXN5bWJvbD8gc3ltKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbaWR4XHJcbiAgICAgICAgKC5pbmRleE9mIHMgXCIuXCIpXHJcbiAgICAgICAgcHJlZml4XHJcbiAgICAgICAgKHN5bWJvbCAoc3VicyBzIDAgaWR4KSlcclxuICAgICAgICBzdWZmaXhcclxuICAgICAgICAoc3VicyBzIChpbmMgaWR4KSldXHJcbiAgICAgICAoaWYtbGV0XHJcbiAgICAgICAgW3Jlc29sdmVkIChyZXNvbHZlLXZhciBlbnYgcHJlZml4IG5pbCBmYWxzZSldXHJcbiAgICAgICAgKHVwZGF0ZVxyXG4gICAgICAgICByZXNvbHZlZFxyXG4gICAgICAgICA6bmFtZVxyXG4gICAgICAgICAoZm4qIFtwMV9fNDg1OTUjXSAoc3ltYm9sIChzdHIgcDFfXzQ4NTk1IyBcIi5cIiBzdWZmaXgpKSkpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbaWR4XHJcbiAgICAgICAgICAoLmxhc3RJbmRleE9mIHMgXCIuXCIpXHJcbiAgICAgICAgICBwcmVcclxuICAgICAgICAgIChzdWJzIHMgMCBpZHgpXHJcbiAgICAgICAgICBzdWZcclxuICAgICAgICAgIChzdWJzIHMgKGluYyBpZHgpKV1cclxuICAgICAgICAgezpvcCA6dmFyLCA6bmFtZSAoc3ltYm9sIHByZSBzdWYpLCA6bnMgKHN5bWJvbCBwcmUpfSkpKVxyXG4gICAgICAoc29tZT9cclxuICAgICAgIChnZXRzXHJcbiAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICA6dXNlc1xyXG4gICAgICAgIHN5bSkpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtmdWxsLW5zXHJcbiAgICAgICAgKGdldHNcclxuICAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgICA6dXNlc1xyXG4gICAgICAgICBzeW0pXVxyXG4gICAgICAgKHJlc29sdmUqIGVudiBzeW0gZnVsbC1ucyBjdXJyZW50LW5zKSlcclxuICAgICAgKHNvbWU/XHJcbiAgICAgICAoZ2V0c1xyXG4gICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgOnJlbmFtZXNcclxuICAgICAgICBzeW0pKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcXVhbGlmaWVkLXN5bWJvbFxyXG4gICAgICAgIChnZXRzXHJcbiAgICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICAgOnJlbmFtZXNcclxuICAgICAgICAgc3ltKVxyXG4gICAgICAgIGZ1bGwtbnNcclxuICAgICAgICAoc3ltYm9sIChuYW1lc3BhY2UgcXVhbGlmaWVkLXN5bWJvbCkpXHJcbiAgICAgICAgc3ltXHJcbiAgICAgICAgKHN5bWJvbCAobmFtZSBxdWFsaWZpZWQtc3ltYm9sKSldXHJcbiAgICAgICAocmVzb2x2ZSogZW52IHN5bSBmdWxsLW5zIGN1cnJlbnQtbnMpKVxyXG4gICAgICAoc29tZT9cclxuICAgICAgIChnZXRzXHJcbiAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICA6aW1wb3J0c1xyXG4gICAgICAgIHN5bSkpXHJcbiAgICAgIChyZWN1clxyXG4gICAgICAgZW52XHJcbiAgICAgICAoZ2V0c1xyXG4gICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgOmltcG9ydHNcclxuICAgICAgICBzeW0pXHJcbiAgICAgICBjb25maXJtXHJcbiAgICAgICBkZWZhdWx0PylcclxuICAgICAgKHNvbWU/XHJcbiAgICAgICAoZ2V0c1xyXG4gICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgOmRlZnNcclxuICAgICAgICBzeW0pKVxyXG4gICAgICAoZG9cclxuICAgICAgICh3aGVuIChzb21lPyBjb25maXJtKSAoY29uZmlybSBlbnYgY3VycmVudC1ucyBzeW0pKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgKGdldHNcclxuICAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgICA6ZGVmc1xyXG4gICAgICAgICBzeW0pXHJcbiAgICAgICAgezpuYW1lIChzeW1ib2wgKHN0ciBjdXJyZW50LW5zKSAoc3RyIHN5bSkpLFxyXG4gICAgICAgICA6b3AgOnZhcixcclxuICAgICAgICAgOm5zIGN1cnJlbnQtbnN9KSlcclxuICAgICAgKGNvcmUtbmFtZT8gZW52IHN5bSlcclxuICAgICAgKGRvXHJcbiAgICAgICAod2hlbiAoc29tZT8gY29uZmlybSkgKGNvbmZpcm0gZW52ICdjbGpzLmNvcmUgc3ltKSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIChnZXRzXHJcbiAgICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgICdjbGpzLmNvcmVcclxuICAgICAgICAgOmRlZnNcclxuICAgICAgICAgc3ltKVxyXG4gICAgICAgIHs6bmFtZSAoc3ltYm9sIFwiY2xqcy5jb3JlXCIgKHN0ciBzeW0pKSxcclxuICAgICAgICAgOm9wIDp2YXIsXHJcbiAgICAgICAgIDpucyAnY2xqcy5jb3JlfSkpXHJcbiAgICAgIChpbnZva2VhYmxlLW5zPyBzIGVudilcclxuICAgICAgKHJlc29sdmUtaW52b2tlYWJsZS1ucyBzIGN1cnJlbnQtbnMgZW52KVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICAod2hlblxyXG4gICAgICAgZGVmYXVsdD9cclxuICAgICAgICh3aGVuIChzb21lPyBjb25maXJtKSAoY29uZmlybSBlbnYgY3VycmVudC1ucyBzeW0pKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgKGdldHNcclxuICAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgICA6ZGVmc1xyXG4gICAgICAgICBzeW0pXHJcbiAgICAgICAgezpuYW1lIChzeW1ib2wgKHN0ciBjdXJyZW50LW5zKSAoc3RyIHN5bSkpLFxyXG4gICAgICAgICA6b3AgOnZhcixcclxuICAgICAgICAgOm5zIGN1cnJlbnQtbnN9KSkpKSkpKSlcclxuIn0gezpzeW0ganMtc3Rhci1zZWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLXN0YXItc2VnXHJcbiBbc11cclxuIChsZXRcclxuICBbaWR4ICguaW5kZXhPZiBzIFwifntcIildXHJcbiAgKGlmXHJcbiAgICg9PSAtMSBpZHgpXHJcbiAgIChsaXN0IHMpXHJcbiAgIChsZXRcclxuICAgIFtlbmQgKC5pbmRleE9mIHMgXCJ9XCIgaWR4KV1cclxuICAgIChsYXp5LXNlcVxyXG4gICAgIChjb25zIChzdWJzIHMgMCBpZHgpIChqcy1zdGFyLXNlZyAoc3VicyBzIChpbmMgZW5kKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGRlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21vZHVsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/XHJcbiBbbW9kdWxlXVxyXG4gKGxldFxyXG4gIFtnbG9iYWwtZXhwb3J0c1xyXG4gICAoZ2V0LWluXHJcbiAgICBAZW52Lypjb21waWxlcipcclxuICAgIFs6anMtZGVwZW5kZW5jeS1pbmRleCAoc3RyIG1vZHVsZSkgOmdsb2JhbC1leHBvcnRzXSldXHJcbiAgKG9yXHJcbiAgIChjb250YWlucz8gZ2xvYmFsLWV4cG9ydHMgKHN5bWJvbCBtb2R1bGUpKVxyXG4gICAoY29udGFpbnM/IGdsb2JhbC1leHBvcnRzIChuYW1lIG1vZHVsZSkpKSkpXHJcbiJ9IHs6c3ltIHJlZ2lzdGVyLXNwZWNzLCA6bWV0YSB7OmRvYyAiUmVnaXN0ZXJzIHNwZWNlZCB2YXJzIGZvdW5kIGluIGEgbmFtZXNwYWNlIGFuYWx5c2lzIGNhY2hlLiIsIDphcmdsaXN0cyAoW2NhY2hlZC1uc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2lzdGVyLXNwZWNzXHJcbiBcIlJlZ2lzdGVycyBzcGVjZWQgdmFycyBmb3VuZCBpbiBhIG5hbWVzcGFjZSBhbmFseXNpcyBjYWNoZS5cIlxyXG4gW2NhY2hlZC1uc11cclxuICM/KDpjbGogKHRyeSAobG9ja2luZyBsb2FkLW11dGV4IChjbG9qdXJlLmNvcmUvcmVxdWlyZSAocXVvdGUgY2xqcy5zcGVjLmFscGhhKSkpIChjYXRjaCBUaHJvd2FibGUgdCkpKVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3JlZ2lzdHJ5LXJlZiBzcGVjZWQtdmFyc119IChnZXQtc3BlYy12YXJzKV1cclxuICAod2hlbi1sZXRcclxuICAgW3JlZ2lzdHJ5IChzZXEgKDpjbGpzLnNwZWMvcmVnaXN0cnktcmVmIGNhY2hlZC1ucykpXVxyXG4gICAod2hlbiByZWdpc3RyeS1yZWYgKHN3YXAhIEByZWdpc3RyeS1yZWYgaW50byByZWdpc3RyeSkpKVxyXG4gICh3aGVuLWxldFxyXG4gICBbdmFycyAoc2VxICg6Y2xqcy5zcGVjL3NwZWNlZC12YXJzIGNhY2hlZC1ucykpXVxyXG4gICAod2hlbiBzcGVjZWQtdmFycyAoc3dhcCEgQHNwZWNlZC12YXJzIGludG8gdmFycykpKSkpXHJcbiJ9IHs6c3ltIGdldC1leHRlcm5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gZ2V0LWV4dGVybnMgW10gKDpjbGpzLmFuYWx5emVyL2V4dGVybnMgQGVudi8qY29tcGlsZXIqKSlcclxuIn0gezpzeW0gKnBhc3NlcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpwYXNzZXMqIG5pbClcclxuIn0gezpzeW0gaGFzLWV4dGVybj8qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3ByZSBleHRlcm5zXSBbcHJlIGV4dGVybnMgdG9wXV19LCA6c291cmNlICIoZGVmblxyXG4gaGFzLWV4dGVybj8qXHJcbiAoW3ByZSBleHRlcm5zXVxyXG4gIChsZXRcclxuICAgW3ByZVxyXG4gICAgKGlmLXNvbWVcclxuICAgICBbbWUgKGZpbmQgKGdldC1pbiBleHRlcm5zICdbV2luZG93IHByb3RvdHlwZV0pIChmaXJzdCBwcmUpKV1cclxuICAgICAoaWYtc29tZVxyXG4gICAgICBbdGFnICgtPiBtZSBmaXJzdCBtZXRhIDp0YWcpXVxyXG4gICAgICAoaW50byBbdGFnICdwcm90b3R5cGVdIChuZXh0IHByZSkpXHJcbiAgICAgIHByZSlcclxuICAgICBwcmUpXVxyXG4gICAoaGFzLWV4dGVybj8qIHByZSBleHRlcm5zIGV4dGVybnMpKSlcclxuIChbcHJlIGV4dGVybnMgdG9wXVxyXG4gIChjb25kXHJcbiAgIChlbXB0eT8gcHJlKVxyXG4gICB0cnVlXHJcbiAgIDplbHNlXHJcbiAgIChsZXRcclxuICAgIFt4IChmaXJzdCBwcmUpIG1lIChmaW5kIGV4dGVybnMgeCldXHJcbiAgICAoY29uZFxyXG4gICAgIChub3QgbWUpXHJcbiAgICAgZmFsc2VcclxuICAgICA6ZWxzZVxyXG4gICAgIChsZXRcclxuICAgICAgW1t4JyBleHRlcm5zJ10gbWUgeG1ldGEgKG1ldGEgeCcpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgKD0gJ0Z1bmN0aW9uICg6dGFnIHhtZXRhKSkgKDpjdG9yIHhtZXRhKSlcclxuICAgICAgIChvclxyXG4gICAgICAgIChoYXMtZXh0ZXJuPyogKGludG8gJ1twcm90b3R5cGVdIChuZXh0IHByZSkpIGV4dGVybnMnIHRvcClcclxuICAgICAgICAoaGFzLWV4dGVybj8qIChuZXh0IHByZSkgZXh0ZXJucycgdG9wKSlcclxuICAgICAgIChyZWN1ciAobmV4dCBwcmUpIGV4dGVybnMnIHRvcCkpKSkpKSkpXHJcbiJ9IHs6c3ltIGhhbmRsZS1zeW1ib2wtbG9jYWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltIGxiXSl9LCA6c291cmNlICIoZGVmbiBoYW5kbGUtc3ltYm9sLWxvY2FsIFtzeW0gbGJdIChpZiAoc3ltYm9sPyBsYikgezpuYW1lIHN5bX0gbGIpKVxyXG4ifSB7OnN5bSBnZXQtZXhwYW5kZXItbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IG5zdHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZXhwYW5kZXItbnNcclxuIFtlbnYgbnN0cl1cclxuIChsZXRcclxuICBbcmVzXHJcbiAgIChvclxyXG4gICAgKHJlc29sdmUtbWFjcm8tbnMtYWxpYXMgZW52IG5zdHIgbmlsKVxyXG4gICAgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zdHIgbmlsKSlcclxuICAgbnN0clxyXG4gICAoaWYgKHNvbWU/IHJlcykgKHN0ciByZXMpIG5zdHIpXVxyXG4gIChjb25kXHJcbiAgICM/QCg6Y2xqIFsoPSBcImNsb2p1cmUuY29yZVwiIG5zdHIpIChmaW5kLW5zIChxdW90ZSBjbGpzLmNvcmUpKV0gOmNsanMgWyhpZGVudGljYWw/IFwiY2xvanVyZS5jb3JlXCIgbnN0cikgKGZpbmQtbWFjcm9zLW5zIENMSlNfQ09SRV9NQUNST1NfU1lNKV0pXHJcbiAgICM/QCg6Y2xqIFsoPSBcImNsb2p1cmUucmVwbFwiIG5zdHIpIChmaW5kLW5zIChxdW90ZSBjbGpzLnJlcGwpKV0gOmNsanMgWyhpZGVudGljYWw/IFwiY2xvanVyZS5yZXBsXCIgbnN0cikgKGZpbmQtbWFjcm9zLW5zIChxdW90ZSBjbGpzLnJlcGwpKV0pXHJcbiAgICM/QCg6Y2xqIFsoLmNvbnRhaW5zIG5zdHIgXCIuXCIpIChmaW5kLW5zIChzeW1ib2wgbnN0cikpXSA6Y2xqcyBbKGdvb2cuc3RyaW5nL2NvbnRhaW5zIG5zdHIgXCIuXCIpIChmaW5kLW1hY3Jvcy1ucyAoc3ltYm9sIG5zdHIpKV0pXHJcbiAgIDplbHNlXHJcbiAgIChzb21lLT5cclxuICAgIGVudlxyXG4gICAgOm5zXHJcbiAgICA6cmVxdWlyZS1tYWNyb3NcclxuICAgIChnZXQgKHN5bWJvbCBuc3RyKSlcclxuICAgICM/KDpjbGogZmluZC1ucyA6Y2xqcyBmaW5kLW1hY3Jvcy1ucykpKSkpXHJcbiJ9IHs6c3ltIG1lc3NhZ2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXNzYWdlXHJcbiBbZW52IHNdXHJcbiAoc3RyXHJcbiAgc1xyXG4gIChpZlxyXG4gICAoOmxpbmUgZW52KVxyXG4gICAoc3RyIFwiIGF0IGxpbmUgXCIgKDpsaW5lIGVudikgXCIgXCIgKmNsanMtZmlsZSopXHJcbiAgICh3aGVuICpjbGpzLWZpbGUqIChzdHIgXCIgaW4gZmlsZSBcIiAqY2xqcy1maWxlKikpKSkpXHJcbiJ9IHs6c3ltIHBhcnNlLWludm9rZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLWludm9rZVxyXG4gW2VudiBmb3JtXVxyXG4gKGRpc2FsbG93aW5nLXJlY3VyIChwYXJzZS1pbnZva2UqIGVudiBmb3JtKSkpXHJcbiJ9IHs6c3ltICpjbGpzLXdhcm5pbmctaGFuZGxlcnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy13YXJuaW5nLWhhbmRsZXJzKiBbZGVmYXVsdC13YXJuaW5nLWhhbmRsZXJdKVxyXG4ifSB7OnN5bSBhbmFseXplLXNlcSotd3JhcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcCBlbnYgZm9ybSBuYW1lIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXNlcSotd3JhcFxyXG4gW29wIGVudiBmb3JtIG5hbWUgb3B0c11cclxuICh3cmFwcGluZy1lcnJvcnMgZW52IChhbmFseXplLXNlcSogb3AgZW52IGZvcm0gbmFtZSBvcHRzKSkpXHJcbiJ9IHs6c3ltIGNvbmZpcm0tYmluZGluZ3MsIDptZXRhIHs6ZG9jICJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50IGVudiwgYW5kIG5hbWVzLCBhIGxpc3Qgb2Ygc3ltYm9scywgY29uZmlybVxuICAgdGhhdCBhbGwgY29ycmVzcG9uZCB0byBkZWNsYXJlZCBkeW5hbWljIHZhcnMuIiwgOmFyZ2xpc3RzIChbZW52IG5hbWVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uZmlybS1iaW5kaW5nc1xyXG4gXCJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50IGVudiwgYW5kIG5hbWVzLCBhIGxpc3Qgb2Ygc3ltYm9scywgY29uZmlybVxcbiAgIHRoYXQgYWxsIGNvcnJlc3BvbmQgdG8gZGVjbGFyZWQgZHluYW1pYyB2YXJzLlwiXHJcbiBbZW52IG5hbWVzXVxyXG4gKGRvc2VxXHJcbiAgW25hbWUgbmFtZXNdXHJcbiAgKGxldFxyXG4gICBbZW52XHJcbiAgICAoYXNzb2MgZW52IDpucyAoZ2V0LW5hbWVzcGFjZSAqY2xqcy1ucyopKVxyXG4gICAgZXZcclxuICAgIChyZXNvbHZlLWV4aXN0aW5nLXZhciBlbnYgbmFtZSldXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kIGV2IChub3QgKC0+IGV2IDpkeW5hbWljKSkpXHJcbiAgICAod2FybmluZyA6ZHluYW1pYyBlbnYgezpldiBldiwgOm5hbWUgKDpuYW1lIGV2KX0pKSkpKVxyXG4ifSB7OnN5bSBoYXMtZXh0ZXJuPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1twcmVdIFtwcmUgZXh0ZXJuc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhcy1leHRlcm4/XHJcbiAoW3ByZV0gKGhhcy1leHRlcm4/IHByZSAoZ2V0LWV4dGVybnMpKSlcclxuIChbcHJlIGV4dGVybnNdXHJcbiAgKG9yXHJcbiAgIChoYXMtZXh0ZXJuPyogcHJlIGV4dGVybnMpXHJcbiAgICh3aGVuXHJcbiAgICAoPSAxIChjb3VudCBwcmUpKVxyXG4gICAgKGxldFxyXG4gICAgIFt4IChmaXJzdCBwcmUpXVxyXG4gICAgIChvclxyXG4gICAgICAoZ2V0LWluIGV4dGVybnMgKGNvbmogJ1tXaW5kb3cgcHJvdG90eXBlXSB4KSlcclxuICAgICAgKGdldC1pbiBleHRlcm5zIChjb25qICdbTnVtYmVyXSB4KSkpKSlcclxuICAgKC0+IChsYXN0IHByZSkgc3RyIChzdHJpbmcvc3RhcnRzLXdpdGg/IFwiY2xqcyRcIikpKSkpXHJcbiJ9IHs6c3ltIGZvcmVpZ24tZGVwPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtkZXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3JlaWduLWRlcD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2RlcF1cclxuIChsZXRcclxuICBbanMtaW5kZXggKDpqcy1kZXBlbmRlbmN5LWluZGV4IEBlbnYvKmNvbXBpbGVyKildXHJcbiAgKGlmLXNvbWVcclxuICAgW1tfIHs6a2V5cyBbZm9yZWlnbl19XSAoZmluZCBqcy1pbmRleCAobmFtZSBkZXApKV1cclxuICAgZm9yZWlnblxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXJlbmFtZS1tYWNybz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy1yZW5hbWUtbWFjcm8/XHJcbiBbc3ltXVxyXG4gKGxldFxyXG4gIFtsaWJcclxuICAgKHN5bWJvbCAobmFtZXNwYWNlIHN5bSkpXHJcbiAgIHN5bVxyXG4gICAoc3ltYm9sIChuYW1lIHN5bSkpXHJcbiAgIHRoZS1uc1xyXG4gICAjPyg6Y2xqIChmaW5kLW5zIGxpYikgOmNsanMgKGZpbmQtbWFjcm9zLW5zIGxpYikpXVxyXG4gIChvciAobmlsPyB0aGUtbnMpIChuaWw/ICguZmluZEludGVybmVkVmFyIHRoZS1ucyBzeW0pKSkpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXVzZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdXNlcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXVzZXNcclxuIFt1c2VzIGVudl1cclxuIChsZXRcclxuICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgKGludG9cclxuICAge31cclxuICAgKGZpbHRlciAoZm4gW1tzeW0gbGliXV0gKG1pc3NpbmctdXNlPyBsaWIgc3ltIGNlbnYpKSB1c2VzKSkpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXVzZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbGliIHN5bSBjZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy11c2U/XHJcbiBbbGliIHN5bSBjZW52XVxyXG4gKGxldFxyXG4gIFtqcy1saWIgKGdldC1pbiBjZW52IFs6anMtZGVwZW5kZW5jeS1pbmRleCAobmFtZSBsaWIpXSldXHJcbiAgKGFuZFxyXG4gICAoPVxyXG4gICAgKGdldC1pblxyXG4gICAgIGNlbnZcclxuICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBsaWIgOmRlZnMgc3ltXVxyXG4gICAgIDpjbGpzLmFuYWx5emVyL25vdC1mb3VuZClcclxuICAgIDpjbGpzLmFuYWx5emVyL25vdC1mb3VuZClcclxuICAgKG5vdCAoPSAoZ2V0IGpzLWxpYiA6Z3JvdXApIDpnb29nKSlcclxuICAgKG5vdCAoZ2V0IGpzLWxpYiA6Y2xvc3VyZS1saWIpKVxyXG4gICAobm90IChub2RlLW1vZHVsZS1kZXA/IGxpYikpXHJcbiAgIChub3QgKGRlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/IGxpYikpKSkpXHJcbiJ9IHs6c3ltIGVzNS1hbGxvd2VkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBlczUtYWxsb3dlZCAje1wiZGVmYXVsdFwifSlcclxuIn0gezpzeW0gYW5hbHl6ZSwgOm1ldGEgezpkb2MgIkdpdmVuIGFuIGVudmlyb25tZW50LCBhIG1hcCBjb250YWluaW5nIHs6bG9jYWxzIChtYXBwaW5nIG9mIG5hbWVzIHRvIGJpbmRpbmdzKSwgOmNvbnRleHRcbiAgKG9uZSBvZiA6c3RhdGVtZW50LCA6ZXhwciwgOnJldHVybiksIDpucyAoYSBzeW1ib2wgbmFtaW5nIHRoZVxuICBjb21waWxhdGlvbiBucyl9LCBhbmQgZm9ybSwgcmV0dXJucyBhbiBleHByZXNzaW9uIG9iamVjdCAoYSBtYXBcbiAgY29udGFpbmluZyBhdCBsZWFzdCA6Zm9ybSwgOm9wIGFuZCA6ZW52IGtleXMpLiBJZiBleHByIGhhcyBhbnkgKGltbWVkaWF0ZWx5KVxuICBuZXN0ZWQgZXhwcnMsIG11c3QgaGF2ZSBhIDpjaGlsZHJlbiBlbnRyeS4gVGhpcyBtdXN0IGJlIGEgdmVjdG9yIG9mIGtleXdvcmRzIG5hbWluZ1xuICB0aGUgaW1tZWRpYXRlbHkgbmVzdGVkIGZpZWxkcyBtYXBwZWQgdG8gYW4gZXhwciBvciB2ZWN0b3Igb2YgZXhwcnMuIFRoaXMgd2lsbFxuICBmYWNpbGl0YXRlIGNvZGUgd2Fsa2luZyB3aXRob3V0IGtub3dpbmcgdGhlIGRldGFpbHMgb2YgdGhlIG9wIHNldC4iLCA6YXJnbGlzdHMgW1tlbnYgZm9ybV0gW2VudiBmb3JtIG5hbWVdIFtlbnYgZm9ybSBuYW1lIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplXHJcbiBcIkdpdmVuIGFuIGVudmlyb25tZW50LCBhIG1hcCBjb250YWluaW5nIHs6bG9jYWxzIChtYXBwaW5nIG9mIG5hbWVzIHRvIGJpbmRpbmdzKSwgOmNvbnRleHRcXG4gIChvbmUgb2YgOnN0YXRlbWVudCwgOmV4cHIsIDpyZXR1cm4pLCA6bnMgKGEgc3ltYm9sIG5hbWluZyB0aGVcXG4gIGNvbXBpbGF0aW9uIG5zKX0sIGFuZCBmb3JtLCByZXR1cm5zIGFuIGV4cHJlc3Npb24gb2JqZWN0IChhIG1hcFxcbiAgY29udGFpbmluZyBhdCBsZWFzdCA6Zm9ybSwgOm9wIGFuZCA6ZW52IGtleXMpLiBJZiBleHByIGhhcyBhbnkgKGltbWVkaWF0ZWx5KVxcbiAgbmVzdGVkIGV4cHJzLCBtdXN0IGhhdmUgYSA6Y2hpbGRyZW4gZW50cnkuIFRoaXMgbXVzdCBiZSBhIHZlY3RvciBvZiBrZXl3b3JkcyBuYW1pbmdcXG4gIHRoZSBpbW1lZGlhdGVseSBuZXN0ZWQgZmllbGRzIG1hcHBlZCB0byBhbiBleHByIG9yIHZlY3RvciBvZiBleHBycy4gVGhpcyB3aWxsXFxuICBmYWNpbGl0YXRlIGNvZGUgd2Fsa2luZyB3aXRob3V0IGtub3dpbmcgdGhlIGRldGFpbHMgb2YgdGhlIG9wIHNldC5cIlxyXG4gKFtlbnYgZm9ybV0gKGFuYWx5emUgZW52IGZvcm0gbmlsKSlcclxuIChbZW52IGZvcm0gbmFtZV1cclxuICAoYW5hbHl6ZVxyXG4gICBlbnZcclxuICAgZm9ybVxyXG4gICBuYW1lXHJcbiAgICh3aGVuIGVudi8qY29tcGlsZXIqICg6b3B0aW9ucyBAZW52Lypjb21waWxlciopKSkpXHJcbiAoW2VudiBmb3JtIG5hbWUgb3B0c11cclxuICAod3JhcHBpbmctZXJyb3JzXHJcbiAgIGVudlxyXG4gICAoaWZcclxuICAgIChhbmFseXplZD8gZm9ybSlcclxuICAgIChuby13YXJuIChhbmFseXplKiBlbnYgZm9ybSBuYW1lIG9wdHMpKVxyXG4gICAgKGFuYWx5emUqIGVudiBmb3JtIG5hbWUgb3B0cykpKSkpXHJcbiJ9IHs6c3ltIHVzZWQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1c2VkP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHN5bV1cclxuIChvclxyXG4gIChzb21lPyAoZ2V0cyBlbnYgOm5zIDp1c2UtbWFjcm9zIHN5bSkpXHJcbiAgKHNvbWU/XHJcbiAgIChnZXRzXHJcbiAgICBAZW52Lypjb21waWxlcipcclxuICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgIChnZXRzIGVudiA6bnMgOm5hbWUpXHJcbiAgICA6dXNlLW1hY3Jvc1xyXG4gICAgc3ltKSkpKVxyXG4ifSB7OnN5bSBub2RlLW1vZHVsZS1kZXA/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21vZHVsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vZGUtbW9kdWxlLWRlcD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW21vZHVsZV1cclxuICM/KDpjbGogKGNvbnRhaW5zPyAoZ2V0LWluIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopIFs6bm9kZS1tb2R1bGUtaW5kZXhdKSAoc3RyIG1vZHVsZSkpIDpjbGpzICh0cnkgKGFuZCAoPSAqdGFyZ2V0KiBcIm5vZGVqc1wiKSAoYm9vbGVhbiAoanMvcmVxdWlyZS5yZXNvbHZlIChzdHIgbW9kdWxlKSkpKSAoY2F0Y2ggOmRlZmF1bHQgXyBmYWxzZSkpKSlcclxuIn0gezpzeW0gcGFyc2UtdHlwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcCBlbnYgW18gdHN5bSBmaWVsZHMgcG1hc2tzIGJvZHkgOmFzIGZvcm1dXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtdHlwZVxyXG4gW29wIGVudiBbXyB0c3ltIGZpZWxkcyBwbWFza3MgYm9keSA6YXMgZm9ybV1dXHJcbiAobGV0XHJcbiAgW3RcclxuICAgKDpuYW1lIChyZXNvbHZlLXZhciAoZGlzc29jIGVudiA6bG9jYWxzKSB0c3ltKSlcclxuICAgbG9jYWxzXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFttIGZsZF1cclxuICAgICAoYXNzb2NcclxuICAgICAgbVxyXG4gICAgICBmbGRcclxuICAgICAgezpuYW1lIGZsZCxcclxuICAgICAgIDpmaWVsZCB0cnVlLFxyXG4gICAgICAgOmNvbHVtbiAoZ2V0LWNvbCBmbGQgZW52KSxcclxuICAgICAgIDp1bnN5bmNocm9uaXplZC1tdXRhYmxlICgtPiBmbGQgbWV0YSA6dW5zeW5jaHJvbml6ZWQtbXV0YWJsZSksXHJcbiAgICAgICA6bGluZSAoZ2V0LWxpbmUgZmxkIGVudiksXHJcbiAgICAgICA6dGFnICgtPiBmbGQgbWV0YSA6dGFnKSxcclxuICAgICAgIDptdXRhYmxlICgtPiBmbGQgbWV0YSA6bXV0YWJsZSksXHJcbiAgICAgICA6dm9sYXRpbGUtbXV0YWJsZSAoLT4gZmxkIG1ldGEgOnZvbGF0aWxlLW11dGFibGUpLFxyXG4gICAgICAgOnNoYWRvdyAobSBmbGQpLFxyXG4gICAgICAgOmxvY2FsIDpmaWVsZH0pKVxyXG4gICAge31cclxuICAgIChpZlxyXG4gICAgICg9IDpkZWZyZWNvcmQgb3ApXHJcbiAgICAgKGNvbmNhdCBmaWVsZHMgJ1tfX21ldGEgX19leHRtYXAgX19oYXNoXSlcclxuICAgICBmaWVsZHMpKVxyXG4gICBwcm90b2NvbHNcclxuICAgKC0+IHRzeW0gbWV0YSA6cHJvdG9jb2xzKV1cclxuICAoc3dhcCFcclxuICAgZW52Lypjb21waWxlcipcclxuICAgdXBkYXRlLWluXHJcbiAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzICgtPiBlbnYgOm5zIDpuYW1lKSA6ZGVmcyB0c3ltXVxyXG4gICAoZm5cclxuICAgIFttXVxyXG4gICAgKGxldFxyXG4gICAgIFttXHJcbiAgICAgIChhc3NvY1xyXG4gICAgICAgKG9yIG0ge30pXHJcbiAgICAgICA6bmFtZVxyXG4gICAgICAgdFxyXG4gICAgICAgOnRhZ1xyXG4gICAgICAgJ2Z1bmN0aW9uXHJcbiAgICAgICA6dHlwZVxyXG4gICAgICAgdHJ1ZVxyXG4gICAgICAgOm51bS1maWVsZHNcclxuICAgICAgIChjb3VudCBmaWVsZHMpXHJcbiAgICAgICA6cmVjb3JkXHJcbiAgICAgICAoPSA6ZGVmcmVjb3JkIG9wKSldXHJcbiAgICAgKG1lcmdlXHJcbiAgICAgIG1cclxuICAgICAgKGRpc3NvYyAobWV0YSB0c3ltKSA6cHJvdG9jb2xzKVxyXG4gICAgICB7OnByb3RvY29scyBwcm90b2NvbHN9XHJcbiAgICAgIChzb3VyY2UtaW5mbyB0c3ltIGVudikpKSkpXHJcbiAgezpjaGlsZHJlbiBbOmJvZHldLFxyXG4gICA6cG1hc2tzIHBtYXNrcyxcclxuICAgOnByb3RvY29scyAoZGlzaiBwcm90b2NvbHMgJ2NsanMuY29yZS9PYmplY3QpLFxyXG4gICA6ZmllbGRzIGZpZWxkcyxcclxuICAgOm9wIG9wLFxyXG4gICA6ZW52IGVudixcclxuICAgOnQgdCxcclxuICAgOmZvcm0gZm9ybSxcclxuICAgOnRhZyAnZnVuY3Rpb24sXHJcbiAgIDpib2R5IChhbmFseXplIChhc3NvYyBlbnYgOmxvY2FscyBsb2NhbHMpIGJvZHkpfSkpXHJcbiJ9IHs6c3ltIGdldHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbbSBrMCBrMV0gW20gazAgazEgazJdIFttIGswIGsxIGsyIGszXV19LCA6c291cmNlICIoZGVmblxyXG4gZ2V0c1xyXG4gKFttIGswIGsxXVxyXG4gIChsZXRcclxuICAgW20gKGdldCBtIGswIFNFTlRJTkVMKV1cclxuICAgKHdoZW4tbm90IChpZGVudGljYWw/IG0gU0VOVElORUwpIChnZXQgbSBrMSkpKSlcclxuIChbbSBrMCBrMSBrMl1cclxuICAobGV0XHJcbiAgIFttIChnZXQgbSBrMCBTRU5USU5FTCldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKGlkZW50aWNhbD8gbSBTRU5USU5FTClcclxuICAgIChsZXRcclxuICAgICBbbSAoZ2V0IG0gazEgU0VOVElORUwpXVxyXG4gICAgICh3aGVuLW5vdCAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKSAoZ2V0IG0gazIpKSkpKSlcclxuIChbbSBrMCBrMSBrMiBrM11cclxuICAobGV0XHJcbiAgIFttIChnZXQgbSBrMCBTRU5USU5FTCldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKGlkZW50aWNhbD8gbSBTRU5USU5FTClcclxuICAgIChsZXRcclxuICAgICBbbSAoZ2V0IG0gazEgU0VOVElORUwpXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbbSAoZ2V0IG0gazIgU0VOVElORUwpXVxyXG4gICAgICAgKHdoZW4tbm90IChpZGVudGljYWw/IG0gU0VOVElORUwpIChnZXQgbSBrMykpKSkpKSkpKVxyXG4ifSB7OnN5bSBjaGVjay1yZW5hbWUtbWFjcm9zLWluZmVycmluZy1taXNzaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbbmFtZSByZW5hbWVzXSwgOmFzIGFzdH0gZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stcmVuYW1lLW1hY3Jvcy1pbmZlcnJpbmctbWlzc2luZ1xyXG4gW3s6a2V5cyBbbmFtZSByZW5hbWVzXSwgOmFzIGFzdH0gZW52XVxyXG4gKGxldFxyXG4gIFttaXNzaW5nLXJlbmFtZXNcclxuICAgKHdoZW5cclxuICAgIChhbmQgKmFuYWx5emUtZGVwcyogKHNlcSByZW5hbWVzKSlcclxuICAgIChtaXNzaW5nLXJlbmFtZXMgcmVuYW1lcyBlbnYpKVxyXG4gICBtYXliZS1tYWNyb3NcclxuICAgKGFwcGx5IGRpc3NvYyByZW5hbWVzIChrZXlzIG1pc3NpbmctcmVuYW1lcykpXHJcbiAgIG1pc3NpbmctcmVuYW1lLW1hY3Jvc1xyXG4gICAoaW5mZXJyZWQtcmVuYW1lLW1hY3JvcyBtaXNzaW5nLXJlbmFtZXMgZW52KVxyXG4gICByZW1vdmUtbWlzc2luZy1yZW5hbWVzXHJcbiAgIChmbiogW3AxX180ODYxNSNdIChhcHBseSBkaXNzb2MgcDFfXzQ4NjE1IyAoa2V5cyBtaXNzaW5nLXJlbmFtZXMpKSlcclxuICAgYXN0J1xyXG4gICAoLT5cclxuICAgIGFzdFxyXG4gICAgKHVwZGF0ZS1pblxyXG4gICAgIFs6cmVuYW1lLW1hY3Jvc11cclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDg2MTYjXVxyXG4gICAgICAoLT5cclxuICAgICAgIHAxX180ODYxNiNcclxuICAgICAgIChtZXJnZSBtaXNzaW5nLXJlbmFtZS1tYWNyb3MpXHJcbiAgICAgICAobWVyZ2UgKGluZmVycmVkLXJlbmFtZS1tYWNyb3MgbWF5YmUtbWFjcm9zIGVudikpKSkpXHJcbiAgICAodXBkYXRlLWluIFs6cmVuYW1lc10gcmVtb3ZlLW1pc3NpbmctcmVuYW1lcykpXVxyXG4gIChzd2FwIVxyXG4gICBlbnYvKmNvbXBpbGVyKlxyXG4gICAoZm4qXHJcbiAgICBbcDFfXzQ4NjE3I11cclxuICAgICgtPlxyXG4gICAgIHAxX180ODYxNyNcclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5hbWUgOnJlbmFtZS1tYWNyb3NdXHJcbiAgICAgIG1lcmdlXHJcbiAgICAgICg6cmVuYW1lLW1hY3JvcyBhc3QnKSlcclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5hbWUgOnJlbmFtZXNdXHJcbiAgICAgIHJlbW92ZS1taXNzaW5nLXJlbmFtZXMpKSkpXHJcbiAgYXN0JykpXHJcbiJ9IHs6c3ltICphbGxvdy1ucyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICphbGxvdy1ucyogdHJ1ZSlcclxuIn0gezpzeW0gYW5hbHl6ZS1jb25zdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtY29uc3RcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbezprZXlzIFt0YWddfSAoYW5hbHl6ZSAoYXNzb2MgZW52IDpxdW90ZWQ/IHRydWUpIGZvcm0pXVxyXG4gIHs6b3AgOmNvbnN0LFxyXG4gICA6ZW52IGVudixcclxuICAgOmxpdGVyYWw/IHRydWUsXHJcbiAgIDp2YWwgZm9ybSxcclxuICAgOnRhZyB0YWcsXHJcbiAgIDpmb3JtIGZvcm19KSlcclxuIn0gezpzeW0gaW5mZXItaW52b2tlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB7ZiA6Zm4sIDprZXlzIFthcmdzXSwgOmFzIGV9XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXItaW52b2tlXHJcbiBbZW52IHtmIDpmbiwgOmtleXMgW2FyZ3NdLCA6YXMgZX1dXHJcbiAobGV0XHJcbiAgW21lIChhc3NvYyAoZmluZC1tYXRjaGluZy1tZXRob2QgZiBhcmdzKSA6b3AgOmZuLW1ldGhvZCldXHJcbiAgKGlmLXNvbWVcclxuICAgW3JldC10YWcgKGluZmVyLXRhZyBlbnYgbWUpXVxyXG4gICByZXQtdGFnXHJcbiAgIChsZXRcclxuICAgIFt7OmtleXMgW2luZm9dfSBmXVxyXG4gICAgKGlmLXNvbWVcclxuICAgICBbcmV0LXRhZ1xyXG4gICAgICAoaWZcclxuICAgICAgIChvciAodHJ1ZT8gKDpmbi12YXIgaW5mbykpICh0cnVlPyAoOmpzLWZuLXZhciBpbmZvKSkpXHJcbiAgICAgICAoOnJldC10YWcgaW5mbylcclxuICAgICAgICh3aGVuICg9ICdqcyAoOm5zIGluZm8pKSAnanMpKV1cclxuICAgICByZXQtdGFnXHJcbiAgICAgQU5ZX1NZTSkpKSkpXHJcbiJ9IHs6c3ltICpjbGpzLXN0YXRpYy1mbnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1zdGF0aWMtZm5zKiBmYWxzZSlcclxuIn0gezpzeW0gYXJyYXktdHlwZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBhcnJheS10eXBlc1xyXG4gJyN7Ym9vbGVhbiBmbG9hdHMgbG9uZ3Mgb2JqZWN0cyBhcnJheSBkb3VibGVzIGNoYXJzIGludHMgc2hvcnRzXHJcbiAgICBieXRlc30pXHJcbiJ9IHs6c3ltICpjaGVjay1hbGlhcy1kdXBlcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjaGVjay1hbGlhcy1kdXBlcyogdHJ1ZSlcclxuIn0gezpzeW0gbWFjcm8tbnMtbmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFjcm8tbnMtbmFtZVxyXG4gW25hbWVdXHJcbiAobGV0XHJcbiAgW25hbWUtc3RyIChzdHIgbmFtZSldXHJcbiAgKGlmLW5vdFxyXG4gICAjPyg6Y2xqICguZW5kc1dpdGggbmFtZS1zdHIgXCIkbWFjcm9zXCIpIDpjbGpzIChnc3RyaW5nL2VuZHNXaXRoIG5hbWUtc3RyIFwiJG1hY3Jvc1wiKSlcclxuICAgKHN5bWJvbCAoc3RyIG5hbWUtc3RyIFwiJG1hY3Jvc1wiKSlcclxuICAgbmFtZSkpKVxyXG4ifSB7OnN5bSAqcmVsb2FkLW1hY3JvcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpyZWxvYWQtbWFjcm9zKiBmYWxzZSlcclxuIn0gezpzeW0gY29tcGlsZXItb3B0aW9ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGNvbXBpbGVyLW9wdGlvbnMgW10gKGdldCBAZW52Lypjb21waWxlciogOm9wdGlvbnMpKVxyXG4ifSB7OnN5bSByZXNvbHZlLWV4aXN0aW5nLXZhciwgOm1ldGEgezpkb2MgIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBzeW0sIGEgc3ltYm9sLCByZXNvbHZlIGFuIGV4aXN0aW5nIHZhci5cbiAgIEVtaXRzIGEgd2FybmluZyBpZiBubyBzdWNoIHZhciBleGlzdHMuIiwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtZXhpc3RpbmctdmFyXHJcbiBcIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBzeW0sIGEgc3ltYm9sLCByZXNvbHZlIGFuIGV4aXN0aW5nIHZhci5cXG4gICBFbWl0cyBhIHdhcm5pbmcgaWYgbm8gc3VjaCB2YXIgZXhpc3RzLlwiXHJcbiBbZW52IHN5bV1cclxuIChpZi1ub3RcclxuICAoLT4gc3ltIG1ldGEgOmNsanMuYW5hbHl6ZXIvbm8tcmVzb2x2ZSlcclxuICAocmVzb2x2ZS12YXIgZW52IHN5bSBjb25maXJtLXZhci1leGlzdHMpXHJcbiAgKHJlc29sdmUtdmFyIGVudiBzeW0pKSlcclxuIn0gezpzeW0gcmVxdWlyZWQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcXVpcmVkP1xyXG4gW25zIGVudl1cclxuIChvclxyXG4gIChjb250YWlucz8gKHNldCAodmFscyAoZ2V0cyBlbnYgOm5zIDpyZXF1aXJlcykpKSBucylcclxuICAoY29udGFpbnM/IChzZXQgKHZhbHMgKGdldHMgZW52IDpucyA6dXNlcykpKSBucykpKVxyXG4ifSB7OnN5bSBub2RlLWxpa2U/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW10gW29wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub2RlLWxpa2U/XHJcbiAoW10gKG5vZGUtbGlrZT8gKGNvbXBpbGVyLW9wdGlvbnMpKSlcclxuIChbb3B0c10gKGFuZCAoPSA6bm9kZWpzICg6dGFyZ2V0IG9wdHMpKSAoZmFsc2U/ICg6bm9kZWpzLXJ0IG9wdHMpKSkpKVxyXG4ifSB7OnN5bSBOT1RfTkFUSVZFLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBOT1RfTkFUSVZFICcje2NsaiBub3QtbmF0aXZlfSlcclxuIn0gezpzeW0gSUdOT1JFX1NZTSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgSUdOT1JFX1NZTSAnaWdub3JlKVxyXG4ifSB7OnN5bSBwYXJzZS1pbnZva2UqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBbZiAmIGFyZ3MgOmFzIGZvcm1dXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtaW52b2tlKlxyXG4gW2VudiBbZiAmIGFyZ3MgOmFzIGZvcm1dXVxyXG4gKGxldFxyXG4gIFtlbnZlXHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGZleHByXHJcbiAgIChhbmFseXplIGVudmUgZilcclxuICAgYXJnY1xyXG4gICAoY291bnQgYXJncylcclxuICAgZm4tdmFyP1xyXG4gICAob3IgKC0+IGZleHByIDppbmZvIDpmbi12YXIpICgtPiBmZXhwciA6aW5mbyA6anMtZm4tdmFyKSlcclxuICAga3c/XHJcbiAgICg9ICdjbGpzLmNvcmUvS2V5d29yZCAoOnRhZyBmZXhwcikpXHJcbiAgIGN1ci1uc1xyXG4gICAoLT4gZW52IDpucyA6bmFtZSlcclxuICAgSE8taW52b2tlP1xyXG4gICAoYW5kXHJcbiAgICAoYm9vbGVhbiAqY2xqcy1zdGF0aWMtZm5zKilcclxuICAgIChub3QgZm4tdmFyPylcclxuICAgIChub3QgKGpzLXRhZz8gZikpXHJcbiAgICAobm90IGt3PylcclxuICAgIChub3QgKGFuYWx5emVkPyBmKSkpXHJcbiAgIGJpbmQtZi1leHByP1xyXG4gICAoYW5kIEhPLWludm9rZT8gKG5vdCAoc3ltYm9sPyBmKSkpXHJcbiAgIGJpbmQtYXJncz9cclxuICAgKGFuZCBITy1pbnZva2U/IChub3QgKGFsbC12YWx1ZXM/IGFyZ3MpKSldXHJcbiAgKHdoZW5cclxuICAgZm4tdmFyP1xyXG4gICAobGV0XHJcbiAgICBbe3ZhcmlhZGljIDp2YXJpYWRpYz8sXHJcbiAgICAgIDprZXlzIFttYXgtZml4ZWQtYXJpdHkgbWV0aG9kLXBhcmFtcyBuYW1lIG5zIG1hY3JvXX1cclxuICAgICAoOmluZm8gZmV4cHIpXVxyXG4gICAgKHdoZW5cclxuICAgICAoYW5kXHJcbiAgICAgICM/KDpjbGpzIChub3QgKGFuZCAoZ3N0cmluZy9lbmRzV2l0aCAoc3RyIGN1ci1ucykgXCIkbWFjcm9zXCIpIChzeW1ib2wtaWRlbnRpY2FsPyBjdXItbnMgbnMpICh0cnVlPyBtYWNybykpKSlcclxuICAgICAgKGludmFsaWQtYXJpdHk/IGFyZ2MgbWV0aG9kLXBhcmFtcyB2YXJpYWRpYyBtYXgtZml4ZWQtYXJpdHkpKVxyXG4gICAgICh3YXJuaW5nIDpmbi1hcml0eSBlbnYgezpuYW1lIG5hbWUsIDphcmdjIGFyZ2N9KSkpKVxyXG4gICh3aGVuXHJcbiAgIChhbmQga3c/IChub3QgKG9yICg9PSAxIGFyZ2MpICg9PSAyIGFyZ2MpKSkpXHJcbiAgICh3YXJuaW5nIDpmbi1hcml0eSBlbnYgezpuYW1lIChmaXJzdCBmb3JtKSwgOmFyZ2MgYXJnY30pKVxyXG4gIChsZXRcclxuICAgW2RlcHJlY2F0ZWQ/XHJcbiAgICAoLT4gZmV4cHIgOmluZm8gOmRlcHJlY2F0ZWQpXHJcbiAgICBuby13YXJuP1xyXG4gICAgKC0+IGZvcm0gbWV0YSA6ZGVwcmVjYXRpb24tbm93YXJuKV1cclxuICAgKHdoZW5cclxuICAgIChhbmQgKGJvb2xlYW4gZGVwcmVjYXRlZD8pIChub3QgKGJvb2xlYW4gbm8td2Fybj8pKSlcclxuICAgICh3YXJuaW5nIDpmbi1kZXByZWNhdGVkIGVudiB7OmZleHByIGZleHByfSkpKVxyXG4gICh3aGVuXHJcbiAgIChzb21lPyAoLT4gZmV4cHIgOmluZm8gOnR5cGUpKVxyXG4gICAod2FybmluZyA6aW52b2tlLWN0b3IgZW52IHs6ZmV4cHIgZmV4cHJ9KSlcclxuICAoaWZcclxuICAgKG9yIGJpbmQtYXJncz8gYmluZC1mLWV4cHI/KVxyXG4gICAobGV0XHJcbiAgICBbYXJnLXN5bXNcclxuICAgICAod2hlbiBiaW5kLWFyZ3M/ICh0YWtlIGFyZ2MgKHJlcGVhdGVkbHkgZ2Vuc3ltKSkpXHJcbiAgICAgZi1zeW1cclxuICAgICAod2hlbiBiaW5kLWYtZXhwcj8gKGdlbnN5bSBcImZleHByX19cIikpXHJcbiAgICAgYmluZGluZ3NcclxuICAgICAoY29uZC0+XHJcbiAgICAgIFtdXHJcbiAgICAgIGJpbmQtYXJncz9cclxuICAgICAgKGludG8gKGludGVybGVhdmUgYXJnLXN5bXMgYXJncykpXHJcbiAgICAgIGJpbmQtZi1leHByP1xyXG4gICAgICAoY29uaiBmLXN5bSAoYW5hbHl6ZWQgZikpKVxyXG4gICAgIHRhZ1xyXG4gICAgICg6dGFnIChtZXRhIGZvcm0pKV1cclxuICAgIChhbmFseXplXHJcbiAgICAgZW52XHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS9sZXQpXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvdmVjXHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXEgKGNsb2p1cmUuY29yZS9jb25jYXQgYmluZGluZ3MpKSkpKVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAod2l0aC1tZXRhXHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAoYW5hbHl6ZWQgKGlmIGJpbmQtZi1leHByPyBmLXN5bSBmKSkpXHJcbiAgICAgICAgICAgICAoaWYgYmluZC1hcmdzPyBhcmctc3ltcyBhcmdzKSkpKVxyXG4gICAgICAgICAgezp0YWcgdGFnfSkpKSkpKSlcclxuICAgKGxldFxyXG4gICAgW2FuYS1leHByXHJcbiAgICAgKGZuKiBbcDFfXzQ4NjMzI10gKGFuYWx5emUgZW52ZSBwMV9fNDg2MzMjKSlcclxuICAgICBhcmdleHByc1xyXG4gICAgIChtYXB2IGFuYS1leHByIGFyZ3MpXVxyXG4gICAgKGlmXHJcbiAgICAgKGFuZFxyXG4gICAgICAoYW5kIChrZXl3b3JkPyBmKSAobmlsPyAobmFtZXNwYWNlIGYpKSlcclxuICAgICAgKD09IDEgKGNvdW50IGFyZ3MpKVxyXG4gICAgICAocmVjb3JkLXdpdGgtZmllbGQ/ICg6dGFnIChmaXJzdCBhcmdleHBycykpIChzeW1ib2wgKG5hbWUgZikpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFtmaWVsZC1hY2Nlc3MtZm9ybSAobGlzdCogKHN5bWJvbCAoc3RyIFwiLi1cIiAobmFtZSBmKSkpIGFyZ3MpXVxyXG4gICAgICAobm8td2FybiAoYW5hbHl6ZSBlbnYgZmllbGQtYWNjZXNzLWZvcm0pKSlcclxuICAgICB7OmVudiBlbnYsXHJcbiAgICAgIDpvcCA6aW52b2tlLFxyXG4gICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgICA6Zm4gZmV4cHIsXHJcbiAgICAgIDphcmdzIGFyZ2V4cHJzLFxyXG4gICAgICA6Y2hpbGRyZW4gWzpmbiA6YXJnc119KSkpKSlcclxuIn0gezpzeW0gKmNoZWNrZWQtYXJyYXlzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNoZWNrZWQtYXJyYXlzKiBmYWxzZSlcclxuIn0gezpzeW0gYXN0LWNoaWxkcmVuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FzdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzdC1jaGlsZHJlblxyXG4gW2FzdF1cclxuIChtYXBjYXRcclxuICAoZm4gW2NdIChsZXQgW2cgKGdldCBhc3QgYyldIChjb25kICh2ZWN0b3I/IGcpIGcgZyBbZ10pKSlcclxuICAoOmNoaWxkcmVuIGFzdCkpKVxyXG4ifSB7OnN5bSBsb2FkZWQtanMtbnM/LCA6bWV0YSB7OmRvYyAiQ2hlY2sgaWYgYSBKYXZhU2NyaXB0IG5hbWVzcGFjZSBoYXMgYmVlbiBsb2FkZWQuIEphdmFTY3JpcHQgdmFycyBhcmVcbiAgbm90IGN1cnJlbnRseSBjaGVja2VkLiIsIDphcmdsaXN0cyAoW2VudiBwcmVmaXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2FkZWQtanMtbnM/XHJcbiBcIkNoZWNrIGlmIGEgSmF2YVNjcmlwdCBuYW1lc3BhY2UgaGFzIGJlZW4gbG9hZGVkLiBKYXZhU2NyaXB0IHZhcnMgYXJlXFxuICBub3QgY3VycmVudGx5IGNoZWNrZWQuXCJcclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiBwcmVmaXhdXHJcbiAod2hlbi1ub3RcclxuICAoZ2V0cyBAZW52Lypjb21waWxlciogOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBwcmVmaXgpXHJcbiAgKGxldFxyXG4gICBbbnMgKDpucyBlbnYpXVxyXG4gICAob3JcclxuICAgIChzb21lPyAoZ2V0ICg6cmVxdWlyZXMgbnMpIHByZWZpeCkpXHJcbiAgICAoc29tZT8gKGdldCAoOmltcG9ydHMgbnMpIHByZWZpeCkpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLXZlY3RvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtdmVjdG9yXHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW2V4cHItZW52XHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGl0ZW1zXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgKG1hcHYgKGZuKiBbcDFfXzQ4NjM4I10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjM4IykpIGZvcm0pKV1cclxuICAoYW5hbHl6ZS13cmFwLW1ldGFcclxuICAgezpvcCA6dmVjdG9yLFxyXG4gICAgOmVudiBlbnYsXHJcbiAgICA6Zm9ybSBmb3JtLFxyXG4gICAgOml0ZW1zIGl0ZW1zLFxyXG4gICAgOmNoaWxkcmVuIFs6aXRlbXNdLFxyXG4gICAgOnRhZyAnY2xqcy5jb3JlL0lWZWN0b3J9KSkpXHJcbiJ9IHs6c3ltIHVud3JhcC1xdW90ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW29wXSwgOmFzIGV4cHJ9XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW53cmFwLXF1b3RlXHJcbiBbezprZXlzIFtvcF0sIDphcyBleHByfV1cclxuIChpZlxyXG4gICM/KDpjbGogKD0gb3AgOnF1b3RlKSA6Y2xqcyAoa2V5d29yZC1pZGVudGljYWw/IG9wIDpxdW90ZSkpXHJcbiAgKDpleHByIGV4cHIpXHJcbiAgZXhwcikpXHJcbiJ9IHs6c3ltIG5hbWVzcGFjZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBuYW1lc3BhY2VzXHJcbiAjPyg6Y2xqIChyZWlmeSBjbG9qdXJlLmxhbmcuSURlcmVmIChkZXJlZiBbX10gKGlmIChzb21lPyBlbnYvKmNvbXBpbGVyKikgKDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikpIGRlZmF1bHQtbmFtZXNwYWNlcykpKSA6Y2xqcyAocmVpZnkgSURlcmVmICgtZGVyZWYgW19dIChpZiAoc29tZT8gZW52Lypjb21waWxlciopICg6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopKSBkZWZhdWx0LW5hbWVzcGFjZXMpKSkpKVxyXG4ifSB7OnN5bSBlbGlkZS1hbmFseXplci1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuIGVsaWRlLWFuYWx5emVyLW1ldGEgW21dIChkaXNzb2MgbSA6Y2xqcy5hbmFseXplci9hbmFseXplZCkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LWJvZHksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGNvbnRleHQgZXhwcnMgcmVjdXItZnJhbWVzIGxvb3AtbGV0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0LWJvZHlcclxuIFtlbnYgY29udGV4dCBleHBycyByZWN1ci1mcmFtZXMgbG9vcC1sZXRzXVxyXG4gKGJpbmRpbmdcclxuICBbKnJlY3VyLWZyYW1lcyogcmVjdXItZnJhbWVzICpsb29wLWxldHMqIGxvb3AtbGV0c11cclxuICAoYW5hbHl6ZS1sZXQtYm9keSogZW52IGNvbnRleHQgZXhwcnMpKSlcclxuIn0gezpzeW0gZXh0ZXJuLXByZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW0gY3VycmVudC1uc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4dGVybi1wcmVcclxuIFtzeW0gY3VycmVudC1uc11cclxuIChsZXRcclxuICBbcHJlXHJcbiAgIChpbnRvXHJcbiAgICAnW09iamVjdF1cclxuICAgICgtPj4gKHN0cmluZy9zcGxpdCAobmFtZSBzeW0pICNcIlxcLlwiKSAobWFwIHN5bWJvbCkgdmVjKSldXHJcbiAgKHdoZW4tbm90XHJcbiAgIChoYXMtZXh0ZXJuPyBwcmUpXHJcbiAgIChzd2FwIVxyXG4gICAgZW52Lypjb21waWxlcipcclxuICAgIHVwZGF0ZS1pblxyXG4gICAgKGludG8gWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgY3VycmVudC1ucyA6ZXh0ZXJuc10gcHJlKVxyXG4gICAgbWVyZ2VcclxuICAgIHt9KSlcclxuICBwcmUpKVxyXG4ifSB7OnN5bSBnZXQtY29sLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggZW52XSl9LCA6c291cmNlICIoZGVmbiBnZXQtY29sIFt4IGVudl0gKG9yICgtPiB4IG1ldGEgOmNvbHVtbikgKDpjb2x1bW4gZW52KSkpXHJcbiJ9IHs6c3ltIGJhc2ljLXZhbGlkYXRlLW5zLXNwZWMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IG1hY3Jvcz8gc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJhc2ljLXZhbGlkYXRlLW5zLXNwZWNcclxuIFtlbnYgbWFjcm9zPyBzcGVjXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yIChzeW1ib2w/IHNwZWMpIChzdHJpbmc/IHNwZWMpIChzZXF1ZW50aWFsPyBzcGVjKSlcclxuICAodGhyb3dcclxuICAgKGVycm9yXHJcbiAgICBlbnZcclxuICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICBzcGVjXHJcbiAgICAgXCJPbmx5IFtsaWIubnMgJiBvcHRpb25zXSBhbmQgbGliLm5zIHNwZWNzIHN1cHBvcnRlZCBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKVxyXG4gKHdoZW5cclxuICAoc2VxdWVudGlhbD8gc3BlYylcclxuICAod2hlbi1ub3RcclxuICAgKG9yIChzeW1ib2w/IChmaXJzdCBzcGVjKSkgKHN0cmluZz8gKGZpcnN0IHNwZWMpKSlcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3JcclxuICAgICBlbnZcclxuICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgIHNwZWNcclxuICAgICAgXCJMaWJyYXJ5IG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBzeW1ib2wgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSlcclxuICAod2hlbi1ub3RcclxuICAgKG9kZD8gKGNvdW50IHNwZWMpKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvclxyXG4gICAgIGVudlxyXG4gICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgc3BlY1xyXG4gICAgICBcIk9ubHkgOmFzIGFsaWFzLCA6cmVmZXIgKG5hbWVzKSBhbmQgOnJlbmFtZSB7ZnJvbSB0b30gb3B0aW9ucyBzdXBwb3J0ZWQgaW4gOnJlcXVpcmVcIikpKSlcclxuICAod2hlbi1ub3RcclxuICAgKGV2ZXJ5PyAjezphcyA6cmVuYW1lIDpyZWZlcn0gKG1hcCBmaXJzdCAocGFydGl0aW9uIDIgKG5leHQgc3BlYykpKSlcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3JcclxuICAgICBlbnZcclxuICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgIHNwZWNcclxuICAgICAgXCJPbmx5IDphcywgOnJlZmVyIGFuZCA6cmVuYW1lIG9wdGlvbnMgc3VwcG9ydGVkIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpXHJcbiAgKHdoZW4tbm90XHJcbiAgIChsZXRcclxuICAgIFtmcyAoZnJlcXVlbmNpZXMgKG5leHQgc3BlYykpXVxyXG4gICAgKGFuZCAoPD0gKGZzIDphcyAwKSAxKSAoPD0gKGZzIDpyZWZlciAwKSAxKSkpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yXHJcbiAgICAgZW52XHJcbiAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICBzcGVjXHJcbiAgICAgIFwiRWFjaCBvZiA6YXMgYW5kIDpyZWZlciBvcHRpb25zIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpKSlcclxuIn0gezpzeW0gKmNsanMtd2FybmluZ3MqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmNsanMtd2FybmluZ3MqXHJcbiB7Omludm9rZS1jdG9yIHRydWUsXHJcbiAgOmV4dGVuZGluZy1iYXNlLWpzLXR5cGUgdHJ1ZSxcclxuICA6dW5zdXBwb3J0ZWQtcHJlcHJvY2Vzcy12YWx1ZSB0cnVlLFxyXG4gIDpyZWRlZiB0cnVlLFxyXG4gIDpqcy1zaGFkb3dlZC1ieS1sb2NhbCB0cnVlLFxyXG4gIDp1bnN1cHBvcnRlZC1qcy1tb2R1bGUtdHlwZSB0cnVlLFxyXG4gIDppbnZhbGlkLXByb3RvY29sLXN5bWJvbCB0cnVlLFxyXG4gIDpwcml2YXRlLXZhci1hY2Nlc3MgdHJ1ZSxcclxuICA6cHJvdG9jb2wtZHVwZWQtbWV0aG9kIHRydWUsXHJcbiAgOm11bmdlZC1uYW1lc3BhY2UgdHJ1ZSxcclxuICA6c2luZ2xlLXNlZ21lbnQtbmFtZXNwYWNlIHRydWUsXHJcbiAgOmZuLWFyaXR5IHRydWUsXHJcbiAgOmluZmVyLXdhcm5pbmcgZmFsc2UsXHJcbiAgOnZhcmlhZGljLW1heC1hcml0eSB0cnVlLFxyXG4gIDpwcm90b2NvbC13aXRoLXZhcmlhZGljLW1ldGhvZCB0cnVlLFxyXG4gIDpmbi1kZXByZWNhdGVkIHRydWUsXHJcbiAgOnVuZGVjbGFyZWQtdmFyIHRydWUsXHJcbiAgOmRlY2xhcmVkLWFyZ2xpc3RzLW1pc21hdGNoIHRydWUsXHJcbiAgOnByZWFtYmxlLW1pc3NpbmcgdHJ1ZSxcclxuICA6dW5kZWNsYXJlZC1wcm90b2NvbC1zeW1ib2wgdHJ1ZSxcclxuICA6cHJvdG9jb2wtd2l0aC1vdmVyd3JpdGluZy1tZXRob2QgdHJ1ZSxcclxuICA6ZHluYW1pYyB0cnVlLFxyXG4gIDppbnZhbGlkLWFycmF5LWFjY2VzcyB0cnVlLFxyXG4gIDp1bnByb3ZpZGVkIHRydWUsXHJcbiAgOm5zLXZhci1jbGFzaCB0cnVlLFxyXG4gIDp1bmRlY2xhcmVkLW5zIHRydWUsXHJcbiAgOm5vbi1keW5hbWljLWVhcm11ZmZlZC12YXIgdHJ1ZSxcclxuICA6dW5kZWNsYXJlZC1ucy1mb3JtIHRydWUsXHJcbiAgOmludmFsaWQtYXJpdGhtZXRpYyB0cnVlLFxyXG4gIDpwcm90b2NvbC1kZXByZWNhdGVkIHRydWUsXHJcbiAgOmZuLXZhciB0cnVlLFxyXG4gIDpwcm90b2NvbC1pbXBsLXJlY3VyLXdpdGgtdGFyZ2V0IHRydWUsXHJcbiAgOm92ZXJsb2FkLWFyaXR5IHRydWUsXHJcbiAgOnByb3RvY29sLW11bHRpcGxlLWltcGxzIHRydWUsXHJcbiAgOnJlZGVmLWluLWZpbGUgdHJ1ZSxcclxuICA6cHJvdG9jb2wtaW52YWxpZC1tZXRob2QgdHJ1ZSxcclxuICA6ZXh0ZW5kLXR5cGUtaW52YWxpZC1tZXRob2Qtc2hhcGUgdHJ1ZSxcclxuICA6bXVsdGlwbGUtdmFyaWFkaWMtb3ZlcmxvYWRzIHRydWUsXHJcbiAgOnByb3RvY29sLWltcGwtd2l0aC12YXJpYWRpYy1tZXRob2QgdHJ1ZX0pXHJcbiJ9IHs6c3ltIGFsaWFzLT50eXBlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYWxpYXMtPnR5cGVcclxuICd7b2JqZWN0IE9iamVjdCxcclxuICAgc3RyaW5nIFN0cmluZyxcclxuICAgbnVtYmVyIE51bWJlcixcclxuICAgYXJyYXkgQXJyYXksXHJcbiAgIGZ1bmN0aW9uIEZ1bmN0aW9uLFxyXG4gICBib29sZWFuIEJvb2xlYW4sXHJcbiAgIHN5bWJvbCBTeW1ib2x9KVxyXG4ifSB7OnN5bSBhbmFseXplZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGJvb2xlYW4gaWYgdGhlIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgYW5hbHl6ZWQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emVkP1xyXG4gXCJSZXR1cm5zIGJvb2xlYW4gaWYgdGhlIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgYW5hbHl6ZWQuXCJcclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW3hdXHJcbiAoYm9vbGVhblxyXG4gIChjb25kXHJcbiAgICh1bnNvcnRlZC1tYXA/IHgpXHJcbiAgICg6Y2xqcy5hbmFseXplci9hbmFseXplZCB4KVxyXG4gICA6ZWxzZVxyXG4gICAoOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQgKG1ldGEgeCkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZGVwcywgOm1ldGEgezpkb2MgIkdpdmVuIGEgbGliLCBhIG5hbWVzcGFjZSwgZGVwcywgaXRzIGRlcGVuZGVuY2llcywgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudFxuICAgYW5kIG9wdHMsIGNvbXBpbGVyIG9wdGlvbnMgLSBhbmFseXplIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLiBSZXF1aXJlZCB0b1xuICAgY29ycmVjdGx5IGFuYWx5emUgdXNhZ2Ugb2Ygb3RoZXIgbmFtZXNwYWNlcy4iLCA6YXJnbGlzdHMgW1tsaWIgZGVwcyBlbnZdIFtsaWIgZGVwcyBlbnYgb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZGVwc1xyXG4gXCJHaXZlbiBhIGxpYiwgYSBuYW1lc3BhY2UsIGRlcHMsIGl0cyBkZXBlbmRlbmNpZXMsIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnRcXG4gICBhbmQgb3B0cywgY29tcGlsZXIgb3B0aW9ucyAtIGFuYWx5emUgYWxsIG9mIHRoZSBkZXBlbmRlbmNpZXMuIFJlcXVpcmVkIHRvXFxuICAgY29ycmVjdGx5IGFuYWx5emUgdXNhZ2Ugb2Ygb3RoZXIgbmFtZXNwYWNlcy5cIlxyXG4gKFtsaWIgZGVwcyBlbnZdXHJcbiAgKGFuYWx5emUtZGVwc1xyXG4gICBsaWJcclxuICAgZGVwc1xyXG4gICBlbnZcclxuICAgKHdoZW4gZW52Lypjb21waWxlciogKDpvcHRpb25zIEBlbnYvKmNvbXBpbGVyKikpKSlcclxuIChbbGliIGRlcHMgZW52IG9wdHNdXHJcbiAgKGxldFxyXG4gICBbY29tcGlsZXIgQGVudi8qY29tcGlsZXIqXVxyXG4gICAoYmluZGluZ1xyXG4gICAgWypjbGpzLWRlcC1zZXQqXHJcbiAgICAgKHZhcnktbWV0YVxyXG4gICAgICAoY29uaiAqY2xqcy1kZXAtc2V0KiBsaWIpXHJcbiAgICAgIHVwZGF0ZS1pblxyXG4gICAgICBbOmRlcC1wYXRoXVxyXG4gICAgICBjb25qXHJcbiAgICAgIGxpYildXHJcbiAgICAoYXNzZXJ0XHJcbiAgICAgKGV2ZXJ5P1xyXG4gICAgICAoZm4qIFtwMV9fNDg2MTEjXSAobm90IChjb250YWlucz8gKmNsanMtZGVwLXNldCogcDFfXzQ4NjExIykpKVxyXG4gICAgICBkZXBzKVxyXG4gICAgIChzdHJcclxuICAgICAgXCJDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkLCBcIlxyXG4gICAgICAoYXBwbHlcclxuICAgICAgIHN0clxyXG4gICAgICAgKGludGVycG9zZVxyXG4gICAgICAgIFwiIC0+IFwiXHJcbiAgICAgICAgKGNvbmpcclxuICAgICAgICAgKC0+ICpjbGpzLWRlcC1zZXQqIG1ldGEgOmRlcC1wYXRoKVxyXG4gICAgICAgICAoc29tZSAqY2xqcy1kZXAtc2V0KiBkZXBzKSkpKSkpXHJcbiAgICAoZG9zZXFcclxuICAgICBbZGVwIGRlcHNdXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIChvclxyXG4gICAgICAgKHNvbWU/IChnZXQtaW4gY29tcGlsZXIgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgZGVwIDpkZWZzXSkpXHJcbiAgICAgICAobm9kZS1tb2R1bGUtZGVwPyBkZXApXHJcbiAgICAgICAoanMtbW9kdWxlLWV4aXN0cz8gKG5hbWUgZGVwKSlcclxuICAgICAgICM/KDpjbGogKGRlcHMvZmluZC1jbGFzc3BhdGgtbGliIGRlcCkpKVxyXG4gICAgICAoaWZcclxuICAgICAgIChjb250YWlucz8gKDpqcy1kZXBlbmRlbmN5LWluZGV4IGNvbXBpbGVyKSAobmFtZSBkZXApKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtkZXAtbmFtZSAobmFtZSBkZXApXVxyXG4gICAgICAgICh3aGVuXHJcbiAgICAgICAgIChzdHJpbmcvc3RhcnRzLXdpdGg/IGRlcC1uYW1lIFwiZ29vZy5cIilcclxuICAgICAgICAgIz8oOmNsaiAobGV0IFtqcy1saWIgKGdldC1pbiBjb21waWxlciBbOmpzLWRlcGVuZGVuY3ktaW5kZXggZGVwLW5hbWVdKSBucyAoZXh0ZXJucy9hbmFseXplLWdvb2ctZmlsZSAoOmZpbGUganMtbGliKSAoc3ltYm9sIGRlcC1uYW1lKSldIChzd2FwISBlbnYvKmNvbXBpbGVyKiB1cGRhdGUtaW4gWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgZGVwXSBtZXJnZSBucykpKSkpXHJcbiAgICAgICAjPyg6Y2xqIChpZi1zb21lIFtzcmMgKGxvY2F0ZS1zcmMgZGVwKV0gKGFuYWx5emUtZmlsZSBzcmMgb3B0cykgKHRocm93IChlcnJvciBlbnYgKGVycm9yLW1lc3NhZ2UgOnVuZGVjbGFyZWQtbnMgezpucy1zeW0gZGVwLCA6anMtcHJvdmlkZSAobmFtZSBkZXApfSkpKSkgOmNsanMgKHRocm93IChlcnJvciBlbnYgKGVycm9yLW1lc3NhZ2UgOnVuZGVjbGFyZWQtbnMgezpucy1zeW0gZGVwLCA6anMtcHJvdmlkZSAobmFtZSBkZXApfSkpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGFycmF5LXR5cGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheS10eXBlP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbdF1cclxuIChjb25kXHJcbiAgKG5pbD8gdClcclxuICB0cnVlXHJcbiAgKD0gJ2Nsai1uaWwgdClcclxuICB0cnVlXHJcbiAgKGpzLXRhZz8gdClcclxuICB0cnVlXHJcbiAgKD0gJ2FueSB0KVxyXG4gIHRydWVcclxuICAoY29udGFpbnM/IGFycmF5LXR5cGVzIHQpXHJcbiAgdHJ1ZVxyXG4gIDplbHNlXHJcbiAgKGJvb2xlYW5cclxuICAgKHdoZW5cclxuICAgICM/KDpjbGogKHNldD8gdCkgOmNsanMgKGNsanMtc2V0PyB0KSlcclxuICAgIChvciAoY29udGFpbnM/IHQgJ2FueSkgKGNvbnRhaW5zPyB0ICdqcykgKHNvbWUgYXJyYXktdHlwZXMgdCkpKSkpKVxyXG4ifSB7OnN5bSBkb3R0ZWQtc3ltYm9sPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb3R0ZWQtc3ltYm9sP1xyXG4gW3N5bV1cclxuIChsZXRcclxuICBbcyAoc3RyIHN5bSldXHJcbiAgIz8oOmNsaiAoYW5kICguY29udGFpbnMgcyBcIi5cIikgKG5vdCAoLmNvbnRhaW5zIHMgXCIuLlwiKSkpIDpjbGpzIChhbmQgKGdvb2cuc3RyaW5nL2NvbnRhaW5zIHMgXCIuXCIpIChub3QgKGdvb2cuc3RyaW5nL2NvbnRhaW5zIHMgXCIuLlwiKSkpKSkpXHJcbiJ9IHs6c3ltICpjbGpzLW1hY3Jvcy1pcy1jbGFzc3BhdGgqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1tYWNyb3MtaXMtY2xhc3NwYXRoKiB0cnVlKVxyXG4ifSB7OnN5bSAqYWxsb3ctcmVkZWYqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqYWxsb3ctcmVkZWYqIGZhbHNlKVxyXG4ifSB7OnN5bSBhbmFseXplLWZuLW1ldGhvZC1ib2R5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtIHJlY3VyLWZyYW1lc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZm4tbWV0aG9kLWJvZHlcclxuIFtlbnYgZm9ybSByZWN1ci1mcmFtZXNdXHJcbiAoYmluZGluZyBbKnJlY3VyLWZyYW1lcyogcmVjdXItZnJhbWVzXSAoYW5hbHl6ZSBlbnYgZm9ybSkpKVxyXG4ifSB7OnN5bSBpbmZlci10eXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB7OmtleXMgW3RhZ10sIDphcyBhc3R9IF9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlci10eXBlXHJcbiBbZW52IHs6a2V5cyBbdGFnXSwgOmFzIGFzdH0gX11cclxuIChpZlxyXG4gIChvciAobmlsPyB0YWcpICg9ICdmdW5jdGlvbiB0YWcpKVxyXG4gIChpZlxyXG4gICAoPSA6Zm4gKDpvcCBhc3QpKVxyXG4gICAodXBkYXRlXHJcbiAgICBhc3RcclxuICAgIDptZXRob2RzXHJcbiAgICAoZm5cclxuICAgICBbbXNdXHJcbiAgICAgKGludG9cclxuICAgICAgW11cclxuICAgICAgKG1hcCAoZm4qIFtwMV9fNDg2NDMjXSAoaW5mZXItdHlwZSBlbnYgcDFfXzQ4NjQzIyBfKSkpXHJcbiAgICAgIG1zKSkpXHJcbiAgIChpZi1zb21lIFt0YWcgKGluZmVyLXRhZyBlbnYgYXN0KV0gKGFzc29jIGFzdCA6dGFnIHRhZykgYXN0KSlcclxuICBhc3QpKVxyXG4ifSB7OnN5bSBwYXJzZS1pbXBvcnQtc3BlYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZGVwcyBzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtaW1wb3J0LXNwZWNcclxuIFtlbnYgZGVwcyBzcGVjXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yXHJcbiAgIChhbmQgKHNlcXVlbnRpYWw/IHNwZWMpIChldmVyeT8gc3ltYm9sPyBzcGVjKSlcclxuICAgKGFuZCAoc3ltYm9sPyBzcGVjKSAobmlsPyAobmFtZXNwYWNlIHNwZWMpKSkpXHJcbiAgKHRocm93XHJcbiAgIChlcnJvclxyXG4gICAgZW52XHJcbiAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgc3BlY1xyXG4gICAgIFwiT25seSBsaWIubnMuQ3RvciBvciBbbGliLm5zIEN0b3IqXSBzcGVjIHN1cHBvcnRlZCBpbiA6aW1wb3J0XCIpKSkpXHJcbiAobGV0XHJcbiAgW2ltcG9ydC1tYXBcclxuICAgKGNvbmRcclxuICAgIChzZXF1ZW50aWFsPyBzcGVjKVxyXG4gICAgKC0+PlxyXG4gICAgIChyZXN0IHNwZWMpXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4NjIwI11cclxuICAgICAgICh2ZWN0b3IgcDFfXzQ4NjIwIyAoc3ltYm9sIChzdHIgKGZpcnN0IHNwZWMpIFwiLlwiIHAxX180ODYyMCMpKSkpKVxyXG4gICAgIChpbnRvIHt9KSlcclxuICAgIChub3QgKD09IC0xICguaW5kZXhPZiAoc3RyIHNwZWMpIFwiLlwiKSkpXHJcbiAgICB7KHN5bWJvbCAobGFzdCAoc3RyaW5nL3NwbGl0IChzdHIgc3BlYykgI1wiXFwuXCIpKSkgc3BlY31cclxuICAgIDplbHNlXHJcbiAgICB7fSldXHJcbiAgKGRvc2VxIFtbXyBzcGVjXSBpbXBvcnQtbWFwXSAoc3dhcCEgZGVwcyBjb25qIHNwZWMpKVxyXG4gIHs6aW1wb3J0IGltcG9ydC1tYXAsIDpyZXF1aXJlIGltcG9ydC1tYXB9KSlcclxuIn0gezpzeW0gY2xqLW5zLT5jbGpzLW5zLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzeW1ib2wgdGhhdCBzdGFydHMgd2l0aCBjbG9qdXJlIGFzIHRoZSBmaXJzdCBzZWdtZW50IHJldHVybiB0aGVcbiAgIHNhbWUgc3ltYm9sIHdpdGggdGhlIGZpcnN0IHNlZ21lbnQgcmVwbGFjZWQgd2l0aCBjbGpzIiwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xqLW5zLT5jbGpzLW5zXHJcbiBcIkdpdmVuIGEgc3ltYm9sIHRoYXQgc3RhcnRzIHdpdGggY2xvanVyZSBhcyB0aGUgZmlyc3Qgc2VnbWVudCByZXR1cm4gdGhlXFxuICAgc2FtZSBzeW1ib2wgd2l0aCB0aGUgZmlyc3Qgc2VnbWVudCByZXBsYWNlZCB3aXRoIGNsanNcIlxyXG4gW3N5bV1cclxuIChsZXRcclxuICBbc2VncyAoc3RyaW5nL3NwbGl0IChjbG9qdXJlLmNvcmUvbmFtZSBzeW0pICNcIlxcLlwiKV1cclxuICAoaWZcclxuICAgKD0gXCJjbG9qdXJlXCIgKGZpcnN0IHNlZ3MpKVxyXG4gICAoc3ltYm9sIChzdHJpbmcvam9pbiBcIi5cIiAoY29ucyBcImNsanNcIiAobmV4dCBzZWdzKSkpKVxyXG4gICBzeW0pKSlcclxuIn0gezpzeW0gY29uc3RhbnQtdmFsdWU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbb3BdLCA6YXMgYXN0fV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnN0YW50LXZhbHVlP1xyXG4gW3s6a2V5cyBbb3BdLCA6YXMgYXN0fV1cclxuIChvclxyXG4gICgjezpjb25zdCA6cXVvdGV9IG9wKVxyXG4gIChhbmRcclxuICAgKCN7OnZlY3RvciA6c2V0IDptYXB9IG9wKVxyXG4gICAoZXZlcnk/IGNvbnN0YW50LXZhbHVlPyAoYXN0LWNoaWxkcmVuIGFzdCkpKSkpXHJcbiJ9IHs6c3ltIGR1bXAtc3BlY3MsIDptZXRhIHs6ZG9jICJEdW1wcyByZWdpc3RlcmVkIHNwZWNlZCB2YXJzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSBpbnRvIHRoZSBjb21waWxlclxuICBlbnZpcm9ubWVudC4iLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGR1bXAtc3BlY3NcclxuIFwiRHVtcHMgcmVnaXN0ZXJlZCBzcGVjZWQgdmFycyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UgaW50byB0aGUgY29tcGlsZXJcXG4gIGVudmlyb25tZW50LlwiXHJcbiBbbnNdXHJcbiAobGV0XHJcbiAgW3NwZWMtdmFycyAoZ2V0LXNwZWMtdmFycykgbnMtc3RyIChzdHIgbnMpXVxyXG4gIChzd2FwIVxyXG4gICBlbnYvKmNvbXBpbGVyKlxyXG4gICB1cGRhdGUtaW5cclxuICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnNdXHJcbiAgIG1lcmdlXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3JlZ2lzdHJ5LXJlZiAoOnJlZ2lzdHJ5LXJlZiBzcGVjLXZhcnMpXVxyXG4gICAgezpjbGpzLnNwZWMvcmVnaXN0cnktcmVmXHJcbiAgICAgKGludG9cclxuICAgICAgW11cclxuICAgICAgKGZpbHRlciAoZm4gW1trIF9dXSAoPSBucy1zdHIgKG5hbWVzcGFjZSBrKSkpKVxyXG4gICAgICBAQHJlZ2lzdHJ5LXJlZil9KVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzcGVjZWQtdmFycyAoOnNwZWNlZC12YXJzIHNwZWMtdmFycyldXHJcbiAgICB7OmNsanMuc3BlYy9zcGVjZWQtdmFyc1xyXG4gICAgIChpbnRvXHJcbiAgICAgIFtdXHJcbiAgICAgIChmaWx0ZXJcclxuICAgICAgIChmblxyXG4gICAgICAgIFt2XVxyXG4gICAgICAgIChvciAoPSBucy1zdHIgKG5hbWVzcGFjZSB2KSkgKD0gbnMgKC0+IHYgbWV0YSA6ZmRlZi1ucykpKSkpXHJcbiAgICAgIEBAc3BlY2VkLXZhcnMpfSkpKSlcclxuIn0gezpzeW0gKmZuLWludm9rZS1kaXJlY3QqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZm4taW52b2tlLWRpcmVjdCogZmFsc2UpXHJcbiJ9IHs6c3ltIHVzZS0+cmVxdWlyZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgW2xpYiAmIGZpbHRlcnMgOmFzIHNwZWNdXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXNlLT5yZXF1aXJlXHJcbiBbZW52IFtsaWIgJiBmaWx0ZXJzIDphcyBzcGVjXV1cclxuICh3aGVuLW5vdFxyXG4gIChhbmQgKHN5bWJvbD8gbGliKSAob2RkPyAoY291bnQgc3BlYykpKVxyXG4gICh0aHJvd1xyXG4gICAoZXJyb3JcclxuICAgIGVudlxyXG4gICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgIHNwZWNcclxuICAgICBcIk9ubHkgW2xpYi5ucyA6b25seSAobmFtZXMpXSBhbmQgb3B0aW9uYWxseSBgOnJlbmFtZSB7ZnJvbSB0b31gIHNwZWNzIHN1cHBvcnRlZCBpbiA6dXNlIC8gOnVzZS1tYWNyb3NcIikpKSlcclxuIChsb29wXHJcbiAgW2ZzIChzZXEgZmlsdGVycykgcmV0IFtsaWJdIGVyciBmYWxzZV1cclxuICAoY29uZFxyXG4gICAodHJ1ZT8gZXJyKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvclxyXG4gICAgIGVudlxyXG4gICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgc3BlY1xyXG4gICAgICBcIk9ubHkgW2xpYi5ucyA6b25seSAobmFtZXMpXSBhbmQgb3B0aW9uYWxseSBgOnJlbmFtZSB7ZnJvbSB0b31gIHNwZWNzIHN1cHBvcnRlZCBpbiA6dXNlIC8gOnVzZS1tYWNyb3NcIikpKVxyXG4gICAoc29tZT8gZnMpXHJcbiAgIChsZXRcclxuICAgIFtrdyAoZmlyc3QgZnMpIG9ubHk/ICg9IGt3IDpvbmx5KV1cclxuICAgIChpZlxyXG4gICAgIChvciBvbmx5PyAoPSBrdyA6cmVuYW1lKSlcclxuICAgICAoaWZcclxuICAgICAgKHNvbWU/IChzb21lICN7KGlmIG9ubHk/IDpyZWZlciBrdyl9IHJldCkpXHJcbiAgICAgICh0aHJvd1xyXG4gICAgICAgKGVycm9yXHJcbiAgICAgICAgZW52XHJcbiAgICAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICAgICBzcGVjXHJcbiAgICAgICAgIFwiRWFjaCBvZiA6b25seSBhbmQgOnJlbmFtZSBvcHRpb25zIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIGluIDp1c2UgLyA6dXNlLW1hY3Jvc1wiKSkpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtyZWZzIChzZWNvbmQgZnMpXVxyXG4gICAgICAgKGlmLW5vdFxyXG4gICAgICAgIChvclxyXG4gICAgICAgICAoYW5kIG9ubHk/IChzZXF1ZW50aWFsPyByZWZzKSAoZXZlcnk/IHN5bWJvbD8gcmVmcykpXHJcbiAgICAgICAgIChhbmRcclxuICAgICAgICAgICg9IGt3IDpyZW5hbWUpXHJcbiAgICAgICAgICAobWFwPyByZWZzKVxyXG4gICAgICAgICAgKGV2ZXJ5P1xyXG4gICAgICAgICAgIChmbiogW3AxX180ODYxOSNdIChldmVyeT8gc3ltYm9sPyBwMV9fNDg2MTkjKSlcclxuICAgICAgICAgICByZWZzKSkpXHJcbiAgICAgICAgKHJlY3VyIGZzIHJldCB0cnVlKVxyXG4gICAgICAgIChyZWN1clxyXG4gICAgICAgICAobm5leHQgZnMpXHJcbiAgICAgICAgIChpbnRvIHJldCBbKGlmIG9ubHk/IDpyZWZlciBrdykgcmVmc10pXHJcbiAgICAgICAgIGZhbHNlKSkpKVxyXG4gICAgIChyZWN1ciBmcyByZXQgdHJ1ZSkpKVxyXG4gICA6ZWxzZVxyXG4gICAoaWYgKHNvbWU/IChzb21lICN7OnJlZmVyfSByZXQpKSByZXQgKHJlY3VyIGZzIHJldCB0cnVlKSkpKSlcclxuIn0gezpzeW0gaW5mZXJyZWQtdXNlLW1hY3JvcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt1c2UtbWFjcm9zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVycmVkLXVzZS1tYWNyb3NcclxuIFt1c2UtbWFjcm9zIGVudl1cclxuIChsZXRcclxuICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgKGludG9cclxuICAge31cclxuICAgKGZpbHRlclxyXG4gICAgKGZuIFtbc3ltIGxpYl1dIChub3QgKG1pc3NpbmctdXNlLW1hY3JvPyBsaWIgc3ltKSkpXHJcbiAgICB1c2UtbWFjcm9zKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLXN5bWJvbCwgOm1ldGEgezpkb2MgIkZpbmRzIHRoZSB2YXIgYXNzb2NpYXRlZCB3aXRoIHN5bSIsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXN5bWJvbFxyXG4gXCJGaW5kcyB0aGUgdmFyIGFzc29jaWF0ZWQgd2l0aCBzeW1cIlxyXG4gW2VudiBzeW1dXHJcbiAoaWZcclxuICAoOnF1b3RlZD8gZW52KVxyXG4gIChkb1xyXG4gICAocmVnaXN0ZXItY29uc3RhbnQhIGVudiBzeW0pXHJcbiAgIChhbmFseXplLXdyYXAtbWV0YVxyXG4gICAgezpvcCA6Y29uc3QsXHJcbiAgICAgOnZhbCBzeW0sXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gc3ltLFxyXG4gICAgIDp0YWcgJ2NsanMuY29yZS9TeW1ib2x9KSlcclxuICAobGV0XHJcbiAgIFt7OmtleXMgW2xpbmUgY29sdW1uXX1cclxuICAgIChtZXRhIHN5bSlcclxuICAgIGVudlxyXG4gICAgKGlmLW5vdCAobmlsPyBsaW5lKSAoYXNzb2MgZW52IDpsaW5lIGxpbmUpIGVudilcclxuICAgIGVudlxyXG4gICAgKGlmLW5vdCAobmlsPyBjb2x1bW4pIChhc3NvYyBlbnYgOmNvbHVtbiBjb2x1bW4pIGVudilcclxuICAgIHJldFxyXG4gICAgezplbnYgZW52LCA6Zm9ybSBzeW19XHJcbiAgICBsY2xzXHJcbiAgICAoOmxvY2FscyBlbnYpXVxyXG4gICAoaWYtc29tZVxyXG4gICAgW2xiIChoYW5kbGUtc3ltYm9sLWxvY2FsIHN5bSAoZ2V0IGxjbHMgc3ltKSldXHJcbiAgICAobWVyZ2VcclxuICAgICAoYXNzb2MgcmV0IDpvcCA6bG9jYWwgOmluZm8gbGIpXHJcbiAgICAgKHdoZW5cclxuICAgICAgKG1hcD8gbGIpXHJcbiAgICAgIChzZWxlY3Qta2V5cyBsYiBbOm5hbWUgOmxvY2FsIDphcmctaWQgOnZhcmlhZGljPyA6aW5pdF0pKSlcclxuICAgIChsZXRcclxuICAgICBbc3ltLW1ldGFcclxuICAgICAgKG1ldGEgc3ltKVxyXG4gICAgICBzeW0tbnNcclxuICAgICAgKG5hbWVzcGFjZSBzeW0pXHJcbiAgICAgIGN1ci1uc1xyXG4gICAgICAoc3RyICgtPiBlbnYgOm5zIDpuYW1lKSlcclxuICAgICAgIz9AKDpjbGpzIFtzeW0gKGlmIChhbmQgc3ltLW5zIChub3Q9IHN5bS1ucyBcImNsanMuY29yZVwiKSAoZ3N0cmluZy9lbmRzV2l0aCBjdXItbnMgXCIkbWFjcm9zXCIpIChub3QgKGdzdHJpbmcvZW5kc1dpdGggc3ltLW5zIFwiJG1hY3Jvc1wiKSkgKD0gc3ltLW5zIChzdWJzIGN1ci1ucyAwICgtIChjb3VudCBjdXItbnMpIDcpKSkpIChzeW1ib2wgKHN0ciBzeW0tbnMgXCIkbWFjcm9zXCIpIChuYW1lIHN5bSkpIHN5bSldKVxyXG4gICAgICBpbmZvXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgIChjb250YWlucz8gc3ltLW1ldGEgOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQpXHJcbiAgICAgICAocmVzb2x2ZS1leGlzdGluZy12YXIgZW52IHN5bSlcclxuICAgICAgIChyZXNvbHZlLXZhciBlbnYgc3ltKSldXHJcbiAgICAgKGFzc2VydCAoOm9wIGluZm8pICg6b3AgaW5mbykpXHJcbiAgICAgKGRlc3VnYXItZG90dGVkLWV4cHJcclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKHRydWU/ICg6ZGVmLXZhciBlbnYpKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgKGFzc29jIHJldCA6aW5mbyBpbmZvKVxyXG4gICAgICAgIChzZWxlY3Qta2V5cyBpbmZvIFs6b3AgOm5hbWUgOm5zIDp0YWddKVxyXG4gICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgICBbY29uc3QtZXhwciAoOmNvbnN0LWV4cHIgaW5mbyldXHJcbiAgICAgICAgIHs6Y29uc3QtZXhwciBjb25zdC1leHByfSkpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW2luZm8gKHJlc29sdmUtdmFyIGVudiBzeW0pXVxyXG4gICAgICAgIChtZXJnZVxyXG4gICAgICAgICAoYXNzb2MgcmV0IDpvcCA6dmFyIDppbmZvIGluZm8pXHJcbiAgICAgICAgIChzZWxlY3Qta2V5cyBpbmZvIFs6b3AgOm5hbWUgOm5zIDp0YWddKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBjb25maXJtLXZhci1leGlzdHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52IHByZWZpeCBzdWZmaXhdIFtlbnYgcHJlZml4IHN1ZmZpeCBtaXNzaW5nLWZuXV19LCA6c291cmNlICIoZGVmblxyXG4gY29uZmlybS12YXItZXhpc3RzXHJcbiAoW2VudiBwcmVmaXggc3VmZml4XVxyXG4gIChsZXRcclxuICAgW3dhcm4gKGNvbmZpcm0tdmFyLWV4aXN0LXdhcm5pbmcgZW52IHByZWZpeCBzdWZmaXgpXVxyXG4gICAoY29uZmlybS12YXItZXhpc3RzIGVudiBwcmVmaXggc3VmZml4IHdhcm4pKSlcclxuIChbZW52IHByZWZpeCBzdWZmaXggbWlzc2luZy1mbl1cclxuICAobGV0XHJcbiAgIFtzdWZzdHJcclxuICAgIChzdHIgc3VmZml4KVxyXG4gICAgc3VmZml4LXN0clxyXG4gICAgKGlmXHJcbiAgICAgKGFuZFxyXG4gICAgICAjPyg6Y2xqIChub3Q9IFwiLi5cIiBzdWZzdHIpIDpjbGpzIChub3QgKGlkZW50aWNhbD8gXCIuLlwiIHN1ZnN0cikpKVxyXG4gICAgICAjPyg6Y2xqIChyZS1maW5kICNcIlxcLlwiIHN1ZnN0cikgOmNsanMgKC50ZXN0ICNcIlxcLlwiIHN1ZnN0cikpKVxyXG4gICAgIChmaXJzdCAoc3RyaW5nL3NwbGl0IHN1ZnN0ciAjXCJcXC5cIikpXHJcbiAgICAgc3VmZml4KVxyXG4gICAgc3VmZml4XHJcbiAgICAoc3ltYm9sIHN1ZmZpeC1zdHIpXVxyXG4gICAod2hlblxyXG4gICAgKGFuZFxyXG4gICAgIChub3QgKGltcGxpY2l0LWltcG9ydD8gZW52IHByZWZpeCBzdWZmaXgpKVxyXG4gICAgIChub3QgKGxvYWRlZC1qcy1ucz8gZW52IHByZWZpeCkpXHJcbiAgICAgKG5vdCAoYW5kICg9ICdjbGpzLmNvcmUgcHJlZml4KSAoPSAndW5xdW90ZSBzdWZmaXgpKSlcclxuICAgICAobmlsP1xyXG4gICAgICAoZ2V0c1xyXG4gICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICBwcmVmaXhcclxuICAgICAgIDpkZWZzXHJcbiAgICAgICBzdWZmaXgpKVxyXG4gICAgIChub3QgKGpzLW1vZHVsZS1leGlzdHM/IHByZWZpeCkpKVxyXG4gICAgKG1pc3NpbmctZm4gZW52IHByZWZpeCBzdWZmaXgpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWtleXdvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUta2V5d29yZFxyXG4gW2VudiBzeW1dXHJcbiAocmVnaXN0ZXItY29uc3RhbnQhIGVudiBzeW0pXHJcbiB7Om9wIDpjb25zdCwgOnZhbCBzeW0sIDplbnYgZW52LCA6Zm9ybSBzeW0sIDp0YWcgJ2NsanMuY29yZS9LZXl3b3JkfSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQtYmluZGluZ3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW5jbC1lbnYgYmluZGluZ3Mgb3BdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldC1iaW5kaW5nc1xyXG4gW2VuY2wtZW52IGJpbmRpbmdzIG9wXVxyXG4gKGRpc2FsbG93aW5nLXJlY3VyIChhbmFseXplLWxldC1iaW5kaW5ncyogZW5jbC1lbnYgYmluZGluZ3Mgb3ApKSlcclxuIn0gezpzeW0gbXVuZ2UtZ2xvYmFsLWV4cG9ydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2UtZ2xvYmFsLWV4cG9ydFxyXG4gW25hbWVdXHJcbiAoc3RyXHJcbiAgXCJnbG9iYWwkbW9kdWxlJFwiXHJcbiAgKG11bmdlXHJcbiAgIChzdHJpbmcvcmVwbGFjZSAoc3RyIG5hbWUpICNcIlsuXFwvXVwiICM/KDpjbGogXCJcXFxcJFwiIDpjbGpzIFwiJCRcIikpKSkpXHJcbiJ9IHs6c3ltICpsb29wLWxldHMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbG9vcC1sZXRzKiAoKSlcclxuIn0gezpzeW0gLT50eXBlLXNldCwgOm1ldGEgezpkb2MgIkVuc3VyZXMgdGhhdCBhIHR5cGUgdGFnIGlzIGEgc2V0LiIsIDphcmdsaXN0cyAoW3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiAtPnR5cGUtc2V0XHJcbiBcIkVuc3VyZXMgdGhhdCBhIHR5cGUgdGFnIGlzIGEgc2V0LlwiXHJcbiBbdF1cclxuIChpZiAjPyg6Y2xqIChzZXQ/IHQpIDpjbGpzIChjbGpzLXNldD8gdCkpIHQgI3t0fSkpXHJcbiJ9IHs6c3ltIGpzLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1twcmVdIFtwcmUgdGFnLXR5cGVdIFtwcmUgdGFnLXR5cGUgZXh0ZXJuc10gW3ByZSB0YWctdHlwZSBleHRlcm5zIHRvcF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLXRhZ1xyXG4gKFtwcmVdIChqcy10YWcgcHJlIDp0YWcpKVxyXG4gKFtwcmUgdGFnLXR5cGVdIChqcy10YWcgcHJlIHRhZy10eXBlIChnZXQtZXh0ZXJucykpKVxyXG4gKFtwcmUgdGFnLXR5cGUgZXh0ZXJuc10gKGpzLXRhZyBwcmUgdGFnLXR5cGUgZXh0ZXJucyBleHRlcm5zKSlcclxuIChbcHJlIHRhZy10eXBlIGV4dGVybnMgdG9wXVxyXG4gICh3aGVuLWxldFxyXG4gICBbW3AgZXh0ZXJucycgOmFzIG1lXSAoZmluZCBleHRlcm5zIChmaXJzdCBwcmUpKV1cclxuICAgKGxldFxyXG4gICAgW3RhZyAoLT4gcCBtZXRhIHRhZy10eXBlKV1cclxuICAgIChpZlxyXG4gICAgICg9IChjb3VudCBwcmUpIDEpXHJcbiAgICAgKHdoZW4gdGFnIChzeW1ib2wgXCJqc1wiIChzdHIgKGFsaWFzLT50eXBlIHRhZyB0YWcpKSkpXHJcbiAgICAgKG9yXHJcbiAgICAgIChqcy10YWcgKG5leHQgcHJlKSB0YWctdHlwZSBleHRlcm5zJyB0b3ApXHJcbiAgICAgIChqcy10YWdcclxuICAgICAgIChpbnRvICdbcHJvdG90eXBlXSAobmV4dCBwcmUpKVxyXG4gICAgICAgdGFnLXR5cGVcclxuICAgICAgIChnZXQgdG9wIHRhZylcclxuICAgICAgIHRvcCkpKSkpKSlcclxuIn0gezpzeW0ganMtcmVzZXJ2ZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBqcy1yZXNlcnZlZFxyXG4gI3tcInR5cGVvZlwiIFwiZmxvYXRcIiBcImltcGxlbWVudHNcIiBcImVsc2VcIiBcImJvb2xlYW5cIiBcImFic3RyYWN0XCIgXCJpbnRcIlxyXG4gICBcInN0YXRpY1wiIFwicGFja2FnZVwiIFwidGhpc1wiIFwiYXdhaXRcIiBcInlpZWxkXCIgXCJpbnRlcmZhY2VcIiBcInZvaWRcIlxyXG4gICBcImRlbGV0ZVwiIFwiY2xhc3NcIiBcImV4cG9ydFwiIFwidmFyXCIgXCJ0cnlcIiBcImxvbmdcIiBcIm51bGxcIiBcInJldHVyblwiXHJcbiAgIFwibWV0aG9kc1wiIFwibmF0aXZlXCIgXCJwcml2YXRlXCIgXCJuZXdcIiBcImZvclwiIFwiY2F0Y2hcIiBcImV4dGVuZHNcIiBcInNob3J0XCJcclxuICAgXCJwcm90ZWN0ZWRcIiBcInRocm93c1wiIFwic3luY2hyb25pemVkXCIgXCJ0cmFuc2llbnRcIiBcInN1cGVyXCIgXCJpZlwiIFwibGV0XCJcclxuICAgXCJpbXBvcnRcIiBcImNoYXJcIiBcInN3aXRjaFwiIFwiY29uc3RcIiBcImNhc2VcIiBcImJyZWFrXCIgXCJ2b2xhdGlsZVwiXHJcbiAgIFwiZnVuY3Rpb25cIiBcImNvbnRpbnVlXCIgXCJmaW5hbFwiIFwiZG9cIiBcImRvdWJsZVwiIFwid2hpbGVcIiBcInB1YmxpY1wiXHJcbiAgIFwiYXJndW1lbnRzXCIgXCJkZWJ1Z2dlclwiIFwid2l0aFwiIFwiaW5zdGFuY2VvZlwiIFwiZGVmYXVsdFwiIFwidGhyb3dcIiBcImdvdG9cIlxyXG4gICBcImZpbmFsbHlcIiBcImJ5dGVcIiBcImNvbnN0cnVjdG9yXCIgXCJpblwiIFwiZW51bVwifSlcclxuIn0gezpzeW0gKmxvYWQtdGVzdHMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbG9hZC10ZXN0cyogdHJ1ZSlcclxuIn0gezpzeW0gY2hlY2stdXNlLW1hY3Jvcy1pbmZlcnJpbmctbWlzc2luZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW25hbWUgdXNlcyB1c2UtbWFjcm9zXSwgOmFzIGFzdH0gZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stdXNlLW1hY3Jvcy1pbmZlcnJpbmctbWlzc2luZ1xyXG4gW3s6a2V5cyBbbmFtZSB1c2VzIHVzZS1tYWNyb3NdLCA6YXMgYXN0fSBlbnZdXHJcbiAobGV0XHJcbiAgW21pc3NpbmctdXNlc1xyXG4gICAod2hlbiAoYW5kICphbmFseXplLWRlcHMqIChzZXEgdXNlcykpIChtaXNzaW5nLXVzZXMgdXNlcyBlbnYpKVxyXG4gICBtYXliZS1tYWNyb3NcclxuICAgKGFwcGx5IGRpc3NvYyB1c2VzIChrZXlzIG1pc3NpbmctdXNlcykpXHJcbiAgIHJlbW92ZS1taXNzaW5nLXVzZXNcclxuICAgKGZuKiBbcDFfXzQ4NjEyI10gKGFwcGx5IGRpc3NvYyBwMV9fNDg2MTIjIChrZXlzIG1pc3NpbmctdXNlcykpKVxyXG4gICBhc3QnXHJcbiAgICgtPlxyXG4gICAgYXN0XHJcbiAgICAodXBkYXRlLWluXHJcbiAgICAgWzp1c2UtbWFjcm9zXVxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180ODYxMyNdXHJcbiAgICAgICgtPlxyXG4gICAgICAgcDFfXzQ4NjEzI1xyXG4gICAgICAgKG1lcmdlIChjaGVjay11c2UtbWFjcm9zIHVzZS1tYWNyb3MgbWlzc2luZy11c2VzIGVudikpXHJcbiAgICAgICAobWVyZ2UgKGluZmVycmVkLXVzZS1tYWNyb3MgbWF5YmUtbWFjcm9zIGVudikpKSkpXHJcbiAgICAodXBkYXRlLWluIFs6dXNlc10gcmVtb3ZlLW1pc3NpbmctdXNlcykpXVxyXG4gIChzd2FwIVxyXG4gICBlbnYvKmNvbXBpbGVyKlxyXG4gICAoZm4qXHJcbiAgICBbcDFfXzQ4NjE0I11cclxuICAgICgtPlxyXG4gICAgIHAxX180ODYxNCNcclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5hbWUgOnVzZS1tYWNyb3NdXHJcbiAgICAgIG1lcmdlXHJcbiAgICAgICg6dXNlLW1hY3JvcyBhc3QnKSlcclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5hbWUgOnVzZXNdXHJcbiAgICAgIHJlbW92ZS1taXNzaW5nLXVzZXMpKSkpXHJcbiAgYXN0JykpXHJcbiJ9IHs6c3ltIGNhbm9uaWNhbGl6ZS10eXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW5vbmljYWxpemUtdHlwZVxyXG4gW3RdXHJcbiBcIkVuc3VyZXMgdGhhdCBhIHR5cGUgdGFnIGlzIGVpdGhlciBuaWwsIGEgdHlwZSBzeW1ib2wsIG9yIGEgbm9uLXNpbmdsZXRvblxcbiAgc2V0IG9mIHR5cGUgc3ltYm9scywgYWJzb3JiaW5nIGNsai1uaWwgaW50byBzZXEgYW5kIGFsbCB0eXBlcyBpbnRvIGFueS5cIlxyXG4gKGNvbmRcclxuICAoc3ltYm9sPyB0KVxyXG4gIHRcclxuICAoZW1wdHk/IHQpXHJcbiAgbmlsXHJcbiAgKD09IDEgKGNvdW50IHQpKVxyXG4gIChmaXJzdCB0KVxyXG4gIChjb250YWlucz8gdCAnYW55KVxyXG4gICdhbnlcclxuICAoY29udGFpbnM/IHQgJ3NlcSlcclxuICAobGV0IFtyZXMgKGRpc2ogdCAnY2xqLW5pbCldIChpZiAoPT0gMSAoY291bnQgcmVzKSkgJ3NlcSByZXMpKVxyXG4gIDplbHNlXHJcbiAgdCkpXHJcbiJ9IHs6c3ltIG1hY3JvZXhwYW5kLTEqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFjcm9leHBhbmQtMSpcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbb3AgKGZpcnN0IGZvcm0pXVxyXG4gIChpZlxyXG4gICAoY29udGFpbnM/IHNwZWNpYWxzIG9wKVxyXG4gICAoZG9cclxuICAgICh3aGVuXHJcbiAgICAgKD0gJ25zIG9wKVxyXG4gICAgIChkby1tYWNyb2V4cGFuZC1jaGVja1xyXG4gICAgICBlbnZcclxuICAgICAgZm9ybVxyXG4gICAgICAoZ2V0LWV4cGFuZGVyICdjbGpzLmNvcmUvbnMtc3BlY2lhbC1mb3JtIGVudikpKVxyXG4gICAgZm9ybSlcclxuICAgKGlmLXNvbWVcclxuICAgIFttYWMtdmFyICh3aGVuIChzeW1ib2w/IG9wKSAoZ2V0LWV4cGFuZGVyIG9wIGVudikpXVxyXG4gICAgKCM/QCg6Y2xqIFtiaW5kaW5nIFsqbnMqIChjcmVhdGUtbnMgKmNsanMtbnMqKV1dIDpjbGpzIFtkb10pXHJcbiAgICAgKGRvLW1hY3JvZXhwYW5kLWNoZWNrIGVudiBmb3JtIG1hYy12YXIpXHJcbiAgICAgKGxldFxyXG4gICAgICBbZm9ybSdcclxuICAgICAgICh0cnlcclxuICAgICAgICAjPyg6Y2xqcyAoY2hlY2stbWFjcm8tYXJpdHkgbWFjLXZhciBmb3JtKSlcclxuICAgICAgICAoYXBwbHkgQG1hYy12YXIgZm9ybSBlbnYgKHJlc3QgZm9ybSkpXHJcbiAgICAgICAgIz8oOmNsaiAoY2F0Y2ggQXJpdHlFeGNlcHRpb24gZSAodGhyb3cgKEFyaXR5RXhjZXB0aW9uLiAoLSAoLmFjdHVhbCBlKSAyKSAoLm5hbWUgZSkpKSkpXHJcbiAgICAgICAgKGNhdGNoXHJcbiAgICAgICAgICM/KDpjbGogVGhyb3dhYmxlIDpjbGpzIDpkZWZhdWx0KVxyXG4gICAgICAgICBlXHJcbiAgICAgICAgICh0aHJvd1xyXG4gICAgICAgICAgKGV4LWluZm9cclxuICAgICAgICAgICBuaWxcclxuICAgICAgICAgICAoZXJyb3ItZGF0YSBlbnYgOm1hY3JvZXhwYW5zaW9uICh2YXItPnN5bSBtYWMtdmFyKSlcclxuICAgICAgICAgICBlKSkpKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAjPyg6Y2xqIChzZXE/IGZvcm0nKSA6Y2xqcyAoY2xqcy1zZXE/IGZvcm0nKSlcclxuICAgICAgIChsZXRcclxuICAgICAgICBbc3ltJyAoZmlyc3QgZm9ybScpIHN5bSAoZmlyc3QgZm9ybSldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICM/KDpjbGogKD0gc3ltJyAocXVvdGUganMqKSkgOmNsanMgKHN5bWJvbC1pZGVudGljYWw/IHN5bScgSlNfU1RBUl9TWU0pKVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbc3ltXHJcbiAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgIChzb21lPyAobmFtZXNwYWNlIHN5bSkpXHJcbiAgICAgICAgICAgIHN5bVxyXG4gICAgICAgICAgICAoc3ltYm9sIFwiY2xqcy5jb3JlXCIgKHN0ciBzeW0pKSlcclxuICAgICAgICAgICBqcy1vcFxyXG4gICAgICAgICAgIHs6anMtb3Agc3ltfVxyXG4gICAgICAgICAgIG51bWVyaWNcclxuICAgICAgICAgICAjPyg6Y2xqICgtPiBtYWMtdmFyIG1ldGEgOmNsanMuYW5hbHl6ZXIvbnVtZXJpYykgOmNsanMgKGxldCBbbWFjLXZhci1ucyAoc3ltYm9sIChuYW1lc3BhY2UgKC4tc3ltIG1hYy12YXIpKSkgbWFjLXZhci1uYW1lIChzeW1ib2wgKG5hbWUgKC4tc3ltIG1hYy12YXIpKSldIChnZXQtaW4gKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbWFjLXZhci1ucyA6ZGVmcyBtYWMtdmFyLW5hbWUgOm1ldGEgOmNsanMuYW5hbHl6ZXIvbnVtZXJpY10pKSlcclxuICAgICAgICAgICBqcy1vcFxyXG4gICAgICAgICAgIChpZiAodHJ1ZT8gbnVtZXJpYykgKGFzc29jIGpzLW9wIDpudW1lcmljIHRydWUpIGpzLW9wKV1cclxuICAgICAgICAgICh2YXJ5LW1ldGEgZm9ybScgbWVyZ2UganMtb3ApKVxyXG4gICAgICAgICBmb3JtJykpXHJcbiAgICAgICBmb3JtJykpKVxyXG4gICAgKGlmXHJcbiAgICAgKHN5bWJvbD8gb3ApXHJcbiAgICAgKGxldFxyXG4gICAgICBbb3BuYW1lIChzdHIgb3ApXVxyXG4gICAgICAoY29uZFxyXG4gICAgICAgKGlkZW50aWNhbD8gXFwuICM/KDpjbGogKGZpcnN0IG9wbmFtZSkgOmNsanMgKC5jaGFyQXQgb3BuYW1lIDApKSlcclxuICAgICAgIChsZXRcclxuICAgICAgICBbW3RhcmdldCAmIGFyZ3NdIChuZXh0IGZvcm0pXVxyXG4gICAgICAgICh3aXRoLW1ldGFcclxuICAgICAgICAgKGxpc3QqXHJcbiAgICAgICAgICAjPyg6Y2xqIChxdW90ZSAuKSA6Y2xqcyBET1RfU1lNKVxyXG4gICAgICAgICAgdGFyZ2V0XHJcbiAgICAgICAgICAoc3ltYm9sIChzdWJzIG9wbmFtZSAxKSlcclxuICAgICAgICAgIGFyZ3MpXHJcbiAgICAgICAgIChtZXRhIGZvcm0pKSlcclxuICAgICAgIChpZGVudGljYWw/XHJcbiAgICAgICAgXFwuXHJcbiAgICAgICAgIz8oOmNsaiAobGFzdCBvcG5hbWUpIDpjbGpzICguY2hhckF0IG9wbmFtZSAoZGVjICguIG9wbmFtZSAtbGVuZ3RoKSkpKSlcclxuICAgICAgICh3aXRoLW1ldGFcclxuICAgICAgICAobGlzdCpcclxuICAgICAgICAgIz8oOmNsaiAocXVvdGUgbmV3KSA6Y2xqcyBORVdfU1lNKVxyXG4gICAgICAgICAoc3ltYm9sIChzdWJzIG9wbmFtZSAwIChkZWMgKGNvdW50IG9wbmFtZSkpKSlcclxuICAgICAgICAgKG5leHQgZm9ybSkpXHJcbiAgICAgICAgKG1ldGEgZm9ybSkpXHJcbiAgICAgICA6ZWxzZVxyXG4gICAgICAgZm9ybSkpXHJcbiAgICAgZm9ybSkpKSkpXHJcbiJ9IHs6c3ltIGNoZWNrLXVzZS1tYWNyb3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbdXNlLW1hY3JvcyBlbnZdIFt1c2UtbWFjcm9zIG1pc3NpbmctdXNlcyBlbnZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay11c2UtbWFjcm9zXHJcbiAoW3VzZS1tYWNyb3MgZW52XSAoY2hlY2stdXNlLW1hY3JvcyB1c2UtbWFjcm9zIG5pbCBlbnYpKVxyXG4gKFt1c2UtbWFjcm9zIG1pc3NpbmctdXNlcyBlbnZdXHJcbiAgKGxldFxyXG4gICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgIChkb3NlcVxyXG4gICAgW1tzeW0gbGliXSB1c2UtbWFjcm9zXVxyXG4gICAgKHdoZW5cclxuICAgICAobWlzc2luZy11c2UtbWFjcm8/IGxpYiBzeW0pXHJcbiAgICAgKHRocm93XHJcbiAgICAgIChlcnJvclxyXG4gICAgICAgZW52XHJcbiAgICAgICAoZXJyb3ItbWVzc2FnZVxyXG4gICAgICAgIDp1bmRlY2xhcmVkLW5zLWZvcm1cclxuICAgICAgICB7OnR5cGUgXCJtYWNyb1wiLCA6bGliIGxpYiwgOnN5bSBzeW19KSkpKSlcclxuICAgKGNoZWNrLXVzZXMgKG1pc3NpbmctdXNlLW1hY3JvcyBtaXNzaW5nLXVzZXMgZW52KSBlbnYpXHJcbiAgIChpbmZlcnJlZC11c2UtbWFjcm9zIG1pc3NpbmctdXNlcyBlbnYpKSkpXHJcbiJ9IHs6c3ltIGdldC1leHBhbmRlciwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3ltLCBhIHN5bWJvbCBpZGVudGlmeWluZyBhIG1hY3JvLCBhbmQgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudFxuICAgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIENsb2p1cmUgbWFjcm9leHBhbmRlci4iLCA6YXJnbGlzdHMgKFtzeW0gZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWV4cGFuZGVyXHJcbiBcIkdpdmVuIGEgc3ltLCBhIHN5bWJvbCBpZGVudGlmeWluZyBhIG1hY3JvLCBhbmQgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudFxcbiAgIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBDbG9qdXJlIG1hY3JvZXhwYW5kZXIuXCJcclxuIFtzeW0gZW52XVxyXG4gKGxldFxyXG4gIFttdmFyIChnZXQtZXhwYW5kZXIqIHN5bSBlbnYpXVxyXG4gICh3aGVuXHJcbiAgIChhbmQgKHNvbWU/IG12YXIpICM/KDpjbGogKC5pc01hY3JvIG12YXIpIDpjbGpzICguaXNNYWNybyBtdmFyKSkpXHJcbiAgIG12YXIpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1qcy1zdGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBqc2Zvcm0gYXJncyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1qcy1zdGFyXHJcbiBbZW52IGpzZm9ybSBhcmdzIGZvcm1dXHJcbiAoZGlzYWxsb3dpbmctcmVjdXIgKGFuYWx5emUtanMtc3RhciogZW52IGpzZm9ybSBhcmdzIGZvcm0pKSlcclxuIn0gezpzeW0ganMtc3Rhci1pbnRlcnAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1zdGFyLWludGVycFxyXG4gW2VudiBzXVxyXG4gKGxldFxyXG4gIFtpZHggKC5pbmRleE9mIHMgXCJ+e1wiKV1cclxuICAoaWZcclxuICAgKD09IC0xIGlkeClcclxuICAgKGxpc3QgcylcclxuICAgKGxldFxyXG4gICAgW2VuZFxyXG4gICAgICguaW5kZXhPZiBzIFwifVwiIGlkeClcclxuICAgICBpbm5lclxyXG4gICAgICg6bmFtZVxyXG4gICAgICAocmVzb2x2ZS1leGlzdGluZy12YXIgZW52IChzeW1ib2wgKHN1YnMgcyAoKyAyIGlkeCkgZW5kKSkpKV1cclxuICAgIChsYXp5LXNlcVxyXG4gICAgIChjb25zXHJcbiAgICAgIChzdWJzIHMgMCBpZHgpXHJcbiAgICAgIChjb25zIGlubmVyIChqcy1zdGFyLWludGVycCBlbnYgKHN1YnMgcyAoaW5jIGVuZCkpKSkpKSkpKSlcclxuIn0gezpzeW0gKnJlY3VyLWZyYW1lcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpyZWN1ci1mcmFtZXMqIG5pbClcclxuIn0gezpzeW0gYW5hbHl6ZS1mbi1tZXRob2RzLXBhc3MyKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZW52IGxvY2FscyB0eXBlIG1ldGhzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1mbi1tZXRob2RzLXBhc3MyKlxyXG4gW21lbnYgbG9jYWxzIHR5cGUgbWV0aHNdXHJcbiAobWFwdlxyXG4gIChmbipcclxuICAgW3AxX180ODYwNSNdXHJcbiAgIChhbmFseXplLWZuLW1ldGhvZCBtZW52IGxvY2FscyBwMV9fNDg2MDUjIHR5cGUgdHJ1ZSkpXHJcbiAgbWV0aHMpKVxyXG4ifSB7OnN5bSBtYWNyb2V4cGFuZC0xLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgZm9ybSwgYSBDbG9qdXJlU2NyaXB0IGZvcm0sXG4gICBtYWNyb2V4cGFuZCB0aGUgZm9ybSBvbmNlLiIsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFjcm9leHBhbmQtMVxyXG4gXCJHaXZlbiBhIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBmb3JtLCBhIENsb2p1cmVTY3JpcHQgZm9ybSxcXG4gICBtYWNyb2V4cGFuZCB0aGUgZm9ybSBvbmNlLlwiXHJcbiBbZW52IGZvcm1dXHJcbiAod3JhcHBpbmctZXJyb3JzIGVudiAobWFjcm9leHBhbmQtMSogZW52IGZvcm0pKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1tYWNyby12YXIsIDptZXRhIHs6ZG9jICJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgc3ltLCBhIHN5bWJvbCwgcmVzb2x2ZSBhIG1hY3JvLiIsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLW1hY3JvLXZhclxyXG4gXCJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgc3ltLCBhIHN5bWJvbCwgcmVzb2x2ZSBhIG1hY3JvLlwiXHJcbiBbZW52IHN5bV1cclxuIChsZXRcclxuICBbbnNcclxuICAgKC0+IGVudiA6bnMgOm5hbWUpXHJcbiAgIG5hbWVzcGFjZXNcclxuICAgKGdldCBAZW52Lypjb21waWxlciogOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyldXHJcbiAgKGNvbmRcclxuICAgKHNvbWU/IChuYW1lc3BhY2Ugc3ltKSlcclxuICAgKGxldFxyXG4gICAgW25zXHJcbiAgICAgKG5hbWVzcGFjZSBzeW0pXHJcbiAgICAgbnNcclxuICAgICAoaWYgKD0gXCJjbG9qdXJlLmNvcmVcIiBucykgXCJjbGpzLmNvcmVcIiBucylcclxuICAgICBmdWxsLW5zXHJcbiAgICAgKHJlc29sdmUtbWFjcm8tbnMtYWxpYXMgZW52IG5zKVxyXG4gICAgICM/QCg6Y2xqcyBbZnVsbC1ucyAoaWYtbm90IChzdHJpbmcvZW5kcy13aXRoPyAoc3RyIGZ1bGwtbnMpIFwiJG1hY3Jvc1wiKSAoc3ltYm9sIChzdHIgZnVsbC1ucyBcIiRtYWNyb3NcIikpIGZ1bGwtbnMpXSldXHJcbiAgICAjPyg6Y2xqIChnZXQtaW4gbmFtZXNwYWNlcyBbZnVsbC1ucyA6bWFjcm9zIChzeW1ib2wgKG5hbWUgc3ltKSldKSA6Y2xqcyAoZ2V0LWluIG5hbWVzcGFjZXMgW2Z1bGwtbnMgOmRlZnMgKHN5bWJvbCAobmFtZSBzeW0pKV0pKSlcclxuICAgKHNvbWU/IChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOnVzZS1tYWNyb3Mgc3ltXSkpXHJcbiAgIChsZXRcclxuICAgIFtmdWxsLW5zIChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOnVzZS1tYWNyb3Mgc3ltXSldXHJcbiAgICAoZ2V0LWluIG5hbWVzcGFjZXMgW2Z1bGwtbnMgOm1hY3JvcyBzeW1dKSlcclxuICAgKHNvbWU/IChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOnJlbmFtZS1tYWNyb3Mgc3ltXSkpXHJcbiAgIChsZXRcclxuICAgIFtxdWFsaWZpZWQtc3ltYm9sXHJcbiAgICAgKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6cmVuYW1lLW1hY3JvcyBzeW1dKVxyXG4gICAgIGZ1bGwtbnNcclxuICAgICAoc3ltYm9sIChuYW1lc3BhY2UgcXVhbGlmaWVkLXN5bWJvbCkpXHJcbiAgICAgc3ltXHJcbiAgICAgKHN5bWJvbCAobmFtZSBxdWFsaWZpZWQtc3ltYm9sKSldXHJcbiAgICAoZ2V0LWluIG5hbWVzcGFjZXMgW2Z1bGwtbnMgOm1hY3JvcyBzeW1dKSlcclxuICAgOmVsc2VcclxuICAgKGxldFxyXG4gICAgW25zXHJcbiAgICAgKGNvbmRcclxuICAgICAgKHNvbWU/IChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOm1hY3JvcyBzeW1dKSlcclxuICAgICAgbnNcclxuICAgICAgKGNvcmUtbmFtZT8gZW52IHN5bSlcclxuICAgICAgIz8oOmNsaiAocXVvdGUgY2xqcy5jb3JlKSA6Y2xqcyBDTEpTX0NPUkVfTUFDUk9TX1NZTSkpXVxyXG4gICAgKHdoZW5cclxuICAgICAoc29tZT8gbnMpXHJcbiAgICAgIz8oOmNsaiAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDptYWNyb3Mgc3ltXSkgOmNsanMgKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6ZGVmcyBzeW1dKSkpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWxldC1iaW5kaW5nLWluaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGluaXQgbG9vcC1sZXRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXQtYmluZGluZy1pbml0XHJcbiBbZW52IGluaXQgbG9vcC1sZXRzXVxyXG4gKGJpbmRpbmcgWypsb29wLWxldHMqIGxvb3AtbGV0c10gKGFuYWx5emUgZW52IGluaXQpKSlcclxuIn0gezpzeW0gaW5mZXItdGFnLCA6bWV0YSB7OmRvYyAiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIGUsIGFuIEFTVCBub2RlLCByZXR1cm4gdGhlIGluZmVycmVkXG4gICB0eXBlIG9mIHRoZSBub2RlIiwgOmFyZ2xpc3RzIChbZW52IGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlci10YWdcclxuIFwiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIGUsIGFuIEFTVCBub2RlLCByZXR1cm4gdGhlIGluZmVycmVkXFxuICAgdHlwZSBvZiB0aGUgbm9kZVwiXHJcbiBbZW52IGVdXHJcbiAoaWYtc29tZVxyXG4gIFt0YWcgKGdldC10YWcgZSldXHJcbiAgdGFnXHJcbiAgKGNhc2VcclxuICAgKDpvcCBlKVxyXG4gICA6cmVjdXJcclxuICAgSUdOT1JFX1NZTVxyXG4gICA6dGhyb3dcclxuICAgSUdOT1JFX1NZTVxyXG4gICA6bGV0XHJcbiAgIChpbmZlci10YWcgZW52ICg6Ym9keSBlKSlcclxuICAgOmxvb3BcclxuICAgKGluZmVyLXRhZyBlbnYgKDpib2R5IGUpKVxyXG4gICA6ZG9cclxuICAgKGluZmVyLXRhZyBlbnYgKDpyZXQgZSkpXHJcbiAgIDpmbi1tZXRob2RcclxuICAgKGluZmVyLXRhZyBlbnYgKDpib2R5IGUpKVxyXG4gICA6ZGVmXHJcbiAgIChpbmZlci10YWcgZW52ICg6aW5pdCBlKSlcclxuICAgOmludm9rZVxyXG4gICAoaW5mZXItaW52b2tlIGVudiBlKVxyXG4gICA6aWZcclxuICAgKGluZmVyLWlmIGVudiBlKVxyXG4gICA6Y29uc3RcclxuICAgKGNhc2UgKDpmb3JtIGUpIHRydWUgQk9PTEVBTl9TWU0gZmFsc2UgQk9PTEVBTl9TWU0gQU5ZX1NZTSlcclxuICAgOnF1b3RlXHJcbiAgIChpbmZlci10YWcgZW52ICg6ZXhwciBlKSlcclxuICAgKDp2YXIgOmxvY2FsIDpqcy12YXIgOmJpbmRpbmcpXHJcbiAgIChpZi1zb21lXHJcbiAgICBbaW5pdCAoOmluaXQgZSldXHJcbiAgICAoaW5mZXItdGFnIGVudiBpbml0KVxyXG4gICAgKGluZmVyLXRhZyBlbnYgKDppbmZvIGUpKSlcclxuICAgKDpob3N0LWZpZWxkIDpob3N0LWNhbGwpXHJcbiAgIEFOWV9TWU1cclxuICAgOmpzXHJcbiAgIEFOWV9TWU1cclxuICAgbmlsKSkpXHJcbiJ9IHs6c3ltIGNhbm9uaWNhbGl6ZS1pbXBvcnQtc3BlY3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlY3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW5vbmljYWxpemUtaW1wb3J0LXNwZWNzXHJcbiBbc3BlY3NdXHJcbiAobGV0Zm5cclxuICBbKGNhbm9uaWNhbGl6ZVxyXG4gICAgW3F1b3RlZC1zcGVjLW9yLWt3XVxyXG4gICAgKGlmXHJcbiAgICAgKGtleXdvcmQ/IHF1b3RlZC1zcGVjLW9yLWt3KVxyXG4gICAgIHF1b3RlZC1zcGVjLW9yLWt3XHJcbiAgICAgKHNlY29uZCBxdW90ZWQtc3BlYy1vci1rdykpKV1cclxuICAobWFwIGNhbm9uaWNhbGl6ZSBzcGVjcykpKVxyXG4ifSB7OnN5bSBhbmFseXplLWZvcm0tc2VxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2Zvcm1zXSBbZm9ybXMgb3B0c10gW2Zvcm1zIG9wdHMgcmV0dXJuLWxhc3Q/XV19LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1mb3JtLXNlcVxyXG4gKFtmb3Jtc11cclxuICAoYW5hbHl6ZS1mb3JtLXNlcVxyXG4gICBmb3Jtc1xyXG4gICAod2hlbiBlbnYvKmNvbXBpbGVyKiAoOm9wdGlvbnMgQGVudi8qY29tcGlsZXIqKSkpKVxyXG4gKFtmb3JtcyBvcHRzXSAoYW5hbHl6ZS1mb3JtLXNlcSBmb3JtcyBvcHRzIGZhbHNlKSlcclxuIChbZm9ybXMgb3B0cyByZXR1cm4tbGFzdD9dXHJcbiAgKGxldFxyXG4gICBbZW52IChhc3NvYyAoZW1wdHktZW52KSA6YnVpbGQtb3B0aW9ucyBvcHRzKV1cclxuICAgKGJpbmRpbmdcclxuICAgIFsqZmlsZS1kZWZzKlxyXG4gICAgIG5pbFxyXG4gICAgICM/QCg6Y2xqIFsqdW5jaGVja2VkLWlmKiBmYWxzZSAqdW5jaGVja2VkLWFycmF5cyogZmFsc2VdKVxyXG4gICAgICpjbGpzLW5zKlxyXG4gICAgICdjbGpzLnVzZXJcclxuICAgICAqY2xqcy1maWxlKlxyXG4gICAgIG5pbFxyXG4gICAgIHJlYWRlci8qYWxpYXMtbWFwKlxyXG4gICAgIChvciByZWFkZXIvKmFsaWFzLW1hcCoge30pXVxyXG4gICAgKGxvb3BcclxuICAgICBbbnMgbmlsIGZvcm1zIGZvcm1zIGxhc3QtYXN0IG5pbF1cclxuICAgICAoaWZcclxuICAgICAgKHNvbWU/IGZvcm1zKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZm9ybVxyXG4gICAgICAgIChmaXJzdCBmb3JtcylcclxuICAgICAgICBlbnZcclxuICAgICAgICAoYXNzb2MgZW52IDpucyAoZ2V0LW5hbWVzcGFjZSAqY2xqcy1ucyopKVxyXG4gICAgICAgIGFzdFxyXG4gICAgICAgIChhbmFseXplIGVudiBmb3JtIG5pbCBvcHRzKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgICg9ICg6b3AgYXN0KSA6bnMpXHJcbiAgICAgICAgKHJlY3VyICg6bmFtZSBhc3QpIChuZXh0IGZvcm1zKSBhc3QpXHJcbiAgICAgICAgKHJlY3VyIG5zIChuZXh0IGZvcm1zKSBhc3QpKSlcclxuICAgICAgKGlmIHJldHVybi1sYXN0PyBsYXN0LWFzdCBucykpKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQtYm9keSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGNvbnRleHQgZXhwcnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldC1ib2R5KlxyXG4gW2VudiBjb250ZXh0IGV4cHJzXVxyXG4gKGFuYWx5emVcclxuICAoYXNzb2MgZW52IDpjb250ZXh0IChpZiAoPSA6ZXhwciBjb250ZXh0KSA6cmV0dXJuIGNvbnRleHQpKVxyXG4gIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgIChjbG9qdXJlLmNvcmUvY29uY2F0IChjbG9qdXJlLmNvcmUvbGlzdCAnZG8pIGV4cHJzKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1qcy1zdGFyKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYganNmb3JtIGFyZ3MgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtanMtc3RhcipcclxuIFtlbnYganNmb3JtIGFyZ3MgZm9ybV1cclxuIChsZXRcclxuICBbZW52ZVxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBmb3JtLW1ldGFcclxuICAgKG1ldGEgZm9ybSlcclxuICAgc2Vnc1xyXG4gICAoanMtc3Rhci1zZWcganNmb3JtKVxyXG4gICB0YWdcclxuICAgKGdldC1qcy10YWcgZm9ybSlcclxuICAganMtb3BcclxuICAgKDpqcy1vcCBmb3JtLW1ldGEpXHJcbiAgIGFyZ2V4cHJzXHJcbiAgIChhbmFseXplLWpzLXN0YXItYXJncyBqcy1vcCBlbnZlIGFyZ3MpXHJcbiAgIG51bWVyaWNcclxuICAgKDpudW1lcmljIGZvcm0tbWV0YSlcclxuICAgdmFsaWRhdGVcclxuICAgKGZuXHJcbiAgICBbd2FybmluZy10eXBlIHZhbGlkLXR5cGVzP11cclxuICAgIChsZXRcclxuICAgICBbdHlwZXNcclxuICAgICAgKG1hcCAoZm4qIFtwMV9fNDg2MzAjXSAoaW5mZXItdGFnIGVudiBwMV9fNDg2MzAjKSkgYXJnZXhwcnMpXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAodmFsaWQtdHlwZXM/IHR5cGVzKVxyXG4gICAgICAod2FybmluZ1xyXG4gICAgICAgd2FybmluZy10eXBlXHJcbiAgICAgICBlbnZcclxuICAgICAgIHs6anMtb3AganMtb3AsIDp0eXBlcyAoaW50byBbXSB0eXBlcyl9KSkpKVxyXG4gICBvcC1tYXRjaD9cclxuICAgKGZuXHJcbiAgICBbc3ltXVxyXG4gICAgIz8oOmNsaiAoPSBzeW0gKDpqcy1vcCBmb3JtLW1ldGEpKSA6Y2xqcyAoc3ltYm9sLWlkZW50aWNhbD8gc3ltICg6anMtb3AgZm9ybS1tZXRhKSkpKV1cclxuICAod2hlblxyXG4gICAodHJ1ZT8gbnVtZXJpYylcclxuICAgKHZhbGlkYXRlXHJcbiAgICA6aW52YWxpZC1hcml0aG1ldGljXHJcbiAgICAoZm4qIFtwMV9fNDg2MzEjXSAoZXZlcnk/IG51bWVyaWMtdHlwZT8gcDFfXzQ4NjMxIykpKSlcclxuICB7OmFyZ3MgYXJnZXhwcnMsXHJcbiAgIDpjaGlsZHJlbiBbOmFyZ3NdLFxyXG4gICA6bnVtZXJpYyBudW1lcmljLFxyXG4gICA6c2VncyBzZWdzLFxyXG4gICA6b3AgOmpzLFxyXG4gICA6ZW52IGVudixcclxuICAgOmpzLW9wIGpzLW9wLFxyXG4gICA6Zm9ybSBmb3JtLFxyXG4gICA6dGFnIHRhZ30pKVxyXG4ifSB7OnN5bSBpbmZlcnJlZC1yZW5hbWUtbWFjcm9zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbmFtZS1tYWNyb3MgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXJyZWQtcmVuYW1lLW1hY3Jvc1xyXG4gW3JlbmFtZS1tYWNyb3MgZW52XVxyXG4gKGludG9cclxuICB7fVxyXG4gIChmaWx0ZXJcclxuICAgKGZuIFtbXyBxdWFsaWZpZWQtc3ltXV0gKG5vdCAobWlzc2luZy1yZW5hbWUtbWFjcm8/IHF1YWxpZmllZC1zeW0pKSlcclxuICAgcmVuYW1lLW1hY3JvcykpKVxyXG4ifSB7OnN5bSBwYXJzZS1ucy1lcnJvci1tc2csIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBtc2ddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1ucy1lcnJvci1tc2dcclxuIFtzcGVjIG1zZ11cclxuIChzdHIgbXNnIFwiOyBvZmZlbmRpbmcgc3BlYzogXCIgKHByLXN0ciBzcGVjKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctdXNlLW1hY3JvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtsaWIgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy11c2UtbWFjcm8/XHJcbiBbbGliIHN5bV1cclxuICh3aGVuXHJcbiAgKHN5bWJvbD8gbGliKVxyXG4gIChsZXRcclxuICAgW3RoZS1ucyAjPyg6Y2xqIChmaW5kLW5zIGxpYikgOmNsanMgKGZpbmQtbWFjcm9zLW5zIGxpYikpXVxyXG4gICAob3IgKG5pbD8gdGhlLW5zKSAobmlsPyAoLmZpbmRJbnRlcm5lZFZhciB0aGUtbnMgc3ltKSkpKSkpXHJcbiJ9IHs6c3ltIHJlY29yZC1ucytuYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWNvcmQtbnMrbmFtZVxyXG4gW3hdXHJcbiAobWFwXHJcbiAgc3ltYm9sXHJcbiAgIz8oOmNsaiAoKGp1eHQgKGNvbXAgKGZuKiBbcDFfXzQ4NjQyI10gKHN0cmluZy9qb2luIFwiLlwiIHAxX180ODY0MiMpKSBidXRsYXN0KSBsYXN0KSAoc3RyaW5nL3NwbGl0ICguZ2V0TmFtZSAodHlwZSB4KSkgI1wiXFwuXCIpKSA6Y2xqcyAoc3RyaW5nL3NwbGl0IChwci1zdHIgKHR5cGUgeCkpICNcIi9cIikpKSlcclxuIn0gezpzeW0gYW5hbHl6ZWQsIDptZXRhIHs6ZG9jICJNYXJrIGEgZm9ybSBhcyBiZWluZyBhbmFseXplZC4gQXNzdW1lcyB4IHNhdGlzZmllcyBJTWV0YS4gVXNlZnVsIHRvIHN1cHByZXNzXG4gIHdhcm5pbmdzIHRoYXQgd2lsbCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IGEgZmlyc3QgY29tcGlsZXIgcGFzcy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZWRcclxuIFwiTWFyayBhIGZvcm0gYXMgYmVpbmcgYW5hbHl6ZWQuIEFzc3VtZXMgeCBzYXRpc2ZpZXMgSU1ldGEuIFVzZWZ1bCB0byBzdXBwcmVzc1xcbiAgd2FybmluZ3MgdGhhdCB3aWxsIGhhdmUgYmVlbiBjYXVnaHQgYnkgYSBmaXJzdCBjb21waWxlciBwYXNzLlwiXHJcbiBbeF1cclxuIChjb25kXHJcbiAgKHVuc29ydGVkLW1hcD8geClcclxuICAoYXNzb2MgeCA6Y2xqcy5hbmFseXplci9hbmFseXplZCB0cnVlKVxyXG4gIDplbHNlXHJcbiAgKHZhcnktbWV0YSB4IGFzc29jIDpjbGpzLmFuYWx5emVyL2FuYWx5emVkIHRydWUpKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1zeW1ib2wsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1zeW1ib2xcclxuIFtzeW1dXHJcbiAoaWZcclxuICAoYW5kIChub3QgKG5hbWVzcGFjZSBzeW0pKSAoZG90dGVkLXN5bWJvbD8gc3ltKSlcclxuICBzeW1cclxuICAoOm5hbWVcclxuICAgKGJpbmRpbmdcclxuICAgIFsqcHJpdmF0ZS12YXItYWNjZXNzLW5vd2FybiogdHJ1ZV1cclxuICAgIChyZXNvbHZlLXZhclxyXG4gICAgIChhc3NvYyBAZW52Lypjb21waWxlciogOm5zIChnZXQtbmFtZXNwYWNlICpjbGpzLW5zKikpXHJcbiAgICAgc3ltKSkpKSlcclxuIn0gezpzeW0gbWlzc2luZy1yZW5hbWVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbmFtZXMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy1yZW5hbWVzXHJcbiBbcmVuYW1lcyBlbnZdXHJcbiAobGV0XHJcbiAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gIChpbnRvXHJcbiAgIHt9XHJcbiAgIChmaWx0ZXJcclxuICAgIChmbiBbW18gcXVhbGlmaWVkLXN5bV1dIChtaXNzaW5nLXJlbmFtZT8gcXVhbGlmaWVkLXN5bSBjZW52KSlcclxuICAgIHJlbmFtZXMpKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtcGFzc2VzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZGVmYXVsdC1wYXNzZXNcclxuICM/KDpjbGogW2luZmVyLXR5cGUgY2hlY2staW52b2tlLWFyZy10eXBlcyBucy1zaWRlLWVmZmVjdHNdIDpjbGpzIFtpbmZlci10eXBlIGNoZWNrLWludm9rZS1hcmctdHlwZXNdKSlcclxuIn0gezpzeW0gKmNsanMtbWFjcm9zLXBhdGgqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1tYWNyb3MtcGF0aCogXCIvY2xqcy9jb3JlXCIpXHJcbiJ9IHs6c3ltIGNvbmZpcm0tdmFyLWV4aXN0LXdhcm5pbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHByZWZpeCBzdWZmaXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25maXJtLXZhci1leGlzdC13YXJuaW5nXHJcbiBbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAoZm5cclxuICBbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAgKHdhcm5pbmdcclxuICAgOnVuZGVjbGFyZWQtdmFyXHJcbiAgIGVudlxyXG4gICB7OnByZWZpeCBwcmVmaXgsXHJcbiAgICA6c3VmZml4IHN1ZmZpeCxcclxuICAgIDptYWNyby1wcmVzZW50P1xyXG4gICAgKG5vdFxyXG4gICAgIChuaWw/IChnZXQtZXhwYW5kZXIgKHN5bWJvbCAoc3RyIHByZWZpeCkgKHN0ciBzdWZmaXgpKSBlbnYpKSl9KSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1hcnJheXM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWFycmF5cz8gW10gKnVuY2hlY2tlZC1hcnJheXMqKVxyXG4ifSB7OnN5bSBhbmFseXplLWRvdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgdGFyZ2V0IGZpZWxkIG1lbWJlcisgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZG90XHJcbiBbZW52IHRhcmdldCBmaWVsZCBtZW1iZXIrIGZvcm1dXHJcbiAobGV0XHJcbiAgW3ZcclxuICAgW3RhcmdldCBmaWVsZCBtZW1iZXIrXVxyXG4gICB7OmtleXMgW2RvdC1hY3Rpb24gdGFyZ2V0IG1ldGhvZCBmaWVsZCBhcmdzXX1cclxuICAgKGJ1aWxkLWRvdC1mb3JtIHYpXHJcbiAgIGVudmVcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgdGFyZ2V0ZXhwclxyXG4gICAoYW5hbHl6ZSBlbnZlIHRhcmdldClcclxuICAgZm9ybS1tZXRhXHJcbiAgIChtZXRhIGZvcm0pXHJcbiAgIHRhcmdldC10YWdcclxuICAgKDp0YWcgdGFyZ2V0ZXhwcilcclxuICAgcHJvcFxyXG4gICAob3IgZmllbGQgbWV0aG9kKVxyXG4gICB0YWdcclxuICAgKG9yXHJcbiAgICAoOnRhZyBmb3JtLW1ldGEpXHJcbiAgICAoYW5kXHJcbiAgICAgKGpzLXRhZz8gdGFyZ2V0LXRhZylcclxuICAgICAodmFyeS1tZXRhXHJcbiAgICAgIChub3JtYWxpemUtanMtdGFnIHRhcmdldC10YWcpXHJcbiAgICAgIHVwZGF0ZS1pblxyXG4gICAgICBbOnByZWZpeF1cclxuICAgICAgKGZuaWwgY29uaiAnW09iamVjdF0pXHJcbiAgICAgIHByb3ApKVxyXG4gICAgbmlsKV1cclxuICAod2hlblxyXG4gICAoYW5kXHJcbiAgICAobm90PSAnY29uc3RydWN0b3IgcHJvcClcclxuICAgIChub3QgKHN0cmluZy9zdGFydHMtd2l0aD8gKHN0ciBwcm9wKSBcImNsanMkXCIpKVxyXG4gICAgKG5vdCAoLT4gcHJvcCBtZXRhIDpwcm90b2NvbC1tZXRob2QpKSlcclxuICAgKHdoZW5cclxuICAgICg9ICdPYmplY3QgKGZpcnN0ICgtPiB0YWcgbWV0YSA6cHJlZml4KSkpXHJcbiAgICAod2FybmluZ1xyXG4gICAgIDppbmZlci13YXJuaW5nXHJcbiAgICAgZW52XHJcbiAgICAgezp3YXJuLXR5cGUgOm9iamVjdCwgOmZvcm0gZm9ybSwgOnByb3BlcnR5IHByb3B9KSlcclxuICAgKHdoZW5cclxuICAgIChub3Q9ICdqcyB0YXJnZXQtdGFnKVxyXG4gICAgKHdoZW5cclxuICAgICAob3IgKG5pbD8gdGFyZ2V0LXRhZykgKCcje2FueX0gdGFyZ2V0LXRhZykpXHJcbiAgICAgKHdhcm5pbmdcclxuICAgICAgOmluZmVyLXdhcm5pbmdcclxuICAgICAgZW52XHJcbiAgICAgIHs6d2Fybi10eXBlIDp0YXJnZXQsIDpmb3JtIGZvcm0sIDpwcm9wZXJ0eSBwcm9wfSkpXHJcbiAgICAobGV0XHJcbiAgICAgW1twcmUnIHByZV0gKChqdXh0IGJ1dGxhc3QgaWRlbnRpdHkpICgtPiB0YWcgbWV0YSA6cHJlZml4KSldXHJcbiAgICAgKHdoZW5cclxuICAgICAgKGFuZCAoaGFzLWV4dGVybj8gcHJlJykgKG5vdCAoaGFzLWV4dGVybj8gcHJlKSkpXHJcbiAgICAgICh3YXJuaW5nXHJcbiAgICAgICA6aW5mZXItd2FybmluZ1xyXG4gICAgICAgZW52XHJcbiAgICAgICB7Ondhcm4tdHlwZSA6cHJvcGVydHksXHJcbiAgICAgICAgOmZvcm0gZm9ybSxcclxuICAgICAgICA6dHlwZVxyXG4gICAgICAgIChzeW1ib2xcclxuICAgICAgICAgXCJqc1wiXHJcbiAgICAgICAgIChzdHJpbmcvam9pblxyXG4gICAgICAgICAgXCIuXCJcclxuICAgICAgICAgIChjb25kLT4gcHJlJyAoPSAncHJvdG90eXBlIChsYXN0IHByZScpKSBidXRsYXN0KSkpLFxyXG4gICAgICAgIDpwcm9wZXJ0eSBwcm9wfSkpKSkpXHJcbiAgKHdoZW5cclxuICAgKGpzLXRhZz8gdGFnKVxyXG4gICAobGV0XHJcbiAgICBbcHJlICgtPiB0YWcgbWV0YSA6cHJlZml4KV1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChoYXMtZXh0ZXJuPyBwcmUpXHJcbiAgICAgKHN3YXAhXHJcbiAgICAgIGVudi8qY29tcGlsZXIqXHJcbiAgICAgIHVwZGF0ZS1pblxyXG4gICAgICAoaW50b1xyXG4gICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKC0+IGVudiA6bnMgOm5hbWUpIDpleHRlcm5zXVxyXG4gICAgICAgcHJlKVxyXG4gICAgICBtZXJnZVxyXG4gICAgICB7fSkpKSlcclxuICAoY2FzZVxyXG4gICBkb3QtYWN0aW9uXHJcbiAgIDpjbGpzLmFuYWx5emVyL2FjY2Vzc1xyXG4gICAobGV0XHJcbiAgICBbY2hpbGRyZW4gWzp0YXJnZXRdXVxyXG4gICAgezpvcCA6aG9zdC1maWVsZCxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDp0YXJnZXQgdGFyZ2V0ZXhwcixcclxuICAgICA6ZmllbGQgZmllbGQsXHJcbiAgICAgOmNoaWxkcmVuIGNoaWxkcmVuLFxyXG4gICAgIDp0YWdcclxuICAgICAoaWZcclxuICAgICAgKGpzLXRhZz8gdGFnKVxyXG4gICAgICAob3IgKGpzLXRhZyAoLT4gdGFnIG1ldGEgOnByZWZpeCkgOnRhZykgdGFnKVxyXG4gICAgICB0YWcpfSlcclxuICAgOmNsanMuYW5hbHl6ZXIvY2FsbFxyXG4gICAobGV0XHJcbiAgICBbYXJnZXhwcnNcclxuICAgICAobWFwdiAoZm4qIFtwMV9fNDg2MjkjXSAoYW5hbHl6ZSBlbnZlIHAxX180ODYyOSMpKSBhcmdzKVxyXG4gICAgIGNoaWxkcmVuXHJcbiAgICAgWzp0YXJnZXQgOmFyZ3NdXVxyXG4gICAgezpvcCA6aG9zdC1jYWxsLFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOnRhcmdldCB0YXJnZXRleHByLFxyXG4gICAgIDptZXRob2QgbWV0aG9kLFxyXG4gICAgIDphcmdzIGFyZ2V4cHJzLFxyXG4gICAgIDpjaGlsZHJlbiBjaGlsZHJlbixcclxuICAgICA6dGFnXHJcbiAgICAgKGlmXHJcbiAgICAgIChqcy10YWc/IHRhZylcclxuICAgICAgKG9yIChqcy10YWcgKC0+IHRhZyBtZXRhIDpwcmVmaXgpIDpyZXQtdGFnKSAnanMpXHJcbiAgICAgIHRhZyl9KSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWRvLXN0YXRlbWVudHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGV4cHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1kby1zdGF0ZW1lbnRzXHJcbiBbZW52IGV4cHJzXVxyXG4gKGRpc2FsbG93aW5nLXJlY3VyIChhbmFseXplLWRvLXN0YXRlbWVudHMqIGVudiBleHBycykpKVxyXG4ifSB7OnN5bSBnZXQtbGluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IGVudl0pfSwgOnNvdXJjZSAiKGRlZm4gZ2V0LWxpbmUgW3ggZW52XSAob3IgKC0+IHggbWV0YSA6bGluZSkgKDpsaW5lIGVudikpKVxyXG4ifSB7OnN5bSBhbmFseXplLWRvLXN0YXRlbWVudHMqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBleHByc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZG8tc3RhdGVtZW50cypcclxuIFtlbnYgZXhwcnNdXHJcbiAobWFwdlxyXG4gIChmbipcclxuICAgW3AxX180ODYwNyNdXHJcbiAgIChhbmFseXplIChhc3NvYyBlbnYgOmNvbnRleHQgOnN0YXRlbWVudCkgcDFfXzQ4NjA3IykpXHJcbiAgKGJ1dGxhc3QgZXhwcnMpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zZXEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52IGZvcm0gbmFtZV0gW2VudiBmb3JtIG5hbWUgb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc2VxXHJcbiAoW2VudiBmb3JtIG5hbWVdXHJcbiAgKGFuYWx5emUtc2VxXHJcbiAgIGVudlxyXG4gICBmb3JtXHJcbiAgIG5hbWVcclxuICAgKHdoZW4gZW52Lypjb21waWxlciogKDpvcHRpb25zIEBlbnYvKmNvbXBpbGVyKikpKSlcclxuIChbZW52IGZvcm0gbmFtZSBvcHRzXVxyXG4gIChpZlxyXG4gICAoOnF1b3RlZD8gZW52KVxyXG4gICAoYW5hbHl6ZS1saXN0IGVudiBmb3JtKVxyXG4gICAobGV0XHJcbiAgICBbbGluZVxyXG4gICAgICgtPiBmb3JtIG1ldGEgOmxpbmUpXHJcbiAgICAgbGluZVxyXG4gICAgIChpZiAobmlsPyBsaW5lKSAoOmxpbmUgZW52KSBsaW5lKVxyXG4gICAgIGNvbFxyXG4gICAgICgtPiBmb3JtIG1ldGEgOmNvbHVtbilcclxuICAgICBjb2xcclxuICAgICAoaWYgKG5pbD8gY29sKSAoOmNvbHVtbiBlbnYpIGNvbClcclxuICAgICBlbnZcclxuICAgICAoYXNzb2MgZW52IDpsaW5lIGxpbmUgOmNvbHVtbiBjb2wpXVxyXG4gICAgKGxldFxyXG4gICAgIFtvcCAoZmlyc3QgZm9ybSldXHJcbiAgICAgKHdoZW4gKG5pbD8gb3ApICh0aHJvdyAoZXJyb3IgZW52IFwiQ2FuJ3QgY2FsbCBuaWxcIikpKVxyXG4gICAgIChsZXRcclxuICAgICAgW21mb3JtIChtYWNyb2V4cGFuZC0xIGVudiBmb3JtKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaWRlbnRpY2FsPyBmb3JtIG1mb3JtKVxyXG4gICAgICAgKGFuYWx5emUtc2VxKi13cmFwIG9wIGVudiBmb3JtIG5hbWUgb3B0cylcclxuICAgICAgIChhbmFseXplIGVudiBtZm9ybSBuYW1lIG9wdHMpKSkpKSkpKVxyXG4ifSB7OnN5bSBkZXN1Z2FyLWRvdHRlZC1leHByLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbb3BdLCA6YXMgZXhwcn1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXN1Z2FyLWRvdHRlZC1leHByXHJcbiBbezprZXlzIFtvcF0sIDphcyBleHByfV1cclxuIChjYXNlXHJcbiAgb3BcclxuICAoOnZhciA6bG9jYWwpXHJcbiAgKGlmXHJcbiAgIChkb3R0ZWQtc3ltYm9sPyAoc3ltYm9sIChuYW1lICg6bmFtZSBleHByKSkpKVxyXG4gICAobGV0XHJcbiAgICBbc1xyXG4gICAgIChuYW1lICg6bmFtZSBleHByKSlcclxuICAgICBpZHhcclxuICAgICAoLmxhc3RJbmRleE9mIHMgXCIuXCIpXHJcbiAgICAgX1xyXG4gICAgIChhc3NlcnQgKG5vdD0gKGluYyBpZHgpIChjb3VudCBzKSkpXHJcbiAgICAgcHJlZml4XHJcbiAgICAgKHdpdGgtbWV0YVxyXG4gICAgICAoc3ltYm9sIChuYW1lc3BhY2UgKDpuYW1lIGV4cHIpKSAoc3VicyBzIDAgaWR4KSlcclxuICAgICAgKG1ldGEgKDpmb3JtIGV4cHIpKSlcclxuICAgICBmaWVsZFxyXG4gICAgIChzeW1ib2wgKHN1YnMgcyAoaW5jIGlkeCkpKV1cclxuICAgIChhc3NlcnQgKG5vdCAoOmNvbnN0LWV4cHIgZXhwcikpKVxyXG4gICAgezpvcCA6aG9zdC1maWVsZCxcclxuICAgICA6ZW52ICg6ZW52IGV4cHIpLFxyXG4gICAgIDpmb3JtIChsaXN0ICcuIHByZWZpeCBmaWVsZCksXHJcbiAgICAgOnRhcmdldFxyXG4gICAgIChkZXN1Z2FyLWRvdHRlZC1leHByXHJcbiAgICAgICgtPlxyXG4gICAgICAgZXhwclxyXG4gICAgICAgKGFzc29jIDpuYW1lIHByZWZpeCA6Zm9ybSBwcmVmaXgpXHJcbiAgICAgICAoZGlzc29jIDp0YWcpXHJcbiAgICAgICAoYXNzb2MtaW4gWzppbmZvIDpuYW1lXSBwcmVmaXgpXHJcbiAgICAgICAoYXNzb2MtaW4gWzplbnYgOmNvbnRleHRdIDpleHByKSkpLFxyXG4gICAgIDpmaWVsZCBmaWVsZCxcclxuICAgICA6dGFnICg6dGFnIGV4cHIpLFxyXG4gICAgIDpjaGlsZHJlbiBbOnRhcmdldF19KVxyXG4gICBleHByKVxyXG4gIGV4cHIpKVxyXG4ifSB7OnN5bSBmaW5kLWRlZi1jbGFzaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbnMgc2VnbWVudHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLWRlZi1jbGFzaFxyXG4gW2VudiBucyBzZWdtZW50c11cclxuIChsZXRcclxuICBbdG8tY2hlY2tcclxuICAgKG1hcFxyXG4gICAgKGZuXHJcbiAgICAgW3hzXVxyXG4gICAgIFsoc3ltYm9sIChzdHJpbmcvam9pbiBcIi5cIiAoYnV0bGFzdCB4cykpKSAoc3ltYm9sIChsYXN0IHhzKSldKVxyXG4gICAgKGRyb3AgMiAocmVkdWN0aW9ucyBjb25qIFtdIHNlZ21lbnRzKSkpXVxyXG4gIChkb3NlcVxyXG4gICBbW2NsYXNoLW5zIG5hbWVdIHRvLWNoZWNrXVxyXG4gICAod2hlblxyXG4gICAgKGdldC1pblxyXG4gICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGNsYXNoLW5zIDpkZWZzIG5hbWVdKVxyXG4gICAgKHdhcm5pbmdcclxuICAgICA6bnMtdmFyLWNsYXNoXHJcbiAgICAgZW52XHJcbiAgICAgezpucyBucywgOnZhciAoc3ltYm9sIChzdHIgY2xhc2gtbnMpIChzdHIgbmFtZSkpfSkpKSkpXHJcbiJ9IHs6c3ltIGhhcy1lcnJvci1kYXRhPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhcy1lcnJvci1kYXRhP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZXhdXHJcbiAoY29udGFpbnM/IChleC1kYXRhIGV4KSA6Y2xvanVyZS5lcnJvci9waGFzZSkpXHJcbiJ9IHs6c3ltIGZuLW5hbWUtdmFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBsb2NhbHMgbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZuLW5hbWUtdmFyXHJcbiBbZW52IGxvY2FscyBuYW1lXVxyXG4gKHdoZW5cclxuICAoc29tZT8gbmFtZSlcclxuICAobGV0XHJcbiAgIFtuc1xyXG4gICAgKC0+IGVudiA6bnMgOm5hbWUpXHJcbiAgICBzaGFkb3dcclxuICAgIChoYW5kbGUtc3ltYm9sLWxvY2FsIG5hbWUgKGdldCBsb2NhbHMgbmFtZSkpXHJcbiAgICBzaGFkb3dcclxuICAgICh3aGVuIChuaWw/IHNoYWRvdykgKGdldC1pbiBlbnYgWzpqcy1nbG9iYWxzIG5hbWVdKSlcclxuICAgIGZuLXNjb3BlXHJcbiAgICAoOmZuLXNjb3BlIGVudilcclxuICAgIG5hbWUtdmFyXHJcbiAgICB7Om5hbWUgbmFtZSxcclxuICAgICA6b3AgOmJpbmRpbmcsXHJcbiAgICAgOmxvY2FsIDpmbixcclxuICAgICA6aW5mb1xyXG4gICAgIHs6Zm4tc2VsZi1uYW1lIHRydWUsIDpmbi1zY29wZSBmbi1zY29wZSwgOm5zIG5zLCA6c2hhZG93IHNoYWRvd319XHJcbiAgICB0YWdcclxuICAgICgtPiBuYW1lIG1ldGEgOnRhZylcclxuICAgIHJldC10YWdcclxuICAgICh3aGVuIChzb21lPyB0YWcpIHs6cmV0LXRhZyB0YWd9KV1cclxuICAgKG1lcmdlIG5hbWUtdmFyIHJldC10YWcpKSkpXHJcbiJ9IHs6c3ltIG11bmdlLW5vZGUtbGliLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZS1ub2RlLWxpYlxyXG4gW25hbWVdXHJcbiAoc3RyXHJcbiAgXCJub2RlJG1vZHVsZSRcIlxyXG4gIChtdW5nZVxyXG4gICAoc3RyaW5nL3JlcGxhY2UgKHN0ciBuYW1lKSAjXCJbLlxcL11cIiAjPyg6Y2xqIFwiXFxcXCRcIiA6Y2xqcyBcIiQkXCIpKSkpKVxyXG4ifSB7OnN5bSAqbG9hZC1tYWNyb3MqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbG9hZC1tYWNyb3MqIHRydWUpXHJcbiJ9IHs6c3ltIGFkZC10eXBlcywgOm1ldGEgezpkb2MgIlByb2R1Y2VzIGEgdW5pb24gb2YgdHlwZXMuIiwgOmFyZ2xpc3RzIFtbXSBbdDFdIFt0MSB0Ml0gW3QxIHQyICYgdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtdHlwZXNcclxuIFwiUHJvZHVjZXMgYSB1bmlvbiBvZiB0eXBlcy5cIlxyXG4gKFtdICdhbnkpXHJcbiAoW3QxXSB0MSlcclxuIChbdDEgdDJdXHJcbiAgKGlmXHJcbiAgIChvciAobmlsPyB0MSkgKG5pbD8gdDIpKVxyXG4gICAnYW55XHJcbiAgICgtPiAoc2V0L3VuaW9uICgtPnR5cGUtc2V0IHQxKSAoLT50eXBlLXNldCB0MikpIGNhbm9uaWNhbGl6ZS10eXBlKSkpXHJcbiAoW3QxIHQyICYgdHNdIChhcHBseSBhZGQtdHlwZXMgKGFkZC10eXBlcyB0MSB0MikgdHMpKSlcclxuIn0gezpzeW0gZXhjbHVkZWQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleGNsdWRlZD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiBzeW1dXHJcbiAob3JcclxuICAoc29tZT8gKGdldHMgZW52IDpucyA6ZXhjbHVkZXMgc3ltKSlcclxuICAoc29tZT9cclxuICAgKGdldHNcclxuICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgKGdldHMgZW52IDpucyA6bmFtZSlcclxuICAgIDpleGNsdWRlc1xyXG4gICAgc3ltKSkpKVxyXG4ifSB7OnN5bSBlbXB0eS1lbnYsIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYW4gZW1wdHkgYW5hbHlzaXMgZW52aXJvbm1lbnQuIFJlcXVpcmVkIHRvIGFuYWx5emUgZm9ybXMuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1wdHktZW52XHJcbiBcIkNvbnN0cnVjdCBhbiBlbXB0eSBhbmFseXNpcyBlbnZpcm9ubWVudC4gUmVxdWlyZWQgdG8gYW5hbHl6ZSBmb3Jtcy5cIlxyXG4gW11cclxuIChlbnN1cmVcclxuICB7Om5zIChnZXQtbmFtZXNwYWNlICpjbGpzLW5zKiksXHJcbiAgIDpjb250ZXh0IDpzdGF0ZW1lbnQsXHJcbiAgIDpsb2NhbHMge30sXHJcbiAgIDpmbi1zY29wZSBbXSxcclxuICAgOmpzLWdsb2JhbHNcclxuICAgKGludG9cclxuICAgIHt9XHJcbiAgICAobWFwXHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ4NTkyI11cclxuICAgICAgKHZlY3RvciBwMV9fNDg1OTIjIHs6b3AgOmpzLXZhciwgOm5hbWUgcDFfXzQ4NTkyIywgOm5zICdqc30pKVxyXG4gICAgICcoYWxlcnRcclxuICAgICAgIHdpbmRvd1xyXG4gICAgICAgZG9jdW1lbnRcclxuICAgICAgIGNvbnNvbGVcclxuICAgICAgIGVzY2FwZVxyXG4gICAgICAgdW5lc2NhcGVcclxuICAgICAgIHNjcmVlblxyXG4gICAgICAgbG9jYXRpb25cclxuICAgICAgIG5hdmlnYXRvclxyXG4gICAgICAgaGlzdG9yeVxyXG4gICAgICAgbG9jYXRpb25cclxuICAgICAgIGdsb2JhbFxyXG4gICAgICAgcHJvY2Vzc1xyXG4gICAgICAgcmVxdWlyZVxyXG4gICAgICAgbW9kdWxlXHJcbiAgICAgICBleHBvcnRzKSkpfSkpXHJcbiJ9IHs6c3ltIHB1YmxpYy1uYW1lPywgOm1ldGEgezpkb2MgIklzIHN5bSBwdWJsaWM/IiwgOmFyZ2xpc3RzIChbbnMgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHVibGljLW5hbWU/XHJcbiBcIklzIHN5bSBwdWJsaWM/XCJcclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW25zIHN5bV1cclxuIChsZXRcclxuICBbdmFyLWFzdFxyXG4gICAob3JcclxuICAgIChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDpkZWZzIHN5bSlcclxuICAgICM/KDpjbGogKGdldHMgKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6bWFjcm9zIHN5bSkgOmNsanMgKGdldHMgKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoc3ltYm9sIChzdHIgKG5hbWUgbnMpIFwiJG1hY3Jvc1wiKSkgOmRlZnMgc3ltKSkpXVxyXG4gIChhbmRcclxuICAgKHNvbWU/IHZhci1hc3QpXHJcbiAgIChub3QgKG9yICg6cHJpdmF0ZSB2YXItYXN0KSAoOmFub255bW91cyB2YXItYXN0KSkpKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtd2FybmluZy1oYW5kbGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3dhcm5pbmctdHlwZSBlbnYgZXh0cmFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWZhdWx0LXdhcm5pbmctaGFuZGxlclxyXG4gW3dhcm5pbmctdHlwZSBlbnYgZXh0cmFdXHJcbiAod2hlblxyXG4gICh3YXJuaW5nLXR5cGUgKmNsanMtd2FybmluZ3MqKVxyXG4gICh3aGVuLWxldFxyXG4gICBbcyAoZXJyb3ItbWVzc2FnZSB3YXJuaW5nLXR5cGUgZXh0cmEpXVxyXG4gICAjPyg6Y2xqIChiaW5kaW5nIFsqb3V0KiAqZXJyKl0gKHByaW50bG4gKG1lc3NhZ2UgZW52IChzdHIgXCJXQVJOSU5HOiBcIiBzKSkpKSA6Y2xqcyAoYmluZGluZyBbKnByaW50LWZuKiAqcHJpbnQtZXJyLWZuKl0gKHByaW50bG4gKG1lc3NhZ2UgZW52IChzdHIgXCJXQVJOSU5HOiBcIiBzKSkpKSkpKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1ucy1hbGlhcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnYgbmFtZV0gW2VudiBuYW1lIG5vdC1mb3VuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtbnMtYWxpYXNcclxuIChbZW52IG5hbWVdIChyZXNvbHZlLW5zLWFsaWFzIGVudiBuYW1lIChzeW1ib2wgbmFtZSkpKVxyXG4gKFtlbnYgbmFtZSBub3QtZm91bmRdXHJcbiAgKGxldCBbc3ltIChzeW1ib2wgbmFtZSldIChnZXQgKDpyZXF1aXJlcyAoOm5zIGVudikpIHN5bSBub3QtZm91bmQpKSkpXHJcbiJ9IHs6c3ltIGludGVybi1tYWNyb3MsIDptZXRhIHs6ZG9jICJHaXZlbiBhIENsb2p1cmUgbmFtZXNwYWNlIGludGVybiBhbGwgbWFjcm9zIGludG8gdGhlIGFtYmllbnQgQ2xvanVyZVNjcmlwdFxuICAgYW5hbHlzaXMgZW52aXJvbm1lbnQuIiwgOmFyZ2xpc3RzIFtbbnNdIFtucyByZWxvYWRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRlcm4tbWFjcm9zXHJcbiBcIkdpdmVuIGEgQ2xvanVyZSBuYW1lc3BhY2UgaW50ZXJuIGFsbCBtYWNyb3MgaW50byB0aGUgYW1iaWVudCBDbG9qdXJlU2NyaXB0XFxuICAgYW5hbHlzaXMgZW52aXJvbm1lbnQuXCJcclxuIChbbnNdIChpbnRlcm4tbWFjcm9zIG5zIGZhbHNlKSlcclxuIChbbnMgcmVsb2FkXVxyXG4gICh3aGVuXHJcbiAgIChvclxyXG4gICAgKG5pbD8gKGdldHMgQGVudi8qY29tcGlsZXIqIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOm1hY3JvcykpXHJcbiAgICByZWxvYWQpXHJcbiAgIChzd2FwIVxyXG4gICAgZW52Lypjb21waWxlcipcclxuICAgIGFzc29jLWluXHJcbiAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6bWFjcm9zXVxyXG4gICAgKC0+PlxyXG4gICAgICM/KDpjbGogKG5zLWludGVybnMgbnMpIDpjbGpzIChucy1pbnRlcm5zKiBucykpXHJcbiAgICAgKGZpbHRlciAoZm4gW1tfIHZdXSAoLmlzTWFjcm8gdikpKVxyXG4gICAgIChtYXBcclxuICAgICAgKGZuXHJcbiAgICAgICBbW2sgdl1dXHJcbiAgICAgICBba1xyXG4gICAgICAgIChhcy0+XHJcbiAgICAgICAgIChtZXRhIHYpXHJcbiAgICAgICAgIHZtXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtucyAoLmdldE5hbWUgKDpucyB2bSkpXVxyXG4gICAgICAgICAgKGFzc29jXHJcbiAgICAgICAgICAgdm1cclxuICAgICAgICAgICA6bnNcclxuICAgICAgICAgICBuc1xyXG4gICAgICAgICAgIDpuYW1lXHJcbiAgICAgICAgICAgKHN5bWJvbCAoc3RyIG5zKSAoc3RyIGspKVxyXG4gICAgICAgICAgIDptYWNyb1xyXG4gICAgICAgICAgIHRydWUpKSldKSlcclxuICAgICAoaW50byB7fSkpKSkpKVxyXG4ifSB7OnN5bSBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW29wXSwgOmFzIGV9XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWVcclxuIFt7OmtleXMgW29wXSwgOmFzIGV9XVxyXG4gKGNhc2VcclxuICBvcFxyXG4gIDpxdW90ZVxyXG4gIChjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSAoOmV4cHIgZSkpXHJcbiAgOmNvbnN0XHJcbiAgKDp2YWwgZSlcclxuICA6bWFwXHJcbiAgKHppcG1hcFxyXG4gICAobWFwIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlICg6a2V5cyBlKSlcclxuICAgKG1hcCBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSAoOnZhbHMgZSkpKVxyXG4gIDpzZXRcclxuICAoaW50byAje30gKG1hcCBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSAoOml0ZW1zIGUpKSlcclxuICA6dmVjdG9yXHJcbiAgKGludG8gW10gKG1hcCBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSAoOml0ZW1zIGUpKSkpKVxyXG4ifSB7OnN5bSBCT09MRUFOX09SX1NFUSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgQk9PTEVBTl9PUl9TRVEgJyN7c2VxIGJvb2xlYW59KVxyXG4ifSB7OnN5bSAqbWFjcm8taW5mZXIqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbWFjcm8taW5mZXIqIHRydWUpXHJcbiJ9IHs6c3ltIGdlbi1jb25zdGFudC1pZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdlbi1jb25zdGFudC1pZFxyXG4gW3ZhbHVlXVxyXG4gKGxldFxyXG4gIFtwcmVmaXhcclxuICAgKGNvbmRcclxuICAgIChrZXl3b3JkPyB2YWx1ZSlcclxuICAgIFwiY3N0JGt3JFwiXHJcbiAgICAoc3ltYm9sPyB2YWx1ZSlcclxuICAgIFwiY3N0JHN5bSRcIlxyXG4gICAgOmVsc2VcclxuICAgICh0aHJvd1xyXG4gICAgICM/KDpjbGogKEV4Y2VwdGlvbi4gKHN0ciBcImNvbnN0YW50IHR5cGUgXCIgKHR5cGUgdmFsdWUpIFwiIG5vdCBzdXBwb3J0ZWRcIikpIDpjbGpzIChqcy9FcnJvci4gKHN0ciBcImNvbnN0YW50IHR5cGUgXCIgKHR5cGUgdmFsdWUpIFwiIG5vdCBzdXBwb3J0ZWRcIikpKSkpXHJcbiAgIG5hbWVcclxuICAgKGlmIChrZXl3b3JkPyB2YWx1ZSkgKHN1YnMgKHN0ciB2YWx1ZSkgMSkgKHN0ciB2YWx1ZSkpXHJcbiAgIG5hbWVcclxuICAgKGlmXHJcbiAgICAoPSBcIi5cIiBuYW1lKVxyXG4gICAgXCJfRE9UX1wiXHJcbiAgICAoLT5cclxuICAgICBuYW1lXHJcbiAgICAgKHN0cmluZy9yZXBsYWNlIFwiLVwiIFwiX0RBU0hfXCIpXHJcbiAgICAgKG11bmdlKVxyXG4gICAgIChzdHJpbmcvcmVwbGFjZSBcIi5cIiBcIiRcIilcclxuICAgICAoc3RyaW5nL3JlcGxhY2VcclxuICAgICAgI1wiKD9pKVteYS16MC05JF9dXCJcclxuICAgICAgKGZuKiBbcDFfXzQ4NTkxI10gKGhleC1mb3JtYXQgcDFfXzQ4NTkxIyA0KSkpKSldXHJcbiAgKHN5bWJvbCAoc3RyIHByZWZpeCBuYW1lKSkpKVxyXG4ifSB7OnN5bSBCT09MRUFOX1NZTSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgQk9PTEVBTl9TWU0gJ2Jvb2xlYW4pXHJcbiJ9IHs6c3ltIG1hY3JvLWF1dG9sb2FkLW5zPywgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBmb3JtIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWMgbmFtZXNwYWNlIHJlcXVpcmVzIGEgbWFjcm8gZmlsZVxuICAgb2YgdGhlIHNhbWUgbmFtZS4gSWYgc28gcmV0dXJuIHRydWUuIiwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hY3JvLWF1dG9sb2FkLW5zP1xyXG4gXCJHaXZlbiBhIHNwZWMgZm9ybSBjaGVjayB3aGV0aGVyIHRoZSBzcGVjIG5hbWVzcGFjZSByZXF1aXJlcyBhIG1hY3JvIGZpbGVcXG4gICBvZiB0aGUgc2FtZSBuYW1lLiBJZiBzbyByZXR1cm4gdHJ1ZS5cIlxyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZm9ybV1cclxuICh3aGVuXHJcbiAgKm1hY3JvLWluZmVyKlxyXG4gIChsZXRcclxuICAgW25zXHJcbiAgICAoaWYgKHNlcXVlbnRpYWw/IGZvcm0pIChmaXJzdCBmb3JtKSBmb3JtKVxyXG4gICAgezprZXlzIFt1c2UtbWFjcm9zIHJlcXVpcmUtbWFjcm9zXX1cclxuICAgIChvclxyXG4gICAgIChnZXQtaW4gQGVudi8qY29tcGlsZXIqIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zXSlcclxuICAgICAjPyg6Y2xqICh3aGVuLWxldCBbcmVzICh1dGlsL25zLT5zb3VyY2UgbnMpXSAoOmFzdCAocGFyc2UtbnMgcmVzKSkpKSldXHJcbiAgIChvclxyXG4gICAgKHNvbWUgI3tuc30gKHZhbHMgdXNlLW1hY3JvcykpXHJcbiAgICAoc29tZSAje25zfSAodmFscyByZXF1aXJlLW1hY3JvcykpKSkpKVxyXG4ifSB7OnN5bSBnZXQtdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtdGFnXHJcbiBbZV1cclxuIChpZi1zb21lXHJcbiAgW3RhZyAoLT4gZSA6Zm9ybSBtZXRhIDp0YWcpXVxyXG4gIHRhZ1xyXG4gIChpZi1zb21lIFt0YWcgKC0+IGUgOnRhZyldIHRhZyAoLT4gZSA6aW5mbyA6dGFnKSkpKVxyXG4ifSB7OnN5bSBpbXBsaWNpdC1uc2VzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW1wbGljaXQtbnNlc1xyXG4gJyN7U3RyaW5nIGdvb2cuc3RyaW5nIGdvb2cgZ29vZy5vYmplY3QgTWF0aCBnb29nLmFycmF5fSlcclxuIn0gezpzeW0gdmFsaWQtcHJvdG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdmFsaWQtcHJvdG8gW3hdICh3aGVuIChzeW1ib2w/IHgpIHgpKVxyXG4ifSB7OnN5bSBub3JtYWxpemUtanMtdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3JtYWxpemUtanMtdGFnXHJcbiBbeF1cclxuIChpZi1ub3RcclxuICAoPSAnanMgeClcclxuICAod2l0aC1tZXRhXHJcbiAgICdqc1xyXG4gICB7OnByZWZpeFxyXG4gICAgKGNvbmpcclxuICAgICAoLT4+IChzdHJpbmcvc3BsaXQgKG5hbWUgeCkgI1wiXFwuXCIpIChtYXAgc3ltYm9sKSB2ZWMpXHJcbiAgICAgJ3Byb3RvdHlwZSl9KVxyXG4gIHgpKVxyXG4ifSB7OnN5bSBhbmFseXplLWxpc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxpc3RcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbZXhwci1lbnZcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgaXRlbXNcclxuICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAobWFwdiAoZm4qIFtwMV9fNDg2MzcjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2MzcjKSkgZm9ybSkpXVxyXG4gIChhbmFseXplLXdyYXAtbWV0YVxyXG4gICB7Om9wIDpsaXN0LFxyXG4gICAgOmVudiBlbnYsXHJcbiAgICA6Zm9ybSBmb3JtLFxyXG4gICAgOml0ZW1zIGl0ZW1zLFxyXG4gICAgOmNoaWxkcmVuIFs6aXRlbXNdLFxyXG4gICAgOnRhZyAnY2xqcy5jb3JlL0lMaXN0fSkpKVxyXG4ifSB7OnN5bSB3YXJuaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3dhcm5pbmctdHlwZSBlbnYgZXh0cmFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3YXJuaW5nXHJcbiBbd2FybmluZy10eXBlIGVudiBleHRyYV1cclxuIChkb3NlcVxyXG4gIFtoYW5kbGVyICpjbGpzLXdhcm5pbmctaGFuZGxlcnMqXVxyXG4gIChoYW5kbGVyIHdhcm5pbmctdHlwZSBlbnYgZXh0cmEpKSlcclxuIn0gezpzeW0gaW1wbGljaXQtaW1wb3J0PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgcHJlZml4IHN1ZmZpeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGltcGxpY2l0LWltcG9ydD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiBwcmVmaXggc3VmZml4XVxyXG4gKGNvbnRhaW5zPyBpbXBsaWNpdC1uc2VzIHByZWZpeCkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctdXNlLW1hY3JvcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt1c2UtbWFjcm9zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctdXNlLW1hY3Jvc1xyXG4gW3VzZS1tYWNyb3MgZW52XVxyXG4gKGxldFxyXG4gIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAoaW50b1xyXG4gICB7fVxyXG4gICAoZmlsdGVyIChmbiBbW3N5bSBsaWJdXSAobWlzc2luZy11c2UtbWFjcm8/IGxpYiBzeW0pKSB1c2UtbWFjcm9zKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybSBuYW1lIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplKlxyXG4gW2VudiBmb3JtIG5hbWUgb3B0c11cclxuIChsZXRcclxuICBbcGFzc2VzXHJcbiAgICpwYXNzZXMqXHJcbiAgIHBhc3Nlc1xyXG4gICAoaWYgKG5pbD8gcGFzc2VzKSBkZWZhdWx0LXBhc3NlcyBwYXNzZXMpXHJcbiAgIGZvcm1cclxuICAgKGlmIChpbnN0YW5jZT8gTGF6eVNlcSBmb3JtKSAoaWYgKHNlcSBmb3JtKSBmb3JtICgpKSBmb3JtKVxyXG4gICBhc3RcclxuICAgKGFuYWx5emUtZm9ybSBlbnYgZm9ybSBuYW1lIG9wdHMpXVxyXG4gIChyZWR1Y2UgKGZuIFthc3QgcGFzc10gKHBhc3MgZW52IGFzdCBvcHRzKSkgYXN0IHBhc3NlcykpKVxyXG4ifSB7OnN5bSAtY2xqcy1tYWNyb3MtbG9hZGVkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAtY2xqcy1tYWNyb3MtbG9hZGVkIChhdG9tIGZhbHNlKSlcclxuIn0gezpzeW0gY2hlY2stdXNlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt1c2VzIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLXVzZXNcclxuIFt1c2VzIGVudl1cclxuIChsZXRcclxuICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgKGRvc2VxXHJcbiAgIFtbc3ltIGxpYl0gdXNlc11cclxuICAgKHdoZW5cclxuICAgIChtaXNzaW5nLXVzZT8gbGliIHN5bSBjZW52KVxyXG4gICAgKHRocm93XHJcbiAgICAgKGVycm9yXHJcbiAgICAgIGVudlxyXG4gICAgICAoZXJyb3ItbWVzc2FnZVxyXG4gICAgICAgOnVuZGVjbGFyZWQtbnMtZm9ybVxyXG4gICAgICAgezp0eXBlIFwidmFyXCIsIDpsaWIgbGliLCA6c3ltIHN5bX0pKSkpKSkpXHJcbiJ9IHs6c3ltIGZpbmQtbWF0Y2hpbmctbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2YgcGFyYW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1tYXRjaGluZy1tZXRob2RcclxuIFtmIHBhcmFtc11cclxuIChsZXRcclxuICBbbWV0aG9kcyAob3IgKDptZXRob2RzIGYpICgtPiBmIDppbmZvIDptZXRob2RzKSkgYyAoY291bnQgcGFyYW1zKV1cclxuICAoc29tZVxyXG4gICAoZm4gW21dIChhbmQgKG9yICg9PSAoOmZpeGVkLWFyaXR5IG0pIGMpICg6dmFyaWFkaWM/IG0pKSBtKSlcclxuICAgbWV0aG9kcykpKVxyXG4ifSB7OnN5bSAqcHJpdmF0ZS12YXItYWNjZXNzLW5vd2FybiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpwcml2YXRlLXZhci1hY2Nlc3Mtbm93YXJuKiBmYWxzZSlcclxuIn0gezpzeW0gaW52b2tlLWFyZy10eXBlLXZhbGlkYXRvcnMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnZva2UtYXJnLXR5cGUtdmFsaWRhdG9yc1xyXG4gKGxldFxyXG4gIFthZ2V0LXZhbGlkYXRvclxyXG4gICB7OnZhbGlkP1xyXG4gICAgKGZuKlxyXG4gICAgIFtwMV9fNDg2NDQjXVxyXG4gICAgIChhbmRcclxuICAgICAgKGFycmF5LXR5cGU/IChmaXJzdCBwMV9fNDg2NDQjKSlcclxuICAgICAgKGV2ZXJ5PyBudW1lcmljLXR5cGU/IChyZXN0IHAxX180ODY0NCMpKSkpLFxyXG4gICAgOndhcm5pbmctdHlwZSA6aW52YWxpZC1hcnJheS1hY2Nlc3N9XHJcbiAgIGFzZXQtdmFsaWRhdG9yXHJcbiAgIHs6dmFsaWQ/XHJcbiAgICAoZm4qXHJcbiAgICAgW3AxX180ODY0NSNdXHJcbiAgICAgKGFuZFxyXG4gICAgICAoYXJyYXktdHlwZT8gKGZpcnN0IHAxX180ODY0NSMpKVxyXG4gICAgICAoZXZlcnk/IG51bWVyaWMtdHlwZT8gKGJ1dGxhc3QgKHJlc3QgcDFfXzQ4NjQ1IykpKSkpLFxyXG4gICAgOndhcm5pbmctdHlwZSA6aW52YWxpZC1hcnJheS1hY2Nlc3N9XVxyXG4gIHsnY2xqcy5jb3JlL2NoZWNrZWQtYWdldCBhZ2V0LXZhbGlkYXRvcixcclxuICAgJ2NsanMuY29yZS9jaGVja2VkLWFzZXQgYXNldC12YWxpZGF0b3IsXHJcbiAgICdjbGpzLmNvcmUvY2hlY2tlZC1hZ2V0JyBhZ2V0LXZhbGlkYXRvcixcclxuICAgJ2NsanMuY29yZS9jaGVja2VkLWFzZXQnIGFzZXQtdmFsaWRhdG9yfSkpXHJcbiJ9IHs6c3ltICpjbGpzLWZpbGUqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1maWxlKiBuaWwpXHJcbiJ9IHs6c3ltICpmaWxlLWRlZnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZmlsZS1kZWZzKiBuaWwpXHJcbiJ9IHs6c3ltIGluZmVyLWlmLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXItaWZcclxuIFtlbnYgZV1cclxuIChsZXRcclxuICBbezprZXlzIFtvcCBmb3JtXX1cclxuICAgKHVud3JhcC1xdW90ZSAoOnRlc3QgZSkpXHJcbiAgIHRoZW4tdGFnXHJcbiAgIChpbmZlci10YWcgZW52ICg6dGhlbiBlKSldXHJcbiAgKGlmXHJcbiAgIChhbmRcclxuICAgICM/KDpjbGogKD0gb3AgOmNvbnN0KSA6Y2xqcyAoa2V5d29yZC1pZGVudGljYWw/IG9wIDpjb25zdCkpXHJcbiAgICAobm90IChuaWw/IGZvcm0pKVxyXG4gICAgKG5vdCAoZmFsc2U/IGZvcm0pKSlcclxuICAgdGhlbi10YWdcclxuICAgKGxldFxyXG4gICAgW2Vsc2UtdGFnIChpbmZlci10YWcgZW52ICg6ZWxzZSBlKSldXHJcbiAgICAoY29uZFxyXG4gICAgIChvclxyXG4gICAgICAjPyg6Y2xqICg9IHRoZW4tdGFnIGVsc2UtdGFnKSA6Y2xqcyAoc3ltYm9sLWlkZW50aWNhbD8gdGhlbi10YWcgZWxzZS10YWcpKVxyXG4gICAgICAjPyg6Y2xqICg9IGVsc2UtdGFnIElHTk9SRV9TWU0pIDpjbGpzIChzeW1ib2wtaWRlbnRpY2FsPyBlbHNlLXRhZyBJR05PUkVfU1lNKSkpXHJcbiAgICAgdGhlbi10YWdcclxuICAgICAjPyg6Y2xqICg9IHRoZW4tdGFnIElHTk9SRV9TWU0pIDpjbGpzIChzeW1ib2wtaWRlbnRpY2FsPyB0aGVuLXRhZyBJR05PUkVfU1lNKSlcclxuICAgICBlbHNlLXRhZ1xyXG4gICAgIChhbmRcclxuICAgICAgKG9yIChzb21lPyAoZ2V0IE5PVF9OQVRJVkUgdGhlbi10YWcpKSAodHlwZT8gZW52IHRoZW4tdGFnKSlcclxuICAgICAgKG9yIChzb21lPyAoZ2V0IE5PVF9OQVRJVkUgZWxzZS10YWcpKSAodHlwZT8gZW52IGVsc2UtdGFnKSkpXHJcbiAgICAgJ2NsalxyXG4gICAgIDplbHNlXHJcbiAgICAgKGlmXHJcbiAgICAgIChhbmRcclxuICAgICAgIChzb21lPyAoZ2V0IEJPT0xFQU5fT1JfU0VRIHRoZW4tdGFnKSlcclxuICAgICAgIChzb21lPyAoZ2V0IEJPT0xFQU5fT1JfU0VRIGVsc2UtdGFnKSkpXHJcbiAgICAgICdzZXFcclxuICAgICAgKGxldFxyXG4gICAgICAgW3RoZW4tdGFnXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICM/KDpjbGogKHNldD8gdGhlbi10YWcpIDpjbGpzIChjbGpzLXNldD8gdGhlbi10YWcpKVxyXG4gICAgICAgICB0aGVuLXRhZ1xyXG4gICAgICAgICAje3RoZW4tdGFnfSlcclxuICAgICAgICBlbHNlLXRhZ1xyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAjPyg6Y2xqIChzZXQ/IGVsc2UtdGFnKSA6Y2xqcyAoY2xqcy1zZXQ/IGVsc2UtdGFnKSlcclxuICAgICAgICAgZWxzZS10YWdcclxuICAgICAgICAgI3tlbHNlLXRhZ30pXVxyXG4gICAgICAgKGludG8gdGhlbi10YWcgZWxzZS10YWcpKSkpKSkpKVxyXG4ifSB7OnN5bSAqdmVyYm9zZSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp2ZXJib3NlKiBmYWxzZSlcclxuIn0gezpzeW0gYW5hbHl6ZS1qcy12YWx1ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtanMtdmFsdWVcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbdmFsICguLXZhbCBmb3JtKSBleHByLWVudiAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKV1cclxuICAoaWZcclxuICAgKG1hcD8gdmFsKVxyXG4gICAobGV0XHJcbiAgICBba2V5c1xyXG4gICAgICh2ZWMgKGtleXMgdmFsKSlcclxuICAgICB2YWxzXHJcbiAgICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAgIChtYXB2XHJcbiAgICAgICAoZm4qIFtwMV9fNDg2NDAjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2NDAjKSlcclxuICAgICAgICh2YWxzIHZhbCkpKV1cclxuICAgIHs6b3AgOmpzLW9iamVjdCxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDprZXlzIGtleXMsXHJcbiAgICAgOnZhbHMgdmFscyxcclxuICAgICA6Y2hpbGRyZW4gWzp2YWxzXSxcclxuICAgICA6dGFnICdvYmplY3R9KVxyXG4gICAobGV0XHJcbiAgICBbaXRlbXNcclxuICAgICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgICAgKG1hcHYgKGZuKiBbcDFfXzQ4NjQxI10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjQxIykpIHZhbCkpXVxyXG4gICAgezpvcCA6anMtYXJyYXksXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6aXRlbXMgaXRlbXMsXHJcbiAgICAgOmNoaWxkcmVuIFs6aXRlbXNdLFxyXG4gICAgIDp0YWcgJ2FycmF5fSkpKSlcclxuIn0gezpzeW0gbnMtPm1vZHVsZS10eXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnMtPm1vZHVsZS10eXBlXHJcbiBbbnNdXHJcbiAoY29uZFxyXG4gIChqcy1tb2R1bGUtZXhpc3RzPyBucylcclxuICA6anNcclxuICAobm9kZS1tb2R1bGUtZGVwPyBucylcclxuICA6bm9kZVxyXG4gIChkZXAtaGFzLWdsb2JhbC1leHBvcnRzPyBucylcclxuICA6Z2xvYmFsKSlcclxuIn0gezpzeW0gc291cmNlLWluZm8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52XSBbbmFtZSBlbnZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtaW5mb1xyXG4gKFtlbnZdICh3aGVuICg6bGluZSBlbnYpIChzb3VyY2UtaW5mbyBuaWwgZW52KSkpXHJcbiAoW25hbWUgZW52XVxyXG4gIChjb25kLT5cclxuICAgezpmaWxlXHJcbiAgICAoaWZcclxuICAgICAoPSAoLT4gZW52IDpucyA6bmFtZSkgJ2NsanMuY29yZSlcclxuICAgICBcImNsanMvY29yZS5jbGpzXCJcclxuICAgICAqY2xqcy1maWxlKiksXHJcbiAgICA6bGluZSAoZ2V0LWxpbmUgbmFtZSBlbnYpLFxyXG4gICAgOmNvbHVtbiAoZ2V0LWNvbCBuYW1lIGVudil9XHJcbiAgICg6cm9vdC1zb3VyY2UtaW5mbyBlbnYpXHJcbiAgIChtZXJnZSAoc2VsZWN0LWtleXMgZW52IFs6cm9vdC1zb3VyY2UtaW5mb10pKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWZuLW1ldGhvZC1wYXJhbSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWZuLW1ldGhvZC1wYXJhbVxyXG4gW2Vudl1cclxuIChmblxyXG4gIFtbbG9jYWxzIHBhcmFtc10gW2FyZy1pZCBuYW1lXV1cclxuICAod2hlblxyXG4gICAobmFtZXNwYWNlIG5hbWUpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yIGVudiAoc3RyIFwiQ2FuJ3QgdXNlIHF1YWxpZmllZCBuYW1lIGFzIHBhcmFtZXRlcjogXCIgbmFtZSkpKSlcclxuICAobGV0XHJcbiAgIFtsaW5lXHJcbiAgICAoZ2V0LWxpbmUgbmFtZSBlbnYpXHJcbiAgICBjb2x1bW5cclxuICAgIChnZXQtY29sIG5hbWUgZW52KVxyXG4gICAgbm1ldGFcclxuICAgIChtZXRhIG5hbWUpXHJcbiAgICB0YWdcclxuICAgICg6dGFnIG5tZXRhKVxyXG4gICAgc2hhZG93XHJcbiAgICAod2hlbiAoc29tZT8gbG9jYWxzKSAoaGFuZGxlLXN5bWJvbC1sb2NhbCBuYW1lIChsb2NhbHMgbmFtZSkpKVxyXG4gICAgZW52XHJcbiAgICAobWVyZ2UgKHNlbGVjdC1rZXlzIGVudiBbOmNvbnRleHRdKSB7OmxpbmUgbGluZSwgOmNvbHVtbiBjb2x1bW59KVxyXG4gICAgcGFyYW1cclxuICAgIHs6bmFtZSBuYW1lLFxyXG4gICAgIDpiaW5kaW5nLWZvcm0/IHRydWUsXHJcbiAgICAgOm9wIDpiaW5kaW5nLFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpjb2x1bW4gY29sdW1uLFxyXG4gICAgIDpsaW5lIGxpbmUsXHJcbiAgICAgOmFyZy1pZCBhcmctaWQsXHJcbiAgICAgOmluZm8gezpuYW1lIG5hbWUsIDpzaGFkb3cgc2hhZG93fSxcclxuICAgICA6dGFnIHRhZyxcclxuICAgICA6c2hhZG93IHNoYWRvdyxcclxuICAgICA6bG9jYWwgOmFyZ31dXHJcbiAgIFsoYXNzb2MgbG9jYWxzIG5hbWUgcGFyYW0pIChjb25qIHBhcmFtcyBwYXJhbSldKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtc2V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zZXRcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbZXhwci1lbnZcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgaXRlbXNcclxuICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAobWFwdiAoZm4qIFtwMV9fNDg2MzkjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2MzkjKSkgZm9ybSkpXVxyXG4gIChhbmFseXplLXdyYXAtbWV0YVxyXG4gICB7Om9wIDpzZXQsXHJcbiAgICA6ZW52IGVudixcclxuICAgIDpmb3JtIGZvcm0sXHJcbiAgICA6aXRlbXMgaXRlbXMsXHJcbiAgICA6Y2hpbGRyZW4gWzppdGVtc10sXHJcbiAgICA6dGFnICdjbGpzLmNvcmUvSVNldH0pKSlcclxuIn0gezpzeW0gbnVtZXJpYy10eXBlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0XSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtZXJpYy10eXBlP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbdF1cclxuIChjb25kXHJcbiAgKG5pbD8gdClcclxuICB0cnVlXHJcbiAgKD0gJ2Nsai1uaWwgdClcclxuICB0cnVlXHJcbiAgKGpzLXRhZz8gdClcclxuICB0cnVlXHJcbiAgOmVsc2VcclxuICAoaWZcclxuICAgKGFuZCAoc3ltYm9sPyB0KSAoc29tZT8gKGdldCBOVU1FUklDX1NFVCB0KSkpXHJcbiAgIHRydWVcclxuICAgKHdoZW5cclxuICAgICM/KDpjbGogKHNldD8gdCkgOmNsanMgKGNsanMtc2V0PyB0KSlcclxuICAgIChvclxyXG4gICAgIChjb250YWlucz8gdCAnbnVtYmVyKVxyXG4gICAgIChjb250YWlucz8gdCAnbG9uZylcclxuICAgICAoY29udGFpbnM/IHQgJ2RvdWJsZSlcclxuICAgICAoY29udGFpbnM/IHQgJ2FueSlcclxuICAgICAoY29udGFpbnM/IHQgJ2pzKSkpKSkpXHJcbiJ9IHs6c3ltIGFzdD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzdD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW3hdXHJcbiAoYW5kIChtYXA/IHgpIChjb250YWlucz8geCA6b3ApKSlcclxuIn0gezpzeW0gY2hlY2tlZC1hcnJheXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGZhbHNlLXksIDp3YXJuLCBvciA6ZXJyb3IgYmFzZWQgb24gY29uZmlndXJhdGlvbiBhbmQgdGhlXG4gICBjdXJyZW50IHZhbHVlIG9mICp1bmNoZWNrZWQtYXJyYXlzKi4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVja2VkLWFycmF5c1xyXG4gXCJSZXR1cm5zIGZhbHNlLXksIDp3YXJuLCBvciA6ZXJyb3IgYmFzZWQgb24gY29uZmlndXJhdGlvbiBhbmQgdGhlXFxuICAgY3VycmVudCB2YWx1ZSBvZiAqdW5jaGVja2VkLWFycmF5cyouXCJcclxuIFtdXHJcbiAod2hlblxyXG4gIChhbmQgKG5vdCAoOmFkdmFuY2VkIChjb21waWxlci1vcHRpb25zKSkpIChub3QgKnVuY2hlY2tlZC1hcnJheXMqKSlcclxuICAqY2hlY2tlZC1hcnJheXMqKSlcclxuIn0gezpzeW0gZWxpZGUtZW52LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBhc3Qgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm4gZWxpZGUtZW52IFtlbnYgYXN0IG9wdHNdIChkaXNzb2MgYXN0IDplbnYpKVxyXG4ifSB7OnN5bSBqcy1tb2R1bGUtZXhpc3RzPyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGpzLW1vZHVsZS1leGlzdHM/KiAobWVtb2l6ZSBpbnRlcm5hbC1qcy1tb2R1bGUtZXhpc3RzPykpXHJcbiJ9IHs6c3ltIHBhcnNlLXJlcXVpcmUtc3BlYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbWFjcm9zPyBkZXBzIGFsaWFzZXMgc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLXJlcXVpcmUtc3BlY1xyXG4gW2VudiBtYWNyb3M/IGRlcHMgYWxpYXNlcyBzcGVjXVxyXG4gKGlmXHJcbiAgKG9yIChzeW1ib2w/IHNwZWMpIChzdHJpbmc/IHNwZWMpKVxyXG4gIChyZWN1ciBlbnYgbWFjcm9zPyBkZXBzIGFsaWFzZXMgW3NwZWNdKVxyXG4gIChkb1xyXG4gICAoYmFzaWMtdmFsaWRhdGUtbnMtc3BlYyBlbnYgbWFjcm9zPyBzcGVjKVxyXG4gICAobGV0XHJcbiAgICBbW2xpYiAmIG9wdHNdXHJcbiAgICAgc3BlY1xyXG4gICAgIFtsaWIganMtbW9kdWxlLXByb3ZpZGVzXVxyXG4gICAgIChpZi1zb21lXHJcbiAgICAgIFtqcy1tb2R1bGUtbmFtZVxyXG4gICAgICAgKGdldHMgQGVudi8qY29tcGlsZXIqIDpqcy1tb2R1bGUtaW5kZXggKHN0ciBsaWIpIDpuYW1lKV1cclxuICAgICAgWyhzeW1ib2wganMtbW9kdWxlLW5hbWUpIGxpYl1cclxuICAgICAgW2xpYiBuaWxdKVxyXG4gICAgIHthbGlhcyA6YXMsXHJcbiAgICAgIHJlZmVycmVkIDpyZWZlcixcclxuICAgICAgcmVuYW1lZCA6cmVuYW1lLFxyXG4gICAgICA6b3Ige2FsaWFzIChpZiAoc3RyaW5nPyBsaWIpIChzeW1ib2wgKG11bmdlIGxpYikpIGxpYil9fVxyXG4gICAgIChhcHBseSBoYXNoLW1hcCBvcHRzKVxyXG4gICAgIHJlZmVycmVkLXdpdGhvdXQtcmVuYW1lZFxyXG4gICAgIChzZXEgKHJlbW92ZSAoc2V0IChrZXlzIHJlbmFtZWQpKSByZWZlcnJlZCkpXHJcbiAgICAgW3JrIHVrIHJlbmtdXHJcbiAgICAgKGlmXHJcbiAgICAgIG1hY3Jvcz9cclxuICAgICAgWzpyZXF1aXJlLW1hY3JvcyA6dXNlLW1hY3JvcyA6cmVuYW1lLW1hY3Jvc11cclxuICAgICAgWzpyZXF1aXJlIDp1c2UgOnJlbmFtZV0pXVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKG9yIChzeW1ib2w/IGFsaWFzKSAobmlsPyBhbGlhcykpXHJcbiAgICAgKHRocm93XHJcbiAgICAgIChlcnJvclxyXG4gICAgICAgZW52XHJcbiAgICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgICAgc3BlY1xyXG4gICAgICAgIFwiOmFzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzeW1ib2wgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSlcclxuICAgICh3aGVuXHJcbiAgICAgKHNvbWU/IGFsaWFzKVxyXG4gICAgIChsZXRcclxuICAgICAgW2FsaWFzLXR5cGVcclxuICAgICAgIChpZiBtYWNyb3M/IDptYWNyb3MgOmZucylcclxuICAgICAgIGxpYidcclxuICAgICAgICgoYWxpYXMtdHlwZSBAYWxpYXNlcykgYWxpYXMpXVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKGFuZCAoc29tZT8gbGliJykgKG5vdD0gbGliIGxpYicpKVxyXG4gICAgICAgKHRocm93XHJcbiAgICAgICAgKGVycm9yXHJcbiAgICAgICAgIGVudlxyXG4gICAgICAgICAocGFyc2UtbnMtZXJyb3ItbXNnIHNwZWMgXCI6YXMgYWxpYXMgbXVzdCBiZSB1bmlxdWVcIikpKSlcclxuICAgICAgKHN3YXAhXHJcbiAgICAgICBhbGlhc2VzXHJcbiAgICAgICB1cGRhdGUtaW5cclxuICAgICAgIFthbGlhcy10eXBlXVxyXG4gICAgICAgY29ualxyXG4gICAgICAgW2FsaWFzIGxpYl1cclxuICAgICAgICh3aGVuIGpzLW1vZHVsZS1wcm92aWRlcyBbanMtbW9kdWxlLXByb3ZpZGVzIGxpYl0pKSkpXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAob3JcclxuICAgICAgKGFuZCAoc2VxdWVudGlhbD8gcmVmZXJyZWQpIChldmVyeT8gc3ltYm9sPyByZWZlcnJlZCkpXHJcbiAgICAgIChuaWw/IHJlZmVycmVkKSlcclxuICAgICAodGhyb3dcclxuICAgICAgKGVycm9yXHJcbiAgICAgICBlbnZcclxuICAgICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgICBzcGVjXHJcbiAgICAgICAgXCI6cmVmZXIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIG9mIHN5bWJvbHMgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSlcclxuICAgICh3aGVuLW5vdCBtYWNyb3M/IChzd2FwISBkZXBzIGNvbmogbGliKSlcclxuICAgIChtZXJnZVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChzb21lPyBhbGlhcylcclxuICAgICAge3JrXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICB7YWxpYXMgbGlifVxyXG4gICAgICAgIHtsaWIgbGlifVxyXG4gICAgICAgICh3aGVuIGpzLW1vZHVsZS1wcm92aWRlcyB7anMtbW9kdWxlLXByb3ZpZGVzIGxpYn0pKX0pXHJcbiAgICAgKHdoZW5cclxuICAgICAgKHNvbWU/IHJlZmVycmVkLXdpdGhvdXQtcmVuYW1lZClcclxuICAgICAge3VrXHJcbiAgICAgICAoYXBwbHlcclxuICAgICAgICBoYXNoLW1hcFxyXG4gICAgICAgIChpbnRlcmxlYXZlIHJlZmVycmVkLXdpdGhvdXQtcmVuYW1lZCAocmVwZWF0IGxpYikpKX0pXHJcbiAgICAgKHdoZW5cclxuICAgICAgKHNvbWU/IHJlbmFtZWQpXHJcbiAgICAgIHtyZW5rXHJcbiAgICAgICAocmVkdWNlXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFttIFtvcmlnaW5hbCByZW5hbWVkXV1cclxuICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAoc29tZSAje29yaWdpbmFsfSByZWZlcnJlZClcclxuICAgICAgICAgICh0aHJvd1xyXG4gICAgICAgICAgIChlcnJvclxyXG4gICAgICAgICAgICBlbnZcclxuICAgICAgICAgICAgKHN0ciBcIlJlbmFtZWQgc3ltYm9sIFwiIG9yaWdpbmFsIFwiIG5vdCByZWZlcnJlZFwiKSkpKVxyXG4gICAgICAgICAoYXNzb2MgbSByZW5hbWVkIChzeW1ib2wgKHN0ciBsaWIpIChzdHIgb3JpZ2luYWwpKSkpXHJcbiAgICAgICAge31cclxuICAgICAgICByZW5hbWVkKX0pKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS13cmFwLW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtd3JhcC1tZXRhXHJcbiBbZXhwcl1cclxuIChsZXRcclxuICBbZm9ybSAoOmZvcm0gZXhwcikgbSAoZWxpZGUtaXJyZWxldmFudC1tZXRhIChtZXRhIGZvcm0pKV1cclxuICAoaWZcclxuICAgKHNvbWU/IChzZXEgbSkpXHJcbiAgIChsZXRcclxuICAgIFtlbnZcclxuICAgICAoOmVudiBleHByKVxyXG4gICAgIGV4cHJcclxuICAgICAoYXNzb2MtaW4gZXhwciBbOmVudiA6Y29udGV4dF0gOmV4cHIpXHJcbiAgICAgbWV0YS1leHByXHJcbiAgICAgKGFuYWx5emUtbWFwICg6ZW52IGV4cHIpIG0pXVxyXG4gICAgezpvcCA6d2l0aC1tZXRhLFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOm1ldGEgbWV0YS1leHByLFxyXG4gICAgIDpleHByIGV4cHIsXHJcbiAgICAgOmNoaWxkcmVuIFs6bWV0YSA6ZXhwcl19KVxyXG4gICBleHByKSkpXHJcbiJ9IHs6c3ltIEFOWV9TWU0sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEFOWV9TWU0gJ2FueSlcclxuIn0gezpzeW0gZ2V0LWpzLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWpzLXRhZ1xyXG4gW2Zvcm1dXHJcbiAobGV0XHJcbiAgW2Zvcm0tbWV0YSAobWV0YSBmb3JtKV1cclxuICAoaWYtc29tZVxyXG4gICBbdGFnICg6dGFnIGZvcm0tbWV0YSldXHJcbiAgIHRhZ1xyXG4gICAod2hlbiAodHJ1ZT8gKDpudW1lcmljIGZvcm0tbWV0YSkpICdudW1iZXIpKSkpXHJcbiJ9IHs6c3ltICphbmFseXplLWRlcHMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqYW5hbHl6ZS1kZXBzKiB0cnVlKVxyXG4ifSB7OnN5bSBhbmFseXplLWxldC1iaW5kaW5ncyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW5jbC1lbnYgYmluZGluZ3Mgb3BdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldC1iaW5kaW5ncypcclxuIFtlbmNsLWVudiBiaW5kaW5ncyBvcF1cclxuIChsb29wXHJcbiAgW2Jlc1xyXG4gICBbXVxyXG4gICBlbnZcclxuICAgKGFzc29jIGVuY2wtZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBiaW5kaW5nc1xyXG4gICAoc2VxIChwYXJ0aXRpb24gMiBiaW5kaW5ncykpXVxyXG4gIChpZi1zb21lXHJcbiAgIFtbbmFtZSBpbml0XSAoZmlyc3QgYmluZGluZ3MpXVxyXG4gICAobGV0XHJcbiAgICBbXVxyXG4gICAgKHdoZW5cclxuICAgICAob3JcclxuICAgICAgKHNvbWU/IChuYW1lc3BhY2UgbmFtZSkpXHJcbiAgICAgICM/KDpjbGogKC5jb250YWlucyAoc3RyIG5hbWUpIFwiLlwiKSA6Y2xqcyAoZ29vZy5zdHJpbmcvY29udGFpbnMgKHN0ciBuYW1lKSBcIi5cIikpKVxyXG4gICAgICh0aHJvdyAoZXJyb3IgZW5jbC1lbnYgKHN0ciBcIkludmFsaWQgbG9jYWwgbmFtZTogXCIgbmFtZSkpKSlcclxuICAgIChsZXRcclxuICAgICBbaW5pdC1leHByXHJcbiAgICAgIChhbmFseXplLWxldC1iaW5kaW5nLWluaXRcclxuICAgICAgIGVudlxyXG4gICAgICAgaW5pdFxyXG4gICAgICAgKGNvbnMgezpwYXJhbXMgYmVzfSAqbG9vcC1sZXRzKikpXHJcbiAgICAgIGxpbmVcclxuICAgICAgKGdldC1saW5lIG5hbWUgZW52KVxyXG4gICAgICBjb2xcclxuICAgICAgKGdldC1jb2wgbmFtZSBlbnYpXHJcbiAgICAgIHNoYWRvd1xyXG4gICAgICAoaGFuZGxlLXN5bWJvbC1sb2NhbCBuYW1lIChnZXQtaW4gZW52IFs6bG9jYWxzIG5hbWVdKSlcclxuICAgICAgYmVcclxuICAgICAgezppbml0IGluaXQtZXhwcixcclxuICAgICAgIDpuYW1lIG5hbWUsXHJcbiAgICAgICA6YmluZGluZy1mb3JtPyB0cnVlLFxyXG4gICAgICAgOm9wIDpiaW5kaW5nLFxyXG4gICAgICAgOmVudiB7OmxpbmUgbGluZSwgOmNvbHVtbiBjb2x9LFxyXG4gICAgICAgOmNvbHVtbiBjb2wsXHJcbiAgICAgICA6bGluZSBsaW5lLFxyXG4gICAgICAgOmluZm8gezpuYW1lIG5hbWUsIDpzaGFkb3cgc2hhZG93fSxcclxuICAgICAgIDp0YWcgKGdldC1sZXQtdGFnIG5hbWUgaW5pdC1leHByKSxcclxuICAgICAgIDpzaGFkb3cgc2hhZG93LFxyXG4gICAgICAgOmxvY2FsIG9wfVxyXG4gICAgICBiZVxyXG4gICAgICAoaWZcclxuICAgICAgICg9IDpmbiAoOm9wIGluaXQtZXhwcikpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICBiZVxyXG4gICAgICAgIHs6Zm4tdmFyIHRydWUsXHJcbiAgICAgICAgIDptZXRob2RzXHJcbiAgICAgICAgIChpbnRvXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgICAgKG1hcFxyXG4gICAgICAgICAgIChmbipcclxuICAgICAgICAgICAgW3AxX180ODYwOCNdXHJcbiAgICAgICAgICAgIChzZWxlY3Qta2V5cyBwMV9fNDg2MDgjIFs6dGFnIDpmaXhlZC1hcml0eSA6dmFyaWFkaWM/XSkpXHJcbiAgICAgICAgICAgKDptZXRob2RzIGluaXQtZXhwcikpKSxcclxuICAgICAgICAgOnZhcmlhZGljPyAoOnZhcmlhZGljPyBpbml0LWV4cHIpLFxyXG4gICAgICAgICA6bWF4LWZpeGVkLWFyaXR5ICg6bWF4LWZpeGVkLWFyaXR5IGluaXQtZXhwciksXHJcbiAgICAgICAgIDptZXRob2QtcGFyYW1zIChtYXAgOnBhcmFtcyAoOm1ldGhvZHMgaW5pdC1leHByKSl9KVxyXG4gICAgICAgYmUpXVxyXG4gICAgIChyZWN1clxyXG4gICAgICAoY29uaiBiZXMgYmUpXHJcbiAgICAgIChhc3NvYy1pbiBlbnYgWzpsb2NhbHMgbmFtZV0gYmUpXHJcbiAgICAgIChuZXh0IGJpbmRpbmdzKSkpKVxyXG4gICBbYmVzIGVudl0pKSlcclxuIn0gezpzeW0gYW5hbHlzaXMtZXJyb3I/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHlzaXMtZXJyb3I/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtleF1cclxuICg9IDpjbGpzL2FuYWx5c2lzLWVycm9yICg6dGFnIChleC1kYXRhIGV4KSkpKVxyXG4ifSB7OnN5bSByZXBsYWNlLWVudi1wYXNzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25ldy1lbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBsYWNlLWVudi1wYXNzXHJcbiBbbmV3LWVudl1cclxuIChmbiBbZW52IGFzdCBvcHRzXSAoYXNzb2MgYXN0IDplbnYgbmV3LWVudikpKVxyXG4ifSB7OnN5bSBwYXJzZS1ucy1leGNsdWRlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLW5zLWV4Y2x1ZGVzXHJcbiBbZW52IGFyZ3NdXHJcbiAocmVkdWNlXHJcbiAgKGZuXHJcbiAgIFtzIFtrICYgZmlsdGVyc11dXHJcbiAgIChpZlxyXG4gICAgKD0gayA6cmVmZXItY2xvanVyZSlcclxuICAgIChkb1xyXG4gICAgICh3aGVuXHJcbiAgICAgIChzZXEgKDpleGNsdWRlcyBzKSlcclxuICAgICAgKHRocm93XHJcbiAgICAgICAoZXJyb3JcclxuICAgICAgICBlbnZcclxuICAgICAgICBcIk9ubHkgb25lIDpyZWZlci1jbG9qdXJlIGZvcm0gaXMgYWxsb3dlZCBwZXIgbmFtZXNwYWNlIGRlZmluaXRpb25cIikpKVxyXG4gICAgIChsZXRcclxuICAgICAgW3ZhbGlkLWt3c1xyXG4gICAgICAgI3s6ZXhjbHVkZSA6cmVuYW1lfVxyXG4gICAgICAgeHNcclxuICAgICAgIChsb29wXHJcbiAgICAgICAgW2ZzXHJcbiAgICAgICAgIChzZXEgZmlsdGVycylcclxuICAgICAgICAgcmV0XHJcbiAgICAgICAgIHs6ZXhjbHVkZXMgI3t9LCA6cmVuYW1lcyB7fX1cclxuICAgICAgICAgZXJyXHJcbiAgICAgICAgIChub3QgKGV2ZW4/IChjb3VudCBmaWx0ZXJzKSkpXVxyXG4gICAgICAgIChjb25kXHJcbiAgICAgICAgICh0cnVlPyBlcnIpXHJcbiAgICAgICAgICh0aHJvd1xyXG4gICAgICAgICAgKGVycm9yXHJcbiAgICAgICAgICAgZW52XHJcbiAgICAgICAgICAgXCJPbmx5IFs6cmVmZXItY2xvanVyZSA6ZXhjbHVkZSAobmFtZXMpXSBhbmQgb3B0aW9uYWxseSBgOnJlbmFtZSB7ZnJvbSB0b31gIHNwZWNzIHN1cHBvcnRlZFwiKSlcclxuICAgICAgICAgKHNvbWU/IGZzKVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBba3cgKGZpcnN0IGZzKV1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICh2YWxpZC1rd3Mga3cpXHJcbiAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICBbcmVmcyAoc2Vjb25kIGZzKV1cclxuICAgICAgICAgICAgKGNvbmRcclxuICAgICAgICAgICAgIChub3RcclxuICAgICAgICAgICAgICAob3JcclxuICAgICAgICAgICAgICAgKGFuZFxyXG4gICAgICAgICAgICAgICAgKD0ga3cgOmV4Y2x1ZGUpXHJcbiAgICAgICAgICAgICAgICAoc2VxdWVudGlhbD8gcmVmcylcclxuICAgICAgICAgICAgICAgIChldmVyeT8gc3ltYm9sPyByZWZzKSlcclxuICAgICAgICAgICAgICAgKGFuZFxyXG4gICAgICAgICAgICAgICAgKD0ga3cgOnJlbmFtZSlcclxuICAgICAgICAgICAgICAgIChtYXA/IHJlZnMpXHJcbiAgICAgICAgICAgICAgICAoZXZlcnk/XHJcbiAgICAgICAgICAgICAgICAgKGZuKiBbcDFfXzQ4NjE4I10gKGV2ZXJ5PyBzeW1ib2w/IHAxX180ODYxOCMpKVxyXG4gICAgICAgICAgICAgICAgIHJlZnMpKSkpXHJcbiAgICAgICAgICAgICAocmVjdXIgZnMgcmV0IHRydWUpXHJcbiAgICAgICAgICAgICAoPSBrdyA6ZXhjbHVkZSlcclxuICAgICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICAgIChubmV4dCBmcylcclxuICAgICAgICAgICAgICAodXBkYXRlLWluIHJldCBbOmV4Y2x1ZGVzXSBpbnRvIHJlZnMpXHJcbiAgICAgICAgICAgICAgZmFsc2UpXHJcbiAgICAgICAgICAgICAoPSBrdyA6cmVuYW1lKVxyXG4gICAgICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgICAgKG5uZXh0IGZzKVxyXG4gICAgICAgICAgICAgICh1cGRhdGUtaW4gcmV0IFs6cmVuYW1lc10gbWVyZ2UgcmVmcylcclxuICAgICAgICAgICAgICBmYWxzZSkpKVxyXG4gICAgICAgICAgIChyZWN1ciBmcyByZXQgdHJ1ZSkpKVxyXG4gICAgICAgICA6ZWxzZVxyXG4gICAgICAgICByZXQpKV1cclxuICAgICAgKG1lcmdlLXdpdGggaW50byBzIHhzKSkpXHJcbiAgICBzKSlcclxuICB7OmV4Y2x1ZGVzICN7fSwgOnJlbmFtZXMge319XHJcbiAgYXJncykpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZm4tbWV0aG9kcy1wYXNzMiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZW52IGxvY2FscyB0eXBlIG1ldGhzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1mbi1tZXRob2RzLXBhc3MyXHJcbiBbbWVudiBsb2NhbHMgdHlwZSBtZXRoc11cclxuIChhbmFseXplLWZuLW1ldGhvZHMtcGFzczIqIG1lbnYgbG9jYWxzIHR5cGUgbWV0aHMpKVxyXG4ifSB7OnN5bSBjb3JlLW5hbWU/LCA6bWV0YSB7OmRvYyAiSXMgc3ltIHZpc2libGUgZnJvbSBjb3JlIGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIG5hbWVzcGFjZT8iLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29yZS1uYW1lP1xyXG4gXCJJcyBzeW0gdmlzaWJsZSBmcm9tIGNvcmUgaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gbmFtZXNwYWNlP1wiXHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgc3ltXVxyXG4gKGFuZFxyXG4gIChvclxyXG4gICAoc29tZT9cclxuICAgIChnZXRzXHJcbiAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICdjbGpzLmNvcmVcclxuICAgICA6ZGVmc1xyXG4gICAgIHN5bSkpXHJcbiAgIChpZi1zb21lXHJcbiAgICBbbWFjIChnZXQtZXhwYW5kZXIgc3ltIGVudildXHJcbiAgICAobGV0XHJcbiAgICAgW25zICgtPiBtYWMgbWV0YSA6bnMpXVxyXG4gICAgICg9XHJcbiAgICAgICguZ2V0TmFtZSBucylcclxuICAgICAgIz8oOmNsaiAocXVvdGUgY2xqcy5jb3JlKSA6Y2xqcyAocXVvdGUgY2xqcy5jb3JlJG1hY3JvcykpKSlcclxuICAgIGZhbHNlKSlcclxuICAobm90IChjb250YWlucz8gKC0+IGVudiA6bnMgOmV4Y2x1ZGVzKSBzeW0pKSkpXHJcbiJ9IHs6c3ltIGdldC1sZXQtdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWUgaW5pdC1leHByXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWxldC10YWdcclxuIFtuYW1lIGluaXQtZXhwcl1cclxuIChpZi1zb21lXHJcbiAgW3RhZyAoLT4gbmFtZSBtZXRhIDp0YWcpXVxyXG4gIHRhZ1xyXG4gIChpZi1zb21lIFt0YWcgKC0+IGluaXQtZXhwciA6dGFnKV0gdGFnICgtPiBpbml0LWV4cHIgOmluZm8gOnRhZykpKSlcclxuIn0gezpzeW0gc3BlY2lhbHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBzcGVjaWFsc1xyXG4gJyN7JiBjYXNlKiBkZWZyZWNvcmQqIHRyeSBucyogbG9vcCogZG8gbGV0Zm4qIGlmIG5ldyBucyBkZWZ0eXBlKiBsZXQqXHJcbiAgICBqcyogZm4qIHJlY3VyIHNldCEgLiB2YXIgcXVvdGUgdGhyb3cgZGVmfSlcclxuIn0gezpzeW0gZWxpZGUtaXJyZWxldmFudC1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGlkZS1pcnJlbGV2YW50LW1ldGFcclxuIFttXVxyXG4gKC0+IG0gZWxpZGUtcmVhZGVyLW1ldGEgZWxpZGUtYW5hbHl6ZXItbWV0YSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtbWFjcm8tbnMtYWxpYXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52IG5hbWVdIFtlbnYgbmFtZSBub3QtZm91bmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLW1hY3JvLW5zLWFsaWFzXHJcbiAoW2VudiBuYW1lXSAocmVzb2x2ZS1tYWNyby1ucy1hbGlhcyBlbnYgbmFtZSAoc3ltYm9sIG5hbWUpKSlcclxuIChbZW52IG5hbWUgbm90LWZvdW5kXVxyXG4gIChsZXRcclxuICAgW3N5bSAoc3ltYm9sIG5hbWUpXVxyXG4gICAoZ2V0ICg6cmVxdWlyZS1tYWNyb3MgKDpucyBlbnYpKSBzeW0gbm90LWZvdW5kKSkpKVxyXG4ifSB7OnN5bSBjaGVjay1pbnZva2UtYXJnLXR5cGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB7OmtleXMgW29wXSwgOmFzIGFzdH0gb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLWludm9rZS1hcmctdHlwZXNcclxuIFtlbnYgezprZXlzIFtvcF0sIDphcyBhc3R9IG9wdHNdXHJcbiAod2hlblxyXG4gIChhbmRcclxuICAgKG5vdCAoYW5hbHl6ZWQ/IGFzdCkpXHJcbiAgICM/KDpjbGogKD0gOmludm9rZSBvcCkgOmNsanMgKGtleXdvcmQtaWRlbnRpY2FsPyA6aW52b2tlIG9wKSkpXHJcbiAgKHdoZW4tc29tZVxyXG4gICBbW25hbWUgezprZXlzIFt2YWxpZD8gd2FybmluZy10eXBlXX1dXHJcbiAgICAoZmluZCBpbnZva2UtYXJnLXR5cGUtdmFsaWRhdG9ycyAoLT4gYXN0IDpmbiA6aW5mbyA6bmFtZSkpXVxyXG4gICAobGV0XHJcbiAgICBbdHlwZXMgKG1hcHYgOnRhZyAoOmFyZ3MgYXN0KSldXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAodmFsaWQ/IHR5cGVzKVxyXG4gICAgICh3YXJuaW5nIHdhcm5pbmctdHlwZSBlbnYgezpuYW1lIG5hbWUsIDp0eXBlcyB0eXBlc30pKSkpKVxyXG4gKGFuYWx5emVkIGFzdCkpXHJcbiJ9IHs6c3ltIGNvbmZpcm0tbnMsIDptZXRhIHs6ZG9jICJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgbnMtc3ltLCBhIHN5bWJvbCBpZGVudGlmeWluZyBhXG4gICBuYW1lc3BhY2UsIGNvbmZpcm0gdGhhdCB0aGUgbmFtZXNwYWNlIGV4aXN0cy4gV2FybiBpZiBub3QgZm91bmQuIiwgOmFyZ2xpc3RzIChbZW52IG5zLXN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZpcm0tbnNcclxuIFwiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIG5zLXN5bSwgYSBzeW1ib2wgaWRlbnRpZnlpbmcgYVxcbiAgIG5hbWVzcGFjZSwgY29uZmlybSB0aGF0IHRoZSBuYW1lc3BhY2UgZXhpc3RzLiBXYXJuIGlmIG5vdCBmb3VuZC5cIlxyXG4gW2VudiBucy1zeW1dXHJcbiAod2hlblxyXG4gIChhbmRcclxuICAgKG5vdD0gJ2NsanMuY29yZSBucy1zeW0pXHJcbiAgIChuaWw/IChnZXQgaW1wbGljaXQtbnNlcyBucy1zeW0pKVxyXG4gICAobmlsPyAoZ2V0ICgtPiBlbnYgOm5zIDpyZXF1aXJlcykgbnMtc3ltKSlcclxuICAgKG5pbD8gKGdldHMgQGVudi8qY29tcGlsZXIqIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMtc3ltKSlcclxuICAgIz8oOmNsaiAobmlsPyAodXRpbC9ucy0+c291cmNlIG5zLXN5bSkpKVxyXG4gICAobm90IChqcy1tb2R1bGUtZXhpc3RzPyBucy1zeW0pKSlcclxuICAod2FybmluZyA6dW5kZWNsYXJlZC1ucyBlbnYgezpucy1zeW0gbnMtc3ltLCA6anMtcHJvdmlkZSBucy1zeW19KSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtbmFtZXNwYWNlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGRlZmF1bHQtbmFtZXNwYWNlc1xyXG4gJ3tjbGpzLmNvcmUgezpuYW1lIGNsanMuY29yZX0sIGNsanMudXNlciB7Om5hbWUgY2xqcy51c2VyfX0pXHJcbiJ9IHs6c3ltIGNhbm9uaWNhbGl6ZS1zcGVjcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbm9uaWNhbGl6ZS1zcGVjc1xyXG4gW3NwZWNzXVxyXG4gKGxldGZuXHJcbiAgWyhjYW5vbmljYWxpemVcclxuICAgIFtxdW90ZWQtc3BlYy1vci1rd11cclxuICAgIChpZlxyXG4gICAgIChrZXl3b3JkPyBxdW90ZWQtc3BlYy1vci1rdylcclxuICAgICBxdW90ZWQtc3BlYy1vci1rd1xyXG4gICAgIChhcy0+XHJcbiAgICAgIChzZWNvbmQgcXVvdGVkLXNwZWMtb3Ita3cpXHJcbiAgICAgIHNwZWNcclxuICAgICAgKGlmIChvciAodmVjdG9yPyBzcGVjKSAobWFwPyBzcGVjKSkgc3BlYyBbc3BlY10pKSkpXVxyXG4gIChtYXAgY2Fub25pY2FsaXplIHNwZWNzKSkpXHJcbiJ9IHs6c3ltIGNvbmZpcm0tdmFyLWV4aXN0cy10aHJvdywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25maXJtLXZhci1leGlzdHMtdGhyb3dcclxuIFtdXHJcbiAoZm5cclxuICBbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAgKGNvbmZpcm0tdmFyLWV4aXN0c1xyXG4gICBlbnZcclxuICAgcHJlZml4XHJcbiAgIHN1ZmZpeFxyXG4gICAoZm5cclxuICAgIFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuICAgICh0aHJvd1xyXG4gICAgIChlcnJvclxyXG4gICAgICBlbnZcclxuICAgICAgKHN0ciBcIlVuYWJsZSB0byByZXNvbHZlIHZhcjogXCIgc3VmZml4IFwiIGluIHRoaXMgY29udGV4dFwiKSkpKSkpKVxyXG4ifSB7OnN5bSBqcy1tb2R1bGUtZXhpc3RzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttb2R1bGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1tb2R1bGUtZXhpc3RzP1xyXG4gW21vZHVsZV1cclxuIChqcy1tb2R1bGUtZXhpc3RzPypcclxuICAoZ2V0LWluIEBlbnYvKmNvbXBpbGVyKiBbOmpzLW1vZHVsZS1pbmRleF0pXHJcbiAgbW9kdWxlKSlcclxuIn0gezpzeW0gdmFyLWFzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFyLWFzdFxyXG4gW2VudiBzeW1dXHJcbiAoYmluZGluZ1xyXG4gIFsqcHJpdmF0ZS12YXItYWNjZXNzLW5vd2FybiogdHJ1ZV1cclxuICAobGV0XHJcbiAgIFtlbnZcclxuICAgIChkaXNzb2MgZW52IDpsb2NhbHMpXHJcbiAgICB2YXJcclxuICAgIChyZXNvbHZlLXZhciBlbnYgc3ltIChjb25maXJtLXZhci1leGlzdHMtdGhyb3cpKVxyXG4gICAgZXhwci1lbnZcclxuICAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXVxyXG4gICAod2hlbi1zb21lXHJcbiAgICBbdmFyLW5zICg6bnMgdmFyKV1cclxuICAgIHs6dmFyIChhbmFseXplIGV4cHItZW52IHN5bSksXHJcbiAgICAgOnN5bVxyXG4gICAgIChhbmFseXplXHJcbiAgICAgIGV4cHItZW52XHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdxdW90ZSlcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAoc3ltYm9sIChuYW1lIHZhci1ucykgKG5hbWUgKDpuYW1lIHZhcikpKSkpKSkpLFxyXG4gICAgIDptZXRhICh2YXItbWV0YSB2YXIgZXhwci1lbnYpfSkpKSlcclxuIn0gezpzeW0gYWRkLWNvbnN0cywgOm1ldGEgezpkb2MgIkdpdmVuIGEgY29tcGlsZXIgc3RhdGUgYW5kIGEgbWFwIGZyb20gZnVsbHkgcXVhbGlmaWVkIHN5bWJvbHMgdG8gY29uc3RhbnRcbiAgRUROIHZhbHVlcywgdXBkYXRlIHRoZSBjb21waWxlciBzdGF0ZSBtYXJraW5nIHRoZXNlIHZhcnMgYXMgY29uc3QgdG8gc3VwcG9ydFxuICBkaXJlY3Qgc3Vic3RpdHV0aW9uIG9mIHRoZXNlIHZhcnMgaW4gc291cmNlLiIsIDphcmdsaXN0cyAoW2NvbXBpbGVyLXN0YXRlIGNvbnN0YW50cy1tYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtY29uc3RzXHJcbiBcIkdpdmVuIGEgY29tcGlsZXIgc3RhdGUgYW5kIGEgbWFwIGZyb20gZnVsbHkgcXVhbGlmaWVkIHN5bWJvbHMgdG8gY29uc3RhbnRcXG4gIEVETiB2YWx1ZXMsIHVwZGF0ZSB0aGUgY29tcGlsZXIgc3RhdGUgbWFya2luZyB0aGVzZSB2YXJzIGFzIGNvbnN0IHRvIHN1cHBvcnRcXG4gIGRpcmVjdCBzdWJzdGl0dXRpb24gb2YgdGhlc2UgdmFycyBpbiBzb3VyY2UuXCJcclxuIFtjb21waWxlci1zdGF0ZSBjb25zdGFudHMtbWFwXVxyXG4gKHJlZHVjZS1rdlxyXG4gIChmblxyXG4gICBbY29tcGlsZXItc3RhdGUgc3ltIHZhbHVlXVxyXG4gICAobGV0XHJcbiAgICBbbnMgKHN5bWJvbCAobmFtZXNwYWNlIHN5bSkpXVxyXG4gICAgKHVwZGF0ZS1pblxyXG4gICAgIGNvbXBpbGVyLXN0YXRlXHJcbiAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOmRlZnMgKHN5bWJvbCAobmFtZSBzeW0pKV1cclxuICAgICBtZXJnZVxyXG4gICAgIHs6Y29uc3QtZXhwclxyXG4gICAgICAoYmluZGluZ1xyXG4gICAgICAgWypwYXNzZXMqIChjb25qICpwYXNzZXMqIChyZXBsYWNlLWVudi1wYXNzIHs6Y29udGV4dCA6ZXhwcn0pKV1cclxuICAgICAgIChhbmFseXplIChlbXB0eS1lbnYpIHZhbHVlKSl9KSkpXHJcbiAgY29tcGlsZXItc3RhdGVcclxuICBjb25zdGFudHMtbWFwKSlcclxuIn0gezpzeW0gZXJyb3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52IG1zZ10gW2VudiBtc2cgY2F1c2VdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlcnJvclxyXG4gKFtlbnYgbXNnXSAoZXJyb3IgZW52IG1zZyBuaWwpKVxyXG4gKFtlbnYgbXNnIGNhdXNlXVxyXG4gIChleC1pbmZvXHJcbiAgIChtZXNzYWdlIGVudiBtc2cpXHJcbiAgIChhc3NvYyAoc291cmNlLWluZm8gZW52KSA6dGFnIDpjbGpzL2FuYWx5c2lzLWVycm9yKVxyXG4gICBjYXVzZSkpKVxyXG4ifSB7OnN5bSBpbnZva2VhYmxlLW5zPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBucyBpcyBhIHJlcXVpcmVkIG5hbWVzcGFjZSBhbmQgYSBKYXZhU2NyaXB0IG1vZHVsZSB0aGF0XG4gICBtaWdodCBiZSBpbnZva2VhYmxlIGFzIGEgZnVuY3Rpb24uIiwgOmFyZ2xpc3RzIChbbnMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW52b2tlYWJsZS1ucz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG5zIGlzIGEgcmVxdWlyZWQgbmFtZXNwYWNlIGFuZCBhIEphdmFTY3JpcHQgbW9kdWxlIHRoYXRcXG4gICBtaWdodCBiZSBpbnZva2VhYmxlIGFzIGEgZnVuY3Rpb24uXCJcclxuIFtucyBlbnZdXHJcbiAobGV0XHJcbiAgW25zIChyZXNvbHZlLW5zLWFsaWFzIGVudiBucyldXHJcbiAgKGFuZFxyXG4gICAocmVxdWlyZWQ/IG5zIGVudilcclxuICAgKG9yXHJcbiAgICAoanMtbW9kdWxlLWV4aXN0cz8gbnMpXHJcbiAgICAobm9kZS1tb2R1bGUtZGVwPyBucylcclxuICAgIChkZXAtaGFzLWdsb2JhbC1leHBvcnRzPyBucykpKSkpXHJcbiJ9IHs6c3ltICpjbGpzLW5zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtbnMqICdjbGpzLnVzZXIpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIucmVhZGVyLXR5cGVzICh7OnN5bSBpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBJbmRleGluZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXIiLCA6YXJnbGlzdHMgW1tzLW9yLXJkcl0gW3Mtb3ItcmRyIGJ1Zi1sZW5dIFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhbiBJbmRleGluZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXJcIlxyXG4gKFtzLW9yLXJkcl0gKGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgMSkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW5dIChpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4gbmlsKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXHJcbiAgKEluZGV4aW5nUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChpZlxyXG4gICAgKHN0cmluZz8gcy1vci1yZHIpXHJcbiAgICAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbilcclxuICAgIHMtb3ItcmRyKVxyXG4gICAxXHJcbiAgIDFcclxuICAgdHJ1ZVxyXG4gICBuaWxcclxuICAgMFxyXG4gICBmaWxlLW5hbWUpKSlcclxuIn0gezpzeW0gbG9nLXNvdXJjZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVhZGVyIGZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2ctc291cmNlKlxyXG4gW3JlYWRlciBmXVxyXG4gKGxldFxyXG4gIFtidWZmZXIgKDpidWZmZXIgQCguLWZyYW1lcyByZWFkZXIpKV1cclxuICAodHJ5XHJcbiAgIChzd2FwIVxyXG4gICAgKC4tZnJhbWVzIHJlYWRlcilcclxuICAgIHVwZGF0ZS1pblxyXG4gICAgWzpvZmZzZXRdXHJcbiAgICBjb25qXHJcbiAgICAoLmdldExlbmd0aCBidWZmZXIpKVxyXG4gICAobGV0XHJcbiAgICBbcmV0IChmKV1cclxuICAgIChpZlxyXG4gICAgIChpbXBsZW1lbnRzPyBJTWV0YSByZXQpXHJcbiAgICAgKG1lcmdlLW1ldGEgcmV0IHs6c291cmNlIChwZWVrLXNvdXJjZS1sb2cgQCguLWZyYW1lcyByZWFkZXIpKX0pXHJcbiAgICAgcmV0KSlcclxuICAgKGZpbmFsbHkgKHN3YXAhICguLWZyYW1lcyByZWFkZXIpIHVwZGF0ZS1pbiBbOm9mZnNldF0gcmVzdCkpKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBgb2JqYCwgd2l0aCBpdHNcbm1ldGFkYXRhIG1lcmdlZCBvdmVyIGBtYC4iLCA6YXJnbGlzdHMgKFtvYmogbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLW1ldGFcclxuIFwiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgYG9iamAsIHdpdGggaXRzXFxubWV0YWRhdGEgbWVyZ2VkIG92ZXIgYG1gLlwiXHJcbiBbb2JqIG1dXHJcbiAobGV0XHJcbiAgW29yaWctbWV0YSAobWV0YSBvYmopXVxyXG4gICh3aXRoLW1ldGEgb2JqIChtZXJnZSBtIChkaXNzb2Mgb3JpZy1tZXRhIDpzb3VyY2UpKSkpKVxyXG4ifSB7OnN5bSBSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChwZWVrLWNoYXIgcmVhZC1jaGFyKX0gezpzeW0gc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlciIsIDphcmdsaXN0cyBbW3Mtb3ItcmRyXSBbcy1vci1yZHIgYnVmLWxlbl0gW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXJcIlxyXG4gKFtzLW9yLXJkcl0gKHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgMSkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW5dXHJcbiAgKHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbiBuaWwpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1cclxuICAoU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxyXG4gICAoaWZcclxuICAgIChzdHJpbmc/IHMtb3ItcmRyKVxyXG4gICAgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4pXHJcbiAgICBzLW9yLXJkcilcclxuICAgMVxyXG4gICAxXHJcbiAgIHRydWVcclxuICAgbmlsXHJcbiAgIDBcclxuICAgZmlsZS1uYW1lXHJcbiAgIChhdG9tIHs6YnVmZmVyIChTdHJpbmdCdWZmZXIuKSwgOm9mZnNldCAnKDApfSkpKSlcclxuIn0gezpzeW0gdW5yZWFkLCA6bWV0YSB7OmRvYyAiUHVzaGVzIGJhY2sgYSBzaW5nbGUgY2hhcmFjdGVyIG9uIHRvIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXIgY2hdKX0sIDpwcm90b2NvbCBJUHVzaGJhY2tSZWFkZXJ9IHs6c3ltIHBlZWstY2hhciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgY2hhciBmcm9tIHRoZSBSZWFkZXIgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSByZWFkZXIgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgUmVhZGVyfSB7OnN5bSBJUHVzaGJhY2tSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh1bnJlYWQpfSB7OnN5bSBpbmRleGluZy1yZWFkZXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHRoZSByZWFkZXIgc2F0aXNmaWVzIEluZGV4aW5nUmVhZGVyIiwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhpbmctcmVhZGVyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgdGhlIHJlYWRlciBzYXRpc2ZpZXMgSW5kZXhpbmdSZWFkZXJcIlxyXG4gW3Jkcl1cclxuIChpbXBsZW1lbnRzPyBJbmRleGluZ1JlYWRlciByZHIpKVxyXG4ifSB7OnN5bSBzdHJpbmctcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFN0cmluZ1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIiwgOmFyZ2xpc3RzIFtbc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZy1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFN0cmluZ1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nXCJcclxuIChbc10gKFN0cmluZ1JlYWRlci4gcyAoY291bnQgcykgMCkpKVxyXG4ifSB7OnN5bSByZWFkLWNoYXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IGNoYXIgZnJvbSB0aGUgUmVhZGVyLCBuaWwgaWYgdGhlIGVuZCBvZiBzdHJlYW0gaGFzIGJlZW4gcmVhY2hlZCIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIFJlYWRlcn0gezpzeW0gZ2V0LWNvbHVtbi1udW1iZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZWFkIGZyb20gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSB7OnN5bSBnZXQtZmlsZS1uYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlsZSBuYW1lIHRoZSByZWFkZXIgaXMgcmVhZGluZyBmcm9tLCBvciBuaWwiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0gezpzeW0gcmVhZC1saW5lLCA6bWV0YSB7OmRvYyAiUmVhZHMgYSBsaW5lIGZyb20gdGhlIHJlYWRlciBvciBmcm9tICppbiogaWYgbm8gcmVhZGVyIGlzIHNwZWNpZmllZCIsIDphcmdsaXN0cyBbW3Jkcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtbGluZVxyXG4gXCJSZWFkcyBhIGxpbmUgZnJvbSB0aGUgcmVhZGVyIG9yIGZyb20gKmluKiBpZiBubyByZWFkZXIgaXMgc3BlY2lmaWVkXCJcclxuIChbcmRyXVxyXG4gIChsb29wXHJcbiAgIFtjIChyZWFkLWNoYXIgcmRyKSBzIChTdHJpbmdCdWZmZXIuKV1cclxuICAgKGlmIChuZXdsaW5lPyBjKSAoc3RyIHMpIChyZWN1ciAocmVhZC1jaGFyIHJkcikgKC5hcHBlbmQgcyBjKSkpKSkpXHJcbiJ9IHs6c3ltIHN0cmluZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFB1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmciLCA6YXJnbGlzdHMgW1tzXSBbcyBidWYtbGVuXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFB1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmdcIlxyXG4gKFtzXSAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcyAxKSlcclxuIChbcyBidWYtbGVuXVxyXG4gIChQdXNoYmFja1JlYWRlci5cclxuICAgKHN0cmluZy1yZWFkZXIgcylcclxuICAgKG9iamVjdC1hcnJheSBidWYtbGVuKVxyXG4gICBidWYtbGVuXHJcbiAgIGJ1Zi1sZW4pKSlcclxuIn0gezpzeW0gbGluZS1zdGFydD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyIGFuZCB0aGUgY3VycmVudCBjaGFyIHN0YXJ0cyBhIG5ldyBsaW5lIiwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS1zdGFydD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciBhbmQgdGhlIGN1cnJlbnQgY2hhciBzdGFydHMgYSBuZXcgbGluZVwiXHJcbiBbcmRyXVxyXG4gKHdoZW4gKGluZGV4aW5nLXJlYWRlcj8gcmRyKSAoPT0gMSAoZ2V0LWNvbHVtbi1udW1iZXIgcmRyKSkpKVxyXG4ifSB7OnN5bSBzb3VyY2UtbG9nZ2luZy1yZWFkZXI/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1sb2dnaW5nLXJlYWRlcj9cclxuIFtyZHJdXHJcbiAoaW5zdGFuY2U/IFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciByZHIpKVxyXG4ifSB7OnN5bSBJbmRleGluZ1JlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGdldC1jb2x1bW4tbnVtYmVyIGdldC1maWxlLW5hbWUgZ2V0LWxpbmUtbnVtYmVyKX0gezpzeW0gbm9kZS1yZWFkYWJsZS1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlYWRhYmxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm9kZS1yZWFkYWJsZS1wdXNoLWJhY2stcmVhZGVyXHJcbiBbcmVhZGFibGVdXHJcbiAoUHVzaGJhY2tSZWFkZXIuXHJcbiAgKE5vZGVSZWFkYWJsZVJlYWRlci4gcmVhZGFibGUgbmlsKVxyXG4gIChvYmplY3QtYXJyYXkgMSlcclxuICAxXHJcbiAgMSkpXHJcbiJ9IHs6c3ltIGdldC1saW5lLW51bWJlciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZWFkIGZyb20gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSksIHNhYmxvbm8ubm9ybWFsaXplICh7OnN5bSBtYXAtbG9va3VwPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBgeGAgaXMgYSBtYXAgbG9va3VwIGZvcm0sIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWxvb2t1cD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGB4YCBpcyBhIG1hcCBsb29rdXAgZm9ybSwgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiBbeF1cclxuIChhbmQgKGxpc3Q/IHgpIChrZXl3b3JkPyAoZmlyc3QgeCkpKSlcclxuIn0gezpzeW0gYXR0cmlidXRlcywgOm1ldGEgezpkb2MgIk5vcm1hbGl6ZSB0aGUgYGF0dHJzYCBvZiBhbiBlbGVtZW50LiIsIDphcmdsaXN0cyAoW2F0dHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXR0cmlidXRlc1xyXG4gXCJOb3JtYWxpemUgdGhlIGBhdHRyc2Agb2YgYW4gZWxlbWVudC5cIlxyXG4gW2F0dHJzXVxyXG4gKGNvbmQtPiBhdHRycyAoOmNsYXNzIGF0dHJzKSAodXBkYXRlLWluIFs6Y2xhc3NdIGNsYXNzKSkpXHJcbiJ9IHs6c3ltIGNvbXBhY3QtbWFwLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBhbGwgbWFwIGVudHJpZXMgd2hlcmUgdGhlIHZhbHVlIG9mIHRoZSBlbnRyeSBpcyBlbXB0eS4iLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFjdC1tYXBcclxuIFwiUmVtb3ZlcyBhbGwgbWFwIGVudHJpZXMgd2hlcmUgdGhlIHZhbHVlIG9mIHRoZSBlbnRyeSBpcyBlbXB0eS5cIlxyXG4gW21dXHJcbiAod2hlbiBtIChpbnRvIHt9IChyZW1vdmUgKGZuIFtbXyB2XV0gKGVtcHR5PyB2KSkpIG0pKSlcclxuIn0gezpzeW0gY2hpbGRyZW4sIDptZXRhIHs6ZG9jICJOb3JtYWxpemUgdGhlIGNoaWxkcmVuIG9mIGEgSFRNTCBlbGVtZW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGlsZHJlblxyXG4gXCJOb3JtYWxpemUgdGhlIGNoaWxkcmVuIG9mIGEgSFRNTCBlbGVtZW50LlwiXHJcbiBbeF1cclxuICgtPj5cclxuICAoY29uZFxyXG4gICAobmlsPyB4KVxyXG4gICAnKClcclxuICAgKHN0cmluZz8geClcclxuICAgKGxpc3QgeClcclxuICAgKHV0aWwvZWxlbWVudD8geClcclxuICAgKGxpc3QgeClcclxuICAgKGFuZCAobGlzdD8geCkgKHN5bWJvbD8gKGZpcnN0IHgpKSlcclxuICAgKGxpc3QgeClcclxuICAgKGxpc3Q/IHgpXHJcbiAgIHhcclxuICAgKGFuZFxyXG4gICAgKHNlcXVlbnRpYWw/IHgpXHJcbiAgICAoPSAoY291bnQgeCkgMSlcclxuICAgIChzZXF1ZW50aWFsPyAoZmlyc3QgeCkpXHJcbiAgICAobm90IChzdHJpbmc/IChmaXJzdCB4KSkpXHJcbiAgICAobm90ICh1dGlsL2VsZW1lbnQ/IChmaXJzdCB4KSkpKVxyXG4gICAoY2hpbGRyZW4gKGZpcnN0IHgpKVxyXG4gICAoc2VxdWVudGlhbD8geClcclxuICAgeFxyXG4gICA6ZWxzZVxyXG4gICAobGlzdCB4KSlcclxuICAocmVtb3ZlIG5pbD8pKSlcclxuIn0gezpzeW0gZWxlbWVudCwgOm1ldGEgezpkb2MgIkVuc3VyZSBhbiBlbGVtZW50IHZlY3RvciBpcyBvZiB0aGUgZm9ybSBbdGFnLW5hbWUgYXR0cnMgY29udGVudF0uIiwgOmFyZ2xpc3RzIChbW3RhZyAmIGNvbnRlbnRdXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxlbWVudFxyXG4gXCJFbnN1cmUgYW4gZWxlbWVudCB2ZWN0b3IgaXMgb2YgdGhlIGZvcm0gW3RhZy1uYW1lIGF0dHJzIGNvbnRlbnRdLlwiXHJcbiBbW3RhZyAmIGNvbnRlbnRdXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yIChrZXl3b3JkPyB0YWcpIChzeW1ib2w/IHRhZykgKHN0cmluZz8gdGFnKSlcclxuICAodGhyb3dcclxuICAgKGV4LWluZm9cclxuICAgIChzdHIgdGFnIFwiIGlzIG5vdCBhIHZhbGlkIGVsZW1lbnQgbmFtZS5cIilcclxuICAgIHs6dGFnIHRhZywgOmNvbnRlbnQgY29udGVudH0pKSlcclxuIChsZXRcclxuICBbW3RhZyBpZCBjbGFzc11cclxuICAgKG1hdGNoLXRhZyB0YWcpXHJcbiAgIHRhZy1hdHRyc1xyXG4gICAoY29tcGFjdC1tYXAgezppZCBpZCwgOmNsYXNzIGNsYXNzfSlcclxuICAgbWFwLWF0dHJzXHJcbiAgIChmaXJzdCBjb250ZW50KV1cclxuICAoaWZcclxuICAgKGF0dHJzPyBtYXAtYXR0cnMpXHJcbiAgIFt0YWdcclxuICAgIChtZXJnZS13aXRoLWNsYXNzIHRhZy1hdHRycyBtYXAtYXR0cnMpXHJcbiAgICAoY2hpbGRyZW4gKG5leHQgY29udGVudCkpXVxyXG4gICBbdGFnIChhdHRyaWJ1dGVzIHRhZy1hdHRycykgKGNoaWxkcmVuIGNvbnRlbnQpXSkpKVxyXG4ifSB7OnN5bSBtYXRjaC10YWcsIDptZXRhIHs6ZG9jICJNYXRjaCBgc2AgYXMgYSBDU1MgdGFnIGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdGFnIG5hbWUsIENTUyBpZCBhbmRcbiAgQ1NTIGNsYXNzZXMuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hdGNoLXRhZ1xyXG4gXCJNYXRjaCBgc2AgYXMgYSBDU1MgdGFnIGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdGFnIG5hbWUsIENTUyBpZCBhbmRcXG4gIENTUyBjbGFzc2VzLlwiXHJcbiBbc11cclxuIChsZXRcclxuICBbbWF0Y2hlc1xyXG4gICAocmUtc2VxICNcIlsjLl0/W14jLl0rXCIgKG5hbWUgcykpXHJcbiAgIFt0YWctbmFtZSBuYW1lc11cclxuICAgKGNvbmRcclxuICAgIChlbXB0eT8gbWF0Y2hlcylcclxuICAgICh0aHJvdyAoZXgtaW5mbyAoc3RyIFwiQ2FuJ3QgbWF0Y2ggQ1NTIHRhZzogXCIgcykgezp0YWcgc30pKVxyXG4gICAgKCN7XFwjIFxcLn0gKGZmaXJzdCBtYXRjaGVzKSlcclxuICAgIFtcImRpdlwiIG1hdGNoZXNdXHJcbiAgICA6ZGVmYXVsdFxyXG4gICAgWyhmaXJzdCBtYXRjaGVzKSAocmVzdCBtYXRjaGVzKV0pXVxyXG4gIFt0YWctbmFtZVxyXG4gICAoc3RyaXAtY3NzXHJcbiAgICAoc29tZVxyXG4gICAgIChmbiogW3AxX180OTA1NSNdICh3aGVuICg9IFxcIyAoZmlyc3QgcDFfXzQ5MDU1IykpIHAxX180OTA1NSMpKVxyXG4gICAgIG5hbWVzKSlcclxuICAgKGludG9cclxuICAgIFtdXHJcbiAgICAoY29tcFxyXG4gICAgIChmaWx0ZXIgKGZuKiBbcDFfXzQ5MDU2I10gKD0gXFwuIChmaXJzdCBwMV9fNDkwNTYjKSkpKVxyXG4gICAgIChtYXAgc3RyaXAtY3NzKSlcclxuICAgIG5hbWVzKV0pKVxyXG4ifSB7OnN5bSBzdHJpcC1jc3MsIDptZXRhIHs6ZG9jICJTdHJpcCB0aGUgIyBhbmQgLiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJlZ2lubmluZyBvZiBgc2AuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmlwLWNzc1xyXG4gXCJTdHJpcCB0aGUgIyBhbmQgLiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJlZ2lubmluZyBvZiBgc2AuXCJcclxuIFtzXVxyXG4gKHdoZW4gcyAoc3RyL3JlcGxhY2UgcyAjXCJeWy4jXVwiIFwiXCIpKSlcclxuIn0gezpzeW0gY2xhc3MsIDptZXRhIHs6ZG9jICJOb3JtYWxpemUgYGNsYXNzYCBpbnRvIGEgdmVjdG9yIG9mIGNsYXNzZXMuIiwgOmFyZ2xpc3RzIChbY2xhc3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGFzc1xyXG4gXCJOb3JtYWxpemUgYGNsYXNzYCBpbnRvIGEgdmVjdG9yIG9mIGNsYXNzZXMuXCJcclxuIFtjbGFzc11cclxuIChjb25kXHJcbiAgKG5pbD8gY2xhc3MpXHJcbiAgbmlsXHJcbiAgKG1hcC1sb29rdXA/IGNsYXNzKVxyXG4gIFtjbGFzc11cclxuICAobGlzdD8gY2xhc3MpXHJcbiAgKGlmIChzeW1ib2w/IChmaXJzdCBjbGFzcykpIFtjbGFzc10gKG1hcCBjbGFzcy1uYW1lIGNsYXNzKSlcclxuICAoc3ltYm9sPyBjbGFzcylcclxuICBbY2xhc3NdXHJcbiAgKHN0cmluZz8gY2xhc3MpXHJcbiAgW2NsYXNzXVxyXG4gIChrZXl3b3JkPyBjbGFzcylcclxuICBbKGNsYXNzLW5hbWUgY2xhc3MpXVxyXG4gIChhbmRcclxuICAgKG9yIChzZXQ/IGNsYXNzKSAoc2VxdWVudGlhbD8gY2xhc3MpKVxyXG4gICAoZXZlcnk/XHJcbiAgICAoZm4qIFtwMV9fNDkwNTQjXSAob3IgKGtleXdvcmQ/IHAxX180OTA1NCMpIChzdHJpbmc/IHAxX180OTA1NCMpKSlcclxuICAgIGNsYXNzKSlcclxuICAobWFwdiBjbGFzcy1uYW1lIGNsYXNzKVxyXG4gIChhbmQgKG9yIChzZXQ/IGNsYXNzKSAoc2VxdWVudGlhbD8gY2xhc3MpKSlcclxuICAobWFwdiBjbGFzcy1uYW1lIGNsYXNzKVxyXG4gIDplbHNlXHJcbiAgY2xhc3MpKVxyXG4ifSB7OnN5bSBjbGFzcy1uYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGFzcy1uYW1lXHJcbiBbeF1cclxuIChjb25kIChzdHJpbmc/IHgpIHggKGtleXdvcmQ/IHgpIChuYW1lIHgpIDplbHNlIHgpKVxyXG4ifSB7OnN5bSBtZXJnZS13aXRoLWNsYXNzLCA6bWV0YSB7OmRvYyAiTGlrZSBjbG9qdXJlLmNvcmUvbWVyZ2UgYnV0IGNvbmNhdGVuYXRlIDpjbGFzcyBlbnRyaWVzLiIsIDphcmdsaXN0cyAoWyYgbWFwc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLXdpdGgtY2xhc3NcclxuIFwiTGlrZSBjbG9qdXJlLmNvcmUvbWVyZ2UgYnV0IGNvbmNhdGVuYXRlIDpjbGFzcyBlbnRyaWVzLlwiXHJcbiBbJiBtYXBzXVxyXG4gKGxldFxyXG4gIFttYXBzIChtYXAgYXR0cmlidXRlcyBtYXBzKSBjbGFzc2VzIChtYXBjYXQgOmNsYXNzIG1hcHMpXVxyXG4gICh3aGVuXHJcbiAgIChzZXEgbWFwcylcclxuICAgKGNvbmQtPlxyXG4gICAgKHJlZHVjZSBpbnRvIHt9IG1hcHMpXHJcbiAgICAobm90IChlbXB0eT8gY2xhc3NlcykpXHJcbiAgICAoYXNzb2MgOmNsYXNzICh2ZWMgY2xhc3NlcykpKSkpKVxyXG4ifSksIGVkbmEuZXhhbXBsZXMgKHs6c3ltIGFlcml0aHMtdGhlbWUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBhZXJpdGhzLXRoZW1lXHJcbiAoZWRuYS0+ZGF0YS11cmlcclxuICBbOnBpYW5vXHJcbiAgIHs6b2N0YXZlIDQsIDp0ZW1wbyA3NH1cclxuICAgWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSAxLzIgI3s6ZiMgOitkfV1cclxuICAgWzEvOCAjezotZSA6ZSA6K2N9IDphIDEvMiAjezplIDpjfV1cclxuICAgWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSA6K2QgOitjIyA6K2UgOitkIDpiIDorYyNdXHJcbiAgIFsxLzIgI3s6LWUgOmMgOmF9IDEvMiAjezplIDpjfV1dKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiQSB0dW5lIGZyb20gRmluYWwgRmFudGFzeSBWSUkiLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gezpvY3RhdmUgNCwgOnRlbXBvIDc0fSBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDEvMiAjezpmIyA6K2R9XSBbMS84ICN7Oi1lIDplIDorY30gOmEgMS8yICN7OmUgOmN9XSBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDorZCA6K2MjIDorZSA6K2QgOmIgOitjI10gWzEvMiAjezotZSA6YyA6YX0gMS8yICN7OmUgOmN9XV19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBhZXJpdGhzLXRoZW1lKSwgOmJvZHktc3RyICJbOnBpYW5vXHJcbiB7Om9jdGF2ZSA0LCA6dGVtcG8gNzR9XHJcbiBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDEvMiAjezpmIyA6K2R9XVxyXG4gWzEvOCAjezotZSA6ZSA6K2N9IDphIDEvMiAjezplIDpjfV1cclxuIFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgOitkIDorYyMgOitlIDorZCA6YiA6K2MjXVxyXG4gWzEvMiAjezotZSA6YyA6YX0gMS8yICN7OmUgOmN9XV1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2Flcml0aHMtdGhlbWUvMCJ9XX0gezpzeW0gZHVlbGluZy1iYW5qb3MsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBkdWVsaW5nLWJhbmpvc1xyXG4gKGVkbmEtPmRhdGEtdXJpXHJcbiAgI3tbOmd1aXRhciB7Om9jdGF2ZSAzfSAxLzE2IDpyIDpyIDEvOCA6ZyA6ciA6ZCA6ciA6ZyA6ZyA6ZF1cclxuICAgIFs6YmFuam8gezpvY3RhdmUgM30gMS8xNiA6YiA6K2MgMS84IDorZCA6YiA6K2MgOmEgOmIgOmcgOmFdfSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIlB1dCBkaWZmZXJlbnQgcGllY2VzIGluIGEgc2V0IHRvIG1ha2UgdGhlbSBwbGF5IHNpbXVsdGFuZW91c2x5IiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciAje1s6Z3VpdGFyIHs6b2N0YXZlIDN9IDEvMTYgOnIgOnIgMS84IDpnIDpyIDpkIDpyIDpnIDpnIDpkXSBbOmJhbmpvIHs6b2N0YXZlIDN9IDEvMTYgOmIgOitjIDEvOCA6K2QgOmIgOitjIDphIDpiIDpnIDphXX19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBkdWVsaW5nLWJhbmpvcyksIDpib2R5LXN0ciAiI3tbOmd1aXRhciB7Om9jdGF2ZSAzfSAxLzE2IDpyIDpyIDEvOCA6ZyA6ciA6ZCA6ciA6ZyA6ZyA6ZF1cclxuICBbOmJhbmpvIHs6b2N0YXZlIDN9IDEvMTYgOmIgOitjIDEvOCA6K2QgOmIgOitjIDphIDpiIDpnIDphXX1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2R1ZWxpbmctYmFuam9zLzAifV19IHs6c3ltIGludHJvLTEtc2luZ2xlLW5vdGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW50cm8tMS1zaW5nbGUtbm90ZXNcclxuIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vIDpjIDpjIyA6ZCA6ZCMgOmUgOmYgOmYjIDpnIDpnIyA6YSA6YSMgOmJdKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiSGVyZSBhcmUgYWxsIHR3ZWx2ZSBub3RlcyIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyA6YyA6YyMgOmQgOmQjIDplIDpmIDpmIyA6ZyA6ZyMgOmEgOmEjIDpiXX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGludHJvLTEtc2luZ2xlLW5vdGVzKSwgOmJvZHktc3RyICJbOnBpYW5vIDpjIDpjIyA6ZCA6ZCMgOmUgOmYgOmYjIDpnIDpnIyA6YSA6YSMgOmJdXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9pbnRyby0xLXNpbmdsZS1ub3Rlcy8wIn1dfSB7OnN5bSBpbnRyby0yLWF0dHJpYnV0ZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnRyby0yLWF0dHJpYnV0ZXNcclxuIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vIDpjIDpkIHs6b2N0YXZlIDN9IDpjIDpkXSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIkhhc2ggbWFwcyBsZXQgeW91IGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBldmVyeXRoaW5nIHRoYXQgY29tZXMgYWZ0ZXIgdGhlbS5cbiAgIEhlcmUgYXJlIGFsbCB0aGUgYXR0cmlidXRlcyB5b3UgY2FuIGNoYW5nZTpcbiAgIFxuICAgOm9jdGF2ZSAgICAgICAgLSBUaGUgb2N0YXZlIChkZWZhdWx0IGlzIDQpXG4gICA6bGVuZ3RoICAgICAgICAtIFRoZSBub3RlIGxlbmd0aCAoZGVmYXVsdCBpcyAxLzQpXG4gICA6dGVtcG8gICAgICAgICAtIEhvdyBmYXN0IG9yIHNsb3cgbm90ZXMgYXJlIHBsYXllZCAoZGVmYXVsdCBpcyAxMjApXG4gICA6cGFuICAgICAgICAgICAtIEhvdyBmYXIgbGVmdC9yaWdodCB0aGUgbm90ZSBpcyBwYW5uZWQgaW4geW91ciBzcGVha2VyIChkZWZhdWx0IGlzIDUwKVxuICAgOnF1YW50aXplICAgICAgLSBUaGUgcGVyY2VudGFnZSBvZiBhIG5vdGUncyBmdWxsIGR1cmF0aW9uIHRoYXQgaXMgaGVhcmQgKGRlZmF1bHQgaXMgOTApXG4gICA6dHJhbnNwb3NlICAgICAtIE1vdmVzIGFsbCBub3RlcyB1cCBvciBkb3duIGJ5IGEgZGVzaXJlZCBudW1iZXIgb2Ygc2VtaXRvbmVzIChkZWZhdWx0IGlzIDApXG4gICA6dm9sdW1lICAgICAgICAtIFRoZSB2b2x1bWUgKGRlZmF1bHQgaXMgMTAwKVxuICAgOmtleS1zaWduYXR1cmUgLSBBIHNldCBvZiBub3RlcyB3aXRoIGFjY2lkZW50YWxzIC0tIGVpdGhlciBhIHNoYXJwICgjKSwgZmxhdCAoPSksIG9yIG5hdHVyYWwgKF8pIC0tXG4gICAgICAgICAgICAgICAgICAgIHdob3NlIHB1cnBvc2UgaXMgdG8gc2V0IHRoZSBkZWZhdWx0IGFjY2lkZW50YWwgZm9yIHRoYXQgbm90ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgIGl0IGRvZXNuJ3QgaW5jbHVkZSBvbmUgKGRlZmF1bHQgaXMgI3t9KVxuICAgOnBsYXk/ICAgICAgICAgLSBXaGV0aGVyIG9yIG5vdCB0byBwbGF5IChkZWZhdWx0IGlzIHRydWUpXG4gICBcbiAgIFJlYWQgbW9yZSBhYm91dCBhdHRyaWJ1dGVzIGhlcmU6XG4gICBodHRwczovL2dpdGh1Yi5jb20vYWxkYS1sYW5nL2FsZGEvYmxvYi9tYXN0ZXIvZG9jL2F0dHJpYnV0ZXMubWQiLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gOmMgOmQgezpvY3RhdmUgM30gOmMgOmRdfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tMi1hdHRyaWJ1dGVzKSwgOmJvZHktc3RyICJbOnBpYW5vIDpjIDpkIHs6b2N0YXZlIDN9IDpjIDpkXVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvaW50cm8tMi1hdHRyaWJ1dGVzLzAifV19IHs6c3ltIGludHJvLTMtb2N0YXZlLXNob3J0aGFuZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgaW50cm8tMy1vY3RhdmUtc2hvcnRoYW5kIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vIDpjIDotYyA6KzJjXSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIllvdSBjYW4gY2hhbmdlIGFuIGluZGl2aWR1YWwgbm90ZSdzIHJlbGF0aXZlIG9jdGF2ZSB3aXRoIGEgKyBvciAtIGluc2lkZSB0aGUga2V5d29yZC5cbiAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBieSBtb3JlIHRoYW4gb25lIG9jdGF2ZSwganVzdCBwdXQgYSBudW1iZXIgYWZ0ZXIuIiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vIDpjIDotYyA6KzJjXX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGludHJvLTMtb2N0YXZlLXNob3J0aGFuZCksIDpib2R5LXN0ciAiWzpwaWFubyA6YyA6LWMgOisyY11cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTMtb2N0YXZlLXNob3J0aGFuZC8wIn1dfSB7OnN5bSBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmRcclxuIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vIDpjIDpkIDEvMiA6ZSA6Zl0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJBIHNob3J0aGFuZCB3YXkgb2YgY2hhbmdpbmcgdGhlIG5vdGUgbGVuZ3RoIGlzIHNpbXBseSB0byB3cml0ZSB0aGUgbnVtYmVyLiIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyA6YyA6ZCAxLzIgOmUgOmZdfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kKSwgOmJvZHktc3RyICJbOnBpYW5vIDpjIDpkIDEvMiA6ZSA6Zl1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTQtbGVuZ3RoLXNob3J0aGFuZC8wIn1dfSB7OnN5bSBpbnRyby01LWNob3JkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBpbnRyby01LWNob3JkIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vICN7OmMgOmR9XSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIkEgY2hvcmQgaXMganVzdCBub3RlcyBpbiBhIHNldCIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyAjezpjIDpkfV19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBpbnRyby01LWNob3JkKSwgOmJvZHktc3RyICJbOnBpYW5vICN7OmMgOmR9XVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvaW50cm8tNS1jaG9yZC8wIn1dfSksIGV4cG91bmQudXRpbCAoezpzeW0gYXNzZXJ0LW1lc3NhZ2UsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBhc3NlcnQtbWVzc2FnZVxyXG4gXCJJbnRlcm5hbCBFeHBvdW5kIGFzc2VydGlvbiBmYWlsZWQuIFBsZWFzZSByZXBvcnQgdGhpcyBidWcgYXQgaHR0cHM6Ly9naXRodWIuY29tL2JoYi9leHBvdW5kL2lzc3Vlc1wiKVxyXG4ifSB7OnN5bSBuYW4/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYW4/XHJcbiBbeF1cclxuICM/KDpjbGogKGFuZCAobnVtYmVyPyB4KSAoRG91YmxlL2lzTmFOIHgpKSA6Y2xqcyAoYW5kIChudW1iZXI/IHgpIChqcy9pc05hTiB4KSkpKVxyXG4ifSksIGNsanMuc291cmNlLW1hcCAoezpzeW0gdXBkYXRlLXJlc3VsdCwgOm1ldGEgezpkb2MgIkhlbHBlciBmb3IgZGVjb2RlLiBUYWtlIGEgc291cmNlIG1hcCBhbmQgdXBkYXRlIGl0IGJhc2VkIG9uIGFcbiAgc2VnbWVudCBtYXAuIiwgOmFyZ2xpc3RzIChbcmVzdWx0IHNlZ21hcCBnbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1yZXN1bHRcclxuIFwiSGVscGVyIGZvciBkZWNvZGUuIFRha2UgYSBzb3VyY2UgbWFwIGFuZCB1cGRhdGUgaXQgYmFzZWQgb24gYVxcbiAgc2VnbWVudCBtYXAuXCJcclxuIFtyZXN1bHQgc2VnbWFwIGdsaW5lXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2djb2wgc291cmNlIGxpbmUgY29sIG5hbWVdfVxyXG4gICBzZWdtYXBcclxuICAgZFxyXG4gICB7OmxpbmUgbGluZSwgOmNvbCBjb2wsIDpzb3VyY2Ugc291cmNlfVxyXG4gICBkXHJcbiAgIChpZiBuYW1lIChhc3NvYyBkIDpuYW1lIG5hbWUpIGQpXVxyXG4gICh1cGRhdGUtaW5cclxuICAgcmVzdWx0XHJcbiAgIFtnbGluZV1cclxuICAgKGZuaWxcclxuICAgIChmblxyXG4gICAgIFttXVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgbVxyXG4gICAgICBbZ2NvbF1cclxuICAgICAgKGZuaWwgKGZuKiBbcDFfXzQ4OTMxI10gKGNvbmogcDFfXzQ4OTMxIyBkKSkgW10pKSlcclxuICAgIChzb3J0ZWQtbWFwKSkpKSlcclxuIn0gezpzeW0gZW5jb2RlLCA6bWV0YSB7OmRvYyAiVGFrZSBhbiBpbnRlcm5hbCBzb3VyY2UgbWFwIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGVkIGFzIG5lc3RlZFxuICAgc29ydGVkIG1hcHMgb2YgZmlsZSwgbGluZSwgY29sdW1uIGFuZCByZXR1cm4gYSBzb3VyY2UgbWFwIHYzIEpTT05cbiAgIHN0cmluZy4iLCA6YXJnbGlzdHMgKFttIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbmNvZGVcclxuIFwiVGFrZSBhbiBpbnRlcm5hbCBzb3VyY2UgbWFwIHJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGVkIGFzIG5lc3RlZFxcbiAgIHNvcnRlZCBtYXBzIG9mIGZpbGUsIGxpbmUsIGNvbHVtbiBhbmQgcmV0dXJuIGEgc291cmNlIG1hcCB2MyBKU09OXFxuICAgc3RyaW5nLlwiXHJcbiBbbSBvcHRzXVxyXG4gKGxldFxyXG4gIFtsaW5lc1xyXG4gICAoYXRvbSBbW11dKVxyXG4gICBuYW1lcy0+aWR4XHJcbiAgIChhdG9tIHt9KVxyXG4gICBuYW1lLWlkeFxyXG4gICAoYXRvbSAwKVxyXG4gICBwcmVhbWJsZS1saW5lc1xyXG4gICAodGFrZSAob3IgKDpwcmVhbWJsZS1saW5lLWNvdW50IG9wdHMpIDApIChyZXBlYXQgW10pKVxyXG4gICBpbmZvLT5zZWd2XHJcbiAgIChmblxyXG4gICAgW2luZm8gc291cmNlLWlkeCBsaW5lIGNvbF1cclxuICAgIChsZXRcclxuICAgICBbc2VndiBbKDpnY29sIGluZm8pIHNvdXJjZS1pZHggbGluZSBjb2xdXVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW25hbWUgKDpuYW1lIGluZm8pXVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbaWR4XHJcbiAgICAgICAgKGlmLWxldFxyXG4gICAgICAgICBbaWR4IChnZXQgQG5hbWVzLT5pZHggbmFtZSldXHJcbiAgICAgICAgIGlkeFxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbY2lkeCBAbmFtZS1pZHhdXHJcbiAgICAgICAgICAoc3dhcCEgbmFtZXMtPmlkeCBhc3NvYyBuYW1lIGNpZHgpXHJcbiAgICAgICAgICAoc3dhcCEgbmFtZS1pZHggaW5jKVxyXG4gICAgICAgICAgY2lkeCkpXVxyXG4gICAgICAgKGNvbmogc2VndiBpZHgpKVxyXG4gICAgICBzZWd2KSkpXHJcbiAgIGVuY29kZS1jb2xzXHJcbiAgIChmblxyXG4gICAgW2luZm9zIHNvdXJjZS1pZHggbGluZSBjb2xdXHJcbiAgICAoZG9zZXFcclxuICAgICBbaW5mbyBpbmZvc11cclxuICAgICAobGV0XHJcbiAgICAgIFtzZWd2XHJcbiAgICAgICAoaW5mby0+c2VndiBpbmZvIHNvdXJjZS1pZHggbGluZSBjb2wpXHJcbiAgICAgICBnbGluZVxyXG4gICAgICAgKDpnbGluZSBpbmZvKVxyXG4gICAgICAgbGNcclxuICAgICAgIChjb3VudCBAbGluZXMpXVxyXG4gICAgICAoaWZcclxuICAgICAgICg+IGdsaW5lIChkZWMgbGMpKVxyXG4gICAgICAgKHN3YXAhXHJcbiAgICAgICAgbGluZXNcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW2xpbmVzXVxyXG4gICAgICAgICAoY29ualxyXG4gICAgICAgICAgKGludG8gbGluZXMgKHJlcGVhdCAoZGVjICgtIGdsaW5lIChkZWMgbGMpKSkgW10pKVxyXG4gICAgICAgICAgW3NlZ3ZdKSkpXHJcbiAgICAgICAoc3dhcCFcclxuICAgICAgICBsaW5lc1xyXG4gICAgICAgIChmbiBbbGluZXNdICh1cGRhdGUtaW4gbGluZXMgW2dsaW5lXSBjb25qIHNlZ3YpKSkpKSkpXVxyXG4gIChkb3NlcVxyXG4gICBbW3NvdXJjZS1pZHggW18gbGluZXNdXSAobWFwLWluZGV4ZWQgKGZuIFtpIHZdIFtpIHZdKSBtKV1cclxuICAgKGRvc2VxXHJcbiAgICBbW2xpbmUgY29sc10gbGluZXNdXHJcbiAgICAoZG9zZXFcclxuICAgICBbW2NvbCBpbmZvc10gY29sc11cclxuICAgICAoZW5jb2RlLWNvbHMgaW5mb3Mgc291cmNlLWlkeCBsaW5lIGNvbCkpKSlcclxuICAobGV0XHJcbiAgIFtzb3VyY2UtbWFwLWZpbGUtY29udGVudHNcclxuICAgIChjb25kLT5cclxuICAgICAjanMge1widmVyc2lvblwiIDMsIFwiZmlsZVwiICg6ZmlsZSBvcHRzKSwgXCJzb3VyY2VzXCIgKGxldCBbcGF0aHMgKGtleXMgbSkgZiAoY29tcCAoaWYgKHRydWU/ICg6c291cmNlLW1hcC10aW1lc3RhbXAgb3B0cykpIChmbiogW3AxX180ODkzMiNdIChzdHIgcDFfXzQ4OTMyIyBcIj9yZWw9XCIgKC52YWx1ZU9mIChqcy9EYXRlLikpKSkgaWRlbnRpdHkpIChmbiogW3AxX180ODkzMyNdIChsYXN0IChzdHJpbmcvc3BsaXQgcDFfXzQ4OTMzIyAjXCIvXCIpKSkpXSAoLT4+IHBhdGhzIChtYXAgZikgKGludG8tYXJyYXkpKSksIFwibGluZUNvdW50XCIgKDpsaW5lcyBvcHRzKSwgXCJtYXBwaW5nc1wiICgtPj4gKGxpbmVzLT5zZWdzIChjb25jYXQgcHJlYW1ibGUtbGluZXMgKGNsb2p1cmUuY29yZS9kZXJlZiBsaW5lcykpKSAobWFwIChmbiogW3AxX180ODkzNCNdIChzdHJpbmcvam9pbiBcIixcIiBwMV9fNDg5MzQjKSkpIChzdHJpbmcvam9pbiBcIjtcIikpLCBcIm5hbWVzXCIgKGludG8tYXJyYXkgKG1hcCAoc2V0L21hcC1pbnZlcnQgKGNsb2p1cmUuY29yZS9kZXJlZiBuYW1lcy0+aWR4KSkgKHJhbmdlIChjb3VudCAoY2xvanVyZS5jb3JlL2RlcmVmIG5hbWVzLT5pZHgpKSkpKX1cclxuICAgICAoOnNvdXJjZXMtY29udGVudCBvcHRzKVxyXG4gICAgIChkb3RvXHJcbiAgICAgIChnb2JqL3NldFxyXG4gICAgICAgXCJzb3VyY2VzQ29udGVudFwiXHJcbiAgICAgICAoaW50by1hcnJheSAoOnNvdXJjZXMtY29udGVudCBvcHRzKSkpKSldXHJcbiAgICguc3RyaW5naWZ5IGpzL0pTT04gc291cmNlLW1hcC1maWxlLWNvbnRlbnRzKSkpKVxyXG4ifSB7OnN5bSBpbnZlcnQtcmV2ZXJzZS1tYXAsIDptZXRhIHs6ZG9jICJHaXZlbiBhIENsb2p1cmVTY3JpcHQgdG8gSmF2YVNjcmlwdCBzb3VyY2UgbWFwLCBpbnZlcnQgaXQuIFVzZWZ1bCB3aGVuXG4gICBtYXBwaW5nIEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzIHdoZW4gZW52aXJvbm1lbnQgc3VwcG9ydCBpcyB1bmF2YWlsYWJsZS4iLCA6YXJnbGlzdHMgKFtyZXZlcnNlLW1hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludmVydC1yZXZlcnNlLW1hcFxyXG4gXCJHaXZlbiBhIENsb2p1cmVTY3JpcHQgdG8gSmF2YVNjcmlwdCBzb3VyY2UgbWFwLCBpbnZlcnQgaXQuIFVzZWZ1bCB3aGVuXFxuICAgbWFwcGluZyBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcyB3aGVuIGVudmlyb25tZW50IHN1cHBvcnQgaXMgdW5hdmFpbGFibGUuXCJcclxuIFtyZXZlcnNlLW1hcF1cclxuIChsZXRcclxuICBbaW52ZXJ0ZWQgKGF0b20gKHNvcnRlZC1tYXApKV1cclxuICAoZG9zZXFcclxuICAgW1tsaW5lIGNvbHVtbnNdIHJldmVyc2UtbWFwXVxyXG4gICAoZG9zZXFcclxuICAgIFtbY29sdW1uIGNvbHVtbi1pbmZvXSBjb2x1bW5zXVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW3s6a2V5cyBbZ2xpbmUgZ2NvbCBuYW1lXX0gY29sdW1uLWluZm9dXHJcbiAgICAgKHN3YXAhXHJcbiAgICAgIGludmVydGVkXHJcbiAgICAgIHVwZGF0ZS1pblxyXG4gICAgICBbZ2xpbmVdXHJcbiAgICAgIChmbmlsXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbY29sdW1uc11cclxuICAgICAgICAodXBkYXRlLWluXHJcbiAgICAgICAgIGNvbHVtbnNcclxuICAgICAgICAgW2djb2xdXHJcbiAgICAgICAgIChmbmlsIGNvbmogW10pXHJcbiAgICAgICAgIHs6bGluZSBsaW5lLCA6Y29sIGNvbHVtbiwgOm5hbWUgbmFtZX0pKVxyXG4gICAgICAgKHNvcnRlZC1tYXApKSkpKSlcclxuICBAaW52ZXJ0ZWQpKVxyXG4ifSB7OnN5bSBkZWNvZGUsIDptZXRhIHs6ZG9jICJDb252ZXJ0IGEgdjMgc291cmNlIG1hcCBKU09OIG9iamVjdCBpbnRvIGEgc291cmNlIG1hcCBtYXBwaW5nXG4gIGdlbmVyYXRlZCBKYXZhU2NyaXB0IHNvdXJjZSBsb2NhdGlvbnMgdG8gdGhlIG9yaWdpbmFsXG4gIENsb2p1cmVTY3JpcHQuIiwgOmFyZ2xpc3RzIFtbc291cmNlLW1hcF0gW21hcHBpbmdzIHNvdXJjZS1tYXBdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWNvZGVcclxuIFwiQ29udmVydCBhIHYzIHNvdXJjZSBtYXAgSlNPTiBvYmplY3QgaW50byBhIHNvdXJjZSBtYXAgbWFwcGluZ1xcbiAgZ2VuZXJhdGVkIEphdmFTY3JpcHQgc291cmNlIGxvY2F0aW9ucyB0byB0aGUgb3JpZ2luYWxcXG4gIENsb2p1cmVTY3JpcHQuXCJcclxuIChbc291cmNlLW1hcF0gKGRlY29kZSAoZ29iai9nZXQgc291cmNlLW1hcCBcIm1hcHBpbmdzXCIpIHNvdXJjZS1tYXApKVxyXG4gKFttYXBwaW5ncyBzb3VyY2UtbWFwXVxyXG4gIChsZXRcclxuICAgW3NvdXJjZXNcclxuICAgIChnb2JqL2dldCBzb3VyY2UtbWFwIFwic291cmNlc1wiKVxyXG4gICAgcmVsc2VnLWluaXRcclxuICAgIFswIDAgMCAwIDBdXHJcbiAgICBsaW5lc1xyXG4gICAgKHNlcSAoc3RyaW5nL3NwbGl0IG1hcHBpbmdzICNcIjtcIikpXVxyXG4gICAobG9vcFxyXG4gICAgW2dsaW5lIDAgbGluZXMgbGluZXMgcmVsc2VnIHJlbHNlZy1pbml0IHJlc3VsdCB7fV1cclxuICAgIChpZlxyXG4gICAgIGxpbmVzXHJcbiAgICAgKGxldFxyXG4gICAgICBbbGluZVxyXG4gICAgICAgKGZpcnN0IGxpbmVzKVxyXG4gICAgICAgW3Jlc3VsdCByZWxzZWddXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoc3RyaW5nL2JsYW5rPyBsaW5lKVxyXG4gICAgICAgIFtyZXN1bHQgcmVsc2VnXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3NlZ3MgKHNlcSAoc3RyaW5nL3NwbGl0IGxpbmUgI1wiLFwiKSldXHJcbiAgICAgICAgIChsb29wXHJcbiAgICAgICAgICBbc2VncyBzZWdzIHJlbHNlZyByZWxzZWcgcmVzdWx0IHJlc3VsdF1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIHNlZ3NcclxuICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgIFtzZWdcclxuICAgICAgICAgICAgIChmaXJzdCBzZWdzKVxyXG4gICAgICAgICAgICAgbnJlbHNlZ1xyXG4gICAgICAgICAgICAgKHNlZy1jb21iaW5lIChiYXNlNjQtdmxxL2RlY29kZSBzZWcpIHJlbHNlZyldXHJcbiAgICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICAgKG5leHQgc2VncylcclxuICAgICAgICAgICAgIG5yZWxzZWdcclxuICAgICAgICAgICAgICh1cGRhdGUtcmVzdWx0XHJcbiAgICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICAgKHNlZy0+bWFwIG5yZWxzZWcgc291cmNlLW1hcClcclxuICAgICAgICAgICAgICBnbGluZSkpKVxyXG4gICAgICAgICAgIFtyZXN1bHQgcmVsc2VnXSkpKSldXHJcbiAgICAgIChyZWN1ciAoaW5jIGdsaW5lKSAobmV4dCBsaW5lcykgKGFzc29jIHJlbHNlZyAwIDApIHJlc3VsdCkpXHJcbiAgICAgcmVzdWx0KSkpKSlcclxuIn0gezpzeW0gc2VnLT5tYXAsIDptZXRhIHs6ZG9jICJUYWtlIGEgc291cmNlIG1hcCBzZWdtZW50IHJlcHJlc2VudGVkIGFzIGEgdmVjdG9yXG4gICBhbmQgcmV0dXJuIGEgbWFwLiIsIDphcmdsaXN0cyAoW3NlZyBzb3VyY2UtbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VnLT5tYXBcclxuIFwiVGFrZSBhIHNvdXJjZSBtYXAgc2VnbWVudCByZXByZXNlbnRlZCBhcyBhIHZlY3RvclxcbiAgIGFuZCByZXR1cm4gYSBtYXAuXCJcclxuIFtzZWcgc291cmNlLW1hcF1cclxuIChsZXRcclxuICBbW2djb2wgc291cmNlIGxpbmUgY29sIG5hbWVdIHNlZ11cclxuICB7Omdjb2wgZ2NvbCxcclxuICAgOnNvdXJjZSAoYWdldCAoZ29iai9nZXQgc291cmNlLW1hcCBcInNvdXJjZXNcIikgc291cmNlKSxcclxuICAgOmxpbmUgbGluZSxcclxuICAgOmNvbCBjb2wsXHJcbiAgIDpuYW1lXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW25hbWUgKC0+IHNlZyBtZXRhIDpuYW1lKV1cclxuICAgIChhZ2V0IChnb2JqL2dldCBzb3VyY2UtbWFwIFwibmFtZXNcIikgbmFtZSkpfSkpXHJcbiJ9IHs6c3ltIHNvdXJjZS1jb21wYXJlLCA6bWV0YSB7OmRvYyAiVGFrZSBhIHNlcSBvZiBzb3VyY2UgZmlsZSBuYW1lcyBhbmQgcmV0dXJuIGEgY29tcGFyYXRvclxuICAgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBzb3J0ZWQgbWFwLiBGb3IgcmV2ZXJzZVxuICAgc291cmNlIG1hcHMuIiwgOmFyZ2xpc3RzIChbc291cmNlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1jb21wYXJlXHJcbiBcIlRha2UgYSBzZXEgb2Ygc291cmNlIGZpbGUgbmFtZXMgYW5kIHJldHVybiBhIGNvbXBhcmF0b3JcXG4gICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHNvcnRlZCBtYXAuIEZvciByZXZlcnNlXFxuICAgc291cmNlIG1hcHMuXCJcclxuIFtzb3VyY2VzXVxyXG4gKGxldFxyXG4gIFtzb3VyY2VzIChpbmRleGVkLXNvdXJjZXMgc291cmNlcyldXHJcbiAgKGZuIFthIGJdIChjb21wYXJlIChzb3VyY2VzIGEpIChzb3VyY2VzIGIpKSkpKVxyXG4ifSB7OnN5bSBkZWNvZGUtcmV2ZXJzZSwgOm1ldGEgezpkb2MgIkNvbnZlcnQgYSB2MyBzb3VyY2UgbWFwIEpTT04gb2JqZWN0IGludG8gYSByZXZlcnNlIHNvdXJjZSBtYXBcbiAgbWFwcGluZyBvcmlnaW5hbCBDbG9qdXJlU2NyaXB0IHNvdXJjZSBsb2NhdGlvbnMgdG8gdGhlIGdlbmVyYXRlZFxuICBKYXZhU2NyaXB0LiIsIDphcmdsaXN0cyBbW3NvdXJjZS1tYXBdIFttYXBwaW5ncyBzb3VyY2UtbWFwXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVjb2RlLXJldmVyc2VcclxuIFwiQ29udmVydCBhIHYzIHNvdXJjZSBtYXAgSlNPTiBvYmplY3QgaW50byBhIHJldmVyc2Ugc291cmNlIG1hcFxcbiAgbWFwcGluZyBvcmlnaW5hbCBDbG9qdXJlU2NyaXB0IHNvdXJjZSBsb2NhdGlvbnMgdG8gdGhlIGdlbmVyYXRlZFxcbiAgSmF2YVNjcmlwdC5cIlxyXG4gKFtzb3VyY2UtbWFwXVxyXG4gIChkZWNvZGUtcmV2ZXJzZSAoZ29iai9nZXQgc291cmNlLW1hcCBcIm1hcHBpbmdzXCIpIHNvdXJjZS1tYXApKVxyXG4gKFttYXBwaW5ncyBzb3VyY2UtbWFwXVxyXG4gIChsZXRcclxuICAgW3NvdXJjZXNcclxuICAgIChnb2JqL2dldCBzb3VyY2UtbWFwIFwic291cmNlc1wiKVxyXG4gICAgcmVsc2VnLWluaXRcclxuICAgIFswIDAgMCAwIDBdXHJcbiAgICBsaW5lc1xyXG4gICAgKHNlcSAoc3RyaW5nL3NwbGl0IG1hcHBpbmdzICNcIjtcIikpXVxyXG4gICAobG9vcFxyXG4gICAgW2dsaW5lXHJcbiAgICAgMFxyXG4gICAgIGxpbmVzXHJcbiAgICAgbGluZXNcclxuICAgICByZWxzZWdcclxuICAgICByZWxzZWctaW5pdFxyXG4gICAgIHJlc3VsdFxyXG4gICAgIChzb3J0ZWQtbWFwLWJ5IChzb3VyY2UtY29tcGFyZSBzb3VyY2VzKSldXHJcbiAgICAoaWZcclxuICAgICBsaW5lc1xyXG4gICAgIChsZXRcclxuICAgICAgW2xpbmVcclxuICAgICAgIChmaXJzdCBsaW5lcylcclxuICAgICAgIFtyZXN1bHQgcmVsc2VnXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKHN0cmluZy9ibGFuaz8gbGluZSlcclxuICAgICAgICBbcmVzdWx0IHJlbHNlZ11cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzZWdzIChzZXEgKHN0cmluZy9zcGxpdCBsaW5lICNcIixcIikpXVxyXG4gICAgICAgICAobG9vcFxyXG4gICAgICAgICAgW3NlZ3Mgc2VncyByZWxzZWcgcmVsc2VnIHJlc3VsdCByZXN1bHRdXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICBzZWdzXHJcbiAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICBbc2VnXHJcbiAgICAgICAgICAgICAoZmlyc3Qgc2VncylcclxuICAgICAgICAgICAgIG5yZWxzZWdcclxuICAgICAgICAgICAgIChzZWctY29tYmluZSAoYmFzZTY0LXZscS9kZWNvZGUgc2VnKSByZWxzZWcpXVxyXG4gICAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAgIChuZXh0IHNlZ3MpXHJcbiAgICAgICAgICAgICBucmVsc2VnXHJcbiAgICAgICAgICAgICAodXBkYXRlLXJldmVyc2UtcmVzdWx0XHJcbiAgICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICAgKHNlZy0+bWFwIG5yZWxzZWcgc291cmNlLW1hcClcclxuICAgICAgICAgICAgICBnbGluZSkpKVxyXG4gICAgICAgICAgIFtyZXN1bHQgcmVsc2VnXSkpKSldXHJcbiAgICAgIChyZWN1ciAoaW5jIGdsaW5lKSAobmV4dCBsaW5lcykgKGFzc29jIHJlbHNlZyAwIDApIHJlc3VsdCkpXHJcbiAgICAgcmVzdWx0KSkpKSlcclxuIn0gezpzeW0gbGluZXMtPnNlZ3MsIDptZXRhIHs6ZG9jICJUYWtlIGEgbmVzdGVkIHNvcnRlZCBtYXAgZW5jb2RpbmcgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uXG4gICBmb3IgYSBmaWxlIGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdmVjdG9ycyBvZiBlbmNvZGVkIHNlZ21lbnRzLlxuICAgRWFjaCB2ZWN0b3IgcmVwcmVzZW50cyBhIGxpbmUsIGFuZCB0aGUgaW50ZXJuYWwgdmVjdG9ycyBhcmUgc2VnbWVudHNcbiAgIHJlcHJlc2VudGluZyB0aGUgY29udGVudHMgb2YgdGhlIGxpbmUuIiwgOmFyZ2xpc3RzIChbbGluZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lcy0+c2Vnc1xyXG4gXCJUYWtlIGEgbmVzdGVkIHNvcnRlZCBtYXAgZW5jb2RpbmcgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uXFxuICAgZm9yIGEgZmlsZSBhbmQgcmV0dXJuIGEgdmVjdG9yIG9mIHZlY3RvcnMgb2YgZW5jb2RlZCBzZWdtZW50cy5cXG4gICBFYWNoIHZlY3RvciByZXByZXNlbnRzIGEgbGluZSwgYW5kIHRoZSBpbnRlcm5hbCB2ZWN0b3JzIGFyZSBzZWdtZW50c1xcbiAgIHJlcHJlc2VudGluZyB0aGUgY29udGVudHMgb2YgdGhlIGxpbmUuXCJcclxuIFtsaW5lc11cclxuIChsZXRcclxuICBbcmVsc2VnIChhdG9tIFswIDAgMCAwIDBdKV1cclxuICAocmVkdWNlXHJcbiAgIChmblxyXG4gICAgW3NlZ3MgY29sc11cclxuICAgIChzd2FwIVxyXG4gICAgIHJlbHNlZ1xyXG4gICAgIChmbiBbW18gc291cmNlIGxpbmUgY29sIG5hbWVdXSBbMCBzb3VyY2UgbGluZSBjb2wgbmFtZV0pKVxyXG4gICAgKGNvbmpcclxuICAgICBzZWdzXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm5cclxuICAgICAgIFtjb2xzIFtnY29sIHNpZHggbGluZSBjb2wgbmFtZSA6YXMgc2VnXV1cclxuICAgICAgIChsZXRcclxuICAgICAgICBbb2Zmc2V0IChtYXAgLSBzZWcgQHJlbHNlZyldXHJcbiAgICAgICAgKHN3YXAhXHJcbiAgICAgICAgIHJlbHNlZ1xyXG4gICAgICAgICAoZm4gW1tfIF8gXyBfIGxuYW1lXV0gW2djb2wgc2lkeCBsaW5lIGNvbCAob3IgbmFtZSBsbmFtZSldKSlcclxuICAgICAgICAoY29uaiBjb2xzIChiYXNlNjQtdmxxL2VuY29kZSBvZmZzZXQpKSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGNvbHMpKSlcclxuICAgW11cclxuICAgbGluZXMpKSlcclxuIn0gezpzeW0gbWVyZ2Utc291cmNlLW1hcHMsIDptZXRhIHs6ZG9jICJNZXJnZSBhbiBpbnRlcm5hbCBzb3VyY2UgbWFwIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlXG4gICBDbG9qdXJlU2NyaXB0IGZpbGUgbWFwcGluZyBvcmlnaW5hbCB0byBnZW5lcmF0ZWQgd2l0aCBhXG4gICBzZWNvbmQgc291cmNlIG1hcCBtYXBwaW5nIG9yaWdpbmFsIEpTIHRvIGdlbmVyYXRlZCBKUy5cbiAgIFRoZSBpcyB0byBzdXBwb3J0IHNvdXJjZSBtYXBzIHRoYXQgd29yayB0aHJvdWdoIG11bHRpcGxlXG4gICBjb21waWxhdGlvbiBzdGVwcyBsaWtlIEdvb2dsZSBDbG9zdXJlIG9wdGltaXphdGlvbiBwYXNzZXMuIiwgOmFyZ2xpc3RzIChbY2xqcy1tYXAganMtbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2Utc291cmNlLW1hcHNcclxuIFwiTWVyZ2UgYW4gaW50ZXJuYWwgc291cmNlIG1hcCByZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZVxcbiAgIENsb2p1cmVTY3JpcHQgZmlsZSBtYXBwaW5nIG9yaWdpbmFsIHRvIGdlbmVyYXRlZCB3aXRoIGFcXG4gICBzZWNvbmQgc291cmNlIG1hcCBtYXBwaW5nIG9yaWdpbmFsIEpTIHRvIGdlbmVyYXRlZCBKUy5cXG4gICBUaGUgaXMgdG8gc3VwcG9ydCBzb3VyY2UgbWFwcyB0aGF0IHdvcmsgdGhyb3VnaCBtdWx0aXBsZVxcbiAgIGNvbXBpbGF0aW9uIHN0ZXBzIGxpa2UgR29vZ2xlIENsb3N1cmUgb3B0aW1pemF0aW9uIHBhc3Nlcy5cIlxyXG4gW2NsanMtbWFwIGpzLW1hcF1cclxuIChsb29wXHJcbiAgW2xpbmUtbWFwLXNlcSAoc2VxIGNsanMtbWFwKSBuZXctbGluZXMgKHNvcnRlZC1tYXApXVxyXG4gIChpZlxyXG4gICBsaW5lLW1hcC1zZXFcclxuICAgKGxldFxyXG4gICAgW1tsaW5lIGNvbC1tYXBdXHJcbiAgICAgKGZpcnN0IGxpbmUtbWFwLXNlcSlcclxuICAgICBuZXctY29sc1xyXG4gICAgIChsb29wXHJcbiAgICAgIFtjb2wtbWFwLXNlcSAoc2VxIGNvbC1tYXApIG5ldy1jb2xzIChzb3J0ZWQtbWFwKV1cclxuICAgICAgKGlmXHJcbiAgICAgICBjb2wtbWFwLXNlcVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtbY29sIGluZm9zXSAoZmlyc3QgY29sLW1hcC1zZXEpXVxyXG4gICAgICAgIChyZWN1clxyXG4gICAgICAgICAobmV4dCBjb2wtbWFwLXNlcSlcclxuICAgICAgICAgKGFzc29jXHJcbiAgICAgICAgICBuZXctY29sc1xyXG4gICAgICAgICAgY29sXHJcbiAgICAgICAgICAocmVkdWNlXHJcbiAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgIFt2IHs6a2V5cyBbZ2xpbmUgZ2NvbF19XVxyXG4gICAgICAgICAgICAoaW50byB2IChnZXQtaW4ganMtbWFwIFtnbGluZSBnY29sXSkpKVxyXG4gICAgICAgICAgIFtdXHJcbiAgICAgICAgICAgaW5mb3MpKSkpXHJcbiAgICAgICBuZXctY29scykpXVxyXG4gICAgKHJlY3VyIChuZXh0IGxpbmUtbWFwLXNlcSkgKGFzc29jIG5ldy1saW5lcyBsaW5lIG5ldy1jb2xzKSkpXHJcbiAgIG5ldy1saW5lcykpKVxyXG4ifSB7OnN5bSB1cGRhdGUtcmV2ZXJzZS1yZXN1bHQsIDptZXRhIHs6ZG9jICJIZWxwZXIgZm9yIGRlY29kZS1yZXZlcnNlLiBUYWtlIGEgcmV2ZXJzZSBzb3VyY2UgbWFwIGFuZFxuICB1cGRhdGUgaXQgd2l0aCBhIHNlZ21lbnQgbWFwLiIsIDphcmdsaXN0cyAoW3Jlc3VsdCBzZWdtYXAgZ2xpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtcmV2ZXJzZS1yZXN1bHRcclxuIFwiSGVscGVyIGZvciBkZWNvZGUtcmV2ZXJzZS4gVGFrZSBhIHJldmVyc2Ugc291cmNlIG1hcCBhbmRcXG4gIHVwZGF0ZSBpdCB3aXRoIGEgc2VnbWVudCBtYXAuXCJcclxuIFtyZXN1bHQgc2VnbWFwIGdsaW5lXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2djb2wgc291cmNlIGxpbmUgY29sIG5hbWVdfVxyXG4gICBzZWdtYXBcclxuICAgZFxyXG4gICB7OmdsaW5lIGdsaW5lLCA6Z2NvbCBnY29sfVxyXG4gICBkXHJcbiAgIChpZiBuYW1lIChhc3NvYyBkIDpuYW1lIG5hbWUpIGQpXVxyXG4gICh1cGRhdGUtaW5cclxuICAgcmVzdWx0XHJcbiAgIFtzb3VyY2VdXHJcbiAgIChmbmlsXHJcbiAgICAoZm5cclxuICAgICBbbV1cclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIG1cclxuICAgICAgW2xpbmVdXHJcbiAgICAgIChmbmlsXHJcbiAgICAgICAoZm4gW21dICh1cGRhdGUtaW4gbSBbY29sXSAoZm5pbCAoZm4gW3ZdIChjb25qIHYgZCkpIFtdKSkpXHJcbiAgICAgICAoc29ydGVkLW1hcCkpKSlcclxuICAgIChzb3J0ZWQtbWFwKSkpKSlcclxuIn0gezpzeW0gaW5kZXhlZC1zb3VyY2VzLCA6bWV0YSB7OmRvYyAiVGFrZSBhIHNlcSBvZiBzb3VyY2UgZmlsZSBuYW1lcyBhbmQgcmV0dXJuIGEgbWFwIGZyb21cbiAgIGZpbGUgbnVtYmVyIHRvIGludGVnZXIgaW5kZXguIEZvciByZXZlcnNlIHNvdXJjZSBtYXBzLiIsIDphcmdsaXN0cyAoW3NvdXJjZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGVkLXNvdXJjZXNcclxuIFwiVGFrZSBhIHNlcSBvZiBzb3VyY2UgZmlsZSBuYW1lcyBhbmQgcmV0dXJuIGEgbWFwIGZyb21cXG4gICBmaWxlIG51bWJlciB0byBpbnRlZ2VyIGluZGV4LiBGb3IgcmV2ZXJzZSBzb3VyY2UgbWFwcy5cIlxyXG4gW3NvdXJjZXNdXHJcbiAoLT4+XHJcbiAgc291cmNlc1xyXG4gIChtYXAtaW5kZXhlZCAoZm4gW2EgYl0gW2EgYl0pKVxyXG4gIChyZWR1Y2UgKGZuIFttIFtpIHZdXSAoYXNzb2MgbSB2IGkpKSB7fSkpKVxyXG4ifSB7OnN5bSBzZWctY29tYmluZSwgOm1ldGEgezpkb2MgIkNvbWJpbmUgYSBzb3VyY2UgbWFwIHNlZ21lbnQgdmVjdG9yIGFuZCBhIHJlbGF0aXZlXG4gICBzb3VyY2UgbWFwIHNlZ21lbnQgdmVjdG9yIGFuZCBjb21iaW5lIHRoZW0gdG8gZ2V0XG4gICBhbiBhYnNvbHV0ZSBzZWdtZW50IHBvc2l0aXRvbiBpbmZvcm1hdGlvbiBhcyBhIHZlY3Rvci4iLCA6YXJnbGlzdHMgKFtzZWcgcmVsc2VnXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VnLWNvbWJpbmVcclxuIFwiQ29tYmluZSBhIHNvdXJjZSBtYXAgc2VnbWVudCB2ZWN0b3IgYW5kIGEgcmVsYXRpdmVcXG4gICBzb3VyY2UgbWFwIHNlZ21lbnQgdmVjdG9yIGFuZCBjb21iaW5lIHRoZW0gdG8gZ2V0XFxuICAgYW4gYWJzb2x1dGUgc2VnbWVudCBwb3NpdGl0b24gaW5mb3JtYXRpb24gYXMgYSB2ZWN0b3IuXCJcclxuIFtzZWcgcmVsc2VnXVxyXG4gKGxldFxyXG4gIFtbZ2NvbCBzb3VyY2UgbGluZSBjb2wgbmFtZV1cclxuICAgc2VnXHJcbiAgIFtyZ2NvbCByc291cmNlIHJsaW5lIHJjb2wgcm5hbWVdXHJcbiAgIHJlbHNlZ1xyXG4gICBuc2VnXHJcbiAgIFsoKyBnY29sIHJnY29sKVxyXG4gICAgKCsgKG9yIHNvdXJjZSAwKSByc291cmNlKVxyXG4gICAgKCsgKG9yIGxpbmUgMCkgcmxpbmUpXHJcbiAgICAoKyAob3IgY29sIDApIHJjb2wpXHJcbiAgICAoKyAob3IgbmFtZSAwKSBybmFtZSldXVxyXG4gIChpZiBuYW1lICh3aXRoLW1ldGEgbnNlZyB7Om5hbWUgKCsgbmFtZSBybmFtZSl9KSBuc2VnKSkpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIuaW1wbC5jb21tb25zICh7OnN5bSBtYXRjaC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hdGNoLW51bWJlclxyXG4gW3NdXHJcbiAoaWZcclxuICAobWF0Y2hlcz8gaW50LXBhdHRlcm4gcylcclxuICAobWF0Y2gtaW50IHMpXHJcbiAgKGlmXHJcbiAgIChtYXRjaGVzPyBmbG9hdC1wYXR0ZXJuIHMpXHJcbiAgIChtYXRjaC1mbG9hdCBzKVxyXG4gICAod2hlbiAobWF0Y2hlcz8gcmF0aW8tcGF0dGVybiBzKSAobWF0Y2gtcmF0aW8gcykpKSkpXHJcbiJ9IHs6c3ltIHNraXAtbGluZSwgOm1ldGEgezpkb2MgIkFkdmFuY2VzIHRoZSByZWFkZXIgdG8gdGhlIGVuZCBvZiBhIGxpbmUuIFJldHVybnMgdGhlIHJlYWRlciIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNraXAtbGluZVxyXG4gXCJBZHZhbmNlcyB0aGUgcmVhZGVyIHRvIHRoZSBlbmQgb2YgYSBsaW5lLiBSZXR1cm5zIHRoZSByZWFkZXJcIlxyXG4gW3JlYWRlcl1cclxuIChsb29wIFtdICh3aGVuLW5vdCAobmV3bGluZT8gKHJlYWQtY2hhciByZWFkZXIpKSAocmVjdXIpKSlcclxuIHJlYWRlcilcclxuIn0gezpzeW0gaW50LXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnQtcGF0dGVyblxyXG4gI1wiXihbLStdPykoPzooMCl8KFsxLTldWzAtOV0qKXwwW3hYXShbMC05QS1GYS1mXSspfDAoWzAtN10rKXwoWzEtOV1bMC05XT8pW3JSXShbMC05QS1aYS16XSspfDBbMC05XSspKE4pPyRcIilcclxuIn0gezpzeW0gcmVhZC1jb21tZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciAmIF9dKX0sIDpzb3VyY2UgIihkZWZuIHJlYWQtY29tbWVudCBbcmRyICYgX10gKHNraXAtbGluZSByZHIpKVxyXG4ifSB7OnN5bSBwYXJzZS1zeW1ib2wsIDptZXRhIHs6ZG9jICJQYXJzZXMgYSBzdHJpbmcgaW50byBhIHZlY3RvciBvZiB0aGUgbmFtZXNwYWNlIGFuZCBzeW1ib2wiLCA6YXJnbGlzdHMgKFt0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLXN5bWJvbFxyXG4gXCJQYXJzZXMgYSBzdHJpbmcgaW50byBhIHZlY3RvciBvZiB0aGUgbmFtZXNwYWNlIGFuZCBzeW1ib2xcIlxyXG4gW3Rva2VuXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yXHJcbiAgIChpZGVudGljYWw/IFwiXCIgdG9rZW4pXHJcbiAgICh0cnVlPyAoLnRlc3QgI1wiOiRcIiB0b2tlbikpXHJcbiAgICh0cnVlPyAoLnRlc3QgI1wiXjo6XCIgdG9rZW4pKSlcclxuICAobGV0XHJcbiAgIFtucy1pZHhcclxuICAgICguaW5kZXhPZiB0b2tlbiBcIi9cIilcclxuICAgIG5zXHJcbiAgICAod2hlbiAocG9zPyBucy1pZHgpIChzdWJzIHRva2VuIDAgbnMtaWR4KSldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IG5zKVxyXG4gICAgKGxldFxyXG4gICAgIFtucy1pZHggKGluYyBucy1pZHgpXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAoPT0gbnMtaWR4IChjb3VudCB0b2tlbikpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtzeW0gKHN1YnMgdG9rZW4gbnMtaWR4KV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgKGFuZFxyXG4gICAgICAgICAobm90IChudW1lcmljPyAobnRoIHN5bSAwKSkpXHJcbiAgICAgICAgIChub3QgKGlkZW50aWNhbD8gXCJcIiBzeW0pKVxyXG4gICAgICAgICAoZmFsc2U/ICgudGVzdCAjXCI6JFwiIG5zKSlcclxuICAgICAgICAgKG9yIChpZGVudGljYWw/IHN5bSBcIi9cIikgKD09IC0xICguaW5kZXhPZiBzeW0gXCIvXCIpKSkpXHJcbiAgICAgICAgW25zIHN5bV0pKSkpXHJcbiAgICAod2hlblxyXG4gICAgIChvciAoaWRlbnRpY2FsPyB0b2tlbiBcIi9cIikgKD09IC0xICguaW5kZXhPZiB0b2tlbiBcIi9cIikpKVxyXG4gICAgIFtuaWwgdG9rZW5dKSkpKSlcclxuIn0gezpzeW0gbnVtYmVyLWxpdGVyYWw/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgdGhlIHJlYWRlciBpcyBhdCB0aGUgc3RhcnQgb2YgYSBudW1iZXIgbGl0ZXJhbCIsIDphcmdsaXN0cyAoW3JlYWRlciBpbml0Y2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1iZXItbGl0ZXJhbD9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgdGhlIHJlYWRlciBpcyBhdCB0aGUgc3RhcnQgb2YgYSBudW1iZXIgbGl0ZXJhbFwiXHJcbiBbcmVhZGVyIGluaXRjaF1cclxuIChvclxyXG4gIChudW1lcmljPyBpbml0Y2gpXHJcbiAgKGFuZFxyXG4gICAob3IgKGlkZW50aWNhbD8gXFwrIGluaXRjaCkgKGlkZW50aWNhbD8gXFwtIGluaXRjaCkpXHJcbiAgIChudW1lcmljPyAocGVlay1jaGFyIHJlYWRlcikpKSkpXHJcbiJ9IHs6c3ltIHJlYWQtcGFzdCwgOm1ldGEgezpkb2MgIlJlYWQgdW50aWwgZmlyc3QgY2hhcmFjdGVyIHRoYXQgZG9lc24ndCBtYXRjaCBwcmVkLCByZXR1cm5pbmdcbiAgIGNoYXIuIiwgOmFyZ2xpc3RzIChbcHJlZCByZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXBhc3RcclxuIFwiUmVhZCB1bnRpbCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IG1hdGNoIHByZWQsIHJldHVybmluZ1xcbiAgIGNoYXIuXCJcclxuIFtwcmVkIHJkcl1cclxuIChsb29wIFtjaCAocmVhZC1jaGFyIHJkcildIChpZiAocHJlZCBjaCkgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSkgY2gpKSlcclxuIn0gezpzeW0gZmxvYXQtcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZmxvYXQtcGF0dGVybiAjXCIoWy0rXT9bMC05XSsoXFwuWzAtOV0qKT8oW2VFXVstK10/WzAtOV0rKT8pKE0pP1wiKVxyXG4ifSB7OnN5bSBtYXRjaGVzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwYXR0ZXJuIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXRjaGVzP1xyXG4gW3BhdHRlcm4gc11cclxuIChsZXQgW1ttYXRjaF0gKHJlLWZpbmQgcGF0dGVybiBzKV0gKGlkZW50aWNhbD8gbWF0Y2ggcykpKVxyXG4ifSB7OnN5bSB0aHJvd2luZy1yZWFkZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbXNnXSl9LCA6c291cmNlICIoZGVmbiB0aHJvd2luZy1yZWFkZXIgW21zZ10gKGZuIFtyZHIgJiBfXSAocmVhZGVyLWVycm9yIHJkciBtc2cpKSlcclxuIn0gezpzeW0gcmF0aW8tcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcmF0aW8tcGF0dGVybiAjXCIoWy0rXT9bMC05XSspLyhbMC05XSspXCIpXHJcbiJ9KSwgZHluYWRvYy50cmFuc2Zvcm0gKHs6c3ltIHdpdGgtZm9jdXMtPmJpbmRpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbd2l0aC1mb2N1c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdpdGgtZm9jdXMtPmJpbmRpbmdcclxuIFt3aXRoLWZvY3VzXVxyXG4gKGxldFxyXG4gIFtmb3JtXHJcbiAgIChvciAoOmZvcm0gd2l0aC1mb2N1cykgKDpiaW5kaW5nIHdpdGgtZm9jdXMpKVxyXG4gICBbYmluZGluZy10eXBlIGJpbmRpbmctdmFsXVxyXG4gICBmb3JtXVxyXG4gICh3aGVuICgjezpsb2NhbC1zeW1ib2wgOnN5bX0gYmluZGluZy10eXBlKSBiaW5kaW5nLXZhbCkpKVxyXG4ifSB7OnN5bSBhZGQtZm9jdXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB3aXRoLWZvY3VzIGJvZHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtZm9jdXNcclxuIFtmb3JtIHdpdGgtZm9jdXMgYm9keV1cclxuIChpZi1sZXRcclxuICBbYmluZCAod2l0aC1mb2N1cy0+YmluZGluZyB3aXRoLWZvY3VzKV1cclxuICAocG9zdHdhbGsgKGZuIFt4XSAoaWYgKD0geCBiaW5kKSBmb3JtIHgpKSBib2R5KVxyXG4gIGZvcm0pKVxyXG4ifSB7OnN5bSBhZGQtY2FyZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHdpdGgtY2FyZCBpZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1jYXJkXHJcbiBbZm9ybSB3aXRoLWNhcmQgaWRdXHJcbiAobGlzdFxyXG4gICdsZXRcclxuICBbd2l0aC1jYXJkXHJcbiAgICM/KDpjbGpzIChsaXN0IChxdW90ZSAuZ2V0RWxlbWVudEJ5SWQpIChxdW90ZSBqcy9kb2N1bWVudCkgaWQpIDpjbGogaWQpXVxyXG4gIGZvcm0pKVxyXG4ifSB7OnN5bSBhZGQtY2FsbGJhY2ssIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB3aXRoLWNhbGxiYWNrXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWNhbGxiYWNrXHJcbiBbZm9ybSB3aXRoLWNhbGxiYWNrXVxyXG4gKGxpc3RcclxuICAnbGV0XHJcbiAgWydlcy1jaGFubmVsXHJcbiAgICcoZHluYWRvYy5hbGlhc2VzL2NoYW4pXHJcbiAgIHdpdGgtY2FsbGJhY2tcclxuICAgJyhmbiBbZGF0YV0gKGR5bmFkb2MuYWxpYXNlcy9wdXQhIGVzLWNoYW5uZWwgZGF0YSkpXVxyXG4gIGZvcm1cclxuICAnKGR5bmFkb2MuYWxpYXNlcy88ISEgZXMtY2hhbm5lbCkpKVxyXG4ifSB7OnN5bSB0cmFuc2Zvcm0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZXhhbXBsZV0gW3s6a2V5cyBbYm9keSBpZCB3aXRoLWZvY3VzIHdpdGgtY2FyZCB3aXRoLWNhbGxiYWNrXX0gZm9ybV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zZm9ybVxyXG4gKFtleGFtcGxlXVxyXG4gICh0cmFuc2Zvcm1cclxuICAgZXhhbXBsZVxyXG4gICAob3IgKHNvbWUtPiBleGFtcGxlIDp3aXRoLWZvY3VzIDppbml0LWV4cHIpICg6Ym9keSBleGFtcGxlKSkpKVxyXG4gKFt7OmtleXMgW2JvZHkgaWQgd2l0aC1mb2N1cyB3aXRoLWNhcmQgd2l0aC1jYWxsYmFja119IGZvcm1dXHJcbiAgKGNvbmQtPlxyXG4gICBmb3JtXHJcbiAgIChzb21lPyB3aXRoLWZvY3VzKVxyXG4gICAoYWRkLWZvY3VzIHdpdGgtZm9jdXMgYm9keSlcclxuICAgKHNvbWU/IHdpdGgtY2FyZClcclxuICAgKGFkZC1jYXJkIHdpdGgtY2FyZCBpZClcclxuICAgKHNvbWU/IHdpdGgtY2FsbGJhY2spXHJcbiAgIChhZGQtY2FsbGJhY2sgd2l0aC1jYWxsYmFjaykpKSlcclxuIn0pLCBvZG95bGUucnVsZXMgKHs6c3ltIC0+cnVsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtbcnVsZS1uYW1lIHJ1bGVdXSl9LCA6c291cmNlICIoZGVmblxyXG4gLT5ydWxlXHJcbiBbW3J1bGUtbmFtZSBydWxlXV1cclxuIChsZXRcclxuICBbezprZXlzIFt3aGF0LWJsb2NrIHdoZW4tYmxvY2sgdGhlbi1ibG9ja119XHJcbiAgIHJ1bGVcclxuICAgY29uZGl0aW9uc1xyXG4gICAobWFwdiAtPmNvbmRpdGlvbiAoOmJvZHkgd2hhdC1ibG9jaykpXHJcbiAgIHdoZW4tYm9keVxyXG4gICAoOmJvZHkgd2hlbi1ibG9jaylcclxuICAgd2hlbi1ib2R5XHJcbiAgIChpZiAoPiAoY291bnQgd2hlbi1ib2R5KSAxKSAoY29ucyAnYW5kIHdoZW4tYm9keSkgKGZpcnN0IHdoZW4tYm9keSkpXHJcbiAgIHRoZW4tYm9keVxyXG4gICAoOmJvZHkgdGhlbi1ibG9jaylcclxuICAgc3ltc1xyXG4gICAoLT4+IGNvbmRpdGlvbnMgKG1hcGNhdCA6YmluZGluZ3MpIChtYXAgOnN5bSkgc2V0IHZlYyldXHJcbiAgezpydWxlLW5hbWUgcnVsZS1uYW1lLFxyXG4gICA6Zm4tbmFtZVxyXG4gICAoLT5cclxuICAgIChzdHIgKG5hbWVzcGFjZSBydWxlLW5hbWUpIFwiLVwiIChuYW1lIHJ1bGUtbmFtZSkpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCIuXCIgXCItXCIpXHJcbiAgICBzeW1ib2wpLFxyXG4gICA6Y29uZGl0aW9ucyBjb25kaXRpb25zLFxyXG4gICA6YXJnIHs6a2V5cyBzeW1zfSxcclxuICAgOndoZW4tYm9keSB3aGVuLWJvZHksXHJcbiAgIDp0aGVuLWJvZHkgdGhlbi1ib2R5fSkpXHJcbiJ9IHs6c3ltIGZpcmUtcnVsZXMsIDptZXRhIHs6ZG9jICJGaXJlcyA6dGhlbiBibG9ja3MgZm9yIGFueSBydWxlcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIG1hdGNoZXMuIiwgOmFyZ2xpc3RzIChbc2Vzc2lvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpcmUtcnVsZXNcclxuIFwiRmlyZXMgOnRoZW4gYmxvY2tzIGZvciBhbnkgcnVsZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBtYXRjaGVzLlwiXHJcbiBbc2Vzc2lvbl1cclxuIChsZXRcclxuICBbdGhlbi1xdWV1ZSAoOnRoZW4tcXVldWUgc2Vzc2lvbildXHJcbiAgKGlmXHJcbiAgIChhbmQgKHNlcSB0aGVuLXF1ZXVlKSAobmlsPyAqc2Vzc2lvbiopKVxyXG4gICAobGV0XHJcbiAgICBbKnRyaWdnZXItcXVldWVcclxuICAgICAodm9sYXRpbGUhIFtdKVxyXG4gICAgIHNlc3Npb25cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmblxyXG4gICAgICAgW3Nlc3Npb24gW25vZGUtaWQgaWQrYXR0cnNdXVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtub2RlLXBhdGhcclxuICAgICAgICAgWzpiZXRhLW5vZGVzIG5vZGUtaWRdXHJcbiAgICAgICAgIG5vZGVcclxuICAgICAgICAgKGdldC1pbiBzZXNzaW9uIG5vZGUtcGF0aClcclxuICAgICAgICAgezprZXlzIFttYXRjaGVzIHJ1bGUtbmFtZV19XHJcbiAgICAgICAgIG5vZGVcclxuICAgICAgICAgcnVsZS1mblxyXG4gICAgICAgICAob3JcclxuICAgICAgICAgIChnZXQtaW4gc2Vzc2lvbiBbOnJ1bGUtZm5zIHJ1bGUtbmFtZV0pXHJcbiAgICAgICAgICAodGhyb3cgKGV4LWluZm8gKHN0ciBydWxlLW5hbWUgXCIgbm90IGZvdW5kXCIpIHt9KSkpXVxyXG4gICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgICBbezprZXlzIFt2YXJzIGVuYWJsZWRdfSAoZ2V0IG1hdGNoZXMgaWQrYXR0cnMpXVxyXG4gICAgICAgICAod2hlbiBlbmFibGVkICh2c3dhcCEgKnRyaWdnZXItcXVldWUgY29uaiBbcnVsZS1mbiB2YXJzXSkpKVxyXG4gICAgICAgICh1cGRhdGUtaW4gc2Vzc2lvbiBub2RlLXBhdGggYXNzb2MgOnRyaWdnZXIgZmFsc2UpKSlcclxuICAgICAgc2Vzc2lvblxyXG4gICAgICB0aGVuLXF1ZXVlKVxyXG4gICAgIHNlc3Npb25cclxuICAgICAoYXNzb2Mgc2Vzc2lvbiA6dGhlbi1xdWV1ZSAje30pXVxyXG4gICAgKC0+PlxyXG4gICAgIEAqdHJpZ2dlci1xdWV1ZVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuXHJcbiAgICAgICBbc2Vzc2lvbiBbcnVsZS1mbiBtYXRjaF1dXHJcbiAgICAgICAoYmluZGluZ1xyXG4gICAgICAgIFsqc2Vzc2lvbipcclxuICAgICAgICAgc2Vzc2lvblxyXG4gICAgICAgICAqbXV0YWJsZS1zZXNzaW9uKlxyXG4gICAgICAgICAodm9sYXRpbGUhIHNlc3Npb24pXHJcbiAgICAgICAgICptYXRjaCpcclxuICAgICAgICAgbWF0Y2hdXHJcbiAgICAgICAgKHJ1bGUtZm4gbWF0Y2gpXHJcbiAgICAgICAgQCptdXRhYmxlLXNlc3Npb24qKSlcclxuICAgICAgc2Vzc2lvbilcclxuICAgICBmaXJlLXJ1bGVzKSlcclxuICAgc2Vzc2lvbikpKVxyXG4ifSB7OnN5bSBpbnNlcnQsIDptZXRhIHs6ZG9jICJJbnNlcnRzIGEgZmFjdCBpbnRvIHRoZSBzZXNzaW9uLiBDYW4gb3B0aW9uYWxseSBpbnNlcnQgbXVsdGlwbGUgZmFjdHMgd2l0aCB0aGUgc2FtZSBpZC4iLCA6YXJnbGlzdHMgW1tzZXNzaW9uIGlkIGF0dHItPnZhbHVlXSBbc2Vzc2lvbiBpZCBhdHRyIHZhbHVlXV19LCA6c291cmNlICIoZGVmblxyXG4gaW5zZXJ0XHJcbiBcIkluc2VydHMgYSBmYWN0IGludG8gdGhlIHNlc3Npb24uIENhbiBvcHRpb25hbGx5IGluc2VydCBtdWx0aXBsZSBmYWN0cyB3aXRoIHRoZSBzYW1lIGlkLlwiXHJcbiAoW3Nlc3Npb24gaWQgYXR0ci0+dmFsdWVdXHJcbiAgKHJlZHVjZS1rdlxyXG4gICAoZm4gW3Nlc3Npb24gYXR0ciB2YWx1ZV0gKGluc2VydCBzZXNzaW9uIGlkIGF0dHIgdmFsdWUpKVxyXG4gICBzZXNzaW9uXHJcbiAgIGF0dHItPnZhbHVlKSlcclxuIChbc2Vzc2lvbiBpZCBhdHRyIHZhbHVlXVxyXG4gICgtPj5cclxuICAgKGdldC1hbHBoYS1ub2Rlcy1mb3ItZmFjdFxyXG4gICAgc2Vzc2lvblxyXG4gICAgKDphbHBoYS1ub2RlIHNlc3Npb24pXHJcbiAgICBpZFxyXG4gICAgYXR0clxyXG4gICAgdmFsdWVcclxuICAgIHRydWUpXHJcbiAgICh1cHNlcnQtZmFjdCBzZXNzaW9uIGlkIGF0dHIgdmFsdWUpKSkpXHJcbiJ9IHs6c3ltICptYXRjaCosIDptZXRhIHs6ZG9jICJQcm92aWRlcyBhIG1hcCBvZiBhbGwgdGhlIG1hdGNoZWQgdmFsdWVzIGZyb20gaW5zaWRlIGEgOnRoZW4gYmxvY2suIn0sIDpzb3VyY2UgIihkZWYgKm1hdGNoKiBuaWwpXHJcbiJ9IHs6c3ltIGFkZC1ydWxlLCA6bWV0YSB7OmRvYyAiQWRkcyBhIHJ1bGUgdG8gdGhlIGdpdmVuIHNlc3Npb24uIiwgOmFyZ2xpc3RzIChbc2Vzc2lvbiBydWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXJ1bGVcclxuIFwiQWRkcyBhIHJ1bGUgdG8gdGhlIGdpdmVuIHNlc3Npb24uXCJcclxuIFtzZXNzaW9uIHJ1bGVdXHJcbiAod2hlblxyXG4gIChnZXQtaW4gc2Vzc2lvbiBbOnJ1bGUtZm5zICg6bmFtZSBydWxlKV0pXHJcbiAgKHRocm93IChleC1pbmZvIChzdHIgKDpuYW1lIHJ1bGUpIFwiIGFscmVhZHkgZXhpc3RzIGluIHNlc3Npb25cIikge30pKSlcclxuIChsZXRcclxuICBbY29uZGl0aW9uc1xyXG4gICAoOmNvbmRpdGlvbnMgcnVsZSlcclxuICAgc2Vzc2lvblxyXG4gICAocmVkdWNlIGFkZC1jb25kaXRpb24gc2Vzc2lvbiBjb25kaXRpb25zKVxyXG4gICBsZWFmLW5vZGUtaWRcclxuICAgKC0+IHNlc3Npb24gOm1lbS1ub2RlLWlkcyBsYXN0KVxyXG4gICBiaW5kaW5nc1xyXG4gICAoOmJpbmRpbmdzIHNlc3Npb24pXHJcbiAgIHNlc3Npb25cclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW3Nlc3Npb24gbWVtLW5vZGUtaWRdXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBzZXNzaW9uXHJcbiAgICAgIFs6YmV0YS1ub2RlcyBtZW0tbm9kZS1pZF1cclxuICAgICAgKGZuXHJcbiAgICAgICBbbWVtLW5vZGVdXHJcbiAgICAgICAoYXNzb2NcclxuICAgICAgICBtZW0tbm9kZVxyXG4gICAgICAgIDpydWxlLW5hbWVcclxuICAgICAgICAoOm5hbWUgcnVsZSlcclxuICAgICAgICA6bGVhZi1ub2RlLWlkXHJcbiAgICAgICAgbGVhZi1ub2RlLWlkKSkpKVxyXG4gICAgc2Vzc2lvblxyXG4gICAgKDptZW0tbm9kZS1pZHMgc2Vzc2lvbikpXHJcbiAgIHNlc3Npb25cclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW3Nlc3Npb24gam9pbi1ub2RlLWlkXVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgc2Vzc2lvblxyXG4gICAgICBbOmJldGEtbm9kZXMgam9pbi1ub2RlLWlkXVxyXG4gICAgICAoZm5cclxuICAgICAgIFtqb2luLW5vZGVdXHJcbiAgICAgICAoYXNzb2NcclxuICAgICAgICBqb2luLW5vZGVcclxuICAgICAgICA6aWQta2V5XHJcbiAgICAgICAgKHNvbWVcclxuICAgICAgICAgKGZuXHJcbiAgICAgICAgICBbezprZXlzIFtmaWVsZCBrZXldfV1cclxuICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgKGFuZCAoPSA6aWQgZmllbGQpIChjb250YWlucz8gKDpqb2lucyBiaW5kaW5ncykga2V5KSlcclxuICAgICAgICAgICBrZXkpKVxyXG4gICAgICAgICAoLT4gam9pbi1ub2RlIDpjb25kaXRpb24gOmJpbmRpbmdzKSlcclxuICAgICAgICA6ZGlzYWJsZS1mYXN0LXVwZGF0ZXNcclxuICAgICAgICAoY29udGFpbnM/XHJcbiAgICAgICAgICg6am9pbnMgYmluZGluZ3MpXHJcbiAgICAgICAgIChzb21lXHJcbiAgICAgICAgICAoZm4gW3s6a2V5cyBbZmllbGQga2V5XX1dICh3aGVuICg9IDp2YWx1ZSBmaWVsZCkga2V5KSlcclxuICAgICAgICAgICgtPiBqb2luLW5vZGUgOmNvbmRpdGlvbiA6YmluZGluZ3MpKSkpKSkpXHJcbiAgICBzZXNzaW9uXHJcbiAgICAoOmpvaW4tbm9kZS1pZHMgc2Vzc2lvbikpXVxyXG4gICgtPlxyXG4gICBzZXNzaW9uXHJcbiAgIChhc3NvYy1pbiBbOmJldGEtbm9kZXMgbGVhZi1ub2RlLWlkIDpmaWx0ZXItZm5dICg6ZmlsdGVyLWZuIHJ1bGUpKVxyXG4gICAoYXNzb2MtaW4gWzpydWxlLWlkcyAoOm5hbWUgcnVsZSldIGxlYWYtbm9kZS1pZClcclxuICAgKGFzc29jLWluIFs6cnVsZS1mbnMgKDpuYW1lIHJ1bGUpXSAoOnJ1bGUtZm4gcnVsZSkpXHJcbiAgIChkaXNzb2MgOm1lbS1ub2RlLWlkcyA6am9pbi1ub2RlLWlkcyA6YmluZGluZ3MpKSkpXHJcbiJ9IHs6c3ltIC0+c2Vzc2lvbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gZW1wdHkgc2Vzc2lvbi4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiAtPnNlc3Npb25cclxuIFwiUmV0dXJucyBhbiBlbXB0eSBzZXNzaW9uLlwiXHJcbiBbXVxyXG4gKG1hcC0+U2Vzc2lvblxyXG4gIHs6YWxwaGEtbm9kZVxyXG4gICAobWFwLT5BbHBoYU5vZGVcclxuICAgIHs6cGF0aCBuaWwsXHJcbiAgICAgOnRlc3QtZmllbGQgbmlsLFxyXG4gICAgIDp0ZXN0LXZhbHVlIG5pbCxcclxuICAgICA6Y2hpbGRyZW4gW10sXHJcbiAgICAgOnN1Y2Nlc3NvcnMgW10sXHJcbiAgICAgOmZhY3RzIHt9fSksXHJcbiAgIDpiZXRhLW5vZGVzIHt9LFxyXG4gICA6bGFzdC1pZCAtMSxcclxuICAgOnJ1bGUtZm5zIHt9LFxyXG4gICA6cnVsZS1pZHMge30sXHJcbiAgIDppZC1hdHRyLW5vZGVzIHt9LFxyXG4gICA6dGhlbi1xdWV1ZSAje319KSlcclxuIn0gezpzeW0gcmVzZXQhLCA6bWV0YSB7OmRvYyAiTXV0YXRlcyB0aGUgc2Vzc2lvbiBmcm9tIGEgOnRoZW4gYmxvY2suIiwgOmFyZ2xpc3RzIChbbmV3LXNlc3Npb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNldCFcclxuIFwiTXV0YXRlcyB0aGUgc2Vzc2lvbiBmcm9tIGEgOnRoZW4gYmxvY2suXCJcclxuIFtuZXctc2Vzc2lvbl1cclxuIChpZlxyXG4gICptdXRhYmxlLXNlc3Npb24qXHJcbiAgKGlmXHJcbiAgICg9ICpzZXNzaW9uKiBAKm11dGFibGUtc2Vzc2lvbiopXHJcbiAgICh2cmVzZXQhICptdXRhYmxlLXNlc3Npb24qIG5ldy1zZXNzaW9uKVxyXG4gICAodGhyb3dcclxuICAgIChleC1pbmZvIFwiWW91IG1heSBvbmx5IGNhbGwgYHJlc2V0IWAgb25jZSBpbiBhIDp0aGVuIGJsb2NrXCIge30pKSlcclxuICAodGhyb3cgKGV4LWluZm8gXCJZb3UgbWF5IG9ubHkgY2FsbCBgcmVzZXQhYCBpbiBhIDp0aGVuIGJsb2NrXCIge30pKSkpXHJcbiJ9IHs6c3ltIHJldHJhY3QhLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBgcmV0cmFjdGAgYnV0IGNhbiBiZSB1c2VkIGluc2lkZSBvZiBhIDp0aGVuIGJsb2NrLlxuICBcbiAgVGhlIGZ1bmN0aW9uIGlzIERFUFJFQ0FURUQuIEl0IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgYnV0IHByZWZlciB0aGlzIGluc3RlYWQ6XG4gIFxuICAoby9yZXNldCEgKG8vcmV0cmFjdCBvLypzZXNzaW9uKiBpZCBhdHRyKSkiLCA6YXJnbGlzdHMgKFtpZCBhdHRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV0cmFjdCFcclxuIFwiU2FtZSBhcyBgcmV0cmFjdGAgYnV0IGNhbiBiZSB1c2VkIGluc2lkZSBvZiBhIDp0aGVuIGJsb2NrLlxcbiAgXFxuICBUaGUgZnVuY3Rpb24gaXMgREVQUkVDQVRFRC4gSXQgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBidXQgcHJlZmVyIHRoaXMgaW5zdGVhZDpcXG4gIFxcbiAgKG8vcmVzZXQhIChvL3JldHJhY3Qgby8qc2Vzc2lvbiogaWQgYXR0cikpXCJcclxuIFtpZCBhdHRyXVxyXG4gKGlmXHJcbiAgKm11dGFibGUtc2Vzc2lvbipcclxuICAodnN3YXAhICptdXRhYmxlLXNlc3Npb24qIHJldHJhY3QgaWQgYXR0cilcclxuICAodGhyb3dcclxuICAgKGV4LWluZm8gXCJUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgOnRoZW4gYmxvY2tcIiB7fSkpKSlcclxuIn0gezpzeW0gaW5zZXJ0ISwgOm1ldGEgezpkb2MgIlNhbWUgYXMgYGluc2VydGAgYnV0IGNhbiBiZSB1c2VkIGluc2lkZSBvZiBhIDp0aGVuIGJsb2NrLlxuICBcbiAgVGhlIGZ1bmN0aW9uIGlzIERFUFJFQ0FURUQuIEl0IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgYnV0IHByZWZlciB0aGlzIGluc3RlYWQ6XG4gIFxuICAoby9yZXNldCEgKG8vaW5zZXJ0IG8vKnNlc3Npb24qIGlkIGF0dHIpKSIsIDphcmdsaXN0cyBbW2lkIGF0dHItPnZhbHVlXSBbaWQgYXR0ciB2YWx1ZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc2VydCFcclxuIFwiU2FtZSBhcyBgaW5zZXJ0YCBidXQgY2FuIGJlIHVzZWQgaW5zaWRlIG9mIGEgOnRoZW4gYmxvY2suXFxuICBcXG4gIFRoZSBmdW5jdGlvbiBpcyBERVBSRUNBVEVELiBJdCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQsIGJ1dCBwcmVmZXIgdGhpcyBpbnN0ZWFkOlxcbiAgXFxuICAoby9yZXNldCEgKG8vaW5zZXJ0IG8vKnNlc3Npb24qIGlkIGF0dHIpKVwiXHJcbiAoW2lkIGF0dHItPnZhbHVlXVxyXG4gIChydW4hIChmbiBbW2F0dHIgdmFsdWVdXSAoaW5zZXJ0ISBpZCBhdHRyIHZhbHVlKSkgYXR0ci0+dmFsdWUpKVxyXG4gKFtpZCBhdHRyIHZhbHVlXVxyXG4gIChpZlxyXG4gICAqbXV0YWJsZS1zZXNzaW9uKlxyXG4gICAodnN3YXAhICptdXRhYmxlLXNlc3Npb24qIGluc2VydCBpZCBhdHRyIHZhbHVlKVxyXG4gICAodGhyb3dcclxuICAgIChleC1pbmZvIFwiVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIDp0aGVuIGJsb2NrXCIge30pKSkpKVxyXG4ifSB7OnN5bSAqc2Vzc2lvbiosIDptZXRhIHs6ZG9jICJQcm92aWRlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2Vzc2lvbiBmcm9tIGluc2lkZSBhIDp0aGVuIGJsb2NrLlxuICBOb3JtYWxseSB1c2VkIHRvIGFsbG93IHF1ZXJ5aW5nIHRoZSBzZXNzaW9uIGZyb20gaW5zaWRlIGEgcnVsZS4ifSwgOnNvdXJjZSAiKGRlZiAqc2Vzc2lvbiogbmlsKVxyXG4ifSB7OnN5bSByZXRyYWN0LCA6bWV0YSB7OmRvYyAiUmV0cmFjdHMgdGhlIGZhY3Qgd2l0aCB0aGUgZ2l2ZW4gaWQgKyBhdHRyIGNvbWJvLiIsIDphcmdsaXN0cyAoW3Nlc3Npb24gaWQgYXR0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldHJhY3RcclxuIFwiUmV0cmFjdHMgdGhlIGZhY3Qgd2l0aCB0aGUgZ2l2ZW4gaWQgKyBhdHRyIGNvbWJvLlwiXHJcbiBbc2Vzc2lvbiBpZCBhdHRyXVxyXG4gKGxldFxyXG4gIFtpZCthdHRyXHJcbiAgIFtpZCBhdHRyXVxyXG4gICBub2RlLXBhdGhzXHJcbiAgIChnZXQtaW4gc2Vzc2lvbiBbOmlkLWF0dHItbm9kZXMgaWQrYXR0cl0pXVxyXG4gICh3aGVuLW5vdFxyXG4gICBub2RlLXBhdGhzXHJcbiAgICh0aHJvdyAoZXgtaW5mbyAoc3RyIGlkK2F0dHIgXCIgbm90IGluIHNlc3Npb25cIikge30pKSlcclxuICAocmVkdWNlXHJcbiAgIChmblxyXG4gICAgW3Nlc3Npb24gbm9kZS1wYXRoXVxyXG4gICAgKGxldFxyXG4gICAgIFtub2RlXHJcbiAgICAgIChnZXQtaW4gc2Vzc2lvbiBub2RlLXBhdGgpXHJcbiAgICAgIGZhY3RcclxuICAgICAgKGdldC1pbiBub2RlIFs6ZmFjdHMgaWQgYXR0cl0pXVxyXG4gICAgIChyaWdodC1hY3RpdmF0ZS1hbHBoYS1ub2RlXHJcbiAgICAgIHNlc3Npb25cclxuICAgICAgbm9kZS1wYXRoXHJcbiAgICAgICgtPlRva2VuIGZhY3QgOnJldHJhY3QgbmlsKSkpKVxyXG4gICBzZXNzaW9uXHJcbiAgIG5vZGUtcGF0aHMpKSlcclxuIn0gezpzeW0gcXVlcnktYWxsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHZlY3RvciBvZiBtYXBzIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGVzIGZvciB0aGUgZ2l2ZW4gcnVsZS4iLCA6YXJnbGlzdHMgKFtzZXNzaW9uIHJ1bGUtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1ZXJ5LWFsbFxyXG4gXCJSZXR1cm5zIGEgdmVjdG9yIG9mIG1hcHMgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoZXMgZm9yIHRoZSBnaXZlbiBydWxlLlwiXHJcbiBbc2Vzc2lvbiBydWxlLW5hbWVdXHJcbiAobGV0XHJcbiAgW3J1bGUtaWRcclxuICAgKG9yXHJcbiAgICAoZ2V0LWluIHNlc3Npb24gWzpydWxlLWlkcyBydWxlLW5hbWVdKVxyXG4gICAgKHRocm93IChleC1pbmZvIChzdHIgcnVsZS1uYW1lIFwiIG5vdCBpbiBzZXNzaW9uXCIpIHt9KSkpXHJcbiAgIHJ1bGVcclxuICAgKGdldC1pbiBzZXNzaW9uIFs6YmV0YS1ub2RlcyBydWxlLWlkXSldXHJcbiAgKHJlZHVjZS1rdlxyXG4gICAoZm4gW3YgXyB7OmtleXMgW3ZhcnMgZW5hYmxlZF19XSAoaWYgZW5hYmxlZCAoY29uaiB2IHZhcnMpIHYpKVxyXG4gICBbXVxyXG4gICAoOm1hdGNoZXMgcnVsZSkpKSlcclxuIn0gezpzeW0gcGFyc2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBjb250ZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2VcclxuIFtzcGVjIGNvbnRlbnRdXHJcbiAobGV0XHJcbiAgW3JlcyAocy9jb25mb3JtIHNwZWMgY29udGVudCldXHJcbiAgKGlmXHJcbiAgICg9IDpjbG9qdXJlLnNwZWMuYWxwaGEvaW52YWxpZCByZXMpXHJcbiAgICh0aHJvdyAoZXgtaW5mbyAoZXhwb3VuZC9leHBvdW5kLXN0ciBzcGVjIGNvbnRlbnQpIHt9KSlcclxuICAgcmVzKSkpXHJcbiJ9KSwgY3Jvc3MtcGFyaW5mZXIuY29yZSAoezpzeW0gcGFyZW4tbW9kZSwgOm1ldGEgezpkb2MgIlJ1bnMgcGFyZW4gbW9kZSBvbiB0aGUgZ2l2ZW4gdGV4dC4iLCA6YXJnbGlzdHMgKFt0ZXh0IHggbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcmVuLW1vZGVcclxuIFwiUnVucyBwYXJlbiBtb2RlIG9uIHRoZSBnaXZlbiB0ZXh0LlwiXHJcbiBbdGV4dCB4IGxpbmVdXHJcbiAjPyg6Y2xqIChsZXQgW3JlcyAodHJ5IChQYXJpbmZlci9wYXJlbk1vZGUgdGV4dCAoaW50IHgpIChpbnQgbGluZSkgbmlsIGZhbHNlKSAoY2F0Y2ggRXhjZXB0aW9uIF8gKFBhcmluZmVyL3BhcmVuTW9kZSB0ZXh0IChpbnQgMCkgKGludCAwKSBuaWwgZmFsc2UpKSldIHs6eCAoLi1jdXJzb3JYIHJlcyksIDp0ZXh0ICguLXRleHQgcmVzKX0pIDpjbGpzIChsZXQgW3JlcyAoLnBhcmVuTW9kZSBqcy9wYXJpbmZlciB0ZXh0ICNqcyB7OmN1cnNvckxpbmUgbGluZSwgOmN1cnNvclggeH0pXSB7OnggKGFnZXQgcmVzIFwiY3Vyc29yWFwiKSwgOnRleHQgKGFnZXQgcmVzIFwidGV4dFwiKX0pKSlcclxuIn0gezpzeW0gYWRkLWluZGVudCwgOm1ldGEgezpkb2MgIkFkZHMgaW5kZW50IHRvIHRoZSBzdGF0ZS4iLCA6YXJnbGlzdHMgKFtzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1pbmRlbnRcclxuIFwiQWRkcyBpbmRlbnQgdG8gdGhlIHN0YXRlLlwiXHJcbiBbc3RhdGVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbdGV4dCBjdXJzb3ItcG9zaXRpb24gaW5kZW50LXR5cGVdfVxyXG4gICBzdGF0ZVxyXG4gICBbc3RhcnQtcG9zIGVuZC1wb3NdXHJcbiAgIGN1cnNvci1wb3NpdGlvblxyXG4gICBbc3RhcnQtbGluZSBzdGFydC14XVxyXG4gICAocG9zaXRpb24tPnJvdy1jb2wgdGV4dCBzdGFydC1wb3MpXHJcbiAgIFtlbmQtbGluZSBfXVxyXG4gICAocG9zaXRpb24tPnJvdy1jb2wgdGV4dCBlbmQtcG9zKVxyXG4gICBsaW5lc1xyXG4gICAoc3BsaXQtbGluZXMgdGV4dClcclxuICAgdGFnc1xyXG4gICAodHMvY29kZS0+dGFncyB0ZXh0KVxyXG4gICBuZXctaW5kZW50LWxldmVsXHJcbiAgIChjYXNlXHJcbiAgICBpbmRlbnQtdHlwZVxyXG4gICAgOnJldHVyblxyXG4gICAgKHRzL2luZGVudC1mb3ItbGluZSB0YWdzIChpbmMgc3RhcnQtbGluZSkpXHJcbiAgICA6YmFja1xyXG4gICAgKHRzL2JhY2staW5kZW50LWZvci1saW5lXHJcbiAgICAgdGFnc1xyXG4gICAgIChpbmMgc3RhcnQtbGluZSlcclxuICAgICAoaW5kZW50LWNvdW50IChnZXQgbGluZXMgc3RhcnQtbGluZSkpKVxyXG4gICAgOmZvcndhcmRcclxuICAgICh0cy9mb3J3YXJkLWluZGVudC1mb3ItbGluZVxyXG4gICAgIHRhZ3NcclxuICAgICAoaW5jIHN0YXJ0LWxpbmUpXHJcbiAgICAgKGluZGVudC1jb3VudCAoZ2V0IGxpbmVzIHN0YXJ0LWxpbmUpKSlcclxuICAgIDpub3JtYWxcclxuICAgIHN0YXJ0LXgpXHJcbiAgIGxpbmVzXHJcbiAgIChpZlxyXG4gICAgKD0gaW5kZW50LXR5cGUgOm5vcm1hbClcclxuICAgIChsb29wXHJcbiAgICAgW2xpbmVzIGxpbmVzIHRhZ3MgdGFncyBsaW5lLW51bSAoaW5jIHN0YXJ0LWxpbmUpXVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW2xpbmUgKGdldCBsaW5lcyBsaW5lLW51bSldXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtpbmRlbnRcclxuICAgICAgICAodHMvaW5kZW50LWZvci1saW5lIHRhZ3MgKGluYyBsaW5lLW51bSkpXHJcbiAgICAgICAgY3VycmVudC1pbmRlbnRcclxuICAgICAgICAoaW5kZW50LWNvdW50IGxpbmUpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGFuZCAoPiBpbmRlbnQgMCkgKD4gaW5kZW50IHN0YXJ0LXgpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2xpbmVzXHJcbiAgICAgICAgICAodXBkYXRlLWluZGVudCAoLSBpbmRlbnQgY3VycmVudC1pbmRlbnQpIGxpbmVzIGxpbmUtbnVtKVxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgKHN0ci9qb2luIFxcbmV3bGluZSBsaW5lcylcclxuICAgICAgICAgIHRhZ3NcclxuICAgICAgICAgICh0cy9jb2RlLT50YWdzIHRleHQpXVxyXG4gICAgICAgICAocmVjdXIgbGluZXMgdGFncyAoaW5jIGxpbmUtbnVtKSkpXHJcbiAgICAgICAgbGluZXMpKVxyXG4gICAgICBsaW5lcykpXHJcbiAgICAobGV0XHJcbiAgICAgW29sZC1pbmRlbnQtbGV2ZWxcclxuICAgICAgKGluZGVudC1jb3VudCAoZ2V0IGxpbmVzIHN0YXJ0LWxpbmUpKVxyXG4gICAgICBkaWZmXHJcbiAgICAgICgtIG5ldy1pbmRlbnQtbGV2ZWwgb2xkLWluZGVudC1sZXZlbClcclxuICAgICAgZGlmZlxyXG4gICAgICAoaWZcclxuICAgICAgIChuZWc/IGRpZmYpXHJcbiAgICAgICAoLT4+XHJcbiAgICAgICAgKHNlcSAoZ2V0IGxpbmVzIHN0YXJ0LWxpbmUpKVxyXG4gICAgICAgIChzcGxpdC13aXRoIChmbiogW3AxX180ODk5MCNdICg9IHAxX180ODk5MCMgXFxzcGFjZSkpKVxyXG4gICAgICAgIGZpcnN0XHJcbiAgICAgICAgKHRha2UgKCogLTEgZGlmZikpXHJcbiAgICAgICAgY291bnRcclxuICAgICAgICAoKiAtMSkpXHJcbiAgICAgICBkaWZmKV1cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChwYXJ0aWFsIHVwZGF0ZS1pbmRlbnQgZGlmZilcclxuICAgICAgbGluZXNcclxuICAgICAgKHJhbmdlIHN0YXJ0LWxpbmUgKGluYyBlbmQtbGluZSkpKSkpXHJcbiAgIHRleHRcclxuICAgKHN0ci9qb2luIFxcbmV3bGluZSBsaW5lcylcclxuICAgdGV4dFxyXG4gICAoOnRleHQgKGluZGVudC1tb2RlIHRleHQgbmV3LWluZGVudC1sZXZlbCBzdGFydC1saW5lIHRydWUpKVxyXG4gICBsaW5lc1xyXG4gICAoc3BsaXQtbGluZXMgdGV4dCldXHJcbiAgezpjdXJzb3ItcG9zaXRpb25cclxuICAgKGlmXHJcbiAgICAoPSBzdGFydC1wb3MgZW5kLXBvcylcclxuICAgIChsZXRcclxuICAgICBbcG9zIChyb3ctY29sLT5wb3NpdGlvbiB0ZXh0IHN0YXJ0LWxpbmUgbmV3LWluZGVudC1sZXZlbCldXHJcbiAgICAgW3BvcyBwb3NdKVxyXG4gICAgWyhyb3ctY29sLT5wb3NpdGlvbiB0ZXh0IHN0YXJ0LWxpbmUgMClcclxuICAgICAocm93LWNvbC0+cG9zaXRpb24gdGV4dCBlbmQtbGluZSAoY291bnQgKGdldCBsaW5lcyBlbmQtbGluZSkpKV0pLFxyXG4gICA6dGV4dCB0ZXh0fSkpXHJcbiJ9IHs6c3ltIGluZGVudC1jb3VudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZW50LWNvdW50XHJcbiBbbGluZV1cclxuICgtPj5cclxuICBsaW5lXHJcbiAgc2VxXHJcbiAgKHRha2Utd2hpbGUgKGZuKiBbcDFfXzQ4OTg4I10gKD0gcDFfXzQ4OTg4IyBcXHNwYWNlKSkpXHJcbiAgY291bnQpKVxyXG4ifSB7OnN5bSByb3ctY29sLT5wb3NpdGlvbiwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIGEgcm93IGFuZCBjb2x1bW4gbnVtYmVyIHRvIGEgcG9zaXRpb24uIiwgOmFyZ2xpc3RzIChbdGV4dCByb3cgY29sXSl9LCA6c291cmNlICIoZGVmblxyXG4gcm93LWNvbC0+cG9zaXRpb25cclxuIFwiQ29udmVydHMgYSByb3cgYW5kIGNvbHVtbiBudW1iZXIgdG8gYSBwb3NpdGlvbi5cIlxyXG4gW3RleHQgcm93IGNvbF1cclxuIChsZXRcclxuICBbYWxsLWxpbmVzXHJcbiAgICh2ZWMgKHNwbGl0LWxpbmVzIHRleHQpKVxyXG4gICBsaW5lc1xyXG4gICAodmVjICh0YWtlIHJvdyBhbGwtbGluZXMpKVxyXG4gICBsYXN0LWxpbmVcclxuICAgKGdldCBhbGwtbGluZXMgcm93KVxyXG4gICBsaW5lc1xyXG4gICAoaWZcclxuICAgIChhbmQgbGFzdC1saW5lICg+PSAoY291bnQgbGFzdC1saW5lKSBjb2wpKVxyXG4gICAgKGNvbmogbGluZXMgKHN1YnMgbGFzdC1saW5lIDAgY29sKSlcclxuICAgIGxpbmVzKVxyXG4gICB0ZXh0XHJcbiAgIChzdHIvam9pbiBcIlxcblwiIGxpbmVzKV1cclxuICAoY291bnQgdGV4dCkpKVxyXG4ifSB7OnN5bSBwb3NpdGlvbi0+cm93LWNvbCwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIGEgcG9zaXRpb24gdG8gYSByb3cgYW5kIGNvbHVtbiBudW1iZXIuIiwgOmFyZ2xpc3RzIChbdGV4dCBwb3NpdGlvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvc2l0aW9uLT5yb3ctY29sXHJcbiBcIkNvbnZlcnRzIGEgcG9zaXRpb24gdG8gYSByb3cgYW5kIGNvbHVtbiBudW1iZXIuXCJcclxuIFt0ZXh0IHBvc2l0aW9uXVxyXG4gKGxldFxyXG4gIFt0ZXh0XHJcbiAgIChzdWJzIHRleHQgMCBwb3NpdGlvbilcclxuICAgbGFzdC1uZXdsaW5lXHJcbiAgICgubGFzdEluZGV4T2YgdGV4dCBcIlxcblwiKVxyXG4gICByb3dcclxuICAgKGNvdW50IChyZS1zZXEgI1wiXFxuXCIgdGV4dCkpXHJcbiAgIGNvbFxyXG4gICAoaWYgKD49IGxhc3QtbmV3bGluZSAwKSAoLSBwb3NpdGlvbiBsYXN0LW5ld2xpbmUgMSkgcG9zaXRpb24pXVxyXG4gIFtyb3cgY29sXSkpXHJcbiJ9IHs6c3ltIHNwbGl0LWxpbmVzLCA6bWV0YSB7OmRvYyAiU3BsaXRzIHRoZSBzdHJpbmcgaW50byBsaW5lcy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXQtbGluZXNcclxuIFwiU3BsaXRzIHRoZSBzdHJpbmcgaW50byBsaW5lcy5cIlxyXG4gW3NdXHJcbiAodmVjICguc3BsaXQgcyBcIlxcblwiIC0xKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1pbmRlbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZGlmZiBsaW5lcyBsaW5lLW51bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1pbmRlbnRcclxuIFtkaWZmIGxpbmVzIGxpbmUtbnVtXVxyXG4gKHVwZGF0ZVxyXG4gIGxpbmVzXHJcbiAgbGluZS1udW1cclxuICAoZm5cclxuICAgW2xpbmVdXHJcbiAgIChsZXRcclxuICAgIFtbc3BhY2VzIGNvZGVdXHJcbiAgICAgKHNwbGl0LXdpdGggKGZuKiBbcDFfXzQ4OTg5I10gKD0gcDFfXzQ4OTg5IyBcXHNwYWNlKSkgKHNlcSBsaW5lKSlcclxuICAgICBzcGFjZXNcclxuICAgICAoaWZcclxuICAgICAgKHBvcz8gZGlmZilcclxuICAgICAgKGNvbmNhdCBzcGFjZXMgKHJlcGVhdCBkaWZmIFxcc3BhY2UpKVxyXG4gICAgICAoZHJvcCAoKiAtMSBkaWZmKSBzcGFjZXMpKV1cclxuICAgIChzdHIgKHN0ci9qb2luIHNwYWNlcykgKHN0ci9qb2luIGNvZGUpKSkpKSlcclxuIn0gezpzeW0gbW9kZSwgOm1ldGEgezpkb2MgIlJ1bnMgdGhlIHNwZWNpZmllZCBtb2RlLCB3aGljaCBjYW4gYmUgOnBhcmVuLCA6aW5kZW50LCBvciA6Ym90aC4iLCA6YXJnbGlzdHMgKFttb2RlLXR5cGUgdGV4dCB4IGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtb2RlXHJcbiBcIlJ1bnMgdGhlIHNwZWNpZmllZCBtb2RlLCB3aGljaCBjYW4gYmUgOnBhcmVuLCA6aW5kZW50LCBvciA6Ym90aC5cIlxyXG4gW21vZGUtdHlwZSB0ZXh0IHggbGluZV1cclxuIChjYXNlXHJcbiAgbW9kZS10eXBlXHJcbiAgOnBhcmVuXHJcbiAgKHBhcmVuLW1vZGUgdGV4dCB4IGxpbmUpXHJcbiAgOmluZGVudFxyXG4gIChpbmRlbnQtbW9kZSB0ZXh0IHggbGluZSlcclxuICA6Ym90aFxyXG4gICgtPiB0ZXh0IChwYXJlbi1tb2RlIHggbGluZSkgOnRleHQgKGluZGVudC1tb2RlIHggbGluZSkpKSlcclxuIn0gezpzeW0gaW5kZW50LW1vZGUsIDptZXRhIHs6ZG9jICJSdW5zIGluZGVudCBtb2RlIG9uIHRoZSBnaXZlbiB0ZXh0LiIsIDphcmdsaXN0cyBbW3RleHQgeCBsaW5lXSBbdGV4dCB4IGxpbmUgcHJldmlldy1jdXJzb3Itc2NvcGU/XV19LCA6c291cmNlICIoZGVmblxyXG4gaW5kZW50LW1vZGVcclxuIFwiUnVucyBpbmRlbnQgbW9kZSBvbiB0aGUgZ2l2ZW4gdGV4dC5cIlxyXG4gKFt0ZXh0IHggbGluZV0gKGluZGVudC1tb2RlIHRleHQgeCBsaW5lIGZhbHNlKSlcclxuIChbdGV4dCB4IGxpbmUgcHJldmlldy1jdXJzb3Itc2NvcGU/XVxyXG4gICM/KDpjbGogKGxldCBbcmVzICh0cnkgKFBhcmluZmVyL2luZGVudE1vZGUgdGV4dCAoaW50IHgpIChpbnQgbGluZSkgbmlsIHByZXZpZXctY3Vyc29yLXNjb3BlPykgKGNhdGNoIEV4Y2VwdGlvbiBfIChQYXJpbmZlci9pbmRlbnRNb2RlIHRleHQgKGludCAwKSAoaW50IDApIG5pbCBwcmV2aWV3LWN1cnNvci1zY29wZT8pKSldIHs6eCAoLi1jdXJzb3JYIHJlcyksIDp0ZXh0ICguLXRleHQgcmVzKX0pIDpjbGpzIChsZXQgW3JlcyAoLmluZGVudE1vZGUganMvcGFyaW5mZXIgdGV4dCAjanMgezpjdXJzb3JMaW5lIGxpbmUsIDpjdXJzb3JYIHgsIDpwcmV2aWV3Q3Vyc29yU2NvcGUgcHJldmlldy1jdXJzb3Itc2NvcGU/fSldIHs6eCAoYWdldCByZXMgXCJjdXJzb3JYXCIpLCA6dGV4dCAoYWdldCByZXMgXCJ0ZXh0XCIpfSkpKSlcclxuIn0gezpzeW0gYWRkLXBhcmluZmVyLCA6bWV0YSB7OmRvYyAiQWRkcyBwYXJpbmZlciB0byB0aGUgc3RhdGUuIiwgOmFyZ2xpc3RzIChbbW9kZS10eXBlIHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXBhcmluZmVyXHJcbiBcIkFkZHMgcGFyaW5mZXIgdG8gdGhlIHN0YXRlLlwiXHJcbiBbbW9kZS10eXBlIHN0YXRlXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnNvci1wb3NpdGlvbiB0ZXh0XX1cclxuICAgc3RhdGVcclxuICAgW3N0YXJ0LXBvcyBlbmQtcG9zXVxyXG4gICBjdXJzb3ItcG9zaXRpb25cclxuICAgW3JvdyBjb2xdXHJcbiAgIChwb3NpdGlvbi0+cm93LWNvbCB0ZXh0IHN0YXJ0LXBvcylcclxuICAgcmVzdWx0XHJcbiAgIChtb2RlIG1vZGUtdHlwZSB0ZXh0IGNvbCByb3cpXVxyXG4gIChpZlxyXG4gICAobm90PSBzdGFydC1wb3MgZW5kLXBvcylcclxuICAgKGFzc29jIHN0YXRlIDp0ZXh0ICg6dGV4dCByZXN1bHQpKVxyXG4gICAobGV0XHJcbiAgICBbcG9zIChyb3ctY29sLT5wb3NpdGlvbiAoOnRleHQgcmVzdWx0KSByb3cgKDp4IHJlc3VsdCkpXVxyXG4gICAgKGFzc29jIHN0YXRlIDp0ZXh0ICg6dGV4dCByZXN1bHQpIDpjdXJzb3ItcG9zaXRpb24gW3BvcyBwb3NdKSkpKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC5pb2MtaGVscGVycyAoezpzeW0gRVhDRVBUSU9OLUZSQU1FUywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgRVhDRVBUSU9OLUZSQU1FUyA0KVxyXG4ifSB7OnN5bSBwcm9jZXNzLWV4Y2VwdGlvbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb2Nlc3MtZXhjZXB0aW9uXHJcbiBbc3RhdGVdXHJcbiAobGV0XHJcbiAgW2V4Y2VwdGlvbi1mcmFtZVxyXG4gICAoYWdldC1vYmplY3Qgc3RhdGUgRVhDRVBUSU9OLUZSQU1FUylcclxuICAgY2F0Y2gtYmxvY2tcclxuICAgKDpjYXRjaC1ibG9jayBleGNlcHRpb24tZnJhbWUpXHJcbiAgIGNhdGNoLWV4Y2VwdGlvblxyXG4gICAoOmNhdGNoLWV4Y2VwdGlvbiBleGNlcHRpb24tZnJhbWUpXHJcbiAgIGV4Y2VwdGlvblxyXG4gICAoYWdldC1vYmplY3Qgc3RhdGUgQ1VSUkVOVC1FWENFUFRJT04pXVxyXG4gIChjb25kXHJcbiAgIChhbmQgZXhjZXB0aW9uIChub3QgZXhjZXB0aW9uLWZyYW1lKSlcclxuICAgKHRocm93IGV4Y2VwdGlvbilcclxuICAgKGFuZFxyXG4gICAgZXhjZXB0aW9uXHJcbiAgICBjYXRjaC1ibG9ja1xyXG4gICAgKG9yXHJcbiAgICAgKD0gOmRlZmF1bHQgY2F0Y2gtZXhjZXB0aW9uKVxyXG4gICAgIChpbnN0YW5jZT8gY2F0Y2gtZXhjZXB0aW9uIGV4Y2VwdGlvbikpKVxyXG4gICAoaW9jL2FzZXQtYWxsIVxyXG4gICAgc3RhdGVcclxuICAgIFNUQVRFLUlEWFxyXG4gICAgY2F0Y2gtYmxvY2tcclxuICAgIFZBTFVFLUlEWFxyXG4gICAgZXhjZXB0aW9uXHJcbiAgICBDVVJSRU5ULUVYQ0VQVElPTlxyXG4gICAgbmlsXHJcbiAgICBFWENFUFRJT04tRlJBTUVTXHJcbiAgICAoYXNzb2MgZXhjZXB0aW9uLWZyYW1lIDpjYXRjaC1ibG9jayBuaWwgOmNhdGNoLWV4Y2VwdGlvbiBuaWwpKVxyXG4gICAoYW5kXHJcbiAgICBleGNlcHRpb25cclxuICAgIChub3QgY2F0Y2gtYmxvY2spXHJcbiAgICAobm90ICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpKSlcclxuICAgKGRvXHJcbiAgICAoaW9jL2FzZXQtYWxsISBzdGF0ZSBFWENFUFRJT04tRlJBTUVTICg6cHJldiBleGNlcHRpb24tZnJhbWUpKVxyXG4gICAgKHJlY3VyIHN0YXRlKSlcclxuICAgKGFuZCBleGNlcHRpb24gKG5vdCBjYXRjaC1ibG9jaykgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSkpXHJcbiAgIChpb2MvYXNldC1hbGwhXHJcbiAgICBzdGF0ZVxyXG4gICAgU1RBVEUtSURYXHJcbiAgICAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKVxyXG4gICAgRVhDRVBUSU9OLUZSQU1FU1xyXG4gICAgKGFzc29jIGV4Y2VwdGlvbi1mcmFtZSA6ZmluYWxseS1ibG9jayBuaWwpKVxyXG4gICAoYW5kIChub3QgZXhjZXB0aW9uKSAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKSlcclxuICAgKGRvXHJcbiAgICAoaW9jL2FzZXQtYWxsIVxyXG4gICAgIHN0YXRlXHJcbiAgICAgU1RBVEUtSURYXHJcbiAgICAgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSlcclxuICAgICBFWENFUFRJT04tRlJBTUVTXHJcbiAgICAgKGFzc29jIGV4Y2VwdGlvbi1mcmFtZSA6ZmluYWxseS1ibG9jayBuaWwpKSlcclxuICAgKGFuZCAobm90IGV4Y2VwdGlvbikgKG5vdCAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKSkpXHJcbiAgIChkb1xyXG4gICAgKGlvYy9hc2V0LWFsbCFcclxuICAgICBzdGF0ZVxyXG4gICAgIFNUQVRFLUlEWFxyXG4gICAgICg6Y29udGludWUtYmxvY2sgZXhjZXB0aW9uLWZyYW1lKVxyXG4gICAgIEVYQ0VQVElPTi1GUkFNRVNcclxuICAgICAoOnByZXYgZXhjZXB0aW9uLWZyYW1lKSkpXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIFwiTm8gbWF0Y2hpbmcgY2xhdXNlXCIpKSkpKVxyXG4ifSB7OnN5bSBTVEFURS1JRFgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFNUQVRFLUlEWCAxKVxyXG4ifSB7OnN5bSBhc2V0LW9iamVjdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthcnIgaWR4IG9dKX0sIDpzb3VyY2UgIihkZWZuIGFzZXQtb2JqZWN0IFthcnIgaWR4IG9dIChhZ2V0IGFyciBpZHggbykpXHJcbiJ9IHs6c3ltIGFkZC1leGNlcHRpb24tZnJhbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgY2F0Y2gtYmxvY2sgY2F0Y2gtZXhjZXB0aW9uIGZpbmFsbHktYmxvY2sgY29udGludWUtYmxvY2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtZXhjZXB0aW9uLWZyYW1lXHJcbiBbc3RhdGUgY2F0Y2gtYmxvY2sgY2F0Y2gtZXhjZXB0aW9uIGZpbmFsbHktYmxvY2sgY29udGludWUtYmxvY2tdXHJcbiAoaW9jL2FzZXQtYWxsIVxyXG4gIHN0YXRlXHJcbiAgRVhDRVBUSU9OLUZSQU1FU1xyXG4gICgtPkV4Y2VwdGlvbkZyYW1lXHJcbiAgIGNhdGNoLWJsb2NrXHJcbiAgIGNhdGNoLWV4Y2VwdGlvblxyXG4gICBmaW5hbGx5LWJsb2NrXHJcbiAgIGNvbnRpbnVlLWJsb2NrXHJcbiAgIChhZ2V0LW9iamVjdCBzdGF0ZSBFWENFUFRJT04tRlJBTUVTKSkpKVxyXG4ifSB7OnN5bSBydW4tc3RhdGUtbWFjaGluZS13cmFwcGVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcnVuLXN0YXRlLW1hY2hpbmUtd3JhcHBlZFxyXG4gW3N0YXRlXVxyXG4gKHRyeVxyXG4gIChydW4tc3RhdGUtbWFjaGluZSBzdGF0ZSlcclxuICAoY2F0Y2hcclxuICAganMvT2JqZWN0XHJcbiAgIGV4XHJcbiAgIChpbXBsL2Nsb3NlISAoYWdldC1vYmplY3Qgc3RhdGUgVVNFUi1TVEFSVC1JRFgpKVxyXG4gICAodGhyb3cgZXgpKSkpXHJcbiJ9IHs6c3ltIEZOLUlEWCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgRk4tSURYIDApXHJcbiJ9IHs6c3ltIGFnZXQtb2JqZWN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FyciBpZHhdKX0sIDpzb3VyY2UgIihkZWZuIGFnZXQtb2JqZWN0IFthcnIgaWR4XSAoYWdldCBhcnIgaWR4KSlcclxuIn0gezpzeW0gcmV0dXJuLWNoYW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXR1cm4tY2hhblxyXG4gW3N0YXRlIHZhbHVlXVxyXG4gKGxldFxyXG4gIFtjIChhZ2V0IHN0YXRlIFVTRVItU1RBUlQtSURYKV1cclxuICAod2hlbi1ub3QgKG5pbD8gdmFsdWUpIChpbXBsL3B1dCEgYyB2YWx1ZSAoZm4taGFuZGxlciAoZm4gW10gbmlsKSkpKVxyXG4gIChpbXBsL2Nsb3NlISBjKVxyXG4gIGMpKVxyXG4ifSB7OnN5bSBCSU5ESU5HUy1JRFgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEJJTkRJTkdTLUlEWCAzKVxyXG4ifSB7OnN5bSBDVVJSRU5ULUVYQ0VQVElPTiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgQ1VSUkVOVC1FWENFUFRJT04gNSlcclxuIn0gezpzeW0gcnVuLXN0YXRlLW1hY2hpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuIHJ1bi1zdGF0ZS1tYWNoaW5lIFtzdGF0ZV0gKChhZ2V0LW9iamVjdCBzdGF0ZSBGTi1JRFgpIHN0YXRlKSlcclxuIn0gezpzeW0gZmluaXNoZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHRoZSBtYWNoaW5lIGlzIGluIGEgZmluaXNoZWQgc3RhdGUiLCA6YXJnbGlzdHMgKFtzdGF0ZS1hcnJheV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmlzaGVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgdGhlIG1hY2hpbmUgaXMgaW4gYSBmaW5pc2hlZCBzdGF0ZVwiXHJcbiBbc3RhdGUtYXJyYXldXHJcbiAoa2V5d29yZC1pZGVudGljYWw/IChhZ2V0IHN0YXRlLWFycmF5IFNUQVRFLUlEWCkgOmZpbmlzaGVkKSlcclxuIn0gezpzeW0gVVNFUi1TVEFSVC1JRFgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFVTRVItU1RBUlQtSURYIDYpXHJcbiJ9IHs6c3ltIHB1dCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgYmxrIGMgdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHV0IVxyXG4gW3N0YXRlIGJsayBjIHZhbF1cclxuIChpZi1sZXRcclxuICBbY2JcclxuICAgKGltcGwvcHV0IVxyXG4gICAgY1xyXG4gICAgdmFsXHJcbiAgICAoZm4taGFuZGxlclxyXG4gICAgIChmblxyXG4gICAgICBbcmV0LXZhbF1cclxuICAgICAgKGlvYy9hc2V0LWFsbCEgc3RhdGUgVkFMVUUtSURYIHJldC12YWwgU1RBVEUtSURYIGJsaylcclxuICAgICAgKHJ1bi1zdGF0ZS1tYWNoaW5lLXdyYXBwZWQgc3RhdGUpKSkpXVxyXG4gIChkbyAoaW9jL2FzZXQtYWxsISBzdGF0ZSBWQUxVRS1JRFggQGNiIFNUQVRFLUlEWCBibGspIDpyZWN1cilcclxuICBuaWwpKVxyXG4ifSB7OnN5bSB0YWtlISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBibGsgY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2UhXHJcbiBbc3RhdGUgYmxrIGNdXHJcbiAoaWYtbGV0XHJcbiAgW2NiXHJcbiAgIChpbXBsL3Rha2UhXHJcbiAgICBjXHJcbiAgICAoZm4taGFuZGxlclxyXG4gICAgIChmblxyXG4gICAgICBbeF1cclxuICAgICAgKGlvYy9hc2V0LWFsbCEgc3RhdGUgVkFMVUUtSURYIHggU1RBVEUtSURYIGJsaylcclxuICAgICAgKHJ1bi1zdGF0ZS1tYWNoaW5lLXdyYXBwZWQgc3RhdGUpKSkpXVxyXG4gIChkbyAoaW9jL2FzZXQtYWxsISBzdGF0ZSBWQUxVRS1JRFggQGNiIFNUQVRFLUlEWCBibGspIDpyZWN1cilcclxuICBuaWwpKVxyXG4ifSB7OnN5bSBWQUxVRS1JRFgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFZBTFVFLUlEWCAyKVxyXG4ifSksIGR5bmFkb2MuYWxpYXNlcyAoezpzeW0gY2hhbiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgY2hhbiBhc3luYy9wcm9taXNlLWNoYW4pXHJcbiJ9IHs6c3ltIHB1dCEsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHB1dCEgYXN5bmMvcHV0ISlcclxuIn0gezpzeW0gPCEhLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiA8ISEgIz8oOmNsaiBhc3luYy88ISEgOmNsanMgaWRlbnRpdHkpKVxyXG4ifSksIGNsb2p1cmUuc3RyaW5nICh7OnN5bSBlbmRzLXdpdGg/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBzIGVuZHMgd2l0aCBzdWJzdHIuIiwgOmFyZ2xpc3RzIChbcyBzdWJzdHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbmRzLXdpdGg/XHJcbiBcIlRydWUgaWYgcyBlbmRzIHdpdGggc3Vic3RyLlwiXHJcbiBbcyBzdWJzdHJdXHJcbiAoZ3N0cmluZy9lbmRzV2l0aCBzIHN1YnN0cikpXHJcbiJ9IHs6c3ltIGNhcGl0YWxpemUsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyB0byB1cHBlci1jYXNlLCBhbGwgb3RoZXJcbiAgY2hhcmFjdGVycyB0byBsb3dlci1jYXNlLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYXBpdGFsaXplXHJcbiBcIkNvbnZlcnRzIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIHRvIHVwcGVyLWNhc2UsIGFsbCBvdGhlclxcbiAgY2hhcmFjdGVycyB0byBsb3dlci1jYXNlLlwiXHJcbiBbc11cclxuIChnc3RyaW5nL2NhcGl0YWxpemUgcykpXHJcbiJ9IHs6c3ltIHJldmVyc2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHMgd2l0aCBpdHMgY2hhcmFjdGVycyByZXZlcnNlZC4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV2ZXJzZVxyXG4gXCJSZXR1cm5zIHMgd2l0aCBpdHMgY2hhcmFjdGVycyByZXZlcnNlZC5cIlxyXG4gW3NdXHJcbiAoLT5cclxuICAoLnJlcGxhY2UgcyByZS1zdXJyb2dhdGUtcGFpciBcIiQyJDFcIilcclxuICAoLi4gKHNwbGl0IFwiXCIpIChyZXZlcnNlKSAoam9pbiBcIlwiKSkpKVxyXG4ifSB7OnN5bSBqb2luLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHN0cmluZyBvZiBhbGwgZWxlbWVudHMgaW4gY29sbCwgYXMgcmV0dXJuZWQgYnkgKHNlcSBjb2xsKSxcbiAgc2VwYXJhdGVkIGJ5IGFuIG9wdGlvbmFsIHNlcGFyYXRvci4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbc2VwYXJhdG9yIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqb2luXHJcbiBcIlJldHVybnMgYSBzdHJpbmcgb2YgYWxsIGVsZW1lbnRzIGluIGNvbGwsIGFzIHJldHVybmVkIGJ5IChzZXEgY29sbCksXFxuICBzZXBhcmF0ZWQgYnkgYW4gb3B0aW9uYWwgc2VwYXJhdG9yLlwiXHJcbiAoW2NvbGxdXHJcbiAgKGxvb3BcclxuICAgW3NiIChTdHJpbmdCdWZmZXIuKSBjb2xsIChzZXEgY29sbCldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IGNvbGwpXHJcbiAgICAocmVjdXIgKC4gc2IgKGFwcGVuZCAoc3RyIChmaXJzdCBjb2xsKSkpKSAobmV4dCBjb2xsKSlcclxuICAgICgudG9TdHJpbmcgc2IpKSkpXHJcbiAoW3NlcGFyYXRvciBjb2xsXVxyXG4gIChsb29wXHJcbiAgIFtzYiAoU3RyaW5nQnVmZmVyLikgY29sbCAoc2VxIGNvbGwpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBjb2xsKVxyXG4gICAgKGRvXHJcbiAgICAgKC4gc2IgKGFwcGVuZCAoc3RyIChmaXJzdCBjb2xsKSkpKVxyXG4gICAgIChsZXRcclxuICAgICAgW2NvbGwgKG5leHQgY29sbCldXHJcbiAgICAgICh3aGVuLW5vdCAobmlsPyBjb2xsKSAoLiBzYiAoYXBwZW5kIHNlcGFyYXRvcikpKVxyXG4gICAgICAocmVjdXIgc2IgY29sbCkpKVxyXG4gICAgKC50b1N0cmluZyBzYikpKSkpXHJcbiJ9IHs6c3ltIHJlcGxhY2UtZmlyc3QsIDptZXRhIHs6ZG9jICJSZXBsYWNlcyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgbWF0Y2ggd2l0aCByZXBsYWNlbWVudCBpbiBzLlxuXG4gICBtYXRjaC9yZXBsYWNlbWVudCBjYW4gYmU6XG5cbiAgIHN0cmluZyAvIHN0cmluZ1xuICAgcGF0dGVybiAvIChzdHJpbmcgb3IgZnVuY3Rpb24gb2YgbWF0Y2gpLlxuXG4gICBTZWUgYWxzbyByZXBsYWNlLlxuXG4gICBUaGUgcmVwbGFjZW1lbnQgaXMgbGl0ZXJhbCAoaS5lLiBub25lIG9mIGl0cyBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkXG4gICBzcGVjaWFsbHkpIGZvciBhbGwgY2FzZXMgYWJvdmUgZXhjZXB0IHBhdHRlcm4gLyBzdHJpbmcuXG5cbiAgIEZvciBwYXR0ZXJuIC8gc3RyaW5nLCAkMSwgJDIsIGV0Yy4gaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZyBhcmVcbiAgIHN1YnN0aXR1dGVkIHdpdGggdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIHBhcmVudGhlc2l6ZWQgZ3JvdXAgaW4gdGhlIHBhdHRlcm4uXG5cbiAgIEV4YW1wbGU6XG4gICAoY2xvanVyZS5zdHJpbmcvcmVwbGFjZS1maXJzdCBcInN3YXAgZmlyc3QgdHdvIHdvcmRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcIihcXHcrKShcXHMrKShcXHcrKVwiIFwiJDMkMiQxXCIpXG4gICAtPiBcImZpcnN0IHN3YXAgdHdvIHdvcmRzXCIiLCA6YXJnbGlzdHMgKFtzIG1hdGNoIHJlcGxhY2VtZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwbGFjZS1maXJzdFxyXG4gXCJSZXBsYWNlcyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgbWF0Y2ggd2l0aCByZXBsYWNlbWVudCBpbiBzLlxcblxcbiAgIG1hdGNoL3JlcGxhY2VtZW50IGNhbiBiZTpcXG5cXG4gICBzdHJpbmcgLyBzdHJpbmdcXG4gICBwYXR0ZXJuIC8gKHN0cmluZyBvciBmdW5jdGlvbiBvZiBtYXRjaCkuXFxuXFxuICAgU2VlIGFsc28gcmVwbGFjZS5cXG5cXG4gICBUaGUgcmVwbGFjZW1lbnQgaXMgbGl0ZXJhbCAoaS5lLiBub25lIG9mIGl0cyBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkXFxuICAgc3BlY2lhbGx5KSBmb3IgYWxsIGNhc2VzIGFib3ZlIGV4Y2VwdCBwYXR0ZXJuIC8gc3RyaW5nLlxcblxcbiAgIEZvciBwYXR0ZXJuIC8gc3RyaW5nLCAkMSwgJDIsIGV0Yy4gaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZyBhcmVcXG4gICBzdWJzdGl0dXRlZCB3aXRoIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nXFxuICAgcGFyZW50aGVzaXplZCBncm91cCBpbiB0aGUgcGF0dGVybi5cXG5cXG4gICBFeGFtcGxlOlxcbiAgIChjbG9qdXJlLnN0cmluZy9yZXBsYWNlLWZpcnN0IFxcXCJzd2FwIGZpcnN0IHR3byB3b3Jkc1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXFxcIihcXFxcdyspKFxcXFxzKykoXFxcXHcrKVxcXCIgXFxcIiQzJDIkMVxcXCIpXFxuICAgLT4gXFxcImZpcnN0IHN3YXAgdHdvIHdvcmRzXFxcIlwiXHJcbiBbcyBtYXRjaCByZXBsYWNlbWVudF1cclxuICgucmVwbGFjZSBzIG1hdGNoIHJlcGxhY2VtZW50KSlcclxuIn0gezpzeW0gc3RhcnRzLXdpdGg/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBzIHN0YXJ0cyB3aXRoIHN1YnN0ci4iLCA6YXJnbGlzdHMgKFtzIHN1YnN0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0YXJ0cy13aXRoP1xyXG4gXCJUcnVlIGlmIHMgc3RhcnRzIHdpdGggc3Vic3RyLlwiXHJcbiBbcyBzdWJzdHJdXHJcbiAoZ3N0cmluZy9zdGFydHNXaXRoIHMgc3Vic3RyKSlcclxuIn0gezpzeW0gZXNjYXBlLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgbmV3IHN0cmluZywgdXNpbmcgY21hcCB0byBlc2NhcGUgZWFjaCBjaGFyYWN0ZXIgY2hcbiAgIGZyb20gcyBhcyBmb2xsb3dzOlxuXG4gICBJZiAoY21hcCBjaCkgaXMgbmlsLCBhcHBlbmQgY2ggdG8gdGhlIG5ldyBzdHJpbmcuXG4gICBJZiAoY21hcCBjaCkgaXMgbm9uLW5pbCwgYXBwZW5kIChzdHIgKGNtYXAgY2gpKSBpbnN0ZWFkLiIsIDphcmdsaXN0cyAoW3MgY21hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY2FwZVxyXG4gXCJSZXR1cm4gYSBuZXcgc3RyaW5nLCB1c2luZyBjbWFwIHRvIGVzY2FwZSBlYWNoIGNoYXJhY3RlciBjaFxcbiAgIGZyb20gcyBhcyBmb2xsb3dzOlxcblxcbiAgIElmIChjbWFwIGNoKSBpcyBuaWwsIGFwcGVuZCBjaCB0byB0aGUgbmV3IHN0cmluZy5cXG4gICBJZiAoY21hcCBjaCkgaXMgbm9uLW5pbCwgYXBwZW5kIChzdHIgKGNtYXAgY2gpKSBpbnN0ZWFkLlwiXHJcbiBbcyBjbWFwXVxyXG4gKGxldFxyXG4gIFtidWZmZXIgKFN0cmluZ0J1ZmZlci4pIGxlbmd0aCAoLi1sZW5ndGggcyldXHJcbiAgKGxvb3BcclxuICAgW2luZGV4IDBdXHJcbiAgIChpZlxyXG4gICAgKD09IGxlbmd0aCBpbmRleClcclxuICAgICguIGJ1ZmZlciAodG9TdHJpbmcpKVxyXG4gICAgKGxldFxyXG4gICAgIFtjaCAoLmNoYXJBdCBzIGluZGV4KSByZXBsYWNlbWVudCAoZ2V0IGNtYXAgY2gpXVxyXG4gICAgIChpZi1ub3RcclxuICAgICAgKG5pbD8gcmVwbGFjZW1lbnQpXHJcbiAgICAgICguYXBwZW5kIGJ1ZmZlciAoc3RyIHJlcGxhY2VtZW50KSlcclxuICAgICAgKC5hcHBlbmQgYnVmZmVyIGNoKSlcclxuICAgICAocmVjdXIgKGluYyBpbmRleCkpKSkpKSlcclxuIn0gezpzeW0gbGFzdC1pbmRleC1vZiwgOm1ldGEgezpkb2MgIlJldHVybiBsYXN0IGluZGV4IG9mIHZhbHVlIChzdHJpbmcgb3IgY2hhcikgaW4gcywgb3B0aW9uYWxseVxuICBzZWFyY2hpbmcgYmFja3dhcmQgZnJvbSBmcm9tLWluZGV4IG9yIG5pbCBpZiBub3QgZm91bmQuIiwgOmFyZ2xpc3RzIFtbcyB2YWx1ZV0gW3MgdmFsdWUgZnJvbS1pbmRleF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxhc3QtaW5kZXgtb2ZcclxuIFwiUmV0dXJuIGxhc3QgaW5kZXggb2YgdmFsdWUgKHN0cmluZyBvciBjaGFyKSBpbiBzLCBvcHRpb25hbGx5XFxuICBzZWFyY2hpbmcgYmFja3dhcmQgZnJvbSBmcm9tLWluZGV4IG9yIG5pbCBpZiBub3QgZm91bmQuXCJcclxuIChbcyB2YWx1ZV1cclxuICAobGV0IFtyZXN1bHQgKC5sYXN0SW5kZXhPZiBzIHZhbHVlKV0gKGlmIChuZWc/IHJlc3VsdCkgbmlsIHJlc3VsdCkpKVxyXG4gKFtzIHZhbHVlIGZyb20taW5kZXhdXHJcbiAgKGxldFxyXG4gICBbcmVzdWx0ICgubGFzdEluZGV4T2YgcyB2YWx1ZSBmcm9tLWluZGV4KV1cclxuICAgKGlmIChuZWc/IHJlc3VsdCkgbmlsIHJlc3VsdCkpKSlcclxuIn0gezpzeW0gaW5jbHVkZXM/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBzIGluY2x1ZGVzIHN1YnN0ci4iLCA6YXJnbGlzdHMgKFtzIHN1YnN0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluY2x1ZGVzP1xyXG4gXCJUcnVlIGlmIHMgaW5jbHVkZXMgc3Vic3RyLlwiXHJcbiBbcyBzdWJzdHJdXHJcbiAoZ3N0cmluZy9jb250YWlucyBzIHN1YnN0cikpXHJcbiJ9IHs6c3ltIHJlcGxhY2UsIDptZXRhIHs6ZG9jICJSZXBsYWNlcyBhbGwgaW5zdGFuY2Ugb2YgbWF0Y2ggd2l0aCByZXBsYWNlbWVudCBpbiBzLlxuXG4gICBtYXRjaC9yZXBsYWNlbWVudCBjYW4gYmU6XG5cbiAgIHN0cmluZyAvIHN0cmluZ1xuICAgcGF0dGVybiAvIChzdHJpbmcgb3IgZnVuY3Rpb24gb2YgbWF0Y2gpLlxuXG4gICBTZWUgYWxzbyByZXBsYWNlLWZpcnN0LlxuXG4gICBUaGUgcmVwbGFjZW1lbnQgaXMgbGl0ZXJhbCAoaS5lLiBub25lIG9mIGl0cyBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkXG4gICBzcGVjaWFsbHkpIGZvciBhbGwgY2FzZXMgYWJvdmUgZXhjZXB0IHBhdHRlcm4gLyBzdHJpbmcuXG5cbiAgIEZvciBwYXR0ZXJuIC8gc3RyaW5nLCAkMSwgJDIsIGV0Yy4gaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZyBhcmVcbiAgIHN1YnN0aXR1dGVkIHdpdGggdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIHBhcmVudGhlc2l6ZWQgZ3JvdXAgaW4gdGhlIHBhdHRlcm4uXG5cbiAgIEV4YW1wbGU6XG4gICAoY2xvanVyZS5zdHJpbmcvcmVwbGFjZSBcIkFsbW9zdCBQaWcgTGF0aW5cIiAjXCJcXGIoXFx3KShcXHcrKVxcYlwiIFwiJDIkMWF5XCIpXG4gICAtPiBcImxtb3N0QWF5IGlnUGF5IGF0aW5MYXlcIiIsIDphcmdsaXN0cyAoW3MgbWF0Y2ggcmVwbGFjZW1lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBsYWNlXHJcbiBcIlJlcGxhY2VzIGFsbCBpbnN0YW5jZSBvZiBtYXRjaCB3aXRoIHJlcGxhY2VtZW50IGluIHMuXFxuXFxuICAgbWF0Y2gvcmVwbGFjZW1lbnQgY2FuIGJlOlxcblxcbiAgIHN0cmluZyAvIHN0cmluZ1xcbiAgIHBhdHRlcm4gLyAoc3RyaW5nIG9yIGZ1bmN0aW9uIG9mIG1hdGNoKS5cXG5cXG4gICBTZWUgYWxzbyByZXBsYWNlLWZpcnN0LlxcblxcbiAgIFRoZSByZXBsYWNlbWVudCBpcyBsaXRlcmFsIChpLmUuIG5vbmUgb2YgaXRzIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWRcXG4gICBzcGVjaWFsbHkpIGZvciBhbGwgY2FzZXMgYWJvdmUgZXhjZXB0IHBhdHRlcm4gLyBzdHJpbmcuXFxuXFxuICAgRm9yIHBhdHRlcm4gLyBzdHJpbmcsICQxLCAkMiwgZXRjLiBpbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGFyZVxcbiAgIHN1YnN0aXR1dGVkIHdpdGggdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmdcXG4gICBwYXJlbnRoZXNpemVkIGdyb3VwIGluIHRoZSBwYXR0ZXJuLlxcblxcbiAgIEV4YW1wbGU6XFxuICAgKGNsb2p1cmUuc3RyaW5nL3JlcGxhY2UgXFxcIkFsbW9zdCBQaWcgTGF0aW5cXFwiICNcXFwiXFxcXGIoXFxcXHcpKFxcXFx3KylcXFxcYlxcXCIgXFxcIiQyJDFheVxcXCIpXFxuICAgLT4gXFxcImxtb3N0QWF5IGlnUGF5IGF0aW5MYXlcXFwiXCJcclxuIFtzIG1hdGNoIHJlcGxhY2VtZW50XVxyXG4gKGNvbmRcclxuICAoc3RyaW5nPyBtYXRjaClcclxuICAoLnJlcGxhY2VcclxuICAgc1xyXG4gICAoanMvUmVnRXhwLiAoZ3N0cmluZy9yZWdFeHBFc2NhcGUgbWF0Y2gpIFwiZ1wiKVxyXG4gICByZXBsYWNlbWVudClcclxuICAoaW5zdGFuY2U/IGpzL1JlZ0V4cCBtYXRjaClcclxuICAoaWZcclxuICAgKHN0cmluZz8gcmVwbGFjZW1lbnQpXHJcbiAgIChyZXBsYWNlLWFsbCBzIG1hdGNoIHJlcGxhY2VtZW50KVxyXG4gICAocmVwbGFjZS1hbGwgcyBtYXRjaCAocmVwbGFjZS13aXRoIHJlcGxhY2VtZW50KSkpXHJcbiAgOmVsc2VcclxuICAodGhyb3cgKHN0ciBcIkludmFsaWQgbWF0Y2ggYXJnOiBcIiBtYXRjaCkpKSlcclxuIn0gezpzeW0gc3BsaXQtbGluZXMsIDptZXRhIHs6ZG9jICJTcGxpdHMgcyBvbiBcXG4gb3IgXFxyXFxuLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdC1saW5lc1xyXG4gXCJTcGxpdHMgcyBvbiBcXFxcbiBvciBcXFxcclxcXFxuLlwiXHJcbiBbc11cclxuIChzcGxpdCBzICNcIlxcbnxcXHJcXG5cIikpXHJcbiJ9IHs6c3ltIGxvd2VyLWNhc2UsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBzdHJpbmcgdG8gYWxsIGxvd2VyLWNhc2UuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvd2VyLWNhc2VcclxuIFwiQ29udmVydHMgc3RyaW5nIHRvIGFsbCBsb3dlci1jYXNlLlwiXHJcbiBbc11cclxuICgudG9Mb3dlckNhc2UgcykpXHJcbiJ9IHs6c3ltIHRyaW0tbmV3bGluZSwgOm1ldGEgezpkb2MgIlJlbW92ZXMgYWxsIHRyYWlsaW5nIG5ld2xpbmUgXFxuIG9yIHJldHVybiBcXHIgY2hhcmFjdGVycyBmcm9tXG4gIHN0cmluZy4gIFNpbWlsYXIgdG8gUGVybCdzIGNob21wLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmltLW5ld2xpbmVcclxuIFwiUmVtb3ZlcyBhbGwgdHJhaWxpbmcgbmV3bGluZSBcXFxcbiBvciByZXR1cm4gXFxcXHIgY2hhcmFjdGVycyBmcm9tXFxuICBzdHJpbmcuICBTaW1pbGFyIHRvIFBlcmwncyBjaG9tcC5cIlxyXG4gW3NdXHJcbiAobG9vcFxyXG4gIFtpbmRleCAoLi1sZW5ndGggcyldXHJcbiAgKGlmXHJcbiAgICh6ZXJvPyBpbmRleClcclxuICAgXCJcIlxyXG4gICAobGV0XHJcbiAgICBbY2ggKGdldCBzIChkZWMgaW5kZXgpKV1cclxuICAgIChpZlxyXG4gICAgIChvciAoaWRlbnRpY2FsPyBcXG5ld2xpbmUgY2gpIChpZGVudGljYWw/IFxccmV0dXJuIGNoKSlcclxuICAgICAocmVjdXIgKGRlYyBpbmRleCkpXHJcbiAgICAgKC5zdWJzdHJpbmcgcyAwIGluZGV4KSkpKSkpXHJcbiJ9IHs6c3ltIHVwcGVyLWNhc2UsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBzdHJpbmcgdG8gYWxsIHVwcGVyLWNhc2UuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwcGVyLWNhc2VcclxuIFwiQ29udmVydHMgc3RyaW5nIHRvIGFsbCB1cHBlci1jYXNlLlwiXHJcbiBbc11cclxuICgudG9VcHBlckNhc2UgcykpXHJcbiJ9IHs6c3ltIHNwbGl0LCA6bWV0YSB7OmRvYyAiU3BsaXRzIHN0cmluZyBvbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gT3B0aW9uYWwgYXJndW1lbnQgbGltaXQgaXNcbiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNwbGl0cy4gTm90IGxhenkuIFJldHVybnMgdmVjdG9yIG9mIHRoZSBzcGxpdHMuIiwgOmFyZ2xpc3RzIFtbcyByZV0gW3MgcmUgbGltaXRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdFxyXG4gXCJTcGxpdHMgc3RyaW5nIG9uIGEgcmVndWxhciBleHByZXNzaW9uLiBPcHRpb25hbCBhcmd1bWVudCBsaW1pdCBpc1xcbiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNwbGl0cy4gTm90IGxhenkuIFJldHVybnMgdmVjdG9yIG9mIHRoZSBzcGxpdHMuXCJcclxuIChbcyByZV0gKHNwbGl0IHMgcmUgMCkpXHJcbiAoW3MgcmUgbGltaXRdXHJcbiAgKGRpc2NhcmQtdHJhaWxpbmctaWYtbmVlZGVkXHJcbiAgIGxpbWl0XHJcbiAgIChpZlxyXG4gICAgKGlkZW50aWNhbD8gXCIvKD86KS9cIiAoc3RyIHJlKSlcclxuICAgIChzcGxpdC13aXRoLWVtcHR5LXJlZ2V4IHMgbGltaXQpXHJcbiAgICAoaWZcclxuICAgICAoPCBsaW1pdCAxKVxyXG4gICAgICh2ZWMgKC5zcGxpdCAoc3RyIHMpIHJlKSlcclxuICAgICAobG9vcFxyXG4gICAgICBbcyBzIGxpbWl0IGxpbWl0IHBhcnRzIFtdXVxyXG4gICAgICAoaWZcclxuICAgICAgICg9PSAxIGxpbWl0KVxyXG4gICAgICAgKGNvbmogcGFydHMgcylcclxuICAgICAgIChsZXRcclxuICAgICAgICBbbSAocmUtZmluZCByZSBzKV1cclxuICAgICAgICAoaWYtbm90XHJcbiAgICAgICAgIChuaWw/IG0pXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtpbmRleCAoLmluZGV4T2YgcyBtKV1cclxuICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICguc3Vic3RyaW5nIHMgKCsgaW5kZXggKGNvdW50IG0pKSlcclxuICAgICAgICAgICAoZGVjIGxpbWl0KVxyXG4gICAgICAgICAgIChjb25qIHBhcnRzICguc3Vic3RyaW5nIHMgMCBpbmRleCkpKSlcclxuICAgICAgICAgKGNvbmogcGFydHMgcykpKSkpKSkpKSlcclxuIn0gezpzeW0gdHJpbXIsIDptZXRhIHs6ZG9jICJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyaW1yXHJcbiBcIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZy5cIlxyXG4gW3NdXHJcbiAoZ3N0cmluZy90cmltUmlnaHQgcykpXHJcbiJ9IHs6c3ltIGluZGV4LW9mLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGluZGV4IG9mIHZhbHVlIChzdHJpbmcgb3IgY2hhcikgaW4gcywgb3B0aW9uYWxseSBzZWFyY2hpbmdcbiAgZm9yd2FyZCBmcm9tIGZyb20taW5kZXggb3IgbmlsIGlmIG5vdCBmb3VuZC4iLCA6YXJnbGlzdHMgW1tzIHZhbHVlXSBbcyB2YWx1ZSBmcm9tLWluZGV4XV19LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXgtb2ZcclxuIFwiUmV0dXJuIGluZGV4IG9mIHZhbHVlIChzdHJpbmcgb3IgY2hhcikgaW4gcywgb3B0aW9uYWxseSBzZWFyY2hpbmdcXG4gIGZvcndhcmQgZnJvbSBmcm9tLWluZGV4IG9yIG5pbCBpZiBub3QgZm91bmQuXCJcclxuIChbcyB2YWx1ZV1cclxuICAobGV0IFtyZXN1bHQgKC5pbmRleE9mIHMgdmFsdWUpXSAoaWYgKG5lZz8gcmVzdWx0KSBuaWwgcmVzdWx0KSkpXHJcbiAoW3MgdmFsdWUgZnJvbS1pbmRleF1cclxuICAobGV0XHJcbiAgIFtyZXN1bHQgKC5pbmRleE9mIHMgdmFsdWUgZnJvbS1pbmRleCldXHJcbiAgIChpZiAobmVnPyByZXN1bHQpIG5pbCByZXN1bHQpKSkpXHJcbiJ9IHs6c3ltIHRyaW0sIDptZXRhIHs6ZG9jICJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSBib3RoIGVuZHMgb2Ygc3RyaW5nLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmltXHJcbiBcIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIGJvdGggZW5kcyBvZiBzdHJpbmcuXCJcclxuIFtzXVxyXG4gKGdzdHJpbmcvdHJpbSBzKSlcclxuIn0gezpzeW0gdHJpbWwsIDptZXRhIHs6ZG9jICJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJpbWxcclxuIFwiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGxlZnQgc2lkZSBvZiBzdHJpbmcuXCJcclxuIFtzXVxyXG4gKGdzdHJpbmcvdHJpbUxlZnQgcykpXHJcbiJ9IHs6c3ltIGJsYW5rPywgOm1ldGEgezpkb2MgIlRydWUgaXMgcyBpcyBuaWwsIGVtcHR5LCBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJsYW5rP1xyXG4gXCJUcnVlIGlzIHMgaXMgbmlsLCBlbXB0eSwgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlwiXHJcbiBbc11cclxuIChnc3RyaW5nL2lzRW1wdHlPcldoaXRlc3BhY2UgKGdzdHJpbmcvbWFrZVNhZmUgcykpKVxyXG4ifSksIGNsanMuc3BlYy5hbHBoYSAoezpzeW0gZm9ybSwgOm1ldGEgezpkb2MgInJldHVybnMgdGhlIHNwZWMgYXMgZGF0YSIsIDphcmdsaXN0cyAoW3NwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3JtXHJcbiBcInJldHVybnMgdGhlIHNwZWMgYXMgZGF0YVwiXHJcbiBbc3BlY11cclxuIChkZXNjcmliZSogKHNwZWNpemUgc3BlYykpKVxyXG4ifSB7OnN5bSBuaWxhYmxlLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ25pbGFibGUnIiwgOmFyZ2xpc3RzIChbZm9ybSBwcmVkIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5pbGFibGUtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ25pbGFibGUnXCJcclxuIFtmb3JtIHByZWQgZ2ZuXVxyXG4gKGxldFxyXG4gIFtzcGVjIChkZWxheSAoc3BlY2l6ZSBwcmVkIGZvcm0pKV1cclxuICAocmVpZnlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKiBbXyB4XSAoaWYgKG5pbD8geCkgbmlsIChjb25mb3JtKiBAc3BlYyB4KSkpXHJcbiAgICh1bmZvcm0qIFtfIHhdIChpZiAobmlsPyB4KSBuaWwgKHVuZm9ybSogQHNwZWMgeCkpKVxyXG4gICAoZXhwbGFpbipcclxuICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoYy9vciAocHZhbGlkPyBAc3BlYyB4KSAobmlsPyB4KSlcclxuICAgICAoY29ualxyXG4gICAgICAoZXhwbGFpbi0xIGZvcm0gcHJlZCAoY29uaiBwYXRoIDpjbGpzLnNwZWMuYWxwaGEvcHJlZCkgdmlhIGluIHgpXHJcbiAgICAgIHs6cGF0aCAoY29uaiBwYXRoIDpjbGpzLnNwZWMuYWxwaGEvbmlsKSxcclxuICAgICAgIDpwcmVkICduaWw/LFxyXG4gICAgICAgOnZhbCB4LFxyXG4gICAgICAgOnZpYSB2aWEsXHJcbiAgICAgICA6aW4gaW59KSkpXHJcbiAgIChnZW4qXHJcbiAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgKGlmXHJcbiAgICAgZ2ZuXHJcbiAgICAgKGdmbilcclxuICAgICAoZ2VuL2ZyZXF1ZW5jeVxyXG4gICAgICBbWzEgKGdlbi9kZWxheSAoZ2VuL3JldHVybiBuaWwpKV1cclxuICAgICAgIFs5XHJcbiAgICAgICAgKGdlbi9kZWxheVxyXG4gICAgICAgICAoZ2Vuc3ViXHJcbiAgICAgICAgICBwcmVkXHJcbiAgICAgICAgICBvdmVycmlkZXNcclxuICAgICAgICAgIChjb25qIHBhdGggOmNsanMuc3BlYy5hbHBoYS9wcmVkKVxyXG4gICAgICAgICAgcm1hcFxyXG4gICAgICAgICAgZm9ybSkpXV0pKSlcclxuICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChuaWxhYmxlLWltcGwgZm9ybSBwcmVkIGdmbikpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9uaWxhYmxlKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChzL21yZXMgZm9ybSkpKSkpKSkpKVxyXG4ifSB7OnN5bSAqcmVjdXJzaW9uLWxpbWl0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpyZWN1cnNpb24tbGltaXQqXHJcbiBcIkEgc29mdCBsaW1pdCBvbiBob3cgbWFueSB0aW1lcyBhIGJyYW5jaGluZyBzcGVjIChvci9hbHQvKi9vcHQta2V5cy9tdWx0aS1zcGVjKVxcbiAgY2FuIGJlIHJlY3Vyc2VkIHRocm91Z2ggZHVyaW5nIGdlbmVyYXRpb24uIEFmdGVyIHRoaXMgYVxcbiAgbm9uLXJlY3Vyc2l2ZSBicmFuY2ggd2lsbCBiZSBjaG9zZW4uXCJcclxuIDQpXHJcbiJ9IHs6c3ltICpjb2xsLWVycm9yLWxpbWl0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpjb2xsLWVycm9yLWxpbWl0KlxyXG4gXCJUaGUgbnVtYmVyIG9mIGVycm9ycyByZXBvcnRlZCBieSBleHBsYWluIGluIGEgY29sbGVjdGlvbiBzcGVjJ2VkIHdpdGggJ2V2ZXJ5J1wiXHJcbiAyMClcclxuIn0gezpzeW0gZXhwbGFpbi1wcmludGVyLCA6bWV0YSB7OmRvYyAiRGVmYXVsdCBwcmludGVyIGZvciBleHBsYWluLWRhdGEuIG5pbCBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24uIiwgOmFyZ2xpc3RzIChbZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXByaW50ZXJcclxuIFwiRGVmYXVsdCBwcmludGVyIGZvciBleHBsYWluLWRhdGEuIG5pbCBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24uXCJcclxuIFtlZF1cclxuIChpZlxyXG4gIGVkXHJcbiAgKGxldFxyXG4gICBbcHJvYmxlbXNcclxuICAgICgtPj5cclxuICAgICAoOmNsanMuc3BlYy5hbHBoYS9wcm9ibGVtcyBlZClcclxuICAgICAoc29ydC1ieSAoZm4qIFtwMV9fNDg5MzYjXSAoLSAoY291bnQgKDppbiBwMV9fNDg5MzYjKSkpKSlcclxuICAgICAoc29ydC1ieSAoZm4qIFtwMV9fNDg5MzcjXSAoLSAoY291bnQgKDpwYXRoIHAxX180ODkzNyMpKSkpKSldXHJcbiAgIChwcmludFxyXG4gICAgKHdpdGgtb3V0LXN0clxyXG4gICAgIChkb3NlcVxyXG4gICAgICBbezprZXlzIFtwYXRoIHByZWQgdmFsIHJlYXNvbiB2aWEgaW5dLCA6YXMgcHJvYn0gcHJvYmxlbXNdXHJcbiAgICAgIChwciB2YWwpXHJcbiAgICAgIChwcmludCBcIiAtIGZhaWxlZDogXCIpXHJcbiAgICAgIChpZiByZWFzb24gKHByaW50IHJlYXNvbikgKHByIChhYmJyZXYgcHJlZCkpKVxyXG4gICAgICAod2hlbi1ub3QgKGVtcHR5PyBpbikgKHByaW50IChzdHIgXCIgaW46IFwiIChwci1zdHIgaW4pKSkpXHJcbiAgICAgICh3aGVuLW5vdCAoZW1wdHk/IHBhdGgpIChwcmludCAoc3RyIFwiIGF0OiBcIiAocHItc3RyIHBhdGgpKSkpXHJcbiAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgKGVtcHR5PyB2aWEpXHJcbiAgICAgICAocHJpbnQgKHN0ciBcIiBzcGVjOiBcIiAocHItc3RyIChsYXN0IHZpYSkpKSkpXHJcbiAgICAgIChkb3NlcVxyXG4gICAgICAgW1trIHZdIHByb2JdXHJcbiAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAoI3s6cGF0aCA6cHJlZCA6dmlhIDp2YWwgOnJlYXNvbiA6aW59IGspXHJcbiAgICAgICAgKHByaW50IFwiXFxuXFx0XCIgKHByLXN0ciBrKSBcIiBcIilcclxuICAgICAgICAocHIgdikpKVxyXG4gICAgICAobmV3bGluZSkpKSkpXHJcbiAgKHByaW50bG4gXCJTdWNjZXNzIVwiKSkpXHJcbiJ9IHs6c3ltIFNwZWNpemUsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChzcGVjaXplKil9IHs6c3ltIGFsdC1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhbHQnIiwgOmFyZ2xpc3RzIChba3MgcHMgZm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbHQtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2FsdCdcIlxyXG4gW2tzIHBzIGZvcm1zXVxyXG4gKGFzc29jIChhbHQqIHBzIGtzIGZvcm1zKSA6aWQgKHJhbmRvbS11dWlkKSkpXHJcbiJ9IHs6c3ltIGRlZi1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdkZWYnIiwgOmFyZ2xpc3RzIChbayBmb3JtIHNwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWYtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2RlZidcIlxyXG4gW2sgZm9ybSBzcGVjXVxyXG4gKGFzc2VydFxyXG4gIChjL2FuZCAoaWRlbnQ/IGspIChuYW1lc3BhY2UgaykpXHJcbiAgXCJrIG11c3QgYmUgbmFtZXNwYWNlZCBrZXl3b3JkIG9yIHJlc29sdmVhYmxlIHN5bWJvbFwiKVxyXG4gKGlmXHJcbiAgKG5pbD8gc3BlYylcclxuICAoc3dhcCEgcmVnaXN0cnktcmVmIGRpc3NvYyBrKVxyXG4gIChsZXRcclxuICAgW3NwZWNcclxuICAgIChpZlxyXG4gICAgIChjL29yIChzcGVjPyBzcGVjKSAocmVnZXg/IHNwZWMpIChnZXQgQHJlZ2lzdHJ5LXJlZiBzcGVjKSlcclxuICAgICBzcGVjXHJcbiAgICAgKHNwZWMtaW1wbCBmb3JtIHNwZWMgbmlsIG5pbCkpXVxyXG4gICAoc3dhcCEgcmVnaXN0cnktcmVmIGFzc29jIGsgKHdpdGgtbmFtZSBzcGVjIGspKSkpXHJcbiBrKVxyXG4ifSB7OnN5bSAqZXhwbGFpbi1vdXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZXhwbGFpbi1vdXQqIGV4cGxhaW4tcHJpbnRlcilcclxuIn0gezpzeW0gcmVnZXgtc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJyB3aXRoIGEgcmVnZXggb3AgYXJndW1lbnQiLCA6YXJnbGlzdHMgKFtyZSBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdleC1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJyB3aXRoIGEgcmVnZXggb3AgYXJndW1lbnRcIlxyXG4gW3JlIGdmbl1cclxuIChyZWlmeVxyXG4gIFNwZWNpemVcclxuICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgU3BlY1xyXG4gIChjb25mb3JtKlxyXG4gICBbXyB4XVxyXG4gICAoaWZcclxuICAgIChjL29yIChuaWw/IHgpIChzZXF1ZW50aWFsPyB4KSlcclxuICAgIChyZS1jb25mb3JtIHJlIChzZXEgeCkpXHJcbiAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKVxyXG4gICh1bmZvcm0qIFtfIHhdIChvcC11bmZvcm0gcmUgeCkpXHJcbiAgKGV4cGxhaW4qXHJcbiAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgIChpZlxyXG4gICAgKGMvb3IgKG5pbD8geCkgKHNlcXVlbnRpYWw/IHgpKVxyXG4gICAgKHJlLWV4cGxhaW4gcGF0aCB2aWEgaW4gcmUgKHNlcSB4KSlcclxuICAgIFt7OnBhdGggcGF0aCxcclxuICAgICAgOnByZWRcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS9mbilcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL3ZlY1xyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0IChjbG9qdXJlLmNvcmUvbGlzdCAnJSkpKSkpKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLmNvcmUvb3IpXHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL25pbD8pXHJcbiAgICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICclKSkpKSlcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvc2VxdWVudGlhbD8pXHJcbiAgICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICclKSkpKSkpKSkpKSkpLFxyXG4gICAgICA6dmFsIHgsXHJcbiAgICAgIDp2aWEgdmlhLFxyXG4gICAgICA6aW4gaW59XSkpXHJcbiAgKGdlbipcclxuICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgKGlmIGdmbiAoZ2ZuKSAocmUtZ2VuIHJlIG92ZXJyaWRlcyBwYXRoIHJtYXAgKG9wLWRlc2NyaWJlIHJlKSkpKVxyXG4gICh3aXRoLWdlbiogW18gZ2ZuXSAocmVnZXgtc3BlYy1pbXBsIHJlIGdmbikpXHJcbiAgKGRlc2NyaWJlKiBbX10gKG9wLWRlc2NyaWJlIHJlKSkpKVxyXG4ifSB7OnN5bSBtZXJnZS1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ21lcmdlJyIsIDphcmdsaXN0cyAoW2Zvcm1zIHByZWRzIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ21lcmdlJ1wiXHJcbiBbZm9ybXMgcHJlZHMgZ2ZuXVxyXG4gKHJlaWZ5XHJcbiAgU3BlY2l6ZVxyXG4gIChzcGVjaXplKiBbc10gcylcclxuICAoc3BlY2l6ZSogW3MgX10gcylcclxuICBTcGVjXHJcbiAgKGNvbmZvcm0qXHJcbiAgIFtfIHhdXHJcbiAgIChsZXRcclxuICAgIFttc1xyXG4gICAgIChtYXBcclxuICAgICAgKGZuKiBbcDFfXzQ4OTQ5IyBwMl9fNDg5NTAjXSAoZHQgcDFfXzQ4OTQ5IyB4IHAyX180ODk1MCMpKVxyXG4gICAgICBwcmVkc1xyXG4gICAgICBmb3JtcyldXHJcbiAgICAoaWZcclxuICAgICAoc29tZSBpbnZhbGlkPyBtcylcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAoYXBwbHkgYy9tZXJnZSBtcykpKSlcclxuICAodW5mb3JtKlxyXG4gICBbXyB4XVxyXG4gICAoYXBwbHlcclxuICAgIGMvbWVyZ2VcclxuICAgIChtYXAgKGZuKiBbcDFfXzQ4OTUxI10gKHVuZm9ybSBwMV9fNDg5NTEjIHgpKSAocmV2ZXJzZSBwcmVkcykpKSlcclxuICAoZXhwbGFpbipcclxuICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgKGFwcGx5XHJcbiAgICBjb25jYXRcclxuICAgIChtYXBcclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDg5NTIjIHAyX180ODk1MyNdXHJcbiAgICAgIChleHBsYWluLTEgcDFfXzQ4OTUyIyBwMl9fNDg5NTMjIHBhdGggdmlhIGluIHgpKVxyXG4gICAgIGZvcm1zXHJcbiAgICAgcHJlZHMpKSlcclxuICAoZ2VuKlxyXG4gICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAoaWZcclxuICAgIGdmblxyXG4gICAgKGdmbilcclxuICAgIChnZW4vZm1hcFxyXG4gICAgIChmbiogW3AxX180ODk1NCNdIChhcHBseSBjL21lcmdlIHAxX180ODk1NCMpKVxyXG4gICAgIChhcHBseVxyXG4gICAgICBnZW4vdHVwbGVcclxuICAgICAgKG1hcFxyXG4gICAgICAgKGZuKlxyXG4gICAgICAgIFtwMV9fNDg5NTUjIHAyX180ODk1NiNdXHJcbiAgICAgICAgKGdlbnN1YiBwMV9fNDg5NTUjIG92ZXJyaWRlcyBwYXRoIHJtYXAgcDJfXzQ4OTU2IykpXHJcbiAgICAgICBwcmVkc1xyXG4gICAgICAgZm9ybXMpKSkpKVxyXG4gICh3aXRoLWdlbiogW18gZ2ZuXSAobWVyZ2Utc3BlYy1pbXBsIGZvcm1zIHByZWRzIGdmbikpXHJcbiAgKGRlc2NyaWJlKlxyXG4gICBbX11cclxuICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9tZXJnZSlcclxuICAgICAgZm9ybXMpKSkpKSlcclxuIn0gezpzeW0gZXhwbGFpbi1kYXRhKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIHBhdGggdmlhIGluIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLWRhdGEqXHJcbiBbc3BlYyBwYXRoIHZpYSBpbiB4XVxyXG4gKHdoZW4tbGV0XHJcbiAgW3Byb2JzIChleHBsYWluKiAoc3BlY2l6ZSBzcGVjKSBwYXRoIHZpYSBpbiB4KV1cclxuICAod2hlbi1ub3RcclxuICAgKGVtcHR5PyBwcm9icylcclxuICAgezpjbGpzLnNwZWMuYWxwaGEvcHJvYmxlbXMgcHJvYnMsXHJcbiAgICA6Y2xqcy5zcGVjLmFscGhhL3NwZWMgc3BlYyxcclxuICAgIDpjbGpzLnNwZWMuYWxwaGEvdmFsdWUgeH0pKSlcclxuIn0gezpzeW0gTUFYX0lOVCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTUFYX0lOVCA5MDA3MTk5MjU0NzQwOTkxKVxyXG4ifSB7OnN5bSBjaGVjay1hc3NlcnRzLCA6bWV0YSB7OmRvYyAiRW5hYmxlIG9yIGRpc2FibGUgc3BlYyBhc3NlcnRzIHRoYXQgaGF2ZSBiZWVuIGNvbXBpbGVkXG53aXRoICcqY29tcGlsZS1hc3NlcnRzKicgdHJ1ZS4gIFNlZSAnYXNzZXJ0Jy5cbkluaXRpYWxseSBzZXQgdG8gYm9vbGVhbiB2YWx1ZSBvZiBjbGpzLnNwZWMuYWxwaGEvKnJ1bnRpbWUtYXNzZXJ0cyouXG5EZWZhdWx0cyB0byBmYWxzZS4iLCA6YXJnbGlzdHMgKFtmbGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stYXNzZXJ0c1xyXG4gXCJFbmFibGUgb3IgZGlzYWJsZSBzcGVjIGFzc2VydHMgdGhhdCBoYXZlIGJlZW4gY29tcGlsZWRcXG53aXRoICcqY29tcGlsZS1hc3NlcnRzKicgdHJ1ZS4gIFNlZSAnYXNzZXJ0Jy5cXG5Jbml0aWFsbHkgc2V0IHRvIGJvb2xlYW4gdmFsdWUgb2YgY2xqcy5zcGVjLmFscGhhLypydW50aW1lLWFzc2VydHMqLlxcbkRlZmF1bHRzIHRvIGZhbHNlLlwiXHJcbiBbZmxhZ11cclxuIChzZXQhICpydW50aW1lLWFzc2VydHMqIGZsYWcpKVxyXG4ifSB7OnN5bSBhc3NlcnQqLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhc3NlcnQnLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzc2VydCpcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhc3NlcnQnLlwiXHJcbiBbc3BlYyB4XVxyXG4gKGlmXHJcbiAgKHZhbGlkPyBzcGVjIHgpXHJcbiAgeFxyXG4gIChsZXRcclxuICAgW2VkXHJcbiAgICAoYy9tZXJnZVxyXG4gICAgIChhc3NvY1xyXG4gICAgICAoZXhwbGFpbi1kYXRhKiBzcGVjIFtdIFtdIFtdIHgpXHJcbiAgICAgIDpjbGpzLnNwZWMuYWxwaGEvZmFpbHVyZVxyXG4gICAgICA6YXNzZXJ0aW9uLWZhaWxlZCkpXVxyXG4gICAodGhyb3dcclxuICAgIChqcy9FcnJvci5cclxuICAgICAoc3RyXHJcbiAgICAgIFwiU3BlYyBhc3NlcnRpb24gZmFpbGVkXFxuXCJcclxuICAgICAgKHdpdGgtb3V0LXN0ciAoZXhwbGFpbi1vdXQgZWQpKSkpKSkpKVxyXG4ifSB7OnN5bSBpbnN0LWluLXJhbmdlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIGluc3QgYXQgb3IgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSBlbmQiLCA6YXJnbGlzdHMgKFtzdGFydCBlbmQgaW5zdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc3QtaW4tcmFuZ2U/XHJcbiBcIlJldHVybiB0cnVlIGlmIGluc3QgYXQgb3IgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSBlbmRcIlxyXG4gW3N0YXJ0IGVuZCBpbnN0XVxyXG4gKGMvYW5kXHJcbiAgKGluc3Q/IGluc3QpXHJcbiAgKGxldFxyXG4gICBbdCAoaW5zdC1tcyBpbnN0KV1cclxuICAgKGMvYW5kICg8PSAoaW5zdC1tcyBzdGFydCkgdCkgKDwgdCAoaW5zdC1tcyBlbmQpKSkpKSlcclxuIn0gezpzeW0gYW5kLXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYW5kJyIsIDphcmdsaXN0cyAoW2Zvcm1zIHByZWRzIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuZC1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhbmQnXCJcclxuIFtmb3JtcyBwcmVkcyBnZm5dXHJcbiAobGV0XHJcbiAgW3NwZWNzXHJcbiAgIChkZWxheSAobWFwdiBzcGVjaXplIHByZWRzIGZvcm1zKSlcclxuICAgY2Zvcm1cclxuICAgKGNhc2VcclxuICAgIChjb3VudCBwcmVkcylcclxuICAgIDJcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjcyByZXQgKGNvbmZvcm0qIChzcGVjcyAwKSB4KV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAoY29uZm9ybSogKHNwZWNzIDEpIHJldCkpKSlcclxuICAgIDNcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjcyByZXQgKGNvbmZvcm0qIChzcGVjcyAwKSB4KV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3JldCAoY29uZm9ybSogKHNwZWNzIDEpIHJldCldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAoY29uZm9ybSogKHNwZWNzIDIpIHJldCkpKSkpKVxyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzXVxyXG4gICAgICAobG9vcFxyXG4gICAgICAgW3JldCB4IGkgMF1cclxuICAgICAgIChpZlxyXG4gICAgICAgICg8IGkgKGNvdW50IHNwZWNzKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtucmV0IChjb25mb3JtKiAoc3BlY3MgaSkgcmV0KV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAoaW52YWxpZD8gbnJldClcclxuICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAgKHJlY3VyIG5yZXQgKGluYyBpKSkpKVxyXG4gICAgICAgIHJldCkpKSkpXVxyXG4gIChyZWlmeVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qIFtfIHhdIChjZm9ybSB4KSlcclxuICAgKHVuZm9ybSpcclxuICAgIFtfIHhdXHJcbiAgICAocmVkdWNlXHJcbiAgICAgKGZuKiBbcDFfXzQ4OTQ4IyBwMl9fNDg5NDcjXSAodW5mb3JtIHAyX180ODk0NyMgcDFfXzQ4OTQ4IykpXHJcbiAgICAgeFxyXG4gICAgIChyZXZlcnNlIHByZWRzKSkpXHJcbiAgIChleHBsYWluKlxyXG4gICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgIChleHBsYWluLXByZWQtbGlzdCBmb3JtcyBwcmVkcyBwYXRoIHZpYSBpbiB4KSlcclxuICAgKGdlbipcclxuICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAoaWZcclxuICAgICBnZm5cclxuICAgICAoZ2ZuKVxyXG4gICAgIChnZW5zdWIgKGZpcnN0IHByZWRzKSBvdmVycmlkZXMgcGF0aCBybWFwIChmaXJzdCBmb3JtcykpKSlcclxuICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChhbmQtc3BlYy1pbXBsIGZvcm1zIHByZWRzIGdmbikpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9hbmQpXHJcbiAgICAgICBmb3JtcykpKSkpKSlcclxuIn0gezpzeW0gZGVzY3JpYmUqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWNdKX0sIDpwcm90b2NvbCBTcGVjfSB7OnN5bSBtYXAtc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJyB3aXRoIGEgbWFwIGFyZ3VtZW50IiwgOmFyZ2xpc3RzIChbezprZXlzIFtyZXEtdW4gb3B0LXVuIGtleXMtcHJlZCBwcmVkLWV4cHJzIG9wdC1rZXlzIHJlcS1zcGVjcyByZXEgcmVxLWtleXMgb3B0LXNwZWNzIHByZWQtZm9ybXMgb3B0IGdmbl0sIDphcyBhcmdtfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJyB3aXRoIGEgbWFwIGFyZ3VtZW50XCJcclxuIFt7OmtleXNcclxuICAgW3JlcS11blxyXG4gICAgb3B0LXVuXHJcbiAgICBrZXlzLXByZWRcclxuICAgIHByZWQtZXhwcnNcclxuICAgIG9wdC1rZXlzXHJcbiAgICByZXEtc3BlY3NcclxuICAgIHJlcVxyXG4gICAgcmVxLWtleXNcclxuICAgIG9wdC1zcGVjc1xyXG4gICAgcHJlZC1mb3Jtc1xyXG4gICAgb3B0XHJcbiAgICBnZm5dLFxyXG4gICA6YXMgYXJnbX1dXHJcbiAobGV0XHJcbiAgW2stPnNcclxuICAgKHppcG1hcCAoY29uY2F0IHJlcS1rZXlzIG9wdC1rZXlzKSAoY29uY2F0IHJlcS1zcGVjcyBvcHQtc3BlY3MpKVxyXG4gICBrZXlzLT5zcGVjbmFtZXNcclxuICAgKGZuKiBbcDFfXzQ4OTM5I10gKGMvb3IgKGstPnMgcDFfXzQ4OTM5IykgcDFfXzQ4OTM5IykpXHJcbiAgIGlkXHJcbiAgIChyYW5kb20tdXVpZCldXHJcbiAgKHJlaWZ5XHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSpcclxuICAgIFtfIG1dXHJcbiAgICAoaWZcclxuICAgICAoa2V5cy1wcmVkIG0pXHJcbiAgICAgKGxldFxyXG4gICAgICBbcmVnIChyZWdpc3RyeSldXHJcbiAgICAgIChsb29wXHJcbiAgICAgICBbcmV0IG0gW1trIHZdICYga3MgOmFzIGtleXNdIG1dXHJcbiAgICAgICAoaWZcclxuICAgICAgICBrZXlzXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbc25hbWUgKGtleXMtPnNwZWNuYW1lcyBrKV1cclxuICAgICAgICAgKGlmLWxldFxyXG4gICAgICAgICAgW3MgKGdldCByZWcgc25hbWUpXVxyXG4gICAgICAgICAgKGxldFxyXG4gICAgICAgICAgIFtjdiAoY29uZm9ybSBzIHYpXVxyXG4gICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAoaW52YWxpZD8gY3YpXHJcbiAgICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAgICAocmVjdXIgKGlmIChpZGVudGljYWw/IGN2IHYpIHJldCAoYXNzb2MgcmV0IGsgY3YpKSBrcykpKVxyXG4gICAgICAgICAgKHJlY3VyIHJldCBrcykpKVxyXG4gICAgICAgIHJldCkpKVxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpXHJcbiAgICh1bmZvcm0qXHJcbiAgICBbXyBtXVxyXG4gICAgKGxldFxyXG4gICAgIFtyZWcgKHJlZ2lzdHJ5KV1cclxuICAgICAobG9vcFxyXG4gICAgICBbcmV0IG0gW2sgJiBrcyA6YXMga2V5c10gKGMva2V5cyBtKV1cclxuICAgICAgKGlmXHJcbiAgICAgICBrZXlzXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoY29udGFpbnM/IHJlZyAoa2V5cy0+c3BlY25hbWVzIGspKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2N2IChnZXQgbSBrKSB2ICh1bmZvcm0gKGtleXMtPnNwZWNuYW1lcyBrKSBjdildXHJcbiAgICAgICAgIChyZWN1ciAoaWYgKGlkZW50aWNhbD8gY3YgdikgcmV0IChhc3NvYyByZXQgayB2KSkga3MpKVxyXG4gICAgICAgIChyZWN1ciByZXQga3MpKVxyXG4gICAgICAgcmV0KSkpKVxyXG4gICAoZXhwbGFpbipcclxuICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKG1hcD8geClcclxuICAgICBbezpwYXRoIHBhdGgsIDpwcmVkICdjbG9qdXJlLmNvcmUvbWFwPywgOnZhbCB4LCA6dmlhIHZpYSwgOmluIGlufV1cclxuICAgICAobGV0XHJcbiAgICAgIFtyZWcgKHJlZ2lzdHJ5KV1cclxuICAgICAgKGFwcGx5XHJcbiAgICAgICBjb25jYXRcclxuICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgIFtwcm9ic1xyXG4gICAgICAgICAoLT4+XHJcbiAgICAgICAgICAobWFwXHJcbiAgICAgICAgICAgKGZuIFtwcmVkIGZvcm1dICh3aGVuLW5vdCAocHJlZCB4KSBmb3JtKSlcclxuICAgICAgICAgICBwcmVkLWV4cHJzXHJcbiAgICAgICAgICAgcHJlZC1mb3JtcylcclxuICAgICAgICAgIChrZWVwIGlkZW50aXR5KVxyXG4gICAgICAgICAgc2VxKV1cclxuICAgICAgICAobWFwXHJcbiAgICAgICAgIChmbipcclxuICAgICAgICAgIFtwMV9fNDg5NDAjXVxyXG4gICAgICAgICAgKGlkZW50aXR5XHJcbiAgICAgICAgICAgezpwYXRoIHBhdGgsIDpwcmVkIHAxX180ODk0MCMsIDp2YWwgeCwgOnZpYSB2aWEsIDppbiBpbn0pKVxyXG4gICAgICAgICBwcm9icykpXHJcbiAgICAgICAobWFwXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtbayB2XV1cclxuICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAoYy9vclxyXG4gICAgICAgICAgIChub3QgKGNvbnRhaW5zPyByZWcgKGtleXMtPnNwZWNuYW1lcyBrKSkpXHJcbiAgICAgICAgICAgKHB2YWxpZD8gKGtleXMtPnNwZWNuYW1lcyBrKSB2IGspKVxyXG4gICAgICAgICAgKGV4cGxhaW4tMVxyXG4gICAgICAgICAgIChrZXlzLT5zcGVjbmFtZXMgaylcclxuICAgICAgICAgICAoa2V5cy0+c3BlY25hbWVzIGspXHJcbiAgICAgICAgICAgKGNvbmogcGF0aCBrKVxyXG4gICAgICAgICAgIHZpYVxyXG4gICAgICAgICAgIChjb25qIGluIGspXHJcbiAgICAgICAgICAgdikpKVxyXG4gICAgICAgIChzZXEgeCkpKSkpKVxyXG4gICAoZ2VuKlxyXG4gICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgIChpZlxyXG4gICAgIGdmblxyXG4gICAgIChnZm4pXHJcbiAgICAgKGxldFxyXG4gICAgICBbcm1hcFxyXG4gICAgICAgKGluY2sgcm1hcCBpZClcclxuICAgICAgIHJnZW5cclxuICAgICAgIChmbiBbayBzXSBbayAoZ2Vuc3ViIHMgb3ZlcnJpZGVzIChjb25qIHBhdGggaykgcm1hcCBrKV0pXHJcbiAgICAgICBvZ2VuXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbayBzXVxyXG4gICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAocmVjdXItbGltaXQ/IHJtYXAgaWQgcGF0aCBrKVxyXG4gICAgICAgICBbayAoZ2VuL2RlbGF5IChnZW5zdWIgcyBvdmVycmlkZXMgKGNvbmogcGF0aCBrKSBybWFwIGspKV0pKVxyXG4gICAgICAgcmVxc1xyXG4gICAgICAgKG1hcCByZ2VuIHJlcS1rZXlzIHJlcS1zcGVjcylcclxuICAgICAgIG9wdHNcclxuICAgICAgIChyZW1vdmUgbmlsPyAobWFwIG9nZW4gb3B0LWtleXMgb3B0LXNwZWNzKSldXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoZXZlcnk/IGlkZW50aXR5IChjb25jYXQgKG1hcCBzZWNvbmQgcmVxcykgKG1hcCBzZWNvbmQgb3B0cykpKVxyXG4gICAgICAgKGdlbi9iaW5kXHJcbiAgICAgICAgKGdlbi90dXBsZVxyXG4gICAgICAgICAoYW5kLWstZ2VuIHJlcSlcclxuICAgICAgICAgKG9yLWstZ2VuIG9wdClcclxuICAgICAgICAgKGFuZC1rLWdlbiByZXEtdW4pXHJcbiAgICAgICAgIChvci1rLWdlbiBvcHQtdW4pKVxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbW3JlcS1rcyBvcHQta3MgcmVxLXVuLWtzIG9wdC11bi1rc11dXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtxa3NcclxuICAgICAgICAgICAoZmxhdHRlbiAoY29uY2F0IHJlcS1rcyBvcHQta3MpKVxyXG4gICAgICAgICAgIHVucWtzXHJcbiAgICAgICAgICAgKG1hcFxyXG4gICAgICAgICAgICAoY29tcCBrZXl3b3JkIG5hbWUpXHJcbiAgICAgICAgICAgIChmbGF0dGVuIChjb25jYXQgcmVxLXVuLWtzIG9wdC11bi1rcykpKV1cclxuICAgICAgICAgICgtPj5cclxuICAgICAgICAgICAoaW50byByZXFzIG9wdHMpXHJcbiAgICAgICAgICAgKGZpbHRlclxyXG4gICAgICAgICAgICAoZm4qXHJcbiAgICAgICAgICAgICBbcDFfXzQ4OTQxI11cclxuICAgICAgICAgICAgICgoc2V0IChjb25jYXQgcWtzIHVucWtzKSkgKGZpcnN0IHAxX180ODk0MSMpKSkpXHJcbiAgICAgICAgICAgKGFwcGx5IGNvbmNhdClcclxuICAgICAgICAgICAoYXBwbHkgZ2VuL2hhc2gtbWFwKSkpKSkpKSkpXHJcbiAgICh3aXRoLWdlbiogW18gZ2ZuXSAobWFwLXNwZWMtaW1wbCAoYXNzb2MgYXJnbSA6Z2ZuIGdmbikpKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjb25zXHJcbiAgICAgJ2NsanMuc3BlYy5hbHBoYS9rZXlzXHJcbiAgICAgKGNvbmQtPlxyXG4gICAgICBbXVxyXG4gICAgICByZXFcclxuICAgICAgKGNvbmogOnJlcSByZXEpXHJcbiAgICAgIG9wdFxyXG4gICAgICAoY29uaiA6b3B0IG9wdClcclxuICAgICAgcmVxLXVuXHJcbiAgICAgIChjb25qIDpyZXEtdW4gcmVxLXVuKVxyXG4gICAgICBvcHQtdW5cclxuICAgICAgKGNvbmogOm9wdC11biBvcHQtdW4pKSkpKSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4sIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgdGhhdCBmYWlscyB0byBjb25mb3JtLCBwcmludHMgYW4gZXhwbGFuYXRpb24gdG8gKm91dCouIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpblxyXG4gXCJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgdGhhdCBmYWlscyB0byBjb25mb3JtLCBwcmludHMgYW4gZXhwbGFuYXRpb24gdG8gKm91dCouXCJcclxuIFtzcGVjIHhdXHJcbiAoZXhwbGFpbi1vdXQgKGV4cGxhaW4tZGF0YSBzcGVjIHgpKSlcclxuIn0gezpzeW0gd2l0aC1nZW4qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgZ2ZuXSl9LCA6cHJvdG9jb2wgU3BlY30gezpzeW0gb3Itc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdvciciLCA6YXJnbGlzdHMgKFtrZXlzIGZvcm1zIHByZWRzIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9yLXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ29yJ1wiXHJcbiBba2V5cyBmb3JtcyBwcmVkcyBnZm5dXHJcbiAobGV0XHJcbiAgW2lkXHJcbiAgIChyYW5kb20tdXVpZClcclxuICAga3BzXHJcbiAgICh6aXBtYXAga2V5cyBwcmVkcylcclxuICAgc3BlY3NcclxuICAgKGRlbGF5IChtYXB2IHNwZWNpemUgcHJlZHMgZm9ybXMpKVxyXG4gICBjZm9ybVxyXG4gICAoY2FzZVxyXG4gICAgKGNvdW50IHByZWRzKVxyXG4gICAgMlxyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzIHJldCAoY29uZm9ybSogKHNwZWNzIDApIHgpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3JldCAoY29uZm9ybSogKHNwZWNzIDEpIHgpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgMSkgcmV0KSkpXHJcbiAgICAgICAodGFnZ2VkLXJldCAoa2V5cyAwKSByZXQpKSkpXHJcbiAgICAzXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3MgcmV0IChjb25mb3JtKiAoc3BlY3MgMCkgeCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgIChsZXRcclxuICAgICAgICBbcmV0IChjb25mb3JtKiAoc3BlY3MgMSkgeCldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtyZXQgKGNvbmZvcm0qIChzcGVjcyAyKSB4KV1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgMikgcmV0KSkpXHJcbiAgICAgICAgICh0YWdnZWQtcmV0IChrZXlzIDEpIHJldCkpKVxyXG4gICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgMCkgcmV0KSkpKVxyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzXVxyXG4gICAgICAobG9vcFxyXG4gICAgICAgW2kgMF1cclxuICAgICAgIChpZlxyXG4gICAgICAgICg8IGkgKGNvdW50IHNwZWNzKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzcGVjIChzcGVjcyBpKV1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3JldCAoY29uZm9ybSogc3BlYyB4KV1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAgICAgKHJlY3VyIChpbmMgaSkpXHJcbiAgICAgICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgaSkgcmV0KSkpKVxyXG4gICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpKSkpXVxyXG4gIChyZWlmeVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qIFtfIHhdIChjZm9ybSB4KSlcclxuICAgKHVuZm9ybSogW18gW2sgeF1dICh1bmZvcm0gKGtwcyBrKSB4KSlcclxuICAgKGV4cGxhaW4qXHJcbiAgICBbdGhpcyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKHB2YWxpZD8gdGhpcyB4KVxyXG4gICAgIChhcHBseVxyXG4gICAgICBjb25jYXRcclxuICAgICAgKG1hcFxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW2sgZm9ybSBwcmVkXVxyXG4gICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAocHZhbGlkPyBwcmVkIHgpXHJcbiAgICAgICAgIChleHBsYWluLTEgZm9ybSBwcmVkIChjb25qIHBhdGggaykgdmlhIGluIHgpKSlcclxuICAgICAgIGtleXNcclxuICAgICAgIGZvcm1zXHJcbiAgICAgICBwcmVkcykpKSlcclxuICAgKGdlbipcclxuICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAoaWZcclxuICAgICBnZm5cclxuICAgICAoZ2ZuKVxyXG4gICAgIChsZXRcclxuICAgICAgW2dlblxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW2sgcCBmXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3JtYXAgKGluY2sgcm1hcCBpZCldXHJcbiAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgKHJlY3VyLWxpbWl0PyBybWFwIGlkIHBhdGggaylcclxuICAgICAgICAgIChnZW4vZGVsYXkgKGdlbnN1YiBwIG92ZXJyaWRlcyAoY29uaiBwYXRoIGspIHJtYXAgZikpKSkpXHJcbiAgICAgICBnc1xyXG4gICAgICAgKHJlbW92ZSBuaWw/IChtYXAgZ2VuIGtleXMgcHJlZHMgZm9ybXMpKV1cclxuICAgICAgKHdoZW4tbm90IChlbXB0eT8gZ3MpIChnZW4vb25lLW9mIGdzKSkpKSlcclxuICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChvci1zcGVjLWltcGwga2V5cyBmb3JtcyBwcmVkcyBnZm4pKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvb3IpXHJcbiAgICAgICAobWFwY2F0IHZlY3RvciBrZXlzIGZvcm1zKSkpKSkpKSlcclxuIn0gezpzeW0gKmZzcGVjLWl0ZXJhdGlvbnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmZzcGVjLWl0ZXJhdGlvbnMqXHJcbiBcIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gYW5vbnltb3VzIGZuIHNwZWNpZmllZCBieSBmc3BlYyB3aWxsIGJlIChnZW5lcmF0aXZlbHkpIHRlc3RlZCBkdXJpbmcgY29uZm9ybVwiXHJcbiAyMSlcclxuIn0gezpzeW0gU3BlYywgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGNvbmZvcm0qIGRlc2NyaWJlKiBleHBsYWluKiBnZW4qIHVuZm9ybSogd2l0aC1nZW4qKX0gezpzeW0gdW5mb3JtLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIGNyZWF0ZWQgYnkgb3IgY29tcGxpYW50IHdpdGggYSBjYWxsIHRvXG4gICdjb25mb3JtJyB3aXRoIHRoZSBzYW1lIHNwZWMsIHJldHVybnMgYSB2YWx1ZSB3aXRoIGFsbCBjb25mb3JtXG4gICBkZXN0cnVjdHVyaW5nIHVuZG9uZS4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmZvcm1cclxuIFwiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIGNyZWF0ZWQgYnkgb3IgY29tcGxpYW50IHdpdGggYSBjYWxsIHRvXFxuICAnY29uZm9ybScgd2l0aCB0aGUgc2FtZSBzcGVjLCByZXR1cm5zIGEgdmFsdWUgd2l0aCBhbGwgY29uZm9ybVxcbiAgIGRlc3RydWN0dXJpbmcgdW5kb25lLlwiXHJcbiBbc3BlYyB4XVxyXG4gKHVuZm9ybSogKHNwZWNpemUgc3BlYykgeCkpXHJcbiJ9IHs6c3ltIHZhbGlkPywgOm1ldGEgezpkb2MgIkhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgdmFsaWQgZm9yIHNwZWMuIiwgOmFyZ2xpc3RzIFtbc3BlYyB4XSBbc3BlYyB4IGZvcm1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWxpZD9cclxuIFwiSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIHdoZW4geCBpcyB2YWxpZCBmb3Igc3BlYy5cIlxyXG4gKFtzcGVjIHhdXHJcbiAgKGxldCBbc3BlYyAoc3BlY2l6ZSBzcGVjKV0gKG5vdCAoaW52YWxpZD8gKGNvbmZvcm0qIHNwZWMgeCkpKSkpXHJcbiAoW3NwZWMgeCBmb3JtXVxyXG4gIChsZXQgW3NwZWMgKHNwZWNpemUgc3BlYyBmb3JtKV0gKG5vdCAoaW52YWxpZD8gKGNvbmZvcm0qIHNwZWMgeCkpKSkpKVxyXG4ifSB7OnN5bSBnZW4sIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMsIHJldHVybnMgdGhlIGdlbmVyYXRvciBmb3IgaXQsIG9yIHRocm93cyBpZiBub25lIGNhblxuICBiZSBjb25zdHJ1Y3RlZC4gT3B0aW9uYWxseSBhbiBvdmVycmlkZXMgbWFwIGNhbiBiZSBwcm92aWRlZCB3aGljaFxuICBzaG91bGQgbWFwIHNwZWMgbmFtZXMgb3IgcGF0aHMgKHZlY3RvcnMgb2Yga2V5d29yZHMpIHRvIG5vLWFyZ1xuICBnZW5lcmF0b3ItY3JlYXRpbmcgZm5zLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2VuZXJhdG9ycyBhdCB0aG9zZVxuICBuYW1lcy9wYXRocy4gTm90ZSB0aGF0IHBhcmVudCBnZW5lcmF0b3IgKGluIHRoZSBzcGVjIG9yIG92ZXJyaWRlc1xuICBtYXApIHdpbGwgc3VwZXJzZWRlIHRob3NlIG9mIGFueSBzdWJ0cmVlcy4gQSBnZW5lcmF0b3IgZm9yIGEgcmVnZXhcbiAgb3AgbXVzdCBhbHdheXMgcmV0dXJuIGEgc2VxdWVudGlhbCBjb2xsZWN0aW9uIChpLmUuIGEgZ2VuZXJhdG9yIGZvclxuICBzLz8gc2hvdWxkIHJldHVybiBlaXRoZXIgYW4gZW1wdHkgc2VxdWVuY2UvdmVjdG9yIG9yIGFcbiAgc2VxdWVuY2UvdmVjdG9yIHdpdGggb25lIGl0ZW0gaW4gaXQpIiwgOmFyZ2xpc3RzIFtbc3BlY10gW3NwZWMgb3ZlcnJpZGVzXV19LCA6c291cmNlICIoZGVmblxyXG4gZ2VuXHJcbiBcIkdpdmVuIGEgc3BlYywgcmV0dXJucyB0aGUgZ2VuZXJhdG9yIGZvciBpdCwgb3IgdGhyb3dzIGlmIG5vbmUgY2FuXFxuICBiZSBjb25zdHJ1Y3RlZC4gT3B0aW9uYWxseSBhbiBvdmVycmlkZXMgbWFwIGNhbiBiZSBwcm92aWRlZCB3aGljaFxcbiAgc2hvdWxkIG1hcCBzcGVjIG5hbWVzIG9yIHBhdGhzICh2ZWN0b3JzIG9mIGtleXdvcmRzKSB0byBuby1hcmdcXG4gIGdlbmVyYXRvci1jcmVhdGluZyBmbnMuIFRoZXNlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmF0b3JzIGF0IHRob3NlXFxuICBuYW1lcy9wYXRocy4gTm90ZSB0aGF0IHBhcmVudCBnZW5lcmF0b3IgKGluIHRoZSBzcGVjIG9yIG92ZXJyaWRlc1xcbiAgbWFwKSB3aWxsIHN1cGVyc2VkZSB0aG9zZSBvZiBhbnkgc3VidHJlZXMuIEEgZ2VuZXJhdG9yIGZvciBhIHJlZ2V4XFxuICBvcCBtdXN0IGFsd2F5cyByZXR1cm4gYSBzZXF1ZW50aWFsIGNvbGxlY3Rpb24gKGkuZS4gYSBnZW5lcmF0b3IgZm9yXFxuICBzLz8gc2hvdWxkIHJldHVybiBlaXRoZXIgYW4gZW1wdHkgc2VxdWVuY2UvdmVjdG9yIG9yIGFcXG4gIHNlcXVlbmNlL3ZlY3RvciB3aXRoIG9uZSBpdGVtIGluIGl0KVwiXHJcbiAoW3NwZWNdIChnZW4gc3BlYyBuaWwpKVxyXG4gKFtzcGVjIG92ZXJyaWRlc11cclxuICAoZ2Vuc3ViXHJcbiAgIHNwZWNcclxuICAgb3ZlcnJpZGVzXHJcbiAgIFtdXHJcbiAgIHs6Y2xqcy5zcGVjLmFscGhhL3JlY3Vyc2lvbi1saW1pdCAqcmVjdXJzaW9uLWxpbWl0Kn1cclxuICAgc3BlYykpKVxyXG4ifSB7OnN5bSBub25jb25mb3JtaW5nLCA6bWV0YSB7OmRvYyAidGFrZXMgYSBzcGVjIGFuZCByZXR1cm5zIGEgc3BlYyB0aGF0IGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGV4Y2VwdFxuICAnY29uZm9ybScgcmV0dXJucyB0aGUgb3JpZ2luYWwgKG5vdCB0aGUgY29uZm9ybWVkKSB2YWx1ZS4gTm90ZSwgd2lsbCBzcGVjaXplIHJlZ2V4IG9wcy4iLCA6YXJnbGlzdHMgKFtzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm9uY29uZm9ybWluZ1xyXG4gXCJ0YWtlcyBhIHNwZWMgYW5kIHJldHVybnMgYSBzcGVjIHRoYXQgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgZXhjZXB0XFxuICAnY29uZm9ybScgcmV0dXJucyB0aGUgb3JpZ2luYWwgKG5vdCB0aGUgY29uZm9ybWVkKSB2YWx1ZS4gTm90ZSwgd2lsbCBzcGVjaXplIHJlZ2V4IG9wcy5cIlxyXG4gW3NwZWNdXHJcbiAobGV0XHJcbiAgW3NwZWMgKGRlbGF5IChzcGVjaXplIHNwZWMpKV1cclxuICAocmVpZnlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKlxyXG4gICAgW18geF1cclxuICAgIChsZXRcclxuICAgICBbcmV0IChjb25mb3JtKiBAc3BlYyB4KV1cclxuICAgICAoaWYgKGludmFsaWQ/IHJldCkgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkIHgpKSlcclxuICAgKHVuZm9ybSogW18geF0gKHVuZm9ybSogQHNwZWMgeCkpXHJcbiAgIChleHBsYWluKiBbXyBwYXRoIHZpYSBpbiB4XSAoZXhwbGFpbiogQHNwZWMgcGF0aCB2aWEgaW4geCkpXHJcbiAgIChnZW4qIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdIChnZW4qIEBzcGVjIG92ZXJyaWRlcyBwYXRoIHJtYXApKVxyXG4gICAod2l0aC1nZW4qIFtfIGdmbl0gKG5vbmNvbmZvcm1pbmcgKHdpdGgtZ2VuKiBAc3BlYyBnZm4pKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL25vbmNvbmZvcm1pbmcpXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKGRlc2NyaWJlKiBAc3BlYykpKSkpKSkpKVxyXG4ifSB7OnN5bSB1bmZvcm0qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgeV0pfSwgOnByb3RvY29sIFNwZWN9IHs6c3ltIGFiYnJldiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWJicmV2XHJcbiBbZm9ybV1cclxuIChjb25kXHJcbiAgKHNlcT8gZm9ybSlcclxuICAod2Fsay9wb3N0d2Fsa1xyXG4gICAoZm5cclxuICAgIFtmb3JtXVxyXG4gICAgKGNvbmRcclxuICAgICAoYy9hbmQgKHN5bWJvbD8gZm9ybSkgKG5hbWVzcGFjZSBmb3JtKSlcclxuICAgICAoLT4gZm9ybSBuYW1lIHN5bWJvbClcclxuICAgICAoYy9hbmQgKHNlcT8gZm9ybSkgKD0gJ2ZuIChmaXJzdCBmb3JtKSkgKD0gJ1slXSAoc2Vjb25kIGZvcm0pKSlcclxuICAgICAobGFzdCBmb3JtKVxyXG4gICAgIDplbHNlXHJcbiAgICAgZm9ybSkpXHJcbiAgIGZvcm0pXHJcbiAgKGMvYW5kIChzeW1ib2w/IGZvcm0pIChuYW1lc3BhY2UgZm9ybSkpXHJcbiAgKC0+IGZvcm0gbmFtZSBzeW1ib2wpXHJcbiAgOmVsc2VcclxuICBmb3JtKSlcclxuIn0gezpzeW0gcmVnZXg/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB4IGlmIHggaXMgYSAoY2xqcy5zcGVjLmFscGhhKSByZWdleCBvcCwgZWxzZSBsb2dpY2FsIGZhbHNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2V4P1xyXG4gXCJyZXR1cm5zIHggaWYgeCBpcyBhIChjbGpzLnNwZWMuYWxwaGEpIHJlZ2V4IG9wLCBlbHNlIGxvZ2ljYWwgZmFsc2VcIlxyXG4gW3hdXHJcbiAoYy9hbmQgKDpjbGpzLnNwZWMuYWxwaGEvb3AgeCkgeCkpXHJcbiJ9IHs6c3ltIGludC1pbi1yYW5nZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiBzdGFydCA8PSB2YWwsIHZhbCA8IGVuZCBhbmQgdmFsIGlzIGEgZml4ZWRcbiAgcHJlY2lzaW9uIGludGVnZXIuIiwgOmFyZ2xpc3RzIChbc3RhcnQgZW5kIHZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludC1pbi1yYW5nZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgc3RhcnQgPD0gdmFsLCB2YWwgPCBlbmQgYW5kIHZhbCBpcyBhIGZpeGVkXFxuICBwcmVjaXNpb24gaW50ZWdlci5cIlxyXG4gW3N0YXJ0IGVuZCB2YWxdXHJcbiAoY29uZFxyXG4gIChpbnRlZ2VyPyB2YWwpXHJcbiAgKGMvYW5kICg8PSBzdGFydCB2YWwpICg8IHZhbCBlbmQpKVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkxvbmcgdmFsKVxyXG4gIChjL2FuZCAoLmxlc3NUaGFuT3JFcXVhbCBzdGFydCB2YWwpICgubGVzc1RoYW4gdmFsIGVuZCkpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguSW50ZWdlciB2YWwpXHJcbiAgKGMvYW5kICgubGVzc1RoYW5PckVxdWFsIHN0YXJ0IHZhbCkgKC5sZXNzVGhhbiB2YWwgZW5kKSlcclxuICA6ZWxzZVxyXG4gIGZhbHNlKSlcclxuIn0gezpzeW0gc3BlYz8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHggaWYgeCBpcyBhIHNwZWMgb2JqZWN0LCBlbHNlIGxvZ2ljYWwgZmFsc2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BlYz9cclxuIFwicmV0dXJucyB4IGlmIHggaXMgYSBzcGVjIG9iamVjdCwgZWxzZSBsb2dpY2FsIGZhbHNlXCJcclxuIFt4XVxyXG4gKHdoZW4gKGltcGxlbWVudHM/IFNwZWMgeCkgeCkpXHJcbiJ9IHs6c3ltIHJlZ2lzdHJ5LCA6bWV0YSB7OmRvYyAicmV0dXJucyB0aGUgcmVnaXN0cnkgbWFwLCBwcmVmZXIgJ2dldC1zcGVjJyB0byBsb29rdXAgYSBzcGVjIGJ5IG5hbWUiLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdpc3RyeVxyXG4gXCJyZXR1cm5zIHRoZSByZWdpc3RyeSBtYXAsIHByZWZlciAnZ2V0LXNwZWMnIHRvIGxvb2t1cCBhIHNwZWMgYnkgbmFtZVwiXHJcbiBbXVxyXG4gQHJlZ2lzdHJ5LXJlZilcclxuIn0gezpzeW0gcmVwK2ltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJysnIiwgOmFyZ2xpc3RzIChbZm9ybSBwXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwK2ltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcrJ1wiXHJcbiBbZm9ybSBwXVxyXG4gKHBjYXQqXHJcbiAgezpwcyBbcCAocmVwKiBwIHAgW10gdHJ1ZSBmb3JtKV0sXHJcbiAgIDpmb3Jtc1xyXG4gICAoY2xvanVyZS5jb3JlL3ZlY1xyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgZm9ybSlcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvKilcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgZm9ybSkpKSkpKSkpKSxcclxuICAgOnJldCBbXSxcclxuICAgOnJlcCsgZm9ybX0pKVxyXG4ifSB7OnN5bSBleGVyY2lzZSwgOm1ldGEgezpkb2MgImdlbmVyYXRlcyBhIG51bWJlciAoZGVmYXVsdCAxMCkgb2YgdmFsdWVzIGNvbXBhdGlibGUgd2l0aCBzcGVjIGFuZCBtYXBzIGNvbmZvcm0gb3ZlciB0aGVtLFxuICByZXR1cm5pbmcgYSBzZXF1ZW5jZSBvZiBbdmFsIGNvbmZvcm1lZC12YWxdIHR1cGxlcy4gT3B0aW9uYWxseSB0YWtlc1xuICBhIGdlbmVyYXRvciBvdmVycmlkZXMgbWFwIGFzIHBlciBnZW4iLCA6YXJnbGlzdHMgW1tzcGVjXSBbc3BlYyBuXSBbc3BlYyBuIG92ZXJyaWRlc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4ZXJjaXNlXHJcbiBcImdlbmVyYXRlcyBhIG51bWJlciAoZGVmYXVsdCAxMCkgb2YgdmFsdWVzIGNvbXBhdGlibGUgd2l0aCBzcGVjIGFuZCBtYXBzIGNvbmZvcm0gb3ZlciB0aGVtLFxcbiAgcmV0dXJuaW5nIGEgc2VxdWVuY2Ugb2YgW3ZhbCBjb25mb3JtZWQtdmFsXSB0dXBsZXMuIE9wdGlvbmFsbHkgdGFrZXNcXG4gIGEgZ2VuZXJhdG9yIG92ZXJyaWRlcyBtYXAgYXMgcGVyIGdlblwiXHJcbiAoW3NwZWNdIChleGVyY2lzZSBzcGVjIDEwKSlcclxuIChbc3BlYyBuXSAoZXhlcmNpc2Ugc3BlYyBuIG5pbCkpXHJcbiAoW3NwZWMgbiBvdmVycmlkZXNdXHJcbiAgKG1hcFxyXG4gICAoZm4qIFtwMV9fNDg5NzIjXSAodmVjdG9yIHAxX180ODk3MiMgKGNvbmZvcm0gc3BlYyBwMV9fNDg5NzIjKSkpXHJcbiAgIChnZW4vc2FtcGxlIChnZW4gc3BlYyBvdmVycmlkZXMpIG4pKSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tZGF0YSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB4IHdoaWNoIG91Z2h0IHRvIGNvbmZvcm0sIHJldHVybnMgbmlsIGlmIHhcbiAgY29uZm9ybXMsIGVsc2UgYSBtYXAgd2l0aCBhdCBsZWFzdCB0aGUga2V5IDo6cHJvYmxlbXMgd2hvc2UgdmFsdWUgaXNcbiAgYSBjb2xsZWN0aW9uIG9mIHByb2JsZW0tbWFwcywgd2hlcmUgcHJvYmxlbS1tYXAgaGFzIGF0IGxlYXN0IDpwYXRoIDpwcmVkIGFuZCA6dmFsXG4gIGtleXMgZGVzY3JpYmluZyB0aGUgcHJlZGljYXRlIGFuZCB0aGUgdmFsdWUgdGhhdCBmYWlsZWQgYXQgdGhhdFxuICBwYXRoLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tZGF0YVxyXG4gXCJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgeCB3aGljaCBvdWdodCB0byBjb25mb3JtLCByZXR1cm5zIG5pbCBpZiB4XFxuICBjb25mb3JtcywgZWxzZSBhIG1hcCB3aXRoIGF0IGxlYXN0IHRoZSBrZXkgOjpwcm9ibGVtcyB3aG9zZSB2YWx1ZSBpc1xcbiAgYSBjb2xsZWN0aW9uIG9mIHByb2JsZW0tbWFwcywgd2hlcmUgcHJvYmxlbS1tYXAgaGFzIGF0IGxlYXN0IDpwYXRoIDpwcmVkIGFuZCA6dmFsXFxuICBrZXlzIGRlc2NyaWJpbmcgdGhlIHByZWRpY2F0ZSBhbmQgdGhlIHZhbHVlIHRoYXQgZmFpbGVkIGF0IHRoYXRcXG4gIHBhdGguXCJcclxuIFtzcGVjIHhdXHJcbiAoZXhwbGFpbi1kYXRhKlxyXG4gIHNwZWNcclxuICBbXVxyXG4gIChpZi1sZXQgW25hbWUgKHNwZWMtbmFtZSBzcGVjKV0gW25hbWVdIFtdKVxyXG4gIFtdXHJcbiAgeCkpXHJcbiJ9IHs6c3ltIHR1cGxlLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3R1cGxlJyIsIDphcmdsaXN0cyBbW2Zvcm1zIHByZWRzXSBbZm9ybXMgcHJlZHMgZ2ZuXV19LCA6c291cmNlICIoZGVmblxyXG4gdHVwbGUtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3R1cGxlJ1wiXHJcbiAoW2Zvcm1zIHByZWRzXSAodHVwbGUtaW1wbCBmb3JtcyBwcmVkcyBuaWwpKVxyXG4gKFtmb3JtcyBwcmVkcyBnZm5dXHJcbiAgKGxldFxyXG4gICBbc3BlY3MgKGRlbGF5IChtYXB2IHNwZWNpemUgcHJlZHMgZm9ybXMpKSBjbnQgKGNvdW50IHByZWRzKV1cclxuICAgKHJlaWZ5XHJcbiAgICBTcGVjaXplXHJcbiAgICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgIFNwZWNcclxuICAgIChjb25mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzXVxyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAoYy9hbmQgKHZlY3Rvcj8geCkgKD0gKGNvdW50IHgpIGNudCkpXHJcbiAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgIChsb29wXHJcbiAgICAgICAgW3JldCB4IGkgMF1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKD0gaSBjbnQpXHJcbiAgICAgICAgIHJldFxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbdiAoeCBpKSBjdiAoY29uZm9ybSogKHNwZWNzIGkpIHYpXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGludmFsaWQ/IGN2KVxyXG4gICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICAoaWYgKGlkZW50aWNhbD8gY3YgdikgcmV0IChhc3NvYyByZXQgaSBjdikpXHJcbiAgICAgICAgICAgIChpbmMgaSkpKSkpKSkpKVxyXG4gICAgKHVuZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChhc3NlcnQgKGMvYW5kICh2ZWN0b3I/IHgpICg9IChjb3VudCB4KSAoY291bnQgcHJlZHMpKSkpXHJcbiAgICAgKGxvb3BcclxuICAgICAgW3JldCB4IGkgMF1cclxuICAgICAgKGlmXHJcbiAgICAgICAoPSBpIChjb3VudCB4KSlcclxuICAgICAgIHJldFxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtjdiAoeCBpKSB2ICh1bmZvcm0gKHByZWRzIGkpIGN2KV1cclxuICAgICAgICAocmVjdXIgKGlmIChpZGVudGljYWw/IGN2IHYpIHJldCAoYXNzb2MgcmV0IGkgdikpIChpbmMgaSkpKSkpKVxyXG4gICAgKGV4cGxhaW4qXHJcbiAgICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgICAoY29uZFxyXG4gICAgICAobm90ICh2ZWN0b3I/IHgpKVxyXG4gICAgICBbezpwYXRoIHBhdGgsXHJcbiAgICAgICAgOnByZWQgJ2Nsb2p1cmUuY29yZS92ZWN0b3I/LFxyXG4gICAgICAgIDp2YWwgeCxcclxuICAgICAgICA6dmlhIHZpYSxcclxuICAgICAgICA6aW4gaW59XVxyXG4gICAgICAobm90PSAoY291bnQgeCkgKGNvdW50IHByZWRzKSlcclxuICAgICAgW3s6cGF0aCBwYXRoLFxyXG4gICAgICAgIDpwcmVkXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS89KVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL2NvdW50KVxyXG4gICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJyUpKSkpKVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAoY291bnQgcHJlZHMpKSkpKSxcclxuICAgICAgICA6dmFsIHgsXHJcbiAgICAgICAgOnZpYSB2aWEsXHJcbiAgICAgICAgOmluIGlufV1cclxuICAgICAgOmVsc2VcclxuICAgICAgKGFwcGx5XHJcbiAgICAgICBjb25jYXRcclxuICAgICAgIChtYXBcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW2kgZm9ybSBwcmVkXVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbdiAoeCBpKV1cclxuICAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgIChwdmFsaWQ/IHByZWQgdilcclxuICAgICAgICAgICAoZXhwbGFpbi0xIGZvcm0gcHJlZCAoY29uaiBwYXRoIGkpIHZpYSAoY29uaiBpbiBpKSB2KSkpKVxyXG4gICAgICAgIChyYW5nZSAoY291bnQgcHJlZHMpKVxyXG4gICAgICAgIGZvcm1zXHJcbiAgICAgICAgcHJlZHMpKSkpXHJcbiAgICAoZ2VuKlxyXG4gICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAgKGlmXHJcbiAgICAgIGdmblxyXG4gICAgICAoZ2ZuKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZ2VuXHJcbiAgICAgICAgKGZuIFtpIHAgZl0gKGdlbnN1YiBwIG92ZXJyaWRlcyAoY29uaiBwYXRoIGkpIHJtYXAgZikpXHJcbiAgICAgICAgZ3NcclxuICAgICAgICAobWFwIGdlbiAocmFuZ2UgKGNvdW50IHByZWRzKSkgcHJlZHMgZm9ybXMpXVxyXG4gICAgICAgKHdoZW4gKGV2ZXJ5PyBpZGVudGl0eSBncykgKGFwcGx5IGdlbi90dXBsZSBncykpKSkpXHJcbiAgICAod2l0aC1nZW4qIFtfIGdmbl0gKHR1cGxlLWltcGwgZm9ybXMgcHJlZHMgZ2ZuKSlcclxuICAgIChkZXNjcmliZSpcclxuICAgICBbX11cclxuICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL3R1cGxlKVxyXG4gICAgICAgIGZvcm1zKSkpKSkpKSlcclxuIn0gezpzeW0gbXVsdGktc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdtdWx0aS1zcGVjJyIsIDphcmdsaXN0cyBbW2Zvcm0gbW12YXIgcmV0YWddIFtmb3JtIG1tdmFyIHJldGFnIGdmbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bHRpLXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ211bHRpLXNwZWMnXCJcclxuIChbZm9ybSBtbXZhciByZXRhZ10gKG11bHRpLXNwZWMtaW1wbCBmb3JtIG1tdmFyIHJldGFnIG5pbCkpXHJcbiAoW2Zvcm0gbW12YXIgcmV0YWcgZ2ZuXVxyXG4gIChsZXRcclxuICAgW2lkXHJcbiAgICAocmFuZG9tLXV1aWQpXHJcbiAgICBwcmVkeFxyXG4gICAgKGZuKlxyXG4gICAgIFtwMV9fNDg5NDIjXVxyXG4gICAgIChsZXRcclxuICAgICAgW21tIEBtbXZhcl1cclxuICAgICAgKGMvYW5kXHJcbiAgICAgICAoLWdldC1tZXRob2QgbW0gKCgtZGlzcGF0Y2gtZm4gbW0pIHAxX180ODk0MiMpKVxyXG4gICAgICAgKG1tIHAxX180ODk0MiMpKSkpXHJcbiAgICBkdmFsXHJcbiAgICAoZm4qIFtwMV9fNDg5NDMjXSAoKC1kaXNwYXRjaC1mbiBAbW12YXIpIHAxX180ODk0MyMpKVxyXG4gICAgdGFnXHJcbiAgICAoaWZcclxuICAgICAoa2V5d29yZD8gcmV0YWcpXHJcbiAgICAgKGZuKiBbcDFfXzQ4OTQ0IyBwMl9fNDg5NDUjXSAoYXNzb2MgcDFfXzQ4OTQ0IyByZXRhZyBwMl9fNDg5NDUjKSlcclxuICAgICByZXRhZyldXHJcbiAgIChyZWlmeVxyXG4gICAgU3BlY2l6ZVxyXG4gICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgICBTcGVjXHJcbiAgICAoY29uZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3ByZWQgKHByZWR4IHgpXVxyXG4gICAgICAoZHQgcHJlZCB4IGZvcm0pXHJcbiAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpXHJcbiAgICAodW5mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbcHJlZCAocHJlZHggeCldXHJcbiAgICAgICh1bmZvcm0gcHJlZCB4KVxyXG4gICAgICAodGhyb3dcclxuICAgICAgIChqcy9FcnJvci5cclxuICAgICAgICAoc3RyXHJcbiAgICAgICAgIFwiTm8gbWV0aG9kIG9mOiBcIlxyXG4gICAgICAgICBmb3JtXHJcbiAgICAgICAgIFwiIGZvciBkaXNwYXRjaCB2YWx1ZTogXCJcclxuICAgICAgICAgKGR2YWwgeCkpKSkpKVxyXG4gICAgKGV4cGxhaW4qXHJcbiAgICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgICAobGV0XHJcbiAgICAgIFtkdiAoZHZhbCB4KSBwYXRoIChjb25qIHBhdGggZHYpXVxyXG4gICAgICAoaWYtbGV0XHJcbiAgICAgICBbcHJlZCAocHJlZHggeCldXHJcbiAgICAgICAoZXhwbGFpbi0xIGZvcm0gcHJlZCBwYXRoIHZpYSBpbiB4KVxyXG4gICAgICAgW3s6cGF0aCBwYXRoLFxyXG4gICAgICAgICA6cHJlZCBmb3JtLFxyXG4gICAgICAgICA6dmFsIHgsXHJcbiAgICAgICAgIDpyZWFzb24gXCJubyBtZXRob2RcIixcclxuICAgICAgICAgOnZpYSB2aWEsXHJcbiAgICAgICAgIDppbiBpbn1dKSkpXHJcbiAgICAoZ2VuKlxyXG4gICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAgKGlmXHJcbiAgICAgIGdmblxyXG4gICAgICAoZ2ZuKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZ2VuXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtbayBmXV1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3AgKGYgbmlsKV1cclxuICAgICAgICAgIChsZXRcclxuICAgICAgICAgICBbcm1hcCAoaW5jayBybWFwIGlkKV1cclxuICAgICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgICAgKHJlY3VyLWxpbWl0PyBybWFwIGlkIHBhdGggaylcclxuICAgICAgICAgICAgKGdlbi9kZWxheVxyXG4gICAgICAgICAgICAgKGdlbi9mbWFwXHJcbiAgICAgICAgICAgICAgKGZuKiBbcDFfXzQ4OTQ2I10gKHRhZyBwMV9fNDg5NDYjIGspKVxyXG4gICAgICAgICAgICAgIChnZW5zdWJcclxuICAgICAgICAgICAgICAgcFxyXG4gICAgICAgICAgICAgICBvdmVycmlkZXNcclxuICAgICAgICAgICAgICAgKGNvbmogcGF0aCBrKVxyXG4gICAgICAgICAgICAgICBybWFwXHJcbiAgICAgICAgICAgICAgIChsaXN0ICdtZXRob2QgZm9ybSBrKSkpKSkpKSlcclxuICAgICAgICBnc1xyXG4gICAgICAgICgtPj5cclxuICAgICAgICAgKG1ldGhvZHMgQG1tdmFyKVxyXG4gICAgICAgICAocmVtb3ZlIChmbiBbW2tdXSAoaW52YWxpZD8gaykpKVxyXG4gICAgICAgICAobWFwIGdlbilcclxuICAgICAgICAgKHJlbW92ZSBuaWw/KSldXHJcbiAgICAgICAod2hlbiAoZXZlcnk/IGlkZW50aXR5IGdzKSAoZ2VuL29uZS1vZiBncykpKSkpXHJcbiAgICAod2l0aC1nZW4qIFtfIGdmbl0gKG11bHRpLXNwZWMtaW1wbCBmb3JtIG1tdmFyIHJldGFnIGdmbikpXHJcbiAgICAoZGVzY3JpYmUqXHJcbiAgICAgW19dXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9tdWx0aS1zcGVjKVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBmb3JtKVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCByZXRhZykpKSkpKSkpKVxyXG4ifSB7OnN5bSBjb25mb3JtLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlLCByZXR1cm5zIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCBpZiB2YWx1ZSBkb2VzXG4gIG5vdCBtYXRjaCBzcGVjLCBlbHNlIHRoZSAocG9zc2libHkgZGVzdHJ1Y3R1cmVkKSB2YWx1ZS4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25mb3JtXHJcbiBcIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSwgcmV0dXJucyA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQgaWYgdmFsdWUgZG9lc1xcbiAgbm90IG1hdGNoIHNwZWMsIGVsc2UgdGhlIChwb3NzaWJseSBkZXN0cnVjdHVyZWQpIHZhbHVlLlwiXHJcbiBbc3BlYyB4XVxyXG4gKGNvbmZvcm0qIChzcGVjaXplIHNwZWMpIHgpKVxyXG4ifSB7OnN5bSBnZW4qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgb3ZlcnJpZGVzIHBhdGggcm1hcF0pfSwgOnByb3RvY29sIFNwZWN9IHs6c3ltIGZzcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2ZzcGVjJyIsIDphcmdsaXN0cyAoW2FyZ3NwZWMgYWZvcm0gcmV0c3BlYyByZm9ybSBmbnNwZWMgZmZvcm0gZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZnNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2ZzcGVjJ1wiXHJcbiBbYXJnc3BlYyBhZm9ybSByZXRzcGVjIHJmb3JtIGZuc3BlYyBmZm9ybSBnZm5dXHJcbiAobGV0XHJcbiAgW3NwZWNzIHs6YXJncyBhcmdzcGVjLCA6cmV0IHJldHNwZWMsIDpmbiBmbnNwZWN9XVxyXG4gIChyZWlmeVxyXG4gICBJTG9va3VwXHJcbiAgICgtbG9va3VwIFt0aGlzIGtdIChnZXQgc3BlY3MgaykpXHJcbiAgICgtbG9va3VwIFtfIGsgbm90LWZvdW5kXSAoZ2V0IHNwZWNzIGsgbm90LWZvdW5kKSlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKlxyXG4gICAgW18gZl1cclxuICAgIChpZlxyXG4gICAgIChpZm4/IGYpXHJcbiAgICAgKGlmXHJcbiAgICAgIChpZGVudGljYWw/IGYgKHZhbGlkYXRlLWZuIGYgc3BlY3MgKmZzcGVjLWl0ZXJhdGlvbnMqKSlcclxuICAgICAgZlxyXG4gICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSlcclxuICAgKHVuZm9ybSogW18gZl0gZilcclxuICAgKGV4cGxhaW4qXHJcbiAgICBbXyBwYXRoIHZpYSBpbiBmXVxyXG4gICAgKGlmXHJcbiAgICAgKGlmbj8gZilcclxuICAgICAobGV0XHJcbiAgICAgIFthcmdzICh2YWxpZGF0ZS1mbiBmIHNwZWNzIDEwMCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGlkZW50aWNhbD8gZiBhcmdzKVxyXG4gICAgICAgbmlsXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3JldCAodHJ5IChhcHBseSBmIGFyZ3MpIChjYXRjaCBqcy9FcnJvciB0IHQpKV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGluc3RhbmNlPyBqcy9FcnJvciByZXQpXHJcbiAgICAgICAgIFt7OnBhdGggcGF0aCxcclxuICAgICAgICAgICA6cHJlZCAnKGFwcGx5IGZuKSxcclxuICAgICAgICAgICA6dmFsIGFyZ3MsXHJcbiAgICAgICAgICAgOnJlYXNvbiAoLi1tZXNzYWdlIHJldCksXHJcbiAgICAgICAgICAgOnZpYSB2aWEsXHJcbiAgICAgICAgICAgOmluIGlufV1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW2NyZXQgKGR0IHJldHNwZWMgcmV0IHJmb3JtKV1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChpbnZhbGlkPyBjcmV0KVxyXG4gICAgICAgICAgIChleHBsYWluLTEgcmZvcm0gcmV0c3BlYyAoY29uaiBwYXRoIDpyZXQpIHZpYSBpbiByZXQpXHJcbiAgICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAgZm5zcGVjXHJcbiAgICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgIFtjYXJncyAoY29uZm9ybSBhcmdzcGVjIGFyZ3MpXVxyXG4gICAgICAgICAgICAgKGV4cGxhaW4tMVxyXG4gICAgICAgICAgICAgIGZmb3JtXHJcbiAgICAgICAgICAgICAgZm5zcGVjXHJcbiAgICAgICAgICAgICAgKGNvbmogcGF0aCA6Zm4pXHJcbiAgICAgICAgICAgICAgdmlhXHJcbiAgICAgICAgICAgICAgaW5cclxuICAgICAgICAgICAgICB7OmFyZ3MgY2FyZ3MsIDpyZXQgY3JldH0pKSkpKSkpKSlcclxuICAgICBbezpwYXRoIHBhdGgsIDpwcmVkICdpZm4/LCA6dmFsIGYsIDp2aWEgdmlhLCA6aW4gaW59XSkpXHJcbiAgIChnZW4qXHJcbiAgICBbXyBvdmVycmlkZXMgXyBfXVxyXG4gICAgKGlmXHJcbiAgICAgZ2ZuXHJcbiAgICAgKGdmbilcclxuICAgICAoZ2VuL3JldHVyblxyXG4gICAgICAoZm5cclxuICAgICAgIFsmIGFyZ3NdXHJcbiAgICAgICAoYXNzZXJ0XHJcbiAgICAgICAgKHB2YWxpZD8gYXJnc3BlYyBhcmdzKVxyXG4gICAgICAgICh3aXRoLW91dC1zdHIgKGV4cGxhaW4gYXJnc3BlYyBhcmdzKSkpXHJcbiAgICAgICAoZ2VuL2dlbmVyYXRlIChnZW4gcmV0c3BlYyBvdmVycmlkZXMpKSkpKSlcclxuICAgKHdpdGgtZ2VuKlxyXG4gICAgW18gZ2ZuXVxyXG4gICAgKGZzcGVjLWltcGwgYXJnc3BlYyBhZm9ybSByZXRzcGVjIHJmb3JtIGZuc3BlYyBmZm9ybSBnZm4pKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvZnNwZWMpXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgOmFyZ3MpXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgYWZvcm0pXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgOnJldClcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCByZm9ybSlcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCA6Zm4pXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgZmZvcm0pKSkpKSkpKVxyXG4ifSB7OnN5bSAqY29sbC1jaGVjay1saW1pdCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqY29sbC1jaGVjay1saW1pdCpcclxuIFwiVGhlIG51bWJlciBvZiBpdGVtcyB2YWxpZGF0ZWQgaW4gYSBjb2xsZWN0aW9uIHNwZWMnZWQgd2l0aCAnZXZlcnknXCJcclxuIDEwMSlcclxuIn0gezpzeW0gZ2V0LXNwZWMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHNwZWMgcmVnaXN0ZXJlZCBmb3Iga2V5d29yZC9zeW1ib2wvdmFyIGssIG9yIG5pbC4iLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXNwZWNcclxuIFwiUmV0dXJucyBzcGVjIHJlZ2lzdGVyZWQgZm9yIGtleXdvcmQvc3ltYm9sL3ZhciBrLCBvciBuaWwuXCJcclxuIFtrXVxyXG4gKGdldCAocmVnaXN0cnkpIChpZiAoa2V5d29yZD8gaykgayAoLT5zeW0gaykpKSlcclxuIn0gezpzeW0gZXZlcnktaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZXZlcnknLCAnZXZlcnkta3YnLCAnY29sbC1vZicgb3IgJ21hcC1vZiciLCA6YXJnbGlzdHMgW1tmb3JtIHByZWQgb3B0c10gW2Zvcm0gcHJlZCB7Y29uZm9ybS1pbnRvIDppbnRvLCBkZXNjcmliZS1mb3JtIDpjbGpzLnNwZWMuYWxwaGEvZGVzY3JpYmUsIDprZXlzIFtraW5kIDpjbGpzLnNwZWMuYWxwaGEva2luZC1mb3JtIGNvdW50IG1heC1jb3VudCBtaW4tY291bnQgZGlzdGluY3QgZ2VuLW1heCA6Y2xqcy5zcGVjLmFscGhhL2tmbiA6Y2xqcy5zcGVjLmFscGhhL2NwcmVkIGNvbmZvcm0ta2V5cyA6Y2xqcy5zcGVjLmFscGhhL2NvbmZvcm0tYWxsXSwgOm9yIHtnZW4tbWF4IDIwfSwgOmFzIG9wdHN9IGdmbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2ZXJ5LWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdldmVyeScsICdldmVyeS1rdicsICdjb2xsLW9mJyBvciAnbWFwLW9mJ1wiXHJcbiAoW2Zvcm0gcHJlZCBvcHRzXSAoZXZlcnktaW1wbCBmb3JtIHByZWQgb3B0cyBuaWwpKVxyXG4gKFtmb3JtXHJcbiAgIHByZWRcclxuICAge2NvbmZvcm0taW50byA6aW50byxcclxuICAgIGRlc2NyaWJlLWZvcm0gOmNsanMuc3BlYy5hbHBoYS9kZXNjcmliZSxcclxuICAgIDprZXlzXHJcbiAgICBba2luZFxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEva2luZC1mb3JtXHJcbiAgICAgY291bnRcclxuICAgICBtYXgtY291bnRcclxuICAgICBtaW4tY291bnRcclxuICAgICBkaXN0aW5jdFxyXG4gICAgIGdlbi1tYXhcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2tmblxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEvY3ByZWRcclxuICAgICBjb25mb3JtLWtleXNcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2NvbmZvcm0tYWxsXSxcclxuICAgIDpvciB7Z2VuLW1heCAyMH0sXHJcbiAgICA6YXMgb3B0c31cclxuICAgZ2ZuXVxyXG4gIChsZXRcclxuICAgW2dlbi1pbnRvXHJcbiAgICAoaWYgY29uZm9ybS1pbnRvIChlbXB0eSBjb25mb3JtLWludG8pIChnZXQgZW1wdHktY29sbCBraW5kLWZvcm0pKVxyXG4gICAgc3BlY1xyXG4gICAgKGRlbGF5IChzcGVjaXplIHByZWQpKVxyXG4gICAgY2hlY2s/XHJcbiAgICAoZm4qIFtwMV9fNDg5NTcjXSAodmFsaWQ/IEBzcGVjIHAxX180ODk1NyMpKVxyXG4gICAga2ZuXHJcbiAgICAoYy9vciBrZm4gKGZuIFtpIHZdIGkpKVxyXG4gICAgYWRkY3ZcclxuICAgIChmbiBbcmV0IGkgdiBjdl0gKGNvbmogcmV0IGN2KSlcclxuICAgIGNmbnNcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChjb25kXHJcbiAgICAgIChjL2FuZFxyXG4gICAgICAgKHZlY3Rvcj8geClcclxuICAgICAgIChjL29yIChub3QgY29uZm9ybS1pbnRvKSAodmVjdG9yPyBjb25mb3JtLWludG8pKSlcclxuICAgICAgW2lkZW50aXR5XHJcbiAgICAgICAoZm4gW3JldCBpIHYgY3ZdIChpZiAoaWRlbnRpY2FsPyB2IGN2KSByZXQgKGFzc29jIHJldCBpIGN2KSkpXHJcbiAgICAgICBpZGVudGl0eV1cclxuICAgICAgKGMvYW5kXHJcbiAgICAgICAobWFwPyB4KVxyXG4gICAgICAgKGMvb3IgKGMvYW5kIGtpbmQgKG5vdCBjb25mb3JtLWludG8pKSAobWFwPyBjb25mb3JtLWludG8pKSlcclxuICAgICAgWyhpZiBjb25mb3JtLWtleXMgZW1wdHkgaWRlbnRpdHkpXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbcmV0IGkgdiBjdl1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGMvYW5kIChpZGVudGljYWw/IHYgY3YpIChub3QgY29uZm9ybS1rZXlzKSlcclxuICAgICAgICAgcmV0XHJcbiAgICAgICAgIChhc3NvYyByZXQgKG50aCAoaWYgY29uZm9ybS1rZXlzIGN2IHYpIDApIChudGggY3YgMSkpKSlcclxuICAgICAgIGlkZW50aXR5XVxyXG4gICAgICAoYy9vclxyXG4gICAgICAgKGxpc3Q/IGNvbmZvcm0taW50bylcclxuICAgICAgIChzZXE/IGNvbmZvcm0taW50bylcclxuICAgICAgIChjL2FuZCAobm90IGNvbmZvcm0taW50bykgKGMvb3IgKGxpc3Q/IHgpIChzZXE/IHgpKSkpXHJcbiAgICAgIFtlbXB0eSBhZGRjdiByZXZlcnNlXVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICBbKGZuKiBbcDFfXzQ4OTU4I10gKGVtcHR5IChjL29yIGNvbmZvcm0taW50byBwMV9fNDg5NTgjKSkpXHJcbiAgICAgICBhZGRjdlxyXG4gICAgICAgaWRlbnRpdHldKSldXHJcbiAgIChyZWlmeVxyXG4gICAgU3BlY2l6ZVxyXG4gICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgICBTcGVjXHJcbiAgICAoY29uZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWMgQHNwZWNdXHJcbiAgICAgIChjb25kXHJcbiAgICAgICAobm90IChjcHJlZCB4KSlcclxuICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgY29uZm9ybS1hbGxcclxuICAgICAgIChsZXRcclxuICAgICAgICBbW2luaXQgYWRkIGNvbXBsZXRlXSAoY2ZucyB4KV1cclxuICAgICAgICAobG9vcFxyXG4gICAgICAgICBbcmV0IChpbml0IHgpIGkgMCBbdiAmIHZzIDphcyB2c2VxXSAoc2VxIHgpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIHZzZXFcclxuICAgICAgICAgIChsZXRcclxuICAgICAgICAgICBbY3YgKGNvbmZvcm0qIHNwZWMgdildXHJcbiAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgIChpbnZhbGlkPyBjdilcclxuICAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICAgIChyZWN1ciAoYWRkIHJldCBpIHYgY3YpIChpbmMgaSkgdnMpKSlcclxuICAgICAgICAgIChjb21wbGV0ZSByZXQpKSkpXHJcbiAgICAgICA6ZWxzZVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGluZGV4ZWQ/IHgpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbc3RlcCAobWF4IDEgKGxvbmcgKC8gKGMvY291bnQgeCkgKmNvbGwtY2hlY2stbGltaXQqKSkpXVxyXG4gICAgICAgICAobG9vcFxyXG4gICAgICAgICAgW2kgMF1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICg+PSBpIChjL2NvdW50IHgpKVxyXG4gICAgICAgICAgIHhcclxuICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgKHZhbGlkPyBzcGVjIChudGggeCBpKSlcclxuICAgICAgICAgICAgKHJlY3VyIChjLysgaSBzdGVwKSlcclxuICAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSkpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2xpbWl0ICpjb2xsLWNoZWNrLWxpbWl0Kl1cclxuICAgICAgICAgKGxvb3BcclxuICAgICAgICAgIFtpIDAgW3YgJiB2cyA6YXMgdnNlcV0gKHNlcSB4KV1cclxuICAgICAgICAgIChjb25kXHJcbiAgICAgICAgICAgKGMvb3IgKG5pbD8gdnNlcSkgKD0gaSBsaW1pdCkpXHJcbiAgICAgICAgICAgeFxyXG4gICAgICAgICAgICh2YWxpZD8gc3BlYyB2KVxyXG4gICAgICAgICAgIChyZWN1ciAoaW5jIGkpIHZzKVxyXG4gICAgICAgICAgIDplbHNlXHJcbiAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSkpKSkpKVxyXG4gICAgKHVuZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChpZlxyXG4gICAgICBjb25mb3JtLWFsbFxyXG4gICAgICAobGV0XHJcbiAgICAgICBbc3BlYyBAc3BlYyBbaW5pdCBhZGQgY29tcGxldGVdIChjZm5zIHgpXVxyXG4gICAgICAgKGxvb3BcclxuICAgICAgICBbcmV0IChpbml0IHgpIGkgMCBbdiAmIHZzIDphcyB2c2VxXSAoc2VxIHgpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoPj0gaSAoYy9jb3VudCB4KSlcclxuICAgICAgICAgKGNvbXBsZXRlIHJldClcclxuICAgICAgICAgKHJlY3VyIChhZGQgcmV0IGkgdiAodW5mb3JtKiBzcGVjIHYpKSAoaW5jIGkpIHZzKSkpKVxyXG4gICAgICB4KSlcclxuICAgIChleHBsYWluKlxyXG4gICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAgKGMvb3JcclxuICAgICAgKGNvbGwtcHJvYlxyXG4gICAgICAgeFxyXG4gICAgICAga2luZFxyXG4gICAgICAga2luZC1mb3JtXHJcbiAgICAgICBkaXN0aW5jdFxyXG4gICAgICAgY291bnRcclxuICAgICAgIG1pbi1jb3VudFxyXG4gICAgICAgbWF4LWNvdW50XHJcbiAgICAgICBwYXRoXHJcbiAgICAgICB2aWFcclxuICAgICAgIGluKVxyXG4gICAgICAoYXBwbHlcclxuICAgICAgIGNvbmNhdFxyXG4gICAgICAgKChpZiBjb25mb3JtLWFsbCBpZGVudGl0eSAocGFydGlhbCB0YWtlICpjb2xsLWVycm9yLWxpbWl0KikpXHJcbiAgICAgICAgKGtlZXBcclxuICAgICAgICAgaWRlbnRpdHlcclxuICAgICAgICAgKG1hcFxyXG4gICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgW2kgdl1cclxuICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgIFtrIChrZm4gaSB2KV1cclxuICAgICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAgICAoY2hlY2s/IHYpXHJcbiAgICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgICAgW3Byb2IgKGV4cGxhaW4tMSBmb3JtIHByZWQgcGF0aCB2aWEgKGNvbmogaW4gaykgdildXHJcbiAgICAgICAgICAgICAgcHJvYikpKSlcclxuICAgICAgICAgIChyYW5nZSlcclxuICAgICAgICAgIHgpKSkpKSlcclxuICAgIChnZW4qXHJcbiAgICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgICAoaWZcclxuICAgICAgZ2ZuXHJcbiAgICAgIChnZm4pXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtwZ2VuIChnZW5zdWIgcHJlZCBvdmVycmlkZXMgcGF0aCBybWFwIGZvcm0pXVxyXG4gICAgICAgKGdlbi9iaW5kXHJcbiAgICAgICAgKGNvbmRcclxuICAgICAgICAgZ2VuLWludG9cclxuICAgICAgICAgKGdlbi9yZXR1cm4gZ2VuLWludG8pXHJcbiAgICAgICAgIGtpbmRcclxuICAgICAgICAgKGdlbi9mbWFwXHJcbiAgICAgICAgICAoZm4qXHJcbiAgICAgICAgICAgW3AxX180ODk1OSNdXHJcbiAgICAgICAgICAgKGlmIChlbXB0eT8gcDFfXzQ4OTU5IykgcDFfXzQ4OTU5IyAoZW1wdHkgcDFfXzQ4OTU5IykpKVxyXG4gICAgICAgICAgKGdlbnN1YiBraW5kIG92ZXJyaWRlcyBwYXRoIHJtYXAgZm9ybSkpXHJcbiAgICAgICAgIDplbHNlXHJcbiAgICAgICAgIChnZW4vcmV0dXJuIFtdKSlcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW2luaXRdXHJcbiAgICAgICAgIChnZW4vZm1hcFxyXG4gICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgIFtwMV9fNDg5NjAjXVxyXG4gICAgICAgICAgIChpZiAodmVjdG9yPyBpbml0KSBwMV9fNDg5NjAjIChpbnRvIGluaXQgcDFfXzQ4OTYwIykpKVxyXG4gICAgICAgICAgKGNvbmRcclxuICAgICAgICAgICBkaXN0aW5jdFxyXG4gICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICBjb3VudFxyXG4gICAgICAgICAgICAoZ2VuL3ZlY3Rvci1kaXN0aW5jdFxyXG4gICAgICAgICAgICAgcGdlblxyXG4gICAgICAgICAgICAgezpudW0tZWxlbWVudHMgY291bnQsIDptYXgtdHJpZXMgMTAwfSlcclxuICAgICAgICAgICAgKGdlbi92ZWN0b3ItZGlzdGluY3RcclxuICAgICAgICAgICAgIHBnZW5cclxuICAgICAgICAgICAgIHs6bWluLWVsZW1lbnRzIChjL29yIG1pbi1jb3VudCAwKSxcclxuICAgICAgICAgICAgICA6bWF4LWVsZW1lbnRzXHJcbiAgICAgICAgICAgICAgKGMvb3JcclxuICAgICAgICAgICAgICAgbWF4LWNvdW50XHJcbiAgICAgICAgICAgICAgIChtYXggZ2VuLW1heCAoYy8qIDIgKGMvb3IgbWluLWNvdW50IDApKSkpLFxyXG4gICAgICAgICAgICAgIDptYXgtdHJpZXMgMTAwfSkpXHJcbiAgICAgICAgICAgY291bnRcclxuICAgICAgICAgICAoZ2VuL3ZlY3RvciBwZ2VuIGNvdW50KVxyXG4gICAgICAgICAgIChjL29yIG1pbi1jb3VudCBtYXgtY291bnQpXHJcbiAgICAgICAgICAgKGdlbi92ZWN0b3JcclxuICAgICAgICAgICAgcGdlblxyXG4gICAgICAgICAgICAoYy9vciBtaW4tY291bnQgMClcclxuICAgICAgICAgICAgKGMvb3IgbWF4LWNvdW50IChtYXggZ2VuLW1heCAoYy8qIDIgKGMvb3IgbWluLWNvdW50IDApKSkpKVxyXG4gICAgICAgICAgIDplbHNlXHJcbiAgICAgICAgICAgKGdlbi92ZWN0b3IgcGdlbiAwIGdlbi1tYXgpKSkpKSkpKVxyXG4gICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChldmVyeS1pbXBsIGZvcm0gcHJlZCBvcHRzIGdmbikpXHJcbiAgICAoZGVzY3JpYmUqXHJcbiAgICAgW19dXHJcbiAgICAgKGMvb3JcclxuICAgICAgZGVzY3JpYmUtZm9ybVxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL2V2ZXJ5KVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKHMvbXJlcyBmb3JtKSlcclxuICAgICAgICAgKG1hcGNhdCBpZGVudGl0eSBvcHRzKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBzcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnIiwgOmFyZ2xpc3RzIFtbZm9ybSBwcmVkIGdmbiBjcHJlZD9dIFtmb3JtIHByZWQgZ2ZuIGNwcmVkPyB1bmNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJ1wiXHJcbiAoW2Zvcm0gcHJlZCBnZm4gY3ByZWQ/XSAoc3BlYy1pbXBsIGZvcm0gcHJlZCBnZm4gY3ByZWQ/IG5pbCkpXHJcbiAoW2Zvcm0gcHJlZCBnZm4gY3ByZWQ/IHVuY11cclxuICAoY29uZFxyXG4gICAoc3BlYz8gcHJlZClcclxuICAgKGNvbmQtPiBwcmVkIGdmbiAod2l0aC1nZW4gZ2ZuKSlcclxuICAgKHJlZ2V4PyBwcmVkKVxyXG4gICAocmVnZXgtc3BlYy1pbXBsIHByZWQgZ2ZuKVxyXG4gICAoaWRlbnQ/IHByZWQpXHJcbiAgIChjb25kLT4gKHRoZS1zcGVjIHByZWQpIGdmbiAod2l0aC1nZW4gZ2ZuKSlcclxuICAgOmVsc2VcclxuICAgKHJlaWZ5XHJcbiAgICBTcGVjaXplXHJcbiAgICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgIFNwZWNcclxuICAgIChjb25mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGxldFxyXG4gICAgICBbcmV0IChwcmVkIHgpXVxyXG4gICAgICAoaWYgY3ByZWQ/IHJldCAoaWYgcmV0IHggOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSkpKVxyXG4gICAgKHVuZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChpZlxyXG4gICAgICBjcHJlZD9cclxuICAgICAgKGlmIHVuYyAodW5jIHgpICh0aHJvdyAoanMvRXJyb3IuIFwibm8gdW5mb3JtIGZuIGZvciBjb25mb3JtZXJcIikpKVxyXG4gICAgICB4KSlcclxuICAgIChleHBsYWluKlxyXG4gICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAgKHdoZW5cclxuICAgICAgKGludmFsaWQ/IChkdCBwcmVkIHggZm9ybSBjcHJlZD8pKVxyXG4gICAgICBbezpwYXRoIHBhdGgsIDpwcmVkIGZvcm0sIDp2YWwgeCwgOnZpYSB2aWEsIDppbiBpbn1dKSlcclxuICAgIChnZW4qIFtfIF8gXyBfXSAoaWYgZ2ZuIChnZm4pIChnZW4vZ2VuLWZvci1wcmVkIHByZWQpKSlcclxuICAgICh3aXRoLWdlbiogW18gZ2ZuXSAoc3BlYy1pbXBsIGZvcm0gcHJlZCBnZm4gY3ByZWQ/IHVuYykpXHJcbiAgICAoZGVzY3JpYmUqIFtfXSBmb3JtKSkpKSlcclxuIn0gezpzeW0gaW52YWxpZD8sIDptZXRhIHs6ZG9jICJ0ZXN0cyB0aGUgdmFsaWRpdHkgb2YgYSBjb25mb3JtIHJldHVybiB2YWx1ZSIsIDphcmdsaXN0cyAoW3JldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludmFsaWQ/XHJcbiBcInRlc3RzIHRoZSB2YWxpZGl0eSBvZiBhIGNvbmZvcm0gcmV0dXJuIHZhbHVlXCJcclxuIFtyZXRdXHJcbiAoa2V5d29yZC1pZGVudGljYWw/IDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCByZXQpKVxyXG4ifSB7OnN5bSBhbXAtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnJiciLCA6YXJnbGlzdHMgKFtyZSByZS1mb3JtIHByZWRzIHByZWQtZm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbXAtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJyYnXCJcclxuIFtyZSByZS1mb3JtIHByZWRzIHByZWQtZm9ybXNdXHJcbiB7OmNsanMuc3BlYy5hbHBoYS9vcCA6Y2xqcy5zcGVjLmFscGhhL2FtcCxcclxuICA6cDEgcmUsXHJcbiAgOmFtcCByZS1mb3JtLFxyXG4gIDpwcyBwcmVkcyxcclxuICA6Zm9ybXMgcHJlZC1mb3Jtc30pXHJcbiJ9IHs6c3ltIGNhdC1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdjYXQnIiwgOmFyZ2xpc3RzIChba3MgcHMgZm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYXQtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2NhdCdcIlxyXG4gW2tzIHBzIGZvcm1zXVxyXG4gKHBjYXQqIHs6a3Mga3MsIDpwcyBwcywgOmZvcm1zIGZvcm1zLCA6cmV0IHt9fSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tc3RyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHRoYXQgZmFpbHMgdG8gY29uZm9ybSwgcmV0dXJucyBhbiBleHBsYW5hdGlvbiBhcyBhIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXN0clxyXG4gXCJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgdGhhdCBmYWlscyB0byBjb25mb3JtLCByZXR1cm5zIGFuIGV4cGxhbmF0aW9uIGFzIGEgc3RyaW5nLlwiXHJcbiBbc3BlYyB4XVxyXG4gKHdpdGgtb3V0LXN0ciAoZXhwbGFpbiBzcGVjIHgpKSlcclxuIn0gezpzeW0gKmNvbXBpbGUtYXNzZXJ0cyosIDptZXRhIHs6ZG9jICJJZiB0cnVlLCBjb21waWxlciB3aWxsIGVuYWJsZSBzcGVjIGFzc2VydHMsIHdoaWNoIGFyZSB0aGVuXG5zdWJqZWN0IHRvIHJ1bnRpbWUgY29udHJvbCB2aWEgY2hlY2stYXNzZXJ0cz8gSWYgZmFsc2UsIGNvbXBpbGVyXG53aWxsIGVsaW1pbmF0ZSBhbGwgc3BlYyBhc3NlcnQgb3ZlcmhlYWQuIFNlZSAnYXNzZXJ0Jy5cbkluaXRpYWxseSBzZXQgdG8gdGhlIG5lZ2F0aW9uIG9mIHRoZSAnOmVsaWRlLWFzc2VydHMnIGNvbXBpbGVyIG9wdGlvbi5cbkRlZmF1bHRzIHRvIHRydWUuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpjb21waWxlLWFzc2VydHMqIChzL2luaXQtY29tcGlsZS1hc3NlcnRzKSlcclxuIn0gezpzeW0gd2l0aC1nZW4sIDptZXRhIHs6ZG9jICJUYWtlcyBhIHNwZWMgYW5kIGEgbm8tYXJnLCBnZW5lcmF0b3ItcmV0dXJuaW5nIGZuIGFuZCByZXR1cm5zIGEgdmVyc2lvbiBvZiB0aGF0IHNwZWMgdGhhdCB1c2VzIHRoYXQgZ2VuZXJhdG9yIiwgOmFyZ2xpc3RzIChbc3BlYyBnZW4tZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aXRoLWdlblxyXG4gXCJUYWtlcyBhIHNwZWMgYW5kIGEgbm8tYXJnLCBnZW5lcmF0b3ItcmV0dXJuaW5nIGZuIGFuZCByZXR1cm5zIGEgdmVyc2lvbiBvZiB0aGF0IHNwZWMgdGhhdCB1c2VzIHRoYXQgZ2VuZXJhdG9yXCJcclxuIFtzcGVjIGdlbi1mbl1cclxuIChsZXRcclxuICBbc3BlYyAocmVnLXJlc29sdmUgc3BlYyldXHJcbiAgKGlmXHJcbiAgIChyZWdleD8gc3BlYylcclxuICAgKGFzc29jIHNwZWMgOmNsanMuc3BlYy5hbHBoYS9nZm4gZ2VuLWZuKVxyXG4gICAod2l0aC1nZW4qIChzcGVjaXplIHNwZWMpIGdlbi1mbikpKSlcclxuIn0gezpzeW0gY29uZm9ybSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6cHJvdG9jb2wgU3BlY30gezpzeW0gY2hlY2stYXNzZXJ0cz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBzZXQgYnkgY2hlY2stYXNzZXJ0cy4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay1hc3NlcnRzP1xyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBzZXQgYnkgY2hlY2stYXNzZXJ0cy5cIlxyXG4gW11cclxuICpydW50aW1lLWFzc2VydHMqKVxyXG4ifSB7OnN5bSByZXAtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnKiciLCA6YXJnbGlzdHMgKFtmb3JtIHBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXAtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJyonXCJcclxuIFtmb3JtIHBdXHJcbiAocmVwKiBwIHAgW10gZmFsc2UgZm9ybSkpXHJcbiJ9IHs6c3ltIGRlc2NyaWJlLCA6bWV0YSB7OmRvYyAicmV0dXJucyBhbiBhYmJyZXZpYXRlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlYyBhcyBkYXRhIiwgOmFyZ2xpc3RzIChbc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc2NyaWJlXHJcbiBcInJldHVybnMgYW4gYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWMgYXMgZGF0YVwiXHJcbiBbc3BlY11cclxuIChhYmJyZXYgKGZvcm0gc3BlYykpKVxyXG4ifSB7OnN5bSBleHBsYWluLW91dCwgOm1ldGEgezpkb2MgIlByaW50cyBleHBsYW5hdGlvbiBkYXRhIChwZXIgJ2V4cGxhaW4tZGF0YScpIHRvICpvdXQqIHVzaW5nIHRoZSBwcmludGVyIGluICpleHBsYWluLW91dCosXG4gICAgYnkgZGVmYXVsdCBleHBsYWluLXByaW50ZXIuIiwgOmFyZ2xpc3RzIChbZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLW91dFxyXG4gXCJQcmludHMgZXhwbGFuYXRpb24gZGF0YSAocGVyICdleHBsYWluLWRhdGEnKSB0byAqb3V0KiB1c2luZyB0aGUgcHJpbnRlciBpbiAqZXhwbGFpbi1vdXQqLFxcbiAgICBieSBkZWZhdWx0IGV4cGxhaW4tcHJpbnRlci5cIlxyXG4gW2VkXVxyXG4gKCpleHBsYWluLW91dCogZWQpKVxyXG4ifSB7OnN5bSBzcGVjaXplKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtfXSBbXyBmb3JtXSl9LCA6cHJvdG9jb2wgU3BlY2l6ZX0gezpzeW0gbWF5YmUtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnPyciLCA6YXJnbGlzdHMgKFtwIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXliZS1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnPydcIlxyXG4gW3AgZm9ybV1cclxuIChhc3NvY1xyXG4gIChhbHQqXHJcbiAgIFtwIChhY2NlcHQgOmNsanMuc3BlYy5hbHBoYS9uaWwpXVxyXG4gICBuaWxcclxuICAgW2Zvcm0gOmNsanMuc3BlYy5hbHBoYS9uaWxdKVxyXG4gIDptYXliZVxyXG4gIGZvcm0pKVxyXG4ifSB7OnN5bSBleHBsYWluKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIHBhdGggdmlhIGluIHhdKX0sIDpwcm90b2NvbCBTcGVjfSksIGNsanMucmVhZGVyICh7OnN5bSAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiAoYXRvbSBuaWwpKVxyXG4ifSB7OnN5bSByZWFkLCA6bWV0YSB7OmRvYyAiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIGNsanMudG9vbHMucmVhZGVyLnJlYWRlci10eXBlcy9JUHVzaGJhY2tSZWFkZXIuXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlIG90aGVyd2lzZSByZXR1cm5zIGVvZi5cbiAgIElmIG5vIHJlYWRlciBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXG5cbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXG5cbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkIGRvZXNuJ3QgZGVwZW5kIG9uIGR5bmFtaWMgVmFycywgYWxsIGNvbmZpZ3VyYXRpb25cbiAgIGlzIGRvbmUgYnkgcGFzc2luZyBhbiBvcHQgbWFwLlxuXG4gICBvcHRzIGlzIGEgbWFwIHRoYXQgY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXlzOlxuICAgOmVvZiAtIHZhbHVlIHRvIHJldHVybiBvbiBlbmQtb2YtZmlsZS4gV2hlbiBub3Qgc3VwcGxpZWQsIGVvZiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgOnJlYWRlcnMgIC0gYSBtYXAgb2YgdGFnIHN5bWJvbHMgdG8gZGF0YS1yZWFkZXIgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgYmVmb3JlIGRlZmF1bHQtZGF0YS1yZWFkZXJzLlxuICAgICAgICAgICAgICBXaGVuIG5vdCBzdXBwbGllZCwgb25seSB0aGUgZGVmYXVsdC1kYXRhLXJlYWRlcnMgd2lsbCBiZSB1c2VkLlxuICAgOmRlZmF1bHQgLSBBIGZ1bmN0aW9uIG9mIHR3byBhcmdzLCB0aGF0IHdpbGwsIGlmIHByZXNlbnQgYW5kIG5vIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcsXG4gICAgICAgICAgICAgIGJlIGNhbGxlZCB3aXRoIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS4iLCA6YXJnbGlzdHMgW1tyZWFkZXJdIFt7OmtleXMgW2VvZl0sIDphcyBvcHRzfSByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBlb2Ygb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRcclxuIFwiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIGNsanMudG9vbHMucmVhZGVyLnJlYWRlci10eXBlcy9JUHVzaGJhY2tSZWFkZXIuXFxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZSBvdGhlcndpc2UgcmV0dXJucyBlb2YuXFxuICAgSWYgbm8gcmVhZGVyIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cXG5cXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcXG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcXG5cXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBkb2Vzbid0IGRlcGVuZCBvbiBkeW5hbWljIFZhcnMsIGFsbCBjb25maWd1cmF0aW9uXFxuICAgaXMgZG9uZSBieSBwYXNzaW5nIGFuIG9wdCBtYXAuXFxuXFxuICAgb3B0cyBpcyBhIG1hcCB0aGF0IGNhbiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcga2V5czpcXG4gICA6ZW9mIC0gdmFsdWUgdG8gcmV0dXJuIG9uIGVuZC1vZi1maWxlLiBXaGVuIG5vdCBzdXBwbGllZCwgZW9mIHRocm93cyBhbiBleGNlcHRpb24uXFxuICAgOnJlYWRlcnMgIC0gYSBtYXAgb2YgdGFnIHN5bWJvbHMgdG8gZGF0YS1yZWFkZXIgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgYmVmb3JlIGRlZmF1bHQtZGF0YS1yZWFkZXJzLlxcbiAgICAgICAgICAgICAgV2hlbiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIHdpbGwgYmUgdXNlZC5cXG4gICA6ZGVmYXVsdCAtIEEgZnVuY3Rpb24gb2YgdHdvIGFyZ3MsIHRoYXQgd2lsbCwgaWYgcHJlc2VudCBhbmQgbm8gcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyxcXG4gICAgICAgICAgICAgIGJlIGNhbGxlZCB3aXRoIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS5cIlxyXG4gKFtyZWFkZXJdXHJcbiAgKGVkbi9yZWFkXHJcbiAgIHs6cmVhZGVycyBAKnRhZy10YWJsZSosXHJcbiAgICA6ZGVmYXVsdCBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qLFxyXG4gICAgOmVvZiBuaWx9XHJcbiAgIHJlYWRlcikpXHJcbiAoW3s6a2V5cyBbZW9mXSwgOmFzIG9wdHN9IHJlYWRlcl1cclxuICAoZWRuL3JlYWRcclxuICAgKHVwZGF0ZVxyXG4gICAgKG1lcmdlIG9wdHMgezpkZWZhdWx0IEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbip9KVxyXG4gICAgOnJlYWRlcnNcclxuICAgIChmbiBbbV0gKG1lcmdlIEAqdGFnLXRhYmxlKiBtKSkpXHJcbiAgIHJlYWRlcikpXHJcbiAoW3JlYWRlciBlb2YtZXJyb3I/IGVvZiBvcHRzXVxyXG4gIChlZG4vcmVhZFxyXG4gICByZWFkZXJcclxuICAgZW9mLWVycm9yP1xyXG4gICBlb2ZcclxuICAgKHVwZGF0ZVxyXG4gICAgKG1lcmdlIG9wdHMgezpkZWZhdWx0IEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbip9KVxyXG4gICAgOnJlYWRlcnNcclxuICAgIChmbiBbbV0gKG1lcmdlIEAqdGFnLXRhYmxlKiBtKSkpKSkpXHJcbiJ9IHs6c3ltICp0YWctdGFibGUqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKnRhZy10YWJsZSpcclxuIChhdG9tXHJcbiAgKGFkZC1kYXRhLXJlYWRlcnNcclxuICAgeydpbnN0IHJlYWQtZGF0ZSxcclxuICAgICd1dWlkIHJlYWQtdXVpZCxcclxuICAgICdxdWV1ZSByZWFkLXF1ZXVlLFxyXG4gICAgJ2pzIHJlYWQtanN9KSkpXHJcbiJ9IHs6c3ltIHBhcnNlLWFuZC12YWxpZGF0ZS10aW1lc3RhbXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLWFuZC12YWxpZGF0ZS10aW1lc3RhbXBcclxuIFtzXVxyXG4gKGxldFxyXG4gIFtbX1xyXG4gICAgeWVhcnNcclxuICAgIG1vbnRoc1xyXG4gICAgZGF5c1xyXG4gICAgaG91cnNcclxuICAgIG1pbnV0ZXNcclxuICAgIHNlY29uZHNcclxuICAgIGZyYWN0aW9uXHJcbiAgICBvZmZzZXQtc2lnblxyXG4gICAgb2Zmc2V0LWhvdXJzXHJcbiAgICBvZmZzZXQtbWludXRlc1xyXG4gICAgOmFzXHJcbiAgICB2XVxyXG4gICAocmUtbWF0Y2hlcyB0aW1lc3RhbXAtcmVnZXggcyldXHJcbiAgKGlmLW5vdFxyXG4gICB2XHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJVbnJlY29nbml6ZWQgZGF0ZS90aW1lIHN5bnRheDogXCIgcykpKVxyXG4gICAobGV0XHJcbiAgICBbeWVhcnNcclxuICAgICAocGFyc2UtaW50IHllYXJzKVxyXG4gICAgIG1vbnRoc1xyXG4gICAgIChvciAocGFyc2UtaW50IG1vbnRocykgMSlcclxuICAgICBkYXlzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgZGF5cykgMSlcclxuICAgICBob3Vyc1xyXG4gICAgIChvciAocGFyc2UtaW50IGhvdXJzKSAwKVxyXG4gICAgIG1pbnV0ZXNcclxuICAgICAob3IgKHBhcnNlLWludCBtaW51dGVzKSAwKVxyXG4gICAgIHNlY29uZHNcclxuICAgICAob3IgKHBhcnNlLWludCBzZWNvbmRzKSAwKVxyXG4gICAgIGZyYWN0aW9uXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgKHplcm8tZmlsbC1yaWdodC1hbmQtdHJ1bmNhdGUgZnJhY3Rpb24gMykpIDApXHJcbiAgICAgb2Zmc2V0LXNpZ25cclxuICAgICAoaWYgKD0gb2Zmc2V0LXNpZ24gXCItXCIpIC0xIDEpXHJcbiAgICAgb2Zmc2V0LWhvdXJzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgb2Zmc2V0LWhvdXJzKSAwKVxyXG4gICAgIG9mZnNldC1taW51dGVzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgb2Zmc2V0LW1pbnV0ZXMpIDApXHJcbiAgICAgb2Zmc2V0XHJcbiAgICAgKCogb2Zmc2V0LXNpZ24gKCsgKCogb2Zmc2V0LWhvdXJzIDYwKSBvZmZzZXQtbWludXRlcykpXVxyXG4gICAgW3llYXJzXHJcbiAgICAgKGNoZWNrIDEgbW9udGhzIDEyIFwidGltZXN0YW1wIG1vbnRoIGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMS4uMTJcIilcclxuICAgICAoY2hlY2tcclxuICAgICAgMVxyXG4gICAgICBkYXlzXHJcbiAgICAgIChkYXlzLWluLW1vbnRoIG1vbnRocyAobGVhcC15ZWFyPyB5ZWFycykpXHJcbiAgICAgIFwidGltZXN0YW1wIGRheSBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDEuLmxhc3QgZGF5IGluIG1vbnRoXCIpXHJcbiAgICAgKGNoZWNrIDAgaG91cnMgMjMgXCJ0aW1lc3RhbXAgaG91ciBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDAuLjIzXCIpXHJcbiAgICAgKGNoZWNrXHJcbiAgICAgIDBcclxuICAgICAgbWludXRlc1xyXG4gICAgICA1OVxyXG4gICAgICBcInRpbWVzdGFtcCBtaW51dGUgZmllbGQgbXVzdCBiZSBpbiByYW5nZSAwLi41OVwiKVxyXG4gICAgIChjaGVja1xyXG4gICAgICAwXHJcbiAgICAgIHNlY29uZHNcclxuICAgICAgKGlmICg9IG1pbnV0ZXMgNTkpIDYwIDU5KVxyXG4gICAgICBcInRpbWVzdGFtcCBzZWNvbmQgZmllbGQgbXVzdCBiZSBpbiByYW5nZSAwLi42MFwiKVxyXG4gICAgIChjaGVja1xyXG4gICAgICAwXHJcbiAgICAgIGZyYWN0aW9uXHJcbiAgICAgIDk5OVxyXG4gICAgICBcInRpbWVzdGFtcCBtaWxsaXNlY29uZCBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDAuLjk5OVwiKVxyXG4gICAgIG9mZnNldF0pKSkpXHJcbiJ9IHs6c3ltIHJlZ2lzdGVyLXRhZy1wYXJzZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RhZyBmXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnaXN0ZXItdGFnLXBhcnNlciFcclxuIFt0YWcgZl1cclxuIChsZXRcclxuICBbb2xkLXBhcnNlciAoZ2V0IEAqdGFnLXRhYmxlKiB0YWcpXVxyXG4gIChzd2FwISAqdGFnLXRhYmxlKiBhc3NvYyB0YWcgZilcclxuICBvbGQtcGFyc2VyKSlcclxuIn0gezpzeW0gcmVnaXN0ZXItZGVmYXVsdC10YWctcGFyc2VyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnaXN0ZXItZGVmYXVsdC10YWctcGFyc2VyIVxyXG4gW2ZdXHJcbiAobGV0XHJcbiAgW29sZC1wYXJzZXIgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKl1cclxuICAoc3dhcCEgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qIChmbiBbX10gZikpXHJcbiAgb2xkLXBhcnNlcikpXHJcbiJ9IHs6c3ltIGRlcmVnaXN0ZXItZGVmYXVsdC10YWctcGFyc2VyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXJlZ2lzdGVyLWRlZmF1bHQtdGFnLXBhcnNlciFcclxuIFtdXHJcbiAobGV0XHJcbiAgW29sZC1wYXJzZXIgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKl1cclxuICAoc3dhcCEgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qIChmbiBbX10gbmlsKSlcclxuICBvbGQtcGFyc2VyKSlcclxuIn0gezpzeW0gcmVhZC1zdHJpbmcsIDptZXRhIHs6ZG9jICJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cblxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcblxuICAgb3B0cyBpcyBhIG1hcCBhcyBwZXIgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQiLCA6YXJnbGlzdHMgW1tzXSBbb3B0cyBzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zdHJpbmdcclxuIFwiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxcblxcbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xcblxcbiAgIG9wdHMgaXMgYSBtYXAgYXMgcGVyIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkXCJcclxuIChbc11cclxuICAoZWRuL3JlYWQtc3RyaW5nXHJcbiAgIHs6cmVhZGVycyBAKnRhZy10YWJsZSosXHJcbiAgICA6ZGVmYXVsdCBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qLFxyXG4gICAgOmVvZiBuaWx9XHJcbiAgIHMpKVxyXG4gKFtvcHRzIHNdXHJcbiAgKGVkbi9yZWFkLXN0cmluZ1xyXG4gICAodXBkYXRlXHJcbiAgICAobWVyZ2UgezpkZWZhdWx0IEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbip9IG9wdHMpXHJcbiAgICA6cmVhZGVyc1xyXG4gICAgKGZuIFttXSAobWVyZ2UgQCp0YWctdGFibGUqIG0pKSlcclxuICAgcykpKVxyXG4ifSB7OnN5bSBkZXJlZ2lzdGVyLXRhZy1wYXJzZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcmVnaXN0ZXItdGFnLXBhcnNlciFcclxuIFt0YWddXHJcbiAobGV0XHJcbiAgW29sZC1wYXJzZXIgKGdldCBAKnRhZy10YWJsZSogdGFnKV1cclxuICAoc3dhcCEgKnRhZy10YWJsZSogZGlzc29jIHRhZylcclxuICBvbGQtcGFyc2VyKSlcclxuIn0gezpzeW0gcGFyc2UtdGltZXN0YW1wLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtdGltZXN0YW1wXHJcbiBbdHNdXHJcbiAoaWYtbGV0XHJcbiAgW1t5ZWFycyBtb250aHMgZGF5cyBob3VycyBtaW51dGVzIHNlY29uZHMgbXMgb2Zmc2V0XVxyXG4gICAocGFyc2UtYW5kLXZhbGlkYXRlLXRpbWVzdGFtcCB0cyldXHJcbiAgKGpzL0RhdGUuXHJcbiAgICgtXHJcbiAgICAoLlVUQyBqcy9EYXRlIHllYXJzIChkZWMgbW9udGhzKSBkYXlzIGhvdXJzIG1pbnV0ZXMgc2Vjb25kcyBtcylcclxuICAgICgqIG9mZnNldCA2MCAxMDAwKSkpXHJcbiAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIlVucmVjb2duaXplZCBkYXRlL3RpbWUgc3ludGF4OiBcIiB0cykpKSkpXHJcbiJ9KSwgY2xvanVyZS53YWxrICh7OnN5bSB3YWxrLCA6bWV0YSB7OmRvYyAiVHJhdmVyc2VzIGZvcm0sIGFuIGFyYml0cmFyeSBkYXRhIHN0cnVjdHVyZS4gIGlubmVyIGFuZCBvdXRlciBhcmVcbiAgZnVuY3Rpb25zLiAgQXBwbGllcyBpbm5lciB0byBlYWNoIGVsZW1lbnQgb2YgZm9ybSwgYnVpbGRpbmcgdXAgYVxuICBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgc2FtZSB0eXBlLCB0aGVuIGFwcGxpZXMgb3V0ZXIgdG8gdGhlIHJlc3VsdC5cbiAgUmVjb2duaXplcyBhbGwgQ2xvanVyZSBkYXRhIHN0cnVjdHVyZXMuIENvbnN1bWVzIHNlcXMgYXMgd2l0aCBkb2FsbC4iLCA6YXJnbGlzdHMgKFtpbm5lciBvdXRlciBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2Fsa1xyXG4gXCJUcmF2ZXJzZXMgZm9ybSwgYW4gYXJiaXRyYXJ5IGRhdGEgc3RydWN0dXJlLiAgaW5uZXIgYW5kIG91dGVyIGFyZVxcbiAgZnVuY3Rpb25zLiAgQXBwbGllcyBpbm5lciB0byBlYWNoIGVsZW1lbnQgb2YgZm9ybSwgYnVpbGRpbmcgdXAgYVxcbiAgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlIHNhbWUgdHlwZSwgdGhlbiBhcHBsaWVzIG91dGVyIHRvIHRoZSByZXN1bHQuXFxuICBSZWNvZ25pemVzIGFsbCBDbG9qdXJlIGRhdGEgc3RydWN0dXJlcy4gQ29uc3VtZXMgc2VxcyBhcyB3aXRoIGRvYWxsLlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbaW5uZXIgb3V0ZXIgZm9ybV1cclxuIChjb25kXHJcbiAgKGxpc3Q/IGZvcm0pXHJcbiAgKG91dGVyIChhcHBseSBsaXN0IChtYXAgaW5uZXIgZm9ybSkpKVxyXG4gIChtYXAtZW50cnk/IGZvcm0pXHJcbiAgKG91dGVyIChNYXBFbnRyeS4gKGlubmVyIChrZXkgZm9ybSkpIChpbm5lciAodmFsIGZvcm0pKSBuaWwpKVxyXG4gIChzZXE/IGZvcm0pXHJcbiAgKG91dGVyIChkb2FsbCAobWFwIGlubmVyIGZvcm0pKSlcclxuICAocmVjb3JkPyBmb3JtKVxyXG4gIChvdXRlciAocmVkdWNlIChmbiBbciB4XSAoY29uaiByIChpbm5lciB4KSkpIGZvcm0gZm9ybSkpXHJcbiAgKGNvbGw/IGZvcm0pXHJcbiAgKG91dGVyIChpbnRvIChlbXB0eSBmb3JtKSAobWFwIGlubmVyIGZvcm0pKSlcclxuICA6ZWxzZVxyXG4gIChvdXRlciBmb3JtKSkpXHJcbiJ9IHs6c3ltIHBvc3R3YWxrLCA6bWV0YSB7OmRvYyAiUGVyZm9ybXMgYSBkZXB0aC1maXJzdCwgcG9zdC1vcmRlciB0cmF2ZXJzYWwgb2YgZm9ybS4gIENhbGxzIGYgb25cbiAgZWFjaCBzdWItZm9ybSwgdXNlcyBmJ3MgcmV0dXJuIHZhbHVlIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbC5cbiAgUmVjb2duaXplcyBhbGwgQ2xvanVyZSBkYXRhIHN0cnVjdHVyZXMuIENvbnN1bWVzIHNlcXMgYXMgd2l0aCBkb2FsbC4iLCA6YXJnbGlzdHMgKFtmIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3N0d2Fsa1xyXG4gXCJQZXJmb3JtcyBhIGRlcHRoLWZpcnN0LCBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvZiBmb3JtLiAgQ2FsbHMgZiBvblxcbiAgZWFjaCBzdWItZm9ybSwgdXNlcyBmJ3MgcmV0dXJuIHZhbHVlIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbC5cXG4gIFJlY29nbml6ZXMgYWxsIENsb2p1cmUgZGF0YSBzdHJ1Y3R1cmVzLiBDb25zdW1lcyBzZXFzIGFzIHdpdGggZG9hbGwuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFtmIGZvcm1dXHJcbiAod2FsayAocGFydGlhbCBwb3N0d2FsayBmKSBmIGZvcm0pKVxyXG4ifSB7OnN5bSBwcmV3YWxrLCA6bWV0YSB7OmRvYyAiTGlrZSBwb3N0d2FsaywgYnV0IGRvZXMgcHJlLW9yZGVyIHRyYXZlcnNhbC4iLCA6YXJnbGlzdHMgKFtmIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmV3YWxrXHJcbiBcIkxpa2UgcG9zdHdhbGssIGJ1dCBkb2VzIHByZS1vcmRlciB0cmF2ZXJzYWwuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFtmIGZvcm1dXHJcbiAod2FsayAocGFydGlhbCBwcmV3YWxrIGYpIGlkZW50aXR5IChmIGZvcm0pKSlcclxuIn0gezpzeW0ga2V5d29yZGl6ZS1rZXlzLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgZnJvbSBzdHJpbmdzIHRvIGtleXdvcmRzLiIsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXl3b3JkaXplLWtleXNcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgZnJvbSBzdHJpbmdzIHRvIGtleXdvcmRzLlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbbV1cclxuIChsZXRcclxuICBbZiAoZm4gW1trIHZdXSAoaWYgKHN0cmluZz8gaykgWyhrZXl3b3JkIGspIHZdIFtrIHZdKSldXHJcbiAgKHBvc3R3YWxrIChmbiBbeF0gKGlmIChtYXA/IHgpIChpbnRvIHt9IChtYXAgZiB4KSkgeCkpIG0pKSlcclxuIn0gezpzeW0gc3RyaW5naWZ5LWtleXMsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBmcm9tIGtleXdvcmRzIHRvIHN0cmluZ3MuIiwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZ2lmeS1rZXlzXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGZyb20ga2V5d29yZHMgdG8gc3RyaW5ncy5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW21dXHJcbiAobGV0XHJcbiAgW2YgKGZuIFtbayB2XV0gKGlmIChrZXl3b3JkPyBrKSBbKG5hbWUgaykgdl0gW2sgdl0pKV1cclxuICAocG9zdHdhbGsgKGZuIFt4XSAoaWYgKG1hcD8geCkgKGludG8ge30gKG1hcCBmIHgpKSB4KSkgbSkpKVxyXG4ifSB7OnN5bSBwcmV3YWxrLXJlcGxhY2UsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGZvcm0gYnkgcmVwbGFjaW5nIGtleXMgaW4gc21hcCB3aXRoIHRoZWlyXG4gIHZhbHVlcy4gIExpa2UgY2xvanVyZS9yZXBsYWNlIGJ1dCB3b3JrcyBvbiBhbnkgZGF0YSBzdHJ1Y3R1cmUuICBEb2VzXG4gIHJlcGxhY2VtZW50IGF0IHRoZSByb290IG9mIHRoZSB0cmVlIGZpcnN0LiIsIDphcmdsaXN0cyAoW3NtYXAgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZXdhbGstcmVwbGFjZVxyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGZvcm0gYnkgcmVwbGFjaW5nIGtleXMgaW4gc21hcCB3aXRoIHRoZWlyXFxuICB2YWx1ZXMuICBMaWtlIGNsb2p1cmUvcmVwbGFjZSBidXQgd29ya3Mgb24gYW55IGRhdGEgc3RydWN0dXJlLiAgRG9lc1xcbiAgcmVwbGFjZW1lbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgZmlyc3QuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFtzbWFwIGZvcm1dXHJcbiAocHJld2FsayAoZm4gW3hdIChpZiAoY29udGFpbnM/IHNtYXAgeCkgKHNtYXAgeCkgeCkpIGZvcm0pKVxyXG4ifSB7OnN5bSBwb3N0d2Fsay1yZXBsYWNlLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBmb3JtIGJ5IHJlcGxhY2luZyBrZXlzIGluIHNtYXAgd2l0aCB0aGVpclxuICB2YWx1ZXMuICBMaWtlIGNsb2p1cmUvcmVwbGFjZSBidXQgd29ya3Mgb24gYW55IGRhdGEgc3RydWN0dXJlLiAgRG9lc1xuICByZXBsYWNlbWVudCBhdCB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIGZpcnN0LiIsIDphcmdsaXN0cyAoW3NtYXAgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvc3R3YWxrLXJlcGxhY2VcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBmb3JtIGJ5IHJlcGxhY2luZyBrZXlzIGluIHNtYXAgd2l0aCB0aGVpclxcbiAgdmFsdWVzLiAgTGlrZSBjbG9qdXJlL3JlcGxhY2UgYnV0IHdvcmtzIG9uIGFueSBkYXRhIHN0cnVjdHVyZS4gIERvZXNcXG4gIHJlcGxhY2VtZW50IGF0IHRoZSBsZWF2ZXMgb2YgdGhlIHRyZWUgZmlyc3QuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFtzbWFwIGZvcm1dXHJcbiAocG9zdHdhbGsgKGZuIFt4XSAoaWYgKGNvbnRhaW5zPyBzbWFwIHgpIChzbWFwIHgpIHgpKSBmb3JtKSlcclxuIn0pLCB0YWctc291cC5jb3JlICh7OnN5bSBzcGVjaWFsLWluZGVudCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHNwZWNpYWwtaW5kZW50XHJcbiAjeydhbmQgJz49ICc+ICcvICctPj4gJzw9ICc9ICdjb25kLT4+ICcrICc9PSAnKiAnc29tZS0+PiAnc29tZS0+ICdub3Q9XHJcbiAgICdjb25kLT4gJzwgJy0gJy0+ICdhcy0+ICdvcn0pXHJcbiJ9IHs6c3ltIGNvZGUtPnRhZ3MsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB0YWdzIGZvciB0aGUgZ2l2ZW4gc3RyaW5nIGNvbnRhaW5pbmcgY29kZS4iLCA6YXJnbGlzdHMgKFt0ZXh0XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29kZS0+dGFnc1xyXG4gXCJSZXR1cm5zIHRoZSB0YWdzIGZvciB0aGUgZ2l2ZW4gc3RyaW5nIGNvbnRhaW5pbmcgY29kZS5cIlxyXG4gW3RleHRdXHJcbiAobGV0XHJcbiAgW3JlYWRlciAoaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciB0ZXh0KV1cclxuICAobG9vcFxyXG4gICBbbSAodHJhbnNpZW50IHt9KV1cclxuICAgKGlmLWxldFxyXG4gICAgW3Rva2VuIChyZWFkLXNhZmUgcmVhZGVyKV1cclxuICAgIChyZWN1ciAodGFnLW1hcCB0b2tlbiBtIDApKVxyXG4gICAgKHBlcnNpc3RlbnQhIG0pKSkpKVxyXG4ifSB7OnN5bSBpbmRlbnQtZm9yLWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZC4iLCA6YXJnbGlzdHMgKFt0YWdzIGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRlbnQtZm9yLWxpbmVcclxuIFwiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQuXCJcclxuIFt0YWdzIGxpbmVdXHJcbiAob3JcclxuICAoLT4+XHJcbiAgIChnZXQtdGFncy1iZWZvcmUtbGluZSB0YWdzIGxpbmUpXHJcbiAgIHJldmVyc2VcclxuICAgKHNvbWUgOm5leHQtbGluZS1pbmRlbnQpKVxyXG4gIDApKVxyXG4ifSB7OnN5bSBhZGp1c3QtaW5kZW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBob3cgbXVjaCB0aGUgaW5kZW50IHNob3VsZCBiZSBhZGp1c3RlZCBmb3IgdGhlIGdpdmVuIHRva2VuLiIsIDphcmdsaXN0cyAoW3Rva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRqdXN0LWluZGVudFxyXG4gXCJSZXR1cm5zIGhvdyBtdWNoIHRoZSBpbmRlbnQgc2hvdWxkIGJlIGFkanVzdGVkIGZvciB0aGUgZ2l2ZW4gdG9rZW4uXCJcclxuIFt0b2tlbl1cclxuIChpZlxyXG4gIChsaXN0PyB0b2tlbilcclxuICAobGV0XHJcbiAgIFtmaXJzdC12YWwgKC0+IHRva2VuIGZpcnN0IHVud3JhcC12YWx1ZSldXHJcbiAgIChjb25kXHJcbiAgICAob3IgKHZlY3Rvcj8gZmlyc3QtdmFsKSAobGlzdD8gZmlyc3QtdmFsKSlcclxuICAgIDBcclxuICAgICgjezp1c2UgOnJlcXVpcmUgOmltcG9ydH0gZmlyc3QtdmFsKVxyXG4gICAgKGluYyAoY291bnQgKHN0ciBmaXJzdC12YWwpKSlcclxuICAgICgjezpjbGpyIDpjbGogOmNsanN9IGZpcnN0LXZhbClcclxuICAgIDBcclxuICAgIChjb250YWlucz8gc3BlY2lhbC1pbmRlbnQgZmlyc3QtdmFsKVxyXG4gICAgKGluYyAoY291bnQgKHN0ciBmaXJzdC12YWwpKSlcclxuICAgIDplbHNlXHJcbiAgICAxKSlcclxuICAwKSlcclxuIn0gezpzeW0gcmVhZC1zYWZlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBlaXRoZXIgYSBmb3JtIG9yIGFuIGV4Y2VwdGlvbiBvYmplY3QsIG9yIG5pbCBpZiBFT0YgaXMgcmVhY2hlZC4iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXNhZmVcclxuIFwiUmV0dXJucyBlaXRoZXIgYSBmb3JtIG9yIGFuIGV4Y2VwdGlvbiBvYmplY3QsIG9yIG5pbCBpZiBFT0YgaXMgcmVhY2hlZC5cIlxyXG4gW3JlYWRlcl1cclxuICh0cnlcclxuICAoYmluZGluZ1xyXG4gICBbKndyYXAtdmFsdWUtYW5kLWFkZC1tZXRhZGF0YT8qIHRydWUgci8qc3VwcHJlc3MtcmVhZCogdHJ1ZV1cclxuICAgKHIvcmVhZCB7OnJlYWQtY29uZCA6cHJlc2VydmUsIDplb2YgbmlsfSByZWFkZXIpKVxyXG4gIChjYXRjaCBFeGNlcHRpb25JbmZvIGUgZSkpKVxyXG4ifSB7OnN5bSB1bndyYXAtdmFsdWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bndyYXAtdmFsdWVcclxuIFt2YWx1ZV1cclxuIChpZiAoLT4gdmFsdWUgbWV0YSA6d3JhcHBlZD8pIChmaXJzdCB2YWx1ZSkgdmFsdWUpKVxyXG4ifSB7OnN5bSBnZXQtdGFncy1iZWZvcmUtbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHRhZ3MgYmVmb3JlIHRoZSBnaXZlbiBsaW5lLiIsIDphcmdsaXN0cyAoW3RhZ3MgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC10YWdzLWJlZm9yZS1saW5lXHJcbiBcIlJldHVybnMgdGhlIHRhZ3MgYmVmb3JlIHRoZSBnaXZlbiBsaW5lLlwiXHJcbiBbdGFncyBsaW5lXVxyXG4gKC0+PlxyXG4gIHRhZ3NcclxuICAoZmlsdGVyIChmbiogW3AxX180OTA1OCNdICg8IChmaXJzdCBwMV9fNDkwNTgjKSBsaW5lKSkpXHJcbiAgKHNvcnQtYnkgZmlyc3QpXHJcbiAgKG1hcCBzZWNvbmQpXHJcbiAgKG1hcCAoZm4qIFtwMV9fNDkwNTkjXSAoc29ydC1ieSA6Y29sdW1uIHAxX180OTA1OSMpKSlcclxuICAoYXBwbHkgY29uY2F0KSkpXHJcbiJ9IHs6c3ltIGZvcndhcmQtaW5kZW50LWZvci1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQgZm9yd2FyZC4iLCA6YXJnbGlzdHMgKFt0YWdzIGxpbmUgY3VycmVudC1pbmRlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3J3YXJkLWluZGVudC1mb3ItbGluZVxyXG4gXCJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZCBmb3J3YXJkLlwiXHJcbiBbdGFncyBsaW5lIGN1cnJlbnQtaW5kZW50XVxyXG4gKGxldFxyXG4gIFt0YWdzLWJlZm9yZSAoZ2V0LXRhZ3MtYmVmb3JlLWxpbmUgdGFncyBsaW5lKV1cclxuICAobG9vcFxyXG4gICBbdGFncyAocmV2ZXJzZSB0YWdzLWJlZm9yZSkgbWF4LXRhYi1zdG9wIC0xIHRhYi1zdG9wIC0xXVxyXG4gICAoaWYtbGV0XHJcbiAgICBbdGFnIChmaXJzdCB0YWdzKV1cclxuICAgIChpZi1sZXRcclxuICAgICBbaW5kZW50ICg6aW5kZW50IHRhZyldXHJcbiAgICAgKGNvbmRcclxuICAgICAgKDw9IGluZGVudCBjdXJyZW50LWluZGVudClcclxuICAgICAgKHJlY3VyIFtdIG1heC10YWItc3RvcCB0YWItc3RvcClcclxuICAgICAgKG9yIChuZWc/IG1heC10YWItc3RvcCkgKDwgY3VycmVudC1pbmRlbnQgaW5kZW50IG1heC10YWItc3RvcCkpXHJcbiAgICAgIChyZWN1clxyXG4gICAgICAgKHJlc3QgdGFncylcclxuICAgICAgIChpbmMgaW5kZW50KVxyXG4gICAgICAgKGlmICg6c2tpcC1pbmRlbnQ/IHRhZykgdGFiLXN0b3AgaW5kZW50KSlcclxuICAgICAgOmVsc2VcclxuICAgICAgKHJlY3VyIChyZXN0IHRhZ3MpIG1heC10YWItc3RvcCB0YWItc3RvcCkpXHJcbiAgICAgKHJlY3VyIChyZXN0IHRhZ3MpIG1heC10YWItc3RvcCB0YWItc3RvcCkpXHJcbiAgICAoaWYgKDw9IHRhYi1zdG9wIGN1cnJlbnQtaW5kZW50KSAoKyBjdXJyZW50LWluZGVudCAyKSB0YWItc3RvcCkpKSkpXHJcbiJ9IHs6c3ltIHRhZy1tYXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdHJhbnNpZW50IG1hcCBjb250YWluaW5nIHRoZSB0YWdzLCBvcmdhbml6ZWQgYnkgbGluZSBudW1iZXIuIiwgOmFyZ2xpc3RzIChbdG9rZW4gcmVzdWx0cy1tYXAgcGFyZW50LWluZGVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhZy1tYXBcclxuIFwiUmV0dXJucyBhIHRyYW5zaWVudCBtYXAgY29udGFpbmluZyB0aGUgdGFncywgb3JnYW5pemVkIGJ5IGxpbmUgbnVtYmVyLlwiXHJcbiBbdG9rZW4gcmVzdWx0cy1tYXAgcGFyZW50LWluZGVudF1cclxuIChjb25kXHJcbiAgKGluc3RhbmNlPyBFeGNlcHRpb25JbmZvIHRva2VuKVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbbGluZSBjb2xdfSAoZXgtZGF0YSB0b2tlbildXHJcbiAgIChhc3NvYyFcclxuICAgIHJlc3VsdHMtbWFwXHJcbiAgICBsaW5lXHJcbiAgICAoY29ualxyXG4gICAgIChnZXQgcmVzdWx0cy1tYXAgbGluZSBbXSlcclxuICAgICB7OmVycm9yPyB0cnVlLFxyXG4gICAgICA6bWVzc2FnZSAjPyg6Y2xqICguZ2V0TWVzc2FnZSB0b2tlbikgOmNsanMgKC4tbWVzc2FnZSB0b2tlbikpLFxyXG4gICAgICA6Y29sdW1uIGNvbH0pKSlcclxuICAoYW5kIChjb2xsPyB0b2tlbikgKG5pbD8gKG1ldGEgdG9rZW4pKSlcclxuICAocmVkdWNlXHJcbiAgIChmbiBbcmVzdWx0cy1tYXAgdG9rZW5dICh0YWctbWFwIHRva2VuIHJlc3VsdHMtbWFwIHBhcmVudC1pbmRlbnQpKVxyXG4gICByZXN1bHRzLW1hcFxyXG4gICB0b2tlbilcclxuICA6ZWxzZVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbbGluZSBjb2x1bW4gZW5kLWxpbmUgZW5kLWNvbHVtbl19IChtZXRhIHRva2VuKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKGFuZCBsaW5lIGNvbHVtbiBlbmQtbGluZSBlbmQtY29sdW1uKVxyXG4gICAgcmVzdWx0cy1tYXBcclxuICAgIChsZXRcclxuICAgICBbdmFsdWVcclxuICAgICAgKHVud3JhcC12YWx1ZSB0b2tlbilcclxuICAgICAgaW5kZW50XHJcbiAgICAgIChtYXggcGFyZW50LWluZGVudCAoZGVjIGNvbHVtbikpXHJcbiAgICAgIHRvcC1sZXZlbD9cclxuICAgICAgKD0gcGFyZW50LWluZGVudCAwKV1cclxuICAgICAoaWZcclxuICAgICAgKGNvbGw/IHZhbHVlKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZGVsaW1pdGVyLXNpemVcclxuICAgICAgICAoaWYgKHNldD8gdmFsdWUpIDIgMSlcclxuICAgICAgICBuZXctZW5kLWNvbHVtblxyXG4gICAgICAgICgrIGNvbHVtbiBkZWxpbWl0ZXItc2l6ZSlcclxuICAgICAgICBhZGp1c3RtZW50XHJcbiAgICAgICAgKGFkanVzdC1pbmRlbnQgdmFsdWUpXHJcbiAgICAgICAgbmV4dC1saW5lLWluZGVudFxyXG4gICAgICAgICgrIChkZWMgY29sdW1uKSBkZWxpbWl0ZXItc2l6ZSBhZGp1c3RtZW50KV1cclxuICAgICAgIChhcy0+XHJcbiAgICAgICAgcmVzdWx0cy1tYXBcclxuICAgICAgICAkXHJcbiAgICAgICAgKGFzc29jIVxyXG4gICAgICAgICAkXHJcbiAgICAgICAgIGxpbmVcclxuICAgICAgICAgKC0+XHJcbiAgICAgICAgICAoZ2V0ICQgbGluZSBbXSlcclxuICAgICAgICAgIChjb25qXHJcbiAgICAgICAgICAgezpiZWdpbj8gdHJ1ZSxcclxuICAgICAgICAgICAgOmNvbHVtbiBjb2x1bW4sXHJcbiAgICAgICAgICAgIDp2YWx1ZSB2YWx1ZSxcclxuICAgICAgICAgICAgOmluZGVudCBpbmRlbnQsXHJcbiAgICAgICAgICAgIDp0b3AtbGV2ZWw/IHRvcC1sZXZlbD8sXHJcbiAgICAgICAgICAgIDpza2lwLWluZGVudD8gdHJ1ZX0pXHJcbiAgICAgICAgICAoY29uaiB7OmRlbGltaXRlcj8gdHJ1ZSwgOmNvbHVtbiBjb2x1bW59KVxyXG4gICAgICAgICAgKGNvbmpcclxuICAgICAgICAgICB7OmVuZD8gdHJ1ZSxcclxuICAgICAgICAgICAgOmNvbHVtbiBuZXctZW5kLWNvbHVtbixcclxuICAgICAgICAgICAgOm5leHQtbGluZS1pbmRlbnQgbmV4dC1saW5lLWluZGVudCxcclxuICAgICAgICAgICAgOmluZGVudCBuZXh0LWxpbmUtaW5kZW50fSkpKVxyXG4gICAgICAgIChyZWR1Y2VcclxuICAgICAgICAgKGZuXHJcbiAgICAgICAgICBbcmVzdWx0cy1tYXAgdG9rZW5dXHJcbiAgICAgICAgICAodGFnLW1hcCB0b2tlbiByZXN1bHRzLW1hcCBuZXh0LWxpbmUtaW5kZW50KSlcclxuICAgICAgICAgJFxyXG4gICAgICAgICB2YWx1ZSlcclxuICAgICAgICAoYXNzb2MhXHJcbiAgICAgICAgICRcclxuICAgICAgICAgZW5kLWxpbmVcclxuICAgICAgICAgKC0+XHJcbiAgICAgICAgICAoZ2V0ICQgZW5kLWxpbmUgW10pXHJcbiAgICAgICAgICAoY29uaiB7OmRlbGltaXRlcj8gdHJ1ZSwgOmNvbHVtbiAoZGVjIGVuZC1jb2x1bW4pfSlcclxuICAgICAgICAgIChjb25qXHJcbiAgICAgICAgICAgezplbmQ/IHRydWUsXHJcbiAgICAgICAgICAgIDpjb2x1bW4gZW5kLWNvbHVtbixcclxuICAgICAgICAgICAgOm5leHQtbGluZS1pbmRlbnQgcGFyZW50LWluZGVudH0pXHJcbiAgICAgICAgICAoY29uaiB7OmVuZD8gdHJ1ZSwgOmNvbHVtbiBlbmQtY29sdW1ufSkpKSkpXHJcbiAgICAgIChhcy0+XHJcbiAgICAgICByZXN1bHRzLW1hcFxyXG4gICAgICAgJFxyXG4gICAgICAgKGFzc29jIVxyXG4gICAgICAgICRcclxuICAgICAgICBsaW5lXHJcbiAgICAgICAgKGNvbmpcclxuICAgICAgICAgKGdldCAkIGxpbmUgW10pXHJcbiAgICAgICAgIHs6YmVnaW4/IHRydWUsXHJcbiAgICAgICAgICA6Y29sdW1uIGNvbHVtbixcclxuICAgICAgICAgIDp2YWx1ZSB2YWx1ZSxcclxuICAgICAgICAgIDppbmRlbnQgaW5kZW50LFxyXG4gICAgICAgICAgOnRvcC1sZXZlbD8gdG9wLWxldmVsP30pKVxyXG4gICAgICAgKGFzc29jIVxyXG4gICAgICAgICRcclxuICAgICAgICBlbmQtbGluZVxyXG4gICAgICAgIChjb25qXHJcbiAgICAgICAgIChnZXQgJCBlbmQtbGluZSBbXSlcclxuICAgICAgICAgezplbmQ/IHRydWUsIDpjb2x1bW4gZW5kLWNvbHVtbn0pKSkpKSkpKSlcclxuIn0gezpzeW0gYmFjay1pbmRlbnQtZm9yLWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZCBiYWNrLiIsIDphcmdsaXN0cyAoW3RhZ3MgbGluZSBjdXJyZW50LWluZGVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJhY2staW5kZW50LWZvci1saW5lXHJcbiBcIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkIGJhY2suXCJcclxuIFt0YWdzIGxpbmUgY3VycmVudC1pbmRlbnRdXHJcbiAobGV0XHJcbiAgW3RhZ3MtYmVmb3JlIChnZXQtdGFncy1iZWZvcmUtbGluZSB0YWdzIGxpbmUpXVxyXG4gIChsb29wXHJcbiAgIFt0YWdzIChyZXZlcnNlIHRhZ3MtYmVmb3JlKSBtYXgtdGFiLXN0b3AgY3VycmVudC1pbmRlbnRdXHJcbiAgIChpZi1sZXRcclxuICAgIFt0YWcgKGZpcnN0IHRhZ3MpXVxyXG4gICAgKGlmLWxldFxyXG4gICAgIFtpbmRlbnQgKDppbmRlbnQgdGFnKV1cclxuICAgICAoaWZcclxuICAgICAgKDwgaW5kZW50IG1heC10YWItc3RvcClcclxuICAgICAgKGlmICg6c2tpcC1pbmRlbnQ/IHRhZykgKHJlY3VyIChyZXN0IHRhZ3MpIChpbmMgaW5kZW50KSkgaW5kZW50KVxyXG4gICAgICAocmVjdXIgKHJlc3QgdGFncykgbWF4LXRhYi1zdG9wKSlcclxuICAgICAocmVjdXIgKHJlc3QgdGFncykgbWF4LXRhYi1zdG9wKSlcclxuICAgICgtIGN1cnJlbnQtaW5kZW50IDIpKSkpKVxyXG4ifSksIGV4cG91bmQucGF0aHMgKHs6c3ltIGVxdWFsaXNoPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuIGVxdWFsaXNoPyBbeCB5XSAob3IgKD0geCB5KSAoZm4tZXF1YWwgeCB5KSAoYm90aC1uYW4/IHggeSkpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwc1xyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChsZXRcclxuICBbcmVzIChpbi13aXRoLWtwcyogZm9ybSB2YWwgaW4gaW4nKV1cclxuICAoaWZcclxuICAgKD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIHJlcylcclxuICAgKHRocm93XHJcbiAgICAoZXgtaW5mb1xyXG4gICAgIFwiQ2Fubm90IGNvbnZlcnQgcGF0aC4gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IHVzaW5nIGNvbmZvcm1lcnMgdG8gdHJhbnNmb3JtIHZhbHVlcywgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBpbiBFeHBvdW5kXCJcclxuICAgICB7OmZvcm0gZm9ybSwgOnZhbCB2YWwsIDppbiBpbiwgOmluJyBpbid9KSlcclxuICAgcmVzKSkpXHJcbiJ9IHs6c3ltIGt2cHM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGt2cHM/IFt4XSAoaW5zdGFuY2U/IEtleVZhbHVlUGF0aFNlZ21lbnQgeCkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzLWludHMtYXJlLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHMtaW50cy1hcmUta2V5c1xyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChpZlxyXG4gICg9IGZvcm0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gIGZvcm1cclxuICAobGV0XHJcbiAgIFtbayAmIHJzdF0gaW5dXHJcbiAgIChjb25kXHJcbiAgICAoYW5kIChlbXB0eT8gaW4pIChlcXVhbGlzaD8gZm9ybSB2YWwpKVxyXG4gICAgaW4nXHJcbiAgICAoYXNzb2NpYXRpdmU/IGZvcm0pXHJcbiAgICAoaW4td2l0aC1rcHMqXHJcbiAgICAgKGdldCBmb3JtIGsgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gICAgIHZhbFxyXG4gICAgIHJzdFxyXG4gICAgIChjb25qIGluJyBrKSlcclxuICAgIChhbmQgKGludD8gaykgKHNlcWFibGU/IGZvcm0pKVxyXG4gICAgKGluLXdpdGgta3BzKlxyXG4gICAgIChudGggKHNlcSBmb3JtKSBrIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICAgICB2YWxcclxuICAgICByc3RcclxuICAgICAoY29uaiBpbicgaykpXHJcbiAgICA6ZWxzZVxyXG4gICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKSkpKVxyXG4ifSB7OnN5bSBjb21wYXJlLXBhdGgtc2VnbWVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYXJlLXBhdGgtc2VnbWVudFxyXG4gW3ggeV1cclxuIChjb25kXHJcbiAgKGFuZCAoaW50PyB4KSAoa3Zwcz8geSkpXHJcbiAgKGNvbXBhcmUgeCAoOmlkeCB5KSlcclxuICAoYW5kIChrdnBzPyB4KSAoaW50PyB5KSlcclxuICAoY29tcGFyZSAoOmlkeCB4KSB5KVxyXG4gIChhbmQgKGtwcz8geCkgKG5vdCAoa3BzPyB5KSkpXHJcbiAgLTFcclxuICAoYW5kIChub3QgKGtwcz8geCkpIChrcHM/IHkpKVxyXG4gIDFcclxuICAoYW5kICh2ZWN0b3I/IHgpICh2ZWN0b3I/IHkpKVxyXG4gIChjb21wYXJlLXBhdGhzIHggeSlcclxuICA6ZWxzZVxyXG4gIChjb21wYXJlIHggeSkpKVxyXG4ifSB7OnN5bSBrdnBzLXBhdGg/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBwYXRoIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGt2cHMtcGF0aD9cclxuIFwiVHJ1ZSBpZiBwYXRoIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyXCJcclxuIFt4XVxyXG4gKGJvb2xlYW4gKGFuZCAodmVjdG9yPyB4KSAoc29tZSBrdnBzPyB4KSkpKVxyXG4ifSB7OnN5bSBjb21wYXJlLXBhdGhzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BhdGgxIHBhdGgyXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFyZS1wYXRoc1xyXG4gW3BhdGgxIHBhdGgyXVxyXG4gKC0+PiAobWFwIGNvbXBhcmUtcGF0aC1zZWdtZW50IHBhdGgxIHBhdGgyKSAocmVtb3ZlICN7MH0pIGZpcnN0KSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMtZnV6enktbWF0Y2gtZm9yLXJlZ2V4LWZhaWx1cmVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzLWZ1enp5LW1hdGNoLWZvci1yZWdleC1mYWlsdXJlc1xyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChpZlxyXG4gICg9IGZvcm0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gIGZvcm1cclxuICAobGV0XHJcbiAgIFtbayAmIHJzdF0gaW5dXHJcbiAgIChjb25kXHJcbiAgICAoYW5kIChlbXB0eT8gaW4pIChzZXFhYmxlPyBmb3JtKSAoPSB2YWwgJygpKSlcclxuICAgIGluJ1xyXG4gICAgKGFuZCAoZW1wdHk/IGluKSAoYW5kIChzZXE/IHZhbCkgKD0gZm9ybSAoZmlyc3QgdmFsKSkpKVxyXG4gICAgaW4nXHJcbiAgICAoYW5kIChuYXQtaW50PyBrKSAoc2VxYWJsZT8gZm9ybSkpXHJcbiAgICAoaW4td2l0aC1rcHMqXHJcbiAgICAgKG50aCAoc2VxIGZvcm0pIGsgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gICAgIHZhbFxyXG4gICAgIHJzdFxyXG4gICAgIChjb25qIGluJyBrKSlcclxuICAgIDplbHNlXHJcbiAgICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpKSkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwcypcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAoaWZcclxuICAoZm4/IGZvcm0pXHJcbiAgaW4nXHJcbiAgKGxldFxyXG4gICBbYnIxIChpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXktdmFsdWUtaW5kaWNhdG9ycyBmb3JtIHZhbCBpbiBpbicpXVxyXG4gICAoaWZcclxuICAgIChub3Q9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCBicjEpXHJcbiAgICBicjFcclxuICAgIChsZXRcclxuICAgICBbYnIyIChpbi13aXRoLWtwcy1tYXBzLWFzLXNlcXMgZm9ybSB2YWwgaW4gaW4nKV1cclxuICAgICAoaWZcclxuICAgICAgKG5vdD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIGJyMilcclxuICAgICAgYnIyXHJcbiAgICAgIChsZXRcclxuICAgICAgIFticjMgKGluLXdpdGgta3BzLWludHMtYXJlLWtleXMgZm9ybSB2YWwgaW4gaW4nKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChub3Q9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCBicjMpXHJcbiAgICAgICAgYnIzXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbYnI0XHJcbiAgICAgICAgICAoaW4td2l0aC1rcHMtZnV6enktbWF0Y2gtZm9yLXJlZ2V4LWZhaWx1cmVzIGZvcm0gdmFsIGluIGluJyldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKG5vdD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIGJyNClcclxuICAgICAgICAgIGJyNFxyXG4gICAgICAgICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBrcHMtcGF0aD8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHBhdGggcG9pbnRzIHRvIGEga2V5IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtwcy1wYXRoP1xyXG4gXCJUcnVlIGlmIHBhdGggcG9pbnRzIHRvIGEga2V5XCJcclxuIFt4XVxyXG4gKGJvb2xlYW4gKGFuZCAodmVjdG9yPyB4KSAoa3BzPyAobGFzdCB4KSkpKSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMtbWFwcy1hcy1zZXFzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzLW1hcHMtYXMtc2Vxc1xyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChsZXRcclxuICBbW2sgJiByc3RdIGluIFtpZHggJiByc3QyXSByc3RdXHJcbiAgKGNvbmRcclxuICAgKD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIGZvcm0pXHJcbiAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZFxyXG4gICAoYW5kIChlbXB0eT8gaW4pIChlcXVhbGlzaD8gZm9ybSB2YWwpKVxyXG4gICBpbidcclxuICAgKGFuZCAobWFwPyBmb3JtKSAobmF0LWludD8gaykgKDwgayAoY291bnQgKHNlcSBmb3JtKSkpKVxyXG4gICAoaW4td2l0aC1rcHMqXHJcbiAgICAobnRoIChzZXEgZm9ybSkgaylcclxuICAgIHZhbFxyXG4gICAgcnN0XHJcbiAgICAoY29uaiBpbicgKC0+S2V5VmFsdWVQYXRoU2VnbWVudCBrKSkpXHJcbiAgIChhbmRcclxuICAgIChtYXA/IGZvcm0pXHJcbiAgICAobmF0LWludD8gaylcclxuICAgIChpbnQ/IGlkeClcclxuICAgICg8IGsgKGNvdW50IChzZXEgZm9ybSkpKVxyXG4gICAgKDwgaWR4IChjb3VudCAobnRoIChzZXEgZm9ybSkgaykpKSlcclxuICAgKGluLXdpdGgta3BzKlxyXG4gICAgKG50aCAobnRoIChzZXEgZm9ybSkgaykgaWR4KVxyXG4gICAgdmFsXHJcbiAgICByc3QyXHJcbiAgICAoY29uaiBpbicgKC0+S2V5VmFsdWVQYXRoU2VnbWVudCBrKSBpZHgpKVxyXG4gICA6ZWxzZVxyXG4gICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpKSlcclxuIn0gezpzeW0gcHJlZml4LXBhdGg/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBwYXJ0aWFsLXBhdGggaXMgYSBwcmVmaXggb2YgZnVsbC1wYXRoLiIsIDphcmdsaXN0cyAoW3BhcnRpYWwtcGF0aCBmdWxsLXBhdGhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmVmaXgtcGF0aD9cclxuIFwiVHJ1ZSBpZiBwYXJ0aWFsLXBhdGggaXMgYSBwcmVmaXggb2YgZnVsbC1wYXRoLlwiXHJcbiBbcGFydGlhbC1wYXRoIGZ1bGwtcGF0aF1cclxuIChhbmRcclxuICAoPCAoY291bnQgcGFydGlhbC1wYXRoKSAoY291bnQgZnVsbC1wYXRoKSlcclxuICAoPSBwYXJ0aWFsLXBhdGggKHN1YnZlYyBmdWxsLXBhdGggMCAoY291bnQgcGFydGlhbC1wYXRoKSkpKSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMtaW50cy1hcmUta2V5LXZhbHVlLWluZGljYXRvcnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHMtaW50cy1hcmUta2V5LXZhbHVlLWluZGljYXRvcnNcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAoaWZcclxuICAoPSBmb3JtIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICBmb3JtXHJcbiAgKGxldFxyXG4gICBbW2sgJiByc3RdIGluIFtpZHggJiByc3QyXSByc3RdXHJcbiAgIChjb25kXHJcbiAgICAoYW5kIChlbXB0eT8gaW4pIChlcXVhbGlzaD8gZm9ybSB2YWwpKVxyXG4gICAgaW4nXHJcbiAgICAoYW5kIChtYXA/IGZvcm0pICg9IDAgaWR4KSlcclxuICAgIChpbi13aXRoLWtwcyogayB2YWwgcnN0MiAoY29uaiBpbicgKC0+S2V5UGF0aFNlZ21lbnQgaykpKVxyXG4gICAgKGFuZCAobWFwPyBmb3JtKSAoPSAxIGlkeCkpXHJcbiAgICAoaW4td2l0aC1rcHMqXHJcbiAgICAgKGdldCBmb3JtIGsgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gICAgIHZhbFxyXG4gICAgIHJzdDJcclxuICAgICAoY29uaiBpbicgaykpXHJcbiAgICA6ZWxzZVxyXG4gICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKSkpKVxyXG4ifSB7OnN5bSBmbi1lcXVhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuIGZuLWVxdWFsIFt4IHldIChhbmQgKGZuPyB4KSAoZm4/IHkpICg9IChwci1zdHIgeCkgKHByLXN0ciB5KSkpKVxyXG4ifSB7OnN5bSBrcHM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGtwcz8gW3hdIChpbnN0YW5jZT8gS2V5UGF0aFNlZ21lbnQgeCkpXHJcbiJ9IHs6c3ltIGJvdGgtbmFuPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuIGJvdGgtbmFuPyBbeCB5XSAoYW5kICh1dGlsL25hbj8geCkgKHV0aWwvbmFuPyB5KSkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwudGltZXJzICh7OnN5bSB0aW1lb3V0LCA6bWV0YSB7OmRvYyAicmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIGNsb3NlIGFmdGVyIG1zZWNzIiwgOmFyZ2xpc3RzIChbbXNlY3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aW1lb3V0XHJcbiBcInJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCBjbG9zZSBhZnRlciBtc2Vjc1wiXHJcbiBbbXNlY3NdXHJcbiAobGV0XHJcbiAgW3RpbWVvdXRcclxuICAgKCsgKC52YWx1ZU9mIChqcy9EYXRlLikpIG1zZWNzKVxyXG4gICBtZVxyXG4gICAoLmNlaWxpbmdFbnRyeSB0aW1lb3V0cy1tYXAgdGltZW91dCldXHJcbiAgKG9yXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kIG1lICg8ICguLWtleSBtZSkgKCsgdGltZW91dCBUSU1FT1VUX1JFU09MVVRJT05fTVMpKSlcclxuICAgICguLXZhbCBtZSkpXHJcbiAgIChsZXRcclxuICAgIFt0aW1lb3V0LWNoYW5uZWwgKGNoYW5uZWxzL2NoYW4gbmlsKV1cclxuICAgICgucHV0IHRpbWVvdXRzLW1hcCB0aW1lb3V0IHRpbWVvdXQtY2hhbm5lbClcclxuICAgIChkaXNwYXRjaC9xdWV1ZS1kZWxheVxyXG4gICAgIChmblxyXG4gICAgICBbXVxyXG4gICAgICAoLnJlbW92ZSB0aW1lb3V0cy1tYXAgdGltZW91dClcclxuICAgICAgKGltcGwvY2xvc2UhIHRpbWVvdXQtY2hhbm5lbCkpXHJcbiAgICAgbXNlY3MpXHJcbiAgICB0aW1lb3V0LWNoYW5uZWwpKSkpXHJcbiJ9IHs6c3ltIHJhbmRvbS1sZXZlbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tdIFtsZXZlbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmRvbS1sZXZlbFxyXG4gKFtdIChyYW5kb20tbGV2ZWwgMCkpXHJcbiAoW2xldmVsXVxyXG4gIChpZlxyXG4gICAoYW5kICg8ICgucmFuZG9tIGpzL01hdGgpIFApICg8IGxldmVsIE1BWF9MRVZFTCkpXHJcbiAgIChyZWN1ciAoaW5jIGxldmVsKSlcclxuICAgbGV2ZWwpKSlcclxuIn0gezpzeW0gc2tpcC1saXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gc2tpcC1saXN0IFtdIChTa2lwTGlzdC4gKHNraXAtbGlzdC1ub2RlIDApIDApKVxyXG4ifSB7OnN5bSBNQVhfTEVWRUwsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1BWF9MRVZFTCAxNSlcclxuIn0gezpzeW0gUCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgUCAoLyAxIDIpKVxyXG4ifSB7OnN5bSB0aW1lb3V0cy1tYXAsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHRpbWVvdXRzLW1hcCAoc2tpcC1saXN0KSlcclxuIn0gezpzeW0gc2tpcC1saXN0LW5vZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbbGV2ZWxdIFtrIHYgbGV2ZWxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBza2lwLWxpc3Qtbm9kZVxyXG4gKFtsZXZlbF0gKHNraXAtbGlzdC1ub2RlIG5pbCBuaWwgbGV2ZWwpKVxyXG4gKFtrIHYgbGV2ZWxdXHJcbiAgKGxldFxyXG4gICBbYXJyIChtYWtlLWFycmF5IChpbmMgbGV2ZWwpKV1cclxuICAgKGxvb3BcclxuICAgIFtpIDBdXHJcbiAgICAod2hlbiAoPCBpIChhbGVuZ3RoIGFycikpIChhc2V0IGFyciBpIG5pbCkgKHJlY3VyIChpbmMgaSkpKSlcclxuICAgKFNraXBMaXN0Tm9kZS4gayB2IGFycikpKSlcclxuIn0gezpzeW0gbGVhc3QtZ3JlYXRlci1ub2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3ggayBsZXZlbF0gW3ggayBsZXZlbCB1cGRhdGVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsZWFzdC1ncmVhdGVyLW5vZGVcclxuIChbeCBrIGxldmVsXSAobGVhc3QtZ3JlYXRlci1ub2RlIHggayBsZXZlbCBuaWwpKVxyXG4gKFt4IGsgbGV2ZWwgdXBkYXRlXVxyXG4gIChpZi1ub3RcclxuICAgKG5lZz8gbGV2ZWwpXHJcbiAgIChsZXRcclxuICAgIFt4XHJcbiAgICAgKGxvb3BcclxuICAgICAgW3ggeF1cclxuICAgICAgKGlmLWxldFxyXG4gICAgICAgW3gnXHJcbiAgICAgICAgKHdoZW5cclxuICAgICAgICAgKDwgbGV2ZWwgKGFsZW5ndGggKC4tZm9yd2FyZCB4KSkpXHJcbiAgICAgICAgIChhZ2V0ICguLWZvcndhcmQgeCkgbGV2ZWwpKV1cclxuICAgICAgIChpZiAoPCAoLi1rZXkgeCcpIGspIChyZWN1ciB4JykgeClcclxuICAgICAgIHgpKV1cclxuICAgICh3aGVuLW5vdCAobmlsPyB1cGRhdGUpIChhc2V0IHVwZGF0ZSBsZXZlbCB4KSlcclxuICAgIChyZWN1ciB4IGsgKGRlYyBsZXZlbCkgdXBkYXRlKSlcclxuICAgeCkpKVxyXG4ifSB7OnN5bSBUSU1FT1VUX1JFU09MVVRJT05fTVMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFRJTUVPVVRfUkVTT0xVVElPTl9NUyAxMClcclxuIn0pLCBleHBvdW5kLnByb2JsZW1zICh7OnN5bSBoaWdobGlnaHQtbGluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcmVmaXggcmVwbGFjZW1lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoaWdobGlnaHQtbGluZVxyXG4gW3ByZWZpeCByZXBsYWNlbWVudF1cclxuIChsZXRcclxuICBbbWF4LXdpZHRoXHJcbiAgIChhcHBseVxyXG4gICAgbWF4XHJcbiAgICAobWFwXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDExI10gKGNvdW50IChzdHIgcDFfXzQ5MDExIykpKVxyXG4gICAgIChzdHJpbmcvc3BsaXQtbGluZXMgcmVwbGFjZW1lbnQpKSldXHJcbiAgKHByaW50ZXIvaW5kZW50XHJcbiAgIChjb3VudCAoc3RyIHByZWZpeCkpXHJcbiAgIChhcHBseSBzdHIgKHJlcGVhdCBtYXgtd2lkdGggXCJeXCIpKSkpKVxyXG4ifSB7OnN5bSB2YWx1ZS1pbiwgOm1ldGEgezpkb2MgIlNpbWlsYXIgdG8gZ2V0LWluLCBidXQgd29ya3Mgd2l0aCBwYXRocyB0aGF0IHJlZmVyZW5jZSBtYXAga2V5cyIsIDphcmdsaXN0cyAoW2Zvcm0gaW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWx1ZS1pblxyXG4gXCJTaW1pbGFyIHRvIGdldC1pbiwgYnV0IHdvcmtzIHdpdGggcGF0aHMgdGhhdCByZWZlcmVuY2UgbWFwIGtleXNcIlxyXG4gW2Zvcm0gaW5dXHJcbiAobGV0XHJcbiAgW1trICYgcnN0XSBpbl1cclxuICAoY29uZFxyXG4gICAoZW1wdHk/IGluKVxyXG4gICBmb3JtXHJcbiAgIChhbmQgKG1hcD8gZm9ybSkgKHBhdGhzL2twcz8gaykpXHJcbiAgICg6a2V5IGspXHJcbiAgIChhbmQgKG1hcD8gZm9ybSkgKHBhdGhzL2t2cHM/IGspKVxyXG4gICAocmVjdXIgKG50aCAoc2VxIGZvcm0pICg6aWR4IGspKSByc3QpXHJcbiAgIChhc3NvY2lhdGl2ZT8gZm9ybSlcclxuICAgKHJlY3VyIChnZXQgZm9ybSBrKSByc3QpXHJcbiAgIChhbmQgKGludD8gaykgKHNlcWFibGU/IGZvcm0pKVxyXG4gICAocmVjdXIgKG50aCAoc2VxIGZvcm0pIGspIHJzdCkpKSlcclxuIn0gezpzeW0gbGVhZi1vbmx5LCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBjb2xsZWN0aW9uIG9mIHByb2JsZW1zLCByZXR1cm5zIG9ubHkgdGhvc2UgcHJvYmxlbXMgd2l0aCBkYXRhIG9uIHRoZSAnbGVhdmVzJyBvZiB0aGUgZGF0YSIsIDphcmdsaXN0cyAoW3Byb2JsZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGVhZi1vbmx5XHJcbiBcIkdpdmVuIGEgY29sbGVjdGlvbiBvZiBwcm9ibGVtcywgcmV0dXJucyBvbmx5IHRob3NlIHByb2JsZW1zIHdpdGggZGF0YSBvbiB0aGUgJ2xlYXZlcycgb2YgdGhlIGRhdGFcIlxyXG4gW3Byb2JsZW1zXVxyXG4gKGxldFxyXG4gIFtwYXRocy10by1kYXRhIChpbnRvICN7fSAobWFwIDpleHBvdW5kL2luIHByb2JsZW1zKSldXHJcbiAgKHJlbW92ZVxyXG4gICAoZm5cclxuICAgIFtwcm9ibGVtXVxyXG4gICAgKHNvbWVcclxuICAgICAoZm4gW3BhdGhdIChwYXRocy9wcmVmaXgtcGF0aD8gKDpleHBvdW5kL2luIHByb2JsZW0pIHBhdGgpKVxyXG4gICAgIHBhdGhzLXRvLWRhdGEpKVxyXG4gICBwcm9ibGVtcykpKVxyXG4ifSB7OnN5bSBmaXgtdmlhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgcHJvYmxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpeC12aWFcclxuIFtzcGVjIHByb2JsZW1dXHJcbiAoaWZcclxuICAoPSBzcGVjIChmaXJzdCAoOnZpYSBwcm9ibGVtKSkpXHJcbiAgKGFzc29jIHByb2JsZW0gOmV4cG91bmQvdmlhICg6dmlhIHByb2JsZW0pKVxyXG4gIChhc3NvYyBwcm9ibGVtIDpleHBvdW5kL3ZpYSAoaW50byBbc3BlY10gKDp2aWEgcHJvYmxlbSkpKSkpXHJcbiJ9IHs6c3ltIGFubm90YXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cGxhaW4tZGF0YV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFubm90YXRlXHJcbiBbZXhwbGFpbi1kYXRhXVxyXG4gKGxldFxyXG4gIFt7OmtleXNcclxuICAgIFs6Y2xvanVyZS5zcGVjLmFscGhhL3Byb2JsZW1zXHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS92YWx1ZVxyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvYXJnc1xyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvcmV0XHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS9mblxyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvZmFpbHVyZVxyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvc3BlY119XHJcbiAgIGV4cGxhaW4tZGF0YVxyXG4gICBjYWxsZXJcclxuICAgKG9yXHJcbiAgICAoOmNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NhbGxlciBleHBsYWluLWRhdGEpXHJcbiAgICAoOm9yY2hlc3RyYS5zcGVjLnRlc3QvY2FsbGVyIGV4cGxhaW4tZGF0YSkpXHJcbiAgIGZvcm1cclxuICAgKGlmXHJcbiAgICAobm90PSA6aW5zdHJ1bWVudCBmYWlsdXJlKVxyXG4gICAgdmFsdWVcclxuICAgIChjb25kXHJcbiAgICAgKGNvbnRhaW5zPyBleHBsYWluLWRhdGEgOmNsb2p1cmUuc3BlYy5hbHBoYS9yZXQpXHJcbiAgICAgcmV0XHJcbiAgICAgKGNvbnRhaW5zPyBleHBsYWluLWRhdGEgOmNsb2p1cmUuc3BlYy5hbHBoYS9mbilcclxuICAgICBmblxyXG4gICAgIChjb250YWlucz8gZXhwbGFpbi1kYXRhIDpjbG9qdXJlLnNwZWMuYWxwaGEvYXJncylcclxuICAgICBhcmdzKSlcclxuICAgcHJvYmxlbXMnXHJcbiAgIChtYXBcclxuICAgIChjb21wXHJcbiAgICAgKHBhcnRpYWwgYWRqdXN0LWluIGZvcm0pXHJcbiAgICAgKHBhcnRpYWwgYWRqdXN0LXBhdGggZmFpbHVyZSlcclxuICAgICAocGFydGlhbCBhZGQtc3BlYyBzcGVjKVxyXG4gICAgIChwYXJ0aWFsIGZpeC12aWEgc3BlYylcclxuICAgICAoZm4qIFtwMV9fNDkwMTIjXSAoYXNzb2MgcDFfXzQ5MDEyIyA6ZXhwb3VuZC9mb3JtIGZvcm0pKSlcclxuICAgIHByb2JsZW1zKV1cclxuICAoYXNzb2NcclxuICAgZXhwbGFpbi1kYXRhXHJcbiAgIDpleHBvdW5kL2Zvcm1cclxuICAgZm9ybVxyXG4gICA6ZXhwb3VuZC9jYWxsZXJcclxuICAgY2FsbGVyXHJcbiAgIDpleHBvdW5kL3Byb2JsZW1zXHJcbiAgIHByb2JsZW1zJykpKVxyXG4ifSB7OnN5bSBlc2NhcGUtcmVwbGFjZW1lbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcGF0dGVybiBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjYXBlLXJlcGxhY2VtZW50XHJcbiBbcGF0dGVybiBzXVxyXG4gIz8oOmNsaiAoaWYgKHN0cmluZz8gcGF0dGVybikgcyAoc3RyaW5nL3JlLXF1b3RlLXJlcGxhY2VtZW50IHMpKSA6Y2xqcyAoc3RyaW5nL3JlcGxhY2UgcyAjXCJcXCRcIiBcIiQkJCRcIikpKVxyXG4ifSB7OnN5bSBoaWdobGlnaHRlZC12YWx1ZSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgcHJvYmxlbSwgcmV0dXJucyBhIHByZXR0eSBwcmludGVkXG4gICBzdHJpbmcgdGhhdCBoaWdobGlnaHRzIHRoZSBwcm9ibGVtIHZhbHVlIiwgOmFyZ2xpc3RzIChbb3B0cyBwcm9ibGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGlnaGxpZ2h0ZWQtdmFsdWVcclxuIFwiR2l2ZW4gYSBwcm9ibGVtLCByZXR1cm5zIGEgcHJldHR5IHByaW50ZWRcXG4gICBzdHJpbmcgdGhhdCBoaWdobGlnaHRzIHRoZSBwcm9ibGVtIHZhbHVlXCJcclxuIFtvcHRzIHByb2JsZW1dXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbOmV4cG91bmQvZm9ybSA6ZXhwb3VuZC9pbl19XHJcbiAgIHByb2JsZW1cclxuICAgezprZXlzIFtzaG93LXZhbGlkLXZhbHVlcz9dLCA6b3Ige3Nob3ctdmFsaWQtdmFsdWVzPyBmYWxzZX19XHJcbiAgIG9wdHNcclxuICAgdmFsdWUtYXQtcGF0aFxyXG4gICAodmFsdWUtaW4gZm9ybSBpbilcclxuICAgcmVsZXZhbnRcclxuICAgKHN0clxyXG4gICAgXCIoXCJcclxuICAgIDpleHBvdW5kLnByb2JsZW1zL3JlbGV2YW50XHJcbiAgICBcInwoXCJcclxuICAgIDpleHBvdW5kLnByb2JsZW1zL2t2LXJlbGV2YW50XHJcbiAgICBcIlxcXFxzK1wiXHJcbiAgICA6ZXhwb3VuZC5wcm9ibGVtcy9rdi1yZWxldmFudFxyXG4gICAgXCIpKVwiKVxyXG4gICByZWdleFxyXG4gICAocmUtcGF0dGVybiAoc3RyIFwiKC4qKVwiIHJlbGV2YW50IFwiLipcIikpXHJcbiAgIHNcclxuICAgKGJpbmRpbmdcclxuICAgIFsqcHJpbnQtbmFtZXNwYWNlLW1hcHMqIGZhbHNlXVxyXG4gICAgKHByaW50ZXIvcHByaW50LXN0clxyXG4gICAgICh3YWxrL3ByZXdhbGstcmVwbGFjZVxyXG4gICAgICB7OmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCAnLi4ufVxyXG4gICAgICAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyBmb3JtIGluKSkpKVxyXG4gICBbbGluZSBwcmVmaXggJiBfbW9yZV1cclxuICAgKHJlLWZpbmQgcmVnZXggcylcclxuICAgaGlnaGxpZ2h0ZWQtbGluZVxyXG4gICAoLT5cclxuICAgIGxpbmVcclxuICAgIChzdHJpbmcvcmVwbGFjZVxyXG4gICAgIChyZS1wYXR0ZXJuIHJlbGV2YW50KVxyXG4gICAgIChlc2NhcGUtcmVwbGFjZW1lbnRcclxuICAgICAgKHJlLXBhdHRlcm4gcmVsZXZhbnQpXHJcbiAgICAgIChwcmludGVyL2luZGVudFxyXG4gICAgICAgMFxyXG4gICAgICAgKGNvdW50IHByZWZpeClcclxuICAgICAgIChhbnNpL2NvbG9yIChwcmludGVyL3BwcmludC1zdHIgdmFsdWUtYXQtcGF0aCkgOmJhZC12YWx1ZSkpKSlcclxuICAgIChzdHJcclxuICAgICBcIlxcblwiXHJcbiAgICAgKGFuc2kvY29sb3JcclxuICAgICAgKGhpZ2hsaWdodC1saW5lIHByZWZpeCAocHJpbnRlci9wcHJpbnQtc3RyIHZhbHVlLWF0LXBhdGgpKVxyXG4gICAgICA6cG9pbnRlcikpKV1cclxuICAocHJpbnRlci9uby10cmFpbGluZy13aGl0ZXNwYWNlXHJcbiAgIChzdHJpbmcvcmVwbGFjZVxyXG4gICAgc1xyXG4gICAgbGluZVxyXG4gICAgKGVzY2FwZS1yZXBsYWNlbWVudCBsaW5lIGhpZ2hsaWdodGVkLWxpbmUpKSkpKVxyXG4ifSB7OnN5bSBzdW1tYXJ5LWZvcm0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc2hvdy12YWxpZC12YWx1ZXM/IGZvcm0gaW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdW1tYXJ5LWZvcm1cclxuIFtzaG93LXZhbGlkLXZhbHVlcz8gZm9ybSBpbl1cclxuIChsZXRcclxuICBbW2sgJiByc3RdXHJcbiAgIGluXHJcbiAgIHJzdFxyXG4gICAob3IgcnN0IFtdKVxyXG4gICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAoaWYgc2hvdy12YWxpZC12YWx1ZXM/IGZvcm0gKGJsYW5rLWZvcm0gZm9ybSkpXVxyXG4gIChjb25kXHJcbiAgIChlbXB0eT8gaW4pXHJcbiAgIDpleHBvdW5kLnByb2JsZW1zL3JlbGV2YW50XHJcbiAgIChhbmQgKG1hcD8gZm9ybSkgKHBhdGhzL2twcz8gaykpXHJcbiAgICgtPlxyXG4gICAgZGlzcGxheWVkLWZvcm1cclxuICAgIChkaXNzb2MgKDprZXkgaykpXHJcbiAgICAoYXNzb2NcclxuICAgICAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyAoOmtleSBrKSByc3QpXHJcbiAgICAgOmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCkpXHJcbiAgIChhbmQgKG1hcD8gZm9ybSkgKHBhdGhzL2t2cHM/IGspKVxyXG4gICAocmVjdXIgc2hvdy12YWxpZC12YWx1ZXM/IChudGggKHNlcSBmb3JtKSAoOmlkeCBrKSkgcnN0KVxyXG4gICAoYXNzb2NpYXRpdmU/IGZvcm0pXHJcbiAgIChhc3NvY1xyXG4gICAgZGlzcGxheWVkLWZvcm1cclxuICAgIGtcclxuICAgIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/IChnZXQgZm9ybSBrKSByc3QpKVxyXG4gICAoYW5kIChpbnQ/IGspIChzZXE/IGZvcm0pKVxyXG4gICAoYXBwbHlcclxuICAgIGxpc3RcclxuICAgICgtPlxyXG4gICAgIGRpc3BsYXllZC1mb3JtXHJcbiAgICAgdmVjXHJcbiAgICAgKGFzc29jIGsgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gKG50aCBmb3JtIGspIHJzdCkpKSlcclxuICAgKGFuZCAoaW50PyBrKSAoc2V0PyBmb3JtKSlcclxuICAgKGludG9cclxuICAgICN7fVxyXG4gICAgKC0+XHJcbiAgICAgZGlzcGxheWVkLWZvcm1cclxuICAgICB2ZWNcclxuICAgICAoYXNzb2NcclxuICAgICAga1xyXG4gICAgICAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyAobnRoIChzZXEgZm9ybSkgaykgcnN0KSkpKVxyXG4gICAoYW5kIChpbnQ/IGspIChsaXN0PyBmb3JtKSlcclxuICAgKGludG9cclxuICAgICcoKVxyXG4gICAgKC0+XHJcbiAgICAgZGlzcGxheWVkLWZvcm1cclxuICAgICB2ZWNcclxuICAgICAoYXNzb2NcclxuICAgICAga1xyXG4gICAgICAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyAobnRoIChzZXEgZm9ybSkgaykgcnN0KSkpKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3dcclxuICAgIChleC1pbmZvXHJcbiAgICAgXCJDYW5ub3QgZmluZCBwYXRoIHNlZ21lbnQgaW4gZm9ybS4gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IHVzaW5nIGNvbmZvcm1lcnMgdG8gdHJhbnNmb3JtIHZhbHVlcywgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBpbiBFeHBvdW5kXCJcclxuICAgICB7OmZvcm0gZm9ybSwgOmluIGlufSkpKSkpXHJcbiJ9IHs6c3ltIGJsYW5rLWZvcm0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJsYW5rLWZvcm1cclxuIFtmb3JtXVxyXG4gKGNvbmRcclxuICAobWFwPyBmb3JtKVxyXG4gICh6aXBtYXAgKGtleXMgZm9ybSkgKHJlcGVhdCA6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50KSlcclxuICAodmVjdG9yPyBmb3JtKVxyXG4gICh2ZWMgKHJlcGVhdCAoY291bnQgZm9ybSkgOmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCkpXHJcbiAgKHNldD8gZm9ybSlcclxuICBmb3JtXHJcbiAgKG9yIChsaXN0PyBmb3JtKSAoc2VxPyBmb3JtKSlcclxuICAoYXBwbHkgbGlzdCAocmVwZWF0IChjb3VudCBmb3JtKSA6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50KSlcclxuICA6ZWxzZVxyXG4gIDpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQpKVxyXG4ifSksIGNsanMuc3BlYy5nZW4uYWxwaGEgKHs6c3ltIHF1aWNrLWNoZWNrLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoWyYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm4gcXVpY2stY2hlY2sgWyYgYXJnc10gKGFwcGx5IEBxdWljay1jaGVjay1yZWYgYXJncykpXHJcbiJ9IHs6c3ltIGZvci1hbGwqLCA6bWV0YSB7OmRvYyAiRHluYW1pY2FsbHkgbG9hZGVkIGNsb2p1cmUudGVzdC5jaGVjay5wcm9wZXJ0aWVzL2Zvci1hbGwqLiIsIDphcmdsaXN0cyAoWyYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvci1hbGwqXHJcbiBcIkR5bmFtaWNhbGx5IGxvYWRlZCBjbG9qdXJlLnRlc3QuY2hlY2sucHJvcGVydGllcy9mb3ItYWxsKi5cIlxyXG4gWyYgYXJnc11cclxuIChhcHBseSBAZm9yLWFsbCotcmVmIGFyZ3MpKVxyXG4ifSB7OnN5bSBkZWxheS1pbXBsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2dmbmRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWxheS1pbXBsXHJcbiBbZ2ZuZF1cclxuIChnZW5lcmF0b3IgKGZuIFtybmQgc2l6ZV0gKCg6Z2VuIEBnZm5kKSBybmQgc2l6ZSkpKSlcclxuIn0gezpzeW0gY2F0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGdlbmVyYXRvciBvZiBhIHNlcXVlbmNlIGNhdGVuYXRlZCBmcm9tIHJlc3VsdHMgb2ZcbmdlbnMsIGVhY2ggb2Ygd2hpY2ggc2hvdWxkIGdlbmVyYXRlIHNvbWV0aGluZyBzZXF1ZW50aWFsLiIsIDphcmdsaXN0cyAoWyYgZ2Vuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhdFxyXG4gXCJSZXR1cm5zIGEgZ2VuZXJhdG9yIG9mIGEgc2VxdWVuY2UgY2F0ZW5hdGVkIGZyb20gcmVzdWx0cyBvZlxcbmdlbnMsIGVhY2ggb2Ygd2hpY2ggc2hvdWxkIGdlbmVyYXRlIHNvbWV0aGluZyBzZXF1ZW50aWFsLlwiXHJcbiBbJiBnZW5zXVxyXG4gKGZtYXBcclxuICAoZm4qIFtwMV9fNDg5NzMjXSAoYXBwbHkgY29uY2F0IHAxX180ODk3MyMpKVxyXG4gIChhcHBseSB0dXBsZSBnZW5zKSkpXHJcbiJ9IHs6c3ltIGdlbi1mb3ItcHJlZCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgcHJlZGljYXRlLCByZXR1cm5zIGEgYnVpbHQtaW4gZ2VuZXJhdG9yIGlmIG9uZSBleGlzdHMuIiwgOmFyZ2xpc3RzIChbcHJlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdlbi1mb3ItcHJlZFxyXG4gXCJHaXZlbiBhIHByZWRpY2F0ZSwgcmV0dXJucyBhIGJ1aWx0LWluIGdlbmVyYXRvciBpZiBvbmUgZXhpc3RzLlwiXHJcbiBbcHJlZF1cclxuIChpZiAoc2V0PyBwcmVkKSAoZWxlbWVudHMgcHJlZCkgKGdldCBAZ2VuLWJ1aWx0aW5zIHByZWQpKSlcclxuIn0pfSwgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gbm90ZT99