| 1 | MToiJFNyZWFjdC5mcmFnbWVudCIKNTpJWzQ0MzY5LFsiL19uZXh0L3N0YXRpYy9jaHVua3MvMDhxMXQxZWNmOTktOS5qcyIsIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzBocnoxM2l5aGVhbXQuanMiXSwiVGhlbWVQcm92aWRlciJdCjY6SVs0NDM2OSxbIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzA4cTF0MWVjZjk5LTkuanMiLCIvX25leHQvc3RhdGljL2NodW5rcy8waHJ6MTNpeWhlYW10LmpzIl0sIldhbGxldFByb3ZpZGVyIl0KNzpJWzQ0MzY5LFsiL19uZXh0L3N0YXRpYy9jaHVua3MvMDhxMXQxZWNmOTktOS5qcyIsIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzBocnoxM2l5aGVhbXQuanMiXSwiUHJvcG9zYWxzUHJvdmlkZXIiXQo4OklbNDQxNDIsWyIvX25leHQvc3RhdGljL2NodW5rcy8wOHExdDFlY2Y5OS05LmpzIiwiL19uZXh0L3N0YXRpYy9jaHVua3MvMGhyejEzaXloZWFtdC5qcyJdLCJkZWZhdWx0Il0KOTpJWzI4ODY1LFsiL19uZXh0L3N0YXRpYy9jaHVua3MvMDhxMXQxZWNmOTktOS5qcyIsIi9fbmV4dC9zdGF0aWMvY2h1bmtzLzBocnoxM2l5aGVhbXQuanMiXSwiZGVmYXVsdCJdCjpITFsiL19uZXh0L3N0YXRpYy9jaHVua3MvMF90dHhqYS1taS1fdi5jc3MiLCJzdHlsZSJdCjpITFsiL21hc2NvdC53ZWJwIiwiaW1hZ2UiLHsidHlwZSI6ImltYWdlL3dlYnAifV0KMjpUYzMxLAogICAgICAgICAgLyogU2ltcGxlIHByZS1SZWFjdCBsb2FkZXI6IHB1cmUgQ1NTLCBubyBKUyByZXF1aXJlZCAqLwogICAgICAgICAgI2ljLXByZS1sb2FkZXIgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7IGluc2V0OiAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDgwYjEyOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQocmdiYSg1OSwxMzAsMjQ2LDAuMDkpIDFweCwgdHJhbnNwYXJlbnQgMXB4KTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNHB4IDI0cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBmb250LWZhbWlseTogJ091dGZpdCcsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIHotaW5kZXg6IDk5OTk5OwogICAgICAgICAgfQogICAgICAgICAgI2ljLXByZS1sb2FkZXIgLmljLXdyYXAgeyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiA0NjBweDsgcGFkZGluZzogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtYnJhbmQgeyBmb250LXNpemU6IDIycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjZmZmOyBsZXR0ZXItc3BhY2luZzogLTAuNXB4OyBtYXJnaW4tYm90dG9tOiAyOHB4OyB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtYnJhbmQgc3BhbiB7IGNvbG9yOiAjM2I4MmY2OyB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtdHJhY2sgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogNjRweDsgbWFyZ2luLWJvdHRvbTogMThweDsgfQogICAgICAgICAgI2ljLXByZS1sb2FkZXIgLmljLXJhaWwgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgICAgICBoZWlnaHQ6IDhweDsgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksMTMwLDI0NiwwLjEyKTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1OSwxMzAsMjQ2LDAuMjUpOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgfQogICAgICAgICAgI2ljLXByZS1sb2FkZXIgLmljLWZpbGwgewogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzI1NjNlYiwgIzNiODJmNiwgIzBlYTVlOSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAxMnB4IHJnYmEoNTksMTMwLDI0NiwwLjU1KTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBpYy1maWxsIDQuNXMgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICAgICAgICB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtbWFzY290IHsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDUwJTsKICAgICAgICAgICAgd2lkdGg6IDY0cHg7IGhlaWdodDogNjRweDsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggMTRweCByZ2JhKDU5LDEzMCwyNDYsMC41NSkpOwogICAgICAgICAgICBhbmltYXRpb246IGljLXNsaWRlIDQuNXMgZWFzZS1vdXQgZm9yd2FyZHMsIGljLWJvYiAxLjJzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgICAgfQogICAgICAgICAgI2ljLXByZS1sb2FkZXIgLmljLW1hc2NvdCBpbWcgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyAtd2Via2l0LXVzZXItZHJhZzogbm9uZTsgdXNlci1zZWxlY3Q6IG5vbmU7IH0KICAgICAgICAgICNpYy1wcmUtbG9hZGVyIC5pYy1zdGF0dXMgeyBjb2xvcjogIzk0YTNiODsgZm9udC1zaXplOiAxNHB4OyB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtcmVsb2FkIHsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAyMnB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMXB4IDI0cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTksMTMwLDI0NiwwLjU1KTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzI1NjNlYiwgIzBlYTVlOSk7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDE4cHggcmdiYSg1OSwxMzAsMjQ2LDAuNCk7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xNXMsIGJveC1zaGFkb3cgLjE1czsKICAgICAgICAgIH0KICAgICAgICAgICNpYy1wcmUtbG9hZGVyIC5pYy1yZWxvYWQ6aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNnB4IDI0cHggcmdiYSg1OSwxMzAsMjQ2LDAuNik7CiAgICAgICAgICB9CiAgICAgICAgICAjaWMtcHJlLWxvYWRlciAuaWMtaGludCB7IGNvbG9yOiAjNjQ3NDhiOyBmb250LXNpemU6IDExcHg7IG1hcmdpbi10b3A6IDEycHg7IH0KICAgICAgICAgIEBrZXlmcmFtZXMgaWMtZmlsbCAgeyAwJSB7IHdpZHRoOiA0JTsgfSAxMDAlIHsgd2lkdGg6IDkyJTsgfSB9CiAgICAgICAgICBAa2V5ZnJhbWVzIGljLXNsaWRlIHsgMCUgeyBsZWZ0OiA0JTsgfSAgMTAwJSB7IGxlZnQ6IDkyJTsgfSB9CiAgICAgICAgICBAa2V5ZnJhbWVzIGljLWJvYiAgIHsgMCUsMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01NSUpIHJvdGF0ZSgtM2RlZyk7IH0gNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTQ1JSkgcm90YXRlKDNkZWcpOyB9IH0KICAgICAgICAwOnsicnNjIjpbIiQiLCIkMSIsImMiLHsiY2hpbGRyZW4iOltbWyIkIiwibGluayIsIjAiLHsicmVsIjoic3R5bGVzaGVldCIsImhyZWYiOiIvX25leHQvc3RhdGljL2NodW5rcy8wX3R0eGphLW1pLV92LmNzcyIsInByZWNlZGVuY2UiOiJuZXh0In1dLFsiJCIsInNjcmlwdCIsInNjcmlwdC0wIix7InNyYyI6Ii9fbmV4dC9zdGF0aWMvY2h1bmtzLzA4cTF0MWVjZjk5LTkuanMiLCJhc3luYyI6dHJ1ZX1dLFsiJCIsInNjcmlwdCIsInNjcmlwdC0xIix7InNyYyI6Ii9fbmV4dC9zdGF0aWMvY2h1bmtzLzBocnoxM2l5aGVhbXQuanMiLCJhc3luYyI6dHJ1ZX1dXSxbIiQiLCJodG1sIixudWxsLHsibGFuZyI6ImVuIiwiY2xhc3NOYW1lIjoib3V0Zml0XzIwZTczMDE3LW1vZHVsZV9fbllPZXFXX192YXJpYWJsZSBqZXRicmFpbnNfbW9ub181OWVmZTNkOS1tb2R1bGVfX0FIcmpPcV9fdmFyaWFibGUiLCJjaGlsZHJlbiI6W1siJCIsImhlYWQiLG51bGwseyJjaGlsZHJlbiI6W1siJCIsImxpbmsiLG51bGwseyJyZWwiOiJwcmVsb2FkIiwiYXMiOiJpbWFnZSIsImhyZWYiOiIvbWFzY290LndlYnAiLCJ0eXBlIjoiaW1hZ2Uvd2VicCJ9XSxbIiQiLCJzdHlsZSIsbnVsbCx7ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp7Il9faHRtbCI6IiQyIn19XV19XSwiJEwzIl19XV19XSwiaXNQYXJ0aWFsIjpmYWxzZSwic3RhbGVUaW1lIjozMDAsInZhcnlQYXJhbXMiOm51bGwsImJ1aWxkSWQiOiJEdGpyWE1FeGtGQWhLM2dSbnE2cHYifQo0OlQ2MzIsCiAgICAgICAgICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gU3RyaXAgc3RhbGUgP19yPSBjYWNoZS1idXN0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBhZGRlZCBieSBvbGQgbG9hZGVyIHZlcnNpb25zCiAgICAgICAgICAgIC8vICh0aGUgbmVhci5wYWdlIHdlYjQgZ2F0ZXdheSA0MDRzIG9uIHF1ZXJ5IHN0cmluZ3MpCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnNlYXJjaCAmJiAvWz8mXV9yPS8udGVzdChsb2NhdGlvbi5zZWFyY2gpKSB7CiAgICAgICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbi5oYXNoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2goZSkge30KCiAgICAgICAgICAgIC8vIE1ha2UgdGhlIFJlbG9hZCBidXR0b24gYSBjbGVhbiByZWxvYWQgKHN0cmlwIHF1ZXJ5IHN0cmluZykKICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpYy1yZWxvYWQtYnRuJyk7CiAgICAgICAgICAgIGlmIChidG4pIHsKICAgICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1JlbG9hZGluZ+KApic7CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uaGFzaCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFdoZW4gUmVhY3QgcmVuZGVycyB0aGUgcmVhbCBhcHAgKGl0IGhhcyA8bmF2PiksIHJlbW92ZSB0aGUgbG9hZGVyLgogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWMtcHJlLWxvYWRlcicpOwogICAgICAgICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgICAgICAgIHZhciBkb25lID0gZmFsc2U7CiAgICAgICAgICAgIGZ1bmN0aW9uIGhpZGUoKXsKICAgICAgICAgICAgICBpZiAoZG9uZSB8fCAhZWwpIHJldHVybjsKICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgLjI1cyBlYXNlJzsKICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJzAnOwogICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgaWYgKGVsICYmIGVsLnBhcmVudE5vZGUpIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOyB9LCAyNjApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvYnMgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpewogICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCduYXYnKSkgeyBvYnMuZGlzY29ubmVjdCgpOyBoaWRlKCk7IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG9icy5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOwogICAgICAgICAgfSkoKTsKICAgICAgICAzOlsiJCIsImJvZHkiLG51bGwseyJzdHlsZSI6eyJiYWNrZ3JvdW5kIjoiIzA4MGIxMiIsIm1hcmdpbiI6MH0sImNoaWxkcmVuIjpbWyIkIiwiZGl2IixudWxsLHsiaWQiOiJpYy1wcmUtbG9hZGVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiY2hpbGRyZW4iOlsiJCIsImRpdiIsbnVsbCx7ImNsYXNzTmFtZSI6ImljLXdyYXAiLCJjaGlsZHJlbiI6W1siJCIsImRpdiIsbnVsbCx7ImNsYXNzTmFtZSI6ImljLWJyYW5kIiwiY2hpbGRyZW4iOlsiSXJvbiIsWyIkIiwic3BhbiIsbnVsbCx7ImNoaWxkcmVuIjoiU2hpZWxkIn1dXX1dLFsiJCIsImRpdiIsbnVsbCx7ImNsYXNzTmFtZSI6ImljLXRyYWNrIiwiY2hpbGRyZW4iOltbIiQiLCJkaXYiLG51bGwseyJjbGFzc05hbWUiOiJpYy1yYWlsIiwiY2hpbGRyZW4iOlsiJCIsImRpdiIsbnVsbCx7ImNsYXNzTmFtZSI6ImljLWZpbGwifV19XSxbIiQiLCJkaXYiLG51bGwseyJjbGFzc05hbWUiOiJpYy1tYXNjb3QiLCJjaGlsZHJlbiI6WyIkIiwiaW1nIixudWxsLHsic3JjIjoiL21hc2NvdC53ZWJwIiwiYWx0IjoiIn1dfV1dfV0sWyIkIiwiZGl2IixudWxsLHsiY2xhc3NOYW1lIjoiaWMtc3RhdHVzIiwiY2hpbGRyZW4iOiJMb2FkaW5nIElyb25TaGllbGTigKYifV0sWyIkIiwiYSIsbnVsbCx7ImhyZWYiOiIuLyIsImNsYXNzTmFtZSI6ImljLXJlbG9hZCIsImlkIjoiaWMtcmVsb2FkLWJ0biIsImNoaWxkcmVuIjoiUmVsb2FkIHBhZ2UifV0sWyIkIiwiZGl2IixudWxsLHsiY2xhc3NOYW1lIjoiaWMtaGludCIsImNoaWxkcmVuIjoiSWYgdGhpcyBoYW5ncywgY2xpY2sgcmVsb2FkLiJ9XV19XX1dLFsiJCIsInNjcmlwdCIsbnVsbCx7ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp7Il9faHRtbCI6IiQ0In19XSxbIiQiLCIkTDUiLG51bGwseyJjaGlsZHJlbiI6WyIkIiwiJEw2IixudWxsLHsiY2hpbGRyZW4iOlsiJCIsIiRMNyIsbnVsbCx7ImNoaWxkcmVuIjpbIiQiLCIkTDgiLG51bGwseyJwYXJhbGxlbFJvdXRlcktleSI6ImNoaWxkcmVuIiwidGVtcGxhdGUiOlsiJCIsIiRMOSIsbnVsbCx7fV0sIm5vdEZvdW5kIjpbW1siJCIsInRpdGxlIixudWxsLHsiY2hpbGRyZW4iOiI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuIn1dLFsiJCIsImRpdiIsbnVsbCx7InN0eWxlIjp7ImZvbnRGYW1pbHkiOiJzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFJvYm90byxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSSBFbW9qaVwiIiwiaGVpZ2h0IjoiMTAwdmgiLCJ0ZXh0QWxpZ24iOiJjZW50ZXIiLCJkaXNwbGF5IjoiZmxleCIsImZsZXhEaXJlY3Rpb24iOiJjb2x1bW4iLCJhbGlnbkl0ZW1zIjoiY2VudGVyIiwianVzdGlmeUNvbnRlbnQiOiJjZW50ZXIifSwiY2hpbGRyZW4iOlsiJCIsImRpdiIsbnVsbCx7ImNoaWxkcmVuIjpbWyIkIiwic3R5bGUiLG51bGwseyJkYW5nZXJvdXNseVNldElubmVySFRNTCI6eyJfX2h0bWwiOiJib2R5e2NvbG9yOiMwMDA7YmFja2dyb3VuZDojZmZmO21hcmdpbjowfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtib2R5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMDAwfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMyl9fSJ9fV0sWyIkIiwiaDEiLG51bGwseyJjbGFzc05hbWUiOiJuZXh0LWVycm9yLWgxIiwic3R5bGUiOnsiZGlzcGxheSI6ImlubGluZS1ibG9jayIsIm1hcmdpbiI6IjAgMjBweCAwIDAiLCJwYWRkaW5nIjoiMCAyM3B4IDAgMCIsImZvbnRTaXplIjoyNCwiZm9udFdlaWdodCI6NTAwLCJ2ZXJ0aWNhbEFsaWduIjoidG9wIiwibGluZUhlaWdodCI6IjQ5cHgifSwiY2hpbGRyZW4iOjQwNH1dLFsiJCIsImRpdiIsbnVsbCx7InN0eWxlIjp7ImRpc3BsYXkiOiJpbmxpbmUtYmxvY2sifSwiY2hpbGRyZW4iOlsiJCIsImgyIixudWxsLHsic3R5bGUiOnsiZm9udFNpemUiOjE0LCJmb250V2VpZ2h0Ijo0MDAsImxpbmVIZWlnaHQiOiI0OXB4IiwibWFyZ2luIjowfSwiY2hpbGRyZW4iOiJUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kLiJ9XX1dXX1dfV1dLFtdXX1dfV19XX1dXX1dCg== |
| 1 | KGdsb2JhbFRoaXMuVFVSQk9QQUNLfHwoZ2xvYmFsVGhpcy5UVVJCT1BBQ0s9W10pKS5wdXNoKFsib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQ6dm9pZCAwLDgxNDYyLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuS2V5U2l6ZT1yLktleVR5cGU9dm9pZCAwLGZ1bmN0aW9uKGUpe2VbZS5FRDI1NTE5PTBdPSJFRDI1NTE5IixlW2UuU0VDUDI1NksxPTFdPSJTRUNQMjU2SzEifShufHwoci5LZXlUeXBlPW49e30pKSxyLktleVNpemU9e1NFQ1JFVF9LRVk6MzIsRUQyNTUxOV9QVUJMSUNfS0VZOjMyLFNFQ1AyNTZrMV9QVUJMSUNfS0VZOjY0fX0sOTIyNDcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5LZXlQYWlyQmFzZT12b2lkIDA7Y2xhc3Mgbnt9ci5LZXlQYWlyQmFzZT1ufSw3NjY4OCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkRFRkFVTFRfRlVOQ1RJT05fQ0FMTF9HQVM9dm9pZCAwLHIuREVGQVVMVF9GVU5DVElPTl9DQUxMX0dBUz0zMDAwMDAwMDAwMDAwMG59LDUzNjYzLChlLHQscik9Pnt0LmV4cG9ydHM9e0dhc0xpbWl0RXhjZWVkZWQ6IkV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBnYXMgYWxsb3dlZCB0byBidXJuIHBlciBjb250cmFjdCIsTWV0aG9kRW1wdHlOYW1lOiJNZXRob2QgbmFtZSBpcyBlbXB0eSIsV2FzbWVyQ29tcGlsZUVycm9yOiJXYXNtZXIgY29tcGlsYXRpb24gZXJyb3I6IHt7bXNnfX0iLEd1ZXN0UGFuaWM6IlNtYXJ0IGNvbnRyYWN0IHBhbmlja2VkOiB7e3BhbmljX21zZ319IixNZW1vcnk6IkVycm9yIGNyZWF0aW5nIFdhc20gbWVtb3J5IixHYXNFeGNlZWRlZDoiRXhjZWVkZWQgdGhlIHByZXBhaWQgZ2FzIixNZXRob2RVVEY4RXJyb3I6Ik1ldGhvZCBuYW1lIGlzIG5vdCB2YWxpZCBVVEY4IHN0cmluZyIsQmFkVVRGMTY6IlN0cmluZyBlbmNvZGluZyBpcyBiYWQgVVRGLTE2IHNlcXVlbmNlIixXYXNtVHJhcDoiV2ViQXNzZW1ibHkgdHJhcDoge3ttc2d9fSIsR2FzSW5zdHJ1bWVudGF0aW9uOiJHYXMgaW5zdHJ1bWVudGF0aW9uIGZhaWxlZCBvciBjb250cmFjdCBoYXMgZGVuaWVkIGluc3RydWN0aW9ucy4iLEludmFsaWRQcm9taXNlSW5kZXg6Int7cHJvbWlzZV9pZHh9fSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIHByb21pc2VzIixJbnZhbGlkUHJvbWlzZVJlc3VsdEluZGV4OiJBY2Nlc3NlZCBpbnZhbGlkIHByb21pc2UgcmVzdWx0IGluZGV4OiB7e3Jlc3VsdF9pZHh9fSIsRGVzZXJpYWxpemF0aW9uOiJFcnJvciBoYXBwZW5lZCB3aGlsZSBkZXNlcmlhbGl6aW5nIHRoZSBtb2R1bGUiLE1ldGhvZE5vdEZvdW5kOiJDb250cmFjdCBtZXRob2QgaXMgbm90IGZvdW5kIixJbnZhbGlkUmVnaXN0ZXJJZDoiQWNjZXNzZWQgaW52YWxpZCByZWdpc3RlciBpZDoge3tyZWdpc3Rlcl9pZH19IixJbnZhbGlkUmVjZWlwdEluZGV4OiJWTSBMb2dpYyByZXR1cm5lZCBhbiBpbnZhbGlkIHJlY2VpcHQgaW5kZXg6IHt7cmVjZWlwdF9pbmRleH19IixFbXB0eU1ldGhvZE5hbWU6Ik1ldGhvZCBuYW1lIGlzIGVtcHR5IGluIGNvbnRyYWN0IGNhbGwiLENhbm5vdFJldHVybkpvaW50UHJvbWlzZToiUmV0dXJuaW5nIGpvaW50IHByb21pc2UgaXMgY3VycmVudGx5IHByb2hpYml0ZWQiLFN0YWNrSGVpZ2h0SW5zdHJ1bWVudGF0aW9uOiJTdGFjayBpbnN0cnVtZW50YXRpb24gZmFpbGVkIixDb2RlRG9lc05vdEV4aXN0OiJDYW5ub3QgZmluZCBjb250cmFjdCBjb2RlIGZvciBhY2NvdW50IHt7YWNjb3VudF9pZH19IixNZXRob2RJbnZhbGlkU2lnbmF0dXJlOiJJbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUiLEludGVnZXJPdmVyZmxvdzoiSW50ZWdlciBvdmVyZmxvdyBoYXBwZW5lZCBkdXJpbmcgY29udHJhY3QgZXhlY3V0aW9uIixNZW1vcnlBY2Nlc3NWaW9sYXRpb246Ik1lbW9yeUFjY2Vzc1Zpb2xhdGlvbiIsSW52YWxpZEl0ZXJhdG9ySW5kZXg6Ikl0ZXJhdG9yIGluZGV4IHt7aXRlcmF0b3JfaW5kZXh9fSBkb2VzIG5vdCBleGlzdCIsSXRlcmF0b3JXYXNJbnZhbGlkYXRlZDoiSXRlcmF0b3Ige3tpdGVyYXRvcl9pbmRleH19IHdhcyBpbnZhbGlkYXRlZCBhZnRlciBpdHMgY3JlYXRpb24gYnkgcGVyZm9ybWluZyBhIG11dGFibGUgb3BlcmF0aW9uIG9uIHRyaWUiLEludmFsaWRBY2NvdW50SWQ6IlZNIExvZ2ljIHJldHVybmVkIGFuIGludmFsaWQgYWNjb3VudCBpZCIsU2VyaWFsaXphdGlvbjoiRXJyb3IgaGFwcGVuZWQgd2hpbGUgc2VyaWFsaXppbmcgdGhlIG1vZHVsZSIsQ2Fubm90QXBwZW5kQWN0aW9uVG9Kb2ludFByb21pc2U6IkFjdGlvbnMgY2FuIG9ubHkgYmUgYXBwZW5kZWQgdG8gbm9uLWpvaW50IHByb21pc2UuIixJbnRlcm5hbE1lbW9yeURlY2xhcmVkOiJJbnRlcm5hbCBtZW1vcnkgZGVjbGFyYXRpb24gaGFzIGJlZW4gZm91bmQgaW4gdGhlIG1vZHVsZSIsSW5zdGFudGlhdGU6IkVycm9yIGhhcHBlbmVkIGR1cmluZyBpbnN0YW50aWF0aW9uIixQcm9oaWJpdGVkSW5WaWV3OiJ7e21ldGhvZF9uYW1lfX0gaXMgbm90IGFsbG93ZWQgaW4gdmlldyBjYWxscyIsSW52YWxpZE1ldGhvZE5hbWU6IlZNIExvZ2ljIHJldHVybmVkIGFuIGludmFsaWQgbWV0aG9kIG5hbWUiLEJhZFVURjg6IlN0cmluZyBlbmNvZGluZyBpcyBiYWQgVVRGLTggc2VxdWVuY2UiLEJhbGFuY2VFeGNlZWRlZDoiRXhjZWVkZWQgdGhlIGFjY291bnQgYmFsYW5jZSIsTGlua0Vycm9yOiJXYXNtIGNvbnRyYWN0IGxpbmsgZXJyb3I6IHt7bXNnfX0iLEludmFsaWRQdWJsaWNLZXk6IlZNIExvZ2ljIHByb3ZpZGVkIGFuIGludmFsaWQgcHVibGljIGtleSIsQWN0b3JOb1Blcm1pc3Npb246IkFjdG9yIHt7YWN0b3JfaWR9fSBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2NvdW50IHt7YWNjb3VudF9pZH19IHRvIGNvbXBsZXRlIHRoZSBhY3Rpb24iLExhY2tCYWxhbmNlRm9yU3RhdGU6IlRoZSBhY2NvdW50IHt7YWNjb3VudF9pZH19IHdvdWxkbid0IGhhdmUgZW5vdWdoIGJhbGFuY2UgdG8gY292ZXIgc3RvcmFnZSwgcmVxdWlyZWQgdG8gaGF2ZSB7e2Ftb3VudH19IHlvY3RvTkVBUiBtb3JlIixSZWNlaXZlck1pc21hdGNoOiJXcm9uZyBBY2Nlc3NLZXkgdXNlZCBmb3IgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uIGlzIHNlbnQgdG8gcmVjZWl2ZXJfaWQ9e3t0eF9yZWNlaXZlcn19LCBidXQgaXMgc2lnbmVkIHdpdGggZnVuY3Rpb24gY2FsbCBhY2Nlc3Mga2V5IHRoYXQgcmVzdHJpY3RlZCB0byBvbmx5IHVzZSB3aXRoIHJlY2VpdmVyX2lkPXt7YWtfcmVjZWl2ZXJ9fS4gRWl0aGVyIGNoYW5nZSByZWNlaXZlcl9pZCBpbiB5b3VyIHRyYW5zYWN0aW9uIG9yIHN3aXRjaCB0byB1c2UgYSBGdWxsQWNjZXNzS2V5LiIsQ29zdE92ZXJmbG93OiJUcmFuc2FjdGlvbiBnYXMgb3IgYmFsYW5jZSBjb3N0IGlzIHRvbyBoaWdoIixJbnZhbGlkU2lnbmF0dXJlOiJUcmFuc2FjdGlvbiBpcyBub3Qgc2lnbmVkIHdpdGggdGhlIGdpdmVuIHB1YmxpYyBrZXkiLEFjY2Vzc0tleU5vdEZvdW5kOidTaWduZXIgInt7YWNjb3VudF9pZH19IiBkb2VzblwndCBoYXZlIGFjY2VzcyBrZXkgd2l0aCB0aGUgZ2l2ZW4gcHVibGljX2tleSB7e3B1YmxpY19rZXl9fScsTm90RW5vdWdoQmFsYW5jZToiU2VuZGVyIHt7c2lnbmVyX2lkfX0gZG9lcyBub3QgaGF2ZSBlbm91Z2ggYmFsYW5jZSB7eyNmb3JtYXROZWFyfX17e2JhbGFuY2V9fXt7L2Zvcm1hdE5lYXJ9fSBmb3Igb3BlcmF0aW9uIGNvc3Rpbmcge3sjZm9ybWF0TmVhcn19e3tjb3N0fX17ey9mb3JtYXROZWFyfX0iLE5vdEVub3VnaEFsbG93YW5jZToiQWNjZXNzIEtleSB7YWNjb3VudF9pZH06e3B1YmxpY19rZXl9IGRvZXMgbm90IGhhdmUgZW5vdWdoIGJhbGFuY2Uge3sjZm9ybWF0TmVhcn19e3thbGxvd2FuY2V9fXt7L2Zvcm1hdE5lYXJ9fSBmb3IgdHJhbnNhY3Rpb24gY29zdGluZyB7eyNmb3JtYXROZWFyfX17e2Nvc3R9fXt7L2Zvcm1hdE5lYXJ9fSIsRXhwaXJlZDoiVHJhbnNhY3Rpb24gaGFzIGV4cGlyZWQiLERlbGV0ZUFjY291bnRTdGFraW5nOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGlzIHN0YWtpbmcgYW5kIGNhbiBub3QgYmUgZGVsZXRlZCIsU2lnbmVyRG9lc05vdEV4aXN0OiJTaWduZXIge3tzaWduZXJfaWR9fSBkb2VzIG5vdCBleGlzdCIsVHJpZXNUb1N0YWtlOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IHRyaWVkIHRvIHN0YWtlIHt7I2Zvcm1hdE5lYXJ9fXt7c3Rha2V9fXt7L2Zvcm1hdE5lYXJ9fSwgYnV0IGhhcyBzdGFrZWQge3sjZm9ybWF0TmVhcn19e3tsb2NrZWR9fXt7L2Zvcm1hdE5lYXJ9fSBhbmQgb25seSBoYXMge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0iLEFkZEtleUFscmVhZHlFeGlzdHM6IlRoZSBwdWJsaWMga2V5IHt7cHVibGljX2tleX19IGlzIGFscmVhZHkgdXNlZCBmb3IgYW4gZXhpc3RpbmcgYWNjZXNzIGtleSIsSW52YWxpZFNpZ25lcjoiSW52YWxpZCBzaWduZXIgYWNjb3VudCBJRCB7e3NpZ25lcl9pZH19IGFjY29yZGluZyB0byByZXF1aXJlbWVudHMiLENyZWF0ZUFjY291bnROb3RBbGxvd2VkOiJUaGUgbmV3IGFjY291bnRfaWQge3thY2NvdW50X2lkfX0gY2FuJ3QgYmUgY3JlYXRlZCBieSB7e3ByZWRlY2Vzc29yX2lkfX0iLFJlcXVpcmVzRnVsbEFjY2VzczoiVGhlIHRyYW5zYWN0aW9uIGNvbnRhaW5zIG1vcmUgdGhlbiBvbmUgYWN0aW9uLCBidXQgaXQgd2FzIHNpZ25lZCB3aXRoIGFuIGFjY2VzcyBrZXkgd2hpY2ggYWxsb3dzIHRyYW5zYWN0aW9uIHRvIGFwcGx5IG9ubHkgb25lIHNwZWNpZmljIGFjdGlvbi4gVG8gYXBwbHkgbW9yZSB0aGVuIG9uZSBhY3Rpb25zIFRYIG11c3QgYmUgc2lnbmVkIHdpdGggYSBmdWxsIGFjY2VzcyBrZXkiLFRyaWVzVG9VbnN0YWtlOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGlzIG5vdCB5ZXQgc3Rha2VkLCBidXQgdHJpZWQgdG8gdW5zdGFrZSIsSW52YWxpZE5vbmNlOiJUcmFuc2FjdGlvbiBub25jZSB7e3R4X25vbmNlfX0gbXVzdCBiZSBsYXJnZXIgdGhhbiBub25jZSBvZiB0aGUgdXNlZCBhY2Nlc3Mga2V5IHt7YWtfbm9uY2V9fSIsQWNjb3VudEFscmVhZHlFeGlzdHM6IkNhbid0IGNyZWF0ZSBhIG5ldyBhY2NvdW50IHt7YWNjb3VudF9pZH19LCBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzIixJbnZhbGlkQ2hhaW46IlRyYW5zYWN0aW9uIHBhcmVudCBibG9jayBoYXNoIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGNoYWluIixBY2NvdW50RG9lc05vdEV4aXN0OiJDYW4ndCBjb21wbGV0ZSB0aGUgYWN0aW9uIGJlY2F1c2UgYWNjb3VudCB7e2FjY291bnRfaWR9fSBkb2Vzbid0IGV4aXN0IixBY2Nlc3NLZXlEb2VzTm90RXhpc3Q6IkNhbid0IGNvbXBsZXRlIHRoZSBhY3Rpb24gYmVjYXVzZSBhY2Nlc3Mga2V5IHt7cHVibGljX2tleX19IGRvZXNuJ3QgZXhpc3QiLE1ldGhvZE5hbWVNaXNtYXRjaDoiVHJhbnNhY3Rpb24gbWV0aG9kIG5hbWUge3ttZXRob2RfbmFtZX19IGlzbid0IGFsbG93ZWQgYnkgdGhlIGFjY2VzcyBrZXkiLERlbGV0ZUFjY291bnRIYXNSZW50OiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGNhbid0IGJlIGRlbGV0ZWQuIEl0IGhhcyB7eyNmb3JtYXROZWFyfX17e2JhbGFuY2V9fXt7L2Zvcm1hdE5lYXJ9fSwgd2hpY2ggaXMgZW5vdWdoIHRvIGNvdmVyIHRoZSByZW50IixEZWxldGVBY2NvdW50SGFzRW5vdWdoQmFsYW5jZToiQWNjb3VudCB7e2FjY291bnRfaWR9fSBjYW4ndCBiZSBkZWxldGVkLiBJdCBoYXMge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0sIHdoaWNoIGlzIGVub3VnaCB0byBjb3ZlciBpdCdzIHN0b3JhZ2UiLEludmFsaWRSZWNlaXZlcjoiSW52YWxpZCByZWNlaXZlciBhY2NvdW50IElEIHt7cmVjZWl2ZXJfaWR9fSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIixEZWxldGVLZXlEb2VzTm90RXhpc3Q6IkFjY291bnQge3thY2NvdW50X2lkfX0gdHJpZXMgdG8gcmVtb3ZlIGFuIGFjY2VzcyBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IixUaW1lb3V0OiJUaW1lb3V0IGV4Y2VlZGVkIixDbG9zZWQ6IkNvbm5lY3Rpb24gY2xvc2VkIixTaGFyZENvbmdlc3RlZDoiU2hhcmQge3tzaGFyZF9pZH19IHJlamVjdGVkIHRoZSB0cmFuc2FjdGlvbiBkdWUgdG8gY29uZ2VzdGlvbiBsZXZlbCB7e2Nvbmdlc3Rpb25fbGV2ZWx9fSwgdHJ5IGFnYWluIGxhdGVyIixTaGFyZFN0dWNrOiJTaGFyZCB7e3NoYXJkX2lkfX0gcmVqZWN0ZWQgdGhlIHRyYW5zYWN0aW9uIGJlY2F1c2UgaXQgbWlzc2VkIHt7bWlzc2VkX2NodW5rc319IGNodW5rcyBhbmQgbmVlZHMgdG8gcmVjb3ZlciBiZWZvcmUgYWNjZXB0aW5nIG5ldyB0cmFuc2FjdGlvbnMsIHRyeSBhZ2FpbiBsYXRlciJ9fSw2Njg1OSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5FcnJvck1lc3NhZ2VzPXZvaWQgMCxyLkVycm9yTWVzc2FnZXM9bihlLnIoNTM2NjMpKS5kZWZhdWx0fSw2ODA0MiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkFzc2lnbmFibGU9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSl7T2JqZWN0LmtleXMoZSkubWFwKHQ9Pnt0aGlzW3RdPWVbdF19KX19ci5Bc3NpZ25hYmxlPW59LDk4NTk4LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRW51bT12b2lkIDA7Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZigxIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXRocm93IEVycm9yKCJFbnVtIGNhbiBvbmx5IHRha2Ugc2luZ2xlIHZhbHVlIik7T2JqZWN0LmtleXMoZSkubWFwKHQ9Pnt0aGlzW3RdPWVbdF19KX19ci5FbnVtPW59LDk5MDI3LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRXJyb3JDb250ZXh0PXIuVHlwZWRFcnJvcj1yLkFyZ3VtZW50VHlwZUVycm9yPXIuUG9zaXRpb25hbEFyZ3NFcnJvcj12b2lkIDA7Y2xhc3MgbiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNvbnRyYWN0IG1ldGhvZCBjYWxscyBleHBlY3QgbmFtZWQgYXJndW1lbnRzIHdyYXBwZWQgaW4gb2JqZWN0LCBlLmcuIHsgYXJnTmFtZTE6IGFyZ1ZhbHVlMSwgYXJnTmFtZTI6IGFyZ1ZhbHVlMiB9Iil9fXIuUG9zaXRpb25hbEFyZ3NFcnJvcj1uO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoYEV4cGVjdGVkICR7dH0gZm9yICcke2V9JyBhcmd1bWVudCwgYnV0IGdvdCAnJHtKU09OLnN0cmluZ2lmeShyKX0nYCl9fXIuQXJndW1lbnRUeXBlRXJyb3I9aTtjbGFzcyBvIGV4dGVuZHMgRXJyb3J7dHlwZTtjb250ZXh0O2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcihlKSx0aGlzLnR5cGU9dHx8IlVudHlwZWRFcnJvciIsdGhpcy5jb250ZXh0PXJ9fXIuVHlwZWRFcnJvcj1vO2NsYXNzIGF7dHJhbnNhY3Rpb25IYXNoO2NvbnN0cnVjdG9yKGUpe3RoaXMudHJhbnNhY3Rpb25IYXNoPWV9fXIuRXJyb3JDb250ZXh0PWF9LDM5NzgzLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuSWRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlLlRyYW5zYWN0aW9uPSJ0cmFuc2FjdGlvbiIsZS5SZWNlaXB0PSJyZWNlaXB0In0obnx8KHIuSWRUeXBlPW49e30pKX0sOTU2NCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuLGk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRmluYWxFeGVjdXRpb25TdGF0dXNCYXNpYz1yLkV4ZWN1dGlvblN0YXR1c0Jhc2ljPXZvaWQgMCxmdW5jdGlvbihlKXtlLlVua25vd249IlVua25vd24iLGUuUGVuZGluZz0iUGVuZGluZyIsZS5GYWlsdXJlPSJGYWlsdXJlIn0obnx8KHIuRXhlY3V0aW9uU3RhdHVzQmFzaWM9bj17fSkpLGZ1bmN0aW9uKGUpe2UuTm90U3RhcnRlZD0iTm90U3RhcnRlZCIsZS5TdGFydGVkPSJTdGFydGVkIixlLkZhaWx1cmU9IkZhaWx1cmUifShpfHwoci5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljPWk9e30pKX0sODYyNzcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljPXIuRXhlY3V0aW9uU3RhdHVzQmFzaWM9ci5JZFR5cGU9dm9pZCAwO3ZhciBuPWUucigzOTc4Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIklkVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uSWRUeXBlfX0pO3ZhciBpPWUucig5NTY0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiRXhlY3V0aW9uU3RhdHVzQmFzaWMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJGaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pfSwyNDg2MywoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49cik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOyghaXx8KCJnZXQiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKSkmJihpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saSl9OmZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpLGVbbl09dFtyXX0pLGk9ZS5lJiZlLmUuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKSJkZWZhdWx0Ij09PXJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpfHxuKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGkoZS5yKDY4MDQyKSxyKSxpKGUucig5ODU5OCksciksaShlLnIoOTkwMjcpLHIpLGkoZS5yKDg2Mjc3KSxyKX0sNDUyODcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5iYXNlRGVjb2RlPXIuYmFzZUVuY29kZT1yLnBhcnNlTmVhckFtb3VudD1yLmZvcm1hdE5lYXJBbW91bnQ9ci5ORUFSX05PTUlOQVRJT049ci5ORUFSX05PTUlOQVRJT05fRVhQPXZvaWQgMDtsZXQgbj1lLnIoNTYzMyk7ci5ORUFSX05PTUlOQVRJT05fRVhQPTI0LHIuTkVBUl9OT01JTkFUSU9OPTEwbioqQmlnSW50KHIuTkVBUl9OT01JTkFUSU9OX0VYUCk7bGV0IGk9W10sbz0xMG47Zm9yKGxldCBlPTAsdD01bjtlPHIuTkVBUl9OT01JTkFUSU9OX0VYUDtlKyssdCo9bylpW2VdPXQ7ZnVuY3Rpb24gYShlLHQ9ci5ORUFSX05PTUlOQVRJT05fRVhQKXtsZXQgbj1CaWdJbnQoZSk7aWYodCE9PXIuTkVBUl9OT01JTkFUSU9OX0VYUCl7bGV0IGU9ci5ORUFSX05PTUlOQVRJT05fRVhQLXQtMTtlPjAmJihuKz1pW2VdKX1sZXQgbz0oZT1uLnRvU3RyaW5nKCkpLnN1YnN0cmluZygwLGUubGVuZ3RoLXIuTkVBUl9OT01JTkFUSU9OX0VYUCl8fCIwIixzPWUuc3Vic3RyaW5nKGUubGVuZ3RoLXIuTkVBUl9OT01JTkFUSU9OX0VYUCkucGFkU3RhcnQoci5ORUFSX05PTUlOQVRJT05fRVhQLCIwIikuc3Vic3RyaW5nKDAsdCk7cmV0dXJuIHUoYCR7ZChvKX0uJHtzfWApfWZ1bmN0aW9uIHMoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9KGU9YyhlKSkuc3BsaXQoIi4iKSxuPXRbMF0saT10WzFdfHwiIjtpZih0Lmxlbmd0aD4yfHxpLmxlbmd0aD5yLk5FQVJfTk9NSU5BVElPTl9FWFApdGhyb3cgRXJyb3IoYENhbm5vdCBwYXJzZSAnJHtlfScgYXMgTkVBUiBhbW91bnRgKTtyZXR1cm4gZihuK2kucGFkRW5kKHIuTkVBUl9OT01JTkFUSU9OX0VYUCwiMCIpKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywiIikudHJpbSgpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXC4/MCokLywiIil9ZnVuY3Rpb24gZihlKXtyZXR1cm4iIj09PShlPWUucmVwbGFjZSgvXjArLywiIikpPyIwIjplfWZ1bmN0aW9uIGQoZSl7bGV0IHQ9LygtP1xkKykoXGR7M30pLztmb3IoO3QudGVzdChlKTspZT1lLnJlcGxhY2UodCwiJDEsJDIiKTtyZXR1cm4gZX1yLmZvcm1hdE5lYXJBbW91bnQ9YSxyLnBhcnNlTmVhckFtb3VudD1zLHIuYmFzZUVuY29kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlLmNoYXJDb2RlQXQocikpO2U9bmV3IFVpbnQ4QXJyYXkodCl9cmV0dXJuIG4uYmFzZTU4LmVuY29kZShlKX0sci5iYXNlRGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBuLmJhc2U1OC5kZWNvZGUoZSl9fSw3NzgwNSwoZSx0LHIpPT57dC5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2NoZW1hIjp7IkFjY2Vzc0tleU5vdEZvdW5kIjp7Im5hbWUiOiJBY2Nlc3NLZXlOb3RGb3VuZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsInB1YmxpY19rZXkiOiIifX0sIkFjY291bnRBbHJlYWR5RXhpc3RzIjp7Im5hbWUiOiJBY2NvdW50QWxyZWFkeUV4aXN0cyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiQWNjb3VudERvZXNOb3RFeGlzdCI6eyJuYW1lIjoiQWNjb3VudERvZXNOb3RFeGlzdCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiQWN0aW9uRXJyb3IiOnsibmFtZSI6IkFjdGlvbkVycm9yIiwic3VidHlwZXMiOlsiQWNjb3VudEFscmVhZHlFeGlzdHMiLCJBY2NvdW50RG9lc05vdEV4aXN0IiwiQ3JlYXRlQWNjb3VudE9ubHlCeVJlZ2lzdHJhciIsIkNyZWF0ZUFjY291bnROb3RBbGxvd2VkIiwiQWN0b3JOb1Blcm1pc3Npb24iLCJEZWxldGVLZXlEb2VzTm90RXhpc3QiLCJBZGRLZXlBbHJlYWR5RXhpc3RzIiwiRGVsZXRlQWNjb3VudFN0YWtpbmciLCJMYWNrQmFsYW5jZUZvclN0YXRlIiwiVHJpZXNUb1Vuc3Rha2UiLCJUcmllc1RvU3Rha2UiLCJJbnN1ZmZpY2llbnRTdGFrZSIsIkZ1bmN0aW9uQ2FsbEVycm9yIiwiTmV3UmVjZWlwdFZhbGlkYXRpb25FcnJvciIsIk9ubHlJbXBsaWNpdEFjY291bnRDcmVhdGlvbkFsbG93ZWQiLCJEZWxldGVBY2NvdW50V2l0aExhcmdlU3RhdGUiLCJEZWxlZ2F0ZUFjdGlvbkludmFsaWRTaWduYXR1cmUiLCJEZWxlZ2F0ZUFjdGlvblNlbmRlckRvZXNOb3RNYXRjaFR4UmVjZWl2ZXIiLCJEZWxlZ2F0ZUFjdGlvbkV4cGlyZWQiLCJEZWxlZ2F0ZUFjdGlvbkFjY2Vzc0tleUVycm9yIiwiRGVsZWdhdGVBY3Rpb25JbnZhbGlkTm9uY2UiLCJEZWxlZ2F0ZUFjdGlvbk5vbmNlVG9vTGFyZ2UiXSwicHJvcHMiOnsiaW5kZXgiOiIifX0sIkFjdGlvbnNWYWxpZGF0aW9uRXJyb3IiOnsibmFtZSI6IkFjdGlvbnNWYWxpZGF0aW9uRXJyb3IiLCJzdWJ0eXBlcyI6WyJEZWxldGVBY3Rpb25NdXN0QmVGaW5hbCIsIlRvdGFsUHJlcGFpZEdhc0V4Y2VlZGVkIiwiVG90YWxOdW1iZXJPZkFjdGlvbnNFeGNlZWRlZCIsIkFkZEtleU1ldGhvZE5hbWVzTnVtYmVyT2ZCeXRlc0V4Y2VlZGVkIiwiQWRkS2V5TWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIiwiSW50ZWdlck92ZXJmbG93IiwiSW52YWxpZEFjY291bnRJZCIsIkNvbnRyYWN0U2l6ZUV4Y2VlZGVkIiwiRnVuY3Rpb25DYWxsTWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIiwiRnVuY3Rpb25DYWxsQXJndW1lbnRzTGVuZ3RoRXhjZWVkZWQiLCJVbnN1aXRhYmxlU3Rha2luZ0tleSIsIkZ1bmN0aW9uQ2FsbFplcm9BdHRhY2hlZEdhcyIsIkRlbGVnYXRlQWN0aW9uTXVzdEJlT25seU9uZSIsIlVuc3VwcG9ydGVkUHJvdG9jb2xGZWF0dXJlIl0sInByb3BzIjp7fX0sIkFjdG9yTm9QZXJtaXNzaW9uIjp7Im5hbWUiOiJBY3Rvck5vUGVybWlzc2lvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsImFjdG9yX2lkIjoiIn19LCJBZGRLZXlBbHJlYWR5RXhpc3RzIjp7Im5hbWUiOiJBZGRLZXlBbHJlYWR5RXhpc3RzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwicHVibGljX2tleSI6IiJ9fSwiQWRkS2V5TWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJBZGRLZXlNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJBZGRLZXlNZXRob2ROYW1lc051bWJlck9mQnl0ZXNFeGNlZWRlZCI6eyJuYW1lIjoiQWRkS2V5TWV0aG9kTmFtZXNOdW1iZXJPZkJ5dGVzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwidG90YWxfbnVtYmVyX29mX2J5dGVzIjoiIn19LCJBbHRCbjEyOEludmFsaWRJbnB1dCI6eyJuYW1lIjoiQWx0Qm4xMjhJbnZhbGlkSW5wdXQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1zZyI6IiJ9fSwiQmFkVVRGMTYiOnsibmFtZSI6IkJhZFVURjE2Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJCYWRVVEY4Ijp7Im5hbWUiOiJCYWRVVEY4Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJCYWxhbmNlRXhjZWVkZWQiOnsibmFtZSI6IkJhbGFuY2VFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQmFsYW5jZU1pc21hdGNoRXJyb3IiOnsibmFtZSI6IkJhbGFuY2VNaXNtYXRjaEVycm9yIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJmaW5hbF9hY2NvdW50c19iYWxhbmNlIjoiIiwiZmluYWxfcG9zdHBvbmVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJmb3J3YXJkZWRfYnVmZmVyZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsImluY29taW5nX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJpbmNvbWluZ192YWxpZGF0b3JfcmV3YXJkcyI6IiIsImluaXRpYWxfYWNjb3VudHNfYmFsYW5jZSI6IiIsImluaXRpYWxfcG9zdHBvbmVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJuZXdfYnVmZmVyZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsIm5ld19kZWxheWVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJvdGhlcl9idXJudF9hbW91bnQiOiIiLCJvdXRnb2luZ19yZWNlaXB0c19iYWxhbmNlIjoiIiwicHJvY2Vzc2VkX2RlbGF5ZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsInNsYXNoZWRfYnVybnRfYW1vdW50IjoiIiwidHhfYnVybnRfYW1vdW50IjoiIn19LCJDYWxsSW5kaXJlY3RPT0IiOnsibmFtZSI6IkNhbGxJbmRpcmVjdE9PQiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQ2Fubm90QXBwZW5kQWN0aW9uVG9Kb2ludFByb21pc2UiOnsibmFtZSI6IkNhbm5vdEFwcGVuZEFjdGlvblRvSm9pbnRQcm9taXNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJDYW5ub3RSZXR1cm5Kb2ludFByb21pc2UiOnsibmFtZSI6IkNhbm5vdFJldHVybkpvaW50UHJvbWlzZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQ29kZURvZXNOb3RFeGlzdCI6eyJuYW1lIjoiQ29kZURvZXNOb3RFeGlzdCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiQ29tcGlsYXRpb25FcnJvciI6eyJuYW1lIjoiQ29tcGlsYXRpb25FcnJvciIsInN1YnR5cGVzIjpbIkNvZGVEb2VzTm90RXhpc3QiLCJQcmVwYXJlRXJyb3IiLCJXYXNtZXJDb21waWxlRXJyb3IiXSwicHJvcHMiOnt9fSwiQ29udHJhY3RTaXplRXhjZWVkZWQiOnsibmFtZSI6IkNvbnRyYWN0U2l6ZUV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInNpemUiOiIifX0sIkNvc3RPdmVyZmxvdyI6eyJuYW1lIjoiQ29zdE92ZXJmbG93Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJDcmVhdGVBY2NvdW50Tm90QWxsb3dlZCI6eyJuYW1lIjoiQ3JlYXRlQWNjb3VudE5vdEFsbG93ZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJwcmVkZWNlc3Nvcl9pZCI6IiJ9fSwiQ3JlYXRlQWNjb3VudE9ubHlCeVJlZ2lzdHJhciI6eyJuYW1lIjoiQ3JlYXRlQWNjb3VudE9ubHlCeVJlZ2lzdHJhciIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsInByZWRlY2Vzc29yX2lkIjoiIiwicmVnaXN0cmFyX2FjY291bnRfaWQiOiIifX0sIkRlbGVnYXRlQWN0aW9uRXhwaXJlZCI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25FeHBpcmVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJEZWxlZ2F0ZUFjdGlvbkludmFsaWROb25jZSI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25JbnZhbGlkTm9uY2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFrX25vbmNlIjoiIiwiZGVsZWdhdGVfbm9uY2UiOiIifX0sIkRlbGVnYXRlQWN0aW9uSW52YWxpZFNpZ25hdHVyZSI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25JbnZhbGlkU2lnbmF0dXJlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJEZWxlZ2F0ZUFjdGlvbk11c3RCZU9ubHlPbmUiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uTXVzdEJlT25seU9uZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRGVsZWdhdGVBY3Rpb25Ob25jZVRvb0xhcmdlIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvbk5vbmNlVG9vTGFyZ2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImRlbGVnYXRlX25vbmNlIjoiIiwidXBwZXJfYm91bmQiOiIifX0sIkRlbGVnYXRlQWN0aW9uU2VuZGVyRG9lc05vdE1hdGNoVHhSZWNlaXZlciI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25TZW5kZXJEb2VzTm90TWF0Y2hUeFJlY2VpdmVyIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJyZWNlaXZlcl9pZCI6IiIsInNlbmRlcl9pZCI6IiJ9fSwiRGVsZXRlQWNjb3VudFN0YWtpbmciOnsibmFtZSI6IkRlbGV0ZUFjY291bnRTdGFraW5nIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJEZWxldGVBY2NvdW50V2l0aExhcmdlU3RhdGUiOnsibmFtZSI6IkRlbGV0ZUFjY291bnRXaXRoTGFyZ2VTdGF0ZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiRGVsZXRlQWN0aW9uTXVzdEJlRmluYWwiOnsibmFtZSI6IkRlbGV0ZUFjdGlvbk11c3RCZUZpbmFsIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJEZWxldGVLZXlEb2VzTm90RXhpc3QiOnsibmFtZSI6IkRlbGV0ZUtleURvZXNOb3RFeGlzdCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsInB1YmxpY19rZXkiOiIifX0sIkRlcG9zaXRXaXRoRnVuY3Rpb25DYWxsIjp7Im5hbWUiOiJEZXBvc2l0V2l0aEZ1bmN0aW9uQ2FsbCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRGVwcmVjYXRlZCI6eyJuYW1lIjoiRGVwcmVjYXRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibWV0aG9kX25hbWUiOiIifX0sIkRlc2VyaWFsaXphdGlvbiI6eyJuYW1lIjoiRGVzZXJpYWxpemF0aW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJFQ1JlY292ZXJFcnJvciI6eyJuYW1lIjoiRUNSZWNvdmVyRXJyb3IiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1zZyI6IiJ9fSwiRWQyNTUxOVZlcmlmeUludmFsaWRJbnB1dCI6eyJuYW1lIjoiRWQyNTUxOVZlcmlmeUludmFsaWRJbnB1dCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibXNnIjoiIn19LCJFbXB0eU1ldGhvZE5hbWUiOnsibmFtZSI6IkVtcHR5TWV0aG9kTmFtZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRXhwaXJlZCI6eyJuYW1lIjoiRXhwaXJlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRnVuY3Rpb25DYWxsQXJndW1lbnRzTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IkZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0xlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiRnVuY3Rpb25DYWxsTWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJGdW5jdGlvbkNhbGxNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJGdW5jdGlvbkNhbGxaZXJvQXR0YWNoZWRHYXMiOnsibmFtZSI6IkZ1bmN0aW9uQ2FsbFplcm9BdHRhY2hlZEdhcyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiR2FzRXhjZWVkZWQiOnsibmFtZSI6Ikdhc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJHYXNJbnN0cnVtZW50YXRpb24iOnsibmFtZSI6Ikdhc0luc3RydW1lbnRhdGlvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiR2FzTGltaXRFeGNlZWRlZCI6eyJuYW1lIjoiR2FzTGltaXRFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiR2VuZXJpY1RyYXAiOnsibmFtZSI6IkdlbmVyaWNUcmFwIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJHdWVzdFBhbmljIjp7Im5hbWUiOiJHdWVzdFBhbmljIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJwYW5pY19tc2ciOiIifX0sIkhvc3RFcnJvciI6eyJuYW1lIjoiSG9zdEVycm9yIiwic3VidHlwZXMiOlsiQmFkVVRGMTYiLCJCYWRVVEY4IiwiR2FzRXhjZWVkZWQiLCJHYXNMaW1pdEV4Y2VlZGVkIiwiQmFsYW5jZUV4Y2VlZGVkIiwiRW1wdHlNZXRob2ROYW1lIiwiR3Vlc3RQYW5pYyIsIkludGVnZXJPdmVyZmxvdyIsIkludmFsaWRQcm9taXNlSW5kZXgiLCJDYW5ub3RBcHBlbmRBY3Rpb25Ub0pvaW50UHJvbWlzZSIsIkNhbm5vdFJldHVybkpvaW50UHJvbWlzZSIsIkludmFsaWRQcm9taXNlUmVzdWx0SW5kZXgiLCJJbnZhbGlkUmVnaXN0ZXJJZCIsIkl0ZXJhdG9yV2FzSW52YWxpZGF0ZWQiLCJNZW1vcnlBY2Nlc3NWaW9sYXRpb24iLCJJbnZhbGlkUmVjZWlwdEluZGV4IiwiSW52YWxpZEl0ZXJhdG9ySW5kZXgiLCJJbnZhbGlkQWNjb3VudElkIiwiSW52YWxpZE1ldGhvZE5hbWUiLCJJbnZhbGlkUHVibGljS2V5IiwiUHJvaGliaXRlZEluVmlldyIsIk51bWJlck9mTG9nc0V4Y2VlZGVkIiwiS2V5TGVuZ3RoRXhjZWVkZWQiLCJWYWx1ZUxlbmd0aEV4Y2VlZGVkIiwiVG90YWxMb2dMZW5ndGhFeGNlZWRlZCIsIk51bWJlclByb21pc2VzRXhjZWVkZWQiLCJOdW1iZXJJbnB1dERhdGFEZXBlbmRlbmNpZXNFeGNlZWRlZCIsIlJldHVybmVkVmFsdWVMZW5ndGhFeGNlZWRlZCIsIkNvbnRyYWN0U2l6ZUV4Y2VlZGVkIiwiRGVwcmVjYXRlZCIsIkVDUmVjb3ZlckVycm9yIiwiQWx0Qm4xMjhJbnZhbGlkSW5wdXQiLCJFZDI1NTE5VmVyaWZ5SW52YWxpZElucHV0Il0sInByb3BzIjp7fX0sIklsbGVnYWxBcml0aG1ldGljIjp7Im5hbWUiOiJJbGxlZ2FsQXJpdGhtZXRpYyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW5jb3JyZWN0Q2FsbEluZGlyZWN0U2lnbmF0dXJlIjp7Im5hbWUiOiJJbmNvcnJlY3RDYWxsSW5kaXJlY3RTaWduYXR1cmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkluZGlyZWN0Q2FsbFRvTnVsbCI6eyJuYW1lIjoiSW5kaXJlY3RDYWxsVG9OdWxsIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnN0YW50aWF0ZSI6eyJuYW1lIjoiSW5zdGFudGlhdGUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkluc3VmZmljaWVudFN0YWtlIjp7Im5hbWUiOiJJbnN1ZmZpY2llbnRTdGFrZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsIm1pbmltdW1fc3Rha2UiOiIiLCJzdGFrZSI6IiJ9fSwiSW50ZWdlck92ZXJmbG93Ijp7Im5hbWUiOiJJbnRlZ2VyT3ZlcmZsb3ciLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludGVybmFsTWVtb3J5RGVjbGFyZWQiOnsibmFtZSI6IkludGVybmFsTWVtb3J5RGVjbGFyZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWRBY2Nlc3NLZXlFcnJvciI6eyJuYW1lIjoiSW52YWxpZEFjY2Vzc0tleUVycm9yIiwic3VidHlwZXMiOlsiQWNjZXNzS2V5Tm90Rm91bmQiLCJSZWNlaXZlck1pc21hdGNoIiwiTWV0aG9kTmFtZU1pc21hdGNoIiwiUmVxdWlyZXNGdWxsQWNjZXNzIiwiTm90RW5vdWdoQWxsb3dhbmNlIiwiRGVwb3NpdFdpdGhGdW5jdGlvbkNhbGwiXSwicHJvcHMiOnt9fSwiSW52YWxpZEFjY291bnRJZCI6eyJuYW1lIjoiSW52YWxpZEFjY291bnRJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZENoYWluIjp7Im5hbWUiOiJJbnZhbGlkQ2hhaW4iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWREYXRhUmVjZWl2ZXJJZCI6eyJuYW1lIjoiSW52YWxpZERhdGFSZWNlaXZlcklkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJJbnZhbGlkSXRlcmF0b3JJbmRleCI6eyJuYW1lIjoiSW52YWxpZEl0ZXJhdG9ySW5kZXgiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Iml0ZXJhdG9yX2luZGV4IjoiIn19LCJJbnZhbGlkTWV0aG9kTmFtZSI6eyJuYW1lIjoiSW52YWxpZE1ldGhvZE5hbWUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWROb25jZSI6eyJuYW1lIjoiSW52YWxpZE5vbmNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJha19ub25jZSI6IiIsInR4X25vbmNlIjoiIn19LCJJbnZhbGlkUHJlZGVjZXNzb3JJZCI6eyJuYW1lIjoiSW52YWxpZFByZWRlY2Vzc29ySWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkludmFsaWRQcm9taXNlSW5kZXgiOnsibmFtZSI6IkludmFsaWRQcm9taXNlSW5kZXgiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InByb21pc2VfaWR4IjoiIn19LCJJbnZhbGlkUHJvbWlzZVJlc3VsdEluZGV4Ijp7Im5hbWUiOiJJbnZhbGlkUHJvbWlzZVJlc3VsdEluZGV4Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJyZXN1bHRfaWR4IjoiIn19LCJJbnZhbGlkUHVibGljS2V5Ijp7Im5hbWUiOiJJbnZhbGlkUHVibGljS2V5Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkUmVjZWlwdEluZGV4Ijp7Im5hbWUiOiJJbnZhbGlkUmVjZWlwdEluZGV4Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJyZWNlaXB0X2luZGV4IjoiIn19LCJJbnZhbGlkUmVjZWl2ZXJJZCI6eyJuYW1lIjoiSW52YWxpZFJlY2VpdmVySWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkludmFsaWRSZWdpc3RlcklkIjp7Im5hbWUiOiJJbnZhbGlkUmVnaXN0ZXJJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicmVnaXN0ZXJfaWQiOiIifX0sIkludmFsaWRTaWduYXR1cmUiOnsibmFtZSI6IkludmFsaWRTaWduYXR1cmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWRTaWduZXJJZCI6eyJuYW1lIjoiSW52YWxpZFNpZ25lcklkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJJbnZhbGlkVHhFcnJvciI6eyJuYW1lIjoiSW52YWxpZFR4RXJyb3IiLCJzdWJ0eXBlcyI6WyJJbnZhbGlkQWNjZXNzS2V5RXJyb3IiLCJJbnZhbGlkU2lnbmVySWQiLCJTaWduZXJEb2VzTm90RXhpc3QiLCJJbnZhbGlkTm9uY2UiLCJOb25jZVRvb0xhcmdlIiwiSW52YWxpZFJlY2VpdmVySWQiLCJJbnZhbGlkU2lnbmF0dXJlIiwiTm90RW5vdWdoQmFsYW5jZSIsIkxhY2tCYWxhbmNlRm9yU3RhdGUiLCJDb3N0T3ZlcmZsb3ciLCJJbnZhbGlkQ2hhaW4iLCJFeHBpcmVkIiwiQWN0aW9uc1ZhbGlkYXRpb24iLCJUcmFuc2FjdGlvblNpemVFeGNlZWRlZCIsIlN0b3JhZ2VFcnJvciIsIlNoYXJkQ29uZ2VzdGVkIiwiU2hhcmRTdHVjayJdLCJwcm9wcyI6e319LCJJdGVyYXRvcldhc0ludmFsaWRhdGVkIjp7Im5hbWUiOiJJdGVyYXRvcldhc0ludmFsaWRhdGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJpdGVyYXRvcl9pbmRleCI6IiJ9fSwiS2V5TGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IktleUxlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiTGFja0JhbGFuY2VGb3JTdGF0ZSI6eyJuYW1lIjoiTGFja0JhbGFuY2VGb3JTdGF0ZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsImFtb3VudCI6IiJ9fSwiTWVtb3J5Ijp7Im5hbWUiOiJNZW1vcnkiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1lbW9yeUFjY2Vzc1Zpb2xhdGlvbiI6eyJuYW1lIjoiTWVtb3J5QWNjZXNzVmlvbGF0aW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZW1vcnlPdXRPZkJvdW5kcyI6eyJuYW1lIjoiTWVtb3J5T3V0T2ZCb3VuZHMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1ldGhvZEVtcHR5TmFtZSI6eyJuYW1lIjoiTWV0aG9kRW1wdHlOYW1lIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZXRob2RJbnZhbGlkU2lnbmF0dXJlIjp7Im5hbWUiOiJNZXRob2RJbnZhbGlkU2lnbmF0dXJlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZXRob2ROYW1lTWlzbWF0Y2giOnsibmFtZSI6Ik1ldGhvZE5hbWVNaXNtYXRjaCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibWV0aG9kX25hbWUiOiIifX0sIk1ldGhvZE5vdEZvdW5kIjp7Im5hbWUiOiJNZXRob2ROb3RGb3VuZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWV0aG9kUmVzb2x2ZUVycm9yIjp7Im5hbWUiOiJNZXRob2RSZXNvbHZlRXJyb3IiLCJzdWJ0eXBlcyI6WyJNZXRob2RFbXB0eU5hbWUiLCJNZXRob2ROb3RGb3VuZCIsIk1ldGhvZEludmFsaWRTaWduYXR1cmUiXSwicHJvcHMiOnt9fSwiTWlzYWxpZ25lZEF0b21pY0FjY2VzcyI6eyJuYW1lIjoiTWlzYWxpZ25lZEF0b21pY0FjY2VzcyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTm9uY2VUb29MYXJnZSI6eyJuYW1lIjoiTm9uY2VUb29MYXJnZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsidHhfbm9uY2UiOiIiLCJ1cHBlcl9ib3VuZCI6IiJ9fSwiTm90RW5vdWdoQWxsb3dhbmNlIjp7Im5hbWUiOiJOb3RFbm91Z2hBbGxvd2FuY2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJhbGxvd2FuY2UiOiIiLCJjb3N0IjoiIiwicHVibGljX2tleSI6IiJ9fSwiTm90RW5vdWdoQmFsYW5jZSI6eyJuYW1lIjoiTm90RW5vdWdoQmFsYW5jZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYmFsYW5jZSI6IiIsImNvc3QiOiIiLCJzaWduZXJfaWQiOiIifX0sIk51bWJlcklucHV0RGF0YURlcGVuZGVuY2llc0V4Y2VlZGVkIjp7Im5hbWUiOiJOdW1iZXJJbnB1dERhdGFEZXBlbmRlbmNpZXNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJudW1iZXJfb2ZfaW5wdXRfZGF0YV9kZXBlbmRlbmNpZXMiOiIifX0sIk51bWJlck9mTG9nc0V4Y2VlZGVkIjp7Im5hbWUiOiJOdW1iZXJPZkxvZ3NFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIifX0sIk51bWJlclByb21pc2VzRXhjZWVkZWQiOnsibmFtZSI6Ik51bWJlclByb21pc2VzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwibnVtYmVyX29mX3Byb21pc2VzIjoiIn19LCJPbmx5SW1wbGljaXRBY2NvdW50Q3JlYXRpb25BbGxvd2VkIjp7Im5hbWUiOiJPbmx5SW1wbGljaXRBY2NvdW50Q3JlYXRpb25BbGxvd2VkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJQcmVwYXJlRXJyb3IiOnsibmFtZSI6IlByZXBhcmVFcnJvciIsInN1YnR5cGVzIjpbIlNlcmlhbGl6YXRpb24iLCJEZXNlcmlhbGl6YXRpb24iLCJJbnRlcm5hbE1lbW9yeURlY2xhcmVkIiwiR2FzSW5zdHJ1bWVudGF0aW9uIiwiU3RhY2tIZWlnaHRJbnN0cnVtZW50YXRpb24iLCJJbnN0YW50aWF0ZSIsIk1lbW9yeSIsIlRvb01hbnlGdW5jdGlvbnMiLCJUb29NYW55TG9jYWxzIl0sInByb3BzIjp7fX0sIlByb2hpYml0ZWRJblZpZXciOnsibmFtZSI6IlByb2hpYml0ZWRJblZpZXciLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1ldGhvZF9uYW1lIjoiIn19LCJSZWNlaXB0U2l6ZUV4Y2VlZGVkIjp7Im5hbWUiOiJSZWNlaXB0U2l6ZUV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInNpemUiOiIifX0sIlJlY2VpcHRWYWxpZGF0aW9uRXJyb3IiOnsibmFtZSI6IlJlY2VpcHRWYWxpZGF0aW9uRXJyb3IiLCJzdWJ0eXBlcyI6WyJJbnZhbGlkUHJlZGVjZXNzb3JJZCIsIkludmFsaWRSZWNlaXZlcklkIiwiSW52YWxpZFNpZ25lcklkIiwiSW52YWxpZERhdGFSZWNlaXZlcklkIiwiUmV0dXJuZWRWYWx1ZUxlbmd0aEV4Y2VlZGVkIiwiTnVtYmVySW5wdXREYXRhRGVwZW5kZW5jaWVzRXhjZWVkZWQiLCJBY3Rpb25zVmFsaWRhdGlvbiIsIlJlY2VpcHRTaXplRXhjZWVkZWQiXSwicHJvcHMiOnt9fSwiUmVjZWl2ZXJNaXNtYXRjaCI6eyJuYW1lIjoiUmVjZWl2ZXJNaXNtYXRjaCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWtfcmVjZWl2ZXIiOiIiLCJ0eF9yZWNlaXZlciI6IiJ9fSwiUmVxdWlyZXNGdWxsQWNjZXNzIjp7Im5hbWUiOiJSZXF1aXJlc0Z1bGxBY2Nlc3MiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlJldHVybmVkVmFsdWVMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiUmV0dXJuZWRWYWx1ZUxlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiU2VyaWFsaXphdGlvbiI6eyJuYW1lIjoiU2VyaWFsaXphdGlvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiU2hhcmRDb25nZXN0ZWQiOnsibmFtZSI6IlNoYXJkQ29uZ2VzdGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJjb25nZXN0aW9uX2xldmVsIjoiIiwic2hhcmRfaWQiOiIifX0sIlNoYXJkU3R1Y2siOnsibmFtZSI6IlNoYXJkU3R1Y2siLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1pc3NlZF9jaHVua3MiOiIiLCJzaGFyZF9pZCI6IiJ9fSwiU2lnbmVyRG9lc05vdEV4aXN0Ijp7Im5hbWUiOiJTaWduZXJEb2VzTm90RXhpc3QiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InNpZ25lcl9pZCI6IiJ9fSwiU3RhY2tIZWlnaHRJbnN0cnVtZW50YXRpb24iOnsibmFtZSI6IlN0YWNrSGVpZ2h0SW5zdHJ1bWVudGF0aW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJTdGFja092ZXJmbG93Ijp7Im5hbWUiOiJTdGFja092ZXJmbG93Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJUb29NYW55RnVuY3Rpb25zIjp7Im5hbWUiOiJUb29NYW55RnVuY3Rpb25zIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJUb29NYW55TG9jYWxzIjp7Im5hbWUiOiJUb29NYW55TG9jYWxzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJUb3RhbExvZ0xlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJUb3RhbExvZ0xlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiVG90YWxOdW1iZXJPZkFjdGlvbnNFeGNlZWRlZCI6eyJuYW1lIjoiVG90YWxOdW1iZXJPZkFjdGlvbnNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJ0b3RhbF9udW1iZXJfb2ZfYWN0aW9ucyI6IiJ9fSwiVG90YWxQcmVwYWlkR2FzRXhjZWVkZWQiOnsibmFtZSI6IlRvdGFsUHJlcGFpZEdhc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInRvdGFsX3ByZXBhaWRfZ2FzIjoiIn19LCJUcmFuc2FjdGlvblNpemVFeGNlZWRlZCI6eyJuYW1lIjoiVHJhbnNhY3Rpb25TaXplRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwic2l6ZSI6IiJ9fSwiVHJpZXNUb1N0YWtlIjp7Im5hbWUiOiJUcmllc1RvU3Rha2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJiYWxhbmNlIjoiIiwibG9ja2VkIjoiIiwic3Rha2UiOiIifX0sIlRyaWVzVG9VbnN0YWtlIjp7Im5hbWUiOiJUcmllc1RvVW5zdGFrZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiVHhFeGVjdXRpb25FcnJvciI6eyJuYW1lIjoiVHhFeGVjdXRpb25FcnJvciIsInN1YnR5cGVzIjpbIkFjdGlvbkVycm9yIiwiSW52YWxpZFR4RXJyb3IiXSwicHJvcHMiOnt9fSwiVW5yZWFjaGFibGUiOnsibmFtZSI6IlVucmVhY2hhYmxlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJVbnN1aXRhYmxlU3Rha2luZ0tleSI6eyJuYW1lIjoiVW5zdWl0YWJsZVN0YWtpbmdLZXkiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InB1YmxpY19rZXkiOiIifX0sIlVuc3VwcG9ydGVkUHJvdG9jb2xGZWF0dXJlIjp7Im5hbWUiOiJVbnN1cHBvcnRlZFByb3RvY29sRmVhdHVyZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicHJvdG9jb2xfZmVhdHVyZSI6IiIsInZlcnNpb24iOiIifX0sIlZhbHVlTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IlZhbHVlTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJXYXNtVHJhcCI6eyJuYW1lIjoiV2FzbVRyYXAiLCJzdWJ0eXBlcyI6WyJVbnJlYWNoYWJsZSIsIkluY29ycmVjdENhbGxJbmRpcmVjdFNpZ25hdHVyZSIsIk1lbW9yeU91dE9mQm91bmRzIiwiQ2FsbEluZGlyZWN0T09CIiwiSWxsZWdhbEFyaXRobWV0aWMiLCJNaXNhbGlnbmVkQXRvbWljQWNjZXNzIiwiSW5kaXJlY3RDYWxsVG9OdWxsIiwiU3RhY2tPdmVyZmxvdyIsIkdlbmVyaWNUcmFwIl0sInByb3BzIjp7fX0sIldhc21lckNvbXBpbGVFcnJvciI6eyJuYW1lIjoiV2FzbWVyQ29tcGlsZUVycm9yIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtc2ciOiIifX0sIkNsb3NlZCI6eyJuYW1lIjoiQ2xvc2VkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJTZXJ2ZXJFcnJvciI6eyJuYW1lIjoiU2VydmVyRXJyb3IiLCJzdWJ0eXBlcyI6WyJUeEV4ZWN1dGlvbkVycm9yIiwiVGltZW91dCIsIkNsb3NlZCJdLCJwcm9wcyI6e319LCJUaW1lb3V0Ijp7Im5hbWUiOiJUaW1lb3V0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319fX0nKX0sNDgzMSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5nZXRFcnJvclR5cGVGcm9tRXJyb3JNZXNzYWdlPXIuZm9ybWF0RXJyb3I9ci5wYXJzZVJlc3VsdEVycm9yPXIucGFyc2VScGNFcnJvcj1yLlNlcnZlckVycm9yPXZvaWQgMDtsZXQgaT1lLnIoMjQ4NjMpLG89bihlLnIoODE5MjgpKSxhPWUucig0NTI4Nykscz1lLnIoNjY4NTkpLGM9bihlLnIoNzc4MDUpKSx1PXtmb3JtYXROZWFyOigpPT4oZSx0KT0+KDAsYS5mb3JtYXROZWFyQW1vdW50KSh0KGUpKX07Y2xhc3MgZiBleHRlbmRzIGkuVHlwZWRFcnJvcnt9ci5TZXJ2ZXJFcnJvcj1mO2NsYXNzIGQgZXh0ZW5kcyBme3RyYW5zYWN0aW9uX291dGNvbWV9ZnVuY3Rpb24gbChlKXtsZXQgdD17fSxyPXAoZSxjLmRlZmF1bHQuc2NoZW1hLHQsIiIpLG49bmV3IGYoaChyLHQpLHIpO3JldHVybiBPYmplY3QuYXNzaWduKG4sdCksbn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzLkVycm9yTWVzc2FnZXNbZV0/by5kZWZhdWx0LnJlbmRlcihzLkVycm9yTWVzc2FnZXNbZV0sey4uLnQsLi4udX0pOkpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIHAoZSx0LHIsbil7bGV0IGksbyxhO2ZvcihsZXQgciBpbiB0KXtpZihtKGVbcl0pKXJldHVybiBlW3JdO2lmKGIoZVtyXSkpaT1lW3JdLG89dFtyXSxhPXI7ZWxzZXtpZighKGIoZS5raW5kKSYmYihlLmtpbmRbcl0pKSljb250aW51ZTtpPWUua2luZFtyXSxvPXRbcl0sYT1yfX1pZighaXx8IW8pcmV0dXJuIHIua2luZD1lLG47Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG8ucHJvcHMpKXJbZV09aVtlXTtyZXR1cm4gcChpLHQscixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ci5wYXJzZVJwY0Vycm9yPWwsci5wYXJzZVJlc3VsdEVycm9yPWZ1bmN0aW9uKGUpe2xldCB0PWwoZS5zdGF0dXMuRmFpbHVyZSkscj1uZXcgZDtyZXR1cm4gT2JqZWN0LmFzc2lnbihyLHQpLHIudHlwZT10LnR5cGUsci5tZXNzYWdlPXQubWVzc2FnZSxyLnRyYW5zYWN0aW9uX291dGNvbWU9ZS50cmFuc2FjdGlvbl9vdXRjb21lLHJ9LHIuZm9ybWF0RXJyb3I9aCxyLmdldEVycm9yVHlwZUZyb21FcnJvck1lc3NhZ2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goITApe2Nhc2UvXmFjY291bnQgLio/IGRvZXMgbm90IGV4aXN0IHdoaWxlIHZpZXdpbmckLy50ZXN0KGUpOmNhc2UvXkFjY291bnQgLio/IGRvZXNuJ3QgZXhpc3QkLy50ZXN0KGUpOnJldHVybiJBY2NvdW50RG9lc05vdEV4aXN0IjtjYXNlL15hY2Nlc3Mga2V5IC4qPyBkb2VzIG5vdCBleGlzdCB3aGlsZSB2aWV3aW5nJC8udGVzdChlKTpyZXR1cm4iQWNjZXNzS2V5RG9lc05vdEV4aXN0IjtjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBGdW5jdGlvbkNhbGxFcnJvclwoQ29tcGlsYXRpb25FcnJvclwoQ29kZURvZXNOb3RFeGlzdC8udGVzdChlKTpjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBDb21waWxhdGlvbkVycm9yXChDb2RlRG9lc05vdEV4aXN0Ly50ZXN0KGUpOnJldHVybiJDb2RlRG9lc05vdEV4aXN0IjtjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBGdW5jdGlvbkNhbGxFcnJvclwoTWV0aG9kUmVzb2x2ZUVycm9yXChNZXRob2ROb3RGb3VuZC8udGVzdChlKTpjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBNZXRob2RSZXNvbHZlRXJyb3JcKE1ldGhvZE5vdEZvdW5kLy50ZXN0KGUpOnJldHVybiJNZXRob2ROb3RGb3VuZCI7Y2FzZS9UcmFuc2FjdGlvbiBub25jZSBcZCsgbXVzdCBiZSBsYXJnZXIgdGhhbiBub25jZSBvZiB0aGUgdXNlZCBhY2Nlc3Mga2V5IFxkKy8udGVzdChlKTpyZXR1cm4iSW52YWxpZE5vbmNlIjtkZWZhdWx0OnJldHVybiB0fX19LDM3Mzg1LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIucGFyc2VScGNFcnJvcj1yLnBhcnNlUmVzdWx0RXJyb3I9ci5nZXRFcnJvclR5cGVGcm9tRXJyb3JNZXNzYWdlPXIuZm9ybWF0RXJyb3I9ci5TZXJ2ZXJFcnJvcj1yLkVycm9yTWVzc2FnZXM9dm9pZCAwO3ZhciBuPWUucig2Njg1OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkVycm9yTWVzc2FnZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLkVycm9yTWVzc2FnZXN9fSk7dmFyIGk9ZS5yKDQ4MzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJTZXJ2ZXJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU2VydmVyRXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImZvcm1hdEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5mb3JtYXRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VSZXN1bHRFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VSZXN1bHRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VScGNFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VScGNFcnJvcn19KX0sMzIzMTQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Db25zb2xlTG9nZ2VyPXZvaWQgMDtjbGFzcyBue2xvZ0xldmVscztjb25zdHJ1Y3RvcihlKXt0aGlzLmxvZ0xldmVscz1lfWlzTGV2ZWxFbmFibGVkPWU9PnRoaXMubG9nTGV2ZWxzLmluY2x1ZGVzKGUpO3ByaW50KGUsdCwuLi5yKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6Y2FzZSJmYXRhbCI6cmV0dXJuIGNvbnNvbGUuZXJyb3IodCwuLi5yKTtjYXNlIndhcm4iOnJldHVybiBjb25zb2xlLndhcm4odCwuLi5yKTtjYXNlImxvZyI6cmV0dXJuIGNvbnNvbGUubG9nKHQsLi4ucik7Y2FzZSJkZWJ1ZyI6Y2FzZSJ2ZXJib3NlIjpyZXR1cm4gY29uc29sZS5kZWJ1Zyh0LC4uLnIpfX12ZXJib3NlKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgidmVyYm9zZSIpJiZ0aGlzLnByaW50KCJ2ZXJib3NlIixlLC4uLnQpfWRlYnVnKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgiZGVidWciKSYmdGhpcy5wcmludCgiZGVidWciLGUsLi4udCl9bG9nKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgibG9nIikmJnRoaXMucHJpbnQoImxvZyIsZSwuLi50KX13YXJuKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgid2FybiIpJiZ0aGlzLnByaW50KCJ3YXJuIixlLC4uLnQpfWVycm9yKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgiZXJyb3IiKSYmdGhpcy5wcmludCgiZXJyb3IiLGUsLi4udCl9ZmF0YWwoZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJmYXRhbCIpJiZ0aGlzLnByaW50KCJmYXRhbCIsZSwuLi50KX19ci5Db25zb2xlTG9nZ2VyPW59LDI0NTM1LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTG9nZ2VyPXZvaWQgMDtsZXQgbj1lLnIoMzIzMTQpLGk9WyJ2ZXJib3NlIiwiZGVidWciLCJsb2ciLCJ3YXJuIiwiZXJyb3IiLCJmYXRhbCJdLG89bmV3IG4uQ29uc29sZUxvZ2dlcihpKTtjbGFzcyBhe3N0YXRpYyBpbnN0YW5jZVJlZj1vO3N0YXRpYyBvdmVycmlkZUxvZ2dlcj1lPT57dGhpcy5pbnN0YW5jZVJlZj1lfTtzdGF0aWMgZXJyb3IoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5lcnJvcihlLC4uLnQpfXN0YXRpYyBsb2coZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5sb2coZSwuLi50KX1zdGF0aWMgd2FybihlLC4uLnQpe3RoaXMuaW5zdGFuY2VSZWY/Lndhcm4oZSwuLi50KX1zdGF0aWMgZGVidWcoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5kZWJ1Zz8uKGUsLi4udCl9c3RhdGljIHZlcmJvc2UoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy52ZXJib3NlPy4oZSwuLi50KX1zdGF0aWMgZmF0YWwoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5mYXRhbD8uKGUsLi4udCl9fXIuTG9nZ2VyPWF9LDMyNTEzLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTG9nZ2VyPXIuQ29uc29sZUxvZ2dlcj12b2lkIDA7dmFyIG49ZS5yKDMyMzE0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQ29uc29sZUxvZ2dlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQ29uc29sZUxvZ2dlcn19KTt2YXIgaT1lLnIoMjQ1MzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJMb2dnZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkxvZ2dlcn19KX0sOTgwMTYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5wcmludFR4T3V0Y29tZUxvZ3M9ci5wcmludFR4T3V0Y29tZUxvZ3NBbmRGYWlsdXJlcz12b2lkIDA7bGV0IG49ZS5yKDM3Mzg1KSxpPWUucigzMjUxMyk7ZnVuY3Rpb24gbyh7Y29udHJhY3RJZDplLGxvZ3M6dCxwcmVmaXg6cj0iIn0pe2ZvcihsZXQgbiBvZiB0KWkuTG9nZ2VyLmxvZyhgJHtyfUxvZyBbJHtlfV06ICR7bn1gKX1yLnByaW50VHhPdXRjb21lTG9nc0FuZEZhaWx1cmVzPWZ1bmN0aW9uKHtjb250cmFjdElkOmUsb3V0Y29tZTp0fSl7Zm9yKGxldCByIG9mW3QudHJhbnNhY3Rpb25fb3V0Y29tZSwuLi50LnJlY2VpcHRzX291dGNvbWVdLnJlZHVjZSgoZSx0KT0+e2xldCByPSJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmIm9iamVjdCI9PXR5cGVvZiB0Lm91dGNvbWUuc3RhdHVzLkZhaWx1cmU7cmV0dXJuIHQub3V0Y29tZS5sb2dzLmxlbmd0aHx8cj9lLmNvbmNhdCh7cmVjZWlwdElkczp0Lm91dGNvbWUucmVjZWlwdF9pZHMsbG9nczp0Lm91dGNvbWUubG9ncyxmYWlsdXJlOiJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmdm9pZCAwIT09dC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlPygwLG4ucGFyc2VScGNFcnJvcikodC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlKTpudWxsfSk6ZX0sW10pKWkuTG9nZ2VyLmxvZyhgUmVjZWlwdCR7ci5yZWNlaXB0SWRzLmxlbmd0aD4xPyJzIjoiIn06ICR7ci5yZWNlaXB0SWRzLmpvaW4oIiwgIil9YCksbyh7Y29udHJhY3RJZDplLGxvZ3M6ci5sb2dzLHByZWZpeDoiCSJ9KSxyLmZhaWx1cmUmJmkuTG9nZ2VyLndhcm4oYAlGYWlsdXJlIFske2V9XTogJHtyLmZhaWx1cmV9YCl9LHIucHJpbnRUeE91dGNvbWVMb2dzPW99LDcyMSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuaSgzOTU4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZ2V0VHJhbnNhY3Rpb25MYXN0UmVzdWx0PXZvaWQgMCxyLmdldFRyYW5zYWN0aW9uTGFzdFJlc3VsdD1mdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUuc3RhdHVzJiYic3RyaW5nIj09dHlwZW9mIGUuc3RhdHVzLlN1Y2Nlc3NWYWx1ZSl7bGV0IHQ9bi5CdWZmZXIuZnJvbShlLnN0YXR1cy5TdWNjZXNzVmFsdWUsImJhc2U2NCIpLnRvU3RyaW5nKCk7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3JldHVybiB0fX1yZXR1cm4gbnVsbH19LDQ1MTY2LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuc29ydEJpZ0ludEFzYz12b2lkIDAsci5zb3J0QmlnSW50QXNjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dD8tMTorKGU+dCl9fSwxMzkwOSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5kaWZmRXBvY2hWYWxpZGF0b3JzPXIuZmluZFNlYXRQcmljZT12b2lkIDA7bGV0IGk9bihlLnIoNjIzNjEpKSxvPWUucig0NTE2Nik7ZnVuY3Rpb24gYShlLHQpe2xldCByPWUubWFwKGU9PkJpZ0ludChlLnN0YWtlKSkuc29ydChvLnNvcnRCaWdJbnRBc2MpLG49QmlnSW50KHQpLGk9ci5yZWR1Y2UoKGUsdCk9PmUrdCk7aWYoaTxuKXRocm93IEVycm9yKCJTdGFrZXMgYXJlIGJlbG93IHNlYXRzIik7bGV0IGE9MW4scz1pKzFuO2Zvcig7YSE9PXMtMW47KXtsZXQgZT0oYStzKS8ybix0PSExLGk9MG47Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDsrK28paWYoKGkrPXJbb10vZSk+PW4pe2E9ZSx0PSEwO2JyZWFrfXR8fChzPWUpfXJldHVybiBhfWZ1bmN0aW9uIHMoZSx0LHIpe2lmKDIhPXIubGVuZ3RoKXRocm93IEVycm9yKCJtaW5pbXVtU3Rha2VSYXRpbyBzaG91bGQgaGF2ZSAyIGVsZW1lbnRzIik7bGV0IG49ZS5tYXAoZT0+QmlnSW50KGUuc3Rha2UpKS5zb3J0KG8uc29ydEJpZ0ludEFzYyksaT1uLnJlZHVjZSgoZSx0KT0+ZSt0KTtyZXR1cm4gZS5sZW5ndGg8dD9pKkJpZ0ludChyWzBdKS9CaWdJbnQoclsxXSk6blswXSsxbn1yLmZpbmRTZWF0UHJpY2U9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIG4mJm48NDk/YShlLHQpOihyfHwoKDAsaS5kZWZhdWx0KSgiZmluZFNlYXRQcmljZSh2YWxpZGF0b3JzLCBtYXhOdW1iZXJPZlNlYXRzKSIpKCJgdXNlIGBmaW5kU2VhdFByaWNlKHZhbGlkYXRvcnMsIG1heE51bWJlck9mU2VhdHMsIG1pbmltdW1TdGFrZVJhdGlvKWAgaW5zdGVhZCIpLHI9WzEsNjI1MF0pLHMoZSx0LHIpKX0sci5kaWZmRXBvY2hWYWxpZGF0b3JzPWZ1bmN0aW9uKGUsdCl7bGV0IHI9bmV3IE1hcDtlLmZvckVhY2goZT0+ci5zZXQoZS5hY2NvdW50X2lkLGUpKTtsZXQgbj1uZXcgU2V0KHQubWFwKGU9PmUuYWNjb3VudF9pZCkpO3JldHVybntuZXdWYWxpZGF0b3JzOnQuZmlsdGVyKGU9PiFyLmhhcyhlLmFjY291bnRfaWQpKSxyZW1vdmVkVmFsaWRhdG9yczplLmZpbHRlcihlPT4hbi5oYXMoZS5hY2NvdW50X2lkKSksY2hhbmdlZFZhbGlkYXRvcnM6dC5maWx0ZXIoZT0+ci5oYXMoZS5hY2NvdW50X2lkKSYmci5nZXQoZS5hY2NvdW50X2lkKS5zdGFrZSE9ZS5zdGFrZSkubWFwKGU9Pih7Y3VycmVudDpyLmdldChlLmFjY291bnRfaWQpLG5leHQ6ZX0pKX19fSwyNTU2MiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49cik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOyghaXx8KCJnZXQiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKSkmJihpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saSl9OmZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpLGVbbl09dFtyXX0pLGk9ZS5lJiZlLmUuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKSJkZWZhdWx0Ij09PXJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpfHxuKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGkoZS5yKDc2Njg4KSxyKSxpKGUucigzNzM4NSksciksaShlLnIoNDUyODcpLHIpLGkoZS5yKDk4MDE2KSxyKSxpKGUucig3MjEpLHIpLGkoZS5yKDEzOTA5KSxyKSxpKGUucigzMjUxMyksciksaShlLnIoNDUxNjYpLHIpfSwyOTUyNiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5QdWJsaWNLZXk9dm9pZCAwO2xldCBpPWUucigyNTU2Miksbz1lLnIoNjYxODkpLGE9bihlLnIoNzI1NjgpKSxzPWUucig4MTQ2Mik7ZnVuY3Rpb24gYyhlKXtzd2l0Y2goZSl7Y2FzZSBzLktleVR5cGUuRUQyNTUxOTpyZXR1cm4iZWQyNTUxOSI7Y2FzZSBzLktleVR5cGUuU0VDUDI1NksxOnJldHVybiJzZWNwMjU2azEiO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24ga2V5IHR5cGUgJHtlfWApfX1mdW5jdGlvbiB1KGUpe3N3aXRjaChlLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZWQyNTUxOSI6cmV0dXJuIHMuS2V5VHlwZS5FRDI1NTE5O2Nhc2Uic2VjcDI1NmsxIjpyZXR1cm4gcy5LZXlUeXBlLlNFQ1AyNTZLMTtkZWZhdWx0OnRocm93IEVycm9yKGBVbmtub3duIGtleSB0eXBlICR7ZX1gKX19ZnVuY3Rpb24gZihlKXtzd2l0Y2goZSl7Y2FzZSBzLktleVR5cGUuRUQyNTUxOTpyZXR1cm4iZWQyNTUxOUtleSI7Y2FzZSBzLktleVR5cGUuU0VDUDI1NksxOnJldHVybiJzZWNwMjU2azFLZXkiO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYHVua25vd24gdHlwZSAke2V9YCl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7aWYoMSE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aCl0aHJvdyBFcnJvcigiRW51bSBjYW4gb25seSB0YWtlIHNpbmdsZSB2YWx1ZSIpO09iamVjdC5rZXlzKGUpLm1hcCh0PT57dGhpc1t0XT1lW3RdfSl9fWNsYXNzIGwgZXh0ZW5kcyBke2VudW07ZWQyNTUxOUtleTtzZWNwMjU2azFLZXk7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1mKGUua2V5VHlwZSk7c3VwZXIoe1t0XTplfSksdGhpc1t0XT1lLHRoaXMuZW51bT10fXN0YXRpYyBmcm9tKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9sLmZyb21TdHJpbmcoZSk6ZX1zdGF0aWMgZnJvbVN0cmluZyhlKXtsZXQgdCxyLG49ZS5zcGxpdCgiOiIpO2lmKDE9PT1uLmxlbmd0aCl0PW5bMF07ZWxzZSBpZigyPT09bi5sZW5ndGgpdD1uWzFdLHI9dShuWzBdKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIGVuY29kZWQga2V5IGZvcm1hdCwgbXVzdCBiZSA8Y3VydmU+OjxlbmNvZGVkIGtleT4iKTtsZXQgbz0oMCxpLmJhc2VEZWNvZGUpKHQpO3J8fChyPW8ubGVuZ3RoPT09cy5LZXlTaXplLlNFQ1AyNTZrMV9QVUJMSUNfS0VZP3MuS2V5VHlwZS5TRUNQMjU2SzE6cy5LZXlUeXBlLkVEMjU1MTkpO2xldCBhPXI9PT1zLktleVR5cGUuRUQyNTUxOT9zLktleVNpemUuRUQyNTUxOV9QVUJMSUNfS0VZOnMuS2V5U2l6ZS5TRUNQMjU2azFfUFVCTElDX0tFWTtpZihvLmxlbmd0aCE9PWEpdGhyb3cgRXJyb3IoYEludmFsaWQgcHVibGljIGtleSBzaXplICgke28ubGVuZ3RofSksIG11c3QgYmUgJHthfWApO3JldHVybiBuZXcgbCh7a2V5VHlwZTpyLGRhdGE6b30pfXRvU3RyaW5nKCl7bGV0IGU9KDAsaS5iYXNlRW5jb2RlKSh0aGlzLmRhdGEpO3JldHVybmAke2ModGhpcy5rZXlUeXBlKX06JHtlfWB9dmVyaWZ5KGUsdCl7bGV0IHI9dGhpcy5rZXlUeXBlLG49dGhpcy5kYXRhO3N3aXRjaChyKXtjYXNlIHMuS2V5VHlwZS5FRDI1NTE5OnJldHVybiBvLmVkMjU1MTkudmVyaWZ5KHQsZSxuKTtjYXNlIHMuS2V5VHlwZS5TRUNQMjU2SzE6cmV0dXJuIGEuZGVmYXVsdC5lY2RzYVZlcmlmeSh0LnN1YmFycmF5KDAsNjQpLGUsbmV3IFVpbnQ4QXJyYXkoWzQsLi4ubl0pKTtkZWZhdWx0OnRocm93IEVycm9yKGBVbmtub3duIGtleSB0eXBlOiAke3J9YCl9fWdldCBrZXlQYWlyKCl7cmV0dXJuIHRoaXMuZWQyNTUxOUtleXx8dGhpcy5zZWNwMjU2azFLZXl9Z2V0IGtleVR5cGUoKXtyZXR1cm4gdGhpcy5rZXlQYWlyLmtleVR5cGV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5rZXlQYWlyLmRhdGF9fXIuUHVibGljS2V5PWx9LDQxMDE5LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLktleVBhaXJFZDI1NTE5PXZvaWQgMDtsZXQgaT1lLnIoMjU1NjIpLG89ZS5yKDY2MTg5KSxhPW4oZS5yKDY4NzUxKSkscz1lLnIoODE0NjIpLGM9ZS5yKDkyMjQ3KSx1PWUucigyOTUyNik7Y2xhc3MgZiBleHRlbmRzIGMuS2V5UGFpckJhc2V7cHVibGljS2V5O3NlY3JldEtleTtleHRlbmRlZFNlY3JldEtleTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoKDAsaS5iYXNlRGVjb2RlKShlKS5zbGljZSgwLHMuS2V5U2l6ZS5TRUNSRVRfS0VZKSkscj1vLmVkMjU1MTkuZ2V0UHVibGljS2V5KG5ldyBVaW50OEFycmF5KHQpKTt0aGlzLnB1YmxpY0tleT1uZXcgdS5QdWJsaWNLZXkoe2tleVR5cGU6cy5LZXlUeXBlLkVEMjU1MTksZGF0YTpyfSksdGhpcy5zZWNyZXRLZXk9KDAsaS5iYXNlRW5jb2RlKSh0KSx0aGlzLmV4dGVuZGVkU2VjcmV0S2V5PWV9c3RhdGljIGZyb21SYW5kb20oKXtsZXQgZT0oMCxhLmRlZmF1bHQpKHMuS2V5U2l6ZS5TRUNSRVRfS0VZKSx0PW8uZWQyNTUxOS5nZXRQdWJsaWNLZXkobmV3IFVpbnQ4QXJyYXkoZSkpLHI9bmV3IFVpbnQ4QXJyYXkoWy4uLmUsLi4udF0pO3JldHVybiBuZXcgZigoMCxpLmJhc2VFbmNvZGUpKHIpKX1zaWduKGUpe3JldHVybntzaWduYXR1cmU6by5lZDI1NTE5LnNpZ24oZSwoMCxpLmJhc2VEZWNvZGUpKHRoaXMuc2VjcmV0S2V5KSkscHVibGljS2V5OnRoaXMucHVibGljS2V5fX12ZXJpZnkoZSx0KXtyZXR1cm4gdGhpcy5wdWJsaWNLZXkudmVyaWZ5KGUsdCl9dG9TdHJpbmcoKXtyZXR1cm5gZWQyNTUxOToke3RoaXMuZXh0ZW5kZWRTZWNyZXRLZXl9YH1nZXRQdWJsaWNLZXkoKXtyZXR1cm4gdGhpcy5wdWJsaWNLZXl9fXIuS2V5UGFpckVkMjU1MTk9Zn0sODk3MjcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuS2V5UGFpclNlY3AyNTZrMT12b2lkIDA7bGV0IGk9ZS5yKDI1NTYyKSxvPW4oZS5yKDY4NzUxKSksYT1uKGUucig3MjU2OCkpLHM9ZS5yKDgxNDYyKSxjPWUucig5MjI0NyksdT1lLnIoMjk1MjYpO2NsYXNzIGYgZXh0ZW5kcyBjLktleVBhaXJCYXNle3B1YmxpY0tleTtzZWNyZXRLZXk7ZXh0ZW5kZWRTZWNyZXRLZXk7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTtjb25zdCB0PW5ldyBVaW50OEFycmF5KCgwLGkuYmFzZURlY29kZSkoZSkuc2xpY2UoMCxzLktleVNpemUuU0VDUkVUX0tFWSkpLHI9YS5kZWZhdWx0LnB1YmxpY0tleUNyZWF0ZShuZXcgVWludDhBcnJheSh0KSwhMSksbj1yLnN1YmFycmF5KDEsci5sZW5ndGgpO3RoaXMucHVibGljS2V5PW5ldyB1LlB1YmxpY0tleSh7a2V5VHlwZTpzLktleVR5cGUuU0VDUDI1NksxLGRhdGE6bn0pLHRoaXMuc2VjcmV0S2V5PSgwLGkuYmFzZUVuY29kZSkodCksdGhpcy5leHRlbmRlZFNlY3JldEtleT1lfXN0YXRpYyBmcm9tUmFuZG9tKCl7bGV0IGU9KDAsby5kZWZhdWx0KShzLktleVNpemUuU0VDUkVUX0tFWSksdD1hLmRlZmF1bHQucHVibGljS2V5Q3JlYXRlKG5ldyBVaW50OEFycmF5KGUpLCExKSxyPW5ldyBVaW50OEFycmF5KFsuLi5lLC4uLnQuc3ViYXJyYXkoMSx0Lmxlbmd0aCldKTtyZXR1cm4gbmV3IGYoKDAsaS5iYXNlRW5jb2RlKShyKSl9c2lnbihlKXtsZXR7c2lnbmF0dXJlOnQscmVjaWQ6cn09YS5kZWZhdWx0LmVjZHNhU2lnbihlLCgwLGkuYmFzZURlY29kZSkodGhpcy5zZWNyZXRLZXkpKTtyZXR1cm57c2lnbmF0dXJlOm5ldyBVaW50OEFycmF5KFsuLi50LHJdKSxwdWJsaWNLZXk6dGhpcy5wdWJsaWNLZXl9fXZlcmlmeShlLHQpe3JldHVybiB0aGlzLnB1YmxpY0tleS52ZXJpZnkoZSx0KX10b1N0cmluZygpe3JldHVybmBzZWNwMjU2azE6JHt0aGlzLmV4dGVuZGVkU2VjcmV0S2V5fWB9Z2V0UHVibGljS2V5KCl7cmV0dXJuIHRoaXMucHVibGljS2V5fX1yLktleVBhaXJTZWNwMjU2azE9Zn0sNDcwNTksKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5LZXlQYWlyPXZvaWQgMDtsZXQgbj1lLnIoOTIyNDcpLGk9ZS5yKDQxMDE5KSxvPWUucig4OTcyNyk7Y2xhc3MgYSBleHRlbmRzIG4uS2V5UGFpckJhc2V7c3RhdGljIGZyb21SYW5kb20oZSl7c3dpdGNoKGUudG9VcHBlckNhc2UoKSl7Y2FzZSJFRDI1NTE5IjpyZXR1cm4gaS5LZXlQYWlyRWQyNTUxOS5mcm9tUmFuZG9tKCk7Y2FzZSJTRUNQMjU2SzEiOnJldHVybiBvLktleVBhaXJTZWNwMjU2azEuZnJvbVJhbmRvbSgpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24gY3VydmUgJHtlfWApfX1zdGF0aWMgZnJvbVN0cmluZyhlKXtsZXQgdD1lLnNwbGl0KCI6Iik7aWYoMj09PXQubGVuZ3RoKXN3aXRjaCh0WzBdLnRvVXBwZXJDYXNlKCkpe2Nhc2UiRUQyNTUxOSI6cmV0dXJuIG5ldyBpLktleVBhaXJFZDI1NTE5KHRbMV0pO2Nhc2UiU0VDUDI1NksxIjpyZXR1cm4gbmV3IG8uS2V5UGFpclNlY3AyNTZrMSh0WzFdKTtkZWZhdWx0OnRocm93IEVycm9yKGBVbmtub3duIGN1cnZlOiAke3RbMF19YCl9dGhyb3cgRXJyb3IoIkludmFsaWQgZW5jb2RlZCBrZXkgZm9ybWF0LCBtdXN0IGJlIDxjdXJ2ZT46PGVuY29kZWQga2V5PiIpfX1yLktleVBhaXI9YX0sNzIyMywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLlB1YmxpY0tleT1yLktleVBhaXJTZWNwMjU2azE9ci5LZXlQYWlyRWQyNTUxOT1yLktleVBhaXI9ci5LZXlUeXBlPXZvaWQgMDt2YXIgbj1lLnIoODE0NjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJLZXlUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5LZXlUeXBlfX0pO3ZhciBpPWUucig0NzA1OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIktleVBhaXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLktleVBhaXJ9fSk7dmFyIG89ZS5yKDQxMDE5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiS2V5UGFpckVkMjU1MTkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLktleVBhaXJFZDI1NTE5fX0pO3ZhciBhPWUucig4OTcyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIktleVBhaXJTZWNwMjU2azEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLktleVBhaXJTZWNwMjU2azF9fSk7dmFyIHM9ZS5yKDI5NTI2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiUHVibGljS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QdWJsaWNLZXl9fSl9LDcwNTYzLChlLHQscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+c2V0VGltZW91dCh0LGUpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5leHBvbmVudGlhbEJhY2tvZmY9dm9pZCAwLHIuZXhwb25lbnRpYWxCYWNrb2ZmPWFzeW5jIGZ1bmN0aW9uKGUsdCxyLGkpe2xldCBvPWU7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7bGV0IGU9YXdhaXQgaSgpO2lmKGUpcmV0dXJuIGU7YXdhaXQgbihvKSxvKj1yfXJldHVybiBudWxsfX0sNDAxMTgsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5ERUZBVUxUX0ZVTkNUSU9OX0NBTExfR0FTPXZvaWQgMCxyLkRFRkFVTFRfRlVOQ1RJT05fQ0FMTF9HQVM9MzAwMDAwMDAwMDAwMDBufSw3OTMwMiwoZSx0LHIpPT57dC5leHBvcnRzPXtHYXNMaW1pdEV4Y2VlZGVkOiJFeGNlZWRlZCB0aGUgbWF4aW11bSBhbW91bnQgb2YgZ2FzIGFsbG93ZWQgdG8gYnVybiBwZXIgY29udHJhY3QiLE1ldGhvZEVtcHR5TmFtZToiTWV0aG9kIG5hbWUgaXMgZW1wdHkiLFdhc21lckNvbXBpbGVFcnJvcjoiV2FzbWVyIGNvbXBpbGF0aW9uIGVycm9yOiB7e21zZ319IixHdWVzdFBhbmljOiJTbWFydCBjb250cmFjdCBwYW5pY2tlZDoge3twYW5pY19tc2d9fSIsTWVtb3J5OiJFcnJvciBjcmVhdGluZyBXYXNtIG1lbW9yeSIsR2FzRXhjZWVkZWQ6IkV4Y2VlZGVkIHRoZSBwcmVwYWlkIGdhcyIsTWV0aG9kVVRGOEVycm9yOiJNZXRob2QgbmFtZSBpcyBub3QgdmFsaWQgVVRGOCBzdHJpbmciLEJhZFVURjE2OiJTdHJpbmcgZW5jb2RpbmcgaXMgYmFkIFVURi0xNiBzZXF1ZW5jZSIsV2FzbVRyYXA6IldlYkFzc2VtYmx5IHRyYXA6IHt7bXNnfX0iLEdhc0luc3RydW1lbnRhdGlvbjoiR2FzIGluc3RydW1lbnRhdGlvbiBmYWlsZWQgb3IgY29udHJhY3QgaGFzIGRlbmllZCBpbnN0cnVjdGlvbnMuIixJbnZhbGlkUHJvbWlzZUluZGV4OiJ7e3Byb21pc2VfaWR4fX0gZG9lcyBub3QgY29ycmVzcG9uZCB0byBleGlzdGluZyBwcm9taXNlcyIsSW52YWxpZFByb21pc2VSZXN1bHRJbmRleDoiQWNjZXNzZWQgaW52YWxpZCBwcm9taXNlIHJlc3VsdCBpbmRleDoge3tyZXN1bHRfaWR4fX0iLERlc2VyaWFsaXphdGlvbjoiRXJyb3IgaGFwcGVuZWQgd2hpbGUgZGVzZXJpYWxpemluZyB0aGUgbW9kdWxlIixNZXRob2ROb3RGb3VuZDoiQ29udHJhY3QgbWV0aG9kIGlzIG5vdCBmb3VuZCIsSW52YWxpZFJlZ2lzdGVySWQ6IkFjY2Vzc2VkIGludmFsaWQgcmVnaXN0ZXIgaWQ6IHt7cmVnaXN0ZXJfaWR9fSIsSW52YWxpZFJlY2VpcHRJbmRleDoiVk0gTG9naWMgcmV0dXJuZWQgYW4gaW52YWxpZCByZWNlaXB0IGluZGV4OiB7e3JlY2VpcHRfaW5kZXh9fSIsRW1wdHlNZXRob2ROYW1lOiJNZXRob2QgbmFtZSBpcyBlbXB0eSBpbiBjb250cmFjdCBjYWxsIixDYW5ub3RSZXR1cm5Kb2ludFByb21pc2U6IlJldHVybmluZyBqb2ludCBwcm9taXNlIGlzIGN1cnJlbnRseSBwcm9oaWJpdGVkIixTdGFja0hlaWdodEluc3RydW1lbnRhdGlvbjoiU3RhY2sgaW5zdHJ1bWVudGF0aW9uIGZhaWxlZCIsQ29kZURvZXNOb3RFeGlzdDoiQ2Fubm90IGZpbmQgY29udHJhY3QgY29kZSBmb3IgYWNjb3VudCB7e2FjY291bnRfaWR9fSIsTWV0aG9kSW52YWxpZFNpZ25hdHVyZToiSW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlIixJbnRlZ2VyT3ZlcmZsb3c6IkludGVnZXIgb3ZlcmZsb3cgaGFwcGVuZWQgZHVyaW5nIGNvbnRyYWN0IGV4ZWN1dGlvbiIsTWVtb3J5QWNjZXNzVmlvbGF0aW9uOiJNZW1vcnlBY2Nlc3NWaW9sYXRpb24iLEludmFsaWRJdGVyYXRvckluZGV4OiJJdGVyYXRvciBpbmRleCB7e2l0ZXJhdG9yX2luZGV4fX0gZG9lcyBub3QgZXhpc3QiLEl0ZXJhdG9yV2FzSW52YWxpZGF0ZWQ6Ikl0ZXJhdG9yIHt7aXRlcmF0b3JfaW5kZXh9fSB3YXMgaW52YWxpZGF0ZWQgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ5IHBlcmZvcm1pbmcgYSBtdXRhYmxlIG9wZXJhdGlvbiBvbiB0cmllIixJbnZhbGlkQWNjb3VudElkOiJWTSBMb2dpYyByZXR1cm5lZCBhbiBpbnZhbGlkIGFjY291bnQgaWQiLFNlcmlhbGl6YXRpb246IkVycm9yIGhhcHBlbmVkIHdoaWxlIHNlcmlhbGl6aW5nIHRoZSBtb2R1bGUiLENhbm5vdEFwcGVuZEFjdGlvblRvSm9pbnRQcm9taXNlOiJBY3Rpb25zIGNhbiBvbmx5IGJlIGFwcGVuZGVkIHRvIG5vbi1qb2ludCBwcm9taXNlLiIsSW50ZXJuYWxNZW1vcnlEZWNsYXJlZDoiSW50ZXJuYWwgbWVtb3J5IGRlY2xhcmF0aW9uIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBtb2R1bGUiLEluc3RhbnRpYXRlOiJFcnJvciBoYXBwZW5lZCBkdXJpbmcgaW5zdGFudGlhdGlvbiIsUHJvaGliaXRlZEluVmlldzoie3ttZXRob2RfbmFtZX19IGlzIG5vdCBhbGxvd2VkIGluIHZpZXcgY2FsbHMiLEludmFsaWRNZXRob2ROYW1lOiJWTSBMb2dpYyByZXR1cm5lZCBhbiBpbnZhbGlkIG1ldGhvZCBuYW1lIixCYWRVVEY4OiJTdHJpbmcgZW5jb2RpbmcgaXMgYmFkIFVURi04IHNlcXVlbmNlIixCYWxhbmNlRXhjZWVkZWQ6IkV4Y2VlZGVkIHRoZSBhY2NvdW50IGJhbGFuY2UiLExpbmtFcnJvcjoiV2FzbSBjb250cmFjdCBsaW5rIGVycm9yOiB7e21zZ319IixJbnZhbGlkUHVibGljS2V5OiJWTSBMb2dpYyBwcm92aWRlZCBhbiBpbnZhbGlkIHB1YmxpYyBrZXkiLEFjdG9yTm9QZXJtaXNzaW9uOiJBY3RvciB7e2FjdG9yX2lkfX0gZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjb3VudCB7e2FjY291bnRfaWR9fSB0byBjb21wbGV0ZSB0aGUgYWN0aW9uIixMYWNrQmFsYW5jZUZvclN0YXRlOiJUaGUgYWNjb3VudCB7e2FjY291bnRfaWR9fSB3b3VsZG4ndCBoYXZlIGVub3VnaCBiYWxhbmNlIHRvIGNvdmVyIHN0b3JhZ2UsIHJlcXVpcmVkIHRvIGhhdmUge3thbW91bnR9fSB5b2N0b05FQVIgbW9yZSIsUmVjZWl2ZXJNaXNtYXRjaDoiV3JvbmcgQWNjZXNzS2V5IHVzZWQgZm9yIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbiBpcyBzZW50IHRvIHJlY2VpdmVyX2lkPXt7dHhfcmVjZWl2ZXJ9fSwgYnV0IGlzIHNpZ25lZCB3aXRoIGZ1bmN0aW9uIGNhbGwgYWNjZXNzIGtleSB0aGF0IHJlc3RyaWN0ZWQgdG8gb25seSB1c2Ugd2l0aCByZWNlaXZlcl9pZD17e2FrX3JlY2VpdmVyfX0uIEVpdGhlciBjaGFuZ2UgcmVjZWl2ZXJfaWQgaW4geW91ciB0cmFuc2FjdGlvbiBvciBzd2l0Y2ggdG8gdXNlIGEgRnVsbEFjY2Vzc0tleS4iLENvc3RPdmVyZmxvdzoiVHJhbnNhY3Rpb24gZ2FzIG9yIGJhbGFuY2UgY29zdCBpcyB0b28gaGlnaCIsSW52YWxpZFNpZ25hdHVyZToiVHJhbnNhY3Rpb24gaXMgbm90IHNpZ25lZCB3aXRoIHRoZSBnaXZlbiBwdWJsaWMga2V5IixBY2Nlc3NLZXlOb3RGb3VuZDonU2lnbmVyICJ7e2FjY291bnRfaWR9fSIgZG9lc25cJ3QgaGF2ZSBhY2Nlc3Mga2V5IHdpdGggdGhlIGdpdmVuIHB1YmxpY19rZXkge3twdWJsaWNfa2V5fX0nLE5vdEVub3VnaEJhbGFuY2U6IlNlbmRlciB7e3NpZ25lcl9pZH19IGRvZXMgbm90IGhhdmUgZW5vdWdoIGJhbGFuY2Uge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0gZm9yIG9wZXJhdGlvbiBjb3N0aW5nIHt7I2Zvcm1hdE5lYXJ9fXt7Y29zdH19e3svZm9ybWF0TmVhcn19IixOb3RFbm91Z2hBbGxvd2FuY2U6IkFjY2VzcyBLZXkge2FjY291bnRfaWR9OntwdWJsaWNfa2V5fSBkb2VzIG5vdCBoYXZlIGVub3VnaCBiYWxhbmNlIHt7I2Zvcm1hdE5lYXJ9fXt7YWxsb3dhbmNlfX17ey9mb3JtYXROZWFyfX0gZm9yIHRyYW5zYWN0aW9uIGNvc3Rpbmcge3sjZm9ybWF0TmVhcn19e3tjb3N0fX17ey9mb3JtYXROZWFyfX0iLEV4cGlyZWQ6IlRyYW5zYWN0aW9uIGhhcyBleHBpcmVkIixEZWxldGVBY2NvdW50U3Rha2luZzoiQWNjb3VudCB7e2FjY291bnRfaWR9fSBpcyBzdGFraW5nIGFuZCBjYW4gbm90IGJlIGRlbGV0ZWQiLFNpZ25lckRvZXNOb3RFeGlzdDoiU2lnbmVyIHt7c2lnbmVyX2lkfX0gZG9lcyBub3QgZXhpc3QiLFRyaWVzVG9TdGFrZToiQWNjb3VudCB7e2FjY291bnRfaWR9fSB0cmllZCB0byBzdGFrZSB7eyNmb3JtYXROZWFyfX17e3N0YWtlfX17ey9mb3JtYXROZWFyfX0sIGJ1dCBoYXMgc3Rha2VkIHt7I2Zvcm1hdE5lYXJ9fXt7bG9ja2VkfX17ey9mb3JtYXROZWFyfX0gYW5kIG9ubHkgaGFzIHt7I2Zvcm1hdE5lYXJ9fXt7YmFsYW5jZX19e3svZm9ybWF0TmVhcn19IixBZGRLZXlBbHJlYWR5RXhpc3RzOiJUaGUgcHVibGljIGtleSB7e3B1YmxpY19rZXl9fSBpcyBhbHJlYWR5IHVzZWQgZm9yIGFuIGV4aXN0aW5nIGFjY2VzcyBrZXkiLEludmFsaWRTaWduZXI6IkludmFsaWQgc2lnbmVyIGFjY291bnQgSUQge3tzaWduZXJfaWR9fSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIixDcmVhdGVBY2NvdW50Tm90QWxsb3dlZDoiVGhlIG5ldyBhY2NvdW50X2lkIHt7YWNjb3VudF9pZH19IGNhbid0IGJlIGNyZWF0ZWQgYnkge3twcmVkZWNlc3Nvcl9pZH19IixSZXF1aXJlc0Z1bGxBY2Nlc3M6IlRoZSB0cmFuc2FjdGlvbiBjb250YWlucyBtb3JlIHRoZW4gb25lIGFjdGlvbiwgYnV0IGl0IHdhcyBzaWduZWQgd2l0aCBhbiBhY2Nlc3Mga2V5IHdoaWNoIGFsbG93cyB0cmFuc2FjdGlvbiB0byBhcHBseSBvbmx5IG9uZSBzcGVjaWZpYyBhY3Rpb24uIFRvIGFwcGx5IG1vcmUgdGhlbiBvbmUgYWN0aW9ucyBUWCBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgZnVsbCBhY2Nlc3Mga2V5IixUcmllc1RvVW5zdGFrZToiQWNjb3VudCB7e2FjY291bnRfaWR9fSBpcyBub3QgeWV0IHN0YWtlZCwgYnV0IHRyaWVkIHRvIHVuc3Rha2UiLEludmFsaWROb25jZToiVHJhbnNhY3Rpb24gbm9uY2Uge3t0eF9ub25jZX19IG11c3QgYmUgbGFyZ2VyIHRoYW4gbm9uY2Ugb2YgdGhlIHVzZWQgYWNjZXNzIGtleSB7e2FrX25vbmNlfX0iLEFjY291bnRBbHJlYWR5RXhpc3RzOiJDYW4ndCBjcmVhdGUgYSBuZXcgYWNjb3VudCB7e2FjY291bnRfaWR9fSwgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cyIsSW52YWxpZENoYWluOiJUcmFuc2FjdGlvbiBwYXJlbnQgYmxvY2sgaGFzaCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgY3VycmVudCBjaGFpbiIsQWNjb3VudERvZXNOb3RFeGlzdDoiQ2FuJ3QgY29tcGxldGUgdGhlIGFjdGlvbiBiZWNhdXNlIGFjY291bnQge3thY2NvdW50X2lkfX0gZG9lc24ndCBleGlzdCIsQWNjZXNzS2V5RG9lc05vdEV4aXN0OiJDYW4ndCBjb21wbGV0ZSB0aGUgYWN0aW9uIGJlY2F1c2UgYWNjZXNzIGtleSB7e3B1YmxpY19rZXl9fSBkb2Vzbid0IGV4aXN0IixNZXRob2ROYW1lTWlzbWF0Y2g6IlRyYW5zYWN0aW9uIG1ldGhvZCBuYW1lIHt7bWV0aG9kX25hbWV9fSBpc24ndCBhbGxvd2VkIGJ5IHRoZSBhY2Nlc3Mga2V5IixEZWxldGVBY2NvdW50SGFzUmVudDoiQWNjb3VudCB7e2FjY291bnRfaWR9fSBjYW4ndCBiZSBkZWxldGVkLiBJdCBoYXMge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0sIHdoaWNoIGlzIGVub3VnaCB0byBjb3ZlciB0aGUgcmVudCIsRGVsZXRlQWNjb3VudEhhc0Vub3VnaEJhbGFuY2U6IkFjY291bnQge3thY2NvdW50X2lkfX0gY2FuJ3QgYmUgZGVsZXRlZC4gSXQgaGFzIHt7I2Zvcm1hdE5lYXJ9fXt7YmFsYW5jZX19e3svZm9ybWF0TmVhcn19LCB3aGljaCBpcyBlbm91Z2ggdG8gY292ZXIgaXQncyBzdG9yYWdlIixJbnZhbGlkUmVjZWl2ZXI6IkludmFsaWQgcmVjZWl2ZXIgYWNjb3VudCBJRCB7e3JlY2VpdmVyX2lkfX0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyIsRGVsZXRlS2V5RG9lc05vdEV4aXN0OiJBY2NvdW50IHt7YWNjb3VudF9pZH19IHRyaWVzIHRvIHJlbW92ZSBhbiBhY2Nlc3Mga2V5IHRoYXQgZG9lc24ndCBleGlzdCIsVGltZW91dDoiVGltZW91dCBleGNlZWRlZCIsQ2xvc2VkOiJDb25uZWN0aW9uIGNsb3NlZCIsU2hhcmRDb25nZXN0ZWQ6IlNoYXJkIHt7c2hhcmRfaWR9fSByZWplY3RlZCB0aGUgdHJhbnNhY3Rpb24gZHVlIHRvIGNvbmdlc3Rpb24gbGV2ZWwge3tjb25nZXN0aW9uX2xldmVsfX0sIHRyeSBhZ2FpbiBsYXRlciIsU2hhcmRTdHVjazoiU2hhcmQge3tzaGFyZF9pZH19IHJlamVjdGVkIHRoZSB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0IG1pc3NlZCB7e21pc3NlZF9jaHVua3N9fSBjaHVua3MgYW5kIG5lZWRzIHRvIHJlY292ZXIgYmVmb3JlIGFjY2VwdGluZyBuZXcgdHJhbnNhY3Rpb25zLCB0cnkgYWdhaW4gbGF0ZXIifX0sMjUzNzgsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRXJyb3JNZXNzYWdlcz12b2lkIDAsci5FcnJvck1lc3NhZ2VzPW4oZS5yKDc5MzAyKSkuZGVmYXVsdH0sNDY0OTYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Bc3NpZ25hYmxlPXZvaWQgMDtjbGFzcyBue2NvbnN0cnVjdG9yKGUpe09iamVjdC5rZXlzKGUpLm1hcCh0PT57dGhpc1t0XT1lW3RdfSl9fXIuQXNzaWduYWJsZT1ufSw0MzU2OSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkVudW09dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoMSE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aCl0aHJvdyBFcnJvcigiRW51bSBjYW4gb25seSB0YWtlIHNpbmdsZSB2YWx1ZSIpO09iamVjdC5rZXlzKGUpLm1hcCh0PT57dGhpc1t0XT1lW3RdfSl9fXIuRW51bT1ufSw1NDY5MCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkVycm9yQ29udGV4dD1yLlR5cGVkRXJyb3I9ci5Bcmd1bWVudFR5cGVFcnJvcj1yLlBvc2l0aW9uYWxBcmdzRXJyb3I9dm9pZCAwO2NsYXNzIG4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDb250cmFjdCBtZXRob2QgY2FsbHMgZXhwZWN0IG5hbWVkIGFyZ3VtZW50cyB3cmFwcGVkIGluIG9iamVjdCwgZS5nLiB7IGFyZ05hbWUxOiBhcmdWYWx1ZTEsIGFyZ05hbWUyOiBhcmdWYWx1ZTIgfSIpfX1yLlBvc2l0aW9uYWxBcmdzRXJyb3I9bjtjbGFzcyBpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKGBFeHBlY3RlZCAke3R9IGZvciAnJHtlfScgYXJndW1lbnQsIGJ1dCBnb3QgJyR7SlNPTi5zdHJpbmdpZnkocil9J2ApfX1yLkFyZ3VtZW50VHlwZUVycm9yPWk7Y2xhc3MgbyBleHRlbmRzIEVycm9ye3R5cGU7Y29udGV4dDtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSksdGhpcy50eXBlPXR8fCJVbnR5cGVkRXJyb3IiLHRoaXMuY29udGV4dD1yfX1yLlR5cGVkRXJyb3I9bztjbGFzcyBhe3RyYW5zYWN0aW9uSGFzaDtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zYWN0aW9uSGFzaD1lfX1yLkVycm9yQ29udGV4dD1hfSw2OTIzMywoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLklkVHlwZT12b2lkIDAsZnVuY3Rpb24oZSl7ZS5UcmFuc2FjdGlvbj0idHJhbnNhY3Rpb24iLGUuUmVjZWlwdD0icmVjZWlwdCJ9KG58fChyLklkVHlwZT1uPXt9KSl9LDI5NjgxLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG4saTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljPXIuRXhlY3V0aW9uU3RhdHVzQmFzaWM9dm9pZCAwLGZ1bmN0aW9uKGUpe2UuVW5rbm93bj0iVW5rbm93biIsZS5QZW5kaW5nPSJQZW5kaW5nIixlLkZhaWx1cmU9IkZhaWx1cmUifShufHwoci5FeGVjdXRpb25TdGF0dXNCYXNpYz1uPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob3RTdGFydGVkPSJOb3RTdGFydGVkIixlLlN0YXJ0ZWQ9IlN0YXJ0ZWQiLGUuRmFpbHVyZT0iRmFpbHVyZSJ9KGl8fChyLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWM9aT17fSkpfSw5MDU0MCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWM9ci5FeGVjdXRpb25TdGF0dXNCYXNpYz1yLklkVHlwZT12b2lkIDA7dmFyIG49ZS5yKDY5MjMzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiSWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5JZFR5cGV9fSk7dmFyIGk9ZS5yKDI5NjgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiRXhlY3V0aW9uU3RhdHVzQmFzaWMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJGaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pfSwzNjM4NSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49cik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOyghaXx8KCJnZXQiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKSkmJihpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saSl9OmZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpLGVbbl09dFtyXX0pLGk9ZS5lJiZlLmUuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKSJkZWZhdWx0Ij09PXJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpfHxuKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGkoZS5yKDQ2NDk2KSxyKSxpKGUucig0MzU2OSksciksaShlLnIoNTQ2OTApLHIpLGkoZS5yKDkwNTQwKSxyKX0sNDczNDcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5iYXNlRGVjb2RlPXIuYmFzZUVuY29kZT1yLnBhcnNlTmVhckFtb3VudD1yLmZvcm1hdE5lYXJBbW91bnQ9ci5ORUFSX05PTUlOQVRJT049ci5ORUFSX05PTUlOQVRJT05fRVhQPXZvaWQgMDtsZXQgbj1lLnIoNTYzMyk7ci5ORUFSX05PTUlOQVRJT05fRVhQPTI0LHIuTkVBUl9OT01JTkFUSU9OPTEwbioqQmlnSW50KHIuTkVBUl9OT01JTkFUSU9OX0VYUCk7bGV0IGk9W10sbz0xMG47Zm9yKGxldCBlPTAsdD01bjtlPHIuTkVBUl9OT01JTkFUSU9OX0VYUDtlKyssdCo9bylpW2VdPXQ7ZnVuY3Rpb24gYShlLHQ9ci5ORUFSX05PTUlOQVRJT05fRVhQKXtsZXQgbj1CaWdJbnQoZSk7aWYodCE9PXIuTkVBUl9OT01JTkFUSU9OX0VYUCl7bGV0IGU9ci5ORUFSX05PTUlOQVRJT05fRVhQLXQtMTtlPjAmJihuKz1pW2VdKX1sZXQgbz0oZT1uLnRvU3RyaW5nKCkpLnN1YnN0cmluZygwLGUubGVuZ3RoLXIuTkVBUl9OT01JTkFUSU9OX0VYUCl8fCIwIixzPWUuc3Vic3RyaW5nKGUubGVuZ3RoLXIuTkVBUl9OT01JTkFUSU9OX0VYUCkucGFkU3RhcnQoci5ORUFSX05PTUlOQVRJT05fRVhQLCIwIikuc3Vic3RyaW5nKDAsdCk7cmV0dXJuIHUoYCR7ZChvKX0uJHtzfWApfWZ1bmN0aW9uIHMoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9KGU9YyhlKSkuc3BsaXQoIi4iKSxuPXRbMF0saT10WzFdfHwiIjtpZih0Lmxlbmd0aD4yfHxpLmxlbmd0aD5yLk5FQVJfTk9NSU5BVElPTl9FWFApdGhyb3cgRXJyb3IoYENhbm5vdCBwYXJzZSAnJHtlfScgYXMgTkVBUiBhbW91bnRgKTtyZXR1cm4gZihuK2kucGFkRW5kKHIuTkVBUl9OT01JTkFUSU9OX0VYUCwiMCIpKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywiIikudHJpbSgpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXC4/MCokLywiIil9ZnVuY3Rpb24gZihlKXtyZXR1cm4iIj09PShlPWUucmVwbGFjZSgvXjArLywiIikpPyIwIjplfWZ1bmN0aW9uIGQoZSl7bGV0IHQ9LygtP1xkKykoXGR7M30pLztmb3IoO3QudGVzdChlKTspZT1lLnJlcGxhY2UodCwiJDEsJDIiKTtyZXR1cm4gZX1yLmZvcm1hdE5lYXJBbW91bnQ9YSxyLnBhcnNlTmVhckFtb3VudD1zLHIuYmFzZUVuY29kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlLmNoYXJDb2RlQXQocikpO2U9bmV3IFVpbnQ4QXJyYXkodCl9cmV0dXJuIG4uYmFzZTU4LmVuY29kZShlKX0sci5iYXNlRGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBuLmJhc2U1OC5kZWNvZGUoZSl9fSwzOTI3LChlLHQscik9Pnt0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzY2hlbWEiOnsiQWNjZXNzS2V5Tm90Rm91bmQiOnsibmFtZSI6IkFjY2Vzc0tleU5vdEZvdW5kIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwicHVibGljX2tleSI6IiJ9fSwiQWNjb3VudEFscmVhZHlFeGlzdHMiOnsibmFtZSI6IkFjY291bnRBbHJlYWR5RXhpc3RzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJBY2NvdW50RG9lc05vdEV4aXN0Ijp7Im5hbWUiOiJBY2NvdW50RG9lc05vdEV4aXN0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJBY3Rpb25FcnJvciI6eyJuYW1lIjoiQWN0aW9uRXJyb3IiLCJzdWJ0eXBlcyI6WyJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJDcmVhdGVBY2NvdW50T25seUJ5UmVnaXN0cmFyIiwiQ3JlYXRlQWNjb3VudE5vdEFsbG93ZWQiLCJBY3Rvck5vUGVybWlzc2lvbiIsIkRlbGV0ZUtleURvZXNOb3RFeGlzdCIsIkFkZEtleUFscmVhZHlFeGlzdHMiLCJEZWxldGVBY2NvdW50U3Rha2luZyIsIkxhY2tCYWxhbmNlRm9yU3RhdGUiLCJUcmllc1RvVW5zdGFrZSIsIlRyaWVzVG9TdGFrZSIsIkluc3VmZmljaWVudFN0YWtlIiwiRnVuY3Rpb25DYWxsRXJyb3IiLCJOZXdSZWNlaXB0VmFsaWRhdGlvbkVycm9yIiwiT25seUltcGxpY2l0QWNjb3VudENyZWF0aW9uQWxsb3dlZCIsIkRlbGV0ZUFjY291bnRXaXRoTGFyZ2VTdGF0ZSIsIkRlbGVnYXRlQWN0aW9uSW52YWxpZFNpZ25hdHVyZSIsIkRlbGVnYXRlQWN0aW9uU2VuZGVyRG9lc05vdE1hdGNoVHhSZWNlaXZlciIsIkRlbGVnYXRlQWN0aW9uRXhwaXJlZCIsIkRlbGVnYXRlQWN0aW9uQWNjZXNzS2V5RXJyb3IiLCJEZWxlZ2F0ZUFjdGlvbkludmFsaWROb25jZSIsIkRlbGVnYXRlQWN0aW9uTm9uY2VUb29MYXJnZSJdLCJwcm9wcyI6eyJpbmRleCI6IiJ9fSwiQWN0aW9uc1ZhbGlkYXRpb25FcnJvciI6eyJuYW1lIjoiQWN0aW9uc1ZhbGlkYXRpb25FcnJvciIsInN1YnR5cGVzIjpbIkRlbGV0ZUFjdGlvbk11c3RCZUZpbmFsIiwiVG90YWxQcmVwYWlkR2FzRXhjZWVkZWQiLCJUb3RhbE51bWJlck9mQWN0aW9uc0V4Y2VlZGVkIiwiQWRkS2V5TWV0aG9kTmFtZXNOdW1iZXJPZkJ5dGVzRXhjZWVkZWQiLCJBZGRLZXlNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiLCJJbnRlZ2VyT3ZlcmZsb3ciLCJJbnZhbGlkQWNjb3VudElkIiwiQ29udHJhY3RTaXplRXhjZWVkZWQiLCJGdW5jdGlvbkNhbGxNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiLCJGdW5jdGlvbkNhbGxBcmd1bWVudHNMZW5ndGhFeGNlZWRlZCIsIlVuc3VpdGFibGVTdGFraW5nS2V5IiwiRnVuY3Rpb25DYWxsWmVyb0F0dGFjaGVkR2FzIiwiRGVsZWdhdGVBY3Rpb25NdXN0QmVPbmx5T25lIiwiVW5zdXBwb3J0ZWRQcm90b2NvbEZlYXR1cmUiXSwicHJvcHMiOnt9fSwiQWN0b3JOb1Blcm1pc3Npb24iOnsibmFtZSI6IkFjdG9yTm9QZXJtaXNzaW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwiYWN0b3JfaWQiOiIifX0sIkFkZEtleUFscmVhZHlFeGlzdHMiOnsibmFtZSI6IkFkZEtleUFscmVhZHlFeGlzdHMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJwdWJsaWNfa2V5IjoiIn19LCJBZGRLZXlNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IkFkZEtleU1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIkFkZEtleU1ldGhvZE5hbWVzTnVtYmVyT2ZCeXRlc0V4Y2VlZGVkIjp7Im5hbWUiOiJBZGRLZXlNZXRob2ROYW1lc051bWJlck9mQnl0ZXNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJ0b3RhbF9udW1iZXJfb2ZfYnl0ZXMiOiIifX0sIkFsdEJuMTI4SW52YWxpZElucHV0Ijp7Im5hbWUiOiJBbHRCbjEyOEludmFsaWRJbnB1dCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibXNnIjoiIn19LCJCYWRVVEYxNiI6eyJuYW1lIjoiQmFkVVRGMTYiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkJhZFVURjgiOnsibmFtZSI6IkJhZFVURjgiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkJhbGFuY2VFeGNlZWRlZCI6eyJuYW1lIjoiQmFsYW5jZUV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJCYWxhbmNlTWlzbWF0Y2hFcnJvciI6eyJuYW1lIjoiQmFsYW5jZU1pc21hdGNoRXJyb3IiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImZpbmFsX2FjY291bnRzX2JhbGFuY2UiOiIiLCJmaW5hbF9wb3N0cG9uZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsImZvcndhcmRlZF9idWZmZXJlZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwiaW5jb21pbmdfcmVjZWlwdHNfYmFsYW5jZSI6IiIsImluY29taW5nX3ZhbGlkYXRvcl9yZXdhcmRzIjoiIiwiaW5pdGlhbF9hY2NvdW50c19iYWxhbmNlIjoiIiwiaW5pdGlhbF9wb3N0cG9uZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsIm5ld19idWZmZXJlZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwibmV3X2RlbGF5ZWRfcmVjZWlwdHNfYmFsYW5jZSI6IiIsIm90aGVyX2J1cm50X2Ftb3VudCI6IiIsIm91dGdvaW5nX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJwcm9jZXNzZWRfZGVsYXllZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwic2xhc2hlZF9idXJudF9hbW91bnQiOiIiLCJ0eF9idXJudF9hbW91bnQiOiIifX0sIkNhbGxJbmRpcmVjdE9PQiI6eyJuYW1lIjoiQ2FsbEluZGlyZWN0T09CIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJDYW5ub3RBcHBlbmRBY3Rpb25Ub0pvaW50UHJvbWlzZSI6eyJuYW1lIjoiQ2Fubm90QXBwZW5kQWN0aW9uVG9Kb2ludFByb21pc2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkNhbm5vdFJldHVybkpvaW50UHJvbWlzZSI6eyJuYW1lIjoiQ2Fubm90UmV0dXJuSm9pbnRQcm9taXNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJDb2RlRG9lc05vdEV4aXN0Ijp7Im5hbWUiOiJDb2RlRG9lc05vdEV4aXN0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJDb21waWxhdGlvbkVycm9yIjp7Im5hbWUiOiJDb21waWxhdGlvbkVycm9yIiwic3VidHlwZXMiOlsiQ29kZURvZXNOb3RFeGlzdCIsIlByZXBhcmVFcnJvciIsIldhc21lckNvbXBpbGVFcnJvciJdLCJwcm9wcyI6e319LCJDb250cmFjdFNpemVFeGNlZWRlZCI6eyJuYW1lIjoiQ29udHJhY3RTaXplRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwic2l6ZSI6IiJ9fSwiQ29zdE92ZXJmbG93Ijp7Im5hbWUiOiJDb3N0T3ZlcmZsb3ciLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkNyZWF0ZUFjY291bnROb3RBbGxvd2VkIjp7Im5hbWUiOiJDcmVhdGVBY2NvdW50Tm90QWxsb3dlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsInByZWRlY2Vzc29yX2lkIjoiIn19LCJDcmVhdGVBY2NvdW50T25seUJ5UmVnaXN0cmFyIjp7Im5hbWUiOiJDcmVhdGVBY2NvdW50T25seUJ5UmVnaXN0cmFyIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwicHJlZGVjZXNzb3JfaWQiOiIiLCJyZWdpc3RyYXJfYWNjb3VudF9pZCI6IiJ9fSwiRGVsZWdhdGVBY3Rpb25FeHBpcmVkIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvbkV4cGlyZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkRlbGVnYXRlQWN0aW9uSW52YWxpZE5vbmNlIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvbkludmFsaWROb25jZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWtfbm9uY2UiOiIiLCJkZWxlZ2F0ZV9ub25jZSI6IiJ9fSwiRGVsZWdhdGVBY3Rpb25JbnZhbGlkU2lnbmF0dXJlIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvbkludmFsaWRTaWduYXR1cmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkRlbGVnYXRlQWN0aW9uTXVzdEJlT25seU9uZSI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25NdXN0QmVPbmx5T25lIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJEZWxlZ2F0ZUFjdGlvbk5vbmNlVG9vTGFyZ2UiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uTm9uY2VUb29MYXJnZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiZGVsZWdhdGVfbm9uY2UiOiIiLCJ1cHBlcl9ib3VuZCI6IiJ9fSwiRGVsZWdhdGVBY3Rpb25TZW5kZXJEb2VzTm90TWF0Y2hUeFJlY2VpdmVyIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvblNlbmRlckRvZXNOb3RNYXRjaFR4UmVjZWl2ZXIiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InJlY2VpdmVyX2lkIjoiIiwic2VuZGVyX2lkIjoiIn19LCJEZWxldGVBY2NvdW50U3Rha2luZyI6eyJuYW1lIjoiRGVsZXRlQWNjb3VudFN0YWtpbmciLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkRlbGV0ZUFjY291bnRXaXRoTGFyZ2VTdGF0ZSI6eyJuYW1lIjoiRGVsZXRlQWNjb3VudFdpdGhMYXJnZVN0YXRlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJEZWxldGVBY3Rpb25NdXN0QmVGaW5hbCI6eyJuYW1lIjoiRGVsZXRlQWN0aW9uTXVzdEJlRmluYWwiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkRlbGV0ZUtleURvZXNOb3RFeGlzdCI6eyJuYW1lIjoiRGVsZXRlS2V5RG9lc05vdEV4aXN0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwicHVibGljX2tleSI6IiJ9fSwiRGVwb3NpdFdpdGhGdW5jdGlvbkNhbGwiOnsibmFtZSI6IkRlcG9zaXRXaXRoRnVuY3Rpb25DYWxsIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJEZXByZWNhdGVkIjp7Im5hbWUiOiJEZXByZWNhdGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtZXRob2RfbmFtZSI6IiJ9fSwiRGVzZXJpYWxpemF0aW9uIjp7Im5hbWUiOiJEZXNlcmlhbGl6YXRpb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkVDUmVjb3ZlckVycm9yIjp7Im5hbWUiOiJFQ1JlY292ZXJFcnJvciIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibXNnIjoiIn19LCJFZDI1NTE5VmVyaWZ5SW52YWxpZElucHV0Ijp7Im5hbWUiOiJFZDI1NTE5VmVyaWZ5SW52YWxpZElucHV0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtc2ciOiIifX0sIkVtcHR5TWV0aG9kTmFtZSI6eyJuYW1lIjoiRW1wdHlNZXRob2ROYW1lIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJFeHBpcmVkIjp7Im5hbWUiOiJFeHBpcmVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJGdW5jdGlvbkNhbGxBcmd1bWVudHNMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiRnVuY3Rpb25DYWxsQXJndW1lbnRzTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJGdW5jdGlvbkNhbGxNZXRob2ROYW1lTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IkZ1bmN0aW9uQ2FsbE1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIkZ1bmN0aW9uQ2FsbFplcm9BdHRhY2hlZEdhcyI6eyJuYW1lIjoiRnVuY3Rpb25DYWxsWmVyb0F0dGFjaGVkR2FzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJHYXNFeGNlZWRlZCI6eyJuYW1lIjoiR2FzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkdhc0luc3RydW1lbnRhdGlvbiI6eyJuYW1lIjoiR2FzSW5zdHJ1bWVudGF0aW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJHYXNMaW1pdEV4Y2VlZGVkIjp7Im5hbWUiOiJHYXNMaW1pdEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJHZW5lcmljVHJhcCI6eyJuYW1lIjoiR2VuZXJpY1RyYXAiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkd1ZXN0UGFuaWMiOnsibmFtZSI6Ikd1ZXN0UGFuaWMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InBhbmljX21zZyI6IiJ9fSwiSG9zdEVycm9yIjp7Im5hbWUiOiJIb3N0RXJyb3IiLCJzdWJ0eXBlcyI6WyJCYWRVVEYxNiIsIkJhZFVURjgiLCJHYXNFeGNlZWRlZCIsIkdhc0xpbWl0RXhjZWVkZWQiLCJCYWxhbmNlRXhjZWVkZWQiLCJFbXB0eU1ldGhvZE5hbWUiLCJHdWVzdFBhbmljIiwiSW50ZWdlck92ZXJmbG93IiwiSW52YWxpZFByb21pc2VJbmRleCIsIkNhbm5vdEFwcGVuZEFjdGlvblRvSm9pbnRQcm9taXNlIiwiQ2Fubm90UmV0dXJuSm9pbnRQcm9taXNlIiwiSW52YWxpZFByb21pc2VSZXN1bHRJbmRleCIsIkludmFsaWRSZWdpc3RlcklkIiwiSXRlcmF0b3JXYXNJbnZhbGlkYXRlZCIsIk1lbW9yeUFjY2Vzc1Zpb2xhdGlvbiIsIkludmFsaWRSZWNlaXB0SW5kZXgiLCJJbnZhbGlkSXRlcmF0b3JJbmRleCIsIkludmFsaWRBY2NvdW50SWQiLCJJbnZhbGlkTWV0aG9kTmFtZSIsIkludmFsaWRQdWJsaWNLZXkiLCJQcm9oaWJpdGVkSW5WaWV3IiwiTnVtYmVyT2ZMb2dzRXhjZWVkZWQiLCJLZXlMZW5ndGhFeGNlZWRlZCIsIlZhbHVlTGVuZ3RoRXhjZWVkZWQiLCJUb3RhbExvZ0xlbmd0aEV4Y2VlZGVkIiwiTnVtYmVyUHJvbWlzZXNFeGNlZWRlZCIsIk51bWJlcklucHV0RGF0YURlcGVuZGVuY2llc0V4Y2VlZGVkIiwiUmV0dXJuZWRWYWx1ZUxlbmd0aEV4Y2VlZGVkIiwiQ29udHJhY3RTaXplRXhjZWVkZWQiLCJEZXByZWNhdGVkIiwiRUNSZWNvdmVyRXJyb3IiLCJBbHRCbjEyOEludmFsaWRJbnB1dCIsIkVkMjU1MTlWZXJpZnlJbnZhbGlkSW5wdXQiXSwicHJvcHMiOnt9fSwiSWxsZWdhbEFyaXRobWV0aWMiOnsibmFtZSI6IklsbGVnYWxBcml0aG1ldGljIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbmNvcnJlY3RDYWxsSW5kaXJlY3RTaWduYXR1cmUiOnsibmFtZSI6IkluY29ycmVjdENhbGxJbmRpcmVjdFNpZ25hdHVyZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW5kaXJlY3RDYWxsVG9OdWxsIjp7Im5hbWUiOiJJbmRpcmVjdENhbGxUb051bGwiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkluc3RhbnRpYXRlIjp7Im5hbWUiOiJJbnN0YW50aWF0ZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW5zdWZmaWNpZW50U3Rha2UiOnsibmFtZSI6Ikluc3VmZmljaWVudFN0YWtlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwibWluaW11bV9zdGFrZSI6IiIsInN0YWtlIjoiIn19LCJJbnRlZ2VyT3ZlcmZsb3ciOnsibmFtZSI6IkludGVnZXJPdmVyZmxvdyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW50ZXJuYWxNZW1vcnlEZWNsYXJlZCI6eyJuYW1lIjoiSW50ZXJuYWxNZW1vcnlEZWNsYXJlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZEFjY2Vzc0tleUVycm9yIjp7Im5hbWUiOiJJbnZhbGlkQWNjZXNzS2V5RXJyb3IiLCJzdWJ0eXBlcyI6WyJBY2Nlc3NLZXlOb3RGb3VuZCIsIlJlY2VpdmVyTWlzbWF0Y2giLCJNZXRob2ROYW1lTWlzbWF0Y2giLCJSZXF1aXJlc0Z1bGxBY2Nlc3MiLCJOb3RFbm91Z2hBbGxvd2FuY2UiLCJEZXBvc2l0V2l0aEZ1bmN0aW9uQ2FsbCJdLCJwcm9wcyI6e319LCJJbnZhbGlkQWNjb3VudElkIjp7Im5hbWUiOiJJbnZhbGlkQWNjb3VudElkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkQ2hhaW4iOnsibmFtZSI6IkludmFsaWRDaGFpbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZERhdGFSZWNlaXZlcklkIjp7Im5hbWUiOiJJbnZhbGlkRGF0YVJlY2VpdmVySWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkludmFsaWRJdGVyYXRvckluZGV4Ijp7Im5hbWUiOiJJbnZhbGlkSXRlcmF0b3JJbmRleCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiaXRlcmF0b3JfaW5kZXgiOiIifX0sIkludmFsaWRNZXRob2ROYW1lIjp7Im5hbWUiOiJJbnZhbGlkTWV0aG9kTmFtZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZE5vbmNlIjp7Im5hbWUiOiJJbnZhbGlkTm9uY2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFrX25vbmNlIjoiIiwidHhfbm9uY2UiOiIifX0sIkludmFsaWRQcmVkZWNlc3NvcklkIjp7Im5hbWUiOiJJbnZhbGlkUHJlZGVjZXNzb3JJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiSW52YWxpZFByb21pc2VJbmRleCI6eyJuYW1lIjoiSW52YWxpZFByb21pc2VJbmRleCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicHJvbWlzZV9pZHgiOiIifX0sIkludmFsaWRQcm9taXNlUmVzdWx0SW5kZXgiOnsibmFtZSI6IkludmFsaWRQcm9taXNlUmVzdWx0SW5kZXgiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InJlc3VsdF9pZHgiOiIifX0sIkludmFsaWRQdWJsaWNLZXkiOnsibmFtZSI6IkludmFsaWRQdWJsaWNLZXkiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWRSZWNlaXB0SW5kZXgiOnsibmFtZSI6IkludmFsaWRSZWNlaXB0SW5kZXgiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InJlY2VpcHRfaW5kZXgiOiIifX0sIkludmFsaWRSZWNlaXZlcklkIjp7Im5hbWUiOiJJbnZhbGlkUmVjZWl2ZXJJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiSW52YWxpZFJlZ2lzdGVySWQiOnsibmFtZSI6IkludmFsaWRSZWdpc3RlcklkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJyZWdpc3Rlcl9pZCI6IiJ9fSwiSW52YWxpZFNpZ25hdHVyZSI6eyJuYW1lIjoiSW52YWxpZFNpZ25hdHVyZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZFNpZ25lcklkIjp7Im5hbWUiOiJJbnZhbGlkU2lnbmVySWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkludmFsaWRUeEVycm9yIjp7Im5hbWUiOiJJbnZhbGlkVHhFcnJvciIsInN1YnR5cGVzIjpbIkludmFsaWRBY2Nlc3NLZXlFcnJvciIsIkludmFsaWRTaWduZXJJZCIsIlNpZ25lckRvZXNOb3RFeGlzdCIsIkludmFsaWROb25jZSIsIk5vbmNlVG9vTGFyZ2UiLCJJbnZhbGlkUmVjZWl2ZXJJZCIsIkludmFsaWRTaWduYXR1cmUiLCJOb3RFbm91Z2hCYWxhbmNlIiwiTGFja0JhbGFuY2VGb3JTdGF0ZSIsIkNvc3RPdmVyZmxvdyIsIkludmFsaWRDaGFpbiIsIkV4cGlyZWQiLCJBY3Rpb25zVmFsaWRhdGlvbiIsIlRyYW5zYWN0aW9uU2l6ZUV4Y2VlZGVkIiwiU3RvcmFnZUVycm9yIiwiU2hhcmRDb25nZXN0ZWQiLCJTaGFyZFN0dWNrIl0sInByb3BzIjp7fX0sIkl0ZXJhdG9yV2FzSW52YWxpZGF0ZWQiOnsibmFtZSI6Ikl0ZXJhdG9yV2FzSW52YWxpZGF0ZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Iml0ZXJhdG9yX2luZGV4IjoiIn19LCJLZXlMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiS2V5TGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJMYWNrQmFsYW5jZUZvclN0YXRlIjp7Im5hbWUiOiJMYWNrQmFsYW5jZUZvclN0YXRlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwiYW1vdW50IjoiIn19LCJNZW1vcnkiOnsibmFtZSI6Ik1lbW9yeSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWVtb3J5QWNjZXNzVmlvbGF0aW9uIjp7Im5hbWUiOiJNZW1vcnlBY2Nlc3NWaW9sYXRpb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1lbW9yeU91dE9mQm91bmRzIjp7Im5hbWUiOiJNZW1vcnlPdXRPZkJvdW5kcyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWV0aG9kRW1wdHlOYW1lIjp7Im5hbWUiOiJNZXRob2RFbXB0eU5hbWUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1ldGhvZEludmFsaWRTaWduYXR1cmUiOnsibmFtZSI6Ik1ldGhvZEludmFsaWRTaWduYXR1cmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1ldGhvZE5hbWVNaXNtYXRjaCI6eyJuYW1lIjoiTWV0aG9kTmFtZU1pc21hdGNoIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtZXRob2RfbmFtZSI6IiJ9fSwiTWV0aG9kTm90Rm91bmQiOnsibmFtZSI6Ik1ldGhvZE5vdEZvdW5kIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZXRob2RSZXNvbHZlRXJyb3IiOnsibmFtZSI6Ik1ldGhvZFJlc29sdmVFcnJvciIsInN1YnR5cGVzIjpbIk1ldGhvZEVtcHR5TmFtZSIsIk1ldGhvZE5vdEZvdW5kIiwiTWV0aG9kSW52YWxpZFNpZ25hdHVyZSJdLCJwcm9wcyI6e319LCJNaXNhbGlnbmVkQXRvbWljQWNjZXNzIjp7Im5hbWUiOiJNaXNhbGlnbmVkQXRvbWljQWNjZXNzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJOb25jZVRvb0xhcmdlIjp7Im5hbWUiOiJOb25jZVRvb0xhcmdlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJ0eF9ub25jZSI6IiIsInVwcGVyX2JvdW5kIjoiIn19LCJOb3RFbm91Z2hBbGxvd2FuY2UiOnsibmFtZSI6Ik5vdEVub3VnaEFsbG93YW5jZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsImFsbG93YW5jZSI6IiIsImNvc3QiOiIiLCJwdWJsaWNfa2V5IjoiIn19LCJOb3RFbm91Z2hCYWxhbmNlIjp7Im5hbWUiOiJOb3RFbm91Z2hCYWxhbmNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJiYWxhbmNlIjoiIiwiY29zdCI6IiIsInNpZ25lcl9pZCI6IiJ9fSwiTnVtYmVySW5wdXREYXRhRGVwZW5kZW5jaWVzRXhjZWVkZWQiOnsibmFtZSI6Ik51bWJlcklucHV0RGF0YURlcGVuZGVuY2llc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsIm51bWJlcl9vZl9pbnB1dF9kYXRhX2RlcGVuZGVuY2llcyI6IiJ9fSwiTnVtYmVyT2ZMb2dzRXhjZWVkZWQiOnsibmFtZSI6Ik51bWJlck9mTG9nc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiJ9fSwiTnVtYmVyUHJvbWlzZXNFeGNlZWRlZCI6eyJuYW1lIjoiTnVtYmVyUHJvbWlzZXNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJudW1iZXJfb2ZfcHJvbWlzZXMiOiIifX0sIk9ubHlJbXBsaWNpdEFjY291bnRDcmVhdGlvbkFsbG93ZWQiOnsibmFtZSI6Ik9ubHlJbXBsaWNpdEFjY291bnRDcmVhdGlvbkFsbG93ZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIlByZXBhcmVFcnJvciI6eyJuYW1lIjoiUHJlcGFyZUVycm9yIiwic3VidHlwZXMiOlsiU2VyaWFsaXphdGlvbiIsIkRlc2VyaWFsaXphdGlvbiIsIkludGVybmFsTWVtb3J5RGVjbGFyZWQiLCJHYXNJbnN0cnVtZW50YXRpb24iLCJTdGFja0hlaWdodEluc3RydW1lbnRhdGlvbiIsIkluc3RhbnRpYXRlIiwiTWVtb3J5IiwiVG9vTWFueUZ1bmN0aW9ucyIsIlRvb01hbnlMb2NhbHMiXSwicHJvcHMiOnt9fSwiUHJvaGliaXRlZEluVmlldyI6eyJuYW1lIjoiUHJvaGliaXRlZEluVmlldyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibWV0aG9kX25hbWUiOiIifX0sIlJlY2VpcHRTaXplRXhjZWVkZWQiOnsibmFtZSI6IlJlY2VpcHRTaXplRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwic2l6ZSI6IiJ9fSwiUmVjZWlwdFZhbGlkYXRpb25FcnJvciI6eyJuYW1lIjoiUmVjZWlwdFZhbGlkYXRpb25FcnJvciIsInN1YnR5cGVzIjpbIkludmFsaWRQcmVkZWNlc3NvcklkIiwiSW52YWxpZFJlY2VpdmVySWQiLCJJbnZhbGlkU2lnbmVySWQiLCJJbnZhbGlkRGF0YVJlY2VpdmVySWQiLCJSZXR1cm5lZFZhbHVlTGVuZ3RoRXhjZWVkZWQiLCJOdW1iZXJJbnB1dERhdGFEZXBlbmRlbmNpZXNFeGNlZWRlZCIsIkFjdGlvbnNWYWxpZGF0aW9uIiwiUmVjZWlwdFNpemVFeGNlZWRlZCJdLCJwcm9wcyI6e319LCJSZWNlaXZlck1pc21hdGNoIjp7Im5hbWUiOiJSZWNlaXZlck1pc21hdGNoIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJha19yZWNlaXZlciI6IiIsInR4X3JlY2VpdmVyIjoiIn19LCJSZXF1aXJlc0Z1bGxBY2Nlc3MiOnsibmFtZSI6IlJlcXVpcmVzRnVsbEFjY2VzcyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiUmV0dXJuZWRWYWx1ZUxlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJSZXR1cm5lZFZhbHVlTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJTZXJpYWxpemF0aW9uIjp7Im5hbWUiOiJTZXJpYWxpemF0aW9uIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJTaGFyZENvbmdlc3RlZCI6eyJuYW1lIjoiU2hhcmRDb25nZXN0ZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImNvbmdlc3Rpb25fbGV2ZWwiOiIiLCJzaGFyZF9pZCI6IiJ9fSwiU2hhcmRTdHVjayI6eyJuYW1lIjoiU2hhcmRTdHVjayIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibWlzc2VkX2NodW5rcyI6IiIsInNoYXJkX2lkIjoiIn19LCJTaWduZXJEb2VzTm90RXhpc3QiOnsibmFtZSI6IlNpZ25lckRvZXNOb3RFeGlzdCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsic2lnbmVyX2lkIjoiIn19LCJTdGFja0hlaWdodEluc3RydW1lbnRhdGlvbiI6eyJuYW1lIjoiU3RhY2tIZWlnaHRJbnN0cnVtZW50YXRpb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlN0YWNrT3ZlcmZsb3ciOnsibmFtZSI6IlN0YWNrT3ZlcmZsb3ciLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlRvb01hbnlGdW5jdGlvbnMiOnsibmFtZSI6IlRvb01hbnlGdW5jdGlvbnMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlRvb01hbnlMb2NhbHMiOnsibmFtZSI6IlRvb01hbnlMb2NhbHMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlRvdGFsTG9nTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IlRvdGFsTG9nTGVuZ3RoRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Imxlbmd0aCI6IiIsImxpbWl0IjoiIn19LCJUb3RhbE51bWJlck9mQWN0aW9uc0V4Y2VlZGVkIjp7Im5hbWUiOiJUb3RhbE51bWJlck9mQWN0aW9uc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInRvdGFsX251bWJlcl9vZl9hY3Rpb25zIjoiIn19LCJUb3RhbFByZXBhaWRHYXNFeGNlZWRlZCI6eyJuYW1lIjoiVG90YWxQcmVwYWlkR2FzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwidG90YWxfcHJlcGFpZF9nYXMiOiIifX0sIlRyYW5zYWN0aW9uU2l6ZUV4Y2VlZGVkIjp7Im5hbWUiOiJUcmFuc2FjdGlvblNpemVFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJzaXplIjoiIn19LCJUcmllc1RvU3Rha2UiOnsibmFtZSI6IlRyaWVzVG9TdGFrZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsImJhbGFuY2UiOiIiLCJsb2NrZWQiOiIiLCJzdGFrZSI6IiJ9fSwiVHJpZXNUb1Vuc3Rha2UiOnsibmFtZSI6IlRyaWVzVG9VbnN0YWtlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJUeEV4ZWN1dGlvbkVycm9yIjp7Im5hbWUiOiJUeEV4ZWN1dGlvbkVycm9yIiwic3VidHlwZXMiOlsiQWN0aW9uRXJyb3IiLCJJbnZhbGlkVHhFcnJvciJdLCJwcm9wcyI6e319LCJVbnJlYWNoYWJsZSI6eyJuYW1lIjoiVW5yZWFjaGFibGUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlVuc3VpdGFibGVTdGFraW5nS2V5Ijp7Im5hbWUiOiJVbnN1aXRhYmxlU3Rha2luZ0tleSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicHVibGljX2tleSI6IiJ9fSwiVW5zdXBwb3J0ZWRQcm90b2NvbEZlYXR1cmUiOnsibmFtZSI6IlVuc3VwcG9ydGVkUHJvdG9jb2xGZWF0dXJlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJwcm90b2NvbF9mZWF0dXJlIjoiIiwidmVyc2lvbiI6IiJ9fSwiVmFsdWVMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiVmFsdWVMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIldhc21UcmFwIjp7Im5hbWUiOiJXYXNtVHJhcCIsInN1YnR5cGVzIjpbIlVucmVhY2hhYmxlIiwiSW5jb3JyZWN0Q2FsbEluZGlyZWN0U2lnbmF0dXJlIiwiTWVtb3J5T3V0T2ZCb3VuZHMiLCJDYWxsSW5kaXJlY3RPT0IiLCJJbGxlZ2FsQXJpdGhtZXRpYyIsIk1pc2FsaWduZWRBdG9taWNBY2Nlc3MiLCJJbmRpcmVjdENhbGxUb051bGwiLCJTdGFja092ZXJmbG93IiwiR2VuZXJpY1RyYXAiXSwicHJvcHMiOnt9fSwiV2FzbWVyQ29tcGlsZUVycm9yIjp7Im5hbWUiOiJXYXNtZXJDb21waWxlRXJyb3IiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1zZyI6IiJ9fSwiQ2xvc2VkIjp7Im5hbWUiOiJDbG9zZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlNlcnZlckVycm9yIjp7Im5hbWUiOiJTZXJ2ZXJFcnJvciIsInN1YnR5cGVzIjpbIlR4RXhlY3V0aW9uRXJyb3IiLCJUaW1lb3V0IiwiQ2xvc2VkIl0sInByb3BzIjp7fX0sIlRpbWVvdXQiOnsibmFtZSI6IlRpbWVvdXQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX19fScpfSw0OTUyOSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5nZXRFcnJvclR5cGVGcm9tRXJyb3JNZXNzYWdlPXIuZm9ybWF0RXJyb3I9ci5wYXJzZVJlc3VsdEVycm9yPXIucGFyc2VScGNFcnJvcj1yLlNlcnZlckVycm9yPXZvaWQgMDtsZXQgaT1lLnIoMzYzODUpLG89bihlLnIoODE5MjgpKSxhPWUucig0NzM0Nykscz1lLnIoMjUzNzgpLGM9bihlLnIoMzkyNykpLHU9e2Zvcm1hdE5lYXI6KCk9PihlLHQpPT4oMCxhLmZvcm1hdE5lYXJBbW91bnQpKHQoZSkpfTtjbGFzcyBmIGV4dGVuZHMgaS5UeXBlZEVycm9ye31yLlNlcnZlckVycm9yPWY7Y2xhc3MgZCBleHRlbmRzIGZ7dHJhbnNhY3Rpb25fb3V0Y29tZX1mdW5jdGlvbiBsKGUpe2xldCB0PXt9LHI9cChlLGMuZGVmYXVsdC5zY2hlbWEsdCwiIiksbj1uZXcgZihoKHIsdCkscik7cmV0dXJuIE9iamVjdC5hc3NpZ24obix0KSxufWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHMuRXJyb3JNZXNzYWdlc1tlXT9vLmRlZmF1bHQucmVuZGVyKHMuRXJyb3JNZXNzYWdlc1tlXSx7Li4udCwuLi51fSk6SlNPTi5zdHJpbmdpZnkodCl9ZnVuY3Rpb24gcChlLHQscixuKXtsZXQgaSxvLGE7Zm9yKGxldCByIGluIHQpe2lmKG0oZVtyXSkpcmV0dXJuIGVbcl07aWYoYihlW3JdKSlpPWVbcl0sbz10W3JdLGE9cjtlbHNle2lmKCEoYihlLmtpbmQpJiZiKGUua2luZFtyXSkpKWNvbnRpbnVlO2k9ZS5raW5kW3JdLG89dFtyXSxhPXJ9fWlmKCFpfHwhbylyZXR1cm4gci5raW5kPWUsbjtmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMoby5wcm9wcykpcltlXT1pW2VdO3JldHVybiBwKGksdCxyLGEpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gbShlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1yLnBhcnNlUnBjRXJyb3I9bCxyLnBhcnNlUmVzdWx0RXJyb3I9ZnVuY3Rpb24oZSl7bGV0IHQ9bChlLnN0YXR1cy5GYWlsdXJlKSxyPW5ldyBkO3JldHVybiBPYmplY3QuYXNzaWduKHIsdCksci50eXBlPXQudHlwZSxyLm1lc3NhZ2U9dC5tZXNzYWdlLHIudHJhbnNhY3Rpb25fb3V0Y29tZT1lLnRyYW5zYWN0aW9uX291dGNvbWUscn0sci5mb3JtYXRFcnJvcj1oLHIuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZT1mdW5jdGlvbihlLHQpe3N3aXRjaCghMCl7Y2FzZS9eYWNjb3VudCAuKj8gZG9lcyBub3QgZXhpc3Qgd2hpbGUgdmlld2luZyQvLnRlc3QoZSk6Y2FzZS9eQWNjb3VudCAuKj8gZG9lc24ndCBleGlzdCQvLnRlc3QoZSk6cmV0dXJuIkFjY291bnREb2VzTm90RXhpc3QiO2Nhc2UvXmFjY2VzcyBrZXkgLio/IGRvZXMgbm90IGV4aXN0IHdoaWxlIHZpZXdpbmckLy50ZXN0KGUpOnJldHVybiJBY2Nlc3NLZXlEb2VzTm90RXhpc3QiO2Nhc2Uvd2FzbSBleGVjdXRpb24gZmFpbGVkIHdpdGggZXJyb3I6IEZ1bmN0aW9uQ2FsbEVycm9yXChDb21waWxhdGlvbkVycm9yXChDb2RlRG9lc05vdEV4aXN0Ly50ZXN0KGUpOmNhc2Uvd2FzbSBleGVjdXRpb24gZmFpbGVkIHdpdGggZXJyb3I6IENvbXBpbGF0aW9uRXJyb3JcKENvZGVEb2VzTm90RXhpc3QvLnRlc3QoZSk6cmV0dXJuIkNvZGVEb2VzTm90RXhpc3QiO2Nhc2Uvd2FzbSBleGVjdXRpb24gZmFpbGVkIHdpdGggZXJyb3I6IEZ1bmN0aW9uQ2FsbEVycm9yXChNZXRob2RSZXNvbHZlRXJyb3JcKE1ldGhvZE5vdEZvdW5kLy50ZXN0KGUpOmNhc2Uvd2FzbSBleGVjdXRpb24gZmFpbGVkIHdpdGggZXJyb3I6IE1ldGhvZFJlc29sdmVFcnJvclwoTWV0aG9kTm90Rm91bmQvLnRlc3QoZSk6cmV0dXJuIk1ldGhvZE5vdEZvdW5kIjtjYXNlL1RyYW5zYWN0aW9uIG5vbmNlIFxkKyBtdXN0IGJlIGxhcmdlciB0aGFuIG5vbmNlIG9mIHRoZSB1c2VkIGFjY2VzcyBrZXkgXGQrLy50ZXN0KGUpOnJldHVybiJJbnZhbGlkTm9uY2UiO2RlZmF1bHQ6cmV0dXJuIHR9fX0sMzM4OTAsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5wYXJzZVJwY0Vycm9yPXIucGFyc2VSZXN1bHRFcnJvcj1yLmdldEVycm9yVHlwZUZyb21FcnJvck1lc3NhZ2U9ci5mb3JtYXRFcnJvcj1yLlNlcnZlckVycm9yPXIuRXJyb3JNZXNzYWdlcz12b2lkIDA7dmFyIG49ZS5yKDI1Mzc4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiRXJyb3JNZXNzYWdlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uRXJyb3JNZXNzYWdlc319KTt2YXIgaT1lLnIoNDk1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJTZXJ2ZXJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU2VydmVyRXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImZvcm1hdEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5mb3JtYXRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VSZXN1bHRFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VSZXN1bHRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VScGNFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VScGNFcnJvcn19KX0sNjY4MywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkNvbnNvbGVMb2dnZXI9dm9pZCAwO2NsYXNzIG57bG9nTGV2ZWxzO2NvbnN0cnVjdG9yKGUpe3RoaXMubG9nTGV2ZWxzPWV9aXNMZXZlbEVuYWJsZWQ9ZT0+dGhpcy5sb2dMZXZlbHMuaW5jbHVkZXMoZSk7cHJpbnQoZSx0LC4uLnIpe3N3aXRjaChlKXtjYXNlImVycm9yIjpjYXNlImZhdGFsIjpyZXR1cm4gY29uc29sZS5lcnJvcih0LC4uLnIpO2Nhc2Uid2FybiI6cmV0dXJuIGNvbnNvbGUud2Fybih0LC4uLnIpO2Nhc2UibG9nIjpyZXR1cm4gY29uc29sZS5sb2codCwuLi5yKTtjYXNlImRlYnVnIjpjYXNlInZlcmJvc2UiOnJldHVybiBjb25zb2xlLmRlYnVnKHQsLi4ucil9fXZlcmJvc2UoZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJ2ZXJib3NlIikmJnRoaXMucHJpbnQoInZlcmJvc2UiLGUsLi4udCl9ZGVidWcoZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJkZWJ1ZyIpJiZ0aGlzLnByaW50KCJkZWJ1ZyIsZSwuLi50KX1sb2coZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJsb2ciKSYmdGhpcy5wcmludCgibG9nIixlLC4uLnQpfXdhcm4oZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJ3YXJuIikmJnRoaXMucHJpbnQoIndhcm4iLGUsLi4udCl9ZXJyb3IoZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJlcnJvciIpJiZ0aGlzLnByaW50KCJlcnJvciIsZSwuLi50KX1mYXRhbChlLC4uLnQpe3RoaXMuaXNMZXZlbEVuYWJsZWQoImZhdGFsIikmJnRoaXMucHJpbnQoImZhdGFsIixlLC4uLnQpfX1yLkNvbnNvbGVMb2dnZXI9bn0sMzUyMDAsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Mb2dnZXI9dm9pZCAwO2xldCBuPWUucig2NjgzKSxpPVsidmVyYm9zZSIsImRlYnVnIiwibG9nIiwid2FybiIsImVycm9yIiwiZmF0YWwiXSxvPW5ldyBuLkNvbnNvbGVMb2dnZXIoaSk7Y2xhc3MgYXtzdGF0aWMgaW5zdGFuY2VSZWY9bztzdGF0aWMgb3ZlcnJpZGVMb2dnZXI9ZT0+e3RoaXMuaW5zdGFuY2VSZWY9ZX07c3RhdGljIGVycm9yKGUsLi4udCl7dGhpcy5pbnN0YW5jZVJlZj8uZXJyb3IoZSwuLi50KX1zdGF0aWMgbG9nKGUsLi4udCl7dGhpcy5pbnN0YW5jZVJlZj8ubG9nKGUsLi4udCl9c3RhdGljIHdhcm4oZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy53YXJuKGUsLi4udCl9c3RhdGljIGRlYnVnKGUsLi4udCl7dGhpcy5pbnN0YW5jZVJlZj8uZGVidWc/LihlLC4uLnQpfXN0YXRpYyB2ZXJib3NlKGUsLi4udCl7dGhpcy5pbnN0YW5jZVJlZj8udmVyYm9zZT8uKGUsLi4udCl9c3RhdGljIGZhdGFsKGUsLi4udCl7dGhpcy5pbnN0YW5jZVJlZj8uZmF0YWw/LihlLC4uLnQpfX1yLkxvZ2dlcj1hfSw4MDM1MCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkxvZ2dlcj1yLkNvbnNvbGVMb2dnZXI9dm9pZCAwO3ZhciBuPWUucig2NjgzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQ29uc29sZUxvZ2dlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQ29uc29sZUxvZ2dlcn19KTt2YXIgaT1lLnIoMzUyMDApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJMb2dnZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkxvZ2dlcn19KX0sMTQ5MzQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5wcmludFR4T3V0Y29tZUxvZ3M9ci5wcmludFR4T3V0Y29tZUxvZ3NBbmRGYWlsdXJlcz12b2lkIDA7bGV0IG49ZS5yKDMzODkwKSxpPWUucig4MDM1MCk7ZnVuY3Rpb24gbyh7Y29udHJhY3RJZDplLGxvZ3M6dCxwcmVmaXg6cj0iIn0pe2ZvcihsZXQgbiBvZiB0KWkuTG9nZ2VyLmxvZyhgJHtyfUxvZyBbJHtlfV06ICR7bn1gKX1yLnByaW50VHhPdXRjb21lTG9nc0FuZEZhaWx1cmVzPWZ1bmN0aW9uKHtjb250cmFjdElkOmUsb3V0Y29tZTp0fSl7Zm9yKGxldCByIG9mW3QudHJhbnNhY3Rpb25fb3V0Y29tZSwuLi50LnJlY2VpcHRzX291dGNvbWVdLnJlZHVjZSgoZSx0KT0+e2xldCByPSJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmIm9iamVjdCI9PXR5cGVvZiB0Lm91dGNvbWUuc3RhdHVzLkZhaWx1cmU7cmV0dXJuIHQub3V0Y29tZS5sb2dzLmxlbmd0aHx8cj9lLmNvbmNhdCh7cmVjZWlwdElkczp0Lm91dGNvbWUucmVjZWlwdF9pZHMsbG9nczp0Lm91dGNvbWUubG9ncyxmYWlsdXJlOiJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmdm9pZCAwIT09dC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlPygwLG4ucGFyc2VScGNFcnJvcikodC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlKTpudWxsfSk6ZX0sW10pKWkuTG9nZ2VyLmxvZyhgUmVjZWlwdCR7ci5yZWNlaXB0SWRzLmxlbmd0aD4xPyJzIjoiIn06ICR7ci5yZWNlaXB0SWRzLmpvaW4oIiwgIil9YCksbyh7Y29udHJhY3RJZDplLGxvZ3M6ci5sb2dzLHByZWZpeDoiCSJ9KSxyLmZhaWx1cmUmJmkuTG9nZ2VyLndhcm4oYAlGYWlsdXJlIFske2V9XTogJHtyLmZhaWx1cmV9YCl9LHIucHJpbnRUeE91dGNvbWVMb2dzPW99LDU5OTA5LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5pKDM5NTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5nZXRUcmFuc2FjdGlvbkxhc3RSZXN1bHQ9dm9pZCAwLHIuZ2V0VHJhbnNhY3Rpb25MYXN0UmVzdWx0PWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZS5zdGF0dXMmJiJzdHJpbmciPT10eXBlb2YgZS5zdGF0dXMuU3VjY2Vzc1ZhbHVlKXtsZXQgdD1uLkJ1ZmZlci5mcm9tKGUuc3RhdHVzLlN1Y2Nlc3NWYWx1ZSwiYmFzZTY0IikudG9TdHJpbmcoKTt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fXJldHVybiBudWxsfX0sODE0NzIsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5zb3J0QmlnSW50QXNjPXZvaWQgMCxyLnNvcnRCaWdJbnRBc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0Py0xOisoZT50KX19LDY2MTk5LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLmRpZmZFcG9jaFZhbGlkYXRvcnM9ci5maW5kU2VhdFByaWNlPXZvaWQgMDtsZXQgaT1uKGUucig2MjM2MSkpLG89ZS5yKDgxNDcyKTtmdW5jdGlvbiBhKGUsdCl7bGV0IHI9ZS5tYXAoZT0+QmlnSW50KGUuc3Rha2UpKS5zb3J0KG8uc29ydEJpZ0ludEFzYyksbj1CaWdJbnQodCksaT1yLnJlZHVjZSgoZSx0KT0+ZSt0KTtpZihpPG4pdGhyb3cgRXJyb3IoIlN0YWtlcyBhcmUgYmVsb3cgc2VhdHMiKTtsZXQgYT0xbixzPWkrMW47Zm9yKDthIT09cy0xbjspe2xldCBlPShhK3MpLzJuLHQ9ITEsaT0wbjtmb3IobGV0IG89MDtvPHIubGVuZ3RoOysrbylpZigoaSs9cltvXS9lKT49bil7YT1lLHQ9ITA7YnJlYWt9dHx8KHM9ZSl9cmV0dXJuIGF9ZnVuY3Rpb24gcyhlLHQscil7aWYoMiE9ci5sZW5ndGgpdGhyb3cgRXJyb3IoIm1pbmltdW1TdGFrZVJhdGlvIHNob3VsZCBoYXZlIDIgZWxlbWVudHMiKTtsZXQgbj1lLm1hcChlPT5CaWdJbnQoZS5zdGFrZSkpLnNvcnQoby5zb3J0QmlnSW50QXNjKSxpPW4ucmVkdWNlKChlLHQpPT5lK3QpO3JldHVybiBlLmxlbmd0aDx0P2kqQmlnSW50KHJbMF0pL0JpZ0ludChyWzFdKTpuWzBdKzFufXIuZmluZFNlYXRQcmljZT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbiYmbjw0OT9hKGUsdCk6KHJ8fCgoMCxpLmRlZmF1bHQpKCJmaW5kU2VhdFByaWNlKHZhbGlkYXRvcnMsIG1heE51bWJlck9mU2VhdHMpIikoImB1c2UgYGZpbmRTZWF0UHJpY2UodmFsaWRhdG9ycywgbWF4TnVtYmVyT2ZTZWF0cywgbWluaW11bVN0YWtlUmF0aW8pYCBpbnN0ZWFkIikscj1bMSw2MjUwXSkscyhlLHQscikpfSxyLmRpZmZFcG9jaFZhbGlkYXRvcnM9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uZXcgTWFwO2UuZm9yRWFjaChlPT5yLnNldChlLmFjY291bnRfaWQsZSkpO2xldCBuPW5ldyBTZXQodC5tYXAoZT0+ZS5hY2NvdW50X2lkKSk7cmV0dXJue25ld1ZhbGlkYXRvcnM6dC5maWx0ZXIoZT0+IXIuaGFzKGUuYWNjb3VudF9pZCkpLHJlbW92ZWRWYWxpZGF0b3JzOmUuZmlsdGVyKGU9PiFuLmhhcyhlLmFjY291bnRfaWQpKSxjaGFuZ2VkVmFsaWRhdG9yczp0LmZpbHRlcihlPT5yLmhhcyhlLmFjY291bnRfaWQpJiZyLmdldChlLmFjY291bnRfaWQpLnN0YWtlIT1lLnN0YWtlKS5tYXAoZT0+KHtjdXJyZW50OnIuZ2V0KGUuYWNjb3VudF9pZCksbmV4dDplfSkpfX19LDg4NDM0LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7KCFpfHwoImdldCJpbiBpPyF0Ll9fZXNNb2R1bGU6aS53cml0YWJsZXx8aS5jb25maWd1cmFibGUpKSYmKGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixpKX06ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksZVtuXT10W3JdfSksaT1lLmUmJmUuZS5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpImRlZmF1bHQiPT09cnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscil8fG4odCxlLHIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaShlLnIoNDAxMTgpLHIpLGkoZS5yKDMzODkwKSxyKSxpKGUucig0NzM0NyksciksaShlLnIoMTQ5MzQpLHIpLGkoZS5yKDU5OTA5KSxyKSxpKGUucig2NjE5OSksciksaShlLnIoODAzNTApLHIpLGkoZS5yKDgxNDcyKSxyKX0sNjkyNzksKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Bc3NpZ25hYmxlPXZvaWQgMDtjbGFzcyBue2NvbnN0cnVjdG9yKGUpe09iamVjdC5rZXlzKGUpLm1hcCh0PT57dGhpc1t0XT1lW3RdfSl9fXIuQXNzaWduYWJsZT1ufSw2OTY0NywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkVudW09dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoMSE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aCl0aHJvdyBFcnJvcigiRW51bSBjYW4gb25seSB0YWtlIHNpbmdsZSB2YWx1ZSIpO09iamVjdC5rZXlzKGUpLm1hcCh0PT57dGhpc1t0XT1lW3RdfSl9fXIuRW51bT1ufSw3MTY2MSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkVycm9yQ29udGV4dD1yLlR5cGVkRXJyb3I9ci5Bcmd1bWVudFR5cGVFcnJvcj1yLlBvc2l0aW9uYWxBcmdzRXJyb3I9dm9pZCAwO2NsYXNzIG4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDb250cmFjdCBtZXRob2QgY2FsbHMgZXhwZWN0IG5hbWVkIGFyZ3VtZW50cyB3cmFwcGVkIGluIG9iamVjdCwgZS5nLiB7IGFyZ05hbWUxOiBhcmdWYWx1ZTEsIGFyZ05hbWUyOiBhcmdWYWx1ZTIgfSIpfX1yLlBvc2l0aW9uYWxBcmdzRXJyb3I9bjtjbGFzcyBpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKGBFeHBlY3RlZCAke3R9IGZvciAnJHtlfScgYXJndW1lbnQsIGJ1dCBnb3QgJyR7SlNPTi5zdHJpbmdpZnkocil9J2ApfX1yLkFyZ3VtZW50VHlwZUVycm9yPWk7Y2xhc3MgbyBleHRlbmRzIEVycm9ye3R5cGU7Y29udGV4dDtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSksdGhpcy50eXBlPXR8fCJVbnR5cGVkRXJyb3IiLHRoaXMuY29udGV4dD1yfX1yLlR5cGVkRXJyb3I9bztjbGFzcyBhe3RyYW5zYWN0aW9uSGFzaDtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zYWN0aW9uSGFzaD1lfX1yLkVycm9yQ29udGV4dD1hfSw1MjM0MiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLklkVHlwZT12b2lkIDAsZnVuY3Rpb24oZSl7ZS5UcmFuc2FjdGlvbj0idHJhbnNhY3Rpb24iLGUuUmVjZWlwdD0icmVjZWlwdCJ9KG58fChyLklkVHlwZT1uPXt9KSl9LDU4NzM3LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG4saTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljPXIuRXhlY3V0aW9uU3RhdHVzQmFzaWM9dm9pZCAwLGZ1bmN0aW9uKGUpe2UuVW5rbm93bj0iVW5rbm93biIsZS5QZW5kaW5nPSJQZW5kaW5nIixlLkZhaWx1cmU9IkZhaWx1cmUifShufHwoci5FeGVjdXRpb25TdGF0dXNCYXNpYz1uPXt9KSksZnVuY3Rpb24oZSl7ZS5Ob3RTdGFydGVkPSJOb3RTdGFydGVkIixlLlN0YXJ0ZWQ9IlN0YXJ0ZWQiLGUuRmFpbHVyZT0iRmFpbHVyZSJ9KGl8fChyLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWM9aT17fSkpfSw4MzQ2OSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWM9ci5FeGVjdXRpb25TdGF0dXNCYXNpYz1yLklkVHlwZT12b2lkIDA7dmFyIG49ZS5yKDUyMzQyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiSWRUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5JZFR5cGV9fSk7dmFyIGk9ZS5yKDU4NzM3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiRXhlY3V0aW9uU3RhdHVzQmFzaWMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJGaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5GaW5hbEV4ZWN1dGlvblN0YXR1c0Jhc2ljfX0pfSw3ODE5MCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49cik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOyghaXx8KCJnZXQiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKSkmJihpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4saSl9OmZ1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpLGVbbl09dFtyXX0pLGk9ZS5lJiZlLmUuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKSJkZWZhdWx0Ij09PXJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpfHxuKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGkoZS5yKDY5Mjc5KSxyKSxpKGUucig2OTY0NyksciksaShlLnIoNzE2NjEpLHIpLGkoZS5yKDgzNDY5KSxyKX0sMTYyNjYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5BY3Rpb249ci5TaWduZWREZWxlZ2F0ZT1yLkRlbGV0ZUFjY291bnQ9ci5EZWxldGVLZXk9ci5BZGRLZXk9ci5TdGFrZT1yLlRyYW5zZmVyPXIuRnVuY3Rpb25DYWxsPXIuRGVwbG95Q29udHJhY3Q9ci5DcmVhdGVBY2NvdW50PXIuQWNjZXNzS2V5PXIuQWNjZXNzS2V5UGVybWlzc2lvbj1yLkZ1bGxBY2Nlc3NQZXJtaXNzaW9uPXIuRnVuY3Rpb25DYWxsUGVybWlzc2lvbj12b2lkIDA7bGV0IG49ZS5yKDc4MTkwKTtjbGFzcyBpe2FsbG93YW5jZTtyZWNlaXZlcklkO21ldGhvZE5hbWVzO2NvbnN0cnVjdG9yKHthbGxvd2FuY2U6ZSxyZWNlaXZlcklkOnQsbWV0aG9kTmFtZXM6cn0pe3RoaXMuYWxsb3dhbmNlPWUsdGhpcy5yZWNlaXZlcklkPXQsdGhpcy5tZXRob2ROYW1lcz1yfX1yLkZ1bmN0aW9uQ2FsbFBlcm1pc3Npb249aTtjbGFzcyBve31yLkZ1bGxBY2Nlc3NQZXJtaXNzaW9uPW87Y2xhc3MgYSBleHRlbmRzIG4uRW51bXtlbnVtO2Z1bmN0aW9uQ2FsbDtmdWxsQWNjZXNzO2NvbnN0cnVjdG9yKGUpe2Zvcihjb25zdFt0LHJdb2Yoc3VwZXIoZSksT2JqZWN0LmVudHJpZXMoZXx8e30pKSl0aGlzW3RdPXIsdGhpcy5lbnVtPXR9fXIuQWNjZXNzS2V5UGVybWlzc2lvbj1hO2NsYXNzIHN7bm9uY2U7cGVybWlzc2lvbjtjb25zdHJ1Y3Rvcih7bm9uY2U6ZSxwZXJtaXNzaW9uOnR9KXt0aGlzLm5vbmNlPWUsdGhpcy5wZXJtaXNzaW9uPXR9fXIuQWNjZXNzS2V5PXM7Y2xhc3MgY3t9ci5DcmVhdGVBY2NvdW50PWM7Y2xhc3MgdXtjb2RlO2NvbnN0cnVjdG9yKHtjb2RlOmV9KXt0aGlzLmNvZGU9ZX19ci5EZXBsb3lDb250cmFjdD11O2NsYXNzIGZ7bWV0aG9kTmFtZTthcmdzO2dhcztkZXBvc2l0O2NvbnN0cnVjdG9yKHttZXRob2ROYW1lOmUsYXJnczp0LGdhczpyLGRlcG9zaXQ6bn0pe3RoaXMubWV0aG9kTmFtZT1lLHRoaXMuYXJncz10LHRoaXMuZ2FzPXIsdGhpcy5kZXBvc2l0PW59fXIuRnVuY3Rpb25DYWxsPWY7Y2xhc3MgZHtkZXBvc2l0O2NvbnN0cnVjdG9yKHtkZXBvc2l0OmV9KXt0aGlzLmRlcG9zaXQ9ZX19ci5UcmFuc2Zlcj1kO2NsYXNzIGx7c3Rha2U7cHVibGljS2V5O2NvbnN0cnVjdG9yKHtzdGFrZTplLHB1YmxpY0tleTp0fSl7dGhpcy5zdGFrZT1lLHRoaXMucHVibGljS2V5PXR9fXIuU3Rha2U9bDtjbGFzcyBoe3B1YmxpY0tleTthY2Nlc3NLZXk7Y29uc3RydWN0b3Ioe3B1YmxpY0tleTplLGFjY2Vzc0tleTp0fSl7dGhpcy5wdWJsaWNLZXk9ZSx0aGlzLmFjY2Vzc0tleT10fX1yLkFkZEtleT1oO2NsYXNzIHB7cHVibGljS2V5O2NvbnN0cnVjdG9yKHtwdWJsaWNLZXk6ZX0pe3RoaXMucHVibGljS2V5PWV9fXIuRGVsZXRlS2V5PXA7Y2xhc3MgYntiZW5lZmljaWFyeUlkO2NvbnN0cnVjdG9yKHtiZW5lZmljaWFyeUlkOmV9KXt0aGlzLmJlbmVmaWNpYXJ5SWQ9ZX19ci5EZWxldGVBY2NvdW50PWI7Y2xhc3MgbXtkZWxlZ2F0ZUFjdGlvbjtzaWduYXR1cmU7Y29uc3RydWN0b3Ioe2RlbGVnYXRlQWN0aW9uOmUsc2lnbmF0dXJlOnR9KXt0aGlzLmRlbGVnYXRlQWN0aW9uPWUsdGhpcy5zaWduYXR1cmU9dH19ci5TaWduZWREZWxlZ2F0ZT1tO2NsYXNzIHkgZXh0ZW5kcyBuLkVudW17ZW51bTtjcmVhdGVBY2NvdW50O2RlcGxveUNvbnRyYWN0O2Z1bmN0aW9uQ2FsbDt0cmFuc2ZlcjtzdGFrZTthZGRLZXk7ZGVsZXRlS2V5O2RlbGV0ZUFjY291bnQ7c2lnbmVkRGVsZWdhdGU7Y29uc3RydWN0b3IoZSl7Zm9yKGNvbnN0W3Qscl1vZihzdXBlcihlKSxPYmplY3QuZW50cmllcyhlfHx7fSkpKXRoaXNbdF09cix0aGlzLmVudW09dH19ci5BY3Rpb249eX0sOTkyOTcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmkoMzk1ODcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLmFjdGlvbkNyZWF0b3JzPXIuc3RyaW5naWZ5SnNvbk9yQnl0ZXM9dm9pZCAwO2xldCBpPWUucigxNjI2Nik7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgaS5BY2Nlc3NLZXkoe25vbmNlOjBuLHBlcm1pc3Npb246bmV3IGkuQWNjZXNzS2V5UGVybWlzc2lvbih7ZnVsbEFjY2VzczpuZXcgaS5GdWxsQWNjZXNzUGVybWlzc2lvbn0pfSl9ZnVuY3Rpb24gYShlLHQscil7cmV0dXJuIG5ldyBpLkFjY2Vzc0tleSh7bm9uY2U6MG4scGVybWlzc2lvbjpuZXcgaS5BY2Nlc3NLZXlQZXJtaXNzaW9uKHtmdW5jdGlvbkNhbGw6bmV3IGkuRnVuY3Rpb25DYWxsUGVybWlzc2lvbih7cmVjZWl2ZXJJZDplLGFsbG93YW5jZTpyLG1ldGhvZE5hbWVzOnR9KX0pfSl9ZnVuY3Rpb24gcygpe3JldHVybiBuZXcgaS5BY3Rpb24oe2NyZWF0ZUFjY291bnQ6bmV3IGkuQ3JlYXRlQWNjb3VudH0pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG5ldyBpLkFjdGlvbih7ZGVwbG95Q29udHJhY3Q6bmV3IGkuRGVwbG95Q29udHJhY3Qoe2NvZGU6ZX0pfSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdm9pZCAwIT09ZS5ieXRlTGVuZ3RoJiZlLmJ5dGVMZW5ndGg9PT1lLmxlbmd0aD9lOm4uQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZSkpfXIuc3RyaW5naWZ5SnNvbk9yQnl0ZXM9dSxyLmFjdGlvbkNyZWF0b3JzPXthZGRLZXk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGkuQWN0aW9uKHthZGRLZXk6bmV3IGkuQWRkS2V5KHtwdWJsaWNLZXk6ZSxhY2Nlc3NLZXk6dH0pfSl9LGNyZWF0ZUFjY291bnQ6cyxkZWxldGVBY2NvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaS5BY3Rpb24oe2RlbGV0ZUFjY291bnQ6bmV3IGkuRGVsZXRlQWNjb3VudCh7YmVuZWZpY2lhcnlJZDplfSl9KX0sZGVsZXRlS2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaS5BY3Rpb24oe2RlbGV0ZUtleTpuZXcgaS5EZWxldGVLZXkoe3B1YmxpY0tleTplfSl9KX0sZGVwbG95Q29udHJhY3Q6YyxmdWxsQWNjZXNzS2V5Om8sZnVuY3Rpb25DYWxsOmZ1bmN0aW9uKGUsdCxyPTBuLG49MG4sbz11LGE9ITEpe3JldHVybiBuZXcgaS5BY3Rpb24oYT97ZnVuY3Rpb25DYWxsOm5ldyBpLkZ1bmN0aW9uQ2FsbCh7bWV0aG9kTmFtZTplLGFyZ3M6dCxnYXM6cixkZXBvc2l0Om59KX06e2Z1bmN0aW9uQ2FsbDpuZXcgaS5GdW5jdGlvbkNhbGwoe21ldGhvZE5hbWU6ZSxhcmdzOm8odCksZ2FzOnIsZGVwb3NpdDpufSl9KX0sZnVuY3Rpb25DYWxsQWNjZXNzS2V5OmEsc2lnbmVkRGVsZWdhdGU6ZnVuY3Rpb24oe2RlbGVnYXRlQWN0aW9uOmUsc2lnbmF0dXJlOnR9KXtyZXR1cm4gbmV3IGkuQWN0aW9uKHtzaWduZWREZWxlZ2F0ZTpuZXcgaS5TaWduZWREZWxlZ2F0ZSh7ZGVsZWdhdGVBY3Rpb246ZSxzaWduYXR1cmU6dH0pfSl9LHN0YWtlOmZ1bmN0aW9uKGU9MG4sdCl7cmV0dXJuIG5ldyBpLkFjdGlvbih7c3Rha2U6bmV3IGkuU3Rha2Uoe3N0YWtlOmUscHVibGljS2V5OnR9KX0pfSx0cmFuc2ZlcjpmdW5jdGlvbihlPTBuKXtyZXR1cm4gbmV3IGkuQWN0aW9uKHt0cmFuc2ZlcjpuZXcgaS5UcmFuc2Zlcih7ZGVwb3NpdDplfSl9KX19fSw1MjI1NSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuX19lc01vZHVsZT0hMCxyLmludGVnZXJzPXZvaWQgMCxyLmludGVnZXJzPVsidTgiLCJ1MTYiLCJ1MzIiLCJ1NjQiLCJ1MTI4IiwiaTgiLCJpMTYiLCJpMzIiLCJpNjQiLCJpMTI4IiwiZjMyIiwiZjY0Il19LDY2ODI3LChlLHQscik9PnsidXNlIHN0cmljdCI7ci5fX2VzTW9kdWxlPSEwLHIuRGVjb2RlQnVmZmVyPXIuRW5jb2RlQnVmZmVyPXZvaWQgMCxyLkVuY29kZUJ1ZmZlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9mZnNldD0wLHRoaXMuYnVmZmVyX3NpemU9MjU2LHRoaXMuYnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ1ZmZlcl9zaXplKSx0aGlzLnZpZXc9bmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyKX1yZXR1cm4gZS5wcm90b3R5cGUucmVzaXplX2lmX25lY2Vzc2FyeT1mdW5jdGlvbihlKXtpZih0aGlzLmJ1ZmZlcl9zaXplLXRoaXMub2Zmc2V0PGUpe3RoaXMuYnVmZmVyX3NpemU9TWF0aC5tYXgoMip0aGlzLmJ1ZmZlcl9zaXplLHRoaXMuYnVmZmVyX3NpemUrZSk7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKHRoaXMuYnVmZmVyX3NpemUpO25ldyBVaW50OEFycmF5KHQpLnNldChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcikpLHRoaXMuYnVmZmVyPXQsdGhpcy52aWV3PW5ldyBEYXRhVmlldyh0KX19LGUucHJvdG90eXBlLmdldF91c2VkX2J1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcikuc2xpY2UoMCx0aGlzLm9mZnNldCl9LGUucHJvdG90eXBlLnN0b3JlX3ZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5zdWJzdHJpbmcoMSksbj1wYXJzZUludChyKS84O3RoaXMucmVzaXplX2lmX25lY2Vzc2FyeShuKTt2YXIgaT0iZiI9PT10WzBdPyJzZXRGbG9hdCIuY29uY2F0KHIpOiJpIj09PXRbMF0/InNldEludCIuY29uY2F0KHIpOiJzZXRVaW50Ii5jb25jYXQocik7dGhpcy52aWV3W2ldKHRoaXMub2Zmc2V0LGUsITApLHRoaXMub2Zmc2V0Kz1ufSxlLnByb3RvdHlwZS5zdG9yZV9ieXRlcz1mdW5jdGlvbihlKXt0aGlzLnJlc2l6ZV9pZl9uZWNlc3NhcnkoZS5sZW5ndGgpLG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyKS5zZXQobmV3IFVpbnQ4QXJyYXkoZSksdGhpcy5vZmZzZXQpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aH0sZX0oKSxyLkRlY29kZUJ1ZmZlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vZmZzZXQ9MCx0aGlzLmJ1ZmZlcl9zaXplPWUubGVuZ3RoLHRoaXMuYnVmZmVyPW5ldyBBcnJheUJ1ZmZlcihlLmxlbmd0aCksbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIpLnNldChlKSx0aGlzLnZpZXc9bmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyKX1yZXR1cm4gZS5wcm90b3R5cGUuYXNzZXJ0X2Vub3VnaF9idWZmZXI9ZnVuY3Rpb24oZSl7aWYodGhpcy5vZmZzZXQrZT50aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IEVycm9yKCJFcnJvciBpbiBzY2hlbWEsIHRoZSBidWZmZXIgaXMgc21hbGxlciB0aGFuIGV4cGVjdGVkIil9LGUucHJvdG90eXBlLmNvbnN1bWVfdmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdWJzdHJpbmcoMSkscj1wYXJzZUludCh0KS84O3RoaXMuYXNzZXJ0X2Vub3VnaF9idWZmZXIocik7dmFyIG49ImYiPT09ZVswXT8iZ2V0RmxvYXQiLmNvbmNhdCh0KToiaSI9PT1lWzBdPyJnZXRJbnQiLmNvbmNhdCh0KToiZ2V0VWludCIuY29uY2F0KHQpLGk9dGhpcy52aWV3W25dKHRoaXMub2Zmc2V0LCEwKTtyZXR1cm4gdGhpcy5vZmZzZXQrPXIsaX0sZS5wcm90b3R5cGUuY29uc3VtZV9ieXRlcz1mdW5jdGlvbihlKXt0aGlzLmFzc2VydF9lbm91Z2hfYnVmZmVyKGUpO3ZhciB0PXRoaXMuYnVmZmVyLnNsaWNlKHRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0K2UpO3JldHVybiB0aGlzLm9mZnNldCs9ZSx0fSxlfSgpfSw4Mzg5NywoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LHIpe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KHtfX3Byb3RvX186W119KWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkodCxyKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHImJm51bGwhPT1yKXRocm93IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxyKSx0LnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO3IuX19lc01vZHVsZT0hMCxyLnZhbGlkYXRlX3NjaGVtYT1yLkVycm9yU2NoZW1hPXIuZXhwZWN0X2VudW09ci5leHBlY3Rfc2FtZV9zaXplPXIuZXhwZWN0X2JpZ2ludD1yLmV4cGVjdF90eXBlPXIuaXNBcnJheUxpa2U9dm9pZCAwO3ZhciBpPWUucig1MjI1NSk7ci5pc0FycmF5TGlrZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8ISFlJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJsZW5ndGgiaW4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCYmKDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MCYmZS5sZW5ndGgtMSBpbiBlKX0sci5leHBlY3RfdHlwZT1mdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPT10KXRocm93IEVycm9yKCJFeHBlY3RlZCAiLmNvbmNhdCh0LCIgbm90ICIpLmNvbmNhdCh0eXBlb2YgZSwiKCIpLmNvbmNhdChlLCIpIGF0ICIpLmNvbmNhdChyLmpvaW4oIi4iKSkpfSxyLmV4cGVjdF9iaWdpbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bIm51bWJlciIsInN0cmluZyIsImJpZ2ludCIsImJvb2xlYW4iXS5pbmNsdWRlcyh0eXBlb2YgZSksbj0ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiYidG9TdHJpbmciaW4gZTtpZighciYmIW4pdGhyb3cgRXJyb3IoIkV4cGVjdGVkIGJpZ2ludCwgbnVtYmVyLCBib29sZWFuIG9yIHN0cmluZyBub3QgIi5jb25jYXQodHlwZW9mIGUsIigiKS5jb25jYXQoZSwiKSBhdCAiKS5jb25jYXQodC5qb2luKCIuIikpKX0sci5leHBlY3Rfc2FtZV9zaXplPWZ1bmN0aW9uKGUsdCxyKXtpZihlIT09dCl0aHJvdyBFcnJvcigiQXJyYXkgbGVuZ3RoICIuY29uY2F0KGUsIiBkb2VzIG5vdCBtYXRjaCBzY2hlbWEgbGVuZ3RoICIpLmNvbmNhdCh0LCIgYXQgIikuY29uY2F0KHIuam9pbigiLiIpKSl9LHIuZXhwZWN0X2VudW09ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXRocm93IEVycm9yKCJFeHBlY3RlZCBvYmplY3Qgbm90ICIuY29uY2F0KHR5cGVvZiBlLCIoIikuY29uY2F0KGUsIikgYXQgIikuY29uY2F0KHQuam9pbigiLiIpKSl9O3ZhciBvPWkuaW50ZWdlcnMuY29uY2F0KFsiYm9vbCIsInN0cmluZyJdKSxhPVsib3B0aW9uIiwiZW51bSIsImFycmF5Iiwic2V0IiwibWFwIiwic3RydWN0Il0scz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7dmFyIG49IkludmFsaWQgc2NoZW1hOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSwiIGV4cGVjdGVkICIpLmNvbmNhdChyKTtyZXR1cm4gZS5jYWxsKHRoaXMsbil8fHRoaXN9cmV0dXJuIG4odCxlKSx0fShFcnJvcik7ZnVuY3Rpb24gYyhlKXtpZighKCJzdHJpbmciPT10eXBlb2YgZSYmby5pbmNsdWRlcyhlKSkpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoMT09PXQubGVuZ3RoJiZhLmluY2x1ZGVzKHRbMF0pKXt2YXIgcj10WzBdO2lmKCJvcHRpb24iPT09cilyZXR1cm4gYyhlW3JdKTtpZigiZW51bSI9PT1yKXJldHVybiB1KGVbcl0pO2lmKCJhcnJheSI9PT1yKXJldHVybiBmKGVbcl0pO2lmKCJzZXQiPT09cilyZXR1cm4gYyhlW3JdKTtpZigibWFwIj09PXIpcmV0dXJuIGQoZVtyXSk7aWYoInN0cnVjdCI9PT1yKXJldHVybiBsKGVbcl0pfX10aHJvdyBuZXcgcyhlLGEuam9pbigiLCAiKSsiIG9yICIrby5qb2luKCIsICIpKX19ZnVuY3Rpb24gdShlKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgcyhlLCJBcnJheSIpO2Zvcih2YXIgdD0wLHI9ZTt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtpZigib2JqZWN0IiE9dHlwZW9mIG58fCEoInN0cnVjdCJpbiBuKSl0aHJvdyBFcnJvcignTWlzc2luZyAic3RydWN0IiBrZXkgaW4gZW51bSBzY2hlbWEnKTtpZigib2JqZWN0IiE9dHlwZW9mIG4uc3RydWN0fHwxIT09T2JqZWN0LmtleXMobi5zdHJ1Y3QpLmxlbmd0aCl0aHJvdyBFcnJvcignVGhlICJzdHJ1Y3QiIGluIGVhY2ggZW51bSBtdXN0IGhhdmUgYSBzaW5nbGUga2V5Jyk7Yyh7c3RydWN0Om4uc3RydWN0fSl9fWZ1bmN0aW9uIGYoZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBzKGUsInsgdHlwZSwgbGVuPyB9Iik7aWYoZS5sZW4mJiJudW1iZXIiIT10eXBlb2YgZS5sZW4pdGhyb3cgRXJyb3IoIkludmFsaWQgc2NoZW1hOiAiLmNvbmNhdChlKSk7aWYoInR5cGUiaW4gZSlyZXR1cm4gYyhlLnR5cGUpO3Rocm93IG5ldyBzKGUsInsgdHlwZSwgbGVuPyB9Iil9ZnVuY3Rpb24gZChlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJiJrZXkiaW4gZSYmInZhbHVlImluIGUpYyhlLmtleSksYyhlLnZhbHVlKTtlbHNlIHRocm93IG5ldyBzKGUsInsga2V5LCB2YWx1ZSB9Iil9ZnVuY3Rpb24gbChlKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IHMoZSwib2JqZWN0Iik7Zm9yKHZhciB0IGluIGUpYyhlW3RdKX1yLkVycm9yU2NoZW1hPXMsci52YWxpZGF0ZV9zY2hlbWE9Y30sMjM0OTUsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTsoIWl8fCgiZ2V0ImluIGk/IXQuX19lc01vZHVsZTppLndyaXRhYmxlfHxpLmNvbmZpZ3VyYWJsZSkpJiYoaT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGkpfTpmdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKSxlW25dPXRbcl19KSxpPWUuZSYmZS5lLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksbz1lLmUmJmUuZS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgciBpbiBlKSJkZWZhdWx0IiE9PXImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZuKHQsZSxyKTtyZXR1cm4gaSh0LGUpLHR9O3IuX19lc01vZHVsZT0hMCxyLkJvcnNoU2VyaWFsaXplcj12b2lkIDA7dmFyIGE9ZS5yKDUyMjU1KSxzPWUucig2NjgyNyksYz1vKGUucig4Mzg5NykpO3IuQm9yc2hTZXJpYWxpemVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVuY29kZWQ9bmV3IHMuRW5jb2RlQnVmZmVyLHRoaXMuZmllbGRQYXRoPVsidmFsdWUiXSx0aGlzLmNoZWNrVHlwZXM9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5jb2RlX3ZhbHVlKGUsdCksdGhpcy5lbmNvZGVkLmdldF91c2VkX2J1ZmZlcigpfSxlLnByb3RvdHlwZS5lbmNvZGVfdmFsdWU9ZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKGEuaW50ZWdlcnMuaW5jbHVkZXModCkpcmV0dXJuIHRoaXMuZW5jb2RlX2ludGVnZXIoZSx0KTtpZigic3RyaW5nIj09PXQpcmV0dXJuIHRoaXMuZW5jb2RlX3N0cmluZyhlKTtpZigiYm9vbCI9PT10KXJldHVybiB0aGlzLmVuY29kZV9ib29sZWFuKGUpfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9wdGlvbiJpbiB0KXJldHVybiB0aGlzLmVuY29kZV9vcHRpb24oZSx0KTtpZigiZW51bSJpbiB0KXJldHVybiB0aGlzLmVuY29kZV9lbnVtKGUsdCk7aWYoImFycmF5ImluIHQpcmV0dXJuIHRoaXMuZW5jb2RlX2FycmF5KGUsdCk7aWYoInNldCJpbiB0KXJldHVybiB0aGlzLmVuY29kZV9zZXQoZSx0KTtpZigibWFwImluIHQpcmV0dXJuIHRoaXMuZW5jb2RlX21hcChlLHQpO2lmKCJzdHJ1Y3QiaW4gdClyZXR1cm4gdGhpcy5lbmNvZGVfc3RydWN0KGUsdCl9fSxlLnByb3RvdHlwZS5lbmNvZGVfaW50ZWdlcj1mdW5jdGlvbihlLHQpe3ZhciByPXBhcnNlSW50KHQuc3Vic3RyaW5nKDEpKTtyPD0zMnx8ImY2NCI9PXQ/KHRoaXMuY2hlY2tUeXBlcyYmYy5leHBlY3RfdHlwZShlLCJudW1iZXIiLHRoaXMuZmllbGRQYXRoKSx0aGlzLmVuY29kZWQuc3RvcmVfdmFsdWUoZSx0KSk6KHRoaXMuY2hlY2tUeXBlcyYmYy5leHBlY3RfYmlnaW50KGUsdGhpcy5maWVsZFBhdGgpLHRoaXMuZW5jb2RlX2JpZ2ludChCaWdJbnQoZSkscikpfSxlLnByb3RvdHlwZS5lbmNvZGVfYmlnaW50PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQvOCxuPW5ldyBVaW50OEFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09TnVtYmVyKGUmQmlnSW50KDI1NSkpLGU+Pj1CaWdJbnQoOCk7dGhpcy5lbmNvZGVkLnN0b3JlX2J5dGVzKG5ldyBVaW50OEFycmF5KG4pKX0sZS5wcm90b3R5cGUuZW5jb2RlX3N0cmluZz1mdW5jdGlvbihlKXt0aGlzLmNoZWNrVHlwZXMmJmMuZXhwZWN0X3R5cGUoZSwic3RyaW5nIix0aGlzLmZpZWxkUGF0aCk7dmFyIHQ9ZTt0aGlzLmVuY29kZWQuc3RvcmVfdmFsdWUodC5sZW5ndGgsInUzMiIpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuZW5jb2RlZC5zdG9yZV92YWx1ZSh0LmNoYXJDb2RlQXQociksInU4Iil9LGUucHJvdG90eXBlLmVuY29kZV9ib29sZWFuPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tUeXBlcyYmYy5leHBlY3RfdHlwZShlLCJib29sZWFuIix0aGlzLmZpZWxkUGF0aCksdGhpcy5lbmNvZGVkLnN0b3JlX3ZhbHVlKCshIWUsInU4Iil9LGUucHJvdG90eXBlLmVuY29kZV9vcHRpb249ZnVuY3Rpb24oZSx0KXtudWxsPT1lP3RoaXMuZW5jb2RlZC5zdG9yZV92YWx1ZSgwLCJ1OCIpOih0aGlzLmVuY29kZWQuc3RvcmVfdmFsdWUoMSwidTgiKSx0aGlzLmVuY29kZV92YWx1ZShlLHQub3B0aW9uKSl9LGUucHJvdG90eXBlLmVuY29kZV9lbnVtPWZ1bmN0aW9uKGUsdCl7dGhpcy5jaGVja1R5cGVzJiZjLmV4cGVjdF9lbnVtKGUsdGhpcy5maWVsZFBhdGgpO2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKVswXSxuPTA7bjx0LmVudW0ubGVuZ3RoO24rKyl7dmFyIGk9dC5lbnVtW25dO2lmKHI9PT1PYmplY3Qua2V5cyhpLnN0cnVjdClbMF0pcmV0dXJuIHRoaXMuZW5jb2RlZC5zdG9yZV92YWx1ZShuLCJ1OCIpLHRoaXMuZW5jb2RlX3N0cnVjdChlLGkpfXRocm93IEVycm9yKCJFbnVtIGtleSAoIi5jb25jYXQociwiKSBub3QgZm91bmQgaW4gZW51bSBzY2hlbWE6ICIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSwiIGF0ICIpLmNvbmNhdCh0aGlzLmZpZWxkUGF0aC5qb2luKCIuIikpKX0sZS5wcm90b3R5cGUuZW5jb2RlX2FycmF5PWZ1bmN0aW9uKGUsdCl7aWYoYy5pc0FycmF5TGlrZShlKSlyZXR1cm4gdGhpcy5lbmNvZGVfYXJyYXlsaWtlKGUsdCk7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiB0aGlzLmVuY29kZV9idWZmZXIoZSx0KTt0aHJvdyBFcnJvcigiRXhwZWN0ZWQgQXJyYXktbGlrZSBub3QgIi5jb25jYXQodHlwZW9mIGUsIigiKS5jb25jYXQoZSwiKSBhdCAiKS5jb25jYXQodGhpcy5maWVsZFBhdGguam9pbigiLiIpKSl9LGUucHJvdG90eXBlLmVuY29kZV9hcnJheWxpa2U9ZnVuY3Rpb24oZSx0KXt0LmFycmF5Lmxlbj9jLmV4cGVjdF9zYW1lX3NpemUoZS5sZW5ndGgsdC5hcnJheS5sZW4sdGhpcy5maWVsZFBhdGgpOnRoaXMuZW5jb2RlZC5zdG9yZV92YWx1ZShlLmxlbmd0aCwidTMyIik7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy5lbmNvZGVfdmFsdWUoZVtyXSx0LmFycmF5LnR5cGUpfSxlLnByb3RvdHlwZS5lbmNvZGVfYnVmZmVyPWZ1bmN0aW9uKGUsdCl7dC5hcnJheS5sZW4/Yy5leHBlY3Rfc2FtZV9zaXplKGUuYnl0ZUxlbmd0aCx0LmFycmF5Lmxlbix0aGlzLmZpZWxkUGF0aCk6dGhpcy5lbmNvZGVkLnN0b3JlX3ZhbHVlKGUuYnl0ZUxlbmd0aCwidTMyIiksdGhpcy5lbmNvZGVkLnN0b3JlX2J5dGVzKG5ldyBVaW50OEFycmF5KGUpKX0sZS5wcm90b3R5cGUuZW5jb2RlX3NldD1mdW5jdGlvbihlLHQpe3RoaXMuY2hlY2tUeXBlcyYmYy5leHBlY3RfdHlwZShlLCJvYmplY3QiLHRoaXMuZmllbGRQYXRoKTt2YXIgcj1lIGluc3RhbmNlb2YgU2V0P0FycmF5LmZyb20oZS52YWx1ZXMoKSk6T2JqZWN0LnZhbHVlcyhlKTt0aGlzLmVuY29kZWQuc3RvcmVfdmFsdWUoci5sZW5ndGgsInUzMiIpO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rKyl7dmFyIG89aVtuXTt0aGlzLmVuY29kZV92YWx1ZShvLHQuc2V0KX19LGUucHJvdG90eXBlLmVuY29kZV9tYXA9ZnVuY3Rpb24oZSx0KXt0aGlzLmNoZWNrVHlwZXMmJmMuZXhwZWN0X3R5cGUoZSwib2JqZWN0Iix0aGlzLmZpZWxkUGF0aCk7dmFyIHI9ZSBpbnN0YW5jZW9mIE1hcCxuPXI/QXJyYXkuZnJvbShlLmtleXMoKSk6T2JqZWN0LmtleXMoZSk7dGhpcy5lbmNvZGVkLnN0b3JlX3ZhbHVlKG4ubGVuZ3RoLCJ1MzIiKTtmb3IodmFyIGk9MCxvPW47aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07dGhpcy5lbmNvZGVfdmFsdWUoYSx0Lm1hcC5rZXkpLHRoaXMuZW5jb2RlX3ZhbHVlKHI/ZS5nZXQoYSk6ZVthXSx0Lm1hcC52YWx1ZSl9fSxlLnByb3RvdHlwZS5lbmNvZGVfc3RydWN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5jaGVja1R5cGVzJiZjLmV4cGVjdF90eXBlKGUsIm9iamVjdCIsdGhpcy5maWVsZFBhdGgpO2Zvcih2YXIgcj0wLG49T2JqZWN0LmtleXModC5zdHJ1Y3QpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO3RoaXMuZmllbGRQYXRoLnB1c2goaSksdGhpcy5lbmNvZGVfdmFsdWUoZVtpXSx0LnN0cnVjdFtpXSksdGhpcy5maWVsZFBhdGgucG9wKCl9fSxlfSgpfSw5MDI0MSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3IuX19lc01vZHVsZT0hMCxyLkJvcnNoRGVzZXJpYWxpemVyPXZvaWQgMDt2YXIgbj1lLnIoNTIyNTUpLGk9ZS5yKDY2ODI3KTtyLkJvcnNoRGVzZXJpYWxpemVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmJ1ZmZlcj1uZXcgaS5EZWNvZGVCdWZmZXIoZSl9cmV0dXJuIGUucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kZWNvZGVfdmFsdWUoZSl9LGUucHJvdG90eXBlLmRlY29kZV92YWx1ZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKG4uaW50ZWdlcnMuaW5jbHVkZXMoZSkpcmV0dXJuIHRoaXMuZGVjb2RlX2ludGVnZXIoZSk7aWYoInN0cmluZyI9PT1lKXJldHVybiB0aGlzLmRlY29kZV9zdHJpbmcoKTtpZigiYm9vbCI9PT1lKXJldHVybiB0aGlzLmRlY29kZV9ib29sZWFuKCl9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZigib3B0aW9uImluIGUpcmV0dXJuIHRoaXMuZGVjb2RlX29wdGlvbihlKTtpZigiZW51bSJpbiBlKXJldHVybiB0aGlzLmRlY29kZV9lbnVtKGUpO2lmKCJhcnJheSJpbiBlKXJldHVybiB0aGlzLmRlY29kZV9hcnJheShlKTtpZigic2V0ImluIGUpcmV0dXJuIHRoaXMuZGVjb2RlX3NldChlKTtpZigibWFwImluIGUpcmV0dXJuIHRoaXMuZGVjb2RlX21hcChlKTtpZigic3RydWN0ImluIGUpcmV0dXJuIHRoaXMuZGVjb2RlX3N0cnVjdChlKX10aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIi5jb25jYXQoZSkpfSxlLnByb3RvdHlwZS5kZWNvZGVfaW50ZWdlcj1mdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLnN1YnN0cmluZygxKSk7cmV0dXJuIHQ8PTMyfHwiZjY0Ij09ZT90aGlzLmJ1ZmZlci5jb25zdW1lX3ZhbHVlKGUpOnRoaXMuZGVjb2RlX2JpZ2ludCh0LGUuc3RhcnRzV2l0aCgiaSIpKX0sZS5wcm90b3R5cGUuZGVjb2RlX2JpZ2ludD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgcj1lLzgsbj1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5jb25zdW1lX2J5dGVzKHIpKSxpPW4ucmVkdWNlUmlnaHQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9LCIiKTtyZXR1cm4gdCYmbltyLTFdP0JpZ0ludC5hc0ludE4oZSxCaWdJbnQoIjB4Ii5jb25jYXQoaSkpKTpCaWdJbnQoIjB4Ii5jb25jYXQoaSkpfSxlLnByb3RvdHlwZS5kZWNvZGVfc3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kZWNvZGVfaW50ZWdlcigidTMyIiksdD1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5jb25zdW1lX2J5dGVzKGUpKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfSxlLnByb3RvdHlwZS5kZWNvZGVfYm9vbGVhbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5jb25zdW1lX3ZhbHVlKCJ1OCIpPjB9LGUucHJvdG90eXBlLmRlY29kZV9vcHRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXIuY29uc3VtZV92YWx1ZSgidTgiKTtpZigxPT09dClyZXR1cm4gdGhpcy5kZWNvZGVfdmFsdWUoZS5vcHRpb24pO2lmKDAhPT10KXRocm93IEVycm9yKCJJbnZhbGlkIG9wdGlvbiAiLmNvbmNhdCh0KSk7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmRlY29kZV9lbnVtPWZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5idWZmZXIuY29uc3VtZV92YWx1ZSgidTgiKTtpZihyPmUuZW51bS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVudW0gb3B0aW9uICIuY29uY2F0KHIsIiBpcyBub3QgYXZhaWxhYmxlIikpO3ZhciBuPWUuZW51bVtyXS5zdHJ1Y3QsaT1PYmplY3Qua2V5cyhuKVswXTtyZXR1cm4odD17fSlbaV09dGhpcy5kZWNvZGVfdmFsdWUobltpXSksdH0sZS5wcm90b3R5cGUuZGVjb2RlX2FycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUuYXJyYXkubGVuP2UuYXJyYXkubGVuOnRoaXMuZGVjb2RlX2ludGVnZXIoInUzMiIpLG49MDtuPHI7KytuKXQucHVzaCh0aGlzLmRlY29kZV92YWx1ZShlLmFycmF5LnR5cGUpKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuZGVjb2RlX3NldD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5kZWNvZGVfaW50ZWdlcigidTMyIikscj1uZXcgU2V0LG49MDtuPHQ7KytuKXIuYWRkKHRoaXMuZGVjb2RlX3ZhbHVlKGUuc2V0KSk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLmRlY29kZV9tYXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuZGVjb2RlX2ludGVnZXIoInUzMiIpLHI9bmV3IE1hcCxuPTA7bjx0Oysrbil7dmFyIGk9dGhpcy5kZWNvZGVfdmFsdWUoZS5tYXAua2V5KSxvPXRoaXMuZGVjb2RlX3ZhbHVlKGUubWFwLnZhbHVlKTtyLnNldChpLG8pfXJldHVybiByfSxlLnByb3RvdHlwZS5kZWNvZGVfc3RydWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBlLnN0cnVjdCl0W3JdPXRoaXMuZGVjb2RlX3ZhbHVlKGUuc3RydWN0W3JdKTtyZXR1cm4gdH0sZX0oKX0sMTkzMTksKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe3ZvaWQgMD09PW4mJihuPXIpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTsoIWl8fCgiZ2V0ImluIGk/IXQuX19lc01vZHVsZTppLndyaXRhYmxlfHxpLmNvbmZpZ3VyYWJsZSkpJiYoaT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGkpfTpmdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKSxlW25dPXRbcl19KSxpPWUuZSYmZS5lLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10fSksbz1lLmUmJmUuZS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgciBpbiBlKSJkZWZhdWx0IiE9PXImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZuKHQsZSxyKTtyZXR1cm4gaSh0LGUpLHR9O3IuX19lc01vZHVsZT0hMCxyLmRlc2VyaWFsaXplPXIuc2VyaWFsaXplPXZvaWQgMDt2YXIgYT1lLnIoMjM0OTUpLHM9ZS5yKDkwMjQxKSxjPW8oZS5yKDgzODk3KSk7ci5zZXJpYWxpemU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0hMCksciYmYy52YWxpZGF0ZV9zY2hlbWEoZSksbmV3IGEuQm9yc2hTZXJpYWxpemVyKHIpLmVuY29kZSh0LGUpfSxyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9ITApLHImJmMudmFsaWRhdGVfc2NoZW1hKGUpLG5ldyBzLkJvcnNoRGVzZXJpYWxpemVyKHQpLmRlY29kZShlKX19LDY0MDkyLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRGVsZWdhdGVBY3Rpb25QcmVmaXg9dm9pZCAwO2xldCBuPTB4NDAwMDAwMDAsaT0zNjY7Y2xhc3Mgb3twcmVmaXg7Y29uc3RydWN0b3Ioe3ByZWZpeDplfSl7dGhpcy5wcmVmaXg9ZX19Y2xhc3MgYSBleHRlbmRzIG97Y29uc3RydWN0b3IoZSl7c3VwZXIoe3ByZWZpeDpuK2V9KX19Y2xhc3MgcyBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcihpKX19ci5EZWxlZ2F0ZUFjdGlvblByZWZpeD1zfSw2OTY4MywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLlNDSEVNQT1yLlNpZ25lZFRyYW5zYWN0aW9uPXIuVHJhbnNhY3Rpb249ci5kZWNvZGVTaWduZWRUcmFuc2FjdGlvbj1yLmRlY29kZVRyYW5zYWN0aW9uPXIuZW5jb2RlVHJhbnNhY3Rpb249ci5lbmNvZGVTaWduZWREZWxlZ2F0ZT1yLmVuY29kZURlbGVnYXRlQWN0aW9uPXZvaWQgMDtsZXQgbj1lLnIoMTkzMTkpLGk9ZS5yKDY0MDkyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBuZXcgVWludDhBcnJheShbLi4uKDAsbi5zZXJpYWxpemUpKHIuU0NIRU1BLkRlbGVnYXRlQWN0aW9uUHJlZml4LG5ldyBpLkRlbGVnYXRlQWN0aW9uUHJlZml4KSwuLi4oMCxuLnNlcmlhbGl6ZSkoci5TQ0hFTUEuRGVsZWdhdGVBY3Rpb24sZSldKX1mdW5jdGlvbiBhKGUpe3JldHVybigwLG4uc2VyaWFsaXplKShyLlNDSEVNQS5TaWduZWREZWxlZ2F0ZSxlKX1mdW5jdGlvbiBzKGUpe2xldCB0PWUgaW5zdGFuY2VvZiBkP3IuU0NIRU1BLlNpZ25lZFRyYW5zYWN0aW9uOnIuU0NIRU1BLlRyYW5zYWN0aW9uO3JldHVybigwLG4uc2VyaWFsaXplKSh0LGUpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG5ldyBmKCgwLG4uZGVzZXJpYWxpemUpKHIuU0NIRU1BLlRyYW5zYWN0aW9uLGUpKX1mdW5jdGlvbiB1KGUpe3JldHVybiBuZXcgZCgoMCxuLmRlc2VyaWFsaXplKShyLlNDSEVNQS5TaWduZWRUcmFuc2FjdGlvbixlKSl9ci5lbmNvZGVEZWxlZ2F0ZUFjdGlvbj1vLHIuZW5jb2RlU2lnbmVkRGVsZWdhdGU9YSxyLmVuY29kZVRyYW5zYWN0aW9uPXMsci5kZWNvZGVUcmFuc2FjdGlvbj1jLHIuZGVjb2RlU2lnbmVkVHJhbnNhY3Rpb249dTtjbGFzcyBme3NpZ25lcklkO3B1YmxpY0tleTtub25jZTtyZWNlaXZlcklkO2FjdGlvbnM7YmxvY2tIYXNoO2NvbnN0cnVjdG9yKHtzaWduZXJJZDplLHB1YmxpY0tleTp0LG5vbmNlOnIscmVjZWl2ZXJJZDpuLGFjdGlvbnM6aSxibG9ja0hhc2g6b30pe3RoaXMuc2lnbmVySWQ9ZSx0aGlzLnB1YmxpY0tleT10LHRoaXMubm9uY2U9cix0aGlzLnJlY2VpdmVySWQ9bix0aGlzLmFjdGlvbnM9aSx0aGlzLmJsb2NrSGFzaD1vfWVuY29kZSgpe3JldHVybiBzKHRoaXMpfXN0YXRpYyBkZWNvZGUoZSl7cmV0dXJuIGMoZSl9fXIuVHJhbnNhY3Rpb249ZjtjbGFzcyBke3RyYW5zYWN0aW9uO3NpZ25hdHVyZTtjb25zdHJ1Y3Rvcih7dHJhbnNhY3Rpb246ZSxzaWduYXR1cmU6dH0pe3RoaXMudHJhbnNhY3Rpb249ZSx0aGlzLnNpZ25hdHVyZT10fWVuY29kZSgpe3JldHVybiBzKHRoaXMpfXN0YXRpYyBkZWNvZGUoZSl7cmV0dXJuIHUoZSl9fXIuU2lnbmVkVHJhbnNhY3Rpb249ZCxyLlNDSEVNQT1uZXcgY2xhc3N7RWQyNTUxOVNpZ25hdHVyZT17c3RydWN0OntkYXRhOnthcnJheTp7dHlwZToidTgiLGxlbjo2NH19fX07U2VjcDI1NmsxU2lnbmF0dXJlPXtzdHJ1Y3Q6e2RhdGE6e2FycmF5Ont0eXBlOiJ1OCIsbGVuOjY1fX19fTtTaWduYXR1cmU9e2VudW06W3tzdHJ1Y3Q6e2VkMjU1MTlTaWduYXR1cmU6dGhpcy5FZDI1NTE5U2lnbmF0dXJlfX0se3N0cnVjdDp7c2VjcDI1NmsxU2lnbmF0dXJlOnRoaXMuU2VjcDI1NmsxU2lnbmF0dXJlfX1dfTtFZDI1NTE5RGF0YT17c3RydWN0OntkYXRhOnthcnJheTp7dHlwZToidTgiLGxlbjozMn19fX07U2VjcDI1NmsxRGF0YT17c3RydWN0OntkYXRhOnthcnJheTp7dHlwZToidTgiLGxlbjo2NH19fX07UHVibGljS2V5PXtlbnVtOlt7c3RydWN0OntlZDI1NTE5S2V5OnRoaXMuRWQyNTUxOURhdGF9fSx7c3RydWN0OntzZWNwMjU2azFLZXk6dGhpcy5TZWNwMjU2azFEYXRhfX1dfTtGdW5jdGlvbkNhbGxQZXJtaXNzaW9uPXtzdHJ1Y3Q6e2FsbG93YW5jZTp7b3B0aW9uOiJ1MTI4In0scmVjZWl2ZXJJZDoic3RyaW5nIixtZXRob2ROYW1lczp7YXJyYXk6e3R5cGU6InN0cmluZyJ9fX19O0Z1bGxBY2Nlc3NQZXJtaXNzaW9uPXtzdHJ1Y3Q6e319O0FjY2Vzc0tleVBlcm1pc3Npb249e2VudW06W3tzdHJ1Y3Q6e2Z1bmN0aW9uQ2FsbDp0aGlzLkZ1bmN0aW9uQ2FsbFBlcm1pc3Npb259fSx7c3RydWN0OntmdWxsQWNjZXNzOnRoaXMuRnVsbEFjY2Vzc1Blcm1pc3Npb259fV19O0FjY2Vzc0tleT17c3RydWN0Ontub25jZToidTY0IixwZXJtaXNzaW9uOnRoaXMuQWNjZXNzS2V5UGVybWlzc2lvbn19O0NyZWF0ZUFjY291bnQ9e3N0cnVjdDp7fX07RGVwbG95Q29udHJhY3Q9e3N0cnVjdDp7Y29kZTp7YXJyYXk6e3R5cGU6InU4In19fX07RnVuY3Rpb25DYWxsPXtzdHJ1Y3Q6e21ldGhvZE5hbWU6InN0cmluZyIsYXJnczp7YXJyYXk6e3R5cGU6InU4In19LGdhczoidTY0IixkZXBvc2l0OiJ1MTI4In19O1RyYW5zZmVyPXtzdHJ1Y3Q6e2RlcG9zaXQ6InUxMjgifX07U3Rha2U9e3N0cnVjdDp7c3Rha2U6InUxMjgiLHB1YmxpY0tleTp0aGlzLlB1YmxpY0tleX19O0FkZEtleT17c3RydWN0OntwdWJsaWNLZXk6dGhpcy5QdWJsaWNLZXksYWNjZXNzS2V5OnRoaXMuQWNjZXNzS2V5fX07RGVsZXRlS2V5PXtzdHJ1Y3Q6e3B1YmxpY0tleTp0aGlzLlB1YmxpY0tleX19O0RlbGV0ZUFjY291bnQ9e3N0cnVjdDp7YmVuZWZpY2lhcnlJZDoic3RyaW5nIn19O0RlbGVnYXRlQWN0aW9uUHJlZml4PXtzdHJ1Y3Q6e3ByZWZpeDoidTMyIn19O0NsYXNzaWNBY3Rpb25zPXtlbnVtOlt7c3RydWN0OntjcmVhdGVBY2NvdW50OnRoaXMuQ3JlYXRlQWNjb3VudH19LHtzdHJ1Y3Q6e2RlcGxveUNvbnRyYWN0OnRoaXMuRGVwbG95Q29udHJhY3R9fSx7c3RydWN0OntmdW5jdGlvbkNhbGw6dGhpcy5GdW5jdGlvbkNhbGx9fSx7c3RydWN0Ont0cmFuc2Zlcjp0aGlzLlRyYW5zZmVyfX0se3N0cnVjdDp7c3Rha2U6dGhpcy5TdGFrZX19LHtzdHJ1Y3Q6e2FkZEtleTp0aGlzLkFkZEtleX19LHtzdHJ1Y3Q6e2RlbGV0ZUtleTp0aGlzLkRlbGV0ZUtleX19LHtzdHJ1Y3Q6e2RlbGV0ZUFjY291bnQ6dGhpcy5EZWxldGVBY2NvdW50fX1dfTtEZWxlZ2F0ZUFjdGlvbj17c3RydWN0OntzZW5kZXJJZDoic3RyaW5nIixyZWNlaXZlcklkOiJzdHJpbmciLGFjdGlvbnM6e2FycmF5Ont0eXBlOnRoaXMuQ2xhc3NpY0FjdGlvbnN9fSxub25jZToidTY0IixtYXhCbG9ja0hlaWdodDoidTY0IixwdWJsaWNLZXk6dGhpcy5QdWJsaWNLZXl9fTtTaWduZWREZWxlZ2F0ZT17c3RydWN0OntkZWxlZ2F0ZUFjdGlvbjp0aGlzLkRlbGVnYXRlQWN0aW9uLHNpZ25hdHVyZTp0aGlzLlNpZ25hdHVyZX19O0FjdGlvbj17ZW51bTpbe3N0cnVjdDp7Y3JlYXRlQWNjb3VudDp0aGlzLkNyZWF0ZUFjY291bnR9fSx7c3RydWN0OntkZXBsb3lDb250cmFjdDp0aGlzLkRlcGxveUNvbnRyYWN0fX0se3N0cnVjdDp7ZnVuY3Rpb25DYWxsOnRoaXMuRnVuY3Rpb25DYWxsfX0se3N0cnVjdDp7dHJhbnNmZXI6dGhpcy5UcmFuc2Zlcn19LHtzdHJ1Y3Q6e3N0YWtlOnRoaXMuU3Rha2V9fSx7c3RydWN0OnthZGRLZXk6dGhpcy5BZGRLZXl9fSx7c3RydWN0OntkZWxldGVLZXk6dGhpcy5EZWxldGVLZXl9fSx7c3RydWN0OntkZWxldGVBY2NvdW50OnRoaXMuRGVsZXRlQWNjb3VudH19LHtzdHJ1Y3Q6e3NpZ25lZERlbGVnYXRlOnRoaXMuU2lnbmVkRGVsZWdhdGV9fV19O1RyYW5zYWN0aW9uPXtzdHJ1Y3Q6e3NpZ25lcklkOiJzdHJpbmciLHB1YmxpY0tleTp0aGlzLlB1YmxpY0tleSxub25jZToidTY0IixyZWNlaXZlcklkOiJzdHJpbmciLGJsb2NrSGFzaDp7YXJyYXk6e3R5cGU6InU4IixsZW46MzJ9fSxhY3Rpb25zOnthcnJheTp7dHlwZTp0aGlzLkFjdGlvbn19fX07U2lnbmVkVHJhbnNhY3Rpb249e3N0cnVjdDp7dHJhbnNhY3Rpb246dGhpcy5UcmFuc2FjdGlvbixzaWduYXR1cmU6dGhpcy5TaWduYXR1cmV9fX19LDkyMzAzLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuY3JlYXRlVHJhbnNhY3Rpb249dm9pZCAwO2xldCBuPWUucig2OTY4Myk7ci5jcmVhdGVUcmFuc2FjdGlvbj1mdW5jdGlvbihlLHQscixpLG8sYSl7bGV0IHM9ImJpZ2ludCI9PXR5cGVvZiBpP2k6QmlnSW50KGkpO3JldHVybiBuZXcgbi5UcmFuc2FjdGlvbih7c2lnbmVySWQ6ZSxwdWJsaWNLZXk6dCxub25jZTpzLHJlY2VpdmVySWQ6cixhY3Rpb25zOm8sYmxvY2tIYXNoOmF9KX19LDg2MzgsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5idWlsZERlbGVnYXRlQWN0aW9uPXIuRGVsZWdhdGVBY3Rpb249dm9pZCAwO2xldHthZGRLZXk6bixjcmVhdGVBY2NvdW50OmksZGVsZXRlQWNjb3VudDpvLGRlbGV0ZUtleTphLGRlcGxveUNvbnRyYWN0OnMsZnVuY3Rpb25DYWxsOmMsc3Rha2U6dSx0cmFuc2ZlcjpmfT1lLnIoOTkyOTcpLmFjdGlvbkNyZWF0b3JzO2NsYXNzIGR7c2VuZGVySWQ7cmVjZWl2ZXJJZDthY3Rpb25zO25vbmNlO21heEJsb2NrSGVpZ2h0O3B1YmxpY0tleTtjb25zdHJ1Y3Rvcih7c2VuZGVySWQ6ZSxyZWNlaXZlcklkOnQsYWN0aW9uczpyLG5vbmNlOm4sbWF4QmxvY2tIZWlnaHQ6aSxwdWJsaWNLZXk6b30pe3RoaXMuc2VuZGVySWQ9ZSx0aGlzLnJlY2VpdmVySWQ9dCx0aGlzLmFjdGlvbnM9cix0aGlzLm5vbmNlPW4sdGhpcy5tYXhCbG9ja0hlaWdodD1pLHRoaXMucHVibGljS2V5PW99fXIuRGVsZWdhdGVBY3Rpb249ZCxyLmJ1aWxkRGVsZWdhdGVBY3Rpb249ZnVuY3Rpb24oe2FjdGlvbnM6ZSxtYXhCbG9ja0hlaWdodDp0LG5vbmNlOnIscHVibGljS2V5OmwscmVjZWl2ZXJJZDpoLHNlbmRlcklkOnB9KXtyZXR1cm4gbmV3IGQoe3NlbmRlcklkOnAscmVjZWl2ZXJJZDpoLGFjdGlvbnM6ZS5tYXAoZT0+e2lmKCFlLnR5cGUmJiFlLnBhcmFtcylyZXR1cm4gZTtzd2l0Y2goZS50eXBlKXtjYXNlIkFkZEtleSI6e2xldHtwdWJsaWNLZXk6dCxhY2Nlc3NLZXk6cn09ZS5wYXJhbXM7cmV0dXJuIG4odCxyKX1jYXNlIkNyZWF0ZUFjY291bnQiOnJldHVybiBpKGUucGFyYW1zLmNyZWF0ZUFjY291bnQpO2Nhc2UiRGVsZXRlQWNjb3VudCI6cmV0dXJuIG8oZS5wYXJhbXMuZGVsZXRlQWNjb3VudCk7Y2FzZSJEZWxldGVLZXkiOnJldHVybiBhKGUucGFyYW1zLnB1YmxpY0tleSk7Y2FzZSJEZXBsb3lDb250cmFjdCI6cmV0dXJuIHMoZS5wYXJhbXMuY29kZSk7Y2FzZSJGdW5jdGlvbkNhbGwiOntsZXR7bWV0aG9kTmFtZTp0LGFyZ3M6cixnYXM6bixkZXBvc2l0Oml9PWUucGFyYW1zO3JldHVybiBjKHQscixuLGkpfWNhc2UiU3Rha2UiOnJldHVybiB1KGUucGFyYW1zLnN0YWtlLGUucGFyYW1zLnB1YmxpY0tleSk7Y2FzZSJUcmFuc2ZlciI6e2xldHtkZXBvc2l0OnR9PWUucGFyYW1zO3JldHVybiBmKHQpfX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIGFjdGlvbiIpfSksbm9uY2U6cixtYXhCbG9ja0hlaWdodDp0LHB1YmxpY0tleTpsfSl9fSwzMTg3NCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGUpfHxlPDApdGhyb3cgRXJyb3IoInBvc2l0aXZlIGludGVnZXIgZXhwZWN0ZWQsIGdvdCAiK2UpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiJVaW50OEFycmF5Ij09PWUuY29uc3RydWN0b3IubmFtZX1mdW5jdGlvbiBvKGUsLi4udCl7aWYoIWkoZSkpdGhyb3cgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTtpZih0Lmxlbmd0aD4wJiYhdC5pbmNsdWRlcyhlLmxlbmd0aCkpdGhyb3cgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQgb2YgbGVuZ3RoICIrdCsiLCBnb3QgbGVuZ3RoPSIrZS5sZW5ndGgpfWZ1bmN0aW9uIGEoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmNyZWF0ZSl0aHJvdyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTtuKGUub3V0cHV0TGVuKSxuKGUuYmxvY2tMZW4pfWZ1bmN0aW9uIHMoZSx0PSEwKXtpZihlLmRlc3Ryb3llZCl0aHJvdyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTtpZih0JiZlLmZpbmlzaGVkKXRocm93IEVycm9yKCJIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIil9ZnVuY3Rpb24gYyhlLHQpe28oZSk7bGV0IHI9dC5vdXRwdXRMZW47aWYoZS5sZW5ndGg8cil0aHJvdyBFcnJvcigiZGlnZXN0SW50bygpIGV4cGVjdHMgb3V0cHV0IGJ1ZmZlciBvZiBsZW5ndGggYXQgbGVhc3QgIityKX1PYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5hbnVtYmVyPW4sci5hYnl0ZXM9byxyLmFoYXNoPWEsci5hZXhpc3RzPXMsci5hb3V0cHV0PWN9LDU1MTgzLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuY3J5cHRvPXZvaWQgMCxyLmNyeXB0bz0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJiJjcnlwdG8iaW4gZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLmNyeXB0bzp2b2lkIDB9LDQzMzAzLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuSGFzaD1yLm5leHRUaWNrPXIuYnl0ZVN3YXBJZkJFPXIuaXNMRT12b2lkIDAsci5pc0J5dGVzPW8sci51OD1hLHIudTMyPXMsci5jcmVhdGVWaWV3PWMsci5yb3RyPXUsci5yb3RsPWYsci5ieXRlU3dhcD1kLHIuYnl0ZVN3YXAzMj1sLHIuYnl0ZXNUb0hleD1wLHIuaGV4VG9CeXRlcz14LHIuYXN5bmNMb29wPU0sci51dGY4VG9CeXRlcz1FLHIudG9CeXRlcz1TLHIuY29uY2F0Qnl0ZXM9QSxyLmNoZWNrT3B0cz1rLHIud3JhcENvbnN0cnVjdG9yPVQsci53cmFwQ29uc3RydWN0b3JXaXRoT3B0cz1OLHIud3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHM9TyxyLnJhbmRvbUJ5dGVzPVI7bGV0IG49ZS5yKDU1MTgzKSxpPWUucigzMTg3NCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIlVpbnQ4QXJyYXkiPT09ZS5jb25zdHJ1Y3Rvci5uYW1lfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsTWF0aC5mbG9vcihlLmJ5dGVMZW5ndGgvNCkpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGU8PDMyLXR8ZT4+PnR9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlPDx0fGU+Pj4zMi10Pj4+MH1mdW5jdGlvbiBkKGUpe3JldHVybiBlPDwyNCYweGZmMDAwMDAwfGU8PDgmMHhmZjAwMDB8ZT4+PjgmNjUyODB8ZT4+PjI0JjI1NX1mdW5jdGlvbiBsKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF09ZChlW3RdKX1yLmlzTEU9Njg9PT1uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzB4MTEyMjMzNDRdKS5idWZmZXIpWzBdLHIuYnl0ZVN3YXBJZkJFPXIuaXNMRT9lPT5lOmU9PmQoZSk7bGV0IGg9QXJyYXkuZnJvbSh7bGVuZ3RoOjI1Nn0sKGUsdCk9PnQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSk7ZnVuY3Rpb24gcChlKXsoMCxpLmFieXRlcykoZSk7bGV0IHQ9IiI7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdCs9aFtlW3JdXTtyZXR1cm4gdH1sZXQgYj00OCxtPTU3LHk9NjUsZz03MCx2PTk3LF89MTAyO2Z1bmN0aW9uIHcoZSl7cmV0dXJuIGU+PWImJmU8PW0/ZS1iOmU+PXkmJmU8PWc/ZS0oeS0xMCk6ZT49diYmZTw9Xz9lLSh2LTEwKTp2b2lkIDB9ZnVuY3Rpb24geChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IoImhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAiK3R5cGVvZiBlKTtsZXQgdD1lLmxlbmd0aCxyPXQvMjtpZih0JTIpdGhyb3cgRXJyb3IoImhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCB1bnBhZGRlZCBoZXggb2YgbGVuZ3RoICIrdCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCB0PTAsaT0wO3Q8cjt0KyssaSs9Mil7bGV0IHI9dyhlLmNoYXJDb2RlQXQoaSkpLG89dyhlLmNoYXJDb2RlQXQoaSsxKSk7aWYodm9pZCAwPT09cnx8dm9pZCAwPT09byl0aHJvdyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyICInKyhlW2ldK2VbaSsxXSkrJyIgYXQgaW5kZXggJytpKTtuW3RdPTE2KnIrb31yZXR1cm4gbn1hc3luYyBmdW5jdGlvbiBNKGUsdCxuKXtsZXQgaT1EYXRlLm5vdygpO2ZvcihsZXQgbz0wO288ZTtvKyspe24obyk7bGV0IGU9RGF0ZS5ub3coKS1pO2U+PTAmJmU8dHx8KGF3YWl0ICgwLHIubmV4dFRpY2spKCksaSs9ZSl9fWZ1bmN0aW9uIEUoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IEVycm9yKCJ1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAiK3R5cGVvZiBlKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpKX1mdW5jdGlvbiBTKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9RShlKSksKDAsaS5hYnl0ZXMpKGUpLGV9ZnVuY3Rpb24gQSguLi5lKXtsZXQgdD0wO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1lW3JdOygwLGkuYWJ5dGVzKShuKSx0Kz1uLmxlbmd0aH1sZXQgcj1uZXcgVWludDhBcnJheSh0KTtmb3IobGV0IHQ9MCxuPTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWVbdF07ci5zZXQoaSxuKSxuKz1pLmxlbmd0aH1yZXR1cm4gcn1yLm5leHRUaWNrPWFzeW5jKCk9Pnt9O2NsYXNzIEl7Y2xvbmUoKXtyZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCl9fWZ1bmN0aW9uIGsoZSx0KXtpZih2b2lkIDAhPT10JiYiW29iamVjdCBPYmplY3RdIiE9PSh7fSkudG9TdHJpbmcuY2FsbCh0KSl0aHJvdyBFcnJvcigiT3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QuYXNzaWduKGUsdCl9ZnVuY3Rpb24gVChlKXtsZXQgdD10PT5lKCkudXBkYXRlKFModCkpLmRpZ2VzdCgpLHI9ZSgpO3JldHVybiB0Lm91dHB1dExlbj1yLm91dHB1dExlbix0LmJsb2NrTGVuPXIuYmxvY2tMZW4sdC5jcmVhdGU9KCk9PmUoKSx0fWZ1bmN0aW9uIE4oZSl7bGV0IHQ9KHQscik9PmUocikudXBkYXRlKFModCkpLmRpZ2VzdCgpLHI9ZSh7fSk7cmV0dXJuIHQub3V0cHV0TGVuPXIub3V0cHV0TGVuLHQuYmxvY2tMZW49ci5ibG9ja0xlbix0LmNyZWF0ZT10PT5lKHQpLHR9ZnVuY3Rpb24gTyhlKXtsZXQgdD0odCxyKT0+ZShyKS51cGRhdGUoUyh0KSkuZGlnZXN0KCkscj1lKHt9KTtyZXR1cm4gdC5vdXRwdXRMZW49ci5vdXRwdXRMZW4sdC5ibG9ja0xlbj1yLmJsb2NrTGVuLHQuY3JlYXRlPXQ9PmUodCksdH1mdW5jdGlvbiBSKGU9MzIpe2lmKG4uY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBuLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoZSkpO2lmKG4uY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jcnlwdG8ucmFuZG9tQnl0ZXMpcmV0dXJuIG4uY3J5cHRvLnJhbmRvbUJ5dGVzKGUpO3Rocm93IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpfXIuSGFzaD1JfSwzMzkzNiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkhhc2hNRD12b2lkIDAsci5zZXRCaWdVaW50NjQ9byxyLkNoaT1hLHIuTWFqPXM7bGV0IG49ZS5yKDMxODc0KSxpPWUucig0MzMwMyk7ZnVuY3Rpb24gbyhlLHQscixuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5zZXRCaWdVaW50NjQpcmV0dXJuIGUuc2V0QmlnVWludDY0KHQscixuKTtsZXQgaT1CaWdJbnQoMzIpLG89QmlnSW50KDB4ZmZmZmZmZmYpLGE9TnVtYmVyKHI+Pmkmbykscz1OdW1iZXIociZvKSxjPTQqISFuLHU9NCohbjtlLnNldFVpbnQzMih0K2MsYSxuKSxlLnNldFVpbnQzMih0K3UscyxuKX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gZSZ0Xn5lJnJ9ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIGUmdF5lJnJedCZyfWNsYXNzIGMgZXh0ZW5kcyBpLkhhc2h7Y29uc3RydWN0b3IoZSx0LHIsbil7c3VwZXIoKSx0aGlzLmJsb2NrTGVuPWUsdGhpcy5vdXRwdXRMZW49dCx0aGlzLnBhZE9mZnNldD1yLHRoaXMuaXNMRT1uLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5sZW5ndGg9MCx0aGlzLnBvcz0wLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLHRoaXMudmlldz0oMCxpLmNyZWF0ZVZpZXcpKHRoaXMuYnVmZmVyKX11cGRhdGUoZSl7KDAsbi5hZXhpc3RzKSh0aGlzKTtsZXR7dmlldzp0LGJ1ZmZlcjpyLGJsb2NrTGVuOm99PXRoaXMsYT0oZT0oMCxpLnRvQnl0ZXMpKGUpKS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxhOyl7bGV0IHM9TWF0aC5taW4oby10aGlzLnBvcyxhLW4pO2lmKHM9PT1vKXtsZXQgdD0oMCxpLmNyZWF0ZVZpZXcpKGUpO2Zvcig7bzw9YS1uO24rPW8pdGhpcy5wcm9jZXNzKHQsbik7Y29udGludWV9ci5zZXQoZS5zdWJhcnJheShuLG4rcyksdGhpcy5wb3MpLHRoaXMucG9zKz1zLG4rPXMsdGhpcy5wb3M9PT1vJiYodGhpcy5wcm9jZXNzKHQsMCksdGhpcy5wb3M9MCl9cmV0dXJuIHRoaXMubGVuZ3RoKz1lLmxlbmd0aCx0aGlzLnJvdW5kQ2xlYW4oKSx0aGlzfWRpZ2VzdEludG8oZSl7KDAsbi5hZXhpc3RzKSh0aGlzKSwoMCxuLmFvdXRwdXQpKGUsdGhpcyksdGhpcy5maW5pc2hlZD0hMDtsZXR7YnVmZmVyOnQsdmlldzpyLGJsb2NrTGVuOmEsaXNMRTpzfT10aGlzLHtwb3M6Y309dGhpczt0W2MrK109MTI4LHRoaXMuYnVmZmVyLnN1YmFycmF5KGMpLmZpbGwoMCksdGhpcy5wYWRPZmZzZXQ+YS1jJiYodGhpcy5wcm9jZXNzKHIsMCksYz0wKTtmb3IobGV0IGU9YztlPGE7ZSsrKXRbZV09MDtvKHIsYS04LEJpZ0ludCg4KnRoaXMubGVuZ3RoKSxzKSx0aGlzLnByb2Nlc3MociwwKTtsZXQgdT0oMCxpLmNyZWF0ZVZpZXcpKGUpLGY9dGhpcy5vdXRwdXRMZW47aWYoZiU0KXRocm93IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Iik7bGV0IGQ9Zi80LGw9dGhpcy5nZXQoKTtpZihkPmwubGVuZ3RoKXRocm93IEVycm9yKCJfc2hhMjogb3V0cHV0TGVuIGJpZ2dlciB0aGFuIHN0YXRlIik7Zm9yKGxldCBlPTA7ZTxkO2UrKyl1LnNldFVpbnQzMig0KmUsbFtlXSxzKX1kaWdlc3QoKXtsZXR7YnVmZmVyOmUsb3V0cHV0TGVuOnR9PXRoaXM7dGhpcy5kaWdlc3RJbnRvKGUpO2xldCByPWUuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5kZXN0cm95KCkscn1fY2xvbmVJbnRvKGUpe2V8fChlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKSxlLnNldCguLi50aGlzLmdldCgpKTtsZXR7YmxvY2tMZW46dCxidWZmZXI6cixsZW5ndGg6bixmaW5pc2hlZDppLGRlc3Ryb3llZDpvLHBvczphfT10aGlzO3JldHVybiBlLmxlbmd0aD1uLGUucG9zPWEsZS5maW5pc2hlZD1pLGUuZGVzdHJveWVkPW8sbiV0JiZlLmJ1ZmZlci5zZXQociksZX19ci5IYXNoTUQ9Y30sNjExNDcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5zaGEyMjQ9ci5zaGEyNTY9ci5TSEEyNTY9dm9pZCAwO2xldCBuPWUucigzMzkzNiksaT1lLnIoNDMzMDMpLG89bmV3IFVpbnQzMkFycmF5KFsweDQyOGEyZjk4LDB4NzEzNzQ0OTEsMHhiNWMwZmJjZiwweGU5YjVkYmE1LDB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUsMHhkODA3YWE5OCwweDEyODM1YjAxLDB4MjQzMTg1YmUsMHg1NTBjN2RjMywweDcyYmU1ZDc0LDB4ODBkZWIxZmUsMHg5YmRjMDZhNywweGMxOWJmMTc0LDB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweGZjMTlkYzYsMHgyNDBjYTFjYywweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhLDB4OTgzZTUxNTIsMHhhODMxYzY2ZCwweGIwMDMyN2M4LDB4YmY1OTdmYzcsMHhjNmUwMGJmMywweGQ1YTc5MTQ3LDB4NmNhNjM1MSwweDE0MjkyOTY3LDB4MjdiNzBhODUsMHgyZTFiMjEzOCwweDRkMmM2ZGZjLDB4NTMzODBkMTMsMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NSwweGEyYmZlOGExLDB4YTgxYTY2NGIsMHhjMjRiOGI3MCwweGM3NmM1MWEzLDB4ZDE5MmU4MTksMHhkNjk5MDYyNCwweGY0MGUzNTg1LDB4MTA2YWEwNzAsMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNSwweDM5MWMwY2IzLDB4NGVkOGFhNGEsMHg1YjljY2E0ZiwweDY4MmU2ZmYzLDB4NzQ4ZjgyZWUsMHg3OGE1NjM2ZiwweDg0Yzg3ODE0LDB4OGNjNzAyMDgsMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMl0pLGE9bmV3IFVpbnQzMkFycmF5KFsweDZhMDllNjY3LDB4YmI2N2FlODUsMHgzYzZlZjM3MiwweGE1NGZmNTNhLDB4NTEwZTUyN2YsMHg5YjA1Njg4YywweDFmODNkOWFiLDB4NWJlMGNkMTldKSxzPW5ldyBVaW50MzJBcnJheSg2NCk7Y2xhc3MgYyBleHRlbmRzIG4uSGFzaE1Ee2NvbnN0cnVjdG9yKCl7c3VwZXIoNjQsMzIsOCwhMSksdGhpcy5BPTB8YVswXSx0aGlzLkI9MHxhWzFdLHRoaXMuQz0wfGFbMl0sdGhpcy5EPTB8YVszXSx0aGlzLkU9MHxhWzRdLHRoaXMuRj0wfGFbNV0sdGhpcy5HPTB8YVs2XSx0aGlzLkg9MHxhWzddfWdldCgpe2xldHtBOmUsQjp0LEM6cixEOm4sRTppLEY6byxHOmEsSDpzfT10aGlzO3JldHVybltlLHQscixuLGksbyxhLHNdfXNldChlLHQscixuLGksbyxhLHMpe3RoaXMuQT0wfGUsdGhpcy5CPTB8dCx0aGlzLkM9MHxyLHRoaXMuRD0wfG4sdGhpcy5FPTB8aSx0aGlzLkY9MHxvLHRoaXMuRz0wfGEsdGhpcy5IPTB8c31wcm9jZXNzKGUsdCl7Zm9yKGxldCByPTA7cjwxNjtyKyssdCs9NClzW3JdPWUuZ2V0VWludDMyKHQsITEpO2ZvcihsZXQgZT0xNjtlPDY0O2UrKyl7bGV0IHQ9c1tlLTE1XSxyPXNbZS0yXSxuPSgwLGkucm90cikodCw3KV4oMCxpLnJvdHIpKHQsMTgpXnQ+Pj4zLG89KDAsaS5yb3RyKShyLDE3KV4oMCxpLnJvdHIpKHIsMTkpXnI+Pj4xMDtzW2VdPW8rc1tlLTddK24rc1tlLTE2XXwwfWxldHtBOnIsQjphLEM6YyxEOnUsRTpmLEY6ZCxHOmwsSDpofT10aGlzO2ZvcihsZXQgZT0wO2U8NjQ7ZSsrKXtsZXQgdD1oKygoMCxpLnJvdHIpKGYsNileKDAsaS5yb3RyKShmLDExKV4oMCxpLnJvdHIpKGYsMjUpKSsoMCxuLkNoaSkoZixkLGwpK29bZV0rc1tlXXwwLHA9KCgwLGkucm90cikociwyKV4oMCxpLnJvdHIpKHIsMTMpXigwLGkucm90cikociwyMikpKygwLG4uTWFqKShyLGEsYyl8MDtoPWwsbD1kLGQ9ZixmPXUrdHwwLHU9YyxjPWEsYT1yLHI9dCtwfDB9cj1yK3RoaXMuQXwwLGE9YSt0aGlzLkJ8MCxjPWMrdGhpcy5DfDAsdT11K3RoaXMuRHwwLGY9Zit0aGlzLkV8MCxkPWQrdGhpcy5GfDAsbD1sK3RoaXMuR3wwLGg9aCt0aGlzLkh8MCx0aGlzLnNldChyLGEsYyx1LGYsZCxsLGgpfXJvdW5kQ2xlYW4oKXtzLmZpbGwoMCl9ZGVzdHJveSgpe3RoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCksdGhpcy5idWZmZXIuZmlsbCgwKX19ci5TSEEyNTY9YztjbGFzcyB1IGV4dGVuZHMgY3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5BPS0weDNlZmE2MTI4LHRoaXMuQj0weDM2N2NkNTA3LHRoaXMuQz0weDMwNzBkZDE3LHRoaXMuRD0tMHg4ZjFhNmM3LHRoaXMuRT0tNDE5MTQzOSx0aGlzLkY9MHg2ODU4MTUxMSx0aGlzLkc9MHg2NGY5OGZhNyx0aGlzLkg9LTB4NDEwNWIwNWMsdGhpcy5vdXRwdXRMZW49Mjh9fXIuc2hhMjU2PSgwLGkud3JhcENvbnN0cnVjdG9yKSgoKT0+bmV3IGMpLHIuc2hhMjI0PSgwLGkud3JhcENvbnN0cnVjdG9yKSgoKT0+bmV3IHUpfSw5MTI1MSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLlNpZ25hdHVyZT12b2lkIDA7bGV0IG49ZS5yKDcyMjMpLGk9ZS5yKDc4MTkwKTtmdW5jdGlvbiBvKGUpe3N3aXRjaChlKXtjYXNlIG4uS2V5VHlwZS5FRDI1NTE5OnJldHVybiJlZDI1NTE5U2lnbmF0dXJlIjtjYXNlIG4uS2V5VHlwZS5TRUNQMjU2SzE6cmV0dXJuInNlY3AyNTZrMVNpZ25hdHVyZSI7ZGVmYXVsdDp0aHJvdyBFcnJvcihgdW5rbm93biB0eXBlICR7ZX1gKX19Y2xhc3MgYSBleHRlbmRzIGkuRW51bXtlbnVtO2VkMjU1MTlTaWduYXR1cmU7c2VjcDI1NmsxU2lnbmF0dXJlO2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9byhlLmtleVR5cGUpO3N1cGVyKHtbdF06ZX0pLHRoaXNbdF09ZSx0aGlzLmVudW09dH1nZXQgc2lnbmF0dXJlKCl7cmV0dXJuIHRoaXMuZWQyNTUxOVNpZ25hdHVyZXx8dGhpcy5zZWNwMjU2azFTaWduYXR1cmV9Z2V0IHNpZ25hdHVyZVR5cGUoKXtyZXR1cm4gdGhpcy5zaWduYXR1cmUua2V5VHlwZX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLnNpZ25hdHVyZS5kYXRhfX1yLlNpZ25hdHVyZT1hfSw1MTU1NywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLnNpZ25EZWxlZ2F0ZUFjdGlvbj1yLnNpZ25UcmFuc2FjdGlvbj12b2lkIDA7bGV0IG49ZS5yKDYxMTQ3KSxpPWUucigxNjI2Niksbz1lLnIoOTIzMDMpLGE9ZS5yKDY5NjgzKSxzPWUucig5MTI1MSksYz1lLnIoNzIyMyk7YXN5bmMgZnVuY3Rpb24gdShlLHQscixpKXtsZXQgbz0oMCxhLmVuY29kZVRyYW5zYWN0aW9uKShlKSx1PW5ldyBVaW50OEFycmF5KCgwLG4uc2hhMjU2KShvKSksZj1hd2FpdCB0LnNpZ25NZXNzYWdlKG8scixpKSxkPWUucHVibGljS2V5LmVkMjU1MTlLZXk/Yy5LZXlUeXBlLkVEMjU1MTk6Yy5LZXlUeXBlLlNFQ1AyNTZLMTtyZXR1cm5bdSxuZXcgYS5TaWduZWRUcmFuc2FjdGlvbih7dHJhbnNhY3Rpb246ZSxzaWduYXR1cmU6bmV3IHMuU2lnbmF0dXJlKHtrZXlUeXBlOmQsZGF0YTpmLnNpZ25hdHVyZX0pfSldfXIuc2lnblRyYW5zYWN0aW9uPWFzeW5jIGZ1bmN0aW9uKC4uLmUpe2lmKGVbMF0uY29uc3RydWN0b3I9PT1hLlRyYW5zYWN0aW9uKXtsZXRbdCxyLG4saV09ZTtyZXR1cm4gdSh0LHIsbixpKX17bGV0W3QscixuLGksYSxzLGNdPWUsZj1hd2FpdCBhLmdldFB1YmxpY0tleShzLGMpO3JldHVybiB1KCgwLG8uY3JlYXRlVHJhbnNhY3Rpb24pKHMsZix0LHIsbixpKSxhLHMsYyl9fSxyLnNpZ25EZWxlZ2F0ZUFjdGlvbj1hc3luYyBmdW5jdGlvbih7ZGVsZWdhdGVBY3Rpb246ZSxzaWduZXI6dH0pe2xldCByPSgwLGEuZW5jb2RlRGVsZWdhdGVBY3Rpb24pKGUpLG89YXdhaXQgdC5zaWduKHIpLHU9ZS5wdWJsaWNLZXkuZWQyNTUxOUtleT9jLktleVR5cGUuRUQyNTUxOTpjLktleVR5cGUuU0VDUDI1NksxLGY9bmV3IGkuU2lnbmVkRGVsZWdhdGUoe2RlbGVnYXRlQWN0aW9uOmUsc2lnbmF0dXJlOm5ldyBzLlNpZ25hdHVyZSh7a2V5VHlwZTp1LGRhdGE6b30pfSk7cmV0dXJue2hhc2g6bmV3IFVpbnQ4QXJyYXkoKDAsbi5zaGEyNTYpKHIpKSxzaWduZWREZWxlZ2F0ZUFjdGlvbjpmfX19LDQ1MDgwLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7KCFpfHwoImdldCJpbiBpPyF0Ll9fZXNNb2R1bGU6aS53cml0YWJsZXx8aS5jb25maWd1cmFibGUpKSYmKGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixpKX06ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksZVtuXT10W3JdfSksaT1lLmUmJmUuZS5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpImRlZmF1bHQiPT09cnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscil8fG4odCxlLHIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaShlLnIoOTkyOTcpLHIpLGkoZS5yKDE2MjY2KSxyKSxpKGUucig5MjMwMyksciksaShlLnIoODYzOCksciksaShlLnIoNjk2ODMpLHIpLGkoZS5yKDUxNTU3KSxyKSxpKGUucig5MTI1MSkscil9LDI1MTA2LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuUHJvdmlkZXI9dm9pZCAwO2NsYXNzIG57fXIuUHJvdmlkZXI9bn0sMTI0NjcsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5mZXRjaEpzb25ScGM9ci5Qcm92aWRlckVycm9yPXIucmV0cnlDb25maWc9dm9pZCAwO2xldCBuPWUucigzNjM4NSksaT1lLnIoODgzNDApLG89MS41LGE9MTAscz0wO3IucmV0cnlDb25maWc9ZnVuY3Rpb24oZT1hLHQ9byxyPXMpe3JldHVybntudW1PZkF0dGVtcHRzOmUsdGltZU11bHRpcGxlOnQsc3RhcnRpbmdEZWxheTpyLHJldHJ5OmU9PiEhKFs1MDMsNTAwLDQwOF0uaW5jbHVkZXMoZS5jYXVzZSl8fGUudG9TdHJpbmcoKS5pbmNsdWRlcygiRmV0Y2hFcnJvciIpfHxlLnRvU3RyaW5nKCkuaW5jbHVkZXMoIkZhaWxlZCB0byBmZXRjaCIpKX19O2NsYXNzIGMgZXh0ZW5kcyBFcnJvcntjYXVzZTtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdC5jYXVzZSYmKHRoaXMuY2F1c2U9dC5jYXVzZSl9fXIuUHJvdmlkZXJFcnJvcj1jLHIuZmV0Y2hKc29uUnBjPWFzeW5jIGZ1bmN0aW9uKGUsdCxyLG8pe2xldCBzPWF3YWl0ICgwLGkuYmFja09mZikoYXN5bmMoKT0+e2xldCBuPWF3YWl0IGZldGNoKGUse21ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeSh0KSxoZWFkZXJzOnsuLi5yLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19KSx7b2s6aSxzdGF0dXM6b309bjtpZig1MDA9PT1vKXRocm93IG5ldyBjKCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IiLHtjYXVzZTpvfSk7aWYoNDA4PT09byl0aHJvdyBuZXcgYygiVGltZW91dCBlcnJvciIse2NhdXNlOm99KTtpZig0MDA9PT1vKXRocm93IG5ldyBjKCJSZXF1ZXN0IHZhbGlkYXRpb24gZXJyb3IiLHtjYXVzZTpvfSk7aWYoNTAzPT09byl0aHJvdyBuZXcgYyhgJHtlfSB1bmF2YWlsYWJsZWAse2NhdXNlOm99KTtpZighaSl0aHJvdyBuZXcgYyhhd2FpdCBuLnRleHQoKSx7Y2F1c2U6b30pO3JldHVybiBufSxvKTtpZighcyl0aHJvdyBuZXcgbi5UeXBlZEVycm9yKGBFeGNlZWRlZCAke2F9IGF0dGVtcHRzIGZvciAke2V9LmAsIlJldHJpZXNFeGNlZWRlZCIpO3JldHVybiBhd2FpdCBzLmpzb24oKX19LDM5Mzc4LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5pKDM5NTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Kc29uUnBjUHJvdmlkZXI9dm9pZCAwO2xldCBpPWUucig4ODQzNCksbz1lLnIoMzYzODUpLGE9ZS5yKDQ1MDgwKSxzPWUucigyNTEwNiksYz1lLnIoMTI0NjcpLHU9MTIsZj01MDAsZD0xLjUsbD0xMjM7Y2xhc3MgaCBleHRlbmRzIHMuUHJvdmlkZXJ7Y29ubmVjdGlvbjtvcHRpb25zO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbm5lY3Rpb249ZXx8e3VybDoiIn07Y29uc3Qgcj17cmV0cmllczp1LHdhaXQ6ZixiYWNrb2ZmOmR9O3RoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LHIsdCl9YXN5bmMgc3RhdHVzKCl7cmV0dXJuIHRoaXMuc2VuZEpzb25ScGMoInN0YXR1cyIsW10pfWFzeW5jIHNlbmRUcmFuc2FjdGlvblVudGlsKGUsdCl7bGV0IHI9KDAsYS5lbmNvZGVUcmFuc2FjdGlvbikoZSk7cmV0dXJuIHRoaXMuc2VuZEpzb25ScGMoInNlbmRfdHgiLHtzaWduZWRfdHhfYmFzZTY0Om4uQnVmZmVyLmZyb20ocikudG9TdHJpbmcoImJhc2U2NCIpLHdhaXRfdW50aWw6dH0pfWFzeW5jIHNlbmRUcmFuc2FjdGlvbihlKXtyZXR1cm4gdGhpcy5zZW5kVHJhbnNhY3Rpb25VbnRpbChlLCJFWEVDVVRFRF9PUFRJTUlTVElDIil9YXN5bmMgc2VuZFRyYW5zYWN0aW9uQXN5bmMoZSl7cmV0dXJuIHRoaXMuc2VuZFRyYW5zYWN0aW9uVW50aWwoZSwiTk9ORSIpfWFzeW5jIHR4U3RhdHVzKGUsdCxyPSJFWEVDVVRFRF9PUFRJTUlTVElDIil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3RoaXMudHhTdGF0dXNTdHJpbmcoZSx0LHIpOnRoaXMudHhTdGF0dXNVaW50OEFycmF5KGUsdCxyKX1hc3luYyB0eFN0YXR1c1VpbnQ4QXJyYXkoZSx0LHIpe3JldHVybiB0aGlzLnNlbmRKc29uUnBjKCJ0eCIse3R4X2hhc2g6KDAsaS5iYXNlRW5jb2RlKShlKSxzZW5kZXJfYWNjb3VudF9pZDp0LHdhaXRfdW50aWw6cn0pfWFzeW5jIHR4U3RhdHVzU3RyaW5nKGUsdCxyKXtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygidHgiLHt0eF9oYXNoOmUsc2VuZGVyX2FjY291bnRfaWQ6dCx3YWl0X3VudGlsOnJ9KX1hc3luYyB0eFN0YXR1c1JlY2VpcHRzKGUsdCxyPSJFWEVDVVRFRF9PUFRJTUlTVElDIil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3RoaXMuc2VuZEpzb25ScGMoIkVYUEVSSU1FTlRBTF90eF9zdGF0dXMiLHt0eF9oYXNoOmUsc2VuZGVyX2FjY291bnRfaWQ6dCx3YWl0X3VudGlsOnJ9KTp0aGlzLnNlbmRKc29uUnBjKCJFWFBFUklNRU5UQUxfdHhfc3RhdHVzIix7dHhfaGFzaDooMCxpLmJhc2VFbmNvZGUpKGUpLHNlbmRlcl9hY2NvdW50X2lkOnQsd2FpdF91bnRpbDpyfSl9YXN5bmMgcXVlcnkoLi4uZSl7bGV0IHQ7aWYoMT09PWUubGVuZ3RoKXtsZXR7YmxvY2tfaWQ6cixibG9ja0lkOm4sLi4uaX09ZVswXTt0PWF3YWl0IHRoaXMuc2VuZEpzb25ScGMoInF1ZXJ5Iix7Li4uaSxibG9ja19pZDpyfHxufSl9ZWxzZXtsZXRbcixuXT1lO3Q9YXdhaXQgdGhpcy5zZW5kSnNvblJwYygicXVlcnkiLFtyLG5dKX1pZih0JiZ0LmVycm9yKXRocm93IG5ldyBvLlR5cGVkRXJyb3IoYFF1ZXJ5aW5nIGZhaWxlZDogJHt0LmVycm9yfS4KJHtKU09OLnN0cmluZ2lmeSh0LG51bGwsMil9YCwoMCxpLmdldEVycm9yVHlwZUZyb21FcnJvck1lc3NhZ2UpKHQuZXJyb3IsdC5lcnJvci5uYW1lKSk7cmV0dXJuIHR9YXN5bmMgYmxvY2soZSl7bGV0e2ZpbmFsaXR5OnR9PWUse2Jsb2NrSWQ6cn09ZTtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygiYmxvY2siLHtibG9ja19pZDpyLGZpbmFsaXR5OnR9KX1hc3luYyBibG9ja0NoYW5nZXMoZSl7bGV0e2ZpbmFsaXR5OnR9PWUse2Jsb2NrSWQ6cn09ZTtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygiRVhQRVJJTUVOVEFMX2NoYW5nZXNfaW5fYmxvY2siLHtibG9ja19pZDpyLGZpbmFsaXR5OnR9KX1hc3luYyBjaHVuayhlKXtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygiY2h1bmsiLFtlXSl9YXN5bmMgdmFsaWRhdG9ycyhlKXtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygidmFsaWRhdG9ycyIsW2VdKX1hc3luYyBleHBlcmltZW50YWxfcHJvdG9jb2xDb25maWcoZSl7bGV0e2Jsb2NrSWQ6dCwuLi5yfT1lO3JldHVybiBhd2FpdCB0aGlzLnNlbmRKc29uUnBjKCJFWFBFUklNRU5UQUxfcHJvdG9jb2xfY29uZmlnIix7Li4ucixibG9ja19pZDp0fSl9YXN5bmMgbGlnaHRDbGllbnRQcm9vZihlKXtyZXR1cm4gYXdhaXQgdGhpcy5zZW5kSnNvblJwYygiRVhQRVJJTUVOVEFMX2xpZ2h0X2NsaWVudF9wcm9vZiIsZSl9YXN5bmMgbmV4dExpZ2h0Q2xpZW50QmxvY2soZSl7cmV0dXJuIGF3YWl0IHRoaXMuc2VuZEpzb25ScGMoIm5leHRfbGlnaHRfY2xpZW50X2Jsb2NrIixlKX1hc3luYyBhY2Nlc3NLZXlDaGFuZ2VzKGUsdCl7bGV0e2ZpbmFsaXR5OnJ9PXQse2Jsb2NrSWQ6bn09dDtyZXR1cm4gdGhpcy5zZW5kSnNvblJwYygiRVhQRVJJTUVOVEFMX2NoYW5nZXMiLHtjaGFuZ2VzX3R5cGU6ImFsbF9hY2Nlc3Nfa2V5X2NoYW5nZXMiLGFjY291bnRfaWRzOmUsYmxvY2tfaWQ6bixmaW5hbGl0eTpyfSl9YXN5bmMgc2luZ2xlQWNjZXNzS2V5Q2hhbmdlcyhlLHQpe2xldHtmaW5hbGl0eTpyfT10LHtibG9ja0lkOm59PXQ7cmV0dXJuIHRoaXMuc2VuZEpzb25ScGMoIkVYUEVSSU1FTlRBTF9jaGFuZ2VzIix7Y2hhbmdlc190eXBlOiJzaW5nbGVfYWNjZXNzX2tleV9jaGFuZ2VzIixrZXlzOmUsYmxvY2tfaWQ6bixmaW5hbGl0eTpyfSl9YXN5bmMgYWNjb3VudENoYW5nZXMoZSx0KXtsZXR7ZmluYWxpdHk6cn09dCx7YmxvY2tJZDpufT10O3JldHVybiB0aGlzLnNlbmRKc29uUnBjKCJFWFBFUklNRU5UQUxfY2hhbmdlcyIse2NoYW5nZXNfdHlwZToiYWNjb3VudF9jaGFuZ2VzIixhY2NvdW50X2lkczplLGJsb2NrX2lkOm4sZmluYWxpdHk6cn0pfWFzeW5jIGNvbnRyYWN0U3RhdGVDaGFuZ2VzKGUsdCxyPSIiKXtsZXR7ZmluYWxpdHk6bn09dCx7YmxvY2tJZDppfT10O3JldHVybiB0aGlzLnNlbmRKc29uUnBjKCJFWFBFUklNRU5UQUxfY2hhbmdlcyIse2NoYW5nZXNfdHlwZToiZGF0YV9jaGFuZ2VzIixhY2NvdW50X2lkczplLGtleV9wcmVmaXhfYmFzZTY0OnIsYmxvY2tfaWQ6aSxmaW5hbGl0eTpufSl9YXN5bmMgY29udHJhY3RDb2RlQ2hhbmdlcyhlLHQpe2xldHtmaW5hbGl0eTpyfT10LHtibG9ja0lkOm59PXQ7cmV0dXJuIHRoaXMuc2VuZEpzb25ScGMoIkVYUEVSSU1FTlRBTF9jaGFuZ2VzIix7Y2hhbmdlc190eXBlOiJjb250cmFjdF9jb2RlX2NoYW5nZXMiLGFjY291bnRfaWRzOmUsYmxvY2tfaWQ6bixmaW5hbGl0eTpyfSl9YXN5bmMgZ2FzUHJpY2UoZSl7cmV0dXJuIGF3YWl0IHRoaXMuc2VuZEpzb25ScGMoImdhc19wcmljZSIsW2VdKX1hc3luYyBzZW5kSnNvblJwYyhlLHQpe2xldCByPXttZXRob2Q6ZSxwYXJhbXM6dCxpZDpsKyssanNvbnJwYzoiMi4wIn0sbj1hd2FpdCAoMCxjLmZldGNoSnNvblJwYykodGhpcy5jb25uZWN0aW9uLnVybCxyLHRoaXMuY29ubmVjdGlvbi5oZWFkZXJzLCgwLGMucmV0cnlDb25maWcpKHRoaXMub3B0aW9ucy5yZXRyaWVzLHRoaXMub3B0aW9ucy5iYWNrb2ZmLHRoaXMub3B0aW9ucy53YWl0KSk7aWYobi5lcnJvcilpZigib2JqZWN0Ij09dHlwZW9mIG4uZXJyb3IuZGF0YSl7aWYoInN0cmluZyI9PXR5cGVvZiBuLmVycm9yLmRhdGEuZXJyb3JfbWVzc2FnZSYmInN0cmluZyI9PXR5cGVvZiBuLmVycm9yLmRhdGEuZXJyb3JfdHlwZSl0aHJvdyBuZXcgby5UeXBlZEVycm9yKG4uZXJyb3IuZGF0YS5lcnJvcl9tZXNzYWdlLG4uZXJyb3IuZGF0YS5lcnJvcl90eXBlKTt0aHJvdygwLGkucGFyc2VScGNFcnJvcikobi5lcnJvci5kYXRhKX1lbHNle2xldCBlPWBbJHtuLmVycm9yLmNvZGV9XSAke24uZXJyb3IubWVzc2FnZX06ICR7bi5lcnJvci5kYXRhfWAscj0oMCxpLmdldEVycm9yVHlwZUZyb21FcnJvck1lc3NhZ2UpKG4uZXJyb3IuZGF0YSwiIik7aWYocil0aHJvdyBuZXcgby5UeXBlZEVycm9yKCgwLGkuZm9ybWF0RXJyb3IpKHIsdCkscik7dGhyb3cgbmV3IG8uVHlwZWRFcnJvcihlLG4uZXJyb3IubmFtZSl9aWYoInN0cmluZyI9PXR5cGVvZiBuLnJlc3VsdD8uZXJyb3Ipe2xldCBlPSgwLGkuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZSkobi5yZXN1bHQuZXJyb3IsIiIpO2lmKGUpdGhyb3cgbmV3IGkuU2VydmVyRXJyb3IoKDAsaS5mb3JtYXRFcnJvcikoZSx0KSxlKX1sZXR7cmVzdWx0OmF9PW47aWYodm9pZCAwPT09YSl0aHJvdyBuZXcgby5UeXBlZEVycm9yKGBFeGNlZWRlZCAke3RoaXMub3B0aW9ucy5yZXRyaWVzfSBhdHRlbXB0cyBmb3IgcmVxdWVzdCB0byAke2V9LmAsIlJldHJpZXNFeGNlZWRlZCIpO3JldHVybiBhfX1yLkpzb25ScGNQcm92aWRlcj1ofSw5MjE3OCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkZhaWxvdmVyUnBjUHJvdmlkZXI9dm9pZCAwO2xldCBuPWUucig4ODQzNCksaT1lLnIoMzYzODUpLG89ZS5yKDI1MTA2KTtjbGFzcyBhIGV4dGVuZHMgby5Qcm92aWRlcntwcm92aWRlcnM7Y3VycmVudFByb3ZpZGVySW5kZXg7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoKSwwPT09ZS5sZW5ndGgpdGhyb3cgRXJyb3IoIkF0IGxlYXN0IG9uZSBwcm92aWRlciBtdXN0IGJlIHNwZWNpZmllZCIpO3RoaXMucHJvdmlkZXJzPWUsdGhpcy5jdXJyZW50UHJvdmlkZXJJbmRleD0wfXN3aXRjaFRvTmV4dFByb3ZpZGVyKCl7MSE9PXRoaXMucHJvdmlkZXJzLmxlbmd0aCYmKHRoaXMucHJvdmlkZXJzLmxlbmd0aC0xPD10aGlzLmN1cnJlbnRQcm92aWRlckluZGV4P3RoaXMuY3VycmVudFByb3ZpZGVySW5kZXg9MDp0aGlzLmN1cnJlbnRQcm92aWRlckluZGV4Kz0xLG4uTG9nZ2VyLmRlYnVnKGBTd2l0Y2hlZCB0byBwcm92aWRlciBhdCB0aGUgaW5kZXggJHt0aGlzLmN1cnJlbnRQcm92aWRlckluZGV4fWApKX1nZXQgY3VycmVudFByb3ZpZGVyKCl7bGV0IGU9dGhpcy5wcm92aWRlcnNbdGhpcy5jdXJyZW50UHJvdmlkZXJJbmRleF07aWYoIWUpdGhyb3cgRXJyb3IoYFByb3ZpZGVyIHdhc24ndCBmb3VuZCBhdCBpbmRleCAke3RoaXMuY3VycmVudFByb3ZpZGVySW5kZXh9YCk7cmV0dXJuIGV9YXN5bmMgd2l0aEJhY2tvZmYoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLnByb3ZpZGVycy5sZW5ndGg7dCsrKXRyeXtsZXQgdD1hd2FpdCBlKHRoaXMuY3VycmVudFByb3ZpZGVyKTtpZih0KXJldHVybiB0fWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSksdGhpcy5zd2l0Y2hUb05leHRQcm92aWRlcigpfXRocm93IG5ldyBpLlR5cGVkRXJyb3IoYEV4Y2VlZGVkICR7dGhpcy5wcm92aWRlcnMubGVuZ3RofSBwcm92aWRlcnMgdG8gZXhlY3V0ZSByZXF1ZXN0YCwiUmV0cmllc0V4Y2VlZGVkIil9YXN5bmMgc3RhdHVzKCl7cmV0dXJuIHRoaXMud2l0aEJhY2tvZmYoZT0+ZS5zdGF0dXMoKSl9YXN5bmMgc2VuZFRyYW5zYWN0aW9uVW50aWwoZSx0KXtyZXR1cm4gdGhpcy53aXRoQmFja29mZihyPT5yLnNlbmRUcmFuc2FjdGlvblVudGlsKGUsdCkpfWFzeW5jIHNlbmRUcmFuc2FjdGlvbihlKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZih0PT50LnNlbmRUcmFuc2FjdGlvbihlKSl9YXN5bmMgc2VuZFRyYW5zYWN0aW9uQXN5bmMoZSl7cmV0dXJuIHRoaXMud2l0aEJhY2tvZmYodD0+dC5zZW5kVHJhbnNhY3Rpb25Bc3luYyhlKSl9YXN5bmMgdHhTdGF0dXMoZSx0LHIpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKG49Pm4udHhTdGF0dXMoZSx0LHIpKX1hc3luYyB0eFN0YXR1c1JlY2VpcHRzKGUsdCxyKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZihuPT5uLnR4U3RhdHVzUmVjZWlwdHMoZSx0LHIpKX1hc3luYyBxdWVyeShlLHQpe3JldHVybiB0P3RoaXMud2l0aEJhY2tvZmYocj0+ci5xdWVyeShlLHQpKTp0aGlzLndpdGhCYWNrb2ZmKHQ9PnQucXVlcnkoZSkpfWFzeW5jIGJsb2NrKGUpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKHQ9PnQuYmxvY2soZSkpfWFzeW5jIGJsb2NrQ2hhbmdlcyhlKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZih0PT50LmJsb2NrQ2hhbmdlcyhlKSl9YXN5bmMgY2h1bmsoZSl7cmV0dXJuIHRoaXMud2l0aEJhY2tvZmYodD0+dC5jaHVuayhlKSl9YXN5bmMgdmFsaWRhdG9ycyhlKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZih0PT50LnZhbGlkYXRvcnMoZSkpfWFzeW5jIGV4cGVyaW1lbnRhbF9wcm90b2NvbENvbmZpZyhlKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZih0PT50LmV4cGVyaW1lbnRhbF9wcm90b2NvbENvbmZpZyhlKSl9YXN5bmMgbGlnaHRDbGllbnRQcm9vZihlKXtyZXR1cm4gdGhpcy53aXRoQmFja29mZih0PT50LmxpZ2h0Q2xpZW50UHJvb2YoZSkpfWFzeW5jIG5leHRMaWdodENsaWVudEJsb2NrKGUpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKHQ9PnQubmV4dExpZ2h0Q2xpZW50QmxvY2soZSkpfWFzeW5jIGFjY2Vzc0tleUNoYW5nZXMoZSx0KXtyZXR1cm4gdGhpcy53aXRoQmFja29mZihyPT5yLmFjY2Vzc0tleUNoYW5nZXMoZSx0KSl9YXN5bmMgc2luZ2xlQWNjZXNzS2V5Q2hhbmdlcyhlLHQpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKHI9PnIuc2luZ2xlQWNjZXNzS2V5Q2hhbmdlcyhlLHQpKX1hc3luYyBhY2NvdW50Q2hhbmdlcyhlLHQpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKHI9PnIuYWNjb3VudENoYW5nZXMoZSx0KSl9YXN5bmMgY29udHJhY3RTdGF0ZUNoYW5nZXMoZSx0LHI9IiIpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKG49Pm4uY29udHJhY3RTdGF0ZUNoYW5nZXMoZSx0LHIpKX1hc3luYyBjb250cmFjdENvZGVDaGFuZ2VzKGUsdCl7cmV0dXJuIHRoaXMud2l0aEJhY2tvZmYocj0+ci5jb250cmFjdENvZGVDaGFuZ2VzKGUsdCkpfWFzeW5jIGdhc1ByaWNlKGUpe3JldHVybiB0aGlzLndpdGhCYWNrb2ZmKHQ9PnQuZ2FzUHJpY2UoZSkpfX1yLkZhaWxvdmVyUnBjUHJvdmlkZXI9YX0sMjQyODQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Qcm92aWRlcj1yLkZhaWxvdmVyUnBjUHJvdmlkZXI9ci5Kc29uUnBjUHJvdmlkZXI9ci5leHBvbmVudGlhbEJhY2tvZmY9dm9pZCAwO3ZhciBuPWUucig3MDU2Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImV4cG9uZW50aWFsQmFja29mZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZXhwb25lbnRpYWxCYWNrb2ZmfX0pO3ZhciBpPWUucigzOTM3OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkpzb25ScGNQcm92aWRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuSnNvblJwY1Byb3ZpZGVyfX0pO3ZhciBvPWUucig5MjE3OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkZhaWxvdmVyUnBjUHJvdmlkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkZhaWxvdmVyUnBjUHJvdmlkZXJ9fSk7dmFyIGE9ZS5yKDI1MTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiUHJvdmlkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlByb3ZpZGVyfX0pfSw2NzYyNiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkFzc2lnbmFibGU9dm9pZCAwO2NsYXNzIG57Y29uc3RydWN0b3IoZSl7T2JqZWN0LmtleXMoZSkubWFwKHQ9Pnt0aGlzW3RdPWVbdF19KX19ci5Bc3NpZ25hYmxlPW59LDYwNTM5LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRW51bT12b2lkIDA7Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZigxIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXRocm93IEVycm9yKCJFbnVtIGNhbiBvbmx5IHRha2Ugc2luZ2xlIHZhbHVlIik7T2JqZWN0LmtleXMoZSkubWFwKHQ9Pnt0aGlzW3RdPWVbdF19KX19ci5FbnVtPW59LDUyMjg2LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRXJyb3JDb250ZXh0PXIuVHlwZWRFcnJvcj1yLkFyZ3VtZW50VHlwZUVycm9yPXIuUG9zaXRpb25hbEFyZ3NFcnJvcj12b2lkIDA7Y2xhc3MgbiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNvbnRyYWN0IG1ldGhvZCBjYWxscyBleHBlY3QgbmFtZWQgYXJndW1lbnRzIHdyYXBwZWQgaW4gb2JqZWN0LCBlLmcuIHsgYXJnTmFtZTE6IGFyZ1ZhbHVlMSwgYXJnTmFtZTI6IGFyZ1ZhbHVlMiB9Iil9fXIuUG9zaXRpb25hbEFyZ3NFcnJvcj1uO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoYEV4cGVjdGVkICR7dH0gZm9yICcke2V9JyBhcmd1bWVudCwgYnV0IGdvdCAnJHtKU09OLnN0cmluZ2lmeShyKX0nYCl9fXIuQXJndW1lbnRUeXBlRXJyb3I9aTtjbGFzcyBvIGV4dGVuZHMgRXJyb3J7dHlwZTtjb250ZXh0O2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcihlKSx0aGlzLnR5cGU9dHx8IlVudHlwZWRFcnJvciIsdGhpcy5jb250ZXh0PXJ9fXIuVHlwZWRFcnJvcj1vO2NsYXNzIGF7dHJhbnNhY3Rpb25IYXNoO2NvbnN0cnVjdG9yKGUpe3RoaXMudHJhbnNhY3Rpb25IYXNoPWV9fXIuRXJyb3JDb250ZXh0PWF9LDQyOTc1LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuSWRUeXBlPXZvaWQgMCxmdW5jdGlvbihlKXtlLlRyYW5zYWN0aW9uPSJ0cmFuc2FjdGlvbiIsZS5SZWNlaXB0PSJyZWNlaXB0In0obnx8KHIuSWRUeXBlPW49e30pKX0sNDcyNDYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWM9ci5FeGVjdXRpb25TdGF0dXNCYXNpYz12b2lkIDAsZnVuY3Rpb24oZSl7ZS5Vbmtub3duPSJVbmtub3duIixlLlBlbmRpbmc9IlBlbmRpbmciLGUuRmFpbHVyZT0iRmFpbHVyZSJ9KG58fChyLkV4ZWN1dGlvblN0YXR1c0Jhc2ljPW49e30pKSxmdW5jdGlvbihlKXtlLk5vdFN0YXJ0ZWQ9Ik5vdFN0YXJ0ZWQiLGUuU3RhcnRlZD0iU3RhcnRlZCIsZS5GYWlsdXJlPSJGYWlsdXJlIn0oaXx8KHIuRmluYWxFeGVjdXRpb25TdGF0dXNCYXNpYz1pPXt9KSl9LDE5MTk1LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuRmluYWxFeGVjdXRpb25TdGF0dXNCYXNpYz1yLkV4ZWN1dGlvblN0YXR1c0Jhc2ljPXIuSWRUeXBlPXZvaWQgMDt2YXIgbj1lLnIoNDI5NzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJJZFR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLklkVHlwZX19KTt2YXIgaT1lLnIoNDcyNDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJFeGVjdXRpb25TdGF0dXNCYXNpYyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuRXhlY3V0aW9uU3RhdHVzQmFzaWN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkZpbmFsRXhlY3V0aW9uU3RhdHVzQmFzaWN9fSl9LDg2NTUxLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7KCFpfHwoImdldCJpbiBpPyF0Ll9fZXNNb2R1bGU6aS53cml0YWJsZXx8aS5jb25maWd1cmFibGUpKSYmKGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixpKX06ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksZVtuXT10W3JdfSksaT1lLmUmJmUuZS5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpImRlZmF1bHQiPT09cnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscil8fG4odCxlLHIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaShlLnIoNjc2MjYpLHIpLGkoZS5yKDYwNTM5KSxyKSxpKGUucig1MjI4NiksciksaShlLnIoMTkxOTUpLHIpfSw2ODk3MCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkRFRkFVTFRfRlVOQ1RJT05fQ0FMTF9HQVM9dm9pZCAwLHIuREVGQVVMVF9GVU5DVElPTl9DQUxMX0dBUz0zMDAwMDAwMDAwMDAwMG59LDcyNjUxLChlLHQscik9Pnt0LmV4cG9ydHM9e0dhc0xpbWl0RXhjZWVkZWQ6IkV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBnYXMgYWxsb3dlZCB0byBidXJuIHBlciBjb250cmFjdCIsTWV0aG9kRW1wdHlOYW1lOiJNZXRob2QgbmFtZSBpcyBlbXB0eSIsV2FzbWVyQ29tcGlsZUVycm9yOiJXYXNtZXIgY29tcGlsYXRpb24gZXJyb3I6IHt7bXNnfX0iLEd1ZXN0UGFuaWM6IlNtYXJ0IGNvbnRyYWN0IHBhbmlja2VkOiB7e3BhbmljX21zZ319IixNZW1vcnk6IkVycm9yIGNyZWF0aW5nIFdhc20gbWVtb3J5IixHYXNFeGNlZWRlZDoiRXhjZWVkZWQgdGhlIHByZXBhaWQgZ2FzIixNZXRob2RVVEY4RXJyb3I6Ik1ldGhvZCBuYW1lIGlzIG5vdCB2YWxpZCBVVEY4IHN0cmluZyIsQmFkVVRGMTY6IlN0cmluZyBlbmNvZGluZyBpcyBiYWQgVVRGLTE2IHNlcXVlbmNlIixXYXNtVHJhcDoiV2ViQXNzZW1ibHkgdHJhcDoge3ttc2d9fSIsR2FzSW5zdHJ1bWVudGF0aW9uOiJHYXMgaW5zdHJ1bWVudGF0aW9uIGZhaWxlZCBvciBjb250cmFjdCBoYXMgZGVuaWVkIGluc3RydWN0aW9ucy4iLEludmFsaWRQcm9taXNlSW5kZXg6Int7cHJvbWlzZV9pZHh9fSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIHByb21pc2VzIixJbnZhbGlkUHJvbWlzZVJlc3VsdEluZGV4OiJBY2Nlc3NlZCBpbnZhbGlkIHByb21pc2UgcmVzdWx0IGluZGV4OiB7e3Jlc3VsdF9pZHh9fSIsRGVzZXJpYWxpemF0aW9uOiJFcnJvciBoYXBwZW5lZCB3aGlsZSBkZXNlcmlhbGl6aW5nIHRoZSBtb2R1bGUiLE1ldGhvZE5vdEZvdW5kOiJDb250cmFjdCBtZXRob2QgaXMgbm90IGZvdW5kIixJbnZhbGlkUmVnaXN0ZXJJZDoiQWNjZXNzZWQgaW52YWxpZCByZWdpc3RlciBpZDoge3tyZWdpc3Rlcl9pZH19IixJbnZhbGlkUmVjZWlwdEluZGV4OiJWTSBMb2dpYyByZXR1cm5lZCBhbiBpbnZhbGlkIHJlY2VpcHQgaW5kZXg6IHt7cmVjZWlwdF9pbmRleH19IixFbXB0eU1ldGhvZE5hbWU6Ik1ldGhvZCBuYW1lIGlzIGVtcHR5IGluIGNvbnRyYWN0IGNhbGwiLENhbm5vdFJldHVybkpvaW50UHJvbWlzZToiUmV0dXJuaW5nIGpvaW50IHByb21pc2UgaXMgY3VycmVudGx5IHByb2hpYml0ZWQiLFN0YWNrSGVpZ2h0SW5zdHJ1bWVudGF0aW9uOiJTdGFjayBpbnN0cnVtZW50YXRpb24gZmFpbGVkIixDb2RlRG9lc05vdEV4aXN0OiJDYW5ub3QgZmluZCBjb250cmFjdCBjb2RlIGZvciBhY2NvdW50IHt7YWNjb3VudF9pZH19IixNZXRob2RJbnZhbGlkU2lnbmF0dXJlOiJJbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUiLEludGVnZXJPdmVyZmxvdzoiSW50ZWdlciBvdmVyZmxvdyBoYXBwZW5lZCBkdXJpbmcgY29udHJhY3QgZXhlY3V0aW9uIixNZW1vcnlBY2Nlc3NWaW9sYXRpb246Ik1lbW9yeUFjY2Vzc1Zpb2xhdGlvbiIsSW52YWxpZEl0ZXJhdG9ySW5kZXg6Ikl0ZXJhdG9yIGluZGV4IHt7aXRlcmF0b3JfaW5kZXh9fSBkb2VzIG5vdCBleGlzdCIsSXRlcmF0b3JXYXNJbnZhbGlkYXRlZDoiSXRlcmF0b3Ige3tpdGVyYXRvcl9pbmRleH19IHdhcyBpbnZhbGlkYXRlZCBhZnRlciBpdHMgY3JlYXRpb24gYnkgcGVyZm9ybWluZyBhIG11dGFibGUgb3BlcmF0aW9uIG9uIHRyaWUiLEludmFsaWRBY2NvdW50SWQ6IlZNIExvZ2ljIHJldHVybmVkIGFuIGludmFsaWQgYWNjb3VudCBpZCIsU2VyaWFsaXphdGlvbjoiRXJyb3IgaGFwcGVuZWQgd2hpbGUgc2VyaWFsaXppbmcgdGhlIG1vZHVsZSIsQ2Fubm90QXBwZW5kQWN0aW9uVG9Kb2ludFByb21pc2U6IkFjdGlvbnMgY2FuIG9ubHkgYmUgYXBwZW5kZWQgdG8gbm9uLWpvaW50IHByb21pc2UuIixJbnRlcm5hbE1lbW9yeURlY2xhcmVkOiJJbnRlcm5hbCBtZW1vcnkgZGVjbGFyYXRpb24gaGFzIGJlZW4gZm91bmQgaW4gdGhlIG1vZHVsZSIsSW5zdGFudGlhdGU6IkVycm9yIGhhcHBlbmVkIGR1cmluZyBpbnN0YW50aWF0aW9uIixQcm9oaWJpdGVkSW5WaWV3OiJ7e21ldGhvZF9uYW1lfX0gaXMgbm90IGFsbG93ZWQgaW4gdmlldyBjYWxscyIsSW52YWxpZE1ldGhvZE5hbWU6IlZNIExvZ2ljIHJldHVybmVkIGFuIGludmFsaWQgbWV0aG9kIG5hbWUiLEJhZFVURjg6IlN0cmluZyBlbmNvZGluZyBpcyBiYWQgVVRGLTggc2VxdWVuY2UiLEJhbGFuY2VFeGNlZWRlZDoiRXhjZWVkZWQgdGhlIGFjY291bnQgYmFsYW5jZSIsTGlua0Vycm9yOiJXYXNtIGNvbnRyYWN0IGxpbmsgZXJyb3I6IHt7bXNnfX0iLEludmFsaWRQdWJsaWNLZXk6IlZNIExvZ2ljIHByb3ZpZGVkIGFuIGludmFsaWQgcHVibGljIGtleSIsQWN0b3JOb1Blcm1pc3Npb246IkFjdG9yIHt7YWN0b3JfaWR9fSBkb2Vzbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2NvdW50IHt7YWNjb3VudF9pZH19IHRvIGNvbXBsZXRlIHRoZSBhY3Rpb24iLExhY2tCYWxhbmNlRm9yU3RhdGU6IlRoZSBhY2NvdW50IHt7YWNjb3VudF9pZH19IHdvdWxkbid0IGhhdmUgZW5vdWdoIGJhbGFuY2UgdG8gY292ZXIgc3RvcmFnZSwgcmVxdWlyZWQgdG8gaGF2ZSB7e2Ftb3VudH19IHlvY3RvTkVBUiBtb3JlIixSZWNlaXZlck1pc21hdGNoOiJXcm9uZyBBY2Nlc3NLZXkgdXNlZCBmb3IgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uIGlzIHNlbnQgdG8gcmVjZWl2ZXJfaWQ9e3t0eF9yZWNlaXZlcn19LCBidXQgaXMgc2lnbmVkIHdpdGggZnVuY3Rpb24gY2FsbCBhY2Nlc3Mga2V5IHRoYXQgcmVzdHJpY3RlZCB0byBvbmx5IHVzZSB3aXRoIHJlY2VpdmVyX2lkPXt7YWtfcmVjZWl2ZXJ9fS4gRWl0aGVyIGNoYW5nZSByZWNlaXZlcl9pZCBpbiB5b3VyIHRyYW5zYWN0aW9uIG9yIHN3aXRjaCB0byB1c2UgYSBGdWxsQWNjZXNzS2V5LiIsQ29zdE92ZXJmbG93OiJUcmFuc2FjdGlvbiBnYXMgb3IgYmFsYW5jZSBjb3N0IGlzIHRvbyBoaWdoIixJbnZhbGlkU2lnbmF0dXJlOiJUcmFuc2FjdGlvbiBpcyBub3Qgc2lnbmVkIHdpdGggdGhlIGdpdmVuIHB1YmxpYyBrZXkiLEFjY2Vzc0tleU5vdEZvdW5kOidTaWduZXIgInt7YWNjb3VudF9pZH19IiBkb2VzblwndCBoYXZlIGFjY2VzcyBrZXkgd2l0aCB0aGUgZ2l2ZW4gcHVibGljX2tleSB7e3B1YmxpY19rZXl9fScsTm90RW5vdWdoQmFsYW5jZToiU2VuZGVyIHt7c2lnbmVyX2lkfX0gZG9lcyBub3QgaGF2ZSBlbm91Z2ggYmFsYW5jZSB7eyNmb3JtYXROZWFyfX17e2JhbGFuY2V9fXt7L2Zvcm1hdE5lYXJ9fSBmb3Igb3BlcmF0aW9uIGNvc3Rpbmcge3sjZm9ybWF0TmVhcn19e3tjb3N0fX17ey9mb3JtYXROZWFyfX0iLE5vdEVub3VnaEFsbG93YW5jZToiQWNjZXNzIEtleSB7YWNjb3VudF9pZH06e3B1YmxpY19rZXl9IGRvZXMgbm90IGhhdmUgZW5vdWdoIGJhbGFuY2Uge3sjZm9ybWF0TmVhcn19e3thbGxvd2FuY2V9fXt7L2Zvcm1hdE5lYXJ9fSBmb3IgdHJhbnNhY3Rpb24gY29zdGluZyB7eyNmb3JtYXROZWFyfX17e2Nvc3R9fXt7L2Zvcm1hdE5lYXJ9fSIsRXhwaXJlZDoiVHJhbnNhY3Rpb24gaGFzIGV4cGlyZWQiLERlbGV0ZUFjY291bnRTdGFraW5nOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGlzIHN0YWtpbmcgYW5kIGNhbiBub3QgYmUgZGVsZXRlZCIsU2lnbmVyRG9lc05vdEV4aXN0OiJTaWduZXIge3tzaWduZXJfaWR9fSBkb2VzIG5vdCBleGlzdCIsVHJpZXNUb1N0YWtlOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IHRyaWVkIHRvIHN0YWtlIHt7I2Zvcm1hdE5lYXJ9fXt7c3Rha2V9fXt7L2Zvcm1hdE5lYXJ9fSwgYnV0IGhhcyBzdGFrZWQge3sjZm9ybWF0TmVhcn19e3tsb2NrZWR9fXt7L2Zvcm1hdE5lYXJ9fSBhbmQgb25seSBoYXMge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0iLEFkZEtleUFscmVhZHlFeGlzdHM6IlRoZSBwdWJsaWMga2V5IHt7cHVibGljX2tleX19IGlzIGFscmVhZHkgdXNlZCBmb3IgYW4gZXhpc3RpbmcgYWNjZXNzIGtleSIsSW52YWxpZFNpZ25lcjoiSW52YWxpZCBzaWduZXIgYWNjb3VudCBJRCB7e3NpZ25lcl9pZH19IGFjY29yZGluZyB0byByZXF1aXJlbWVudHMiLENyZWF0ZUFjY291bnROb3RBbGxvd2VkOiJUaGUgbmV3IGFjY291bnRfaWQge3thY2NvdW50X2lkfX0gY2FuJ3QgYmUgY3JlYXRlZCBieSB7e3ByZWRlY2Vzc29yX2lkfX0iLFJlcXVpcmVzRnVsbEFjY2VzczoiVGhlIHRyYW5zYWN0aW9uIGNvbnRhaW5zIG1vcmUgdGhlbiBvbmUgYWN0aW9uLCBidXQgaXQgd2FzIHNpZ25lZCB3aXRoIGFuIGFjY2VzcyBrZXkgd2hpY2ggYWxsb3dzIHRyYW5zYWN0aW9uIHRvIGFwcGx5IG9ubHkgb25lIHNwZWNpZmljIGFjdGlvbi4gVG8gYXBwbHkgbW9yZSB0aGVuIG9uZSBhY3Rpb25zIFRYIG11c3QgYmUgc2lnbmVkIHdpdGggYSBmdWxsIGFjY2VzcyBrZXkiLFRyaWVzVG9VbnN0YWtlOiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGlzIG5vdCB5ZXQgc3Rha2VkLCBidXQgdHJpZWQgdG8gdW5zdGFrZSIsSW52YWxpZE5vbmNlOiJUcmFuc2FjdGlvbiBub25jZSB7e3R4X25vbmNlfX0gbXVzdCBiZSBsYXJnZXIgdGhhbiBub25jZSBvZiB0aGUgdXNlZCBhY2Nlc3Mga2V5IHt7YWtfbm9uY2V9fSIsQWNjb3VudEFscmVhZHlFeGlzdHM6IkNhbid0IGNyZWF0ZSBhIG5ldyBhY2NvdW50IHt7YWNjb3VudF9pZH19LCBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzIixJbnZhbGlkQ2hhaW46IlRyYW5zYWN0aW9uIHBhcmVudCBibG9jayBoYXNoIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IGNoYWluIixBY2NvdW50RG9lc05vdEV4aXN0OiJDYW4ndCBjb21wbGV0ZSB0aGUgYWN0aW9uIGJlY2F1c2UgYWNjb3VudCB7e2FjY291bnRfaWR9fSBkb2Vzbid0IGV4aXN0IixBY2Nlc3NLZXlEb2VzTm90RXhpc3Q6IkNhbid0IGNvbXBsZXRlIHRoZSBhY3Rpb24gYmVjYXVzZSBhY2Nlc3Mga2V5IHt7cHVibGljX2tleX19IGRvZXNuJ3QgZXhpc3QiLE1ldGhvZE5hbWVNaXNtYXRjaDoiVHJhbnNhY3Rpb24gbWV0aG9kIG5hbWUge3ttZXRob2RfbmFtZX19IGlzbid0IGFsbG93ZWQgYnkgdGhlIGFjY2VzcyBrZXkiLERlbGV0ZUFjY291bnRIYXNSZW50OiJBY2NvdW50IHt7YWNjb3VudF9pZH19IGNhbid0IGJlIGRlbGV0ZWQuIEl0IGhhcyB7eyNmb3JtYXROZWFyfX17e2JhbGFuY2V9fXt7L2Zvcm1hdE5lYXJ9fSwgd2hpY2ggaXMgZW5vdWdoIHRvIGNvdmVyIHRoZSByZW50IixEZWxldGVBY2NvdW50SGFzRW5vdWdoQmFsYW5jZToiQWNjb3VudCB7e2FjY291bnRfaWR9fSBjYW4ndCBiZSBkZWxldGVkLiBJdCBoYXMge3sjZm9ybWF0TmVhcn19e3tiYWxhbmNlfX17ey9mb3JtYXROZWFyfX0sIHdoaWNoIGlzIGVub3VnaCB0byBjb3ZlciBpdCdzIHN0b3JhZ2UiLEludmFsaWRSZWNlaXZlcjoiSW52YWxpZCByZWNlaXZlciBhY2NvdW50IElEIHt7cmVjZWl2ZXJfaWR9fSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIixEZWxldGVLZXlEb2VzTm90RXhpc3Q6IkFjY291bnQge3thY2NvdW50X2lkfX0gdHJpZXMgdG8gcmVtb3ZlIGFuIGFjY2VzcyBrZXkgdGhhdCBkb2Vzbid0IGV4aXN0IixUaW1lb3V0OiJUaW1lb3V0IGV4Y2VlZGVkIixDbG9zZWQ6IkNvbm5lY3Rpb24gY2xvc2VkIixTaGFyZENvbmdlc3RlZDoiU2hhcmQge3tzaGFyZF9pZH19IHJlamVjdGVkIHRoZSB0cmFuc2FjdGlvbiBkdWUgdG8gY29uZ2VzdGlvbiBsZXZlbCB7e2Nvbmdlc3Rpb25fbGV2ZWx9fSwgdHJ5IGFnYWluIGxhdGVyIixTaGFyZFN0dWNrOiJTaGFyZCB7e3NoYXJkX2lkfX0gcmVqZWN0ZWQgdGhlIHRyYW5zYWN0aW9uIGJlY2F1c2UgaXQgbWlzc2VkIHt7bWlzc2VkX2NodW5rc319IGNodW5rcyBhbmQgbmVlZHMgdG8gcmVjb3ZlciBiZWZvcmUgYWNjZXB0aW5nIG5ldyB0cmFuc2FjdGlvbnMsIHRyeSBhZ2FpbiBsYXRlciJ9fSw4NzU3OCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuZSYmZS5lLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5FcnJvck1lc3NhZ2VzPXZvaWQgMCxyLkVycm9yTWVzc2FnZXM9bihlLnIoNzI2NTEpKS5kZWZhdWx0fSw0NjM5LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuYmFzZURlY29kZT1yLmJhc2VFbmNvZGU9ci5wYXJzZU5lYXJBbW91bnQ9ci5mb3JtYXROZWFyQW1vdW50PXIuTkVBUl9OT01JTkFUSU9OPXIuTkVBUl9OT01JTkFUSU9OX0VYUD12b2lkIDA7bGV0IG49ZS5yKDU2MzMpO3IuTkVBUl9OT01JTkFUSU9OX0VYUD0yNCxyLk5FQVJfTk9NSU5BVElPTj0xMG4qKkJpZ0ludChyLk5FQVJfTk9NSU5BVElPTl9FWFApO2xldCBpPVtdLG89MTBuO2ZvcihsZXQgZT0wLHQ9NW47ZTxyLk5FQVJfTk9NSU5BVElPTl9FWFA7ZSsrLHQqPW8paVtlXT10O2Z1bmN0aW9uIGEoZSx0PXIuTkVBUl9OT01JTkFUSU9OX0VYUCl7bGV0IG49QmlnSW50KGUpO2lmKHQhPT1yLk5FQVJfTk9NSU5BVElPTl9FWFApe2xldCBlPXIuTkVBUl9OT01JTkFUSU9OX0VYUC10LTE7ZT4wJiYobis9aVtlXSl9bGV0IG89KGU9bi50b1N0cmluZygpKS5zdWJzdHJpbmcoMCxlLmxlbmd0aC1yLk5FQVJfTk9NSU5BVElPTl9FWFApfHwiMCIscz1lLnN1YnN0cmluZyhlLmxlbmd0aC1yLk5FQVJfTk9NSU5BVElPTl9FWFApLnBhZFN0YXJ0KHIuTkVBUl9OT01JTkFUSU9OX0VYUCwiMCIpLnN1YnN0cmluZygwLHQpO3JldHVybiB1KGAke2Qobyl9LiR7c31gKX1mdW5jdGlvbiBzKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PShlPWMoZSkpLnNwbGl0KCIuIiksbj10WzBdLGk9dFsxXXx8IiI7aWYodC5sZW5ndGg+Mnx8aS5sZW5ndGg+ci5ORUFSX05PTUlOQVRJT05fRVhQKXRocm93IEVycm9yKGBDYW5ub3QgcGFyc2UgJyR7ZX0nIGFzIE5FQVIgYW1vdW50YCk7cmV0dXJuIGYobitpLnBhZEVuZChyLk5FQVJfTk9NSU5BVElPTl9FWFAsIjAiKSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5yZXBsYWNlKC8sL2csIiIpLnRyaW0oKX1mdW5jdGlvbiB1KGUpe3JldHVybiBlLnJlcGxhY2UoL1wuPzAqJC8sIiIpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIiI9PT0oZT1lLnJlcGxhY2UoL14wKy8sIiIpKT8iMCI6ZX1mdW5jdGlvbiBkKGUpe2xldCB0PS8oLT9cZCspKFxkezN9KS87Zm9yKDt0LnRlc3QoZSk7KWU9ZS5yZXBsYWNlKHQsIiQxLCQyIik7cmV0dXJuIGV9ci5mb3JtYXROZWFyQW1vdW50PWEsci5wYXJzZU5lYXJBbW91bnQ9cyxyLmJhc2VFbmNvZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZS5jaGFyQ29kZUF0KHIpKTtlPW5ldyBVaW50OEFycmF5KHQpfXJldHVybiBuLmJhc2U1OC5lbmNvZGUoZSl9LHIuYmFzZURlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gbi5iYXNlNTguZGVjb2RlKGUpfX0sNzQ1MTMsKGUsdCxyKT0+e3QuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNjaGVtYSI6eyJBY2Nlc3NLZXlOb3RGb3VuZCI6eyJuYW1lIjoiQWNjZXNzS2V5Tm90Rm91bmQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJwdWJsaWNfa2V5IjoiIn19LCJBY2NvdW50QWxyZWFkeUV4aXN0cyI6eyJuYW1lIjoiQWNjb3VudEFscmVhZHlFeGlzdHMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkFjY291bnREb2VzTm90RXhpc3QiOnsibmFtZSI6IkFjY291bnREb2VzTm90RXhpc3QiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkFjdGlvbkVycm9yIjp7Im5hbWUiOiJBY3Rpb25FcnJvciIsInN1YnR5cGVzIjpbIkFjY291bnRBbHJlYWR5RXhpc3RzIiwiQWNjb3VudERvZXNOb3RFeGlzdCIsIkNyZWF0ZUFjY291bnRPbmx5QnlSZWdpc3RyYXIiLCJDcmVhdGVBY2NvdW50Tm90QWxsb3dlZCIsIkFjdG9yTm9QZXJtaXNzaW9uIiwiRGVsZXRlS2V5RG9lc05vdEV4aXN0IiwiQWRkS2V5QWxyZWFkeUV4aXN0cyIsIkRlbGV0ZUFjY291bnRTdGFraW5nIiwiTGFja0JhbGFuY2VGb3JTdGF0ZSIsIlRyaWVzVG9VbnN0YWtlIiwiVHJpZXNUb1N0YWtlIiwiSW5zdWZmaWNpZW50U3Rha2UiLCJGdW5jdGlvbkNhbGxFcnJvciIsIk5ld1JlY2VpcHRWYWxpZGF0aW9uRXJyb3IiLCJPbmx5SW1wbGljaXRBY2NvdW50Q3JlYXRpb25BbGxvd2VkIiwiRGVsZXRlQWNjb3VudFdpdGhMYXJnZVN0YXRlIiwiRGVsZWdhdGVBY3Rpb25JbnZhbGlkU2lnbmF0dXJlIiwiRGVsZWdhdGVBY3Rpb25TZW5kZXJEb2VzTm90TWF0Y2hUeFJlY2VpdmVyIiwiRGVsZWdhdGVBY3Rpb25FeHBpcmVkIiwiRGVsZWdhdGVBY3Rpb25BY2Nlc3NLZXlFcnJvciIsIkRlbGVnYXRlQWN0aW9uSW52YWxpZE5vbmNlIiwiRGVsZWdhdGVBY3Rpb25Ob25jZVRvb0xhcmdlIl0sInByb3BzIjp7ImluZGV4IjoiIn19LCJBY3Rpb25zVmFsaWRhdGlvbkVycm9yIjp7Im5hbWUiOiJBY3Rpb25zVmFsaWRhdGlvbkVycm9yIiwic3VidHlwZXMiOlsiRGVsZXRlQWN0aW9uTXVzdEJlRmluYWwiLCJUb3RhbFByZXBhaWRHYXNFeGNlZWRlZCIsIlRvdGFsTnVtYmVyT2ZBY3Rpb25zRXhjZWVkZWQiLCJBZGRLZXlNZXRob2ROYW1lc051bWJlck9mQnl0ZXNFeGNlZWRlZCIsIkFkZEtleU1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCIsIkludGVnZXJPdmVyZmxvdyIsIkludmFsaWRBY2NvdW50SWQiLCJDb250cmFjdFNpemVFeGNlZWRlZCIsIkZ1bmN0aW9uQ2FsbE1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCIsIkZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0xlbmd0aEV4Y2VlZGVkIiwiVW5zdWl0YWJsZVN0YWtpbmdLZXkiLCJGdW5jdGlvbkNhbGxaZXJvQXR0YWNoZWRHYXMiLCJEZWxlZ2F0ZUFjdGlvbk11c3RCZU9ubHlPbmUiLCJVbnN1cHBvcnRlZFByb3RvY29sRmVhdHVyZSJdLCJwcm9wcyI6e319LCJBY3Rvck5vUGVybWlzc2lvbiI6eyJuYW1lIjoiQWN0b3JOb1Blcm1pc3Npb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJhY3Rvcl9pZCI6IiJ9fSwiQWRkS2V5QWxyZWFkeUV4aXN0cyI6eyJuYW1lIjoiQWRkS2V5QWxyZWFkeUV4aXN0cyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiIsInB1YmxpY19rZXkiOiIifX0sIkFkZEtleU1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiQWRkS2V5TWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiQWRkS2V5TWV0aG9kTmFtZXNOdW1iZXJPZkJ5dGVzRXhjZWVkZWQiOnsibmFtZSI6IkFkZEtleU1ldGhvZE5hbWVzTnVtYmVyT2ZCeXRlc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInRvdGFsX251bWJlcl9vZl9ieXRlcyI6IiJ9fSwiQWx0Qm4xMjhJbnZhbGlkSW5wdXQiOnsibmFtZSI6IkFsdEJuMTI4SW52YWxpZElucHV0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtc2ciOiIifX0sIkJhZFVURjE2Ijp7Im5hbWUiOiJCYWRVVEYxNiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQmFkVVRGOCI6eyJuYW1lIjoiQmFkVVRGOCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQmFsYW5jZUV4Y2VlZGVkIjp7Im5hbWUiOiJCYWxhbmNlRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkJhbGFuY2VNaXNtYXRjaEVycm9yIjp7Im5hbWUiOiJCYWxhbmNlTWlzbWF0Y2hFcnJvciIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiZmluYWxfYWNjb3VudHNfYmFsYW5jZSI6IiIsImZpbmFsX3Bvc3Rwb25lZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwiZm9yd2FyZGVkX2J1ZmZlcmVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJpbmNvbWluZ19yZWNlaXB0c19iYWxhbmNlIjoiIiwiaW5jb21pbmdfdmFsaWRhdG9yX3Jld2FyZHMiOiIiLCJpbml0aWFsX2FjY291bnRzX2JhbGFuY2UiOiIiLCJpbml0aWFsX3Bvc3Rwb25lZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwibmV3X2J1ZmZlcmVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJuZXdfZGVsYXllZF9yZWNlaXB0c19iYWxhbmNlIjoiIiwib3RoZXJfYnVybnRfYW1vdW50IjoiIiwib3V0Z29pbmdfcmVjZWlwdHNfYmFsYW5jZSI6IiIsInByb2Nlc3NlZF9kZWxheWVkX3JlY2VpcHRzX2JhbGFuY2UiOiIiLCJzbGFzaGVkX2J1cm50X2Ftb3VudCI6IiIsInR4X2J1cm50X2Ftb3VudCI6IiJ9fSwiQ2FsbEluZGlyZWN0T09CIjp7Im5hbWUiOiJDYWxsSW5kaXJlY3RPT0IiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkNhbm5vdEFwcGVuZEFjdGlvblRvSm9pbnRQcm9taXNlIjp7Im5hbWUiOiJDYW5ub3RBcHBlbmRBY3Rpb25Ub0pvaW50UHJvbWlzZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQ2Fubm90UmV0dXJuSm9pbnRQcm9taXNlIjp7Im5hbWUiOiJDYW5ub3RSZXR1cm5Kb2ludFByb21pc2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkNvZGVEb2VzTm90RXhpc3QiOnsibmFtZSI6IkNvZGVEb2VzTm90RXhpc3QiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkNvbXBpbGF0aW9uRXJyb3IiOnsibmFtZSI6IkNvbXBpbGF0aW9uRXJyb3IiLCJzdWJ0eXBlcyI6WyJDb2RlRG9lc05vdEV4aXN0IiwiUHJlcGFyZUVycm9yIiwiV2FzbWVyQ29tcGlsZUVycm9yIl0sInByb3BzIjp7fX0sIkNvbnRyYWN0U2l6ZUV4Y2VlZGVkIjp7Im5hbWUiOiJDb250cmFjdFNpemVFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJzaXplIjoiIn19LCJDb3N0T3ZlcmZsb3ciOnsibmFtZSI6IkNvc3RPdmVyZmxvdyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiQ3JlYXRlQWNjb3VudE5vdEFsbG93ZWQiOnsibmFtZSI6IkNyZWF0ZUFjY291bnROb3RBbGxvd2VkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwicHJlZGVjZXNzb3JfaWQiOiIifX0sIkNyZWF0ZUFjY291bnRPbmx5QnlSZWdpc3RyYXIiOnsibmFtZSI6IkNyZWF0ZUFjY291bnRPbmx5QnlSZWdpc3RyYXIiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJwcmVkZWNlc3Nvcl9pZCI6IiIsInJlZ2lzdHJhcl9hY2NvdW50X2lkIjoiIn19LCJEZWxlZ2F0ZUFjdGlvbkV4cGlyZWQiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uRXhwaXJlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRGVsZWdhdGVBY3Rpb25JbnZhbGlkTm9uY2UiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uSW52YWxpZE5vbmNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJha19ub25jZSI6IiIsImRlbGVnYXRlX25vbmNlIjoiIn19LCJEZWxlZ2F0ZUFjdGlvbkludmFsaWRTaWduYXR1cmUiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uSW52YWxpZFNpZ25hdHVyZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRGVsZWdhdGVBY3Rpb25NdXN0QmVPbmx5T25lIjp7Im5hbWUiOiJEZWxlZ2F0ZUFjdGlvbk11c3RCZU9ubHlPbmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkRlbGVnYXRlQWN0aW9uTm9uY2VUb29MYXJnZSI6eyJuYW1lIjoiRGVsZWdhdGVBY3Rpb25Ob25jZVRvb0xhcmdlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJkZWxlZ2F0ZV9ub25jZSI6IiIsInVwcGVyX2JvdW5kIjoiIn19LCJEZWxlZ2F0ZUFjdGlvblNlbmRlckRvZXNOb3RNYXRjaFR4UmVjZWl2ZXIiOnsibmFtZSI6IkRlbGVnYXRlQWN0aW9uU2VuZGVyRG9lc05vdE1hdGNoVHhSZWNlaXZlciIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicmVjZWl2ZXJfaWQiOiIiLCJzZW5kZXJfaWQiOiIifX0sIkRlbGV0ZUFjY291bnRTdGFraW5nIjp7Im5hbWUiOiJEZWxldGVBY2NvdW50U3Rha2luZyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiRGVsZXRlQWNjb3VudFdpdGhMYXJnZVN0YXRlIjp7Im5hbWUiOiJEZWxldGVBY2NvdW50V2l0aExhcmdlU3RhdGUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIkRlbGV0ZUFjdGlvbk11c3RCZUZpbmFsIjp7Im5hbWUiOiJEZWxldGVBY3Rpb25NdXN0QmVGaW5hbCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRGVsZXRlS2V5RG9lc05vdEV4aXN0Ijp7Im5hbWUiOiJEZWxldGVLZXlEb2VzTm90RXhpc3QiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJwdWJsaWNfa2V5IjoiIn19LCJEZXBvc2l0V2l0aEZ1bmN0aW9uQ2FsbCI6eyJuYW1lIjoiRGVwb3NpdFdpdGhGdW5jdGlvbkNhbGwiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkRlcHJlY2F0ZWQiOnsibmFtZSI6IkRlcHJlY2F0ZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1ldGhvZF9uYW1lIjoiIn19LCJEZXNlcmlhbGl6YXRpb24iOnsibmFtZSI6IkRlc2VyaWFsaXphdGlvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiRUNSZWNvdmVyRXJyb3IiOnsibmFtZSI6IkVDUmVjb3ZlckVycm9yIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtc2ciOiIifX0sIkVkMjU1MTlWZXJpZnlJbnZhbGlkSW5wdXQiOnsibmFtZSI6IkVkMjU1MTlWZXJpZnlJbnZhbGlkSW5wdXQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1zZyI6IiJ9fSwiRW1wdHlNZXRob2ROYW1lIjp7Im5hbWUiOiJFbXB0eU1ldGhvZE5hbWUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkV4cGlyZWQiOnsibmFtZSI6IkV4cGlyZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkZ1bmN0aW9uQ2FsbEFyZ3VtZW50c0xlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJGdW5jdGlvbkNhbGxBcmd1bWVudHNMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIkZ1bmN0aW9uQ2FsbE1ldGhvZE5hbWVMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiRnVuY3Rpb25DYWxsTWV0aG9kTmFtZUxlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiRnVuY3Rpb25DYWxsWmVyb0F0dGFjaGVkR2FzIjp7Im5hbWUiOiJGdW5jdGlvbkNhbGxaZXJvQXR0YWNoZWRHYXMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkdhc0V4Y2VlZGVkIjp7Im5hbWUiOiJHYXNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiR2FzSW5zdHJ1bWVudGF0aW9uIjp7Im5hbWUiOiJHYXNJbnN0cnVtZW50YXRpb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkdhc0xpbWl0RXhjZWVkZWQiOnsibmFtZSI6Ikdhc0xpbWl0RXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkdlbmVyaWNUcmFwIjp7Im5hbWUiOiJHZW5lcmljVHJhcCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiR3Vlc3RQYW5pYyI6eyJuYW1lIjoiR3Vlc3RQYW5pYyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicGFuaWNfbXNnIjoiIn19LCJIb3N0RXJyb3IiOnsibmFtZSI6Ikhvc3RFcnJvciIsInN1YnR5cGVzIjpbIkJhZFVURjE2IiwiQmFkVVRGOCIsIkdhc0V4Y2VlZGVkIiwiR2FzTGltaXRFeGNlZWRlZCIsIkJhbGFuY2VFeGNlZWRlZCIsIkVtcHR5TWV0aG9kTmFtZSIsIkd1ZXN0UGFuaWMiLCJJbnRlZ2VyT3ZlcmZsb3ciLCJJbnZhbGlkUHJvbWlzZUluZGV4IiwiQ2Fubm90QXBwZW5kQWN0aW9uVG9Kb2ludFByb21pc2UiLCJDYW5ub3RSZXR1cm5Kb2ludFByb21pc2UiLCJJbnZhbGlkUHJvbWlzZVJlc3VsdEluZGV4IiwiSW52YWxpZFJlZ2lzdGVySWQiLCJJdGVyYXRvcldhc0ludmFsaWRhdGVkIiwiTWVtb3J5QWNjZXNzVmlvbGF0aW9uIiwiSW52YWxpZFJlY2VpcHRJbmRleCIsIkludmFsaWRJdGVyYXRvckluZGV4IiwiSW52YWxpZEFjY291bnRJZCIsIkludmFsaWRNZXRob2ROYW1lIiwiSW52YWxpZFB1YmxpY0tleSIsIlByb2hpYml0ZWRJblZpZXciLCJOdW1iZXJPZkxvZ3NFeGNlZWRlZCIsIktleUxlbmd0aEV4Y2VlZGVkIiwiVmFsdWVMZW5ndGhFeGNlZWRlZCIsIlRvdGFsTG9nTGVuZ3RoRXhjZWVkZWQiLCJOdW1iZXJQcm9taXNlc0V4Y2VlZGVkIiwiTnVtYmVySW5wdXREYXRhRGVwZW5kZW5jaWVzRXhjZWVkZWQiLCJSZXR1cm5lZFZhbHVlTGVuZ3RoRXhjZWVkZWQiLCJDb250cmFjdFNpemVFeGNlZWRlZCIsIkRlcHJlY2F0ZWQiLCJFQ1JlY292ZXJFcnJvciIsIkFsdEJuMTI4SW52YWxpZElucHV0IiwiRWQyNTUxOVZlcmlmeUludmFsaWRJbnB1dCJdLCJwcm9wcyI6e319LCJJbGxlZ2FsQXJpdGhtZXRpYyI6eyJuYW1lIjoiSWxsZWdhbEFyaXRobWV0aWMiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkluY29ycmVjdENhbGxJbmRpcmVjdFNpZ25hdHVyZSI6eyJuYW1lIjoiSW5jb3JyZWN0Q2FsbEluZGlyZWN0U2lnbmF0dXJlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbmRpcmVjdENhbGxUb051bGwiOnsibmFtZSI6IkluZGlyZWN0Q2FsbFRvTnVsbCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW5zdGFudGlhdGUiOnsibmFtZSI6Ikluc3RhbnRpYXRlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnN1ZmZpY2llbnRTdGFrZSI6eyJuYW1lIjoiSW5zdWZmaWNpZW50U3Rha2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJtaW5pbXVtX3N0YWtlIjoiIiwic3Rha2UiOiIifX0sIkludGVnZXJPdmVyZmxvdyI6eyJuYW1lIjoiSW50ZWdlck92ZXJmbG93Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnRlcm5hbE1lbW9yeURlY2xhcmVkIjp7Im5hbWUiOiJJbnRlcm5hbE1lbW9yeURlY2xhcmVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkQWNjZXNzS2V5RXJyb3IiOnsibmFtZSI6IkludmFsaWRBY2Nlc3NLZXlFcnJvciIsInN1YnR5cGVzIjpbIkFjY2Vzc0tleU5vdEZvdW5kIiwiUmVjZWl2ZXJNaXNtYXRjaCIsIk1ldGhvZE5hbWVNaXNtYXRjaCIsIlJlcXVpcmVzRnVsbEFjY2VzcyIsIk5vdEVub3VnaEFsbG93YW5jZSIsIkRlcG9zaXRXaXRoRnVuY3Rpb25DYWxsIl0sInByb3BzIjp7fX0sIkludmFsaWRBY2NvdW50SWQiOnsibmFtZSI6IkludmFsaWRBY2NvdW50SWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIkludmFsaWRDaGFpbiI6eyJuYW1lIjoiSW52YWxpZENoYWluIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkRGF0YVJlY2VpdmVySWQiOnsibmFtZSI6IkludmFsaWREYXRhUmVjZWl2ZXJJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiSW52YWxpZEl0ZXJhdG9ySW5kZXgiOnsibmFtZSI6IkludmFsaWRJdGVyYXRvckluZGV4Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJpdGVyYXRvcl9pbmRleCI6IiJ9fSwiSW52YWxpZE1ldGhvZE5hbWUiOnsibmFtZSI6IkludmFsaWRNZXRob2ROYW1lIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkTm9uY2UiOnsibmFtZSI6IkludmFsaWROb25jZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWtfbm9uY2UiOiIiLCJ0eF9ub25jZSI6IiJ9fSwiSW52YWxpZFByZWRlY2Vzc29ySWQiOnsibmFtZSI6IkludmFsaWRQcmVkZWNlc3NvcklkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJJbnZhbGlkUHJvbWlzZUluZGV4Ijp7Im5hbWUiOiJJbnZhbGlkUHJvbWlzZUluZGV4Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJwcm9taXNlX2lkeCI6IiJ9fSwiSW52YWxpZFByb21pc2VSZXN1bHRJbmRleCI6eyJuYW1lIjoiSW52YWxpZFByb21pc2VSZXN1bHRJbmRleCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicmVzdWx0X2lkeCI6IiJ9fSwiSW52YWxpZFB1YmxpY0tleSI6eyJuYW1lIjoiSW52YWxpZFB1YmxpY0tleSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiSW52YWxpZFJlY2VpcHRJbmRleCI6eyJuYW1lIjoiSW52YWxpZFJlY2VpcHRJbmRleCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsicmVjZWlwdF9pbmRleCI6IiJ9fSwiSW52YWxpZFJlY2VpdmVySWQiOnsibmFtZSI6IkludmFsaWRSZWNlaXZlcklkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIn19LCJJbnZhbGlkUmVnaXN0ZXJJZCI6eyJuYW1lIjoiSW52YWxpZFJlZ2lzdGVySWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InJlZ2lzdGVyX2lkIjoiIn19LCJJbnZhbGlkU2lnbmF0dXJlIjp7Im5hbWUiOiJJbnZhbGlkU2lnbmF0dXJlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJJbnZhbGlkU2lnbmVySWQiOnsibmFtZSI6IkludmFsaWRTaWduZXJJZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiSW52YWxpZFR4RXJyb3IiOnsibmFtZSI6IkludmFsaWRUeEVycm9yIiwic3VidHlwZXMiOlsiSW52YWxpZEFjY2Vzc0tleUVycm9yIiwiSW52YWxpZFNpZ25lcklkIiwiU2lnbmVyRG9lc05vdEV4aXN0IiwiSW52YWxpZE5vbmNlIiwiTm9uY2VUb29MYXJnZSIsIkludmFsaWRSZWNlaXZlcklkIiwiSW52YWxpZFNpZ25hdHVyZSIsIk5vdEVub3VnaEJhbGFuY2UiLCJMYWNrQmFsYW5jZUZvclN0YXRlIiwiQ29zdE92ZXJmbG93IiwiSW52YWxpZENoYWluIiwiRXhwaXJlZCIsIkFjdGlvbnNWYWxpZGF0aW9uIiwiVHJhbnNhY3Rpb25TaXplRXhjZWVkZWQiLCJTdG9yYWdlRXJyb3IiLCJTaGFyZENvbmdlc3RlZCIsIlNoYXJkU3R1Y2siXSwicHJvcHMiOnt9fSwiSXRlcmF0b3JXYXNJbnZhbGlkYXRlZCI6eyJuYW1lIjoiSXRlcmF0b3JXYXNJbnZhbGlkYXRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiaXRlcmF0b3JfaW5kZXgiOiIifX0sIktleUxlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJLZXlMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIkxhY2tCYWxhbmNlRm9yU3RhdGUiOnsibmFtZSI6IkxhY2tCYWxhbmNlRm9yU3RhdGUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIiLCJhbW91bnQiOiIifX0sIk1lbW9yeSI6eyJuYW1lIjoiTWVtb3J5Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZW1vcnlBY2Nlc3NWaW9sYXRpb24iOnsibmFtZSI6Ik1lbW9yeUFjY2Vzc1Zpb2xhdGlvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWVtb3J5T3V0T2ZCb3VuZHMiOnsibmFtZSI6Ik1lbW9yeU91dE9mQm91bmRzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJNZXRob2RFbXB0eU5hbWUiOnsibmFtZSI6Ik1ldGhvZEVtcHR5TmFtZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWV0aG9kSW52YWxpZFNpZ25hdHVyZSI6eyJuYW1lIjoiTWV0aG9kSW52YWxpZFNpZ25hdHVyZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiTWV0aG9kTmFtZU1pc21hdGNoIjp7Im5hbWUiOiJNZXRob2ROYW1lTWlzbWF0Y2giLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7Im1ldGhvZF9uYW1lIjoiIn19LCJNZXRob2ROb3RGb3VuZCI6eyJuYW1lIjoiTWV0aG9kTm90Rm91bmQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk1ldGhvZFJlc29sdmVFcnJvciI6eyJuYW1lIjoiTWV0aG9kUmVzb2x2ZUVycm9yIiwic3VidHlwZXMiOlsiTWV0aG9kRW1wdHlOYW1lIiwiTWV0aG9kTm90Rm91bmQiLCJNZXRob2RJbnZhbGlkU2lnbmF0dXJlIl0sInByb3BzIjp7fX0sIk1pc2FsaWduZWRBdG9taWNBY2Nlc3MiOnsibmFtZSI6Ik1pc2FsaWduZWRBdG9taWNBY2Nlc3MiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIk5vbmNlVG9vTGFyZ2UiOnsibmFtZSI6Ik5vbmNlVG9vTGFyZ2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InR4X25vbmNlIjoiIiwidXBwZXJfYm91bmQiOiIifX0sIk5vdEVub3VnaEFsbG93YW5jZSI6eyJuYW1lIjoiTm90RW5vdWdoQWxsb3dhbmNlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwiYWxsb3dhbmNlIjoiIiwiY29zdCI6IiIsInB1YmxpY19rZXkiOiIifX0sIk5vdEVub3VnaEJhbGFuY2UiOnsibmFtZSI6Ik5vdEVub3VnaEJhbGFuY2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImJhbGFuY2UiOiIiLCJjb3N0IjoiIiwic2lnbmVyX2lkIjoiIn19LCJOdW1iZXJJbnB1dERhdGFEZXBlbmRlbmNpZXNFeGNlZWRlZCI6eyJuYW1lIjoiTnVtYmVySW5wdXREYXRhRGVwZW5kZW5jaWVzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwibnVtYmVyX29mX2lucHV0X2RhdGFfZGVwZW5kZW5jaWVzIjoiIn19LCJOdW1iZXJPZkxvZ3NFeGNlZWRlZCI6eyJuYW1lIjoiTnVtYmVyT2ZMb2dzRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIn19LCJOdW1iZXJQcm9taXNlc0V4Y2VlZGVkIjp7Im5hbWUiOiJOdW1iZXJQcm9taXNlc0V4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsIm51bWJlcl9vZl9wcm9taXNlcyI6IiJ9fSwiT25seUltcGxpY2l0QWNjb3VudENyZWF0aW9uQWxsb3dlZCI6eyJuYW1lIjoiT25seUltcGxpY2l0QWNjb3VudENyZWF0aW9uQWxsb3dlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiYWNjb3VudF9pZCI6IiJ9fSwiUHJlcGFyZUVycm9yIjp7Im5hbWUiOiJQcmVwYXJlRXJyb3IiLCJzdWJ0eXBlcyI6WyJTZXJpYWxpemF0aW9uIiwiRGVzZXJpYWxpemF0aW9uIiwiSW50ZXJuYWxNZW1vcnlEZWNsYXJlZCIsIkdhc0luc3RydW1lbnRhdGlvbiIsIlN0YWNrSGVpZ2h0SW5zdHJ1bWVudGF0aW9uIiwiSW5zdGFudGlhdGUiLCJNZW1vcnkiLCJUb29NYW55RnVuY3Rpb25zIiwiVG9vTWFueUxvY2FscyJdLCJwcm9wcyI6e319LCJQcm9oaWJpdGVkSW5WaWV3Ijp7Im5hbWUiOiJQcm9oaWJpdGVkSW5WaWV3Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtZXRob2RfbmFtZSI6IiJ9fSwiUmVjZWlwdFNpemVFeGNlZWRlZCI6eyJuYW1lIjoiUmVjZWlwdFNpemVFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJzaXplIjoiIn19LCJSZWNlaXB0VmFsaWRhdGlvbkVycm9yIjp7Im5hbWUiOiJSZWNlaXB0VmFsaWRhdGlvbkVycm9yIiwic3VidHlwZXMiOlsiSW52YWxpZFByZWRlY2Vzc29ySWQiLCJJbnZhbGlkUmVjZWl2ZXJJZCIsIkludmFsaWRTaWduZXJJZCIsIkludmFsaWREYXRhUmVjZWl2ZXJJZCIsIlJldHVybmVkVmFsdWVMZW5ndGhFeGNlZWRlZCIsIk51bWJlcklucHV0RGF0YURlcGVuZGVuY2llc0V4Y2VlZGVkIiwiQWN0aW9uc1ZhbGlkYXRpb24iLCJSZWNlaXB0U2l6ZUV4Y2VlZGVkIl0sInByb3BzIjp7fX0sIlJlY2VpdmVyTWlzbWF0Y2giOnsibmFtZSI6IlJlY2VpdmVyTWlzbWF0Y2giLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFrX3JlY2VpdmVyIjoiIiwidHhfcmVjZWl2ZXIiOiIifX0sIlJlcXVpcmVzRnVsbEFjY2VzcyI6eyJuYW1lIjoiUmVxdWlyZXNGdWxsQWNjZXNzIiwic3VidHlwZXMiOltdLCJwcm9wcyI6e319LCJSZXR1cm5lZFZhbHVlTGVuZ3RoRXhjZWVkZWQiOnsibmFtZSI6IlJldHVybmVkVmFsdWVMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIlNlcmlhbGl6YXRpb24iOnsibmFtZSI6IlNlcmlhbGl6YXRpb24iLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7fX0sIlNoYXJkQ29uZ2VzdGVkIjp7Im5hbWUiOiJTaGFyZENvbmdlc3RlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsiY29uZ2VzdGlvbl9sZXZlbCI6IiIsInNoYXJkX2lkIjoiIn19LCJTaGFyZFN0dWNrIjp7Im5hbWUiOiJTaGFyZFN0dWNrIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJtaXNzZWRfY2h1bmtzIjoiIiwic2hhcmRfaWQiOiIifX0sIlNpZ25lckRvZXNOb3RFeGlzdCI6eyJuYW1lIjoiU2lnbmVyRG9lc05vdEV4aXN0Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJzaWduZXJfaWQiOiIifX0sIlN0YWNrSGVpZ2h0SW5zdHJ1bWVudGF0aW9uIjp7Im5hbWUiOiJTdGFja0hlaWdodEluc3RydW1lbnRhdGlvbiIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiU3RhY2tPdmVyZmxvdyI6eyJuYW1lIjoiU3RhY2tPdmVyZmxvdyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiVG9vTWFueUZ1bmN0aW9ucyI6eyJuYW1lIjoiVG9vTWFueUZ1bmN0aW9ucyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiVG9vTWFueUxvY2FscyI6eyJuYW1lIjoiVG9vTWFueUxvY2FscyIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiVG90YWxMb2dMZW5ndGhFeGNlZWRlZCI6eyJuYW1lIjoiVG90YWxMb2dMZW5ndGhFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGVuZ3RoIjoiIiwibGltaXQiOiIifX0sIlRvdGFsTnVtYmVyT2ZBY3Rpb25zRXhjZWVkZWQiOnsibmFtZSI6IlRvdGFsTnVtYmVyT2ZBY3Rpb25zRXhjZWVkZWQiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImxpbWl0IjoiIiwidG90YWxfbnVtYmVyX29mX2FjdGlvbnMiOiIifX0sIlRvdGFsUHJlcGFpZEdhc0V4Y2VlZGVkIjp7Im5hbWUiOiJUb3RhbFByZXBhaWRHYXNFeGNlZWRlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibGltaXQiOiIiLCJ0b3RhbF9wcmVwYWlkX2dhcyI6IiJ9fSwiVHJhbnNhY3Rpb25TaXplRXhjZWVkZWQiOnsibmFtZSI6IlRyYW5zYWN0aW9uU2l6ZUV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsaW1pdCI6IiIsInNpemUiOiIifX0sIlRyaWVzVG9TdGFrZSI6eyJuYW1lIjoiVHJpZXNUb1N0YWtlIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJhY2NvdW50X2lkIjoiIiwiYmFsYW5jZSI6IiIsImxvY2tlZCI6IiIsInN0YWtlIjoiIn19LCJUcmllc1RvVW5zdGFrZSI6eyJuYW1lIjoiVHJpZXNUb1Vuc3Rha2UiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7ImFjY291bnRfaWQiOiIifX0sIlR4RXhlY3V0aW9uRXJyb3IiOnsibmFtZSI6IlR4RXhlY3V0aW9uRXJyb3IiLCJzdWJ0eXBlcyI6WyJBY3Rpb25FcnJvciIsIkludmFsaWRUeEVycm9yIl0sInByb3BzIjp7fX0sIlVucmVhY2hhYmxlIjp7Im5hbWUiOiJVbnJlYWNoYWJsZSIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiVW5zdWl0YWJsZVN0YWtpbmdLZXkiOnsibmFtZSI6IlVuc3VpdGFibGVTdGFraW5nS2V5Iiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJwdWJsaWNfa2V5IjoiIn19LCJVbnN1cHBvcnRlZFByb3RvY29sRmVhdHVyZSI6eyJuYW1lIjoiVW5zdXBwb3J0ZWRQcm90b2NvbEZlYXR1cmUiLCJzdWJ0eXBlcyI6W10sInByb3BzIjp7InByb3RvY29sX2ZlYXR1cmUiOiIiLCJ2ZXJzaW9uIjoiIn19LCJWYWx1ZUxlbmd0aEV4Y2VlZGVkIjp7Im5hbWUiOiJWYWx1ZUxlbmd0aEV4Y2VlZGVkIiwic3VidHlwZXMiOltdLCJwcm9wcyI6eyJsZW5ndGgiOiIiLCJsaW1pdCI6IiJ9fSwiV2FzbVRyYXAiOnsibmFtZSI6Ildhc21UcmFwIiwic3VidHlwZXMiOlsiVW5yZWFjaGFibGUiLCJJbmNvcnJlY3RDYWxsSW5kaXJlY3RTaWduYXR1cmUiLCJNZW1vcnlPdXRPZkJvdW5kcyIsIkNhbGxJbmRpcmVjdE9PQiIsIklsbGVnYWxBcml0aG1ldGljIiwiTWlzYWxpZ25lZEF0b21pY0FjY2VzcyIsIkluZGlyZWN0Q2FsbFRvTnVsbCIsIlN0YWNrT3ZlcmZsb3ciLCJHZW5lcmljVHJhcCJdLCJwcm9wcyI6e319LCJXYXNtZXJDb21waWxlRXJyb3IiOnsibmFtZSI6Ildhc21lckNvbXBpbGVFcnJvciIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnsibXNnIjoiIn19LCJDbG9zZWQiOnsibmFtZSI6IkNsb3NlZCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fSwiU2VydmVyRXJyb3IiOnsibmFtZSI6IlNlcnZlckVycm9yIiwic3VidHlwZXMiOlsiVHhFeGVjdXRpb25FcnJvciIsIlRpbWVvdXQiLCJDbG9zZWQiXSwicHJvcHMiOnt9fSwiVGltZW91dCI6eyJuYW1lIjoiVGltZW91dCIsInN1YnR5cGVzIjpbXSwicHJvcHMiOnt9fX19Jyl9LDc2MjQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZT1yLmZvcm1hdEVycm9yPXIucGFyc2VSZXN1bHRFcnJvcj1yLnBhcnNlUnBjRXJyb3I9ci5TZXJ2ZXJFcnJvcj12b2lkIDA7bGV0IGk9ZS5yKDg2NTUxKSxvPW4oZS5yKDgxOTI4KSksYT1lLnIoNDYzOSkscz1lLnIoODc1NzgpLGM9bihlLnIoNzQ1MTMpKSx1PXtmb3JtYXROZWFyOigpPT4oZSx0KT0+KDAsYS5mb3JtYXROZWFyQW1vdW50KSh0KGUpKX07Y2xhc3MgZiBleHRlbmRzIGkuVHlwZWRFcnJvcnt9ci5TZXJ2ZXJFcnJvcj1mO2NsYXNzIGQgZXh0ZW5kcyBme3RyYW5zYWN0aW9uX291dGNvbWV9ZnVuY3Rpb24gbChlKXtsZXQgdD17fSxyPXAoZSxjLmRlZmF1bHQuc2NoZW1hLHQsIiIpLG49bmV3IGYoaChyLHQpLHIpO3JldHVybiBPYmplY3QuYXNzaWduKG4sdCksbn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzLkVycm9yTWVzc2FnZXNbZV0/by5kZWZhdWx0LnJlbmRlcihzLkVycm9yTWVzc2FnZXNbZV0sey4uLnQsLi4udX0pOkpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIHAoZSx0LHIsbil7bGV0IGksbyxhO2ZvcihsZXQgciBpbiB0KXtpZihtKGVbcl0pKXJldHVybiBlW3JdO2lmKGIoZVtyXSkpaT1lW3JdLG89dFtyXSxhPXI7ZWxzZXtpZighKGIoZS5raW5kKSYmYihlLmtpbmRbcl0pKSljb250aW51ZTtpPWUua2luZFtyXSxvPXRbcl0sYT1yfX1pZighaXx8IW8pcmV0dXJuIHIua2luZD1lLG47Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG8ucHJvcHMpKXJbZV09aVtlXTtyZXR1cm4gcChpLHQscixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ci5wYXJzZVJwY0Vycm9yPWwsci5wYXJzZVJlc3VsdEVycm9yPWZ1bmN0aW9uKGUpe2xldCB0PWwoZS5zdGF0dXMuRmFpbHVyZSkscj1uZXcgZDtyZXR1cm4gT2JqZWN0LmFzc2lnbihyLHQpLHIudHlwZT10LnR5cGUsci5tZXNzYWdlPXQubWVzc2FnZSxyLnRyYW5zYWN0aW9uX291dGNvbWU9ZS50cmFuc2FjdGlvbl9vdXRjb21lLHJ9LHIuZm9ybWF0RXJyb3I9aCxyLmdldEVycm9yVHlwZUZyb21FcnJvck1lc3NhZ2U9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goITApe2Nhc2UvXmFjY291bnQgLio/IGRvZXMgbm90IGV4aXN0IHdoaWxlIHZpZXdpbmckLy50ZXN0KGUpOmNhc2UvXkFjY291bnQgLio/IGRvZXNuJ3QgZXhpc3QkLy50ZXN0KGUpOnJldHVybiJBY2NvdW50RG9lc05vdEV4aXN0IjtjYXNlL15hY2Nlc3Mga2V5IC4qPyBkb2VzIG5vdCBleGlzdCB3aGlsZSB2aWV3aW5nJC8udGVzdChlKTpyZXR1cm4iQWNjZXNzS2V5RG9lc05vdEV4aXN0IjtjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBGdW5jdGlvbkNhbGxFcnJvclwoQ29tcGlsYXRpb25FcnJvclwoQ29kZURvZXNOb3RFeGlzdC8udGVzdChlKTpjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBDb21waWxhdGlvbkVycm9yXChDb2RlRG9lc05vdEV4aXN0Ly50ZXN0KGUpOnJldHVybiJDb2RlRG9lc05vdEV4aXN0IjtjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBGdW5jdGlvbkNhbGxFcnJvclwoTWV0aG9kUmVzb2x2ZUVycm9yXChNZXRob2ROb3RGb3VuZC8udGVzdChlKTpjYXNlL3dhc20gZXhlY3V0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiBNZXRob2RSZXNvbHZlRXJyb3JcKE1ldGhvZE5vdEZvdW5kLy50ZXN0KGUpOnJldHVybiJNZXRob2ROb3RGb3VuZCI7Y2FzZS9UcmFuc2FjdGlvbiBub25jZSBcZCsgbXVzdCBiZSBsYXJnZXIgdGhhbiBub25jZSBvZiB0aGUgdXNlZCBhY2Nlc3Mga2V5IFxkKy8udGVzdChlKTpyZXR1cm4iSW52YWxpZE5vbmNlIjtkZWZhdWx0OnJldHVybiB0fX19LDM5MTc4LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIucGFyc2VScGNFcnJvcj1yLnBhcnNlUmVzdWx0RXJyb3I9ci5nZXRFcnJvclR5cGVGcm9tRXJyb3JNZXNzYWdlPXIuZm9ybWF0RXJyb3I9ci5TZXJ2ZXJFcnJvcj1yLkVycm9yTWVzc2FnZXM9dm9pZCAwO3ZhciBuPWUucig4NzU3OCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkVycm9yTWVzc2FnZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLkVycm9yTWVzc2FnZXN9fSk7dmFyIGk9ZS5yKDc2MjQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJTZXJ2ZXJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuU2VydmVyRXJyb3J9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImZvcm1hdEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5mb3JtYXRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0RXJyb3JUeXBlRnJvbUVycm9yTWVzc2FnZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VSZXN1bHRFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VSZXN1bHRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicGFyc2VScGNFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2VScGNFcnJvcn19KX0sNjgyMDYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Db25zb2xlTG9nZ2VyPXZvaWQgMDtjbGFzcyBue2xvZ0xldmVscztjb25zdHJ1Y3RvcihlKXt0aGlzLmxvZ0xldmVscz1lfWlzTGV2ZWxFbmFibGVkPWU9PnRoaXMubG9nTGV2ZWxzLmluY2x1ZGVzKGUpO3ByaW50KGUsdCwuLi5yKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6Y2FzZSJmYXRhbCI6cmV0dXJuIGNvbnNvbGUuZXJyb3IodCwuLi5yKTtjYXNlIndhcm4iOnJldHVybiBjb25zb2xlLndhcm4odCwuLi5yKTtjYXNlImxvZyI6cmV0dXJuIGNvbnNvbGUubG9nKHQsLi4ucik7Y2FzZSJkZWJ1ZyI6Y2FzZSJ2ZXJib3NlIjpyZXR1cm4gY29uc29sZS5kZWJ1Zyh0LC4uLnIpfX12ZXJib3NlKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgidmVyYm9zZSIpJiZ0aGlzLnByaW50KCJ2ZXJib3NlIixlLC4uLnQpfWRlYnVnKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgiZGVidWciKSYmdGhpcy5wcmludCgiZGVidWciLGUsLi4udCl9bG9nKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgibG9nIikmJnRoaXMucHJpbnQoImxvZyIsZSwuLi50KX13YXJuKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgid2FybiIpJiZ0aGlzLnByaW50KCJ3YXJuIixlLC4uLnQpfWVycm9yKGUsLi4udCl7dGhpcy5pc0xldmVsRW5hYmxlZCgiZXJyb3IiKSYmdGhpcy5wcmludCgiZXJyb3IiLGUsLi4udCl9ZmF0YWwoZSwuLi50KXt0aGlzLmlzTGV2ZWxFbmFibGVkKCJmYXRhbCIpJiZ0aGlzLnByaW50KCJmYXRhbCIsZSwuLi50KX19ci5Db25zb2xlTG9nZ2VyPW59LDM4ODg3LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTG9nZ2VyPXZvaWQgMDtsZXQgbj1lLnIoNjgyMDYpLGk9WyJ2ZXJib3NlIiwiZGVidWciLCJsb2ciLCJ3YXJuIiwiZXJyb3IiLCJmYXRhbCJdLG89bmV3IG4uQ29uc29sZUxvZ2dlcihpKTtjbGFzcyBhe3N0YXRpYyBpbnN0YW5jZVJlZj1vO3N0YXRpYyBvdmVycmlkZUxvZ2dlcj1lPT57dGhpcy5pbnN0YW5jZVJlZj1lfTtzdGF0aWMgZXJyb3IoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5lcnJvcihlLC4uLnQpfXN0YXRpYyBsb2coZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5sb2coZSwuLi50KX1zdGF0aWMgd2FybihlLC4uLnQpe3RoaXMuaW5zdGFuY2VSZWY/Lndhcm4oZSwuLi50KX1zdGF0aWMgZGVidWcoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5kZWJ1Zz8uKGUsLi4udCl9c3RhdGljIHZlcmJvc2UoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy52ZXJib3NlPy4oZSwuLi50KX1zdGF0aWMgZmF0YWwoZSwuLi50KXt0aGlzLmluc3RhbmNlUmVmPy5mYXRhbD8uKGUsLi4udCl9fXIuTG9nZ2VyPWF9LDU1MjIwLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTG9nZ2VyPXIuQ29uc29sZUxvZ2dlcj12b2lkIDA7dmFyIG49ZS5yKDY4MjA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQ29uc29sZUxvZ2dlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQ29uc29sZUxvZ2dlcn19KTt2YXIgaT1lLnIoMzg4ODcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJMb2dnZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkxvZ2dlcn19KX0sNjUwNjIsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5wcmludFR4T3V0Y29tZUxvZ3M9ci5wcmludFR4T3V0Y29tZUxvZ3NBbmRGYWlsdXJlcz12b2lkIDA7bGV0IG49ZS5yKDM5MTc4KSxpPWUucig1NTIyMCk7ZnVuY3Rpb24gbyh7Y29udHJhY3RJZDplLGxvZ3M6dCxwcmVmaXg6cj0iIn0pe2ZvcihsZXQgbiBvZiB0KWkuTG9nZ2VyLmxvZyhgJHtyfUxvZyBbJHtlfV06ICR7bn1gKX1yLnByaW50VHhPdXRjb21lTG9nc0FuZEZhaWx1cmVzPWZ1bmN0aW9uKHtjb250cmFjdElkOmUsb3V0Y29tZTp0fSl7Zm9yKGxldCByIG9mW3QudHJhbnNhY3Rpb25fb3V0Y29tZSwuLi50LnJlY2VpcHRzX291dGNvbWVdLnJlZHVjZSgoZSx0KT0+e2xldCByPSJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmIm9iamVjdCI9PXR5cGVvZiB0Lm91dGNvbWUuc3RhdHVzLkZhaWx1cmU7cmV0dXJuIHQub3V0Y29tZS5sb2dzLmxlbmd0aHx8cj9lLmNvbmNhdCh7cmVjZWlwdElkczp0Lm91dGNvbWUucmVjZWlwdF9pZHMsbG9nczp0Lm91dGNvbWUubG9ncyxmYWlsdXJlOiJvYmplY3QiPT10eXBlb2YgdC5vdXRjb21lLnN0YXR1cyYmdm9pZCAwIT09dC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlPygwLG4ucGFyc2VScGNFcnJvcikodC5vdXRjb21lLnN0YXR1cy5GYWlsdXJlKTpudWxsfSk6ZX0sW10pKWkuTG9nZ2VyLmxvZyhgUmVjZWlwdCR7ci5yZWNlaXB0SWRzLmxlbmd0aD4xPyJzIjoiIn06ICR7ci5yZWNlaXB0SWRzLmpvaW4oIiwgIil9YCksbyh7Y29udHJhY3RJZDplLGxvZ3M6ci5sb2dzLHByZWZpeDoiCSJ9KSxyLmZhaWx1cmUmJmkuTG9nZ2VyLndhcm4oYAlGYWlsdXJlIFske2V9XTogJHtyLmZhaWx1cmV9YCl9LHIucHJpbnRUeE91dGNvbWVMb2dzPW99LDI4NDkyLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5pKDM5NTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5nZXRUcmFuc2FjdGlvbkxhc3RSZXN1bHQ9dm9pZCAwLHIuZ2V0VHJhbnNhY3Rpb25MYXN0UmVzdWx0PWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZS5zdGF0dXMmJiJzdHJpbmciPT10eXBlb2YgZS5zdGF0dXMuU3VjY2Vzc1ZhbHVlKXtsZXQgdD1uLkJ1ZmZlci5mcm9tKGUuc3RhdHVzLlN1Y2Nlc3NWYWx1ZSwiYmFzZTY0IikudG9TdHJpbmcoKTt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fXJldHVybiBudWxsfX0sMzQ0MDQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5zb3J0QmlnSW50QXNjPXZvaWQgMCxyLnNvcnRCaWdJbnRBc2M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0Py0xOisoZT50KX19LDI0NDgxLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLmRpZmZFcG9jaFZhbGlkYXRvcnM9ci5maW5kU2VhdFByaWNlPXZvaWQgMDtsZXQgaT1uKGUucig2MjM2MSkpLG89ZS5yKDM0NDA0KTtmdW5jdGlvbiBhKGUsdCl7bGV0IHI9ZS5tYXAoZT0+QmlnSW50KGUuc3Rha2UpKS5zb3J0KG8uc29ydEJpZ0ludEFzYyksbj1CaWdJbnQodCksaT1yLnJlZHVjZSgoZSx0KT0+ZSt0KTtpZihpPG4pdGhyb3cgRXJyb3IoIlN0YWtlcyBhcmUgYmVsb3cgc2VhdHMiKTtsZXQgYT0xbixzPWkrMW47Zm9yKDthIT09cy0xbjspe2xldCBlPShhK3MpLzJuLHQ9ITEsaT0wbjtmb3IobGV0IG89MDtvPHIubGVuZ3RoOysrbylpZigoaSs9cltvXS9lKT49bil7YT1lLHQ9ITA7YnJlYWt9dHx8KHM9ZSl9cmV0dXJuIGF9ZnVuY3Rpb24gcyhlLHQscil7aWYoMiE9ci5sZW5ndGgpdGhyb3cgRXJyb3IoIm1pbmltdW1TdGFrZVJhdGlvIHNob3VsZCBoYXZlIDIgZWxlbWVudHMiKTtsZXQgbj1lLm1hcChlPT5CaWdJbnQoZS5zdGFrZSkpLnNvcnQoby5zb3J0QmlnSW50QXNjKSxpPW4ucmVkdWNlKChlLHQpPT5lK3QpO3JldHVybiBlLmxlbmd0aDx0P2kqQmlnSW50KHJbMF0pL0JpZ0ludChyWzFdKTpuWzBdKzFufXIuZmluZFNlYXRQcmljZT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbiYmbjw0OT9hKGUsdCk6KHJ8fCgoMCxpLmRlZmF1bHQpKCJmaW5kU2VhdFByaWNlKHZhbGlkYXRvcnMsIG1heE51bWJlck9mU2VhdHMpIikoImB1c2UgYGZpbmRTZWF0UHJpY2UodmFsaWRhdG9ycywgbWF4TnVtYmVyT2ZTZWF0cywgbWluaW11bVN0YWtlUmF0aW8pYCBpbnN0ZWFkIikscj1bMSw2MjUwXSkscyhlLHQscikpfSxyLmRpZmZFcG9jaFZhbGlkYXRvcnM9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uZXcgTWFwO2UuZm9yRWFjaChlPT5yLnNldChlLmFjY291bnRfaWQsZSkpO2xldCBuPW5ldyBTZXQodC5tYXAoZT0+ZS5hY2NvdW50X2lkKSk7cmV0dXJue25ld1ZhbGlkYXRvcnM6dC5maWx0ZXIoZT0+IXIuaGFzKGUuYWNjb3VudF9pZCkpLHJlbW92ZWRWYWxpZGF0b3JzOmUuZmlsdGVyKGU9PiFuLmhhcyhlLmFjY291bnRfaWQpKSxjaGFuZ2VkVmFsaWRhdG9yczp0LmZpbHRlcihlPT5yLmhhcyhlLmFjY291bnRfaWQpJiZyLmdldChlLmFjY291bnRfaWQpLnN0YWtlIT1lLnN0YWtlKS5tYXAoZT0+KHtjdXJyZW50OnIuZ2V0KGUuYWNjb3VudF9pZCksbmV4dDplfSkpfX19LDI0MzQwLChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5lJiZlLmUuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7KCFpfHwoImdldCJpbiBpPyF0Ll9fZXNNb2R1bGU6aS53cml0YWJsZXx8aS5jb25maWd1cmFibGUpKSYmKGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixpKX06ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksZVtuXT10W3JdfSksaT1lLmUmJmUuZS5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpImRlZmF1bHQiPT09cnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscil8fG4odCxlLHIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaShlLnIoNjg5NzApLHIpLGkoZS5yKDM5MTc4KSxyKSxpKGUucig0NjM5KSxyKSxpKGUucig2NTA2MiksciksaShlLnIoMjg0OTIpLHIpLGkoZS5yKDI0NDgxKSxyKSxpKGUucig1NTIyMCksciksaShlLnIoMzQ0MDQpLHIpfSw5NzIzMCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuPWUuaSgzOTU4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIudmlld0Z1bmN0aW9uPXIudmlld1N0YXRlPXIuZW5jb2RlSlNDb250cmFjdEFyZ3M9ci52YWxpZGF0ZUFyZ3M9dm9pZCAwO2xldCBpPWUucig4NjU1MSksbz1lLnIoMjQzNDApO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIEpTT04ucGFyc2Uobi5CdWZmZXIuZnJvbShlKS50b1N0cmluZygpKX1mdW5jdGlvbiBzKGUpe3JldHVybiBuLkJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBjKGUpe2lmKCh2b2lkIDA9PT1lLmJ5dGVMZW5ndGh8fGUuYnl0ZUxlbmd0aCE9PWUubGVuZ3RoKSYmKEFycmF5LmlzQXJyYXkoZSl8fCJvYmplY3QiIT10eXBlb2YgZSkpdGhyb3cgbmV3IGkuUG9zaXRpb25hbEFyZ3NFcnJvcn1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gbi5CdWZmZXIuY29uY2F0KFtuLkJ1ZmZlci5mcm9tKGUpLG4uQnVmZmVyLmZyb20oWzBdKSxuLkJ1ZmZlci5mcm9tKHQpLG4uQnVmZmVyLmZyb20oWzBdKSxuLkJ1ZmZlci5mcm9tKHIpXSl9ci52YWxpZGF0ZUFyZ3M9YyxyLmVuY29kZUpTQ29udHJhY3RBcmdzPXUsci52aWV3U3RhdGU9YXN5bmMgZnVuY3Rpb24oZSx0LHIsaT17ZmluYWxpdHk6Im9wdGltaXN0aWMifSl7bGV0e3ZhbHVlczpvfT1hd2FpdCBlLnByb3ZpZGVyLnF1ZXJ5KHtyZXF1ZXN0X3R5cGU6InZpZXdfc3RhdGUiLC4uLmksYWNjb3VudF9pZDp0LHByZWZpeF9iYXNlNjQ6bi5CdWZmZXIuZnJvbShyKS50b1N0cmluZygiYmFzZTY0Iil9KTtyZXR1cm4gby5tYXAoKHtrZXk6ZSx2YWx1ZTp0fSk9Pih7a2V5Om4uQnVmZmVyLmZyb20oZSwiYmFzZTY0IiksdmFsdWU6bi5CdWZmZXIuZnJvbSh0LCJiYXNlNjQiKX0pKX0sci52aWV3RnVuY3Rpb249YXN5bmMgZnVuY3Rpb24oZSx7Y29udHJhY3RJZDp0LG1ldGhvZE5hbWU6cixhcmdzOmk9e30scGFyc2U6Zj1hLHN0cmluZ2lmeTpkPXMsanNDb250cmFjdDpsPSExLGJsb2NrUXVlcnk6aD17ZmluYWxpdHk6Im9wdGltaXN0aWMifX0pe2xldCBwO2MoaSkscD1sP3UodCxyLE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wP0pTT04uc3RyaW5naWZ5KGkpOiIiKTpkKGkpO2xldCBiPWF3YWl0IGUucHJvdmlkZXIucXVlcnkoe3JlcXVlc3RfdHlwZToiY2FsbF9mdW5jdGlvbiIsLi4uaCxhY2NvdW50X2lkOmw/ZS5qc3ZtQWNjb3VudElkOnQsbWV0aG9kX25hbWU6bD8idmlld19qc19jb250cmFjdCI6cixhcmdzX2Jhc2U2NDpwLnRvU3RyaW5nKCJiYXNlNjQiKX0pO3JldHVybiBiLmxvZ3MmJigwLG8ucHJpbnRUeE91dGNvbWVMb2dzKSh7Y29udHJhY3RJZDp0LGxvZ3M6Yi5sb2dzfSksYi5yZXN1bHQmJmIucmVzdWx0Lmxlbmd0aD4wJiZmKG4uQnVmZmVyLmZyb20oYi5yZXN1bHQpKX19LDMyNjg5LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5pKDM5NTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5BY2NvdW50PXZvaWQgMDtsZXQgaT1lLnIoNzIyMyksbz1lLnIoMjQyODQpLGE9ZS5yKDQ1MDgwKSxzPWUucig4NjU1MSksYz1lLnIoMjQzNDApLHU9ZS5yKDk3MjMwKSx7YWRkS2V5OmYsY3JlYXRlQWNjb3VudDpkLGRlbGV0ZUFjY291bnQ6bCxkZWxldGVLZXk6aCxkZXBsb3lDb250cmFjdDpwLGZ1bGxBY2Nlc3NLZXk6YixmdW5jdGlvbkNhbGw6bSxmdW5jdGlvbkNhbGxBY2Nlc3NLZXk6eSxzdGFrZTpnLHRyYW5zZmVyOnZ9PWEuYWN0aW9uQ3JlYXRvcnMsXz0xMix3PTUwMCx4PTEuNTtjbGFzcyBNe2Nvbm5lY3Rpb247YWNjb3VudElkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jb25uZWN0aW9uPWUsdGhpcy5hY2NvdW50SWQ9dH1nZXRDb25uZWN0aW9uKCl7cmV0dXJuIHRoaXMuY29ubmVjdGlvbn1hc3luYyBzdGF0ZSgpe3JldHVybiB0aGlzLmNvbm5lY3Rpb24ucHJvdmlkZXIucXVlcnkoe3JlcXVlc3RfdHlwZToidmlld19hY2NvdW50IixhY2NvdW50X2lkOnRoaXMuYWNjb3VudElkLGZpbmFsaXR5OiJvcHRpbWlzdGljIn0pfWFzeW5jIHNpZ25UcmFuc2FjdGlvbihlLHQpe2xldCByPWF3YWl0IHRoaXMuZmluZEFjY2Vzc0tleShlLHQpO2lmKCFyKXRocm93IG5ldyBzLlR5cGVkRXJyb3IoYENhbiBub3Qgc2lnbiB0cmFuc2FjdGlvbnMgZm9yIGFjY291bnQgJHt0aGlzLmFjY291bnRJZH0gb24gbmV0d29yayAke3RoaXMuY29ubmVjdGlvbi5uZXR3b3JrSWR9LCBubyBtYXRjaGluZyBrZXkgcGFpciBleGlzdHMgZm9yIHRoaXMgYWNjb3VudGAsIktleU5vdEZvdW5kIik7bGV0e2FjY2Vzc0tleTpufT1yLGk9KGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wcm92aWRlci5ibG9jayh7ZmluYWxpdHk6ImZpbmFsIn0pKS5oZWFkZXIuaGFzaCxvPW4ubm9uY2UrMW47cmV0dXJuIGF3YWl0ICgwLGEuc2lnblRyYW5zYWN0aW9uKShlLG8sdCwoMCxjLmJhc2VEZWNvZGUpKGkpLHRoaXMuY29ubmVjdGlvbi5zaWduZXIsdGhpcy5hY2NvdW50SWQsdGhpcy5jb25uZWN0aW9uLm5ldHdvcmtJZCl9YXN5bmMgc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDplLGFjdGlvbnM6dCxyZXR1cm5FcnJvcjpyfSl7bGV0IG4saSxhPWF3YWl0ICgwLG8uZXhwb25lbnRpYWxCYWNrb2ZmKSh3LF8seCxhc3luYygpPT57W24saV09YXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb24oZSx0KTtsZXQgcj1pLnRyYW5zYWN0aW9uLnB1YmxpY0tleTt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wcm92aWRlci5zZW5kVHJhbnNhY3Rpb24oaSl9Y2F0Y2godCl7aWYoIkludmFsaWROb25jZSI9PT10LnR5cGUpcmV0dXJuIGMuTG9nZ2VyLndhcm4oYFJldHJ5aW5nIHRyYW5zYWN0aW9uICR7ZX06JHsoMCxjLmJhc2VFbmNvZGUpKG4pfSB3aXRoIG5ldyBub25jZS5gKSxkZWxldGUgdGhpcy5hY2Nlc3NLZXlCeVB1YmxpY0tleUNhY2hlW3IudG9TdHJpbmcoKV0sbnVsbDtpZigiRXhwaXJlZCI9PT10LnR5cGUpcmV0dXJuIGMuTG9nZ2VyLndhcm4oYFJldHJ5aW5nIHRyYW5zYWN0aW9uICR7ZX06JHsoMCxjLmJhc2VFbmNvZGUpKG4pfSBkdWUgdG8gZXhwaXJlZCBibG9jayBoYXNoYCksbnVsbDt0aHJvdyB0LmNvbnRleHQ9bmV3IHMuRXJyb3JDb250ZXh0KCgwLGMuYmFzZUVuY29kZSkobikpLHR9fSk7aWYoIWEpdGhyb3cgbmV3IHMuVHlwZWRFcnJvcigibm9uY2UgcmV0cmllcyBleGNlZWRlZCBmb3IgdHJhbnNhY3Rpb24uIFRoaXMgdXN1YWxseSBtZWFucyB0aGVyZSBhcmUgdG9vIG1hbnkgcGFyYWxsZWwgcmVxdWVzdHMgd2l0aCB0aGUgc2FtZSBhY2Nlc3Mga2V5LiIsIlJldHJpZXNFeGNlZWRlZCIpO2lmKCgwLGMucHJpbnRUeE91dGNvbWVMb2dzQW5kRmFpbHVyZXMpKHtjb250cmFjdElkOmkudHJhbnNhY3Rpb24ucmVjZWl2ZXJJZCxvdXRjb21lOmF9KSwhciYmIm9iamVjdCI9PXR5cGVvZiBhLnN0YXR1cyYmIm9iamVjdCI9PXR5cGVvZiBhLnN0YXR1cy5GYWlsdXJlJiZudWxsIT09YS5zdGF0dXMuRmFpbHVyZSlpZihhLnN0YXR1cy5GYWlsdXJlLmVycm9yX21lc3NhZ2UmJmEuc3RhdHVzLkZhaWx1cmUuZXJyb3JfdHlwZSl0aHJvdyBuZXcgcy5UeXBlZEVycm9yKGBUcmFuc2FjdGlvbiAke2EudHJhbnNhY3Rpb25fb3V0Y29tZS5pZH0gZmFpbGVkLiAke2Euc3RhdHVzLkZhaWx1cmUuZXJyb3JfbWVzc2FnZX1gLGEuc3RhdHVzLkZhaWx1cmUuZXJyb3JfdHlwZSk7ZWxzZSB0aHJvdygwLGMucGFyc2VSZXN1bHRFcnJvcikoYSk7cmV0dXJuIGF9YWNjZXNzS2V5QnlQdWJsaWNLZXlDYWNoZT17fTthc3luYyBmaW5kQWNjZXNzS2V5KGUsdCl7bGV0IHI9YXdhaXQgdGhpcy5jb25uZWN0aW9uLnNpZ25lci5nZXRQdWJsaWNLZXkodGhpcy5hY2NvdW50SWQsdGhpcy5jb25uZWN0aW9uLm5ldHdvcmtJZCk7aWYoIXIpdGhyb3cgbmV3IHMuVHlwZWRFcnJvcihgbm8gbWF0Y2hpbmcga2V5IHBhaXIgZm91bmQgaW4gJHt0aGlzLmNvbm5lY3Rpb24uc2lnbmVyfWAsIlB1YmxpY0tleU5vdEZvdW5kIik7bGV0IG49dGhpcy5hY2Nlc3NLZXlCeVB1YmxpY0tleUNhY2hlW3IudG9TdHJpbmcoKV07aWYodm9pZCAwIT09bilyZXR1cm57cHVibGljS2V5OnIsYWNjZXNzS2V5Om59O3RyeXtsZXQgZT1hd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHJvdmlkZXIucXVlcnkoe3JlcXVlc3RfdHlwZToidmlld19hY2Nlc3Nfa2V5IixhY2NvdW50X2lkOnRoaXMuYWNjb3VudElkLHB1YmxpY19rZXk6ci50b1N0cmluZygpLGZpbmFsaXR5OiJvcHRpbWlzdGljIn0pLHQ9ey4uLmUsbm9uY2U6QmlnSW50KGUubm9uY2V8fDApfTtpZih0aGlzLmFjY2Vzc0tleUJ5UHVibGljS2V5Q2FjaGVbci50b1N0cmluZygpXSlyZXR1cm57cHVibGljS2V5OnIsYWNjZXNzS2V5OnRoaXMuYWNjZXNzS2V5QnlQdWJsaWNLZXlDYWNoZVtyLnRvU3RyaW5nKCldfTtyZXR1cm4gdGhpcy5hY2Nlc3NLZXlCeVB1YmxpY0tleUNhY2hlW3IudG9TdHJpbmcoKV09dCx7cHVibGljS2V5OnIsYWNjZXNzS2V5OnR9fWNhdGNoKGUpe2lmKCJBY2Nlc3NLZXlEb2VzTm90RXhpc3QiPT1lLnR5cGUpcmV0dXJuIG51bGw7dGhyb3cgZX19YXN5bmMgY3JlYXRlQW5kRGVwbG95Q29udHJhY3QoZSx0LHIsbil7bGV0IG89YigpO3JldHVybiBhd2FpdCB0aGlzLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6ZSxhY3Rpb25zOltkKCksdihuKSxmKGkuUHVibGljS2V5LmZyb20odCksbykscChyKV19KSxuZXcgTSh0aGlzLmNvbm5lY3Rpb24sZSl9YXN5bmMgc2VuZE1vbmV5KGUsdCl7cmV0dXJuIHRoaXMuc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDplLGFjdGlvbnM6W3YodCldfSl9YXN5bmMgY3JlYXRlQWNjb3VudChlLHQscil7bGV0IG49YigpO3JldHVybiB0aGlzLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6ZSxhY3Rpb25zOltkKCksdihyKSxmKGkuUHVibGljS2V5LmZyb20odCksbildfSl9YXN5bmMgZGVsZXRlQWNjb3VudChlKXtyZXR1cm4gYy5Mb2dnZXIubG9nKCJEZWxldGluZyBhbiBhY2NvdW50IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgdHJhbnNmZXIgTkZUcyBhbmQgRlRzIHRvIHRoZSBiZW5lZmljaWFyeSBhZGRyZXNzLiBFbnN1cmUgdG8gdHJhbnNmZXIgYXNzZXRzIGJlZm9yZSBkZWxldGluZy4iKSx0aGlzLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6dGhpcy5hY2NvdW50SWQsYWN0aW9uczpbbChlKV19KX1hc3luYyBkZXBsb3lDb250cmFjdChlKXtyZXR1cm4gdGhpcy5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOnRoaXMuYWNjb3VudElkLGFjdGlvbnM6W3AoZSldfSl9ZW5jb2RlSlNDb250cmFjdEFyZ3MoZSx0LHIpe3JldHVybiBuLkJ1ZmZlci5jb25jYXQoW24uQnVmZmVyLmZyb20oZSksbi5CdWZmZXIuZnJvbShbMF0pLG4uQnVmZmVyLmZyb20odCksbi5CdWZmZXIuZnJvbShbMF0pLG4uQnVmZmVyLmZyb20ocildKX1hc3luYyBmdW5jdGlvbkNhbGwoe2NvbnRyYWN0SWQ6ZSxtZXRob2ROYW1lOnQsYXJnczpyPXt9LGdhczpuPWMuREVGQVVMVF9GVU5DVElPTl9DQUxMX0dBUyxhdHRhY2hlZERlcG9zaXQ6aSx3YWxsZXRNZXRhOm8sd2FsbGV0Q2FsbGJhY2tVcmw6cyxzdHJpbmdpZnk6dSxqc0NvbnRyYWN0OmZ9KXtsZXQgZDtyZXR1cm4gdGhpcy52YWxpZGF0ZUFyZ3MociksZD1mP1siY2FsbF9qc19jb250cmFjdCIsdGhpcy5lbmNvZGVKU0NvbnRyYWN0QXJncyhlLHQsSlNPTi5zdHJpbmdpZnkocikpLG4saSxudWxsLCEwXTpbdCxyLG4saSx2b2lkIDA9PT11P2Euc3RyaW5naWZ5SnNvbk9yQnl0ZXM6dSwhMV0sdGhpcy5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOmY/dGhpcy5jb25uZWN0aW9uLmpzdm1BY2NvdW50SWQ6ZSxhY3Rpb25zOlttLmFwcGx5KHZvaWQgMCxkKV0sd2FsbGV0TWV0YTpvLHdhbGxldENhbGxiYWNrVXJsOnN9KX1hc3luYyBhZGRLZXkoZSx0LHIsbil7bGV0IG87cmV0dXJuIHJ8fChyPVtdKSxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLG89dD95KHQscixuKTpiKCksdGhpcy5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOnRoaXMuYWNjb3VudElkLGFjdGlvbnM6W2YoaS5QdWJsaWNLZXkuZnJvbShlKSxvKV19KX1hc3luYyBkZWxldGVLZXkoZSl7cmV0dXJuIHRoaXMuc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDp0aGlzLmFjY291bnRJZCxhY3Rpb25zOltoKGkuUHVibGljS2V5LmZyb20oZSkpXX0pfWFzeW5jIHN0YWtlKGUsdCl7cmV0dXJuIHRoaXMuc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDp0aGlzLmFjY291bnRJZCxhY3Rpb25zOltnKHQsaS5QdWJsaWNLZXkuZnJvbShlKSldfSl9YXN5bmMgc2lnbmVkRGVsZWdhdGUoe2FjdGlvbnM6ZSxibG9ja0hlaWdodFR0bDp0LHJlY2VpdmVySWQ6cn0pe2xldHtwcm92aWRlcjpuLHNpZ25lcjppfT10aGlzLmNvbm5lY3Rpb24se2hlYWRlcjpvfT1hd2FpdCBuLmJsb2NrKHtmaW5hbGl0eToiZmluYWwifSkse2FjY2Vzc0tleTpzLHB1YmxpY0tleTpjfT1hd2FpdCB0aGlzLmZpbmRBY2Nlc3NLZXkobnVsbCxudWxsKSx1PSgwLGEuYnVpbGREZWxlZ2F0ZUFjdGlvbikoe2FjdGlvbnM6ZSxtYXhCbG9ja0hlaWdodDpCaWdJbnQoby5oZWlnaHQpK0JpZ0ludCh0KSxub25jZTpCaWdJbnQocy5ub25jZSkrMW4scHVibGljS2V5OmMscmVjZWl2ZXJJZDpyLHNlbmRlcklkOnRoaXMuYWNjb3VudElkfSkse3NpZ25lZERlbGVnYXRlQWN0aW9uOmZ9PWF3YWl0ICgwLGEuc2lnbkRlbGVnYXRlQWN0aW9uKSh7ZGVsZWdhdGVBY3Rpb246dSxzaWduZXI6e3NpZ246YXN5bmMgZT0+e2xldHtzaWduYXR1cmU6dH09YXdhaXQgaS5zaWduTWVzc2FnZShlLHUuc2VuZGVySWQsdGhpcy5jb25uZWN0aW9uLm5ldHdvcmtJZCk7cmV0dXJuIHR9fX0pO3JldHVybiBmfXZhbGlkYXRlQXJncyhlKXtpZigodm9pZCAwPT09ZS5ieXRlTGVuZ3RofHxlLmJ5dGVMZW5ndGghPT1lLmxlbmd0aCkmJihBcnJheS5pc0FycmF5KGUpfHwib2JqZWN0IiE9dHlwZW9mIGUpKXRocm93IG5ldyBzLlBvc2l0aW9uYWxBcmdzRXJyb3J9YXN5bmMgdmlld0Z1bmN0aW9uKGUpe3JldHVybiBhd2FpdCAoMCx1LnZpZXdGdW5jdGlvbikodGhpcy5jb25uZWN0aW9uLGUpfWFzeW5jIHZpZXdTdGF0ZShlLHQ9e2ZpbmFsaXR5OiJvcHRpbWlzdGljIn0pe3JldHVybiBhd2FpdCAoMCx1LnZpZXdTdGF0ZSkodGhpcy5jb25uZWN0aW9uLHRoaXMuYWNjb3VudElkLGUsdCl9YXN5bmMgZ2V0QWNjZXNzS2V5cygpe2xldCBlPWF3YWl0IHRoaXMuY29ubmVjdGlvbi5wcm92aWRlci5xdWVyeSh7cmVxdWVzdF90eXBlOiJ2aWV3X2FjY2Vzc19rZXlfbGlzdCIsYWNjb3VudF9pZDp0aGlzLmFjY291bnRJZCxmaW5hbGl0eToib3B0aW1pc3RpYyJ9KTtyZXR1cm4gZT8ua2V5cz8ubWFwKGU9Pih7Li4uZSxhY2Nlc3Nfa2V5OnsuLi5lLmFjY2Vzc19rZXksbm9uY2U6QmlnSW50KGUuYWNjZXNzX2tleS5ub25jZSl9fSkpfWFzeW5jIGdldEFjY291bnREZXRhaWxzKCl7cmV0dXJue2F1dGhvcml6ZWRBcHBzOihhd2FpdCB0aGlzLmdldEFjY2Vzc0tleXMoKSkuZmlsdGVyKGU9PiJGdWxsQWNjZXNzIiE9PWUuYWNjZXNzX2tleS5wZXJtaXNzaW9uKS5tYXAoZT0+e2xldCB0PWUuYWNjZXNzX2tleS5wZXJtaXNzaW9uO3JldHVybntjb250cmFjdElkOnQuRnVuY3Rpb25DYWxsLnJlY2VpdmVyX2lkLGFtb3VudDp0LkZ1bmN0aW9uQ2FsbC5hbGxvd2FuY2UscHVibGljS2V5OmUucHVibGljX2tleX19KX19YXN5bmMgZ2V0QWNjb3VudEJhbGFuY2UoKXtsZXQgZT1hd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHJvdmlkZXIuZXhwZXJpbWVudGFsX3Byb3RvY29sQ29uZmlnKHtmaW5hbGl0eToiZmluYWwifSksdD1hd2FpdCB0aGlzLnN0YXRlKCkscj1CaWdJbnQoZS5ydW50aW1lX2NvbmZpZy5zdG9yYWdlX2Ftb3VudF9wZXJfYnl0ZSksbj1CaWdJbnQodC5zdG9yYWdlX3VzYWdlKSpyLGk9QmlnSW50KHQubG9ja2VkKSxvPUJpZ0ludCh0LmFtb3VudCkraSxhPW8tKGk+bj9pOm4pO3JldHVybnt0b3RhbDpvLnRvU3RyaW5nKCksc3RhdGVTdGFrZWQ6bi50b1N0cmluZygpLHN0YWtlZDppLnRvU3RyaW5nKCksYXZhaWxhYmxlOmEudG9TdHJpbmcoKX19YXN5bmMgZ2V0QWN0aXZlRGVsZWdhdGVkU3Rha2VCYWxhbmNlKCl7bGV0IGU9YXdhaXQgdGhpcy5jb25uZWN0aW9uLnByb3ZpZGVyLmJsb2NrKHtmaW5hbGl0eToiZmluYWwifSksdD1lLmhlYWRlci5oYXNoLHI9ZS5oZWFkZXIuZXBvY2hfaWQse2N1cnJlbnRfdmFsaWRhdG9yczpuLG5leHRfdmFsaWRhdG9yczppLGN1cnJlbnRfcHJvcG9zYWxzOm99PWF3YWl0IHRoaXMuY29ubmVjdGlvbi5wcm92aWRlci52YWxpZGF0b3JzKHIpLGE9bmV3IFNldDtbLi4ubiwuLi5pLC4uLm9dLmZvckVhY2goZT0+YS5hZGQoZS5hY2NvdW50X2lkKSk7bGV0IHM9Wy4uLmFdLGM9cy5tYXAoZT0+dGhpcy52aWV3RnVuY3Rpb24oe2NvbnRyYWN0SWQ6ZSxtZXRob2ROYW1lOiJnZXRfYWNjb3VudF90b3RhbF9iYWxhbmNlIixhcmdzOnthY2NvdW50X2lkOnRoaXMuYWNjb3VudElkfSxibG9ja1F1ZXJ5OntibG9ja0lkOnR9fSkpLHU9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGMpO2lmKHUuc29tZShlPT4icmVqZWN0ZWQiPT09ZS5zdGF0dXMmJiJUaW1lb3V0RXJyb3IiPT09ZS5yZWFzb24udHlwZSkpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBnZXQgZGVsZWdhdGVkIHN0YWtlIGJhbGFuY2UiKTtsZXQgZj11LnJlZHVjZSgoZSx0LHIpPT57bGV0IG49c1tyXTtpZigiZnVsZmlsbGVkIj09PXQuc3RhdHVzKXtsZXQgcj1CaWdJbnQodC52YWx1ZSk7aWYoMG4hPT1yKXJldHVybnsuLi5lLHN0YWtlZFZhbGlkYXRvcnM6Wy4uLmUuc3Rha2VkVmFsaWRhdG9ycyx7dmFsaWRhdG9ySWQ6bixhbW91bnQ6ci50b1N0cmluZygpfV0sdG90YWw6ZS50b3RhbCtyfX1yZXR1cm4icmVqZWN0ZWQiPT09dC5zdGF0dXM/ey4uLmUsZmFpbGVkVmFsaWRhdG9yczpbLi4uZS5mYWlsZWRWYWxpZGF0b3JzLHt2YWxpZGF0b3JJZDpuLGVycm9yOnQucmVhc29ufV19OmV9LHtzdGFrZWRWYWxpZGF0b3JzOltdLGZhaWxlZFZhbGlkYXRvcnM6W10sdG90YWw6MG59KTtyZXR1cm57Li4uZix0b3RhbDpmLnRvdGFsLnRvU3RyaW5nKCl9fX1yLkFjY291bnQ9TX0sNjEzNDQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5NVUxUSVNJR19DT05GSVJNX01FVEhPRFM9ci5NVUxUSVNJR19DSEFOR0VfTUVUSE9EUz1yLk1VTFRJU0lHX0RFUE9TSVQ9ci5NVUxUSVNJR19HQVM9ci5NVUxUSVNJR19BTExPV0FOQ0U9ci5NVUxUSVNJR19TVE9SQUdFX0tFWT12b2lkIDA7bGV0IG49ZS5yKDI0MzQwKTtyLk1VTFRJU0lHX1NUT1JBR0VfS0VZPSJfX211bHRpc2lnUmVxdWVzdCIsci5NVUxUSVNJR19BTExPV0FOQ0U9QmlnSW50KCgwLG4ucGFyc2VOZWFyQW1vdW50KSgiMSIpKSxyLk1VTFRJU0lHX0dBUz0xMDAwMDAwMDAwMDAwMDBuLHIuTVVMVElTSUdfREVQT1NJVD0wbixyLk1VTFRJU0lHX0NIQU5HRV9NRVRIT0RTPVsiYWRkX3JlcXVlc3QiLCJhZGRfcmVxdWVzdF9hbmRfY29uZmlybSIsImRlbGV0ZV9yZXF1ZXN0IiwiY29uZmlybSJdLHIuTVVMVElTSUdfQ09ORklSTV9NRVRIT0RTPVsiY29uZmlybSJdfSwyNDQ2MSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO3ZhciBuLGk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTXVsdGlzaWdTdGF0ZVN0YXR1cz1yLk11bHRpc2lnRGVsZXRlUmVxdWVzdFJlamVjdGlvbkVycm9yPXZvaWQgMCxmdW5jdGlvbihlKXtlLkNBTk5PVF9ERVNFUklBTElaRV9TVEFURT0iQ2Fubm90IGRlc2VyaWFsaXplIHRoZSBjb250cmFjdCBzdGF0ZSIsZS5NVUxUSVNJR19OT1RfSU5JVElBTElaRUQ9IlNtYXJ0IGNvbnRyYWN0IHBhbmlja2VkOiBNdWx0aXNpZyBjb250cmFjdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlIixlLk5PX1NVQ0hfUkVRVUVTVD0iU21hcnQgY29udHJhY3QgcGFuaWNrZWQ6IHBhbmlja2VkIGF0ICdObyBzdWNoIHJlcXVlc3Q6IGVpdGhlciB3cm9uZyBudW1iZXIgb3IgYWxyZWFkeSBjb25maXJtZWQnIixlLlJFUVVFU1RfQ09PTERPV05fRVJST1I9IlJlcXVlc3QgY2Fubm90IGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24uIixlLk1FVEhPRF9OT1RfRk9VTkQ9IkNvbnRyYWN0IG1ldGhvZCBpcyBub3QgZm91bmQifShufHwoci5NdWx0aXNpZ0RlbGV0ZVJlcXVlc3RSZWplY3Rpb25FcnJvcj1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklOVkFMSURfU1RBVEU9MF09IklOVkFMSURfU1RBVEUiLGVbZS5TVEFURV9OT1RfSU5JVElBTElaRUQ9MV09IlNUQVRFX05PVF9JTklUSUFMSVpFRCIsZVtlLlZBTElEX1NUQVRFPTJdPSJWQUxJRF9TVEFURSIsZVtlLlVOS05PV05fU1RBVEU9M109IlVOS05PV05fU1RBVEUifShpfHwoci5NdWx0aXNpZ1N0YXRlU3RhdHVzPWk9e30pKX0sMjk4MjQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPWUuaSgzOTU4Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuQWNjb3VudE11bHRpc2lnPXZvaWQgMDtsZXQgbz1lLnIoNDUwODApLGE9ZS5yKDI0MzQwKSxzPWUucigzMjY4OSksYz1lLnIoNjEzNDQpLHU9ZS5yKDI0NDYxKSx7ZGVwbG95Q29udHJhY3Q6ZixmdW5jdGlvbkNhbGw6ZH09by5hY3Rpb25DcmVhdG9yczshZnVuY3Rpb24oZSl7ZVtlLklOVkFMSURfQ09ERT0wXT0iSU5WQUxJRF9DT0RFIixlW2UuVkFMSURfQ09ERT0xXT0iVkFMSURfQ09ERSIsZVtlLlVOS05PV05fQ09ERT0yXT0iVU5LTk9XTl9DT0RFIn0obnx8KG49e30pKTtsZXQgbD17W2MuTVVMVElTSUdfU1RPUkFHRV9LRVldOm51bGx9O2NsYXNzIGggZXh0ZW5kcyBzLkFjY291bnR7c3RvcmFnZTtvbkFkZFJlcXVlc3RSZXN1bHQ7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKGUsdCksdGhpcy5zdG9yYWdlPXIuc3RvcmFnZSx0aGlzLm9uQWRkUmVxdWVzdFJlc3VsdD1yLm9uQWRkUmVxdWVzdFJlc3VsdH1hc3luYyBzaWduQW5kU2VuZFRyYW5zYWN0aW9uV2l0aEFjY291bnQoZSx0KXtyZXR1cm4gc3VwZXIuc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDplLGFjdGlvbnM6dH0pfWFzeW5jIHNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6ZSxhY3Rpb25zOnR9KXtsZXQgcix7YWNjb3VudElkOm59PXRoaXMsbz1pLkJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHtyZXF1ZXN0OntyZWNlaXZlcl9pZDplLGFjdGlvbnM6Yih0LG4sZSl9fSkpO3RyeXtyPWF3YWl0IHN1cGVyLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6bixhY3Rpb25zOltkKCJhZGRfcmVxdWVzdF9hbmRfY29uZmlybSIsbyxjLk1VTFRJU0lHX0dBUyxjLk1VTFRJU0lHX0RFUE9TSVQpXX0pfWNhdGNoKHIpe2lmKHIudG9TdHJpbmcoKS5pbmNsdWRlcygiQWNjb3VudCBoYXMgdG9vIG1hbnkgYWN0aXZlIHJlcXVlc3RzLiBDb25maXJtIG9yIGRlbGV0ZSBzb21lIikpcmV0dXJuIGF3YWl0IHRoaXMuZGVsZXRlVW5jb25maXJtZWRSZXF1ZXN0cygpLGF3YWl0IHRoaXMuc2lnbkFuZFNlbmRUcmFuc2FjdGlvbih7cmVjZWl2ZXJJZDplLGFjdGlvbnM6dH0pO3Rocm93IHJ9aWYoIXIuc3RhdHVzKXRocm93IEVycm9yKCJSZXF1ZXN0IGZhaWxlZCIpO2xldCBhPXsuLi5yLnN0YXR1c307aWYoIWEuU3VjY2Vzc1ZhbHVlfHwic3RyaW5nIiE9dHlwZW9mIGEuU3VjY2Vzc1ZhbHVlKXRocm93IEVycm9yKCJSZXF1ZXN0IGZhaWxlZCIpO3JldHVybiB0aGlzLnNldFJlcXVlc3Qoe2FjY291bnRJZDpuLGFjdGlvbnM6dCxyZXF1ZXN0SWQ6cGFyc2VJbnQoaS5CdWZmZXIuZnJvbShhLlN1Y2Nlc3NWYWx1ZSwiYmFzZTY0IikudG9TdHJpbmcoImFzY2lpIiksMTApfSksdGhpcy5vbkFkZFJlcXVlc3RSZXN1bHQmJmF3YWl0IHRoaXMub25BZGRSZXF1ZXN0UmVzdWx0KHIpLHRoaXMuZGVsZXRlVW5jb25maXJtZWRSZXF1ZXN0cygpLHJ9YXN5bmMgY2hlY2tNdWx0aXNpZ0NvZGVBbmRTdGF0ZVN0YXR1cyhlKXtsZXQgdD0weGZmZmZmZmZmLHI9ZT9uLlVOS05PV05fQ09ERTpuLlZBTElEX0NPREU7dHJ5e3JldHVybiBlP2F3YWl0IHN1cGVyLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6dGhpcy5hY2NvdW50SWQsYWN0aW9uczpbZihlKSxkKCJkZWxldGVfcmVxdWVzdCIse3JlcXVlc3RfaWQ6dH0sYy5NVUxUSVNJR19HQVMsYy5NVUxUSVNJR19ERVBPU0lUKV19KTphd2FpdCB0aGlzLmRlbGV0ZVJlcXVlc3QodCkse2NvZGVTdGF0dXM6bi5WQUxJRF9DT0RFLHN0YXRlU3RhdHVzOnUuTXVsdGlzaWdTdGF0ZVN0YXR1cy5WQUxJRF9TVEFURX19Y2F0Y2goZSl7aWYobmV3IFJlZ0V4cCh1Lk11bHRpc2lnRGVsZXRlUmVxdWVzdFJlamVjdGlvbkVycm9yLkNBTk5PVF9ERVNFUklBTElaRV9TVEFURSkudGVzdChlJiZlLmtpbmQmJmUua2luZC5FeGVjdXRpb25FcnJvcikpcmV0dXJue2NvZGVTdGF0dXM6cixzdGF0ZVN0YXR1czp1Lk11bHRpc2lnU3RhdGVTdGF0dXMuSU5WQUxJRF9TVEFURX07aWYobmV3IFJlZ0V4cCh1Lk11bHRpc2lnRGVsZXRlUmVxdWVzdFJlamVjdGlvbkVycm9yLk1VTFRJU0lHX05PVF9JTklUSUFMSVpFRCkudGVzdChlJiZlLmtpbmQmJmUua2luZC5FeGVjdXRpb25FcnJvcikpcmV0dXJue2NvZGVTdGF0dXM6cixzdGF0ZVN0YXR1czp1Lk11bHRpc2lnU3RhdGVTdGF0dXMuU1RBVEVfTk9UX0lOSVRJQUxJWkVEfTtpZihuZXcgUmVnRXhwKHUuTXVsdGlzaWdEZWxldGVSZXF1ZXN0UmVqZWN0aW9uRXJyb3IuTk9fU1VDSF9SRVFVRVNUKS50ZXN0KGUmJmUua2luZCYmZS5raW5kLkV4ZWN1dGlvbkVycm9yKSlyZXR1cm57Y29kZVN0YXR1czpyLHN0YXRlU3RhdHVzOnUuTXVsdGlzaWdTdGF0ZVN0YXR1cy5WQUxJRF9TVEFURX07ZWxzZSBpZihuZXcgUmVnRXhwKHUuTXVsdGlzaWdEZWxldGVSZXF1ZXN0UmVqZWN0aW9uRXJyb3IuTUVUSE9EX05PVF9GT1VORCkudGVzdChlJiZlLm1lc3NhZ2UpKXJldHVybntjb2RlU3RhdHVzOm4uSU5WQUxJRF9DT0RFLHN0YXRlU3RhdHVzOnUuTXVsdGlzaWdTdGF0ZVN0YXR1cy5VTktOT1dOX1NUQVRFfTt0aHJvdyBlfX1kZWxldGVSZXF1ZXN0KGUpe3JldHVybiBzdXBlci5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOnRoaXMuYWNjb3VudElkLGFjdGlvbnM6W2QoImRlbGV0ZV9yZXF1ZXN0Iix7cmVxdWVzdF9pZDplfSxjLk1VTFRJU0lHX0dBUyxjLk1VTFRJU0lHX0RFUE9TSVQpXX0pfWFzeW5jIGRlbGV0ZUFsbFJlcXVlc3RzKCl7bGV0IGU9YXdhaXQgdGhpcy5nZXRSZXF1ZXN0SWRzKCk7ZS5sZW5ndGgmJmF3YWl0IFByb21pc2UuYWxsKGUubWFwKGU9PnRoaXMuZGVsZXRlUmVxdWVzdChlKSkpfWFzeW5jIGRlbGV0ZVVuY29uZmlybWVkUmVxdWVzdHMoKXtsZXQgZT1hd2FpdCB0aGlzLmdldFJlcXVlc3RJZHMoKSx7cmVxdWVzdElkOnR9PXRoaXMuZ2V0UmVxdWVzdCgpO2ZvcihsZXQgciBvZiBlKWlmKHIhPXQpdHJ5e2F3YWl0IHN1cGVyLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6dGhpcy5hY2NvdW50SWQsYWN0aW9uczpbZCgiZGVsZXRlX3JlcXVlc3QiLHtyZXF1ZXN0X2lkOnJ9LGMuTVVMVElTSUdfR0FTLGMuTVVMVElTSUdfREVQT1NJVCldfSl9Y2F0Y2goZSl7YS5Mb2dnZXIud2FybigiQXR0ZW1wdCB0byBkZWxldGUgYW4gZWFybGllciByZXF1ZXN0IGJlZm9yZSAxNSBtaW51dGVzIGZhaWxlZC4gV2lsbCB0cnkgYWdhaW4uIil9fWFzeW5jIGdldFJlcXVlc3RJZHMoKXtyZXR1cm4gdGhpcy52aWV3RnVuY3Rpb24oe2NvbnRyYWN0SWQ6dGhpcy5hY2NvdW50SWQsbWV0aG9kTmFtZToibGlzdF9yZXF1ZXN0X2lkcyJ9KX1nZXRSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuc3RvcmFnZT9KU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKGMuTVVMVElTSUdfU1RPUkFHRV9LRVkpfHwie30iKTpsW2MuTVVMVElTSUdfU1RPUkFHRV9LRVldfXNldFJlcXVlc3QoZSl7aWYodGhpcy5zdG9yYWdlKXJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShjLk1VTFRJU0lHX1NUT1JBR0VfS0VZLEpTT04uc3RyaW5naWZ5KGUpKTtsW2MuTVVMVElTSUdfU1RPUkFHRV9LRVldPWV9fXIuQWNjb3VudE11bHRpc2lnPWg7bGV0IHA9ZT0+ZS50b1N0cmluZygpLnJlcGxhY2UoImVkMjU1MTk6IiwiIiksYj0oZSx0LHIpPT5lLm1hcChlPT57bGV0IG49ZS5lbnVtLHtnYXM6byxwdWJsaWNLZXk6YSxtZXRob2ROYW1lOnMsYXJnczp1LGRlcG9zaXQ6ZixhY2Nlc3NLZXk6ZCxjb2RlOmx9PWVbbl0saD17dHlwZTpuWzBdLnRvVXBwZXJDYXNlKCkrbi5zdWJzdHIoMSksZ2FzOm8mJm8udG9TdHJpbmcoKXx8dm9pZCAwLHB1YmxpY19rZXk6YSYmcChhKXx8dm9pZCAwLG1ldGhvZF9uYW1lOnMsYXJnczp1JiZpLkJ1ZmZlci5mcm9tKHUpLnRvU3RyaW5nKCJiYXNlNjQiKXx8dm9pZCAwLGNvZGU6bCYmaS5CdWZmZXIuZnJvbShsKS50b1N0cmluZygiYmFzZTY0Iil8fHZvaWQgMCxhbW91bnQ6ZiYmZi50b1N0cmluZygpfHx2b2lkIDAsZGVwb3NpdDpmJiZmLnRvU3RyaW5nKCl8fCIwIixwZXJtaXNzaW9uOnZvaWQgMH07aWYoZCYmKHI9PT10JiYiZnVsbEFjY2VzcyIhPT1kLnBlcm1pc3Npb24uZW51bSYmKGgucGVybWlzc2lvbj17cmVjZWl2ZXJfaWQ6dCxhbGxvd2FuY2U6Yy5NVUxUSVNJR19BTExPV0FOQ0UudG9TdHJpbmcoKSxtZXRob2RfbmFtZXM6Yy5NVUxUSVNJR19DSEFOR0VfTUVUSE9EU30pLCJmdW5jdGlvbkNhbGwiPT09ZC5wZXJtaXNzaW9uLmVudW0pKXtsZXR7cmVjZWl2ZXJJZDplLG1ldGhvZE5hbWVzOnQsYWxsb3dhbmNlOnJ9PWQucGVybWlzc2lvbi5mdW5jdGlvbkNhbGw7aC5wZXJtaXNzaW9uPXtyZWNlaXZlcl9pZDplLGFsbG93YW5jZTpyJiZyLnRvU3RyaW5nKCl8fHZvaWQgMCxtZXRob2RfbmFtZXM6dH19cmV0dXJuIGh9KX0sMzQxNTYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmkoMzk1ODcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkFjY291bnQyRkE9dm9pZCAwO2xldCBpPWUucig3MjIzKSxvPWUucig4NjU1MSksYT1lLnIoNDUwODApLHM9ZS5yKDI0MzQwKSxjPWUucigyOTgyNCksdT1lLnIoNjEzNDQpLGY9ZS5yKDI0NDYxKSx7YWRkS2V5OmQsZGVsZXRlS2V5OmwsZGVwbG95Q29udHJhY3Q6aCxmdWxsQWNjZXNzS2V5OnAsZnVuY3Rpb25DYWxsOmIsZnVuY3Rpb25DYWxsQWNjZXNzS2V5Om19PWEuYWN0aW9uQ3JlYXRvcnM7Y2xhc3MgeSBleHRlbmRzIGMuQWNjb3VudE11bHRpc2lne3NlbmRDb2RlO2dldENvZGU7dmVyaWZ5Q29kZTtvbkNvbmZpcm1SZXN1bHQ7aGVscGVyVXJsPSJodHRwczovL2hlbHBlci50ZXN0bmV0Lm5lYXIub3JnIjtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSx0LHIpLHRoaXMuaGVscGVyVXJsPXIuaGVscGVyVXJsfHx0aGlzLmhlbHBlclVybCx0aGlzLnN0b3JhZ2U9ci5zdG9yYWdlLHRoaXMuc2VuZENvZGU9ci5zZW5kQ29kZXx8dGhpcy5zZW5kQ29kZURlZmF1bHQsdGhpcy5nZXRDb2RlPXIuZ2V0Q29kZXx8dGhpcy5nZXRDb2RlRGVmYXVsdCx0aGlzLnZlcmlmeUNvZGU9ci52ZXJpZnlDb2RlfHx0aGlzLnZlcmlmeUNvZGVEZWZhdWx0LHRoaXMub25Db25maXJtUmVzdWx0PXIub25Db25maXJtUmVzdWx0fWFzeW5jIHNpZ25BbmRTZW5kVHJhbnNhY3Rpb24oe3JlY2VpdmVySWQ6ZSxhY3Rpb25zOnR9KXthd2FpdCBzdXBlci5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOmUsYWN0aW9uczp0fSksYXdhaXQgdGhpcy5zZW5kQ29kZSgpO2xldCByPWF3YWl0IHRoaXMucHJvbXB0QW5kVmVyaWZ5KCk7cmV0dXJuIHRoaXMub25Db25maXJtUmVzdWx0JiZhd2FpdCB0aGlzLm9uQ29uZmlybVJlc3VsdChyKSxyfWFzeW5jIGRlcGxveU11bHRpc2lnKGUpe2xldHthY2NvdW50SWQ6dH09dGhpcyxyPShhd2FpdCB0aGlzLmdldFJlY292ZXJ5TWV0aG9kcygpKS5kYXRhLmZpbHRlcigoe2tpbmQ6ZSxwdWJsaWNLZXk6dH0pPT4oInBocmFzZSI9PT1lfHwibGVkZ2VyIj09PWUpJiZudWxsIT09dCkubWFwKGU9PmUucHVibGljS2V5KSxpPShhd2FpdCB0aGlzLmdldEFjY2Vzc0tleXMoKSkuZmlsdGVyKCh7cHVibGljX2tleTplLGFjY2Vzc19rZXk6e3Blcm1pc3Npb246dH19KT0+IkZ1bGxBY2Nlc3MiPT09dCYmIXIuaW5jbHVkZXMoZSkpLm1hcChlPT5lLnB1YmxpY19rZXkpLm1hcChnKSxhPWcoKGF3YWl0IHRoaXMucG9zdFNpZ25lZEpzb24oIi8yZmEvZ2V0QWNjZXNzS2V5Iix7YWNjb3VudElkOnR9KSkucHVibGljS2V5KSxjPW4uQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoe251bV9jb25maXJtYXRpb25zOjJ9KSkscD1bLi4uaS5tYXAoZT0+bChlKSksLi4uaS5tYXAoZT0+ZChlLG0odCx1Lk1VTFRJU0lHX0NIQU5HRV9NRVRIT0RTLG51bGwpKSksZChhLG0odCx1Lk1VTFRJU0lHX0NPTkZJUk1fTUVUSE9EUyxudWxsKSksaChlKV0seT1wLmNvbmNhdChiKCJuZXciLGMsdS5NVUxUSVNJR19HQVMsdS5NVUxUSVNJR19ERVBPU0lUKSk7cy5Mb2dnZXIubG9nKCJkZXBsb3lpbmcgbXVsdGlzaWcgY29udHJhY3QgZm9yIix0KTtsZXR7c3RhdGVTdGF0dXM6dn09YXdhaXQgdGhpcy5jaGVja011bHRpc2lnQ29kZUFuZFN0YXRlU3RhdHVzKGUpO3N3aXRjaCh2KXtjYXNlIGYuTXVsdGlzaWdTdGF0ZVN0YXR1cy5TVEFURV9OT1RfSU5JVElBTElaRUQ6cmV0dXJuIGF3YWl0IHN1cGVyLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb25XaXRoQWNjb3VudCh0LHkpO2Nhc2UgZi5NdWx0aXNpZ1N0YXRlU3RhdHVzLlZBTElEX1NUQVRFOnJldHVybiBhd2FpdCBzdXBlci5zaWduQW5kU2VuZFRyYW5zYWN0aW9uV2l0aEFjY291bnQodCxwKTtjYXNlIGYuTXVsdGlzaWdTdGF0ZVN0YXR1cy5JTlZBTElEX1NUQVRFOnRocm93IG5ldyBvLlR5cGVkRXJyb3IoYENhbiBub3QgZGVwbG95IGEgY29udHJhY3QgdG8gYWNjb3VudCAke3RoaXMuYWNjb3VudElkfSBvbiBuZXR3b3JrICR7dGhpcy5jb25uZWN0aW9uLm5ldHdvcmtJZH0sIHRoZSBhY2NvdW50IGhhcyBleGlzdGluZyBzdGF0ZS5gLCJDb250cmFjdEhhc0V4aXN0aW5nU3RhdGUiKTtkZWZhdWx0OnRocm93IG5ldyBvLlR5cGVkRXJyb3IoYENhbiBub3QgZGVwbG95IGEgY29udHJhY3QgdG8gYWNjb3VudCAke3RoaXMuYWNjb3VudElkfSBvbiBuZXR3b3JrICR7dGhpcy5jb25uZWN0aW9uLm5ldHdvcmtJZH0sIHRoZSBhY2NvdW50IHN0YXRlIGNvdWxkIG5vdCBiZSB2ZXJpZmllZC5gLCJDb250cmFjdFN0YXRlVW5rbm93biIpfX1hc3luYyBkaXNhYmxlV2l0aEZBSyh7Y29udHJhY3RCeXRlczplLGNsZWFudXBDb250cmFjdEJ5dGVzOnR9KXtsZXQgcj1bXTt0JiYoYXdhaXQgdGhpcy5kZWxldGVBbGxSZXF1ZXN0cygpLmNhdGNoKGU9PmUpLHI9YXdhaXQgdGhpcy5nZXQyZmFEaXNhYmxlQ2xlYW51cEFjdGlvbnModCkpO2xldCBuPVsuLi5yLC4uLmF3YWl0IHRoaXMuZ2V0MmZhRGlzYWJsZUtleUNvbnZlcnNpb25BY3Rpb25zKCksaChlKV0saT1hd2FpdCB0aGlzLmZpbmRBY2Nlc3NLZXkodGhpcy5hY2NvdW50SWQsbik7aWYoaSYmaS5hY2Nlc3NLZXkmJiJGdWxsQWNjZXNzIiE9PWkuYWNjZXNzS2V5LnBlcm1pc3Npb24pdGhyb3cgbmV3IG8uVHlwZWRFcnJvcigiTm8gZnVsbCBhY2Nlc3Mga2V5IGZvdW5kIGluIGtleXN0b3JlLiBVbmFibGUgdG8gYnlwYXNzIG11bHRpc2lnIiwiTm9GQUtGb3VuZCIpO3JldHVybiB0aGlzLnNpZ25BbmRTZW5kVHJhbnNhY3Rpb25XaXRoQWNjb3VudCh0aGlzLmFjY291bnRJZCxuKX1hc3luYyBnZXQyZmFEaXNhYmxlQ2xlYW51cEFjdGlvbnMoZSl7bGV0IHQ9YXdhaXQgdGhpcy52aWV3U3RhdGUoIiIpLmNhdGNoKGU9PntsZXQgdD1lLmNhdXNlJiZlLmNhdXNlLm5hbWU7aWYoIk5PX0NPTlRSQUNUX0NPREUiPT10KXJldHVybltdO3Rocm93IlRPT19MQVJHRV9DT05UUkFDVF9TVEFURSI9PXQ/bmV3IG8uVHlwZWRFcnJvcihgQ2FuIG5vdCBkZXBsb3kgYSBjb250cmFjdCB0byBhY2NvdW50ICR7dGhpcy5hY2NvdW50SWR9IG9uIG5ldHdvcmsgJHt0aGlzLmNvbm5lY3Rpb24ubmV0d29ya0lkfSwgdGhlIGFjY291bnQgaGFzIGV4aXN0aW5nIHN0YXRlLmAsIkNvbnRyYWN0SGFzRXhpc3RpbmdTdGF0ZSIpOmV9KSxyPXQubWFwKCh7a2V5OmV9KT0+ZS50b1N0cmluZygiYmFzZTY0IikpO3JldHVybiB0Lmxlbmd0aD9baChlKSxiKCJjbGVhbiIse2tleXM6cn0sdS5NVUxUSVNJR19HQVMsMG4pXTpbXX1hc3luYyBnZXQyZmFEaXNhYmxlS2V5Q29udmVyc2lvbkFjdGlvbnMoKXtsZXR7YWNjb3VudElkOmV9PXRoaXMsdD0oYXdhaXQgdGhpcy5nZXRBY2Nlc3NLZXlzKCkpLmZpbHRlcigoe2FjY2Vzc19rZXk6ZX0pPT4iRnVsbEFjY2VzcyIhPT1lLnBlcm1pc3Npb24pLmZpbHRlcigoe2FjY2Vzc19rZXk6dH0pPT57bGV0IHI9dC5wZXJtaXNzaW9uLkZ1bmN0aW9uQ2FsbDtyZXR1cm4gci5yZWNlaXZlcl9pZD09PWUmJjQ9PT1yLm1ldGhvZF9uYW1lcy5sZW5ndGgmJnIubWV0aG9kX25hbWVzLmluY2x1ZGVzKCJhZGRfcmVxdWVzdF9hbmRfY29uZmlybSIpfSk7cmV0dXJuW2woaS5QdWJsaWNLZXkuZnJvbSgoYXdhaXQgdGhpcy5wb3N0U2lnbmVkSnNvbigiLzJmYS9nZXRBY2Nlc3NLZXkiLHthY2NvdW50SWQ6ZX0pKS5wdWJsaWNLZXkpKSwuLi50Lm1hcCgoe3B1YmxpY19rZXk6ZX0pPT5sKGkuUHVibGljS2V5LmZyb20oZSkpKSwuLi50Lm1hcCgoe3B1YmxpY19rZXk6ZX0pPT5kKGkuUHVibGljS2V5LmZyb20oZSkscCgpKSldfWFzeW5jIGRpc2FibGUoZSx0KXtsZXQgcix7c3RhdGVTdGF0dXM6bn09YXdhaXQgdGhpcy5jaGVja011bHRpc2lnQ29kZUFuZFN0YXRlU3RhdHVzKCk7aWYobiE9PWYuTXVsdGlzaWdTdGF0ZVN0YXR1cy5WQUxJRF9TVEFURSYmbiE9PWYuTXVsdGlzaWdTdGF0ZVN0YXR1cy5TVEFURV9OT1RfSU5JVElBTElaRUQpdGhyb3cgbmV3IG8uVHlwZWRFcnJvcihgQ2FuIG5vdCBkZXBsb3kgYSBjb250cmFjdCB0byBhY2NvdW50ICR7dGhpcy5hY2NvdW50SWR9IG9uIG5ldHdvcmsgJHt0aGlzLmNvbm5lY3Rpb24ubmV0d29ya0lkfSwgdGhlIGFjY291bnQgc3RhdGUgY291bGQgbm90IGJlIHZlcmlmaWVkLmAsIkNvbnRyYWN0U3RhdGVVbmtub3duIik7YXdhaXQgdGhpcy5kZWxldGVBbGxSZXF1ZXN0cygpLmNhdGNoKGU9PnI9ZSk7bGV0IGk9Wy4uLmF3YWl0IHRoaXMuZ2V0MmZhRGlzYWJsZUNsZWFudXBBY3Rpb25zKHQpLmNhdGNoKGU9PntpZigiQ29udHJhY3RIYXNFeGlzdGluZ1N0YXRlIj09PWUudHlwZSl0aHJvdyByfHxlO3Rocm93IGV9KSwuLi5hd2FpdCB0aGlzLmdldDJmYURpc2FibGVLZXlDb252ZXJzaW9uQWN0aW9ucygpLGgoZSldO3JldHVybiBzLkxvZ2dlci5sb2coImRpc2FibGluZyAyZmEgZm9yIix0aGlzLmFjY291bnRJZCksYXdhaXQgdGhpcy5zaWduQW5kU2VuZFRyYW5zYWN0aW9uKHtyZWNlaXZlcklkOnRoaXMuYWNjb3VudElkLGFjdGlvbnM6aX0pfWFzeW5jIHNlbmRDb2RlRGVmYXVsdCgpe2xldHthY2NvdW50SWQ6ZX09dGhpcyx7cmVxdWVzdElkOnR9PXRoaXMuZ2V0UmVxdWVzdCgpLHI9YXdhaXQgdGhpcy5nZXQyZmFNZXRob2QoKTtyZXR1cm4gYXdhaXQgdGhpcy5wb3N0U2lnbmVkSnNvbigiLzJmYS9zZW5kIix7YWNjb3VudElkOmUsbWV0aG9kOnIscmVxdWVzdElkOnR9KSx0fWFzeW5jIGdldENvZGVEZWZhdWx0KCl7dGhyb3cgRXJyb3IoJ1RoZXJlIGlzIG5vIGdldENvZGUgY2FsbGJhY2sgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIHlvdXIgb3duIGluIEFjY291bnRNdWx0aXNpZyBjb25zdHJ1Y3RvciBvcHRpb25zLiBJdCBoYXMgYSBwYXJhbWV0ZXIgbWV0aG9kIHdoZXJlIG1ldGhvZC5raW5kIGlzICJlbWFpbCIgb3IgInBob25lIi4nKX1hc3luYyBwcm9tcHRBbmRWZXJpZnkoKXtsZXQgZT1hd2FpdCB0aGlzLmdldDJmYU1ldGhvZCgpLHQ9YXdhaXQgdGhpcy5nZXRDb2RlKGUpO3RyeXtyZXR1cm4gYXdhaXQgdGhpcy52ZXJpZnlDb2RlKHQpfWNhdGNoKGUpe2lmKHMuTG9nZ2VyLndhcm4oIkVycm9yIHZhbGlkYXRpbmcgc2VjdXJpdHkgY29kZToiLGUpLGUudG9TdHJpbmcoKS5pbmNsdWRlcygiaW52YWxpZCAyZmEgY29kZSBwcm92aWRlZCIpfHxlLnRvU3RyaW5nKCkuaW5jbHVkZXMoIjJmYSBjb2RlIG5vdCB2YWxpZCIpKXJldHVybiBhd2FpdCB0aGlzLnByb21wdEFuZFZlcmlmeSgpO3Rocm93IGV9fWFzeW5jIHZlcmlmeUNvZGVEZWZhdWx0KGUpe2xldHthY2NvdW50SWQ6dH09dGhpcyxyPXRoaXMuZ2V0UmVxdWVzdCgpO2lmKCFyKXRocm93IEVycm9yKCJubyByZXF1ZXN0IHBlbmRpbmciKTtsZXR7cmVxdWVzdElkOm59PXI7cmV0dXJuIGF3YWl0IHRoaXMucG9zdFNpZ25lZEpzb24oIi8yZmEvdmVyaWZ5Iix7YWNjb3VudElkOnQsc2VjdXJpdHlDb2RlOmUscmVxdWVzdElkOm59KX1hc3luYyBnZXRSZWNvdmVyeU1ldGhvZHMoKXtsZXR7YWNjb3VudElkOmV9PXRoaXM7cmV0dXJue2FjY291bnRJZDplLGRhdGE6YXdhaXQgdGhpcy5wb3N0U2lnbmVkSnNvbigiL2FjY291bnQvcmVjb3ZlcnlNZXRob2RzIix7YWNjb3VudElkOmV9KX19YXN5bmMgZ2V0MmZhTWV0aG9kKCl7bGV0e2RhdGE6ZX09YXdhaXQgdGhpcy5nZXRSZWNvdmVyeU1ldGhvZHMoKTtpZihlJiZlLmxlbmd0aCYmKGU9ZS5maW5kKGU9PjA9PT1lLmtpbmQuaW5kZXhPZigiMmZhLSIpKSksIWUpcmV0dXJuIG51bGw7bGV0e2tpbmQ6dCxkZXRhaWw6cn09ZTtyZXR1cm57a2luZDp0LGRldGFpbDpyfX1hc3luYyBzaWduYXR1cmVGb3IoKXtsZXR7YWNjb3VudElkOmV9PXRoaXMsdD0oYXdhaXQgdGhpcy5jb25uZWN0aW9uLnByb3ZpZGVyLmJsb2NrKHtmaW5hbGl0eToiZmluYWwifSkpLmhlYWRlci5oZWlnaHQudG9TdHJpbmcoKSxyPWF3YWl0IHRoaXMuY29ubmVjdGlvbi5zaWduZXIuc2lnbk1lc3NhZ2Uobi5CdWZmZXIuZnJvbSh0KSxlLHRoaXMuY29ubmVjdGlvbi5uZXR3b3JrSWQpO3JldHVybntibG9ja051bWJlcjp0LGJsb2NrTnVtYmVyU2lnbmF0dXJlOm4uQnVmZmVyLmZyb20oci5zaWduYXR1cmUpLnRvU3RyaW5nKCJiYXNlNjQiKX19YXN5bmMgcG9zdFNpZ25lZEpzb24oZSx0KXtyZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5oZWxwZXJVcmwrZSx7Ym9keTpKU09OLnN0cmluZ2lmeSh7Li4udCwuLi5hd2FpdCB0aGlzLnNpZ25hdHVyZUZvcigpfSksbWV0aG9kOiJQT1NUIn0pfX1yLkFjY291bnQyRkE9eTtsZXQgZz1lPT5pLlB1YmxpY0tleS5mcm9tKGUpfSw2ODk4LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuVXJsQWNjb3VudENyZWF0b3I9ci5Mb2NhbEFjY291bnRDcmVhdG9yPXIuQWNjb3VudENyZWF0b3I9dm9pZCAwO2NsYXNzIG57fXIuQWNjb3VudENyZWF0b3I9bjtjbGFzcyBpIGV4dGVuZHMgbnttYXN0ZXJBY2NvdW50O2luaXRpYWxCYWxhbmNlO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLm1hc3RlckFjY291bnQ9ZSx0aGlzLmluaXRpYWxCYWxhbmNlPXR9YXN5bmMgY3JlYXRlQWNjb3VudChlLHQpe2F3YWl0IHRoaXMubWFzdGVyQWNjb3VudC5jcmVhdGVBY2NvdW50KGUsdCx0aGlzLmluaXRpYWxCYWxhbmNlKX19ci5Mb2NhbEFjY291bnRDcmVhdG9yPWk7Y2xhc3MgbyBleHRlbmRzIG57Y29ubmVjdGlvbjtoZWxwZXJVcmw7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuY29ubmVjdGlvbj1lLHRoaXMuaGVscGVyVXJsPXR9YXN5bmMgY3JlYXRlQWNjb3VudChlLHQpe2F3YWl0IGZldGNoKGAke3RoaXMuaGVscGVyVXJsfS9hY2NvdW50YCx7Ym9keTpKU09OLnN0cmluZ2lmeSh7bmV3QWNjb3VudElkOmUsbmV3QWNjb3VudFB1YmxpY0tleTp0LnRvU3RyaW5nKCl9KSxtZXRob2Q6IlBPU1QifSl9fXIuVXJsQWNjb3VudENyZWF0b3I9b30sMTg2MDMsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5LZXlTdG9yZT12b2lkIDA7Y2xhc3Mgbnt9ci5LZXlTdG9yZT1ufSwxNTUyNSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkluTWVtb3J5S2V5U3RvcmU9dm9pZCAwO2xldCBuPWUucig3MjIzKSxpPWUucigxODYwMyk7Y2xhc3MgbyBleHRlbmRzIGkuS2V5U3RvcmV7a2V5cztjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5rZXlzPXt9fWFzeW5jIHNldEtleShlLHQscil7dGhpcy5rZXlzW2Ake3R9OiR7ZX1gXT1yLnRvU3RyaW5nKCl9YXN5bmMgZ2V0S2V5KGUsdCl7bGV0IHI9dGhpcy5rZXlzW2Ake3R9OiR7ZX1gXTtyZXR1cm4gcj9uLktleVBhaXIuZnJvbVN0cmluZyhyKTpudWxsfWFzeW5jIHJlbW92ZUtleShlLHQpe2RlbGV0ZSB0aGlzLmtleXNbYCR7dH06JHtlfWBdfWFzeW5jIGNsZWFyKCl7dGhpcy5rZXlzPXt9fWFzeW5jIGdldE5ldHdvcmtzKCl7bGV0IGU9bmV3IFNldDtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5rZXlzKS5mb3JFYWNoKHQ9PntsZXQgcj10LnNwbGl0KCI6Iik7ZS5hZGQoclsxXSl9KSxBcnJheS5mcm9tKGUudmFsdWVzKCkpfWFzeW5jIGdldEFjY291bnRzKGUpe2xldCB0PVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmtleXMpLmZvckVhY2gocj0+e2xldCBuPXIuc3BsaXQoIjoiKTtuW24ubGVuZ3RoLTFdPT09ZSYmdC5wdXNoKG4uc2xpY2UoMCxuLmxlbmd0aC0xKS5qb2luKCI6IikpfSksdH10b1N0cmluZygpe3JldHVybiJJbk1lbW9yeUtleVN0b3JlIn19ci5Jbk1lbW9yeUtleVN0b3JlPW99LDQ1OTE5LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuTWVyZ2VLZXlTdG9yZT12b2lkIDA7bGV0IG49ZS5yKDE4NjAzKTtjbGFzcyBpIGV4dGVuZHMgbi5LZXlTdG9yZXtvcHRpb25zO2tleVN0b3Jlcztjb25zdHJ1Y3RvcihlLHQ9e3dyaXRlS2V5U3RvcmVJbmRleDowfSl7c3VwZXIoKSx0aGlzLm9wdGlvbnM9dCx0aGlzLmtleVN0b3Jlcz1lfWFzeW5jIHNldEtleShlLHQscil7YXdhaXQgdGhpcy5rZXlTdG9yZXNbdGhpcy5vcHRpb25zLndyaXRlS2V5U3RvcmVJbmRleF0uc2V0S2V5KGUsdCxyKX1hc3luYyBnZXRLZXkoZSx0KXtmb3IobGV0IHIgb2YgdGhpcy5rZXlTdG9yZXMpe2xldCBuPWF3YWl0IHIuZ2V0S2V5KGUsdCk7aWYobilyZXR1cm4gbn1yZXR1cm4gbnVsbH1hc3luYyByZW1vdmVLZXkoZSx0KXtmb3IobGV0IHIgb2YgdGhpcy5rZXlTdG9yZXMpYXdhaXQgci5yZW1vdmVLZXkoZSx0KX1hc3luYyBjbGVhcigpe2ZvcihsZXQgZSBvZiB0aGlzLmtleVN0b3Jlcylhd2FpdCBlLmNsZWFyKCl9YXN5bmMgZ2V0TmV0d29ya3MoKXtsZXQgZT1uZXcgU2V0O2ZvcihsZXQgdCBvZiB0aGlzLmtleVN0b3Jlcylmb3IobGV0IHIgb2YoYXdhaXQgdC5nZXROZXR3b3JrcygpKSllLmFkZChyKTtyZXR1cm4gQXJyYXkuZnJvbShlKX1hc3luYyBnZXRBY2NvdW50cyhlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgciBvZiB0aGlzLmtleVN0b3Jlcylmb3IobGV0IG4gb2YoYXdhaXQgci5nZXRBY2NvdW50cyhlKSkpdC5hZGQobik7cmV0dXJuIEFycmF5LmZyb20odCl9dG9TdHJpbmcoKXtyZXR1cm5gTWVyZ2VLZXlTdG9yZSgke3RoaXMua2V5U3RvcmVzLmpvaW4oIiwgIil9KWB9fXIuTWVyZ2VLZXlTdG9yZT1pfSwxODAwMywoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLk11bHRpQ29udHJhY3RLZXlTdG9yZT12b2lkIDA7Y2xhc3Mgbnt9ci5NdWx0aUNvbnRyYWN0S2V5U3RvcmU9bn0sNzExMzIsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5NdWx0aUNvbnRyYWN0S2V5U3RvcmU9ci5NZXJnZUtleVN0b3JlPXIuS2V5U3RvcmU9ci5Jbk1lbW9yeUtleVN0b3JlPXZvaWQgMDt2YXIgbj1lLnIoMTU1MjUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJJbk1lbW9yeUtleVN0b3JlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5Jbk1lbW9yeUtleVN0b3JlfX0pO3ZhciBpPWUucigxODYwMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIktleVN0b3JlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5LZXlTdG9yZX19KTt2YXIgbz1lLnIoNDU5MTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJNZXJnZUtleVN0b3JlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5NZXJnZUtleVN0b3JlfX0pO3ZhciBhPWUucigxODAwMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIk11bHRpQ29udHJhY3RLZXlTdG9yZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuTXVsdGlDb250cmFjdEtleVN0b3JlfX0pfSw5NTg5NSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGUpfHxlPDApdGhyb3cgRXJyb3IoYFdyb25nIHBvc2l0aXZlIGludGVnZXI6ICR7ZX1gKX1mdW5jdGlvbiBpKGUpe2lmKCJib29sZWFuIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4sIG5vdCAke2V9YCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZSYmIlVpbnQ4QXJyYXkiPT09ZS5jb25zdHJ1Y3Rvci5uYW1lfWZ1bmN0aW9uIGEoZSwuLi50KXtpZighbyhlKSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgVWludDhBcnJheSIpO2lmKHQubGVuZ3RoPjAmJiF0LmluY2x1ZGVzKGUubGVuZ3RoKSl0aHJvdyBFcnJvcihgRXhwZWN0ZWQgVWludDhBcnJheSBvZiBsZW5ndGggJHt0fSwgbm90IG9mIGxlbmd0aD0ke2UubGVuZ3RofWApfWZ1bmN0aW9uIHMoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmNyZWF0ZSl0aHJvdyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTtuKGUub3V0cHV0TGVuKSxuKGUuYmxvY2tMZW4pfWZ1bmN0aW9uIGMoZSx0PSEwKXtpZihlLmRlc3Ryb3llZCl0aHJvdyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTtpZih0JiZlLmZpbmlzaGVkKXRocm93IEVycm9yKCJIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIil9ZnVuY3Rpb24gdShlLHQpe2EoZSk7bGV0IHI9dC5vdXRwdXRMZW47aWYoZS5sZW5ndGg8cil0aHJvdyBFcnJvcihgZGlnZXN0SW50bygpIGV4cGVjdHMgb3V0cHV0IGJ1ZmZlciBvZiBsZW5ndGggYXQgbGVhc3QgJHtyfWApfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLm91dHB1dD1yLmV4aXN0cz1yLmhhc2g9ci5ieXRlcz1yLmJvb2w9ci5udW1iZXI9dm9pZCAwLHIubnVtYmVyPW4sci5ib29sPWksci5ieXRlcz1hLHIuaGFzaD1zLHIuZXhpc3RzPWMsci5vdXRwdXQ9dSxyLmRlZmF1bHQ9e251bWJlcjpuLGJvb2w6aSxieXRlczphLGhhc2g6cyxleGlzdHM6YyxvdXRwdXQ6dX19LDExMjA0LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuY3J5cHRvPXZvaWQgMCxyLmNyeXB0bz0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJiJjcnlwdG8iaW4gZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLmNyeXB0bzp2b2lkIDB9LDMxNDgzLChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIucmFuZG9tQnl0ZXM9ci53cmFwWE9GQ29uc3RydWN0b3JXaXRoT3B0cz1yLndyYXBDb25zdHJ1Y3RvcldpdGhPcHRzPXIud3JhcENvbnN0cnVjdG9yPXIuY2hlY2tPcHRzPXIuSGFzaD1yLmNvbmNhdEJ5dGVzPXIudG9CeXRlcz1yLnV0ZjhUb0J5dGVzPXIuYXN5bmNMb29wPXIubmV4dFRpY2s9ci5oZXhUb0J5dGVzPXIuYnl0ZXNUb0hleD1yLmlzTEU9ci5yb3RyPXIuY3JlYXRlVmlldz1yLnUzMj1yLnU4PXZvaWQgMDtsZXQgbj1lLnIoMTEyMDQpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJVaW50OEFycmF5Ij09PWUuY29uc3RydWN0b3IubmFtZX1pZihyLnU4PWU9Pm5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHIudTMyPWU9Pm5ldyBVaW50MzJBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsTWF0aC5mbG9vcihlLmJ5dGVMZW5ndGgvNCkpLHIuY3JlYXRlVmlldz1lPT5uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCksci5yb3RyPShlLHQpPT5lPDwzMi10fGU+Pj50LHIuaXNMRT02OD09PW5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbMHgxMTIyMzM0NF0pLmJ1ZmZlcilbMF0sIXIuaXNMRSl0aHJvdyBFcnJvcigiTm9uIGxpdHRsZS1lbmRpYW4gaGFyZHdhcmUgaXMgbm90IHN1cHBvcnRlZCIpO2xldCBvPUFycmF5LmZyb20oe2xlbmd0aDoyNTZ9LChlLHQpPT50LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpO3IuYnl0ZXNUb0hleD1mdW5jdGlvbihlKXtpZighaShlKSl0aHJvdyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpO2xldCB0PSIiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXQrPW9bZVtyXV07cmV0dXJuIHR9O2xldCBhPTQ4LHM9NTcsYz02NSx1PTcwLGY9OTcsZD0xMDI7ZnVuY3Rpb24gbChlKXtyZXR1cm4gZT49YSYmZTw9cz9lLWE6ZT49YyYmZTw9dT9lLShjLTEwKTplPj1mJiZlPD1kP2UtKGYtMTApOnZvaWQgMH1hc3luYyBmdW5jdGlvbiBoKGUsdCxuKXtsZXQgaT1EYXRlLm5vdygpO2ZvcihsZXQgbz0wO288ZTtvKyspe24obyk7bGV0IGU9RGF0ZS5ub3coKS1pO2U+PTAmJmU8dHx8KGF3YWl0ICgwLHIubmV4dFRpY2spKCksaSs9ZSl9fWZ1bmN0aW9uIHAoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IEVycm9yKGB1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBlfWApO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSkpfWZ1bmN0aW9uIGIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1wKGUpKSwhaShlKSl0aHJvdyBFcnJvcihgZXhwZWN0ZWQgVWludDhBcnJheSwgZ290ICR7dHlwZW9mIGV9YCk7cmV0dXJuIGV9ci5oZXhUb0J5dGVzPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIrdHlwZW9mIGUpO2xldCB0PWUubGVuZ3RoLHI9dC8yO2lmKHQlMil0aHJvdyBFcnJvcigicGFkZGVkIGhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCB1bnBhZGRlZCBoZXggb2YgbGVuZ3RoICIrdCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCB0PTAsaT0wO3Q8cjt0KyssaSs9Mil7bGV0IHI9bChlLmNoYXJDb2RlQXQoaSkpLG89bChlLmNoYXJDb2RlQXQoaSsxKSk7aWYodm9pZCAwPT09cnx8dm9pZCAwPT09byl0aHJvdyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyICInKyhlW2ldK2VbaSsxXSkrJyIgYXQgaW5kZXggJytpKTtuW3RdPTE2KnIrb31yZXR1cm4gbn0sci5uZXh0VGljaz1hc3luYygpPT57fSxyLmFzeW5jTG9vcD1oLHIudXRmOFRvQnl0ZXM9cCxyLnRvQnl0ZXM9YixyLmNvbmNhdEJ5dGVzPWZ1bmN0aW9uKC4uLmUpe2xldCB0PTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYoIWkobikpdGhyb3cgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTt0Kz1uLmxlbmd0aH1sZXQgcj1uZXcgVWludDhBcnJheSh0KTtmb3IobGV0IHQ9MCxuPTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWVbdF07ci5zZXQoaSxuKSxuKz1pLmxlbmd0aH1yZXR1cm4gcn07Y2xhc3MgbXtjbG9uZSgpe3JldHVybiB0aGlzLl9jbG9uZUludG8oKX19ci5IYXNoPW07bGV0IHk9e30udG9TdHJpbmc7ci5jaGVja09wdHM9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10JiYiW29iamVjdCBPYmplY3RdIiE9PXkuY2FsbCh0KSl0aHJvdyBFcnJvcigiT3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QuYXNzaWduKGUsdCl9LHIud3JhcENvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe2xldCB0PXQ9PmUoKS51cGRhdGUoYih0KSkuZGlnZXN0KCkscj1lKCk7cmV0dXJuIHQub3V0cHV0TGVuPXIub3V0cHV0TGVuLHQuYmxvY2tMZW49ci5ibG9ja0xlbix0LmNyZWF0ZT0oKT0+ZSgpLHR9LHIud3JhcENvbnN0cnVjdG9yV2l0aE9wdHM9ZnVuY3Rpb24oZSl7bGV0IHQ9KHQscik9PmUocikudXBkYXRlKGIodCkpLmRpZ2VzdCgpLHI9ZSh7fSk7cmV0dXJuIHQub3V0cHV0TGVuPXIub3V0cHV0TGVuLHQuYmxvY2tMZW49ci5ibG9ja0xlbix0LmNyZWF0ZT10PT5lKHQpLHR9LHIud3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHM9ZnVuY3Rpb24oZSl7bGV0IHQ9KHQscik9PmUocikudXBkYXRlKGIodCkpLmRpZ2VzdCgpLHI9ZSh7fSk7cmV0dXJuIHQub3V0cHV0TGVuPXIub3V0cHV0TGVuLHQuYmxvY2tMZW49ci5ibG9ja0xlbix0LmNyZWF0ZT10PT5lKHQpLHR9LHIucmFuZG9tQnl0ZXM9ZnVuY3Rpb24oZT0zMil7aWYobi5jcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpcmV0dXJuIG4uY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShlKSk7dGhyb3cgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMgbXVzdCBiZSBkZWZpbmVkIil9fSwyMzUwOSwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLlNIQTI9dm9pZCAwO2xldCBuPWUucig5NTg5NSksaT1lLnIoMzE0ODMpO2Z1bmN0aW9uIG8oZSx0LHIsbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2V0QmlnVWludDY0KXJldHVybiBlLnNldEJpZ1VpbnQ2NCh0LHIsbik7bGV0IGk9QmlnSW50KDMyKSxvPUJpZ0ludCgweGZmZmZmZmZmKSxhPU51bWJlcihyPj5pJm8pLHM9TnVtYmVyKHImbyksYz00KiEhbix1PTQqIW47ZS5zZXRVaW50MzIodCtjLGEsbiksZS5zZXRVaW50MzIodCt1LHMsbil9Y2xhc3MgYSBleHRlbmRzIGkuSGFzaHtjb25zdHJ1Y3RvcihlLHQscixuKXtzdXBlcigpLHRoaXMuYmxvY2tMZW49ZSx0aGlzLm91dHB1dExlbj10LHRoaXMucGFkT2Zmc2V0PXIsdGhpcy5pc0xFPW4sdGhpcy5maW5pc2hlZD0hMSx0aGlzLmxlbmd0aD0wLHRoaXMucG9zPTAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoZSksdGhpcy52aWV3PSgwLGkuY3JlYXRlVmlldykodGhpcy5idWZmZXIpfXVwZGF0ZShlKXsoMCxuLmV4aXN0cykodGhpcyk7bGV0e3ZpZXc6dCxidWZmZXI6cixibG9ja0xlbjpvfT10aGlzLGE9KGU9KDAsaS50b0J5dGVzKShlKSkubGVuZ3RoO2ZvcihsZXQgbj0wO248YTspe2xldCBzPU1hdGgubWluKG8tdGhpcy5wb3MsYS1uKTtpZihzPT09byl7bGV0IHQ9KDAsaS5jcmVhdGVWaWV3KShlKTtmb3IoO288PWEtbjtuKz1vKXRoaXMucHJvY2Vzcyh0LG4pO2NvbnRpbnVlfXIuc2V0KGUuc3ViYXJyYXkobixuK3MpLHRoaXMucG9zKSx0aGlzLnBvcys9cyxuKz1zLHRoaXMucG9zPT09byYmKHRoaXMucHJvY2Vzcyh0LDApLHRoaXMucG9zPTApfXJldHVybiB0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5yb3VuZENsZWFuKCksdGhpc31kaWdlc3RJbnRvKGUpeygwLG4uZXhpc3RzKSh0aGlzKSwoMCxuLm91dHB1dCkoZSx0aGlzKSx0aGlzLmZpbmlzaGVkPSEwO2xldHtidWZmZXI6dCx2aWV3OnIsYmxvY2tMZW46YSxpc0xFOnN9PXRoaXMse3BvczpjfT10aGlzO3RbYysrXT0xMjgsdGhpcy5idWZmZXIuc3ViYXJyYXkoYykuZmlsbCgwKSx0aGlzLnBhZE9mZnNldD5hLWMmJih0aGlzLnByb2Nlc3MociwwKSxjPTApO2ZvcihsZXQgZT1jO2U8YTtlKyspdFtlXT0wO28ocixhLTgsQmlnSW50KDgqdGhpcy5sZW5ndGgpLHMpLHRoaXMucHJvY2VzcyhyLDApO2xldCB1PSgwLGkuY3JlYXRlVmlldykoZSksZj10aGlzLm91dHB1dExlbjtpZihmJTQpdGhyb3cgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTtsZXQgZD1mLzQsbD10aGlzLmdldCgpO2lmKGQ+bC5sZW5ndGgpdGhyb3cgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTtmb3IobGV0IGU9MDtlPGQ7ZSsrKXUuc2V0VWludDMyKDQqZSxsW2VdLHMpfWRpZ2VzdCgpe2xldHtidWZmZXI6ZSxvdXRwdXRMZW46dH09dGhpczt0aGlzLmRpZ2VzdEludG8oZSk7bGV0IHI9ZS5zbGljZSgwLHQpO3JldHVybiB0aGlzLmRlc3Ryb3koKSxyfV9jbG9uZUludG8oZSl7ZXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IpLGUuc2V0KC4uLnRoaXMuZ2V0KCkpO2xldHtibG9ja0xlbjp0LGJ1ZmZlcjpyLGxlbmd0aDpuLGZpbmlzaGVkOmksZGVzdHJveWVkOm8scG9zOmF9PXRoaXM7cmV0dXJuIGUubGVuZ3RoPW4sZS5wb3M9YSxlLmZpbmlzaGVkPWksZS5kZXN0cm95ZWQ9byxuJXQmJmUuYnVmZmVyLnNldChyKSxlfX1yLlNIQTI9YX0sNDQ4MTQsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5zaGEyMjQ9ci5zaGEyNTY9dm9pZCAwO2xldCBuPWUucigyMzUwOSksaT1lLnIoMzE0ODMpLG89KGUsdCxyKT0+ZSZ0Xn5lJnIsYT0oZSx0LHIpPT5lJnReZSZyXnQmcixzPW5ldyBVaW50MzJBcnJheShbMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNSwweDM5NTZjMjViLDB4NTlmMTExZjEsMHg5MjNmODJhNCwweGFiMWM1ZWQ1LDB4ZDgwN2FhOTgsMHgxMjgzNWIwMSwweDI0MzE4NWJlLDB4NTUwYzdkYzMsMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NCwweGU0OWI2OWMxLDB4ZWZiZTQ3ODYsMHhmYzE5ZGM2LDB4MjQwY2ExY2MsMHgyZGU5MmM2ZiwweDRhNzQ4NGFhLDB4NWNiMGE5ZGMsMHg3NmY5ODhkYSwweDk4M2U1MTUyLDB4YTgzMWM2NmQsMHhiMDAzMjdjOCwweGJmNTk3ZmM3LDB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDZjYTYzNTEsMHgxNDI5Mjk2NywweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzLDB4NjUwYTczNTQsMHg3NjZhMGFiYiwweDgxYzJjOTJlLDB4OTI3MjJjODUsMHhhMmJmZThhMSwweGE4MWE2NjRiLDB4YzI0YjhiNzAsMHhjNzZjNTFhMywweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwLDB4MTlhNGMxMTYsMHgxZTM3NmMwOCwweDI3NDg3NzRjLDB4MzRiMGJjYjUsMHgzOTFjMGNiMywweDRlZDhhYTRhLDB4NWI5Y2NhNGYsMHg2ODJlNmZmMywweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4LDB4OTBiZWZmZmEsMHhhNDUwNmNlYiwweGJlZjlhM2Y3LDB4YzY3MTc4ZjJdKSxjPW5ldyBVaW50MzJBcnJheShbMHg2YTA5ZTY2NywweGJiNjdhZTg1LDB4M2M2ZWYzNzIsMHhhNTRmZjUzYSwweDUxMGU1MjdmLDB4OWIwNTY4OGMsMHgxZjgzZDlhYiwweDViZTBjZDE5XSksdT1uZXcgVWludDMyQXJyYXkoNjQpO2NsYXNzIGYgZXh0ZW5kcyBuLlNIQTJ7Y29uc3RydWN0b3IoKXtzdXBlcig2NCwzMiw4LCExKSx0aGlzLkE9MHxjWzBdLHRoaXMuQj0wfGNbMV0sdGhpcy5DPTB8Y1syXSx0aGlzLkQ9MHxjWzNdLHRoaXMuRT0wfGNbNF0sdGhpcy5GPTB8Y1s1XSx0aGlzLkc9MHxjWzZdLHRoaXMuSD0wfGNbN119Z2V0KCl7bGV0e0E6ZSxCOnQsQzpyLEQ6bixFOmksRjpvLEc6YSxIOnN9PXRoaXM7cmV0dXJuW2UsdCxyLG4saSxvLGEsc119c2V0KGUsdCxyLG4saSxvLGEscyl7dGhpcy5BPTB8ZSx0aGlzLkI9MHx0LHRoaXMuQz0wfHIsdGhpcy5EPTB8bix0aGlzLkU9MHxpLHRoaXMuRj0wfG8sdGhpcy5HPTB8YSx0aGlzLkg9MHxzfXByb2Nlc3MoZSx0KXtmb3IobGV0IHI9MDtyPDE2O3IrKyx0Kz00KXVbcl09ZS5nZXRVaW50MzIodCwhMSk7Zm9yKGxldCBlPTE2O2U8NjQ7ZSsrKXtsZXQgdD11W2UtMTVdLHI9dVtlLTJdLG49KDAsaS5yb3RyKSh0LDcpXigwLGkucm90cikodCwxOCledD4+PjMsbz0oMCxpLnJvdHIpKHIsMTcpXigwLGkucm90cikociwxOSlecj4+PjEwO3VbZV09byt1W2UtN10rbit1W2UtMTZdfDB9bGV0e0E6cixCOm4sQzpjLEQ6ZixFOmQsRjpsLEc6aCxIOnB9PXRoaXM7Zm9yKGxldCBlPTA7ZTw2NDtlKyspe2xldCB0PXArKCgwLGkucm90cikoZCw2KV4oMCxpLnJvdHIpKGQsMTEpXigwLGkucm90cikoZCwyNSkpK28oZCxsLGgpK3NbZV0rdVtlXXwwLGI9KCgwLGkucm90cikociwyKV4oMCxpLnJvdHIpKHIsMTMpXigwLGkucm90cikociwyMikpK2EocixuLGMpfDA7cD1oLGg9bCxsPWQsZD1mK3R8MCxmPWMsYz1uLG49cixyPXQrYnwwfXI9cit0aGlzLkF8MCxuPW4rdGhpcy5CfDAsYz1jK3RoaXMuQ3wwLGY9Zit0aGlzLkR8MCxkPWQrdGhpcy5FfDAsbD1sK3RoaXMuRnwwLGg9aCt0aGlzLkd8MCxwPXArdGhpcy5IfDAsdGhpcy5zZXQocixuLGMsZixkLGwsaCxwKX1yb3VuZENsZWFuKCl7dS5maWxsKDApfWRlc3Ryb3koKXt0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDApLHRoaXMuYnVmZmVyLmZpbGwoMCl9fWNsYXNzIGQgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLkE9LTB4M2VmYTYxMjgsdGhpcy5CPTB4MzY3Y2Q1MDcsdGhpcy5DPTB4MzA3MGRkMTcsdGhpcy5EPS0weDhmMWE2YzcsdGhpcy5FPS00MTkxNDM5LHRoaXMuRj0weDY4NTgxNTExLHRoaXMuRz0weDY0Zjk4ZmE3LHRoaXMuSD0tMHg0MTA1YjA1Yyx0aGlzLm91dHB1dExlbj0yOH19ci5zaGEyNTY9KDAsaS53cmFwQ29uc3RydWN0b3IpKCgpPT5uZXcgZiksci5zaGEyMjQ9KDAsaS53cmFwQ29uc3RydWN0b3IpKCgpPT5uZXcgZCl9LDQzMDU0LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuU2lnbmVyPXZvaWQgMDtjbGFzcyBue31yLlNpZ25lcj1ufSwyODUxMiwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkluTWVtb3J5U2lnbmVyPXZvaWQgMDtsZXQgbj1lLnIoNzIyMyksaT1lLnIoNzExMzIpLG89ZS5yKDQ0ODE0KSxhPWUucig0MzA1NCk7Y2xhc3MgcyBleHRlbmRzIGEuU2lnbmVye2tleVN0b3JlO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5rZXlTdG9yZT1lfXN0YXRpYyBhc3luYyBmcm9tS2V5UGFpcihlLHQscil7bGV0IG49bmV3IGkuSW5NZW1vcnlLZXlTdG9yZTtyZXR1cm4gYXdhaXQgbi5zZXRLZXkoZSx0LHIpLG5ldyBzKG4pfWFzeW5jIGNyZWF0ZUtleShlLHQscil7bGV0IGk9cj09PW4uS2V5VHlwZS5TRUNQMjU2SzE/bi5LZXlQYWlyLmZyb21SYW5kb20oInNlY3AyNTZrMSIpOm4uS2V5UGFpci5mcm9tUmFuZG9tKCJlZDI1NTE5Iik7cmV0dXJuIGF3YWl0IHRoaXMua2V5U3RvcmUuc2V0S2V5KHQsZSxpKSxpLmdldFB1YmxpY0tleSgpfWFzeW5jIGdldFB1YmxpY0tleShlLHQpe2xldCByPWF3YWl0IHRoaXMua2V5U3RvcmUuZ2V0S2V5KHQsZSk7cmV0dXJuIG51bGw9PT1yP251bGw6ci5nZXRQdWJsaWNLZXkoKX1hc3luYyBzaWduTWVzc2FnZShlLHQscil7bGV0IG49bmV3IFVpbnQ4QXJyYXkoKDAsby5zaGEyNTYpKGUpKTtpZighdCl0aHJvdyBFcnJvcigiSW5NZW1vcnlTaWduZXIgcmVxdWlyZXMgcHJvdmlkZWQgYWNjb3VudCBpZCIpO2xldCBpPWF3YWl0IHRoaXMua2V5U3RvcmUuZ2V0S2V5KHIsdCk7aWYobnVsbD09PWkpdGhyb3cgRXJyb3IoYEtleSBmb3IgJHt0fSBub3QgZm91bmQgaW4gJHtyfWApO3JldHVybiBpLnNpZ24obil9dG9TdHJpbmcoKXtyZXR1cm5gSW5NZW1vcnlTaWduZXIoJHt0aGlzLmtleVN0b3JlfSlgfX1yLkluTWVtb3J5U2lnbmVyPXN9LDU1Mjg4LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuU2lnbmVyPXIuSW5NZW1vcnlTaWduZXI9dm9pZCAwO3ZhciBuPWUucigyODUxMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIkluTWVtb3J5U2lnbmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5Jbk1lbW9yeVNpZ25lcn19KTt2YXIgaT1lLnIoNDMwNTQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJTaWduZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLlNpZ25lcn19KX0sNjYzMDMsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5Db25uZWN0aW9uPXZvaWQgMDtsZXQgbj1lLnIoNTUyODgpLGk9ZS5yKDI0Mjg0KTtmdW5jdGlvbiBvKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2Ugdm9pZCAwOnJldHVybiBlO2Nhc2UiSnNvblJwY1Byb3ZpZGVyIjpyZXR1cm4gbmV3IGkuSnNvblJwY1Byb3ZpZGVyKHsuLi5lLmFyZ3N9KTtjYXNlIkZhaWxvdmVyUnBjUHJvdmlkZXIiOntsZXQgdD0oZT8uYXJnc3x8W10pLm1hcChlPT5uZXcgaS5Kc29uUnBjUHJvdmlkZXIoZSkpO3JldHVybiBuZXcgaS5GYWlsb3ZlclJwY1Byb3ZpZGVyKHQpfWRlZmF1bHQ6dGhyb3cgRXJyb3IoYFVua25vd24gcHJvdmlkZXIgdHlwZSAke2UudHlwZX1gKX19ZnVuY3Rpb24gYShlKXtzd2l0Y2goZS50eXBlKXtjYXNlIHZvaWQgMDpyZXR1cm4gZTtjYXNlIkluTWVtb3J5U2lnbmVyIjpyZXR1cm4gbmV3IG4uSW5NZW1vcnlTaWduZXIoZS5rZXlTdG9yZSk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgVW5rbm93biBzaWduZXIgdHlwZSAke2UudHlwZX1gKX19Y2xhc3Mgc3tuZXR3b3JrSWQ7cHJvdmlkZXI7c2lnbmVyO2pzdm1BY2NvdW50SWQ7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5uZXR3b3JrSWQ9ZSx0aGlzLnByb3ZpZGVyPXQsdGhpcy5zaWduZXI9cix0aGlzLmpzdm1BY2NvdW50SWQ9bn1nZXRDb25uZWN0aW9uKCl7cmV0dXJuIHRoaXN9c3RhdGljIGZyb21Db25maWcoZSl7bGV0IHQ9byhlLnByb3ZpZGVyKSxyPWEoZS5zaWduZXIpO3JldHVybiBuZXcgcyhlLm5ldHdvcmtJZCx0LHIsZS5qc3ZtQWNjb3VudElkKX19ci5Db25uZWN0aW9uPXN9LDg3MDI1LChlLHQscik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuU3RvcmFnZT12b2lkIDA7bGV0IG49ZS5yKDRlNCk7Y2xhc3MgaXtjYWNoZTtzdGF0aWMgTUFYX0VMRU1FTlRTPTEwMDtibG9ja0hlaWdodHM7Y29uc3RydWN0b3IoZT17bWF4OmkuTUFYX0VMRU1FTlRTfSl7dGhpcy5jYWNoZT1uZXcgbi5MUlVNYXAoZS5tYXgpLHRoaXMuYmxvY2tIZWlnaHRzPW5ldyBNYXB9bG9hZChlKXtpZighKCJibG9ja0lkImluIGUpKXJldHVybjtsZXQgdD1lLmJsb2NrSWQ7cmV0dXJuIDQ0PT10LnRvU3RyaW5nKCkubGVuZ3RoJiYodD10aGlzLmJsb2NrSGVpZ2h0cy5nZXQodC50b1N0cmluZygpKSksdGhpcy5jYWNoZS5nZXQodCl9c2F2ZShlLHtibG9ja0hlaWdodDp0LGJsb2NrVGltZXN0YW1wOnIsY29udHJhY3RDb2RlOm4sY29udHJhY3RTdGF0ZTppfSl7dGhpcy5ibG9ja0hlaWdodHMuc2V0KGUsdCksdGhpcy5jYWNoZS5zZXQodCx7YmxvY2tIZWlnaHQ6dCxibG9ja1RpbWVzdGFtcDpyLGNvbnRyYWN0Q29kZTpuLGNvbnRyYWN0U3RhdGU6aX0pfX1yLlN0b3JhZ2U9aX0sNDgwNzYsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmkoMzk1ODcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLlJ1bnRpbWU9dm9pZCAwO2xldCBpPWUucig2MTE0Nyksbz1lPT4oKT0+e3Rocm93IEVycm9yKCJtZXRob2Qgbm90IGltcGxlbWVudGVkOiAiK2UpfSxhPWU9PigpPT57dGhyb3cgRXJyb3IoIm1ldGhvZCBub3QgYXZhaWxhYmxlIGZvciB2aWV3IGNhbGxzOiAiK2UpfTtjbGFzcyBze2NvbnRleHQ7d2FzbTttZW1vcnk7cmVnaXN0ZXJzO2xvZ3M7cmVzdWx0O2NvbnN0cnVjdG9yKHtjb250cmFjdENvZGU6ZSwuLi50fSl7dGhpcy5jb250ZXh0PXQsdGhpcy53YXNtPXRoaXMucHJlcGFyZVdBU00obi5CdWZmZXIuZnJvbShlLCJiYXNlNjQiKSksdGhpcy5tZW1vcnk9bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDoxMDI0LG1heGltdW06MjA0OH0pLHRoaXMucmVnaXN0ZXJzPXt9LHRoaXMubG9ncz1bXSx0aGlzLnJlc3VsdD1uLkJ1ZmZlci5mcm9tKFtdKX1yZWFkVVRGMTZDU3RyKGUpe2xldCB0PVtdLHI9bmV3IFVpbnQxNkFycmF5KHRoaXMubWVtb3J5LmJ1ZmZlciksaT1OdW1iZXIoZSkvMjtmb3IoOzAhPXJbaV07KXQucHVzaChyW2ldKSxpKys7cmV0dXJuIG4uQnVmZmVyLmZyb20oVWludDE2QXJyYXkuZnJvbSh0KS5idWZmZXIpLnRvU3RyaW5nKCJ1Y3MyIil9cmVhZFVURjhDU3RyKGUsdCl7bGV0IHI9W10saT1uZXcgVWludDhBcnJheSh0aGlzLm1lbW9yeS5idWZmZXIpLG89TnVtYmVyKHQpO2ZvcihsZXQgdD0wO3Q8ZSYmMCE9aVtvXTt0Kyspci5wdXNoKGlbb10pLG8rKztyZXR1cm4gbi5CdWZmZXIuZnJvbShyKS50b1N0cmluZygidXRmOCIpfXN0b3JhZ2VSZWFkKGUsdCl7bGV0IHI9bi5CdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSh0aGlzLm1lbW9yeS5idWZmZXIsTnVtYmVyKHQpLE51bWJlcihlKSkpLGk9dGhpcy5jb250ZXh0LmNvbnRyYWN0U3RhdGUuZmlsdGVyKGU9PjA9PT1uLkJ1ZmZlci5jb21wYXJlKGUua2V5LHIpKS5tYXAoZT0+ZS52YWx1ZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD9udWxsOmkubGVuZ3RoPjE/aTppWzBdfXByZXBhcmVXQVNNKGUpe2xldCB0PVtdO2lmKCJcMGFzbSIhPT1lLnN1YmFycmF5KDAsNCkudG9TdHJpbmcoInV0ZjgiKSl0aHJvdyBFcnJvcigiSW52YWxpZCBtYWdpYyBudW1iZXIiKTtsZXQgcj1lLnJlYWRVSW50MzJMRSg0KTtpZigxIT1yKXRocm93IEVycm9yKCJJbnZhbGlkIHZlcnNpb246ICIrcik7bGV0IGk9ODtmdW5jdGlvbiBvKCl7bGV0IHQscj0wLG49MDtkbyByfD0oMTI3Jih0PWVbaSsrXSkpPDxuLG4rPTc7d2hpbGUoMTI4JnQpcmV0dXJuIHJ9ZnVuY3Rpb24gYSgpe2xldCB0PTEmZVtpKytdO3JldHVybntpbml0aWFsOm8oKSxtYXg6dD9vKCk6bnVsbH19ZnVuY3Rpb24gcygpe2xldCB0PW8oKSxyPWUuc3ViYXJyYXkoaSxpK3QpO3JldHVybiBpKz10LHIudG9TdHJpbmcoInV0ZjgiKX1mdW5jdGlvbiBjKGUpe2xldCB0PVtdO2Rve2xldCByPTEyNyZlOzAhPShlPj49NykmJihyfD0xMjgpLHQucHVzaChyKX13aGlsZSgwIT09ZSlyZXR1cm4gbi5CdWZmZXIuZnJvbSh0KX1mdW5jdGlvbiB1KGUpe2xldCB0PW4uQnVmZmVyLmZyb20oZSwidXRmOCIpO3JldHVybiBuLkJ1ZmZlci5jb25jYXQoW2ModC5sZW5ndGgpLHRdKX10LnB1c2goZS5zdWJhcnJheSgwLGkpKTtkb3tsZXQgcj1pLGY9ZS5yZWFkVUludDgoaSk7aSsrO2xldCBkPW8oKSxsPWkrZDtpZig1PT1mKXQucHVzaChuLkJ1ZmZlci5mcm9tKFs1LDEsMF0pKTtlbHNlIGlmKDI9PWYpe2xldCByPVtdLGY9bygpO2ZvcihsZXQgdD0wO3Q8Zjt0Kyspe2xldCB0PWk7cygpLHMoKTtsZXQgbj1lLnJlYWRVSW50OChpKTtpKys7bGV0IGM9ITE7c3dpdGNoKG4pe2Nhc2UgMDpvKCk7YnJlYWs7Y2FzZSAxOmkrKyxhKCk7YnJlYWs7Y2FzZSAyOmEoKSxjPSEwO2JyZWFrO2Nhc2UgMzppKyssaSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkludmFsaWQgaW1wb3J0IGtpbmQ6ICIrbil9Y3x8ci5wdXNoKGUuc3ViYXJyYXkodCxpKSl9bGV0IGQ9bi5CdWZmZXIuY29uY2F0KFt1KCJlbnYiKSx1KCJtZW1vcnkiKSxuLkJ1ZmZlci5mcm9tKFsyXSksbi5CdWZmZXIuZnJvbShbMF0pLGMoMSldKTtyLnB1c2goZCk7bGV0IGw9bi5CdWZmZXIuY29uY2F0KFtjKHIubGVuZ3RoKSwuLi5yXSk7dC5wdXNoKG4uQnVmZmVyLmNvbmNhdChbbi5CdWZmZXIuZnJvbShbMl0pLGMobC5sZW5ndGgpLGxdKSl9ZWxzZSBpZig3PT1mKXtsZXQgcj1bXSxhPW8oKTtmb3IobGV0IHQ9MDt0PGE7dCsrKXtsZXQgdD1pO3MoKTtsZXQgbj1lLnJlYWRVSW50OChpKTtpKyssbygpLDIhPT1uJiZyLnB1c2goZS5zdWJhcnJheSh0LGkpKX1sZXQgdT1uLkJ1ZmZlci5jb25jYXQoW2Moci5sZW5ndGgpLC4uLnJdKTt0LnB1c2gobi5CdWZmZXIuY29uY2F0KFtuLkJ1ZmZlci5mcm9tKFs3XSksYyh1Lmxlbmd0aCksdV0pKX1lbHNlIHQucHVzaChlLnN1YmFycmF5KHIsbCkpO2k9bH13aGlsZShpPGUubGVuZ3RoKXJldHVybiBuLkJ1ZmZlci5jb25jYXQodCl9Z2V0UmVnaXN0ZXJMZW5ndGgoZSl7cmV0dXJuIEJpZ0ludCh0aGlzLnJlZ2lzdGVyc1tlLnRvU3RyaW5nKCldP3RoaXMucmVnaXN0ZXJzW2UudG9TdHJpbmcoKV0ubGVuZ3RoOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX1yZWFkRnJvbVJlZ2lzdGVyKGUsdCl7bmV3IFVpbnQ4QXJyYXkodGhpcy5tZW1vcnkuYnVmZmVyKS5zZXQodGhpcy5yZWdpc3RlcnNbZS50b1N0cmluZygpXXx8bi5CdWZmZXIuZnJvbShbXSksTnVtYmVyKHQpKX1nZXRDdXJyZW50QWNjb3VudElkKGUpe3RoaXMucmVnaXN0ZXJzW2UudG9TdHJpbmcoKV09bi5CdWZmZXIuZnJvbSh0aGlzLmNvbnRleHQuY29udHJhY3RJZCl9aW5wdXRNZXRob2RBcmdzKGUpe3RoaXMucmVnaXN0ZXJzW2UudG9TdHJpbmcoKV09bi5CdWZmZXIuZnJvbSh0aGlzLmNvbnRleHQubWV0aG9kQXJncyl9Z2V0QmxvY2tIZWlnaHQoKXtyZXR1cm4gQmlnSW50KHRoaXMuY29udGV4dC5ibG9ja0hlaWdodCl9Z2V0QmxvY2tUaW1lc3RhbXAoKXtyZXR1cm4gQmlnSW50KHRoaXMuY29udGV4dC5ibG9ja1RpbWVzdGFtcCl9c2hhMjU2KGUsdCxyKXtsZXQgbj1uZXcgVWludDhBcnJheSh0aGlzLm1lbW9yeS5idWZmZXIsTnVtYmVyKHQpLE51bWJlcihlKSk7dGhpcy5yZWdpc3RlcnNbci50b1N0cmluZygpXT0oMCxpLnNoYTI1Nikobil9cmV0dXJuVmFsdWUoZSx0KXt0aGlzLnJlc3VsdD1uLkJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KHRoaXMubWVtb3J5LmJ1ZmZlcixOdW1iZXIodCksTnVtYmVyKGUpKSl9cGFuaWMoZSl7dGhyb3cgRXJyb3IoInBhbmljOiAiK2UpfWFib3J0KGUsdCxyLG4pe2xldCBpPXRoaXMucmVhZFVURjE2Q1N0cihlKSxvPXRoaXMucmVhZFVURjE2Q1N0cih0KSxhPWAke2l9ICR7b306JHtyfToke259YDtpZighaXx8IW8pdGhyb3cgRXJyb3IoImFib3J0OiBTdHJpbmcgZW5jb2RpbmcgaXMgYmFkIFVURi0xNiBzZXF1ZW5jZS4iKTt0aHJvdyBFcnJvcigiYWJvcnQ6ICIrYSl9YXBwZW5kVG9Mb2coZSx0KXt0aGlzLmxvZ3MucHVzaCh0aGlzLnJlYWRVVEY4Q1N0cihlLHQpKX1yZWFkU3RvcmFnZShlLHQscil7bGV0IG49dGhpcy5zdG9yYWdlUmVhZChlLHQpO3JldHVybiBudWxsPT1uPzBuOih0aGlzLnJlZ2lzdGVyc1tyXT1uLDFuKX1oYXNTdG9yYWdlS2V5KGUsdCl7cmV0dXJuIG51bGw9PXRoaXMuc3RvcmFnZVJlYWQoZSx0KT8wbjoxbn1nZXRIb3N0SW1wb3J0cygpe3JldHVybntyZWdpc3Rlcl9sZW46dGhpcy5nZXRSZWdpc3Rlckxlbmd0aC5iaW5kKHRoaXMpLHJlYWRfcmVnaXN0ZXI6dGhpcy5yZWFkRnJvbVJlZ2lzdGVyLmJpbmQodGhpcyksY3VycmVudF9hY2NvdW50X2lkOnRoaXMuZ2V0Q3VycmVudEFjY291bnRJZC5iaW5kKHRoaXMpLGlucHV0OnRoaXMuaW5wdXRNZXRob2RBcmdzLmJpbmQodGhpcyksYmxvY2tfaW5kZXg6dGhpcy5nZXRCbG9ja0hlaWdodC5iaW5kKHRoaXMpLGJsb2NrX3RpbWVzdGFtcDp0aGlzLmdldEJsb2NrVGltZXN0YW1wLmJpbmQodGhpcyksc2hhMjU2OnRoaXMuc2hhMjU2LmJpbmQodGhpcyksdmFsdWVfcmV0dXJuOnRoaXMucmV0dXJuVmFsdWUuYmluZCh0aGlzKSxhYm9ydDp0aGlzLmFib3J0LmJpbmQodGhpcyksbG9nX3V0Zjg6dGhpcy5hcHBlbmRUb0xvZy5iaW5kKHRoaXMpLGxvZ191dGYxNjp0aGlzLmFwcGVuZFRvTG9nLmJpbmQodGhpcyksc3RvcmFnZV9yZWFkOnRoaXMucmVhZFN0b3JhZ2UuYmluZCh0aGlzKSxzdG9yYWdlX2hhc19rZXk6dGhpcy5oYXNTdG9yYWdlS2V5LmJpbmQodGhpcykscGFuaWM6KCk9PnRoaXMucGFuaWMoImV4cGxpY2l0IGd1ZXN0IHBhbmljIikscGFuaWNfdXRmODooZSx0KT0+dGhpcy5wYW5pYyh0aGlzLnJlYWRVVEY4Q1N0cihlLHQpKSxlcG9jaF9oZWlnaHQ6bygiZXBvY2hfaGVpZ2h0Iiksc3RvcmFnZV91c2FnZTpvKCJzdG9yYWdlX3VzYWdlIiksYWNjb3VudF9iYWxhbmNlOm8oImFjY291bnRfYmFsYW5jZSIpLGFjY291bnRfbG9ja2VkX2JhbGFuY2U6bygiYWNjb3VudF9sb2NrZWRfYmFsYW5jZSIpLHJhbmRvbV9zZWVkOm8oInJhbmRvbV9zZWVkIikscmlwZW1kMTYwOm8oInJpcGVtZDE2MCIpLGtlY2NhazI1NjpvKCJrZWNjYWsyNTYiKSxrZWNjYWs1MTI6bygia2VjY2FrNTEyIiksZWNyZWNvdmVyOm8oImVjcmVjb3ZlciIpLHZhbGlkYXRvcl9zdGFrZTpvKCJ2YWxpZGF0b3Jfc3Rha2UiKSx2YWxpZGF0b3JfdG90YWxfc3Rha2U6bygidmFsaWRhdG9yX3RvdGFsX3N0YWtlIiksd3JpdGVfcmVnaXN0ZXI6YSgid3JpdGVfcmVnaXN0ZXIiKSxzaWduZXJfYWNjb3VudF9pZDphKCJzaWduZXJfYWNjb3VudF9pZCIpLHNpZ25lcl9hY2NvdW50X3BrOmEoInNpZ25lcl9hY2NvdW50X3BrIikscHJlZGVjZXNzb3JfYWNjb3VudF9pZDphKCJwcmVkZWNlc3Nvcl9hY2NvdW50X2lkIiksYXR0YWNoZWRfZGVwb3NpdDphKCJhdHRhY2hlZF9kZXBvc2l0IikscHJlcGFpZF9nYXM6YSgicHJlcGFpZF9nYXMiKSx1c2VkX2dhczphKCJ1c2VkX2dhcyIpLHByb21pc2VfY3JlYXRlOmEoInByb21pc2VfY3JlYXRlIikscHJvbWlzZV90aGVuOmEoInByb21pc2VfdGhlbiIpLHByb21pc2VfYW5kOmEoInByb21pc2VfYW5kIikscHJvbWlzZV9iYXRjaF9jcmVhdGU6YSgicHJvbWlzZV9iYXRjaF9jcmVhdGUiKSxwcm9taXNlX2JhdGNoX3RoZW46YSgicHJvbWlzZV9iYXRjaF90aGVuIikscHJvbWlzZV9iYXRjaF9hY3Rpb25fY3JlYXRlX2FjY291bnQ6YSgicHJvbWlzZV9iYXRjaF9hY3Rpb25fY3JlYXRlX2FjY291bnQiKSxwcm9taXNlX2JhdGNoX2FjdGlvbl9kZXBsb3lfY29udHJhY3Q6YSgicHJvbWlzZV9iYXRjaF9hY3Rpb25fZGVwbG95X2NvbnRyYWN0IikscHJvbWlzZV9iYXRjaF9hY3Rpb25fZnVuY3Rpb25fY2FsbDphKCJwcm9taXNlX2JhdGNoX2FjdGlvbl9mdW5jdGlvbl9jYWxsIikscHJvbWlzZV9iYXRjaF9hY3Rpb25fZnVuY3Rpb25fY2FsbF93ZWlnaHQ6YSgicHJvbWlzZV9iYXRjaF9hY3Rpb25fZnVuY3Rpb25fY2FsbF93ZWlnaHQiKSxwcm9taXNlX2JhdGNoX2FjdGlvbl90cmFuc2ZlcjphKCJwcm9taXNlX2JhdGNoX2FjdGlvbl90cmFuc2ZlciIpLHByb21pc2VfYmF0Y2hfYWN0aW9uX3N0YWtlOmEoInByb21pc2VfYmF0Y2hfYWN0aW9uX3N0YWtlIikscHJvbWlzZV9iYXRjaF9hY3Rpb25fYWRkX2tleV93aXRoX2Z1bGxfYWNjZXNzOmEoInByb21pc2VfYmF0Y2hfYWN0aW9uX2FkZF9rZXlfd2l0aF9mdWxsX2FjY2VzcyIpLHByb21pc2VfYmF0Y2hfYWN0aW9uX2FkZF9rZXlfd2l0aF9mdW5jdGlvbl9jYWxsOmEoInByb21pc2VfYmF0Y2hfYWN0aW9uX2FkZF9rZXlfd2l0aF9mdW5jdGlvbl9jYWxsIikscHJvbWlzZV9iYXRjaF9hY3Rpb25fZGVsZXRlX2tleTphKCJwcm9taXNlX2JhdGNoX2FjdGlvbl9kZWxldGVfa2V5IikscHJvbWlzZV9iYXRjaF9hY3Rpb25fZGVsZXRlX2FjY291bnQ6YSgicHJvbWlzZV9iYXRjaF9hY3Rpb25fZGVsZXRlX2FjY291bnQiKSxwcm9taXNlX3Jlc3VsdHNfY291bnQ6YSgicHJvbWlzZV9yZXN1bHRzX2NvdW50IikscHJvbWlzZV9yZXN1bHQ6YSgicHJvbWlzZV9yZXN1bHQiKSxwcm9taXNlX3JldHVybjphKCJwcm9taXNlX3JldHVybiIpLHN0b3JhZ2Vfd3JpdGU6YSgic3RvcmFnZV93cml0ZSIpLHN0b3JhZ2VfcmVtb3ZlOmEoInN0b3JhZ2VfcmVtb3ZlIil9fWFzeW5jIGV4ZWN1dGUoZSl7bGV0IHQ9YXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZSh0aGlzLndhc20pLHI9KGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQse2Vudjp7Li4udGhpcy5nZXRIb3N0SW1wb3J0cygpLG1lbW9yeTp0aGlzLm1lbW9yeX19KSkuZXhwb3J0c1tlXTtpZih2b2lkIDA9PXIpdGhyb3cgRXJyb3IoYENvbnRyYWN0IG1ldGhvZCAnJHtlfScgZG9lcyBub3QgZXhpc3RzIGluIGNvbnRyYWN0ICR7dGhpcy5jb250ZXh0LmNvbnRyYWN0SWR9IGZvciBibG9jayBpZCAke3RoaXMuY29udGV4dC5ibG9ja0hlaWdodH1gKTtyZXR1cm4gcigpLHtyZXN1bHQ6dGhpcy5yZXN1bHQsbG9nczp0aGlzLmxvZ3N9fX1yLlJ1bnRpbWU9c30sNzgwODgsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmkoMzk1ODcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkxvY2FsVmlld0V4ZWN1dGlvbj12b2lkIDA7bGV0IGk9ZS5yKDI0MzQwKSxvPWUucig4NzAyNSksYT1lLnIoNDgwNzYpLHM9ZS5yKDk3MjMwKTtjbGFzcyBje2Nvbm5lY3Rpb247c3RvcmFnZTtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbm5lY3Rpb249ZS5nZXRDb25uZWN0aW9uKCksdGhpcy5zdG9yYWdlPW5ldyBvLlN0b3JhZ2V9YXN5bmMgZmV0Y2hDb250cmFjdENvZGUoZSx0KXtyZXR1cm4oYXdhaXQgdGhpcy5jb25uZWN0aW9uLnByb3ZpZGVyLnF1ZXJ5KHtyZXF1ZXN0X3R5cGU6InZpZXdfY29kZSIsYWNjb3VudF9pZDplLC4uLnR9KSkuY29kZV9iYXNlNjR9YXN5bmMgZmV0Y2hDb250cmFjdFN0YXRlKGUsdCl7cmV0dXJuKDAscy52aWV3U3RhdGUpKHRoaXMuY29ubmVjdGlvbixlLCIiLHQpfWFzeW5jIGZldGNoKGUsdCl7bGV0IHI9YXdhaXQgdGhpcy5jb25uZWN0aW9uLnByb3ZpZGVyLmJsb2NrKHQpLG49ci5oZWFkZXIuaGFzaCxpPXIuaGVhZGVyLmhlaWdodCxvPXIuaGVhZGVyLnRpbWVzdGFtcDtyZXR1cm57YmxvY2tIYXNoOm4sYmxvY2tIZWlnaHQ6aSxibG9ja1RpbWVzdGFtcDpvLGNvbnRyYWN0Q29kZTphd2FpdCB0aGlzLmZldGNoQ29udHJhY3RDb2RlKGUsdCksY29udHJhY3RTdGF0ZTphd2FpdCB0aGlzLmZldGNoQ29udHJhY3RTdGF0ZShlLHQpfX1hc3luYyBsb2FkT3JGZXRjaChlLHQpe2xldCByPXRoaXMuc3RvcmFnZS5sb2FkKHQpO2lmKHIpcmV0dXJuIHI7bGV0e2Jsb2NrSGFzaDpuLC4uLml9PWF3YWl0IHRoaXMuZmV0Y2goZSx0KTtyZXR1cm4gdGhpcy5zdG9yYWdlLnNhdmUobixpKSxpfWFzeW5jIHZpZXdGdW5jdGlvbih7Y29udHJhY3RJZDplLG1ldGhvZE5hbWU6dCxhcmdzOnI9e30sYmxvY2tRdWVyeTpvPXtmaW5hbGl0eToib3B0aW1pc3RpYyJ9fSl7bGV0IHM9SlNPTi5zdHJpbmdpZnkocikse2NvbnRyYWN0Q29kZTpjLGNvbnRyYWN0U3RhdGU6dSxibG9ja0hlaWdodDpmLGJsb2NrVGltZXN0YW1wOmR9PWF3YWl0IHRoaXMubG9hZE9yRmV0Y2goZSxvKSxsPW5ldyBhLlJ1bnRpbWUoe2NvbnRyYWN0SWQ6ZSxjb250cmFjdENvZGU6Yyxjb250cmFjdFN0YXRlOnUsYmxvY2tIZWlnaHQ6ZixibG9ja1RpbWVzdGFtcDpkLG1ldGhvZEFyZ3M6c30pLHtyZXN1bHQ6aCxsb2dzOnB9PWF3YWl0IGwuZXhlY3V0ZSh0KTtyZXR1cm4gcCYmKDAsaS5wcmludFR4T3V0Y29tZUxvZ3MpKHtjb250cmFjdElkOmUsbG9nczpwfSksSlNPTi5wYXJzZShuLkJ1ZmZlci5mcm9tKGgpLnRvU3RyaW5nKCkpfX1yLkxvY2FsVmlld0V4ZWN1dGlvbj1jfSwyMjk2NCwoZSx0LHIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLkNvbmZsaWN0aW5nT3B0aW9ucz1yLkFyZ3VtZW50U2NoZW1hRXJyb3I9ci5Vbmtub3duQXJndW1lbnRFcnJvcj1yLlVuc3VwcG9ydGVkU2VyaWFsaXphdGlvbkVycm9yPXZvaWQgMDtjbGFzcyBuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgQ29udHJhY3QgbWV0aG9kICcke2V9JyBpcyB1c2luZyBhbiB1bnN1cHBvcnRlZCBzZXJpYWxpemF0aW9uIHR5cGUgJHt0fWApfX1yLlVuc3VwcG9ydGVkU2VyaWFsaXphdGlvbkVycm9yPW47Y2xhc3MgaSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYFVucmVjb2duaXplZCBhcmd1bWVudCAnJHtlfScsIGV4cGVjdGVkICcke0pTT04uc3RyaW5naWZ5KHQpfSdgKX19ci5Vbmtub3duQXJndW1lbnRFcnJvcj1pO2NsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGBBcmd1bWVudCAnJHtlfScgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgc3BlY2lmaWVkIEFCSSBzY2hlbWE6ICcke0pTT04uc3RyaW5naWZ5KHQpfSdgKX19ci5Bcmd1bWVudFNjaGVtYUVycm9yPW87Y2xhc3MgYSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNvbmZsaWN0aW5nIGNvbnRyYWN0IG1ldGhvZCBvcHRpb25zIGhhdmUgYmVlbiBwYXNzZWQuIFlvdSBjYW4gZWl0aGVyIHNwZWNpZnkgQUJJIG9yIGEgbGlzdCBvZiB2aWV3L2NhbGwgbWV0aG9kcy4iKX19ci5Db25mbGljdGluZ09wdGlvbnM9YX0sNzczMTIsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmUmJmUuZS5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuQ29udHJhY3Q9dm9pZCAwO2xldCBpPWUucigyNDM0MCksbz1lLnIoODY1NTEpLGE9ZS5yKDc4MDg4KSxzPW4oZS5yKDI3NDc2KSksYz1uKGUucig2MjM2MSkpLHU9ZS5yKDg4NjYyKSxmPWUucigzMjY4OSksZD1lLnIoMjI5NjQpLGw9ZS5yKDk3MjMwKTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuKHtbZV06KC4uLmUpPT50KC4uLmUpfSlbZV19ZnVuY3Rpb24gcChlLHQscil7aWYoIW0oZSkpcmV0dXJuO2lmKHQucGFyYW1zJiZ0LnBhcmFtcy5zZXJpYWxpemF0aW9uX3R5cGUhPT11LkFiaVNlcmlhbGl6YXRpb25UeXBlLkpzb24pdGhyb3cgbmV3IGQuVW5zdXBwb3J0ZWRTZXJpYWxpemF0aW9uRXJyb3IodC5uYW1lLHQucGFyYW1zLnNlcmlhbGl6YXRpb25fdHlwZSk7aWYodC5yZXN1bHQmJnQucmVzdWx0LnNlcmlhbGl6YXRpb25fdHlwZSE9PXUuQWJpU2VyaWFsaXphdGlvblR5cGUuSnNvbil0aHJvdyBuZXcgZC5VbnN1cHBvcnRlZFNlcmlhbGl6YXRpb25FcnJvcih0Lm5hbWUsdC5yZXN1bHQuc2VyaWFsaXphdGlvbl90eXBlKTtsZXQgbj10LnBhcmFtcz8uYXJnc3x8W107Zm9yKGxldCB0IG9mIG4pe2xldCBuPWVbdC5uYW1lXSxpPXQudHlwZV9zY2hlbWE7aS5kZWZpbml0aW9ucz1yLmJvZHkucm9vdF9zY2hlbWEuZGVmaW5pdGlvbnM7bGV0IG89KDAscy5kZWZhdWx0KShpKTtpZighbyhuKSl0aHJvdyBuZXcgZC5Bcmd1bWVudFNjaGVtYUVycm9yKHQubmFtZSxvLmVycm9ycyl9Zm9yKGxldCB0IG9mIE9iamVjdC5rZXlzKGUpKWlmKCFuLmZpbmQoZT0+ZS5uYW1lPT09dCkpdGhyb3cgbmV3IGQuVW5rbm93bkFyZ3VtZW50RXJyb3IodCxuLm1hcChlPT5lLm5hbWUpKX1sZXQgYj1lPT5lJiZ2b2lkIDAhPT1lLmJ5dGVMZW5ndGgmJmUuYnl0ZUxlbmd0aD09PWUubGVuZ3RoLG09ZT0+IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7Y2xhc3MgeXthY2NvdW50O2Nvbm5lY3Rpb247Y29udHJhY3RJZDtsdmU7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuY29ubmVjdGlvbj1lLmdldENvbm5lY3Rpb24oKSxlIGluc3RhbmNlb2YgZi5BY2NvdW50JiYoKDAsYy5kZWZhdWx0KSgibmV3IENvbnRyYWN0KGFjY291bnQsIGNvbnRyYWN0SWQsIG9wdGlvbnMpIikoInVzZSBgbmV3IENvbnRyYWN0KGNvbm5lY3Rpb24sIGNvbnRyYWN0SWQsIG9wdGlvbnMpYCBpbnN0ZWFkIiksdGhpcy5hY2NvdW50PWUpLHRoaXMuY29udHJhY3RJZD10LHRoaXMubHZlPW5ldyBhLkxvY2FsVmlld0V4ZWN1dGlvbihlKTtjb25zdHt2aWV3TWV0aG9kczpuPVtdLGNoYW5nZU1ldGhvZHM6cz1bXSxhYmk6eSx1c2VMb2NhbFZpZXdFeGVjdXRpb246Z309cjtsZXQgdj1uLm1hcChlPT4oe25hbWU6ZSxhYmk6bnVsbH0pKSxfPXMubWFwKGU9Pih7bmFtZTplLGFiaTpudWxsfSkpO2lmKHkpe2lmKHYubGVuZ3RoPjB8fF8ubGVuZ3RoPjApdGhyb3cgbmV3IGQuQ29uZmxpY3RpbmdPcHRpb25zO3Y9eS5ib2R5LmZ1bmN0aW9ucy5maWx0ZXIoZT0+ZS5raW5kPT09dS5BYmlGdW5jdGlvbktpbmQuVmlldykubWFwKGU9Pih7bmFtZTplLm5hbWUsYWJpOmV9KSksXz15LmJvZHkuZnVuY3Rpb25zLmZpbHRlcihlPT5lLmtpbmQ9PT11LkFiaUZ1bmN0aW9uS2luZC5DYWxsKS5tYXAoZT0+KHtuYW1lOmUubmFtZSxhYmk6ZX0pKX12LmZvckVhY2goKHtuYW1lOmUsYWJpOnR9KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6aChlLGFzeW5jKHI9e30sbj17fSwuLi5hKT0+e2lmKGEubGVuZ3RofHwhKG0ocil8fGIocikpfHwhbShuKSl0aHJvdyBuZXcgby5Qb3NpdGlvbmFsQXJnc0Vycm9yO2lmKHQmJnAocix0LHkpLGcpdHJ5e3JldHVybiBhd2FpdCB0aGlzLmx2ZS52aWV3RnVuY3Rpb24oe2NvbnRyYWN0SWQ6dGhpcy5jb250cmFjdElkLG1ldGhvZE5hbWU6ZSxhcmdzOnIsLi4ubn0pfWNhdGNoKGUpe2kuTG9nZ2VyLndhcm4oYExvY2FsIHZpZXcgZXhlY3V0aW9uIGZhaWxlZCB3aXRoOiAiJHtlLm1lc3NhZ2V9ImApLGkuTG9nZ2VyLndhcm4oIkZhbGxiYWNrIHRvIG5vcm1hbCBSUEMgY2FsbCIpfXJldHVybiB0aGlzLmFjY291bnQ/dGhpcy5hY2NvdW50LnZpZXdGdW5jdGlvbih7Y29udHJhY3RJZDp0aGlzLmNvbnRyYWN0SWQsbWV0aG9kTmFtZTplLGFyZ3M6ciwuLi5ufSk6KDAsbC52aWV3RnVuY3Rpb24pKHRoaXMuY29ubmVjdGlvbix7Y29udHJhY3RJZDp0aGlzLmNvbnRyYWN0SWQsbWV0aG9kTmFtZTplLGFyZ3M6ciwuLi5ufSl9KX0pfSksXy5mb3JFYWNoKCh7bmFtZTplLGFiaTp0fSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOmgoZSxhc3luYyguLi5yKT0+e2lmKHIubGVuZ3RoJiYoci5sZW5ndGg+M3x8IShtKHJbMF0pfHxiKHJbMF0pKSkpdGhyb3cgbmV3IG8uUG9zaXRpb25hbEFyZ3NFcnJvcjtyZXR1cm4oci5sZW5ndGg+MXx8IShyWzBdJiZyWzBdLmFyZ3MpKSYmKCgwLGMuZGVmYXVsdCkoImNvbnRyYWN0Lm1ldGhvZE5hbWUoYXJncywgZ2FzLCBhbW91bnQpIikoInVzZSBgY29udHJhY3QubWV0aG9kTmFtZSh7IHNpZ25lckFjY291bnQsIGFyZ3MsIGdhcz8sIGFtb3VudD8sIGNhbGxiYWNrVXJsPywgbWV0YT8gfSlgIGluc3RlYWQiKSxyWzBdPXthcmdzOnJbMF0sZ2FzOnJbMV0sYW1vdW50OnJbMl19KSx0JiZwKHJbMF0uYXJncyx0LHkpLHRoaXMuX2NoYW5nZU1ldGhvZCh7bWV0aG9kTmFtZTplLC4uLnJbMF19KX0pfSl9KX1hc3luYyBfY2hhbmdlTWV0aG9kKHtzaWduZXJBY2NvdW50OmUsYXJnczp0LG1ldGhvZE5hbWU6cixnYXM6bixhbW91bnQ6byxtZXRhOmEsY2FsbGJhY2tVcmw6c30pe2coe2dhczpuLGFtb3VudDpvfSk7bGV0IGM9dGhpcy5hY2NvdW50fHxlO2lmKCFjKXRocm93IEVycm9yKCJzaWduZXJBY2NvdW50IG11c3QgYmUgc3BlY2lmaWVkIik7bGV0IHU9YXdhaXQgYy5mdW5jdGlvbkNhbGwoe2NvbnRyYWN0SWQ6dGhpcy5jb250cmFjdElkLG1ldGhvZE5hbWU6cixhcmdzOnQsZ2FzOm4sYXR0YWNoZWREZXBvc2l0Om8sd2FsbGV0TWV0YTphLHdhbGxldENhbGxiYWNrVXJsOnN9KTtyZXR1cm4oMCxpLmdldFRyYW5zYWN0aW9uTGFzdFJlc3VsdCkodSl9fWZ1bmN0aW9uIGcoZSl7bGV0IHQ9Im51bWJlciwgZGVjaW1hbCBzdHJpbmcgb3IgQmlnSW50Ijtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXMoZSkpe2xldCBuPWVbcl07aWYobiYmImJpZ2ludCIhPXR5cGVvZiBuJiZpc05hTihuKSl0aHJvdyBuZXcgby5Bcmd1bWVudFR5cGVFcnJvcihyLHQsbil9fXIuQ29udHJhY3Q9eX0sOTYzMDIsKGUsdCxyKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksci5NdWx0aXNpZ1N0YXRlU3RhdHVzPXIuTXVsdGlzaWdEZWxldGVSZXF1ZXN0UmVqZWN0aW9uRXJyb3I9ci5VbnN1cHBvcnRlZFNlcmlhbGl6YXRpb25FcnJvcj1yLlVua25vd25Bcmd1bWVudEVycm9yPXIuQ29uZmxpY3RpbmdPcHRpb25zPXIuQXJndW1lbnRTY2hlbWFFcnJvcj1yLkNvbnRyYWN0PXIuTVVMVElTSUdfQ09ORklSTV9NRVRIT0RTPXIuTVVMVElTSUdfQ0hBTkdFX01FVEhPRFM9ci5NVUxUSVNJR19ERVBPU0lUPXIuTVVMVElTSUdfR0FTPXIuTVVMVElTSUdfQUxMT1dBTkNFPXIuTVVMVElTSUdfU1RPUkFHRV9LRVk9ci5Db25uZWN0aW9uPXIuQWNjb3VudE11bHRpc2lnPXIuVXJsQWNjb3VudENyZWF0b3I9ci5Mb2NhbEFjY291bnRDcmVhdG9yPXIuQWNjb3VudENyZWF0b3I9ci5BY2NvdW50MkZBPXIuQWNjb3VudD12b2lkIDA7dmFyIG49ZS5yKDMyNjg5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQWNjb3VudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQWNjb3VudH19KTt2YXIgaT1lLnIoMzQxNTYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJBY2NvdW50MkZBIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5BY2NvdW50MkZBfX0pO3ZhciBvPWUucig2ODk4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQWNjb3VudENyZWF0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkFjY291bnRDcmVhdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJMb2NhbEFjY291bnRDcmVhdG9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Mb2NhbEFjY291bnRDcmVhdG9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJVcmxBY2NvdW50Q3JlYXRvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uVXJsQWNjb3VudENyZWF0b3J9fSk7dmFyIGE9ZS5yKDI5ODI0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQWNjb3VudE11bHRpc2lnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5BY2NvdW50TXVsdGlzaWd9fSk7dmFyIHM9ZS5yKDY2MzAzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQ29ubmVjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuQ29ubmVjdGlvbn19KTt2YXIgYz1lLnIoNjEzNDQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJNVUxUSVNJR19TVE9SQUdFX0tFWSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuTVVMVElTSUdfU1RPUkFHRV9LRVl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIk1VTFRJU0lHX0FMTE9XQU5DRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuTVVMVElTSUdfQUxMT1dBTkNFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJNVUxUSVNJR19HQVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLk1VTFRJU0lHX0dBU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiTVVMVElTSUdfREVQT1NJVCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuTVVMVElTSUdfREVQT1NJVH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiTVVMVElTSUdfQ0hBTkdFX01FVEhPRFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLk1VTFRJU0lHX0NIQU5HRV9NRVRIT0RTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJNVUxUSVNJR19DT05GSVJNX01FVEhPRFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLk1VTFRJU0lHX0NPTkZJUk1fTUVUSE9EU319KTt2YXIgdT1lLnIoNzczMTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJDb250cmFjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuQ29udHJhY3R9fSk7dmFyIGY9ZS5yKDIyOTY0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQXJndW1lbnRTY2hlbWFFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuQXJndW1lbnRTY2hlbWFFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiQ29uZmxpY3RpbmdPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5Db25mbGljdGluZ09wdGlvbnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIlVua25vd25Bcmd1bWVudEVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5Vbmtub3duQXJndW1lbnRFcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiVW5zdXBwb3J0ZWRTZXJpYWxpemF0aW9uRXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLlVuc3VwcG9ydGVkU2VyaWFsaXphdGlvbkVycm9yfX0pO3ZhciBkPWUucigyNDQ2MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIk11bHRpc2lnRGVsZXRlUmVxdWVzdFJlamVjdGlvbkVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5NdWx0aXNpZ0RlbGV0ZVJlcXVlc3RSZWplY3Rpb25FcnJvcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiTXVsdGlzaWdTdGF0ZVN0YXR1cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuTXVsdGlzaWdTdGF0ZVN0YXR1c319KX0sMzQ5MTcsKGUsdCxyKT0+e3ZhciBuPWUuaSgzNjIyMCk7IWZ1bmN0aW9uKCl7dmFyIHI9ezc4MjpmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0JiYoZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fX0sNjQ2OmZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtsZXQgdD17fTtmdW5jdGlvbiByKGUscixuKXtmdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/cjpyKGUsdCxuKX1ufHwobj1FcnJvcik7Y2xhc3MgbyBleHRlbmRzIG57Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKGkoZSx0LHIpKX19by5wcm90b3R5cGUubmFtZT1uLm5hbWUsby5wcm90b3R5cGUuY29kZT1lLHRbZV09b31mdW5jdGlvbiBuKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuYG9mICR7dH0gJHtTdHJpbmcoZSl9YDt7bGV0IHI9ZS5sZW5ndGg7cmV0dXJuKGU9ZS5tYXAoZT0+U3RyaW5nKGUpKSxyPjIpP2BvbmUgb2YgJHt0fSAke2Uuc2xpY2UoMCxyLTEpLmpvaW4oIiwgIil9LCBvciBgK2Vbci0xXToyPT09cj9gb25lIG9mICR7dH0gJHtlWzBdfSBvciAke2VbMV19YDpgb2YgJHt0fSAke2VbMF19YH19ZnVuY3Rpb24gaShlLHQscil7cmV0dXJuIGUuc3Vic3RyKCFyfHxyPDA/MDorcix0Lmxlbmd0aCk9PT10fWZ1bmN0aW9uIG8oZSx0LHIpe3JldHVybih2b2lkIDA9PT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpLGUuc3Vic3RyaW5nKHItdC5sZW5ndGgscik9PT10fWZ1bmN0aW9uIGEoZSx0LHIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgciYmKHI9MCksIShyK3QubGVuZ3RoPmUubGVuZ3RoKSYmLTEhPT1lLmluZGV4T2YodCxyKX1yKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytlKyciJ30sVHlwZUVycm9yKSxyKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oZSx0LHIpe2xldCBzLGM7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZpKHQsIm5vdCAiKT8ocz0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpzPSJtdXN0IGJlIixvKGUsIiBhcmd1bWVudCIpKWM9YFRoZSAke2V9ICR7c30gJHtuKHQsInR5cGUiKX1gO2Vsc2V7bGV0IHI9YShlLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2M9YFRoZSAiJHtlfSIgJHtyfSAke3N9ICR7bih0LCJ0eXBlIil9YH1yZXR1cm4gYytgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHJ9YH0sVHlwZUVycm9yKSxyKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxyKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oZSl7cmV0dXJuIlRoZSAiK2UrIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLHIoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIikscigiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKGUpe3JldHVybiJDYW5ub3QgY2FsbCAiK2UrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLHIoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLHIoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikscigiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxyKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvcikscigiRVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKGUpe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK2V9LFR5cGVFcnJvcikscigiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksZS5leHBvcnRzLnE9dH0sNDAzOmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH07ZS5leHBvcnRzPWY7dmFyIG89cig3MDkpLGE9cigzMzcpO3IoNzgyKShmLG8pO2Zvcih2YXIgcz1pKGEucHJvdG90eXBlKSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciB1PXNbY107Zi5wcm90b3R5cGVbdV18fChmLnByb3RvdHlwZVt1XT1hLnByb3RvdHlwZVt1XSl9ZnVuY3Rpb24gZihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmKSlyZXR1cm4gbmV3IGYoZSk7by5jYWxsKHRoaXMsZSksYS5jYWxsKHRoaXMsZSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLGUmJighMT09PWUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PWUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PWUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsZCkpKX1mdW5jdGlvbiBkKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8bi5kZWZhdWx0Lm5leHRUaWNrKGwsdGhpcyl9ZnVuY3Rpb24gbChlKXtlLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pfSw4ODk6ZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aTt2YXIgbj1yKDE3MCk7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7bi5jYWxsKHRoaXMsZSl9cig3ODIpKGksbiksaS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7cihudWxsLGUpfX0sNzA5OmZ1bmN0aW9uKHQscixpKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPVQsVC5SZWFkYWJsZVN0YXRlPWssaSgzNjEpLkV2ZW50RW1pdHRlcjt2YXIgbyxhLHMsYyx1LGY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5saXN0ZW5lcnModCkubGVuZ3RofSxkPWkoNjc4KSxsPWkoMzAwKS5CdWZmZXIsaD1lLmcuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHAoZSl7cmV0dXJuIGwuZnJvbShlKX1mdW5jdGlvbiBiKGUpe3JldHVybiBsLmlzQnVmZmVyKGUpfHxlIGluc3RhbmNlb2YgaH12YXIgbT1pKDgzNyk7YT1tJiZtLmRlYnVnbG9nP20uZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgeT1pKDM3OSksZz1pKDI1KSx2PWkoNzc2KS5nZXRIaWdoV2F0ZXJNYXJrLF89aSg2NDYpLnEsdz1fLkVSUl9JTlZBTElEX0FSR19UWVBFLHg9Xy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLE09Xy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxFPV8uRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtpKDc4MikoVCxkKTt2YXIgUz1nLmVycm9yT3JEZXN0cm95LEE9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gSShlLHQscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBlLnByZXBlbmRMaXN0ZW5lcih0LHIpO2UuX2V2ZW50cyYmZS5fZXZlbnRzW3RdP0FycmF5LmlzQXJyYXkoZS5fZXZlbnRzW3RdKT9lLl9ldmVudHNbdF0udW5zaGlmdChyKTplLl9ldmVudHNbdF09W3IsZS5fZXZlbnRzW3RdXTplLm9uKHQscil9ZnVuY3Rpb24gayhlLHQscil7bz1vfHxpKDQwMyksZT1lfHx7fSwiYm9vbGVhbiIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgbyksdGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9dih0aGlzLGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsciksdGhpcy5idWZmZXI9bmV3IHksdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxlLmVuY29kaW5nJiYoc3x8KHM9aSg3MDQpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgcyhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWUuZW5jb2RpbmcpfWZ1bmN0aW9uIFQoZSl7aWYobz1vfHxpKDQwMyksISh0aGlzIGluc3RhbmNlb2YgVCkpcmV0dXJuIG5ldyBUKGUpO3ZhciB0PXRoaXMgaW5zdGFuY2VvZiBvO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGsoZSx0aGlzLHQpLHRoaXMucmVhZGFibGU9ITAsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSksZC5jYWxsKHRoaXMpfWZ1bmN0aW9uIE4oZSx0LHIsbixpKXthKCJyZWFkYWJsZUFkZENodW5rIix0KTt2YXIgbyxzPWUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PXQpcy5yZWFkaW5nPSExLGooZSxzKTtlbHNlIGlmKGl8fChvPVIocyx0KSksbylTKGUsbyk7ZWxzZSBpZihzLm9iamVjdE1vZGV8fHQmJnQubGVuZ3RoPjApaWYoInN0cmluZyI9PXR5cGVvZiB0fHxzLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PWwucHJvdG90eXBlfHwodD1wKHQpKSxuKXMuZW5kRW1pdHRlZD9TKGUsbmV3IEUpOk8oZSxzLHQsITApO2Vsc2UgaWYocy5lbmRlZClTKGUsbmV3IHgpO2Vsc2V7aWYocy5kZXN0cm95ZWQpcmV0dXJuITE7cy5yZWFkaW5nPSExLHMuZGVjb2RlciYmIXI/KHQ9cy5kZWNvZGVyLndyaXRlKHQpLHMub2JqZWN0TW9kZXx8MCE9PXQubGVuZ3RoP08oZSxzLHQsITEpOlUoZSxzKSk6TyhlLHMsdCwhMSl9ZWxzZSBufHwocy5yZWFkaW5nPSExLFUoZSxzKSk7cmV0dXJuIXMuZW5kZWQmJihzLmxlbmd0aDxzLmhpZ2hXYXRlck1hcmt8fDA9PT1zLmxlbmd0aCl9ZnVuY3Rpb24gTyhlLHQscixuKXt0LmZsb3dpbmcmJjA9PT10Lmxlbmd0aCYmIXQuc3luYz8odC5hd2FpdERyYWluPTAsZS5lbWl0KCJkYXRhIixyKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCxuP3QuYnVmZmVyLnVuc2hpZnQocik6dC5idWZmZXIucHVzaChyKSx0Lm5lZWRSZWFkYWJsZSYmRChlKSksVShlLHQpfWZ1bmN0aW9uIFIoZSx0KXt2YXIgcjtyZXR1cm4gYih0KXx8InN0cmluZyI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fHxlLm9iamVjdE1vZGV8fChyPW5ldyB3KCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sdCkpLHJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxULnByb3RvdHlwZS5kZXN0cm95PWcuZGVzdHJveSxULnByb3RvdHlwZS5fdW5kZXN0cm95PWcudW5kZXN0cm95LFQucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sVC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6InN0cmluZyI9PXR5cGVvZiBlJiYoKHQ9dHx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKGU9bC5mcm9tKGUsdCksdD0iIikscj0hMCksTih0aGlzLGUsdCwhMSxyKX0sVC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXtyZXR1cm4gTih0aGlzLGUsbnVsbCwhMCwhMSl9LFQucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFQucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N8fChzPWkoNzA0KS5zKTt2YXIgdD1uZXcgcyhlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9dCx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIHI9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxuPSIiO251bGwhPT1yOyluKz10LndyaXRlKHIuZGF0YSkscj1yLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1uJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKG4pLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPW4ubGVuZ3RoLHRoaXN9O3ZhciBQPTB4NDAwMDAwMDA7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZT49UD9lPVA6KGUtLSxlfD1lPj4+MSxlfD1lPj4+MixlfD1lPj4+NCxlfD1lPj4+OCxlfD1lPj4+MTYsZSsrKSxlfWZ1bmN0aW9uIEIoZSx0KXtpZihlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQpcmV0dXJuIDA7aWYodC5vYmplY3RNb2RlKXJldHVybiAxO2lmKGUhPWUpaWYodC5mbG93aW5nJiZ0Lmxlbmd0aClyZXR1cm4gdC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiB0Lmxlbmd0aDtyZXR1cm4oZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9QyhlKSksZTw9dC5sZW5ndGgpP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCl9ZnVuY3Rpb24gaihlLHQpe2lmKGEoIm9uRW9mQ2h1bmsiKSwhdC5lbmRlZCl7aWYodC5kZWNvZGVyKXt2YXIgcj10LmRlY29kZXIuZW5kKCk7ciYmci5sZW5ndGgmJih0LmJ1ZmZlci5wdXNoKHIpLHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCl9dC5lbmRlZD0hMCx0LnN5bmM/RChlKToodC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fCh0LmVtaXR0ZWRSZWFkYWJsZT0hMCxMKGUpKSl9fWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTthKCJlbWl0UmVhZGFibGUiLHQubmVlZFJlYWRhYmxlLHQuZW1pdHRlZFJlYWRhYmxlKSx0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KGEoImVtaXRSZWFkYWJsZSIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCxuLmRlZmF1bHQubmV4dFRpY2soTCxlKSl9ZnVuY3Rpb24gTChlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2EoImVtaXRSZWFkYWJsZV8iLHQuZGVzdHJveWVkLHQubGVuZ3RoLHQuZW5kZWQpLCF0LmRlc3Ryb3llZCYmKHQubGVuZ3RofHx0LmVuZGVkKSYmKGUuZW1pdCgicmVhZGFibGUiKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMSksdC5uZWVkUmVhZGFibGU9IXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssVyhlKX1mdW5jdGlvbiBVKGUsdCl7dC5yZWFkaW5nTW9yZXx8KHQucmVhZGluZ01vcmU9ITAsbi5kZWZhdWx0Lm5leHRUaWNrKEssZSx0KSl9ZnVuY3Rpb24gSyhlLHQpe2Zvcig7IXQucmVhZGluZyYmIXQuZW5kZWQmJih0Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcmt8fHQuZmxvd2luZyYmMD09PXQubGVuZ3RoKTspe3ZhciByPXQubGVuZ3RoO2lmKGEoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksZS5yZWFkKDApLHI9PT10Lmxlbmd0aClicmVha310LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTthKCJwaXBlT25EcmFpbiIsdC5hd2FpdERyYWluKSx0LmF3YWl0RHJhaW4mJnQuYXdhaXREcmFpbi0tLDA9PT10LmF3YWl0RHJhaW4mJmYoZSwiZGF0YSIpJiYodC5mbG93aW5nPSEwLFcoZSkpfX1mdW5jdGlvbiBxKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dC5yZWFkYWJsZUxpc3RlbmluZz1lLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCx0LnJlc3VtZVNjaGVkdWxlZCYmIXQucGF1c2VkP3QuZmxvd2luZz0hMDplLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZlLnJlc3VtZSgpfWZ1bmN0aW9uIHooZSl7YSgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksZS5yZWFkKDApfWZ1bmN0aW9uIEgoZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLG4uZGVmYXVsdC5uZXh0VGljayhWLGUsdCkpfWZ1bmN0aW9uIFYoZSx0KXthKCJyZXN1bWUiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KCJyZXN1bWUiKSxXKGUpLHQuZmxvd2luZyYmIXQucmVhZGluZyYmZS5yZWFkKDApfWZ1bmN0aW9uIFcoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTtmb3IoYSgiZmxvdyIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJm51bGwhPT1lLnJlYWQoKTspO31mdW5jdGlvbiBHKGUsdCl7dmFyIHI7cmV0dXJuIDA9PT10Lmxlbmd0aD9udWxsOih0Lm9iamVjdE1vZGU/cj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8ocj10LmRlY29kZXI/dC5idWZmZXIuam9pbigiIik6MT09PXQuYnVmZmVyLmxlbmd0aD90LmJ1ZmZlci5maXJzdCgpOnQuYnVmZmVyLmNvbmNhdCh0Lmxlbmd0aCksdC5idWZmZXIuY2xlYXIoKSk6cj10LmJ1ZmZlci5jb25zdW1lKGUsdC5kZWNvZGVyKSxyKX1mdW5jdGlvbiAkKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7YSgiZW5kUmVhZGFibGUiLHQuZW5kRW1pdHRlZCksdC5lbmRFbWl0dGVkfHwodC5lbmRlZD0hMCxuLmRlZmF1bHQubmV4dFRpY2soSix0LGUpKX1mdW5jdGlvbiBKKGUsdCl7aWYoYSgiZW5kUmVhZGFibGVOVCIsZS5lbmRFbWl0dGVkLGUubGVuZ3RoKSwhZS5lbmRFbWl0dGVkJiYwPT09ZS5sZW5ndGgmJihlLmVuZEVtaXR0ZWQ9ITAsdC5yZWFkYWJsZT0hMSx0LmVtaXQoImVuZCIpLGUuYXV0b0Rlc3Ryb3kpKXt2YXIgcj10Ll93cml0YWJsZVN0YXRlOyghcnx8ci5hdXRvRGVzdHJveSYmci5maW5pc2hlZCkmJnQuZGVzdHJveSgpfX1mdW5jdGlvbiBaKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiAtMX1ULnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGUpe2EoInJlYWQiLGUpLGU9cGFyc2VJbnQoZSwxMCk7dmFyIHQscj10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZigwIT09ZSYmKHIuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ZSYmci5uZWVkUmVhZGFibGUmJigoMCE9PXIuaGlnaFdhdGVyTWFyaz9yLmxlbmd0aD49ci5oaWdoV2F0ZXJNYXJrOnIubGVuZ3RoPjApfHxyLmVuZGVkKSlyZXR1cm4gYSgicmVhZDogZW1pdFJlYWRhYmxlIixyLmxlbmd0aCxyLmVuZGVkKSwwPT09ci5sZW5ndGgmJnIuZW5kZWQ/JCh0aGlzKTpEKHRoaXMpLG51bGw7aWYoMD09PShlPUIoZSxyKSkmJnIuZW5kZWQpcmV0dXJuIDA9PT1yLmxlbmd0aCYmJCh0aGlzKSxudWxsO3ZhciBpPXIubmVlZFJlYWRhYmxlO3JldHVybiBhKCJuZWVkIHJlYWRhYmxlIixpKSwoMD09PXIubGVuZ3RofHxyLmxlbmd0aC1lPHIuaGlnaFdhdGVyTWFyaykmJmEoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixpPSEwKSxyLmVuZGVkfHxyLnJlYWRpbmc/YSgicmVhZGluZyBvciBlbmRlZCIsaT0hMSk6aSYmKGEoImRvIHJlYWQiKSxyLnJlYWRpbmc9ITAsci5zeW5jPSEwLDA9PT1yLmxlbmd0aCYmKHIubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHIuaGlnaFdhdGVyTWFyayksci5zeW5jPSExLHIucmVhZGluZ3x8KGU9QihuLHIpKSksbnVsbD09PSh0PWU+MD9HKGUscik6bnVsbCk/KHIubmVlZFJlYWRhYmxlPXIubGVuZ3RoPD1yLmhpZ2hXYXRlck1hcmssZT0wKTooci5sZW5ndGgtPWUsci5hd2FpdERyYWluPTApLDA9PT1yLmxlbmd0aCYmKHIuZW5kZWR8fChyLm5lZWRSZWFkYWJsZT0hMCksbiE9PWUmJnIuZW5kZWQmJiQodGhpcykpLG51bGwhPT10JiZ0aGlzLmVtaXQoImRhdGEiLHQpLHR9LFQucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe1ModGhpcyxuZXcgTSgiX3JlYWQoKSIpKX0sVC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsaT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChpLnBpcGVzQ291bnQpe2Nhc2UgMDppLnBpcGVzPWU7YnJlYWs7Y2FzZSAxOmkucGlwZXM9W2kucGlwZXMsZV07YnJlYWs7ZGVmYXVsdDppLnBpcGVzLnB1c2goZSl9aS5waXBlc0NvdW50Kz0xLGEoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsaS5waXBlc0NvdW50LHQpO3ZhciBvPXQmJiExPT09dC5lbmR8fGU9PT1uLmRlZmF1bHQuc3Rkb3V0fHxlPT09bi5kZWZhdWx0LnN0ZGVycj95OmM7ZnVuY3Rpb24gcyhlLHQpe2EoIm9udW5waXBlIiksZT09PXImJnQmJiExPT09dC5oYXNVbnBpcGVkJiYodC5oYXNVbnBpcGVkPSEwLGwoKSl9ZnVuY3Rpb24gYygpe2EoIm9uZW5kIiksZS5lbmQoKX1pLmVuZEVtaXR0ZWQ/bi5kZWZhdWx0Lm5leHRUaWNrKG8pOnIub25jZSgiZW5kIixvKSxlLm9uKCJ1bnBpcGUiLHMpO3ZhciB1PUYocik7ZS5vbigiZHJhaW4iLHUpO3ZhciBkPSExO2Z1bmN0aW9uIGwoKXthKCJjbGVhbnVwIiksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGIpLGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsbSksZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHUpLGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixwKSxlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLHMpLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsYyksci5yZW1vdmVMaXN0ZW5lcigiZW5kIix5KSxyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixoKSxkPSEwLGkuYXdhaXREcmFpbiYmKCFlLl93cml0YWJsZVN0YXRlfHxlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJnUoKX1mdW5jdGlvbiBoKHQpe2EoIm9uZGF0YSIpO3ZhciBuPWUud3JpdGUodCk7YSgiZGVzdC53cml0ZSIsbiksITE9PT1uJiYoKDE9PT1pLnBpcGVzQ291bnQmJmkucGlwZXM9PT1lfHxpLnBpcGVzQ291bnQ+MSYmLTEhPT1aKGkucGlwZXMsZSkpJiYhZCYmKGEoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsaS5hd2FpdERyYWluKSxpLmF3YWl0RHJhaW4rKyksci5wYXVzZSgpKX1mdW5jdGlvbiBwKHQpe2EoIm9uZXJyb3IiLHQpLHkoKSxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksMD09PWYoZSwiZXJyb3IiKSYmUyhlLHQpfWZ1bmN0aW9uIGIoKXtlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG0pLHkoKX1mdW5jdGlvbiBtKCl7YSgib25maW5pc2giKSxlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsYikseSgpfWZ1bmN0aW9uIHkoKXthKCJ1bnBpcGUiKSxyLnVucGlwZShlKX1yZXR1cm4gci5vbigiZGF0YSIsaCksSShlLCJlcnJvciIscCksZS5vbmNlKCJjbG9zZSIsYiksZS5vbmNlKCJmaW5pc2giLG0pLGUuZW1pdCgicGlwZSIsciksaS5mbG93aW5nfHwoYSgicGlwZSByZXN1bWUiKSxyLnJlc3VtZSgpKSxlfSxULnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dC5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT10LnBpcGVzQ291bnQpcmV0dXJuIGUmJmUhPT10LnBpcGVzfHwoZXx8KGU9dC5waXBlcyksdC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMSxlJiZlLmVtaXQoInVucGlwZSIsdGhpcyxyKSksdGhpcztpZighZSl7dmFyIG49dC5waXBlcyxpPXQucGlwZXNDb3VudDt0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspbltvXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgYT1aKHQucGlwZXMsZSk7cmV0dXJuIC0xPT09YXx8KHQucGlwZXMuc3BsaWNlKGEsMSksdC5waXBlc0NvdW50LT0xLDE9PT10LnBpcGVzQ291bnQmJih0LnBpcGVzPXQucGlwZXNbMF0pLGUuZW1pdCgidW5waXBlIix0aGlzLHIpKSx0aGlzfSxULnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciByPWQucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1lPyhpLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09aS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiIT09ZXx8aS5lbmRFbWl0dGVkfHxpLnJlYWRhYmxlTGlzdGVuaW5nfHwoaS5yZWFkYWJsZUxpc3RlbmluZz1pLm5lZWRSZWFkYWJsZT0hMCxpLmZsb3dpbmc9ITEsaS5lbWl0dGVkUmVhZGFibGU9ITEsYSgib24gcmVhZGFibGUiLGkubGVuZ3RoLGkucmVhZGluZyksaS5sZW5ndGg/RCh0aGlzKTppLnJlYWRpbmd8fG4uZGVmYXVsdC5uZXh0VGljayh6LHRoaXMpKSxyfSxULnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1ULnByb3RvdHlwZS5vbixULnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3ZhciByPWQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVybiJyZWFkYWJsZSI9PT1lJiZuLmRlZmF1bHQubmV4dFRpY2socSx0aGlzKSxyfSxULnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PWV8fHZvaWQgMD09PWUpJiZuLmRlZmF1bHQubmV4dFRpY2socSx0aGlzKSx0fSxULnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChhKCJyZXN1bWUiKSxlLmZsb3dpbmc9IWUucmVhZGFibGVMaXN0ZW5pbmcsSCh0aGlzLGUpKSxlLnBhdXNlZD0hMSx0aGlzfSxULnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBhKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihhKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LFQucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKGEoIndyYXBwZWQgZW5kIiksci5kZWNvZGVyJiYhci5lbmRlZCl7dmFyIGU9ci5kZWNvZGVyLmVuZCgpO2UmJmUubGVuZ3RoJiZ0LnB1c2goZSl9dC5wdXNoKG51bGwpfSksZS5vbigiZGF0YSIsZnVuY3Rpb24oaSl7YSgid3JhcHBlZCBkYXRhIiksci5kZWNvZGVyJiYoaT1yLmRlY29kZXIud3JpdGUoaSkpLHIub2JqZWN0TW9kZSYmbnVsbD09aXx8KHIub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpJiYodC5wdXNoKGkpfHwobj0hMCxlLnBhdXNlKCkpKX0pLGUpdm9pZCAwPT09dGhpc1tpXSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbaV0mJih0aGlzW2ldPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlW3RdLmFwcGx5KGUsYXJndW1lbnRzKX19KGkpKTtmb3IodmFyIG89MDtvPEEubGVuZ3RoO28rKyllLm9uKEFbb10sdGhpcy5lbWl0LmJpbmQodGhpcyxBW29dKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24odCl7YSgid3JhcHBlZCBfcmVhZCIsdCksbiYmKG49ITEsZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihULnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9aSg4NzEpKSxjKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1lKX19KSxULl9mcm9tTGlzdD1HLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVC5mcm9tPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXUmJih1PWkoNzI3KSksdShULGUsdCl9KX0sMTcwOmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWY7dmFyIG49cig2NDYpLnEsaT1uLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG89bi5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssYT1uLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcscz1uLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxjPXIoNDAzKTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKG51bGw9PT1uKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgbyk7ci53cml0ZWNodW5rPW51bGwsci53cml0ZWNiPW51bGwsbnVsbCE9dCYmdGhpcy5wdXNoKHQpLG4oZSk7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtpLnJlYWRpbmc9ITEsKGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gZihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmKSlyZXR1cm4gbmV3IGYoZSk7Yy5jYWxsKHRoaXMsZSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnUuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmZsdXNoJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsZCl9ZnVuY3Rpb24gZCgpe3ZhciBlPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9sKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbih0LHIpe2woZSx0LHIpfSl9ZnVuY3Rpb24gbChlLHQscil7aWYodClyZXR1cm4gZS5lbWl0KCJlcnJvciIsdCk7aWYobnVsbCE9ciYmZS5wdXNoKHIpLGUuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBzO2lmKGUuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgYTtyZXR1cm4gZS5wdXNoKG51bGwpfXIoNzgyKShmLGMpLGYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxjLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxmLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXtyKG5ldyBpKCJfdHJhbnNmb3JtKCkiKSl9LGYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYobi53cml0ZWNiPXIsbi53cml0ZWNodW5rPWUsbi53cml0ZWVuY29kaW5nPXQsIW4udHJhbnNmb3JtaW5nKXt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlOyhuLm5lZWRUcmFuc2Zvcm18fGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9fSxmLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09dC53cml0ZWNodW5rfHx0LnRyYW5zZm9ybWluZz90Lm5lZWRUcmFuc2Zvcm09ITA6KHQudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybSh0LndyaXRlY2h1bmssdC53cml0ZWVuY29kaW5nLHQuYWZ0ZXJUcmFuc2Zvcm0pKX0sZi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtjLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZSxmdW5jdGlvbihlKXt0KGUpfSl9fSwzMzc6ZnVuY3Rpb24odCxyLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7Vih0LGUpfX10LmV4cG9ydHM9ayxrLldyaXRhYmxlU3RhdGU9STt2YXIgYSxzLGM9e2RlcHJlY2F0ZTppKDc2OSl9LHU9aSg2NzgpLGY9aSgzMDApLkJ1ZmZlcixkPWUuZy5VaW50OEFycmF5fHxmdW5jdGlvbigpe307ZnVuY3Rpb24gbChlKXtyZXR1cm4gZi5mcm9tKGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGYuaXNCdWZmZXIoZSl8fGUgaW5zdGFuY2VvZiBkfXZhciBwPWkoMjUpLGI9aSg3NzYpLmdldEhpZ2hXYXRlck1hcmssbT1pKDY0NikucSx5PW0uRVJSX0lOVkFMSURfQVJHX1RZUEUsZz1tLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHY9bS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXz1tLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsdz1tLkVSUl9TVFJFQU1fREVTVFJPWUVELHg9bS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLE09bS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxFPW0uRVJSX1VOS05PV05fRU5DT0RJTkcsUz1wLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIEEoKXt9ZnVuY3Rpb24gSShlLHQscil7YT1hfHxpKDQwMyksZT1lfHx7fSwiYm9vbGVhbiIhPXR5cGVvZiByJiYocj10IGluc3RhbmNlb2YgYSksdGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Yih0aGlzLGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsciksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7dmFyIG49ITE9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFuLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihlKXtqKHQsZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFlLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgbyh0aGlzKX1mdW5jdGlvbiBrKGUpe3ZhciB0PXRoaXMgaW5zdGFuY2VvZihhPWF8fGkoNDAzKSk7aWYoIXQmJiFzLmNhbGwoayx0aGlzKSlyZXR1cm4gbmV3IGsoZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgSShlLHRoaXMsdCksdGhpcy53cml0YWJsZT0hMCxlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSksdS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFQoZSx0KXt2YXIgcj1uZXcgTTtTKGUsciksbi5kZWZhdWx0Lm5leHRUaWNrKHQscil9ZnVuY3Rpb24gTihlLHQscixpKXt2YXIgbztyZXR1cm4gbnVsbD09PXI/bz1uZXcgeDoic3RyaW5nIj09dHlwZW9mIHJ8fHQub2JqZWN0TW9kZXx8KG89bmV3IHkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLHIpKSwhb3x8KFMoZSxvKSxuLmRlZmF1bHQubmV4dFRpY2soaSxvKSwhMSl9ZnVuY3Rpb24gTyhlLHQscil7cmV0dXJuIGUub2JqZWN0TW9kZXx8ITE9PT1lLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgdHx8KHQ9Zi5mcm9tKHQscikpLHR9ZnVuY3Rpb24gUihlLHQscixuLGksbyl7aWYoIXIpe3ZhciBhPU8odCxuLGkpO24hPT1hJiYocj0hMCxpPSJidWZmZXIiLG49YSl9dmFyIHM9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPXM7dmFyIGM9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO2lmKGN8fCh0Lm5lZWREcmFpbj0hMCksdC53cml0aW5nfHx0LmNvcmtlZCl7dmFyIHU9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0O3QubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bixlbmNvZGluZzppLGlzQnVmOnIsY2FsbGJhY2s6byxuZXh0Om51bGx9LHU/dS5uZXh0PXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDp0LmJ1ZmZlcmVkUmVxdWVzdD10Lmxhc3RCdWZmZXJlZFJlcXVlc3QsdC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFAoZSx0LCExLHMsbixpLG8pO3JldHVybiBjfWZ1bmN0aW9uIFAoZSx0LHIsbixpLG8sYSl7dC53cml0ZWxlbj1uLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyB3KCJ3cml0ZSIpKTpyP2UuX3dyaXRldihpLHQub253cml0ZSk6ZS5fd3JpdGUoaSxvLHQub253cml0ZSksdC5zeW5jPSExfWZ1bmN0aW9uIEMoZSx0LHIsaSxvKXstLXQucGVuZGluZ2NiLHI/KG4uZGVmYXVsdC5uZXh0VGljayhvLGkpLG4uZGVmYXVsdC5uZXh0VGljayh6LGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsUyhlLGkpKToobyhpKSxlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxTKGUsaSkseihlLHQpKX1mdW5jdGlvbiBCKGUpe2Uud3JpdGluZz0hMSxlLndyaXRlY2I9bnVsbCxlLmxlbmd0aC09ZS53cml0ZWxlbixlLndyaXRlbGVuPTB9ZnVuY3Rpb24gaihlLHQpe3ZhciByPWUuX3dyaXRhYmxlU3RhdGUsaT1yLnN5bmMsbz1yLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgbmV3IHY7aWYoQihyKSx0KUMoZSxyLGksdCxvKTtlbHNle3ZhciBhPUsocil8fGUuZGVzdHJveWVkO2F8fHIuY29ya2VkfHxyLmJ1ZmZlclByb2Nlc3Npbmd8fCFyLmJ1ZmZlcmVkUmVxdWVzdHx8VShlLHIpLGk/bi5kZWZhdWx0Lm5leHRUaWNrKEQsZSxyLGEsbyk6RChlLHIsYSxvKX19ZnVuY3Rpb24gRChlLHQscixuKXtyfHxMKGUsdCksdC5wZW5kaW5nY2ItLSxuKCkseihlLHQpfWZ1bmN0aW9uIEwoZSx0KXswPT09dC5sZW5ndGgmJnQubmVlZERyYWluJiYodC5uZWVkRHJhaW49ITEsZS5lbWl0KCJkcmFpbiIpKX1mdW5jdGlvbiBVKGUsdCl7dC5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPXQuYnVmZmVyZWRSZXF1ZXN0O2lmKGUuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgbj1BcnJheSh0LmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxpPXQuY29ya2VkUmVxdWVzdHNGcmVlO2kuZW50cnk9cjtmb3IodmFyIGE9MCxzPSEwO3I7KW5bYV09cixyLmlzQnVmfHwocz0hMSkscj1yLm5leHQsYSs9MTtuLmFsbEJ1ZmZlcnM9cyxQKGUsdCwhMCx0Lmxlbmd0aCxuLCIiLGkuZmluaXNoKSx0LnBlbmRpbmdjYisrLHQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLGkubmV4dD8odC5jb3JrZWRSZXF1ZXN0c0ZyZWU9aS5uZXh0LGkubmV4dD1udWxsKTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgbyh0KSx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3I7KXt2YXIgYz1yLmNodW5rLHU9ci5lbmNvZGluZyxmPXIuY2FsbGJhY2ssZD10Lm9iamVjdE1vZGU/MTpjLmxlbmd0aDtpZihQKGUsdCwhMSxkLGMsdSxmKSxyPXIubmV4dCx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdC53cml0aW5nKWJyZWFrfW51bGw9PT1yJiYodC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXQuYnVmZmVyZWRSZXF1ZXN0PXIsdC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUuZW5kaW5nJiYwPT09ZS5sZW5ndGgmJm51bGw9PT1lLmJ1ZmZlcmVkUmVxdWVzdCYmIWUuZmluaXNoZWQmJiFlLndyaXRpbmd9ZnVuY3Rpb24gRihlLHQpe2UuX2ZpbmFsKGZ1bmN0aW9uKHIpe3QucGVuZGluZ2NiLS0sciYmUyhlLHIpLHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KCJwcmVmaW5pc2giKSx6KGUsdCl9KX1mdW5jdGlvbiBxKGUsdCl7dC5wcmVmaW5pc2hlZHx8dC5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiBlLl9maW5hbHx8dC5kZXN0cm95ZWQ/KHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KCJwcmVmaW5pc2giKSk6KHQucGVuZGluZ2NiKyssdC5maW5hbENhbGxlZD0hMCxuLmRlZmF1bHQubmV4dFRpY2soRixlLHQpKSl9ZnVuY3Rpb24geihlLHQpe3ZhciByPUsodCk7aWYociYmKHEoZSx0KSwwPT09dC5wZW5kaW5nY2IpJiYodC5maW5pc2hlZD0hMCxlLmVtaXQoImZpbmlzaCIpLHQuYXV0b0Rlc3Ryb3kpKXt2YXIgbj1lLl9yZWFkYWJsZVN0YXRlOyghbnx8bi5hdXRvRGVzdHJveSYmbi5lbmRFbWl0dGVkKSYmZS5kZXN0cm95KCl9cmV0dXJuIHJ9ZnVuY3Rpb24gSChlLHQscil7dC5lbmRpbmc9ITAseihlLHQpLHImJih0LmZpbmlzaGVkP24uZGVmYXVsdC5uZXh0VGljayhyKTplLm9uY2UoImZpbmlzaCIscikpLHQuZW5kZWQ9ITAsZS53cml0YWJsZT0hMX1mdW5jdGlvbiBWKGUsdCxyKXt2YXIgbj1lLmVudHJ5O2ZvcihlLmVudHJ5PW51bGw7bjspe3ZhciBpPW4uY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKHIpLG49bi5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZX1pKDc4Mikoayx1KSxJLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdD1bXTtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmMuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKGUpe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHM9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGssU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hIXMuY2FsbCh0aGlzLGUpfHx0aGlzPT09ayYmZSYmZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIEl9fSkpOnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzfSxrLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Uyh0aGlzLG5ldyBfKX0say5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGUsaT0hMSxvPSFuLm9iamVjdE1vZGUmJmgoZSk7cmV0dXJuIG8mJiFmLmlzQnVmZmVyKGUpJiYoZT1sKGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9dCx0PW51bGwpLG8/dD0iYnVmZmVyIjp0fHwodD1uLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPUEpLG4uZW5kaW5nP1QodGhpcyxyKToob3x8Tih0aGlzLG4sZSxyKSkmJihuLnBlbmRpbmdjYisrLGk9Uih0aGlzLG4sbyxlLHQscikpLGl9LGsucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxrLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl93cml0YWJsZVN0YXRlO2UuY29ya2VkJiYoZS5jb3JrZWQtLSxlLndyaXRpbmd8fGUuY29ya2VkfHxlLmJ1ZmZlclByb2Nlc3Npbmd8fCFlLmJ1ZmZlcmVkUmVxdWVzdHx8VSh0aGlzLGUpKX0say5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IEUoZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksay5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtyKG5ldyBnKCJfd3JpdGUoKSIpKX0say5wcm90b3R5cGUuX3dyaXRldj1udWxsLGsucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT8ocj1lLGU9bnVsbCx0PW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj10LHQ9bnVsbCksbnVsbCE9ZSYmdGhpcy53cml0ZShlLHQpLG4uY29ya2VkJiYobi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuLmVuZGluZ3x8SCh0aGlzLG4sciksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSksay5wcm90b3R5cGUuZGVzdHJveT1wLmRlc3Ryb3ksay5wcm90b3R5cGUuX3VuZGVzdHJveT1wLnVuZGVzdHJveSxrLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9fSw4NzE6ZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgbyxhPXIoNjk4KSxzPVN5bWJvbCgibGFzdFJlc29sdmUiKSxjPVN5bWJvbCgibGFzdFJlamVjdCIpLHU9U3ltYm9sKCJlcnJvciIpLGY9U3ltYm9sKCJlbmRlZCIpLGQ9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLGw9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksaD1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIHAoZSx0KXtyZXR1cm57dmFsdWU6ZSxkb25lOnR9fWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZVtzXTtpZihudWxsIT09dCl7dmFyIHI9ZVtoXS5yZWFkKCk7bnVsbCE9PXImJihlW2RdPW51bGwsZVtzXT1udWxsLGVbY109bnVsbCx0KHAociwhMSkpKX19ZnVuY3Rpb24gbShlKXtuLmRlZmF1bHQubmV4dFRpY2soYixlKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7ZS50aGVuKGZ1bmN0aW9uKCl7dFtmXT9yKHAodm9pZCAwLCEwKSk6dFtsXShyLG4pfSxuKX19dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksdj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobz17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2hdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLHI9dGhpc1t1XTtpZihudWxsIT09cilyZXR1cm4gUHJvbWlzZS5yZWplY3Qocik7aWYodGhpc1tmXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHAodm9pZCAwLCEwKSk7aWYodGhpc1toXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7bi5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uKCl7dFt1XT9yKHRbdV0pOmUocCh2b2lkIDAsITApKX0pfSk7dmFyIGk9dGhpc1tkXTtpZihpKWU9bmV3IFByb21pc2UoeShpLHRoaXMpKTtlbHNle3ZhciBvPXRoaXNbaF0ucmVhZCgpO2lmKG51bGwhPT1vKXJldHVybiBQcm9taXNlLnJlc29sdmUocChvLCExKSk7ZT1uZXcgUHJvbWlzZSh0aGlzW2xdKX1yZXR1cm4gdGhpc1tkXT1lLGV9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksaShvLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtlW2hdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihlKXtlP3IoZSk6dChwKHZvaWQgMCwhMCkpfSl9KX0pLG8pLGcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUodiwoaSh0PXt9LGgse3ZhbHVlOmUsd3JpdGFibGU6ITB9KSxpKHQscyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkodCxjLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaSh0LHUse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKHQsZix7dmFsdWU6ZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksaSh0LGwse3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49cltoXS5yZWFkKCk7bj8ocltkXT1udWxsLHJbc109bnVsbCxyW2NdPW51bGwsZShwKG4sITEpKSk6KHJbc109ZSxyW2NdPXQpfSx3cml0YWJsZTohMH0pLHQpKTtyZXR1cm4gcltkXT1udWxsLGEoZSxmdW5jdGlvbihlKXtpZihlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09ZS5jb2RlKXt2YXIgdD1yW2NdO251bGwhPT10JiYocltkXT1udWxsLHJbc109bnVsbCxyW2NdPW51bGwsdChlKSksclt1XT1lO3JldHVybn12YXIgbj1yW3NdO251bGwhPT1uJiYocltkXT1udWxsLHJbc109bnVsbCxyW2NdPW51bGwsbihwKHZvaWQgMCwhMCkpKSxyW2ZdPSEwfSksZS5vbigicmVhZGFibGUiLG0uYmluZChudWxsLHIpKSxyfX0sMzc5OmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/bihPYmplY3QociksITApLmZvckVhY2goZnVuY3Rpb24odCl7byhlLHQsclt0XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpuKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBhKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLGV9dmFyIHU9cigzMDApLkJ1ZmZlcixmPXIoODM3KS5pbnNwZWN0LGQ9ZiYmZi5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBsKGUsdCxyKXt1LnByb3RvdHlwZS5jb3B5LmNhbGwoZSx0LHIpfWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXthKHRoaXMsZSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gYyhlLFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD10OnRoaXMuaGVhZD10LHRoaXMudGFpbD10LCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9dCksdGhpcy5oZWFkPXQsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHQ9dGhpcy5oZWFkLHI9IiIrdC5kYXRhO3Q9dC5uZXh0OylyKz1lK3QuZGF0YTtyZXR1cm4gcn19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO2Zvcih2YXIgdD11LmFsbG9jVW5zYWZlKGU+Pj4wKSxyPXRoaXMuaGVhZCxuPTA7cjspbChyLmRhdGEsdCxuKSxuKz1yLmRhdGEubGVuZ3RoLHI9ci5uZXh0O3JldHVybiB0fX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHI9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlKSk6cj1lPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTp0P3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSkscn19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVhZCxyPTEsbj10LmRhdGE7Zm9yKGUtPW4ubGVuZ3RoO3Q9dC5uZXh0Oyl7dmFyIGk9dC5kYXRhLG89ZT5pLmxlbmd0aD9pLmxlbmd0aDplO2lmKG89PT1pLmxlbmd0aD9uKz1pOm4rPWkuc2xpY2UoMCxlKSwwPT0oZS09bykpe289PT1pLmxlbmd0aD8oKytyLHQubmV4dD90aGlzLmhlYWQ9dC5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD10LHQuZGF0YT1pLnNsaWNlKG8pKTticmVha30rK3J9cmV0dXJuIHRoaXMubGVuZ3RoLT1yLG59fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD11LmFsbG9jVW5zYWZlKGUpLHI9dGhpcy5oZWFkLG49MTtmb3Ioci5kYXRhLmNvcHkodCksZS09ci5kYXRhLmxlbmd0aDtyPXIubmV4dDspe3ZhciBpPXIuZGF0YSxvPWU+aS5sZW5ndGg/aS5sZW5ndGg6ZTtpZihpLmNvcHkodCx0Lmxlbmd0aC1lLDAsbyksMD09KGUtPW8pKXtvPT09aS5sZW5ndGg/KCsrbixyLm5leHQ/dGhpcy5oZWFkPXIubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cixyLmRhdGE9aS5zbGljZShvKSk7YnJlYWt9KytufXJldHVybiB0aGlzLmxlbmd0aC09bix0fX0se2tleTpkLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodGhpcyxpKHt9LHQse2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksZX0oKX0sMjU6ZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXtpKGUsdCkscihlKX1mdW5jdGlvbiByKGUpe2UuX3dyaXRhYmxlU3RhdGUmJiFlLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8KCFlLl9yZWFkYWJsZVN0YXRlfHxlLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZSkmJmUuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBpKGUsdCl7ZS5lbWl0KCJlcnJvciIsdCl9ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKGUsbyl7dmFyIGE9dGhpcyxzPXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkLGM9dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIHN8fGM/bz9vKGUpOmUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbi5kZWZhdWx0Lm5leHRUaWNrKGksdGhpcyxlKSk6bi5kZWZhdWx0Lm5leHRUaWNrKGksdGhpcyxlKSk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGV8fG51bGwsZnVuY3Rpb24oZSl7IW8mJmU/YS5fd3JpdGFibGVTdGF0ZT9hLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9uLmRlZmF1bHQubmV4dFRpY2socixhKTooYS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbi5kZWZhdWx0Lm5leHRUaWNrKHQsYSxlKSk6bi5kZWZhdWx0Lm5leHRUaWNrKHQsYSxlKTpvPyhuLmRlZmF1bHQubmV4dFRpY2socixhKSxvKGUpKTpuLmRlZmF1bHQubmV4dFRpY2socixhKX0pKSx0aGlzfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fcmVhZGFibGVTdGF0ZSxuPWUuX3dyaXRhYmxlU3RhdGU7ciYmci5hdXRvRGVzdHJveXx8biYmbi5hdXRvRGVzdHJveT9lLmRlc3Ryb3kodCk6ZS5lbWl0KCJlcnJvciIsdCl9fX0sNjk4OmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2NDYpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gaShlKXt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighdCl7dD0hMDtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09YXJndW1lbnRzW2ldO2UuYXBwbHkodGhpcyxuKX19fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFib3J0fWZ1bmN0aW9uIHMoZSx0LHIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBzKGUsbnVsbCx0KTt0fHwodD17fSkscj1pKHJ8fG8pO3ZhciBjPXQucmVhZGFibGV8fCExIT09dC5yZWFkYWJsZSYmZS5yZWFkYWJsZSx1PXQud3JpdGFibGV8fCExIT09dC53cml0YWJsZSYmZS53cml0YWJsZSxmPWZ1bmN0aW9uKCl7ZS53cml0YWJsZXx8bCgpfSxkPWUuX3dyaXRhYmxlU3RhdGUmJmUuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsbD1mdW5jdGlvbigpe3U9ITEsZD0hMCxjfHxyLmNhbGwoZSl9LGg9ZS5fcmVhZGFibGVTdGF0ZSYmZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHA9ZnVuY3Rpb24oKXtjPSExLGg9ITAsdXx8ci5jYWxsKGUpfSxiPWZ1bmN0aW9uKHQpe3IuY2FsbChlLHQpfSxtPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGMmJiFoPyhlLl9yZWFkYWJsZVN0YXRlJiZlLl9yZWFkYWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksci5jYWxsKGUsdCkpOnUmJiFkPyhlLl93cml0YWJsZVN0YXRlJiZlLl93cml0YWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksci5jYWxsKGUsdCkpOnZvaWQgMH0seT1mdW5jdGlvbigpe2UucmVxLm9uKCJmaW5pc2giLGwpfTtyZXR1cm4gYShlKT8oZS5vbigiY29tcGxldGUiLGwpLGUub24oImFib3J0IixtKSxlLnJlcT95KCk6ZS5vbigicmVxdWVzdCIseSkpOnUmJiFlLl93cml0YWJsZVN0YXRlJiYoZS5vbigiZW5kIixmKSxlLm9uKCJjbG9zZSIsZikpLGUub24oImVuZCIscCksZS5vbigiZmluaXNoIixsKSwhMSE9PXQuZXJyb3ImJmUub24oImVycm9yIixiKSxlLm9uKCJjbG9zZSIsbSksZnVuY3Rpb24oKXtlLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsbCksZS5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLG0pLGUucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLHkpLGUucmVxJiZlLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixsKSxlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGYpLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixmKSxlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGwpLGUucmVtb3ZlTGlzdGVuZXIoImVuZCIscCksZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGIpLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixtKX19ZS5leHBvcnRzPXN9LDcyNzpmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LHIsbixpLG8sYSl7dHJ5e3ZhciBzPWVbb10oYSksYz1zLnZhbHVlfWNhdGNoKGUpe3IoZSk7cmV0dXJufXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4saSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihpLG8pe3ZhciBhPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe24oYSxpLG8scyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe24oYSxpLG8scyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSl9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP28oT2JqZWN0KHIpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoZSx0LHJbdF0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6byhPYmplY3QocikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCkpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9dmFyIGM9cig2NDYpLnEuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KW49dDtlbHNlIGlmKHQmJnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKW49dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtlbHNlIGlmKHQmJnRbU3ltYm9sLml0ZXJhdG9yXSluPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2Vsc2UgdGhyb3cgbmV3IGMoIml0ZXJhYmxlIixbIkl0ZXJhYmxlIl0sdCk7dmFyIG4sbz1uZXcgZShhKHtvYmplY3RNb2RlOiEwfSxyKSkscz0hMTtmdW5jdGlvbiB1KCl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoKXtyZXR1cm4oZj1pKGZ1bmN0aW9uKigpe3RyeXt2YXIgZT15aWVsZCBuLm5leHQoKSx0PWUudmFsdWU7ZS5kb25lP28ucHVzaChudWxsKTpvLnB1c2goKHlpZWxkIHQpKT91KCk6cz0hMX1jYXRjaChlKXtvLmRlc3Ryb3koZSl9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gby5fcmVhZD1mdW5jdGlvbigpe3N8fChzPSEwLHUoKSl9LG99fSw0NDI6ZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX12YXIgaSxvPXIoNjQ2KS5xLGE9by5FUlJfTUlTU0lOR19BUkdTLHM9by5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBjKGUpe2lmKGUpdGhyb3cgZX1mdW5jdGlvbiB1KGUpe3JldHVybiBlLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuYWJvcnR9ZnVuY3Rpb24gZihlLHQsbyxhKXthPW4oYSk7dmFyIGM9ITE7ZS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Yz0hMH0pLHZvaWQgMD09PWkmJihpPXIoNjk4KSksaShlLHtyZWFkYWJsZTp0LHdyaXRhYmxlOm99LGZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuIGEoZSk7Yz0hMCxhKCl9KTt2YXIgZj0hMTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoIWMmJiFmKXtpZihmPSEwLHUoZSkpcmV0dXJuIGUuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5kZXN0cm95KXJldHVybiBlLmRlc3Ryb3koKTthKHR8fG5ldyBzKCJwaXBlIikpfX19ZnVuY3Rpb24gZChlKXtlKCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlLnBpcGUodCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdP2UucG9wKCk6Y31lLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkodCksbj0wO248dDtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGk9aChyKTtpZihBcnJheS5pc0FycmF5KHJbMF0pJiYocj1yWzBdKSxyLmxlbmd0aDwyKXRocm93IG5ldyBhKCJzdHJlYW1zIik7dmFyIG89ci5tYXAoZnVuY3Rpb24odCxuKXt2YXIgYT1uPHIubGVuZ3RoLTE7cmV0dXJuIGYodCxhLG4+MCxmdW5jdGlvbih0KXtlfHwoZT10KSx0JiZvLmZvckVhY2goZCksYXx8KG8uZm9yRWFjaChkKSxpKGUpKX0pfSk7cmV0dXJuIHIucmVkdWNlKGwpfX0sNzc2OmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2NDYpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybiBudWxsIT1lLmhpZ2hXYXRlck1hcms/ZS5oaWdoV2F0ZXJNYXJrOnQ/ZVtyXTpudWxsfWUuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihlLHQscixvKXt2YXIgYT1pKHQsbyxyKTtpZihudWxsIT1hKXtpZighKGlzRmluaXRlKGEpJiZNYXRoLmZsb29yKGEpPT09YSl8fGE8MCl0aHJvdyBuZXcgbihvP3I6ImhpZ2hXYXRlck1hcmsiLGEpO3JldHVybiBNYXRoLmZsb29yKGEpfXJldHVybiBlLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sNjc4OmZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig3ODEpfSw1NTpmdW5jdGlvbihlLHQscil7dmFyIG49cigzMDApLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gaShlLHQscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjoobyhuLHQpLHQuQnVmZmVyPWEpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkoZSx0LHIpfSxhLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIG49aShlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/bi5maWxsKHQscik6bi5maWxsKHQpOm4uZmlsbCgwKSxufSxhLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fSwxNzM6ZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1pO3ZhciBuPXIoMzYxKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX1yKDc4MikoaSxuKSxpLlJlYWRhYmxlPXIoNzA5KSxpLldyaXRhYmxlPXIoMzM3KSxpLkR1cGxleD1yKDQwMyksaS5UcmFuc2Zvcm09cigxNzApLGkuUGFzc1Rocm91Z2g9cig4ODkpLGkuZmluaXNoZWQ9cig2OTgpLGkucGlwZWxpbmU9cig0NDIpLGkuU3RyZWFtPWksaS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7ZnVuY3Rpb24gaSh0KXtlLndyaXRhYmxlJiYhMT09PWUud3JpdGUodCkmJnIucGF1c2UmJnIucGF1c2UoKX1mdW5jdGlvbiBvKCl7ci5yZWFkYWJsZSYmci5yZXN1bWUmJnIucmVzdW1lKCl9ci5vbigiZGF0YSIsaSksZS5vbigiZHJhaW4iLG8pLGUuX2lzU3RkaW98fHQmJiExPT09dC5lbmR8fChyLm9uKCJlbmQiLHMpLHIub24oImNsb3NlIixjKSk7dmFyIGE9ITE7ZnVuY3Rpb24gcygpe2F8fChhPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGMoKXthfHwoYT0hMCwiZnVuY3Rpb24iPT10eXBlb2YgZS5kZXN0cm95JiZlLmRlc3Ryb3koKSl9ZnVuY3Rpb24gdShlKXtpZihmKCksMD09PW4ubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IGV9ZnVuY3Rpb24gZigpe3IucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGkpLGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixvKSxyLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHMpLHIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdSksZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHUpLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsZiksci5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGYpLGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixmKX1yZXR1cm4gci5vbigiZXJyb3IiLHUpLGUub24oImVycm9yIix1KSxyLm9uKCJlbmQiLGYpLHIub24oImNsb3NlIixmKSxlLm9uKCJjbG9zZSIsZiksZS5lbWl0KCJwaXBlIixyKSxlfX0sNzA0OmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSkuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbihlKXtzd2l0Y2goKGU9IiIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBvKGUpe3ZhciB0O2lmKCFlKXJldHVybiJ1dGY4Ijtmb3IoOzspc3dpdGNoKGUpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSx0PSEwfX1mdW5jdGlvbiBhKGUpe3ZhciB0PW8oZSk7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYobi5pc0VuY29kaW5nPT09aXx8IWkoZSkpKXRocm93IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3JldHVybiB0fHxlfWZ1bmN0aW9uIHMoZSl7dmFyIHQ7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9YShlKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1wLHRoaXMuZW5kPWIsdD00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1kLHQ9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PW0sdGhpcy5lbmQ9eSx0PTM7YnJlYWs7ZGVmYXVsdDp0aGlzLndyaXRlPWcsdGhpcy5lbmQ9djtyZXR1cm59dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKHQpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU8PTEyNz8wOmU+PjU9PTY/MjplPj40PT0xND8zOmU+PjM9PTMwPzQ6ZT4+Nj09Mj8tMTotMn1mdW5jdGlvbiB1KGUsdCxyKXt2YXIgbj10Lmxlbmd0aC0xO2lmKG48cilyZXR1cm4gMDt2YXIgaT1jKHRbbl0pO3JldHVybiBpPj0wPyhpPjAmJihlLmxhc3ROZWVkPWktMSksaSk6LS1uPHJ8fC0yPT09aT8wOihpPWModFtuXSkpPj0wPyhpPjAmJihlLmxhc3ROZWVkPWktMiksaSk6LS1uPHJ8fC0yPT09aT8wOihpPWModFtuXSkpPj0wPyhpPjAmJigyPT09aT9pPTA6ZS5sYXN0TmVlZD1pLTMpLGkpOjB9ZnVuY3Rpb24gZihlLHQscil7aWYoKDE5MiZ0WzBdKSE9MTI4KXJldHVybiBlLmxhc3ROZWVkPTAsIu+/vSI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigoMTkyJnRbMV0pIT0xMjgpcmV0dXJuIGUubGFzdE5lZWQ9MSwi77+9IjtpZihlLmxhc3ROZWVkPjImJnQubGVuZ3RoPjImJigxOTImdFsyXSkhPTEyOClyZXR1cm4gZS5sYXN0TmVlZD0yLCLvv70ifX1mdW5jdGlvbiBkKGUpe3ZhciB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mKHRoaXMsZSx0KTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoPyhlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTp2b2lkKGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGgpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj11KHRoaXMsZSx0KTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gZS50b1N0cmluZygidXRmOCIsdCk7dGhpcy5sYXN0VG90YWw9cjt2YXIgbj1lLmxlbmd0aC0oci10aGlzLmxhc3ROZWVkKTtyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsMCxuKSxlLnRvU3RyaW5nKCJ1dGY4Iix0LG4pfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90KyLvv70iOnR9ZnVuY3Rpb24gcChlLHQpe2lmKChlLmxlbmd0aC10KSUyPT0wKXt2YXIgcj1lLnRvU3RyaW5nKCJ1dGYxNmxlIix0KTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXSxlLnRvU3RyaW5nKCJ1dGYxNmxlIix0LGUubGVuZ3RoLTEpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiB0K3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAscil9cmV0dXJuIHR9ZnVuY3Rpb24gbShlLHQpe3ZhciByPShlLmxlbmd0aC10KSUzO3JldHVybiAwPT09cj9lLnRvU3RyaW5nKCJiYXNlNjQiLHQpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLDE9PT1yP3RoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSksZS50b1N0cmluZygiYmFzZTY0Iix0LGUubGVuZ3RoLXIpKX1mdW5jdGlvbiB5KGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTp0fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGUudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIn10LnM9cyxzLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXt2YXIgdCxyO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm4iIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxyKTp0aGlzLnRleHQoZSxyKTp0fHwiIn0scy5wcm90b3R5cGUuZW5kPWgscy5wcm90b3R5cGUudGV4dD1sLHMucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSw3Njk6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt0cnl7aWYoIWUuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHI9ZS5nLmxvY2FsU3RvcmFnZVt0XTtyZXR1cm4gbnVsbCE9ciYmInRydWUiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9dC5leHBvcnRzPWZ1bmN0aW9uIGUoZSx0KXtpZihyKCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIGU7dmFyIG49ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW4pe2lmKHIoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBFcnJvcih0KTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZSh0KTpjb25zb2xlLndhcm4odCksbj0hMH1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzAwOmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZS5yKDMzMjIpfSwzNjE6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1lLnIoNjkzMTMpfSw3ODE6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1lLnIoNjkzMTMpLkV2ZW50RW1pdHRlcn0sODM3OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZS5yKDI0ODIzKX19LGk9e307ZnVuY3Rpb24gbyhlKXt2YXIgdD1pW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1pW2VdPXtleHBvcnRzOnt9fSxhPSEwO3RyeXtyW2VdKG4sbi5leHBvcnRzLG8pLGE9ITF9ZmluYWxseXthJiZkZWxldGUgaVtlXX1yZXR1cm4gbi5leHBvcnRzfW8uYWI9Ii9ST09ULy5jbGF1ZGUvd29ya3RyZWVzL3plYWxvdXMta2FsYW0vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJlYW0tYnJvd3NlcmlmeS8iLHQuZXhwb3J0cz1vKDE3Myl9KCl9LDgyMzg2LChlLHQscik9Pnt2YXIgbj1lLnIoMzMyMiksaT1uLkJ1ZmZlcjtmdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfWZ1bmN0aW9uIGEoZSx0LHIpe3JldHVybiBpKGUsdCxyKX1pLmZyb20mJmkuYWxsb2MmJmkuYWxsb2NVbnNhZmUmJmkuYWxsb2NVbnNhZmVTbG93P3QuZXhwb3J0cz1uOihvKG4sciksci5CdWZmZXI9YSksbyhpLGEpLGEuZnJvbT1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlLHQscil9LGEuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1pKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygcj9uLmZpbGwodCxyKTpuLmZpbGwodCk6bi5maWxsKDApLG59LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBpKGUpfSxhLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19LDE4MzM1LChlLHQscik9PnsidXNlIHN0cmljdCI7dmFyIG49ZS5yKDgyMzg2KS5CdWZmZXIsaT1uLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKGUpe3N3aXRjaCgoZT0iIitlKSYmZS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIG8oZSl7dmFyIHQ7aWYoIWUpcmV0dXJuInV0ZjgiO2Zvcig7Oylzd2l0Y2goZSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIGU7ZGVmYXVsdDppZih0KXJldHVybjtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9byhlKTtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihuLmlzRW5jb2Rpbmc9PT1pfHwhaShlKSkpdGhyb3cgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7cmV0dXJuIHR8fGV9ZnVuY3Rpb24gcyhlKXt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZz1hKGUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PXAsdGhpcy5lbmQ9Yix0PTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PWQsdD00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9bSx0aGlzLmVuZD15LHQ9MzticmVhaztkZWZhdWx0OnRoaXMud3JpdGU9Zyx0aGlzLmVuZD12O3JldHVybn10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPW4uYWxsb2NVbnNhZmUodCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZTw9MTI3PzA6ZT4+NT09Nj8yOmU+PjQ9PTE0PzM6ZT4+Mz09MzA/NDplPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHUoZSx0LHIpe3ZhciBuPXQubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPWModFtuXSk7cmV0dXJuIGk+PTA/KGk+MCYmKGUubGFzdE5lZWQ9aS0xKSxpKTotLW48cnx8LTI9PT1pPzA6KGk9Yyh0W25dKSk+PTA/KGk+MCYmKGUubGFzdE5lZWQ9aS0yKSxpKTotLW48cnx8LTI9PT1pPzA6KGk9Yyh0W25dKSk+PTA/KGk+MCYmKDI9PT1pP2k9MDplLmxhc3ROZWVkPWktMyksaSk6MH1mdW5jdGlvbiBmKGUsdCxyKXtpZigoMTkyJnRbMF0pIT0xMjgpcmV0dXJuIGUubGFzdE5lZWQ9MCwi77+9IjtpZihlLmxhc3ROZWVkPjEmJnQubGVuZ3RoPjEpe2lmKCgxOTImdFsxXSkhPTEyOClyZXR1cm4gZS5sYXN0TmVlZD0xLCLvv70iO2lmKGUubGFzdE5lZWQ+MiYmdC5sZW5ndGg+MiYmKDE5MiZ0WzJdKSE9MTI4KXJldHVybiBlLmxhc3ROZWVkPTIsIu+/vSJ9fWZ1bmN0aW9uIGQoZSl7dmFyIHQ9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxyPWYodGhpcyxlLHQpO3JldHVybiB2b2lkIDAhPT1yP3I6dGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGg/KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOnZvaWQoZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPXUodGhpcyxlLHQpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iix0KTt0aGlzLmxhc3RUb3RhbD1yO3ZhciBuPWUubGVuZ3RoLShyLXRoaXMubGFzdE5lZWQpO3JldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhciwwLG4pLGUudG9TdHJpbmcoInV0ZjgiLHQsbil9ZnVuY3Rpb24gaChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3QrIu+/vSI6dH1mdW5jdGlvbiBwKGUsdCl7aWYoKGUubGVuZ3RoLXQpJTI9PTApe3ZhciByPWUudG9TdHJpbmcoInV0ZjE2bGUiLHQpO2lmKHIpe3ZhciBuPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKTtpZihuPj01NTI5NiYmbjw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWVbZS5sZW5ndGgtMV0sci5zbGljZSgwLC0xKX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdLGUudG9TdHJpbmcoInV0ZjE2bGUiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciByPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIHQrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxyKX1yZXR1cm4gdH1mdW5jdGlvbiBtKGUsdCl7dmFyIHI9KGUubGVuZ3RoLXQpJTM7cmV0dXJuIDA9PT1yP2UudG9TdHJpbmcoImJhc2U2NCIsdCk6KHRoaXMubGFzdE5lZWQ9My1yLHRoaXMubGFzdFRvdGFsPTMsMT09PXI/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKCJiYXNlNjQiLHQsZS5sZW5ndGgtcikpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiB2KGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIifXIuU3RyaW5nRGVjb2Rlcj1zLHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PSh0PXRoaXMuZmlsbExhc3QoZSkpKXJldHVybiIiO3I9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSByPTA7cmV0dXJuIHI8ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLHIpOnRoaXMudGV4dChlLHIpOnR8fCIifSxzLnByb3RvdHlwZS5lbmQ9aCxzLnByb3RvdHlwZS50ZXh0PWwscy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGgpcmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7ZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aH19LDgxMTExLChfX3R1cmJvcGFja19jb250ZXh0X18sbW9kdWxlLGV4cG9ydHMpPT57IWZ1bmN0aW9uKCl7dmFyIF9fd2VicGFja19tb2R1bGVzX189ezk1MDpmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzKXt2YXIgaW5kZXhPZj1mdW5jdGlvbihlLHQpe2lmKGUuaW5kZXhPZilyZXR1cm4gZS5pbmRleE9mKHQpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl09PT10KXJldHVybiByO3JldHVybiAtMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKGUpO3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH0sZm9yRWFjaD1mdW5jdGlvbihlLHQpe2lmKGUuZm9yRWFjaClyZXR1cm4gZS5mb3JFYWNoKHQpO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQoZVtyXSxyLGUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9KSxmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfX1jYXRjaChlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2VbdF09cn19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KGUpO3RoaXMuY29kZT1lfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO3Quc3R5bGV8fCh0LnN0eWxlPXt9KSx0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIHI9dC5jb250ZW50V2luZG93LG49ci5ldmFsLGk9ci5leGVjU2NyaXB0OyFuJiZpJiYoaS5jYWxsKHIsIm51bGwiKSxuPXIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyhlKSxmdW5jdGlvbih0KXtyW3RdPWVbdF19KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odCl7ZVt0XSYmKHJbdF09ZVt0XSl9KTt2YXIgbz1PYmplY3Rfa2V5cyhyKSxhPW4uY2FsbChyLHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMociksZnVuY3Rpb24odCl7KHQgaW4gZXx8LTE9PT1pbmRleE9mKG8sdCkpJiYoZVt0XT1yW3RdKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih0KXt0IGluIGV8fGRlZmluZVByb3AoZSx0LHJbdF0pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxhfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dD1mdW5jdGlvbihlKXt2YXIgdD1TY3JpcHQuY3JlYXRlQ29udGV4dChlKSxyPXRoaXMucnVuSW5Db250ZXh0KHQpO3JldHVybiBlJiZmb3JFYWNoKE9iamVjdF9rZXlzKHQpLGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pLHJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24oZSl7ZXhwb3J0c1tlXT1TY3JpcHRbZV09ZnVuY3Rpb24odCl7dmFyIHI9U2NyaXB0KHQpO3JldHVybiByW2VdLmFwcGx5KHIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX0pLGV4cG9ydHMuaXNDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV4cG9ydHMuU2NyaXB0KGUpfSxleHBvcnRzLmNyZWF0ZUNvbnRleHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZmb3JFYWNoKE9iamVjdF9rZXlzKGUpLGZ1bmN0aW9uKHIpe3Rbcl09ZVtyXX0pLHR9fX07InUiPnR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fJiYoX19uY2N3cGNrX3JlcXVpcmVfXy5hYj0iL1JPT1QvLmNsYXVkZS93b3JrdHJlZXMvemVhbG91cy1rYWxhbS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3ZtLWJyb3dzZXJpZnkvIik7dmFyIF9fd2VicGFja19leHBvcnRzX189e307X193ZWJwYWNrX21vZHVsZXNfX1s5NTBdKDAsX193ZWJwYWNrX2V4cG9ydHNfXyksbW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfX30oKX0sNDc2MzMsKGUsdCxyKT0+e3ZhciBuPWUuaSgzOTU4NyksaT1lLmkoMzYyMjApOyFmdW5jdGlvbigpe3ZhciByPXs3MTYwOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O24uYmlnbnVtPXIoNzExKSxuLmRlZmluZT1yKDQ5NSkuZGVmaW5lLG4uYmFzZT1yKDg1Myksbi5jb25zdGFudHM9cig3MzM1KSxuLmRlY29kZXJzPXIoNjcwMSksbi5lbmNvZGVycz1yKDM0MTgpfSw0OTU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNzE2MCksaT1yKDM3ODIpO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLmJvZHk9dCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dC5kZWZpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG8oZSx0KX0sby5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PXIoNjE0NCkucnVuSW5UaGlzQ29udGV4dCgiKGZ1bmN0aW9uICIrdGhpcy5uYW1lKyIoZW50aXR5KSB7XG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xufSkiKX1jYXRjaChlKXt0PWZ1bmN0aW9uKGUpe3RoaXMuX2luaXROYW1lZChlKX19cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKHQpe2UuY2FsbCh0aGlzLHQpfSxuZXcgdCh0aGlzKX0sby5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8ImRlciIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShlKXx8KHRoaXMuZGVjb2RlcnNbZV09dGhpcy5fY3JlYXRlTmFtZWQobi5kZWNvZGVyc1tlXSkpLHRoaXMuZGVjb2RlcnNbZV19LG8ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIodCkuZGVjb2RlKGUscil9LG8ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fCJkZXIiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoZSl8fCh0aGlzLmVuY29kZXJzW2VdPXRoaXMuX2NyZWF0ZU5hbWVkKG4uZW5jb2RlcnNbZV0pKSx0aGlzLmVuY29kZXJzW2VdfSxvLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKHQpLmVuY29kZShlLHIpfX0sNjQ4MzpmdW5jdGlvbihlLHQscil7dmFyIG49cigzNzgyKSxpPXIoODUzKS5SZXBvcnRlcixvPXIoNDMwMCkuQnVmZmVyO2Z1bmN0aW9uIGEoZSx0KXsoaS5jYWxsKHRoaXMsdCksby5pc0J1ZmZlcihlKSk/KHRoaXMuYmFzZT1lLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9ZS5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiBzKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBzfHwoZT1uZXcgcyhlLHQpKSx0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsZX0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCEoMDw9ZSYmZTw9MjU1KSlyZXR1cm4gdC5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9ZSx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXRoaXMudmFsdWU9ZSx0aGlzLmxlbmd0aD1vLmJ5dGVMZW5ndGgoZSk7ZWxzZXtpZighby5pc0J1ZmZlcihlKSlyZXR1cm4gdC5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgZSk7dGhpcy52YWx1ZT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RofX1uKGEsaSksdC5DPWEsYS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6aS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sYS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYSh0aGlzLmJhc2UpO3JldHVybiB0Lm9mZnNldD1lLm9mZnNldCx0Lmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1lLm9mZnNldCxpLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxlLnJlcG9ydGVyKSx0fSxhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LGEucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKGV8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sYS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcy5vZmZzZXQrZTw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKHR8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgcj1uZXcgYSh0aGlzLmJhc2UpO3JldHVybiByLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsci5vZmZzZXQ9dGhpcy5vZmZzZXQsci5sZW5ndGg9dGhpcy5vZmZzZXQrZSx0aGlzLm9mZnNldCs9ZSxyfSxhLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShlP2Uub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sdC5SPXMscy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihlLHQpe3JldHVybiBlfHwoZT1uZXcgbyh0aGlzLmxlbmd0aCkpLHR8fCh0PTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Iuam9pbihlLHQpLHQrPXIubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9lW3RdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP2Uud3JpdGUodGhpcy52YWx1ZSx0KTpvLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoZSx0KSx0Kz10aGlzLmxlbmd0aCkpLGV9fSw4NTM6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQ7bi5SZXBvcnRlcj1yKDEyOTMpLmIsbi5EZWNvZGVyQnVmZmVyPXIoNjQ4MykuQyxuLkVuY29kZXJCdWZmZXI9cig2NDgzKS5SLG4uTm9kZT1yKDkzNzQpfSw5Mzc0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDg1MykuUmVwb3J0ZXIsaT1yKDg1MykuRW5jb2RlckJ1ZmZlcixvPXIoODUzKS5EZWNvZGVyQnVmZmVyLGE9cigzNTIzKSxzPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sYz1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHMpLHU9WyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcj17fTt0aGlzLl9iYXNlU3RhdGU9cixyLmVuYz1lLHIucGFyZW50PXR8fG51bGwsci5jaGlsZHJlbj1udWxsLHIudGFnPW51bGwsci5hcmdzPW51bGwsci5yZXZlcnNlQXJncz1udWxsLHIuY2hvaWNlPW51bGwsci5vcHRpb25hbD0hMSxyLmFueT0hMSxyLm9iaj0hMSxyLnVzZT1udWxsLHIudXNlRGVjb2Rlcj1udWxsLHIua2V5PW51bGwsci5kZWZhdWx0PW51bGwsci5leHBsaWNpdD1udWxsLHIuaW1wbGljaXQ9bnVsbCxyLmNvbnRhaW5zPW51bGwsci5wYXJlbnR8fChyLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9ZS5leHBvcnRzPWY7dmFyIGQ9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtmLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSx0PXt9O2QuZm9yRWFjaChmdW5jdGlvbihyKXt0W3JdPWVbcl19KTt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT10LHJ9LGYucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO2MuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzW3RdPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIGUuY2hpbGRyZW4ucHVzaChyKSxyW3RdLmFwcGx5KHIsYXJndW1lbnRzKX19LHRoaXMpfSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7YShudWxsPT09dC5wYXJlbnQpLGUuY2FsbCh0aGlzKSx0LmNoaWxkcmVuPXQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksYS5lcXVhbCh0LmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sZi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLHI9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtlPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEoZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09ci5sZW5ndGgmJihhKG51bGw9PT10LmNoaWxkcmVuKSx0LmNoaWxkcmVuPXIsci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1lLmxlbmd0aCYmKGEobnVsbD09PXQuYXJncyksdC5hcmdzPWUsdC5yZXZlcnNlQXJncz1lLm1hcChmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fGUuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIGU7dmFyIHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKSx0W2Vbcl1dPXJ9KSx0fSkpfSx1LmZvckVhY2goZnVuY3Rpb24oZSl7Zi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihlKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSxzLmZvckVhY2goZnVuY3Rpb24oZSl7Zi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhKG51bGw9PT10LnRhZyksdC50YWc9ZSx0aGlzLl91c2VBcmdzKHIpLHRoaXN9fSksZi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUpe2EoZSk7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBhKG51bGw9PT10LnVzZSksdC51c2U9ZSx0aGlzfSxmLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sZi5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYShudWxsPT09dC5kZWZhdWx0KSx0LmRlZmF1bHQ9ZSx0Lm9wdGlvbmFsPSEwLHRoaXN9LGYucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYShudWxsPT09dC5leHBsaWNpdCYmbnVsbD09PXQuaW1wbGljaXQpLHQuZXhwbGljaXQ9ZSx0aGlzfSxmLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuZXhwbGljaXQmJm51bGw9PT10LmltcGxpY2l0KSx0LmltcGxpY2l0PWUsdGhpc30sZi5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gZS5vYmo9ITAsMCE9PXQubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKHQpLHRoaXN9LGYucHJvdG90eXBlLmtleT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQua2V5KSx0LmtleT1lLHRoaXN9LGYucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LGYucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGEobnVsbD09PXQuY2hvaWNlKSx0LmNob2ljZT1lLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLHRoaXN9LGYucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYShudWxsPT09dC51c2UpLHQuY29udGFpbnM9ZSx0aGlzfSxmLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4ucGFyZW50KXJldHVybiBlLndyYXBSZXN1bHQobi5jaGlsZHJlblswXS5fZGVjb2RlKGUsdCkpO3ZhciBpPW4uZGVmYXVsdCxhPSEwLHM9bnVsbDtpZihudWxsIT09bi5rZXkmJihzPWUuZW50ZXJLZXkobi5rZXkpKSxuLm9wdGlvbmFsKXt2YXIgYz1udWxsO2lmKG51bGwhPT1uLmV4cGxpY2l0P2M9bi5leHBsaWNpdDpudWxsIT09bi5pbXBsaWNpdD9jPW4uaW1wbGljaXQ6bnVsbCE9PW4udGFnJiYoYz1uLnRhZyksbnVsbCE9PWN8fG4uYW55KXtpZihhPXRoaXMuX3BlZWtUYWcoZSxjLG4uYW55KSxlLmlzRXJyb3IoYSkpcmV0dXJuIGF9ZWxzZXt2YXIgdT1lLnNhdmUoKTt0cnl7bnVsbD09PW4uY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMobi50YWcsZSx0KTp0aGlzLl9kZWNvZGVDaG9pY2UoZSx0KSxhPSEwfWNhdGNoKGUpe2E9ITF9ZS5yZXN0b3JlKHUpfX1pZihuLm9iaiYmYSYmKHI9ZS5lbnRlck9iamVjdCgpKSxhKXtpZihudWxsIT09bi5leHBsaWNpdCl7dmFyIGY9dGhpcy5fZGVjb2RlVGFnKGUsbi5leHBsaWNpdCk7aWYoZS5pc0Vycm9yKGYpKXJldHVybiBmO2U9Zn12YXIgZD1lLm9mZnNldDtpZihudWxsPT09bi51c2UmJm51bGw9PT1uLmNob2ljZSl7aWYobi5hbnkpdmFyIHU9ZS5zYXZlKCk7dmFyIGw9dGhpcy5fZGVjb2RlVGFnKGUsbnVsbCE9PW4uaW1wbGljaXQ/bi5pbXBsaWNpdDpuLnRhZyxuLmFueSk7aWYoZS5pc0Vycm9yKGwpKXJldHVybiBsO24uYW55P2k9ZS5yYXcodSk6ZT1sfWlmKHQmJnQudHJhY2smJm51bGwhPT1uLnRhZyYmdC50cmFjayhlLnBhdGgoKSxkLGUubGVuZ3RoLCJ0YWdnZWQiKSx0JiZ0LnRyYWNrJiZudWxsIT09bi50YWcmJnQudHJhY2soZS5wYXRoKCksZS5vZmZzZXQsZS5sZW5ndGgsImNvbnRlbnQiKSxuLmFueXx8KGk9bnVsbD09PW4uY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMobi50YWcsZSx0KTp0aGlzLl9kZWNvZGVDaG9pY2UoZSx0KSksZS5pc0Vycm9yKGkpKXJldHVybiBpO2lmKG4uYW55fHxudWxsIT09bi5jaG9pY2V8fG51bGw9PT1uLmNoaWxkcmVufHxuLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24ocil7ci5fZGVjb2RlKGUsdCl9KSxuLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1uLnRhZ3x8ImJpdHN0ciI9PT1uLnRhZykpe3ZhciBoPW5ldyBvKGkpO2k9dGhpcy5fZ2V0VXNlKG4uY29udGFpbnMsZS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoaCx0KX19cmV0dXJuIG4ub2JqJiZhJiYoaT1lLmxlYXZlT2JqZWN0KHIpKSxudWxsIT09bi5rZXkmJihudWxsIT09aXx8ITA9PT1hKT9lLmxlYXZlS2V5KHMsbi5rZXksaSk6bnVsbCE9PXMmJmUuZXhpdEtleShzKSxpfSxmLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKCJzZXEiPT09ZXx8InNldCI9PT1lKXJldHVybiBudWxsO2lmKCJzZXFvZiI9PT1lfHwic2V0b2YiPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlTGlzdCh0LGUsbi5hcmdzWzBdLHIpO2lmKC9zdHIkLy50ZXN0KGUpKXJldHVybiB0aGlzLl9kZWNvZGVTdHIodCxlLHIpO2lmKCJvYmppZCI9PT1lJiZuLmFyZ3MpcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKHQsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTtpZigib2JqaWQiPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlT2JqaWQodCxudWxsLG51bGwscik7aWYoImdlbnRpbWUiPT09ZXx8InV0Y3RpbWUiPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlVGltZSh0LGUscik7ZWxzZSBpZigibnVsbF8iPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlTnVsbCh0LHIpO2Vsc2UgaWYoImJvb2wiPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlQm9vbCh0LHIpO2Vsc2UgaWYoIm9iakRlc2MiPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlU3RyKHQsZSxyKTtlbHNlIGlmKCJpbnQiPT09ZXx8ImVudW0iPT09ZSlyZXR1cm4gdGhpcy5fZGVjb2RlSW50KHQsbi5hcmdzJiZuLmFyZ3NbMF0scik7cmV0dXJuIG51bGwhPT1uLnVzZT90aGlzLl9nZXRVc2Uobi51c2UsdC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUodCxyKTp0LmVycm9yKCJ1bmtub3duIHRhZzogIitlKX0sZi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gci51c2VEZWNvZGVyPXRoaXMuX3VzZShlLHQpLGEobnVsbD09PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHIuaW1wbGljaXQhPT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuY2xvbmUoKSxyLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1yLmltcGxpY2l0KSxyLnVzZURlY29kZXJ9LGYucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1udWxsLGk9ITE7cmV0dXJuKE9iamVjdC5rZXlzKHIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKG8pe3ZhciBhPWUuc2F2ZSgpLHM9ci5jaG9pY2Vbb107dHJ5e3ZhciBjPXMuX2RlY29kZShlLHQpO2lmKGUuaXNFcnJvcihjKSlyZXR1cm4hMTtuPXt0eXBlOm8sdmFsdWU6Y30saT0hMH1jYXRjaCh0KXtyZXR1cm4gZS5yZXN0b3JlKGEpLCExfXJldHVybiEwfSx0aGlzKSxpKT9uOmUuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxmLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoZSx0aGlzLnJlcG9ydGVyKX0sZi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLmRlZmF1bHR8fG4uZGVmYXVsdCE9PWUpe3ZhciBpPXRoaXMuX2VuY29kZVZhbHVlKGUsdCxyKTtpZih2b2lkIDAhPT1pJiYhdGhpcy5fc2tpcERlZmF1bHQoaSx0LHIpKXJldHVybiBpfX0sZi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxvPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09by5wYXJlbnQpcmV0dXJuIG8uY2hpbGRyZW5bMF0uX2VuY29kZShlLHR8fG5ldyBuKTt2YXIgaT1udWxsO2lmKHRoaXMucmVwb3J0ZXI9dCxvLm9wdGlvbmFsJiZ2b2lkIDA9PT1lKWlmKG51bGw9PT1vLmRlZmF1bHQpcmV0dXJuO2Vsc2UgZT1vLmRlZmF1bHQ7dmFyIGE9bnVsbCxzPSExO2lmKG8uYW55KWk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlKTtlbHNlIGlmKG8uY2hvaWNlKWk9dGhpcy5fZW5jb2RlQ2hvaWNlKGUsdCk7ZWxzZSBpZihvLmNvbnRhaW5zKWE9dGhpcy5fZ2V0VXNlKG8uY29udGFpbnMscikuX2VuY29kZShlLHQpLHM9ITA7ZWxzZSBpZihvLmNoaWxkcmVuKWE9by5jaGlsZHJlbi5tYXAoZnVuY3Rpb24ocil7aWYoIm51bGxfIj09PXIuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHIuX2VuY29kZShudWxsLHQsZSk7aWYobnVsbD09PXIuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIHQuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIG49dC5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIHQuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBpPXIuX2VuY29kZShlW3IuX2Jhc2VTdGF0ZS5rZXldLHQsZSk7cmV0dXJuIHQubGVhdmVLZXkobiksaX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSksYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpO2Vsc2UgaWYoInNlcW9mIj09PW8udGFnfHwic2V0b2YiPT09by50YWcpe2lmKCEoby5hcmdzJiYxPT09by5hcmdzLmxlbmd0aCkpcmV0dXJuIHQuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitvLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgYz10aGlzLmNsb25lKCk7Yy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSxlKS5fZW5jb2RlKHIsdCl9LGMpKX1lbHNlIG51bGwhPT1vLnVzZT9pPXRoaXMuX2dldFVzZShvLnVzZSxyKS5fZW5jb2RlKGUsdCk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKG8udGFnLGUpLHM9ITApO2lmKCFvLmFueSYmbnVsbD09PW8uY2hvaWNlKXt2YXIgdT1udWxsIT09by5pbXBsaWNpdD9vLmltcGxpY2l0Om8udGFnLGY9bnVsbD09PW8uaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT11P251bGw9PT1vLnVzZSYmdC5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PW8udXNlJiYoaT10aGlzLl9lbmNvZGVDb21wb3NpdGUodSxzLGYsYSkpfXJldHVybiBudWxsIT09by5leHBsaWNpdCYmKGk9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG8uZXhwbGljaXQsITEsImNvbnRleHQiLGkpKSxpfSxmLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbZS50eXBlXTtyZXR1cm4gbnx8YSghMSxlLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhyLmNob2ljZSkpKSxuLl9lbmNvZGUoZS52YWx1ZSx0KX0sZi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChlKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHQsZSk7aWYoIm9iamlkIj09PWUmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQodCxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoIm9iamlkIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKHQsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1lfHwidXRjdGltZSI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKHQsZSk7aWYoIm51bGxfIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtlbHNlIGlmKCJpbnQiPT09ZXx8ImVudW0iPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlSW50KHQsci5hcmdzJiZyLnJldmVyc2VBcmdzWzBdKTtlbHNlIGlmKCJib29sIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2wodCk7ZWxzZSBpZigib2JqRGVzYyI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVTdHIodCxlKTtlbHNlIHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrZSl9LGYucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihlKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KGUpfSxmLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihlKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSokLy50ZXN0KGUpfX0sMTI5MzpmdW5jdGlvbihlLHQscil7dmFyIG49cigzNzgyKTtmdW5jdGlvbiBpKGUpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczplfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIG8oZSx0KXt0aGlzLnBhdGg9ZSx0aGlzLnJldGhyb3codCl9dC5iPWksaS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG99LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ZS5vYmoscGF0aExlbjplLnBhdGgubGVuZ3RofX0saS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3Qub2JqPWUub2JqLHQucGF0aD10LnBhdGguc2xpY2UoMCxlLnBhdGhMZW4pfSxpLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goZSl9LGkucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0LnBhdGg9dC5wYXRoLnNsaWNlKDAsZS0xKX0saS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGUpLG51bGwhPT1uLm9iaiYmKG4ub2JqW3RdPXIpfSxpLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGkucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx0PWUub2JqO3JldHVybiBlLm9iaj17fSx0fSxpLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLHI9dC5vYmo7cmV0dXJuIHQub2JqPWUscn0saS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLl9yZXBvcnRlclN0YXRlLG49ZSBpbnN0YW5jZW9mIG87aWYodD1uP2U6bmV3IG8oci5wYXRoLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoZSkrIl0ifSkuam9pbigiIiksZS5tZXNzYWdlfHxlLGUuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyB0O3JldHVybiBufHxyLmVycm9ycy5wdXNoKHQpLHR9LGkucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oZQ== |
| 1 | { |
| 2 | "ActionError": { |
| 3 | "kind": { |
| 4 | "FunctionCallError": { |
| 5 | "MethodResolveError": "MethodNotFound" |
| 6 | } |
| 7 | }, |
| 8 | "index": 0 |
| 9 | } |
| 10 | } |
| 1 | |
| 1 | { |
| 2 | "deposit": "6136615456996800000000" |
| 3 | } |
Empty Result
| 1 | |