f7b192de3be9d52746735931f329130dPCEtLWM0MWYxZldNT2FDTnBoNmxkMFl6Y1N0amhWL1c2dzBTd0FOTXhTUE9uckNQTFlYRkpKRmFuQmVYYkM5T09oWU80V2ZTdmYxNmR5WDFvQUFyWEQyM1gxMXpYaXNiWDVBQjFXZ3Z3ME95ajk2OUFKazJHUmR3K2xoVkJOdGduNHZsckMxWHl2dHJYK25NVFNZa1VwSzBQbWhOTTROSDhzSWxaZlUtLT48IURPQ1RZUEUgSFRNTD4NCjxodG1sPjxoZWFkPg0KCQk8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+DQoJCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsbWluaW11bS1zY2FsZT0xLjAsbWF4aW11bS1zY2FsZT0xLjAsdXNlci1zY2FsYWJsZT1ubyI+DQoJCTxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXRpdGxlIiBjb250ZW50PSJNb2Rvd24iPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJuby1zaXRlYXBwIj4NCgkJPHRpdGxlPuaCqOeahOe9keermeWQjeensCAtIFBvd2VyZWQgYnkg5Y+R6LSnMTAwPC90aXRsZT4NCgkJPGxpbmsgaHJlZj0ibWVkaWEvMjAxOTEyMDgxMTMwMzVlTS5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz4NCgkJPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IuWPkei0pzEwMC3omZrmi5/llYblk4Hoh6rliqjlj5HotKfns7vnu58iIC8+DQoJCTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSLomZrmi5/llYblk4Es6Ieq5Yqo5Y+R6LSnLOWcqOe6v+aUr+S7mCzku5jotLnpmIXor7siIC8+DQoNCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9zdHlsZXMvbGlicy5jc3M/MTYzODAwMzM1MCI+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvc3R5bGVzL3N0eWxlLmNzcz8xNjM4MDAzMzUwIj4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9mb250cy9jc3MvZm9udGF3ZXNvbWUtYWxsLm1pbi5jc3MiPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc3R5bGVzL3N3aXBlci5taW4uY3NzIj4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvc3dpcGVyLm1pbi5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9sYXllci5qcyI+PC9zY3JpcHQ+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3RoZW1lL2RlZmF1bHQvbGF5ZXIuY3NzP3Y9My4zLjAiIGlkPSJsYXl1aWNzcy1sYXllciI+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9ianBsdXMuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvdG1vZGpzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgkNCg0KCTxzY3JpcHQgY2hhcnNldD0iVVRGLTgiIGlkPSJMQV9DT0xMRUNUIiBzcmM9Ii8vc2RrLjUxLmxhL2pzLXNkay1wcm8ubWluLmpzIj48L3NjcmlwdD48c2NyaXB0PkxBLmluaXQoe2lkOiAiSlU1MVJjekgwMWVkYWdvZyIsY2s6ICJKVTUxUmN6SDAxZWRhZ29nIn0pPC9zY3JpcHQ+PC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPg0KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhcmZpeCI+DQoJCTxkaXYgY2xhc3M9ImxvZ28iPg0KCQkJPGEgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKG1lZGlhLzIwMTkxMjAyMjE0NDA5elgucG5nKSIgaHJlZj0iLi8iIHRpdGxlPSLmgqjnmoTnvZHnq5nlkI3np7AiPjwvYT4NCgkJPC9kaXY+DQoJCTx1bCBjbGFzcz0ibmF2LW1haW4iPg0KDQo8ZmgtZnVuY3Rpb24+DQogICAgICAgICAgICAgICAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9tZW51IHdoZXJlIFVfaGlkZT0wIGFuZCBVX2RlbD0wIGFuZCBVX3N1Yj0wIG9yZGVyIGJ5IFVfb3JkZXIsVV9pZCBkZXNjIjsNCiAgICAgICAgICAgICAgICBzW1sNCiAgICAgICAgICAgICAgICAgIGlmKCR0eXBlPT0kcm93WyJVX3R5cGUiXSAmJiAkaWQ9PSRyb3dbIlVfdHlwZWlkIl0pew0KICAgICAgICAgICAgICAgICAgICAkY2xhc3M9Im5hdi1saSBhY3RpdmUiOw0KICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICRjbGFzcz0ibmF2LWxpIG1hcmdpbi1sZWZ0LTAiOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICBpZigkcm93WyJVX3R5cGUiXT09ImxpbmsiKXsNCiAgICAgICAgICAgICAgICAgICAgJGxpbms9JHJvd1siVV9saW5rIl07DQogICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9ibGFuayI7DQogICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJGxpbms9Ij90eXBlPSIuJHJvd1siVV90eXBlIl0uIiZpZD0iLiRyb3dbIlVfdHlwZWlkIl07DQogICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9zZWxmIjsNCiAgICAgICAgICAgICAgICAgIH0NCiRVX2NvdW50PWdldHJzKCJzZWxlY3QgY291bnQoKikgYXMgVV9jb3VudCBmcm9tIHNsX21lbnUgd2hlcmUgVV9kZWw9MCBhbmQgVV9zdWI9Ii4kcm93WyJVX2lkIl0sIlVfY291bnQiKTsNCiAgICAgICAgICAgIGlmKCRVX2NvdW50PjApew0KDQogICAgICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGxpIGNsYXNzPVwibWVnYTIgbWVudS1pdGVtLWhhcy1jaGlsZHJlblwiPjxhICBocmVmPVwiIi4kbGluay4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIiB0aXRsZT1cIiIuJHJvd1siVV90aXRsZSJdLiJcIj4iLiRyb3dbIlVfdGl0bGUiXS4iPC9hPjx1bCBjbGFzcz1cInN1Yi1tZW51XCI+IjsNCg0KICAgICAgICAgICAgICAgICAgICAkc3FsMj0ic2VsZWN0ICogZnJvbSBzbF9tZW51IHdoZXJlIFVfaGlkZT0wIGFuZCBVX2RlbD0wIGFuZCBVX3N1Yj0iLiRyb3dbIlVfaWQiXS4iIG9yZGVyIGJ5IFVfb3JkZXIsVV9pZCBkZXNjIjsNCiAgICAgICAgICAgICAgICAgICAgczJbWw0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIGlmKCRyb3cyWyJVX3R5cGUiXT09ImxpbmsiKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rMj0kcm93MlsiVV9saW5rIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfYmxhbmsiOw0KICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmsyPSI/dHlwZT0iLiRyb3cyWyJVX3R5cGUiXS4iJmlkPSIuJHJvdzJbIlVfdHlwZWlkIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfc2VsZiI7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGxpPjxhIGhyZWY9XCIiLiRsaW5rMi4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIj4iLiRyb3cyWyJVX3RpdGxlIl0uIjwvYT48L2xpPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBdXQ0KDQokYXBpPSRhcGkuIjwvdWw+PC9saT4iOw0KfWVsc2V7DQogICRhcGk9JGFwaS4iPGxpPjxhICBocmVmPVwiIi4kbGluay4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIiB0aXRsZT1cIiIuJHJvd1siVV90aXRsZSJdLiJcIj4iLiRyb3dbIlVfdGl0bGUiXS4iPC9hPjwvbGk+IjsNCn0NCg0KDQogICAgICAgICAgICAgICAgXV0NCg0KICAgICAgICAgICAgICA8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJCQkJCQkJPC91bD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkkKCIubmF2LW1haW4gYSIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmICgkKHRoaXMpWzBdLmhyZWYgPT0gU3RyaW5nKHdpbmRvdy5sb2NhdGlvbikpIHsNCgkJCSQoIi5uYXYtbWFpbiBhIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KCQkJJCh0aGlzKS5hZGRDbGFzcygiYWN0aXZlIik7DQoJCX0NCgl9KTsNCjwvc2NyaXB0Pg0KCQk8dWwgY2xhc3M9Im5hdi1yaWdodCI+DQoJCQk8bGkgY2xhc3M9Im5hdi12aXAiPg0KCQkJCTxhIGhyZWY9Ii4vP3R5cGU9dmlwIj48aSBjbGFzcz0iaWNvbiBpY29uLXZpcC1zIj48L2k+PC9hPg0KCQkJPC9saT4NCgkJCTxsaSBjbGFzcz0ibmF2LXNlYXJjaCI+DQoJCQkJPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ic2VhcmNoLWxvYWRlciIgdGl0bGU9IuaQnOe0oiI+PGkgY2xhc3M9Imljb24gaWNvbi1zZWFyY2giPjwvaT48L2E+DQoJCQk8L2xpPg0KDQogICAgICA8ZmgtZnVuY3Rpb24+DQogICAgICBpZigkX1NFU1NJT05bIk1fbG9naW4iXT09IiIpew0KICAgICAgICAkYXBpPSI8bGkgY2xhc3M9XCJuYXYtbG9naW4gbm9cIj4NCiAgICAgICAgPGEgaHJlZj1cIm1lbWJlci9sb2dpbi5waHA/ZnJvbT0iLnVybGVuY29kZSgiLi4vP3R5cGU9JHR5cGUmaWQ9JGlkIikuIlwiIGNsYXNzPVwic2lnbmluLWxvYTFkZXJcIj48c3Bhbj7nmbvlvZU8L3NwYW4+PC9hPg0KICAgICAgICA8YiBjbGFzcz1cIm5hdi1saW5lXCI+PC9iPg0KICAgICAgICA8YSBocmVmPVwibWVtYmVyL3JlZy5waHA/ZnJvbT0iLnVybGVuY29kZSgiLi4vP3R5cGU9JHR5cGUmaWQ9JGlkIikuIlwiIGNsYXNzPVwic2lnbmluLXIxZWdcIj48c3Bhbj7ms6jlhow8L3NwYW4+PC9hPg0KICAgICAgPC9saT4iOw0KICAgICAgfWVsc2V7DQogICAgICAgICRhcGk9IjxsaSBjbGFzcz1cIm5hdi1sb2dpbiBub1wiPg0KICAgICAgICA8YSBocmVmPVwibWVtYmVyXCIgY2xhc3M9XCJzaWduaW4tbG9hMWRlclwiPjxzcGFuPiIuJF9TRVNTSU9OWyJNX2xvZ2luIl0uIjwvc3Bhbj48L2E+DQogICAgICAgIDxiIGNsYXNzPVwibmF2LWxpbmVcIj48L2I+DQogICAgICAgIDxhIGhyZWY9XCJtZW1iZXIvbG9naW4ucGhwP2FjdGlvbj11bmxvZ2luXCIgY2xhc3M9XCJzaWduaW4tcjFlZ1wiPjxzcGFuPumAgOWHujwvc3Bhbj48L2E+DQogICAgICA8L2xpPiI7DQogICAgICB9DQogICAgICA8L2ZoLWZ1bmN0aW9uPg0KDQoJCQkJCTwvdWw+DQoJPC9kaXY+DQo8L2hlYWRlcj4NCg0KPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXAiPg0KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgIDxkaXYgY2xhc3M9InNlYXJjaC1mb3JtIj4NCiAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgY2xhc3M9InNlYXJjaC1pbnB1dCIgdHlwZT0idGV4dCIgaWQ9Im5hbWVzMSIgcGxhY2Vob2xkZXI9Iui+k+WFpeaQnOe0ouWFs+mUruivjeWbnui9pu+8jOWkmuS4quWFs+mUruivjeeUqOepuuagvOWIhuW8gCI+DQogICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWNsb3NlIj48L2k+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCgkJPGRpdiBjbGFzcz0iYmFubmVyLXNsaWRlciBiZyI+DQoJCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQkJCTxkaXYgY2xhc3M9InNsaWRlci1sZWZ0Ij4NCgkJCQkJCQkJPGRpdiBjbGFzcz0ic3dpcGVyLWNvbnRhaW5lciBzd2lwZXItY29udGFpbmVyLWluaXRpYWxpemVkIHN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCBzd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQiPg0KCQkJCQk8ZGl2IGNsYXNzPSJzd2lwZXItd3JhcHBlciIgc3R5bGU9ImhlaWdodDogMzgwcHg7IHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTg5NXB4LCAwcHgsIDBweCk7IHRyYW5zaXRpb24tZHVyYXRpb246IDBtczsiPg0KDQo8ZmgtZnVuY3Rpb24+DQppZihnZXRycygic2VsZWN0IGNvdW50KFNfaWQpIGFzIFNfY291bnQgZnJvbSBzbF9zbGlkZSB3aGVyZSBTX2RlbD0wIGFuZCBTX21pZD0kZm1pZCIsIlNfY291bnQiKT4wICYmICRmbWlkPjApew0KICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX3NsaWRlIHdoZXJlIFNfZGVsPTAgYW5kIFNfbWlkPSRmbWlkIG9yZGVyIGJ5IFNfb3JkZXIsU19pZCBkZXNjIjsNCn1lbHNlew0KICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX3NsaWRlIHdoZXJlIFNfZGVsPTAgYW5kIFNfbWlkPTAgb3JkZXIgYnkgU19vcmRlcixTX2lkIGRlc2MiOw0KfQ0KICAgICAgICAgICAgICAgIHNbWw0KDQogICAgICAgICRhcGk9JGFwaS4iPGRpdiBjbGFzcz1cInN3aXBlci1zbGlkZSBzd2lwZXItc2xpZGUtcHJldlwiIHN0eWxlPVwid2lkdGg6IDg5NXB4O1wiPg0KCQkJCQkJCTxhIGhyZWY9XCIiLiRyb3dbIlNfbGluayJdLiJcIj4NCgkJCQkJCQkJPGltZyBzcmM9XCIiLnBpYygkcm93WyJTX3BpYyJdKS4iXCI+DQoJCQkJCQkJPC9hPg0KCQkJCQkJPC9kaXY+IjsNCiAgICAgICAgICAgICAgICAgICAgXV0NCg0KICAgICAgICA8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uIHN3aXBlci1wYWdpbmF0aW9uLWNsaWNrYWJsZSBzd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIj48c3BhbiBjbGFzcz0ic3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0IiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJHbyB0byBzbGlkZSAxIj48L3NwYW4+PHNwYW4gY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCBzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJHbyB0byBzbGlkZSAyIj48L3NwYW4+PHNwYW4gY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0iR28gdG8gc2xpZGUgMyI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxzcGFuIGNsYXNzPSJzd2lwZXItbm90aWZpY2F0aW9uIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiPjwvc3Bhbj48L2Rpdj4NCgkJCSAgICAJCQkJPC9kaXY+DQoJCQkJPGRpdiBjbGFzcz0ic2xpZGVyLXJpZ2h0Ij4NCgkJCQkJCQkJCTxkaXYgY2xhc3M9Iml0ZW0iPg0KCQkJCQkJPGEgaHJlZj0iPGZoLXRhZz7lm77niYcxdXJsPC9maC10YWc+IiB0YXJnZXQ9Il9ibGFuayI+DQoJCQkJCQk8aW1nIHNyYz0iPGZoLXRhZz7lm77niYcxPC9maC10YWc+Ij48L2E+DQoJCQkJCTwvZGl2Pg0KDQoJCQkJCTxkaXYgY2xhc3M9Iml0ZW0iPg0KCQkJCQkJPGEgaHJlZj0iPGZoLXRhZz7lm77niYcydXJsPC9maC10YWc+IiB0YXJnZXQ9Il9ibGFuayI+DQoJCQkJCQk8aW1nIHNyYz0iPGZoLXRhZz7lm77niYcyPC9maC10YWc+Ij48L2E+DQoJCQkJCTwvZGl2Pg0KCQkJCQkNCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQoJCQk8ZGl2IGNsYXNzPSJjb250ZW50cyI+DQoJCQkNCgkJCQkJCQk8ZGl2IGNsYXNzPSJtb2NhdCIgaWQ9ImxtbjEiPg0KCQkJCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQkJCQkJPGgyPjxzcGFuPuacgOaWsOWNleevhzxpPk5FVzwvaT48L3NwYW4+PC9oMj4NCgkJCQkJCTxkaXYgY2xhc3M9Imxpc3RzIGNsZWFyZml4Ij4NCgkJCQkJDQo8ZmgtZnVuY3Rpb24+DQogICAgICAJJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIE5fc2g9MSBhbmQgTl9zb3J0PVNfaWQgYW5kIE5fZGVsPTAgIi4kTV9uaW5mby4iICBvcmRlciBieSBOX3RvcCBkZXNjLE5fb3JkZXIsTl9pZCBkZXNjIGxpbWl0IDIxIjsNCiAgICAgICAgICAgICAgICBzW1sNCg0KICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGRpdiBjbGFzcz1cImdyaWRcIiBvbmNsaWNrPVwibG9jYXRpb24uaHJlZj0nP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIidcIj4NCgkJCQkJCQk8ZGl2IGNsYXNzPVwiaW1nXCI+DQoJCQkJCQkJICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPg0KCQkJCSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIiLnBpYygkcm93WyJOX3BpYyJdKS4iXCIgY2xhc3M9XCJ0aHVtYlwiIGFsdD1cIiIuJHJvd1siTl90aXRsZSJdLiJcIiBzdHlsZT1cIndpZHRoOjc1cHggXCI+DQoJCQkJICAgICAgICAgICAgICAgIDwvYT4NCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCQk8aDM+PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPiIuJHJvd1siTl90aXRsZSJdLiI8L2E+PC9oMz4NCgkJCQkgICAgICAgICAgICA8cD48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGl0bGU9XCIiLiRyb3dbIk5fdGl0bGUiXS4iXCI+Ii4kcm93WyJOX3RpdGxlIl0uIjwvYT48L3A+DQoJCQkJCQkJPGRpdiBjbGFzcz1cImdyaWQtbWV0YVwiPg0KCQkJCSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVcIj48aSBjbGFzcz1cImljb24gaWNvbi10aW1lXCI+PC9pPiAiLmRhdGUoIlktbS1kIixzdHJ0b3RpbWUoJHJvd1siTl9kYXRlIl0pKS4iPC9zcGFuPg0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3dbIk5fdmlldyJdLiI8L3NwYW4+CQkJCSAgICANCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJjb21tZW50c1wiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXBvc3RzXCI+PC9pPiDvv6UiLnAoJHJvd1siTl9wcmljZSJdKS4iPC9zcGFuPgkJCQkNCgkJCQkJCQk8L2Rpdj4NCgkJCSAgICAgICAgICAgICAgICA8L2Rpdj4gIjsNCiAgICAgICAgICAgICAgICAgICAgXV0NCiAgICAgIAk8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJCQkJCQ0KCQkJCQkJPGRpdiBjbGFzcz0ibW9yZSI+PGEgaHJlZj0iLi8/dHlwZT1uZXdzIiB0YXJnZXQ9Il9ibGFuayI+5p+l55yL5pu05aSaPC9hPjwvZGl2Pg0KCQkJCQkJPC9kaXY+DQoJCQkJCTwvZGl2Pg0KCTwvZGl2Pg0KCQkJCQkJDQogDQoJCQkJCQkJCQ0KICAgICAgICAgICAgCQkJDQogICAgICAgICAgICAJCQkJPGRpdiBjbGFzcz0iIiBpZD0ibG1uNCI+DQoNCiAgICAgICAgICAgIAkJCQkJPGRpdiBjbGFzcz0ibW9jYXQiPgk8L2Rpdj4NCg0KDQo8ZmgtZnVuY3Rpb24+DQoNCiRzcWwzPSJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfc3ViPTAgYW5kIFNfc2hvdz0xIGFuZCBTX2RlbD0wIG9yZGVyIGJ5IFNfb3JkZXIsU19pZCBkZXNjIjsNCnMzW1sNCiRzcWw9InNlbGVjdCAqIGZyb20gc2xfbnNvcnQgd2hlcmUgU19zdWI9Ii4kcm93M1siU19pZCJdLiIgYW5kIFNfc2hvdz0xIGFuZCBTX2RlbD0wIG9yZGVyIGJ5IFNfb3JkZXIsU19pZCBkZXNjIjsNCnNbWw0KJGFwaT0kYXBpLiI8ZGl2IGNsYXNzPVwibW9jYXRcIj4JDQoJCQkJCTxkaXYgY2xhc3M9XCJjb250YWluZXJcIj4NCgkJCQkJCTxoMj48c3Bhbj4iLiRyb3dbIlNfdGl0bGUiXS4iPC9zcGFuPjwvaDI+DQoJCQkJCQk8ZGl2IGNsYXNzPVwibGlzdHMgY2xlYXJmaXhcIj4iOw0KJHNxbDI9InNlbGVjdCAqIGZyb20gc2xfbmV3cyB3aGVyZSBOX3NvcnQ9Ii4kcm93WyJTX2lkIl0uIiBhbmQgTl9kZWw9MCBvcmRlciBieSBOX29yZGVyLE5faWQgZGVzYyBsaW1pdCAxMiI7DQpzMltbDQokYXBpPSRhcGkuIjxkaXYgY2xhc3M9XCJncmlkXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9Jy4vP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93MlsiTl9pZCJdLiInXCI+DQoJCQkJCQkJPGRpdiBjbGFzcz1cImltZ1wiPg0KCQkJCQkJCSAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aXRsZT1cIiIuJHJvdzJbIk5fdGl0bGUiXS4iXCI+DQoJCQkJICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiIucGljKCRyb3cyWyJOX3BpYyJdKS4iXCIgY2xhc3M9XCJ0aHVtYlwiIGFsdD1cIiIuJHJvdzJbIk5fdGl0bGUiXS4iXCIgc3R5bGU9XCJ3aWR0aDo3NXB4XCI+DQoJCQkJICAgICAgICAgICAgICAgIDwvYT4NCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCQk8aDM+PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiIi4kcm93MlsiTl90aXRsZSJdLiJcIj4iLiRyb3cyWyJOX3RpdGxlIl0uIjwvYT48L2gzPg0KCQkJCSAgICAgICAgICAgIDxwPjxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aXRsZT1cIiIuJHJvdzJbIk5fdGl0bGUiXS4iXCI+Ii4kcm93MlsiTl90aXRsZSJdLiI8L2E+PC9wPg0KCQkJCQkJCTxkaXYgY2xhc3M9XCJncmlkLW1ldGFcIj4NCgkJCQkgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+PGkgY2xhc3M9XCJpY29uIGljb24tdGltZVwiPjwvaT4gIi5kYXRlKCJZLW0tZCIsc3RydG90aW1lKCRyb3cyWyJOX2RhdGUiXSkpLiI8L3NwYW4+DQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwidmlld3NcIj48aSBjbGFzcz1cImljb24gaWNvbi1leWVcIj48L2k+ICIuJHJvdzJbIk5fdmlldyJdLiI8L3NwYW4+CQkJCSAgICANCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJjb21tZW50c1wiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXBvc3RzXCI+PC9pPiDvv6UiLnAoJHJvdzJbIk5fcHJpY2UiXSkuIjwvc3Bhbj4JCQkJDQoJCQkJCQkJPC9kaXY+DQoJCQkgICAgICAgICAgICAgICAgPC9kaXY+IA0KCQkJICAgICAgICAgICAgICAgICI7DQpdXQ0KDQokYXBpPSRhcGkuIjwvZGl2Pg0KCQkJCQkJPGRpdiBjbGFzcz1cIm1vcmVcIj48YSBocmVmPVwiLi8/dHlwZT1uZXdzJmlkPSIuJHJvd1siU19pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj7mn6XnnIvmm7TlpJo8L2E+PC9kaXY+DQoJCQkJICAgIDwvZGl2PgkJDQoJCQkJPC9kaXY+IjsNCl1dDQpdXQ0KPC9maC1mdW5jdGlvbj4NCg0KDQo8L2Rpdj4NCgkJCQkJCQ0KCQkJCQkJPC9kaXY+DQoJCQkJCTwvZGl2Pg0KPHNjcmlwdCBpZD0idHBsX2VtcHR5IiB0eXBlPSJ0ZXh0L2h0bWwiPg0KICAgIDxkaXYgY2xhc3M9ImluZm9pbWciPg0KCSAgICA8aW1nIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9pbWcvbm9kYXRhLnBuZyI+DQoJPC9kaXY+DQo8L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCXZhciB0eXBlID0gIjEiOw0KICAgIGZ1bmN0aW9uIGdldExvZyh0eXBlKSB7DQogICAgICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1pbmRleCZkbz1zaG9wJm09ZXNob3AmYmVpZD0xMCIsIHt0eXBlOnR5cGUsdHlwZXM6MX0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXN1bHQubGlzdC5sZW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICQoJyNjb250YWluZXInKS5odG1sKHRwbCgndHBsX2VtcHR5JykpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlPT0xKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjEnKS5odG1sKHRwbCgndHBsX2RwJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlPT0yKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjEnKS5odG1sKHRwbCgndHBsX3psJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlPT0zKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjEnKS5odG1sKHRwbCgndHBsX2tjJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCS8vJCgnI2xtYjEnKS5odG1sKGpzb24ucmVzdWx0Lm5hbWUpOw0KCQkJLy8kKCcjbG11MScpLmF0dHIoJ2hyZWYnLGpzb24ucmVzdWx0LnVybCk7IA0KICAgICAgICB9LCB0cnVlKTsNCiAgICB9DQogICAgZ2V0TG9nKHR5cGUpOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCgl2YXIgdHlwZTIgPSAiMSI7DQogICAgZnVuY3Rpb24gZ2V0TG9nMih0eXBlMikgew0KICAgICAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9aW5kZXgmZG89c2hvcCZtPWVzaG9wJmJlaWQ9MTAiLCB7dHlwZTp0eXBlMix0eXBlczoyfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlc3VsdC5saXN0Lmxlbmd0aCA8PSAwKSB7DQogICAgICAgICAgICAgICAgJCgnI2NvbnRhaW5lcicpLmh0bWwodHBsKCd0cGxfZW1wdHknKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGUyPT0xKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjInKS5odG1sKHRwbCgndHBsX2RwJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlMj09Mikgew0KICAgICAgICAgICAgICAgICQoJyNsbW4yJykuaHRtbCh0cGwoJ3RwbF96bCcsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTI9PTMpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uMicpLmh0bWwodHBsKCd0cGxfa2MnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LCB0cnVlKTsNCiAgICB9DQogICAgZ2V0TG9nMih0eXBlMik7DQo8L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCXZhciB0eXBlMyA9ICIxIjsNCiAgICBmdW5jdGlvbiBnZXRMb2czKHR5cGUzKSB7DQogICAgICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1pbmRleCZkbz1zaG9wJm09ZXNob3AmYmVpZD0xMCIsIHt0eXBlOnR5cGUzLHR5cGVzOjN9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzdWx0Lmxpc3QubGVuZ3RoIDw9IDApIHsNCiAgICAgICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9lbXB0eScpKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTM9PTEpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uMycpLmh0bWwodHBsKCd0cGxfZHAnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGUzPT0yKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjMnKS5odG1sKHRwbCgndHBsX3psJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlMz09Mykgew0KICAgICAgICAgICAgICAgICQoJyNsbW4zJykuaHRtbCh0cGwoJ3RwbF9rYycsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIHRydWUpOw0KICAgIH0NCiAgICBnZXRMb2czKHR5cGUzKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQoJdmFyIHR5cGU0ID0gIjEiOy8v5qih5Z6LDQogICAgZnVuY3Rpb24gZ2V0TG9nNCh0eXBlNCkgew0KICAgICAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9aW5kZXgmZG89c2hvcCZtPWVzaG9wJmJlaWQ9MTAiLCB7dHlwZTQ6dHlwZTQsdHlwZXM6NH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXN1bHQubGlzdC5sZW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICQoJyNjb250YWluZXInKS5odG1sKHRwbCgndHBsX2VtcHR5JykpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlND09MSkgew0KICAgICAgICAgICAgICAgICQoJyNsbW40JykuaHRtbCh0cGwoJ3RwbF9kcHMnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGU0PT0yKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjQnKS5odG1sKHRwbCgndHBsX3pscycsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTQ9PTMpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uNCcpLmh0bWwodHBsKCd0cGxfa2NzJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgdHJ1ZSk7DQogICAgfQ0KICAgIGdldExvZzQodHlwZTQpOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgdmFyIHN3aXBlciA9IG5ldyBTd2lwZXIoJy5zd2lwZXItY29udGFpbmVyJywgew0KICAgICAgICBzbGlkZXNQZXJWaWV3OiAnMScsDQogICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsDQogICAgICAgIGF1dG9wbGF5OiB7DQogICAgICAgICAgICBkZWxheTogNDAwMCwNCiAgICAgICAgICAgIGRpc2FibGVPbkludGVyYWN0aW9uOiBmYWxzZSwNCiAgICAgICAgfSwNCiAgICAgICAgIHBhZ2luYXRpb246IHsNCiAgICAgICAgICAgIGVsOiAnLnN3aXBlci1wYWdpbmF0aW9uJywNCiAgICAgICAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSwNCiAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSwNCiAgICAgICAgfSwNCiAgICB9KTsNCg0KPC9zY3JpcHQ+DQoNCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi53aWRnZXQtYm90dG9tLWxvZ28gLmZvb3Rlci1sb2dvIGltZ3t3aWR0aDogYXV0b30NCjwvc3R5bGU+DQo8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPg0KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQoJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXRzIj4NCgkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQgd2lkZ2V0LWJvdHRvbSB3aWRnZXQtYm90dG9tLWxvZ28iPg0KCQkJCTxzcGFuIGNsYXNzPSJmb290ZXItbG9nbyBsZWZ0Ij4NCgkJCQkgICAgPGltZyBzcmM9Im1lZGlhLzIwMTkxMTI2MjI0MzUyV2YuanBnIiBhbHQ9IuaCqOeahOe9keermeWQjeensCI+DQoJCQkJCTxwPuW+ruS/oeeJiDwvcD4NCgkJCQk8L3NwYW4+CQkJDQoJCQkgICAgPHNwYW4gY2xhc3M9ImZvb3Rlci1sb2dvIG1vYmlsZSI+DQoNCgkJCSAgICAJPGRpdiAgaWQ9ImJpbGxJbWFnZXgiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246IHRvcDtiYWNrZ3JvdW5kOiAjZmZmO3BhZGRpbmc6IDVweCA1cHggMCA1cHg7d2lkdGg6IDEyMHB4O2hlaWdodDogMTIwcHgiPjwvZGl2Pg0KDQoJCQkJCTxwPuaJi+acuueJiDwvcD4NCgkJCQk8L3NwYW4+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQgd2lkZ2V0LWJvdHRvbSI+DQoJCQkJPGgzPuWFs+S6jjwvaDM+DQoJCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldC1jb250ZW50Ij4NCgkJCQkJPHVsPg0KCQkJCQkJPGZoLWZ1bmN0aW9uPg0KCQkJCQkJCSRzcWw9InNlbGVjdCAqIGZyb20gc2xfdGV4dCB3aGVyZSBUX2RlbD0wIjsNCgkJCQkJCQlzW1sNCgkJCQkJCQkJJGFwaT0kYXBpLiI8bGk+PGEgaHJlZj1cIj90eXBlPXRleHQmaWQ9Ii4kcm93WyJUX2lkIl0uIlwiPiIuJHJvd1siVF90aXRsZSJdLiI8L2E+PC9saT4iOw0KCQkJCQkJCV1dDQoJCQkJCQk8L2ZoLWZ1bmN0aW9uPg0KDQoJCQkJCQkJCQkJPC91bD4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldCB3aWRnZXQtYm90dG9tIj4NCgkJCQk8aDM+5YiG57G7PC9oMz4NCgkJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0LWNvbnRlbnQiPg0KCQkJCQk8dWw+DQoJCQkJCQk8ZmgtZnVuY3Rpb24+DQoJCQkJCQkJJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uc29ydCB3aGVyZSBTX3N1Yj0wIGFuZCBTX2RlbD0wIG9yZGVyIGJ5IFNfb3JkZXIsU19pZCBkZXNjIjsNCgkJCQkJCQlzW1sNCgkJCQkJCQkJJGFwaT0kYXBpLiI8bGk+PGEgaHJlZj1cIj90eXBlPW5ld3MmaWQ9Ii4kcm93WyJTX2lkIl0uIlwiPiIuJHJvd1siU190aXRsZSJdLiI8L2E+PC9saT4iOw0KCQkJCQkJCV1dDQoJCQkJCQk8L2ZoLWZ1bmN0aW9uPg0KDQoJCQkJCQkJCQkJPC91bD4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldCB3aWRnZXQtYm90dG9tIHdpZGdldC1ib3R0b20tc2VhcmNoIj4NCgkJCQk8aDM+5pCc57SiPC9oMz4NCgkJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0LWNvbnRlbnQiPg0KCQkJCQk8ZGl2IGNsYXNzPSJzZWFyY2hmb3JtIGNsZWFyZml4Ij4NCgkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmFtZXMiIHBsYWNlaG9sZGVyPSLovpPlhaXlhbPplK7or43vvIzlpJrkuKrlhbPplK7or43nlKjnqbrmoLzliIblvIAiPg0KCQkJCQkJPGJ1dHRvbiBpZD0ic2VhcmNoIiB0eXBlPSJzdWJtaXQiPjxpIGNsYXNzPSJpY29uIGljb24tc2VhcmNoIj48L2k+PC9idXR0b24+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8cD7lj5HotKcxMDAt6Jma5ouf5ZWG5ZOB6Ieq5Yqo5Y+R6LSn57O757ufPC9wPg0KCQkJCTwvZGl2Pg0KCQkJPC9kaXY+DQoJCTwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJmb290ZXItbGlua3MiPg0KCQkJPHVsPg0KCQkJCTxsaT7lj4vmg4Xpk77mjqXvvJo8L2xpPg0KCQkJCTxmaC1mdW5jdGlvbj4NCiAgICAgICAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9saW5rIHdoZXJlIExfZGVsPTAgb3JkZXIgYnkgTF9pZCBkZXNjIjsNCiAgICAgICAgc1tbJGFwaT0kYXBpLiI8bGk+PGEgaHJlZj1cIiIuJHJvd1siTF9saW5rIl0uIlwiIHRhcmdldD1cIl9ibGFua1wiPiIuJHJvd1siTF90aXRsZSJdLiI8L2E+PC9saT4iO11dDQogICAgICAgIDwvZmgtZnVuY3Rpb24+DQoJCQkJCQkJPC91bD4NCgkJPC9kaXY+DQoJCTxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCDCqSAyMDE0LTIwMTcg5reE5Y2a6Zeq54G1572R57uc56eR5oqA5pyJ6ZmQ5YWs5Y+4IOeJiOadg+aJgOaciSA8YSBocmVmPSJodHRwczovL2JlaWFuLm1paXQuZ292LmNuLyIgdGFyZ2V0PSJfYmxhbmsiPumygUlDUOWkhzE1MDE1MTM35Y+3LTIgPC9hPjwvcD4NCgk8L2Rpdj4NCjwvZm9vdGVyPg0KPGRpdiBjbGFzcz0icm9sbGJhciI+DQoJPHVsPg0KCQk8bGkgY2xhc3M9InZpcC1saSI+DQoJCSAgICA8YSBocmVmPSJtZW1iZXIvdmlwLnBocCI+PGkgY2xhc3M9Imljb24gaWNvbi1jcm93bi1zIj48L2k+PC9hPg0KCQkJPGg2PuWNh+e6p1ZJUDxpPjwvaT48L2g2Pg0KCQk8L2xpPg0KCQk8bGkgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImRheS1jaGVja2luIj48aSBjbGFzcz0iaWNvbiBpY29uLWNhbGVuZGFyIj48L2k+PC9hPg0KCQkJPGg2Puavj+aXpeetvuWIsDxpPjwvaT48L2g2Pg0KCQk8L2xpPg0KCQk8bGkgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uIGljb24tcXEiPjwvaT48L2E+DQoJCQk8aDY+6IGU57O7UVE8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpPg0KCQkgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ia2VmdV93ZWl4aW4iPjxpIGNsYXNzPSJpY29uIGljb24td2VpeGluIj48L2k+DQoJCQkgICAgPGltZyBzcmM9Im1lZGlhLzIwMTkxMTI2MjI0MzUyV2YuanBnIj4NCgkJCTwvYT4NCgkJPC9saT4NCg0KCQk8bGkgY2xhc3M9InRvdG9wLWxpIiBzdHlsZT0iZGlzcGxheTogbGlzdC1pdGVtOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJ0b3RvcCI+PGkgY2xhc3M9Imljb24gaWNvbi1hcnJvdy11cCI+PC9pPjwvYT4NCgkJCTxoNj7ov5Tlm57pobbpg6g8aT48L2k+PC9oNj4NCgkJPC9saT4NCgk8L3VsPg0KPC9kaXY+DQoJCQ0KPGRpdiBjbGFzcz0ic2hhcmVzIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS1iZyI+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibW9iaWxlLXNoYXJlLXdyYXAiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItY29udGFpbmVyIiBpZD0icm90YXRlLXN3aXBlciI+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci13cmFwcGVyIiBpZD0icG9zdGVyIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1zbGlkZSByb3RhdGUtc2xpZGUiPg0KCSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj4NCgkJCQkgICAgPGRpdiBjbGFzcz0iZm9vdGVycyI+5YiG5Lqr5rW35oql5q2j5Zyo55Sf5oiQ5LitLi4uPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL2ltZy9zY3ouZ2lmIj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLXBhZ2luYXRpb24iIGlkPSJyb3RhdGUtcGFnaW5hdGlvbiI+PC9kaXY+DQoJCTxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tbmV4dCI+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tcHJldiI+PC9kaXY+DQogICAgICAgIDwvZGl2PgkNCiAgICAgICAgPGRpdiBjbGFzcz0ibW9iaWxlLXNoYXJlLWNsb3NlIj7DlzwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQoJDQoNCjxzY3JpcHQgc3JjPSJqcy9xcmNvZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgkJDQoNCgkkKCcuc2hhcmUnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD11dGlsaXR5JmRvPXNoYXJlJm9wPXR3byZiZWlkPTEwIiwge3R5cGU6JzEnLGlkOicnfSwgZnVuY3Rpb24gKHNqc29uKSB7DQoJCSAgICBpZihzanNvbi5zdGF0dXM9PTEpew0KCQkJCSQoJyNwb3N0ZXInKS5odG1sKHRwbCgndHBsX3Bvc3Rlcicsc2pzb24ucmVzdWx0KSk7DQoJCQkJdmFyIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoJy5memxqJyk7DQogICAgICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24oZSkgew0KCQkgICAgICAgICAgICBsYXllci5tc2coJ+mTvuaOpeWkjeWItuaIkOWKnycpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcjcm90YXRlLXN3aXBlcicsIHsNCiAgICAJICAgICAgICAgICAgcGFnaW5hdGlvbjogew0KICAgIAkJICAgICAgICAgICAgZWw6ICcjcm90YXRlLXBhZ2luYXRpb24nLA0KCQkJCQkJdHlwZTogJ2ZyYWN0aW9uJywNCiAgICAJICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlci1idXR0b24tbmV4dCcsDQogICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JywNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAJICAgICAgICAgICAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLA0KICAgIAkgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLA0KICAgIAkgICAgICAgICAgICBvbjogew0KICAgIAkJICAgICAgICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uKCkgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24oMCkudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKSArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQogICAgCQkgICAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgcm90ID0gMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyk7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKHRyYW5zaXRpb24pLnRyYW5zZm9ybSgicm90YXRlWigiICsgcm90ICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCg0KICAgIAkgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIH0pOwkNCgkgICAgICAgIH0NCgkJCWlmKHNqc29uLnN0YXR1cz09MCl7DQoJCQkJJCgnI3Bvc3RlcicpLmh0bWwodHBsKCd0cGxfZW1wdHlzJyxzanNvbi5yZXN1bHQpKTsNCgkJCQl2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgnLmZ6bGonKTsNCiAgICAgICAgICAgICAgICBjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbihlKSB7DQoJCSAgICAgICAgICAgIGxheWVyLm1zZygn6ZO+5o6l5aSN5Yi25oiQ5YqfJyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgdmFyIHN3aXBlciA9IG5ldyBTd2lwZXIoJyNyb3RhdGUtc3dpcGVyJywgew0KICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiB7DQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWw6ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JywNCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJy5zd2lwZXItYnV0dG9uLXByZXYnLA0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgIAkgICAgICAgICAgICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsDQogICAgCSAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsDQogICAgCSAgICAgICAgICAgIG9uOiB7DQogICAgCQkgICAgICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24oKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgdGhpcy5zbGlkZXMuZXEoaSkuZmluZCgiLmJsb2NrIikudHJhbnNpdGlvbigwKS50cmFuc2Zvcm0oInJvdGF0ZVooIiArIDEzICogTWF0aC5hYnModGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MpICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCiAgICAJCSAgICAgICAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHsNCiAgICAJCQkgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuc2xpZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgCQkJCSAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyA8PSAwKSB7DQogICAgCQkJCQkgICAgICAgICAgICByb3QgPSAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKTsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24odHJhbnNpdGlvbikudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyByb3QgKyAiZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKSIpDQogICAgCQkJCSAgICAgICAgICAgIH0NCiAgICAJCQkgICAgICAgICAgICB9DQogICAgCQkgICAgICAgICAgICB9LA0KDQogICAgCSAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgfSk7CQ0KCSAgICAgICAgfQ0KCSAgICB9LHRydWUpOw0KCQkkKCIuc2hhcmVzIikuc2hvdygpOw0KCX0pOw0KCQ0KICAgICQoJy5tb2JpbGUtc2hhcmUtY2xvc2UnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCSQoIi5zaGFyZXMiKS5oaWRlKCk7DQoJfSk7CQ0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgJCgiI25hbWVzIiwpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24oZSkgew0KICAgICAgICB2YXIga2V5Y29kZSA9IGUua2V5Q29kZTsNCiAgICAgICAgaWYoa2V5Y29kZT09JzEzJykgeyAgDQogICAgICAgICAgICAkKCcjc2VhcmNoJykuY2xpY2soKTsgICAgIA0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgiI25hbWVzMSIpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24oZSkgew0KICAgICAgICB2YXIga2V5Y29kZSA9IGUua2V5Q29kZTsNCgkJdmFyIHNlYXJjaGtleSA9ICQudHJpbSgkKCIjbmFtZXMxIikudmFsKCkpOw0KICAgICAgICBpZihrZXljb2RlPT0nMTMnKSB7ICANCiAgICAgICAgICAgIGlmKHNlYXJjaGtleSA9PSAnJyl7CQ0KCQkJICAgIGxheWVyLm1zZygn6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NJyk7DQoJCSAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICI/dHlwZT1zZWFyY2gma2V5d29yZD0iK3NlYXJjaGtleTsNCgkJICAgIH0gICAgIA0KICAgICAgICB9DQogICAgfSk7CQ0KCSQoIiNzZWFyY2giKS5jbGljayhmdW5jdGlvbigpewkJDQoJCXZhciBzZWFyY2hrZXkgPSAkLnRyaW0oJCgiI25hbWVzIikudmFsKCkpOw0KCQlpZihzZWFyY2hrZXkgPT0gJycpewkNCgkJCWxheWVyLm1zZygn6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NJyk7DQoJCX1lbHNlew0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiP3R5cGU9c2VhcmNoJmtleXdvcmQ9IitzZWFyY2hrZXk7DQoJCX0NCgl9KTsNCgkNCgkkKCIubmF2LXNlYXJjaCIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCSQoIi5zZWFyY2gtd3JhcCIpLmFkZENsYXNzKCdzaG93Jyk7DQoJfSk7CQ0KCSQoIi5zZWFyY2gtZm9ybSBpIikuY2xpY2soZnVuY3Rpb24oKXsNCgkJJCgiLnNlYXJjaC13cmFwIikucmVtb3ZlQ2xhc3MoJ3Nob3cnKTsNCgl9KTsNCg0KCSQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7DQoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA+IDE1MCA/IGpRdWVyeSgnLnRvdG9wLWxpJykuc2hvdygpIDogalF1ZXJ5KCcudG90b3AtbGknKS5oaWRlKCk7DQoJfSk7DQoJJCgiLnRvdG9wIikuY2xpY2soZnVuY3Rpb24oKXsNCgkJd2luZG93LnNjcm9sbFRvKDAsMCk7DQoJfSk7DQoNCgl2YXIgcXJjb2RleCA9IG5ldyBRUkNvZGUoJ2JpbGxJbWFnZXgnLCB7d2lkdGg6IDExMCxoZWlnaHQ6IDExMCxjb2xvckRhcms6ICcjMDAwMDAwJyxjb2xvckxpZ2h0OiAnI2ZmZmZmZicsY29ycmVjdExldmVsOiBRUkNvZGUuQ29ycmVjdExldmVsLkh9KTsNCnFyY29kZXgubWFrZUNvZGUoIjxmaC1mdW5jdGlvbj4kYXBpPSRhcGkuZ2V0aHR0cCgpLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLic6Jy4kX1NFUlZFUlsnU0VSVkVSX1BPUlQnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTs8L2ZoLWZ1bmN0aW9uPiIpOw0KDQo8L3NjcmlwdD4NCjxhIGhyZWY9J2h0dHA6Ly9mYWh1bzEwMC5jbicgdGFyZ2V0PSdfYmxhbmsnICB0aXRsZT0n5Y+R6LSnMTAwJz48ZGl2IHN0eWxlPSJwb3NpdGlvbjogZml4ZWQ7ei1pbmRleDo5OTk5OTtib3R0b206IDEwcHg7bGVmdDogY2FsYyg1MCUgLSAxMDBweCk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7dGV4dC1hbGlnbjogY2VudGVyO3dpZHRoOiAyMDBweDtoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7Ym9yZGVyLXJhZGl1czogMzBweDtmb250LXNpemU6IDE4cHg7Y29sb3I6ICMzMzMzMzMiPjxpbWcgc3JjPSJodHRwOi8vZmFodW8xMDAuY24vbWVkaWEvMjAyMDEwMDkxMzQxMjBsVS5pY28iIHN0eWxlPSJoZWlnaHQ6IDIwcHg7d2lkdGg6IDIwcHg7bWFyZ2luLXJpZ2h0OiA1cHg7dmVydGljYWwtYWxpZ246IG1pZGRsZTtkaXNwbGF5OmlubGluZSI+5Y+R6LSnMTAwPC9kaXY+PC9hPjwvYm9keT48L2h0bWw+