CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aC1iYXVmb3J1bS1nb29nbGUtbWFwcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imhlcm8taW1hZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2gtYmF1Zm9ydW0tZmlsdGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPSJiYXVmb3J1bVNlYXJjaEZvcm0iIGlkPSJiYXVmb3J1bVNlYXJjaEZvcm0iIGFjdGlvbj0iL2FqYXgvP3NlYXJjaC1iYXVmb3J1bT0xIiBtZXRob2Q9IlBPU1QiIGRhdGEtcGFyc2xleS12YWxpZGF0ZT0iIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icmVxdWVzdC1kYXRhIiBjbGFzcz0iZC1ub25lIiBkYXRhLXppcD0iIiBkYXRhLWNvdW50cnk9IkNIIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1pdGVtcy13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGRyZXNzLXNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYWRkcmVzc1NlYXJjaCIgY2xhc3M9ImZvcm0tbGFiZWwiPkFkcmVzc2U8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGRyZXNzLXNlYXJjaC1wYXJzbGV5LXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InR4X3doYmF1Zm9ydW1fbWFwc19hZGRyZXNzIiBpZD0iYWRkcmVzc1NlYXJjaCIgcGxhY2Vob2xkZXI9IkNvZGUgcG9zdGFsIC4uLiIgY2xhc3M9ImZvcm0tY29udHJvbCIgZGF0YS1wYXJzbGV5LWVycm9ycy1jb250YWluZXI9IiNhZGRyZXNzLXNlYXJjaC1lcnJvci1jb250YWluZXIiIGRhdGEtcGFyc2xleS1jdXN0b20xMDM9IjEiIGRhdGEtcGFyc2xleS1lcnJvci1tZXNzYWdlPSJWZXVpbGxleiBlbnRyZXIgdW4gY29kZSBwb3N0YWwgdmFsaWRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImFkZHJlc3Mtc2VhcmNoLWVycm9yLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvdW50cnktc2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb3VudHJ5U2VhcmNoIiBjbGFzcz0iZm9ybS1sYWJlbCI+UGF5czwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImNvdW50cnlTZWFyY2giIGNsYXNzPSJmb3JtLXNlbGVjdCIgbmFtZT0idHhfd2hiYXVmb3J1bV9tYXBzX2NvdW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iRCI+QWxsZW1hZ25lPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJMIj5MdXhlbWJvdXJnPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJDSCI+bGEgU3Vpc3NlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdlb2xvY2F0aW9uLXNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWNoZWNrLWxhYmVsIiBmb3I9Imdlb2xvY2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXNleiB2b3RyZSBwcm9wcmUgZW1wbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJnZW9sb2NhdGlvbiIgbmFtZT0iZ2VvbG9jYXRpb24iIHZhbHVlPSIxIiBjbGFzcz0iZm9ybS1jaGVjay1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF93aGJhdWZvcnVtX21hcHNfbGF0IiBpZD0ibGF0IiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfd2hiYXVmb3J1bV9tYXBzX2xvbiIgaWQ9ImxvbiIgdmFsdWU9IjAiIC8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJnZW9sb2NhdGlvbi1sb2FkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+TGUgbGlldSBlc3QgZW4gY291cnMgZGUgZMOpdGVybWluYXRpb24uLi48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZ2VvbG9jYXRpb24tZXJyb3IiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5WZXVpbGxleiBhdXRvcmlzZXIgbCdhY2PDqHMgw6Agdm90cmUgZW1wbGFjZW1lbnQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLXNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icmFkaXVzIiBjbGFzcz0iZm9ybS1sYWJlbCI+PHNwYW4gY2xhc3M9InJhZGl1cy1sYWJlbCI+UmF5b246PC9zcGFuPjxzcGFuIGlkPSJyYW5nZVZhbHVlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImttLXRleHQiPmttPC9zcGFuPjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYW5nZSIgbmFtZT0idHhfd2hiYXVmb3J1bV9tYXBzX3JhZGl1cyIgaWQ9InJhZGl1cyIgdmFsdWU9IjAiIG1pbj0iMCIgbWF4PSIxNTAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VibWl0LWJ1dHRvbi13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSJDaGVyY2hlciB1bmUgYWdlbmNlIGNvbnNlaWwiIGFyaWEtbGFiZWw9IkNoZXJjaGVyIHVuZSBhZ2VuY2UgY29uc2VpbCIgY2xhc3M9ImJ0bi1wcmltYXJ5IiBpZD0ic2VhcmNoTG9jYXRpb24iPkNoZXJjaGVyIHVuZSBhZ2VuY2UgY29uc2VpbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibWFwLWFuY2hvciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndoLWNvbnRlbnQtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZ2xlLW1hcHMtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXAtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJtYXAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiYXVmb3Jlbi1hamF4LWxpc3Qtd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iYmF1Zm9yZW5BamF4TGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1pbml0LWluZm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5pdC1pbmZvLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRkYwMDAwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAweiIgLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEwIiByPSIzIiAvPjwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbml0LWluZm8tdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmV1aWxsZXogc2Fpc2lyIHZvdHJlIENQIDxzdHJvbmc+ZXQgbGUgcmF5b24gc291aGFpdMOpPC9zdHJvbmc+IHBvdXIgb2J0ZW5pciB1bmUgbGlzdGUgPHN0cm9uZz5kZXMgYWdlbmNlcyBjb25zZWlsPC9zdHJvbmc+IHByw6hzIGRlIGNoZXogdm91cy4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibm8tcmVzdWx0cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1Y3VuIHLDqXN1bHRhdCB0cm91dsOpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibG9hZGluZy1hbmltYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsb2FkaW5nLWFuaW1hdGlvbiIgdGl0bGU9IldlYmVySGF1cyBMb2dvIExhZGUtQW5pbWF0aW9uIiBhbHQ9IldlYmVySGF1cyBMb2dvIExhZGUtQW5pbWF0aW9uIiBzcmM9Ii90eXBvM2NvbmYvZXh0L3doX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL2dpZl9XZWJlckhhdXMtaWNvbi1sb2FkaW5nLmdpZiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdCBhc3luYyBkZWZlciBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5QUxQY2UxQ1lRdk5SNFdMdFhvZDVGVjFRQ0JaNjl5MkxRJmxpYnJhcmllcz1wbGFjZXMmY2FsbGJhY2s9aW5pdE1hcCZsYW5ndWFnZT1mciI+PC9zY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXJrZXJzID0gW107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9SZXN1bHRzU3RyaW5nID0gJCgnI25vLXJlc3VsdHMnKS5odG1sKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbml0TWFwKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyksIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IHtsYXQ6IDQ4LjYxODY4NTQsIGxuZzogNy44OTA4MDY2fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyTWFya2VycygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbaV0uc2V0TWFwKG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRIdG1sVGVtcGxhdGUoaXRlbSwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhbmdMYWJlbHMgPSAkKCcjbGFuZy1sYWJlbHMnKS5kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUxID0gaXRlbS50ZWFtTmFtZTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUyID0gaXRlbS50ZWFtTmFtZTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUzID0gaXRlbS50ZWFtTmFtZTM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbUNpdHkgPSBpdGVtLnRlYW1DaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlYW1QaG9uZTEgPSBpdGVtLnRlYW1QaG9uZTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbVBob25lSHJlZiA9IGl0ZW0udGVhbVBob25lMS5yZXBsYWNlKC9ccy9nLCcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZWFtWmlwQ29kZSA9IGl0ZW0udGVhbVppcENvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbVN0cmVldCA9IGl0ZW0udGVhbVN0cmVldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3J1bVVpZCA9IGl0ZW0uZm9ydW1VaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ydW1VcmwgPSBpdGVtLmZvcnVtUGFnZVVyaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpY29uID0gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRkYwMDAwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAweiIgLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEwIiByPSIzIiAvPjwvc3ZnPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBpdGVtLmRpc3RhbmNlICsgJyBrbSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2VWaXNpYmlsaXR5Q2xhc3MgPSAnZC1ibG9jayc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmRpc3RhbmNlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VWaXNpYmlsaXR5Q2xhc3MgPSAnZC1ub25lJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sc3RyaW5nID0gJyc7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbHN0cmluZyArPSAnJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImdtLWJhdWZvcnVtLWl0ZW0iPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnbS1iYXVmb3J1bS1pdGVtLWNvbnRlbnQiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0ZWFtLW5hbWUtMSI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcnVtVXJsICE9PSAiIiA/ICc8YSBocmVmPSInICsgZm9ydW1VcmwgKyAnIiBjbGFzcz0iZ20tYmF1Zm9ydW0tbGluayIgdGl0bGU9IicgKyB0ZWFtTmFtZTEgKyAnIj4nICsgdGVhbU5hbWUxICsgJzwvYT4nIDogJycgKyB0ZWFtTmFtZTEgKyAnJykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0idGVhbS1uYW1lLTIiPicgKyB0ZWFtTmFtZTIgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InRlYW0tbmFtZS0zIj4nICsgdGVhbU5hbWUzICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0ZWFtLXN0cmVldCI+JyArIHRlYW1TdHJlZXQgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InRlYW0tYWRkcmVzcyI+JyArIHRlYW1aaXBDb2RlICsgJyAnICsgdGVhbUNpdHkgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InRlYW0tcGhvbmUtY29udGFpbmVyIj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icGhvbmUtbGFiZWwiPlRlbDo8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icGhvbmUtbnVtYmVycyI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhIGhyZWY9InRlbDonICsgdGVhbVBob25lSHJlZiArICciIGNsYXNzPSJnbS1iYXVmb3J1bS1saW5rIiB0aXRsZT0iJyArIHRlYW1QaG9uZTEgKyAnIj4nICsgdGVhbVBob25lMSArICc8L2E+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImdtLWJhdWZvcnVtLWl0ZW0tZGlzdGFuY2UiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkaXN0YW5jZS1sYWJlbCAnICsgZGlzdGFuY2VWaXNpYmlsaXR5Q2xhc3MgKyAnIj4nK2xhbmdMYWJlbHNbImRpc3RhbmNlIl0rJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJkaXN0YW5jZS12YWx1ZSAnICsgZGlzdGFuY2VWaXNpYmlsaXR5Q2xhc3MgKyAnIj4nICsgZGlzdGFuY2UucmVwbGFjZSgiLiIsICIsIikgKyAnPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnbS1iYXVmb3J1bS1pdGVtLWljb24iIGlkPSJiYXVmb3J1bS1pdGVtLScgKyBmb3J1bVVpZCArICciPicgKyBpY29uICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJbmZvV2luZG93SHRtbChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUxID0gaXRlbS50ZWFtTmFtZTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUyID0gaXRlbS50ZWFtTmFtZTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbU5hbWUzID0gaXRlbS50ZWFtTmFtZTM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbUNpdHkgPSBpdGVtLnRlYW1DaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlYW1QaG9uZTEgPSBpdGVtLnRlYW1QaG9uZTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbVBob25lSHJlZiA9IGl0ZW0udGVhbVBob25lMS5yZXBsYWNlKC9ccy9nLCcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZWFtWmlwQ29kZSA9IGl0ZW0udGVhbVppcENvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVhbVN0cmVldCA9IGl0ZW0udGVhbVN0cmVldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3J1bVVybCA9IGl0ZW0uZm9ydW1QYWdlVXJpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmZvV2luZG93SHRtbCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1dpbmRvd0h0bWwgKz0gJzxkaXYgY2xhc3M9ImluZm8td2luZG93LXdyYXBwZXIiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvV2luZG93SHRtbCArPSAnPGRpdiBjbGFzcz0iaW5mby10ZWFtLW5hbWUtMSI+JyArIChmb3J1bVVybCAhPT0gIiIgPyAnPGEgaHJlZj0iJyArIGZvcnVtVXJsICsgJyIgY2xhc3M9ImdtLWJhdWZvcnVtLWxpbmsiIHRpdGxlPSInICsgdGVhbU5hbWUxICsgJyI+JyArIHRlYW1OYW1lMSArICc8L2E+JyA6ICcnICsgdGVhbU5hbWUxICsgJycpICsgJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvV2luZG93SHRtbCArPSAnPGRpdiBjbGFzcz0iaW5mby10ZWFtLW5hbWUtMiI+JyArIHRlYW1OYW1lMiArICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1dpbmRvd0h0bWwgKz0gJzxkaXYgY2xhc3M9ImluZm8tdGVhbS1uYW1lLTMiPicgKyB0ZWFtTmFtZTMgKyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9XaW5kb3dIdG1sICs9ICc8ZGl2IGNsYXNzPSJpbmZvLXRlYW0tc3RyZWV0Ij4nICsgdGVhbVN0cmVldCArICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1dpbmRvd0h0bWwgKz0gJzxkaXYgY2xhc3M9ImluZm8tdGVhbS1hZGRyZXNzIj4nICsgdGVhbVppcENvZGUgKyAnICcgKyB0ZWFtQ2l0eSArICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1dpbmRvd0h0bWwgKz0gJzxkaXYgY2xhc3M9ImluZm8tdGVhbS1waG9uZS1jb250YWluZXIiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvV2luZG93SHRtbCArPSAnPGRpdiBjbGFzcz0iaW5mby1waG9uZS1sYWJlbCI+VGVsOjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvV2luZG93SHRtbCArPSAnPGRpdiBjbGFzcz0iaW5mby1waG9uZS1udW1iZXJzIj48YSBocmVmPSJ0ZWw6JyArIHRlYW1QaG9uZUhyZWYgKyAnIiBjbGFzcz0iZ20tYmF1Zm9ydW0tbGluayIgdGl0bGU9IicgKyB0ZWFtUGhvbmUxICsgJyI+JyArIHRlYW1QaG9uZTEgKyAnPC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvV2luZG93SHRtbCArPSAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9XaW5kb3dIdG1sICs9ICc8L2Rpdj4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvV2luZG93SHRtbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRTZWFyY2goKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJyNiYXVmb3J1bVNlYXJjaEZvcm0nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiYXVmb3JlbkFqYXhMaXN0ID0gJCgnI2JhdWZvcmVuQWpheExpc3QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub1Jlc3VsdHNDb250YWluZXIgPSAkKCcjbm8tcmVzdWx0cycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdWZvcmVuQWpheExpc3QuaHRtbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbG9hZGluZy1hbmltYXRpb24nKS5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tbG9hZCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgtNSwgLTIwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck1hcmtlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQucG9zdChmb3JtLmF0dHIoJ2FjdGlvbicpLCBmb3JtLnNlcmlhbGl6ZSgpLCBmdW5jdGlvbihyZXNwb25zZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VbJ2VtcHR5J10gPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2xvYWRpbmctYW5pbWF0aW9uJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vUmVzdWx0c0NvbnRhaW5lci5jc3MoJ2Rpc3BsYXknLCdmbGV4Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmF1Zm9yZW5BamF4TGlzdC5hcHBlbmQobm9SZXN1bHRzQ29udGFpbmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF1Zm9yZW5BamF4TGlzdC5odG1sKCc8ZGl2IGNsYXNzPSJuby1yZXN1bHRzIj4nICsgbm9SZXN1bHRzU3RyaW5nICsgJzwvZGl2PicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXBCb3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyhyZXNwb25zZSkubGVuZ3RoICE9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vUmVzdWx0c0NvbnRhaW5lci5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2gocmVzcG9uc2UsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0ubGF0LCBpdGVtLmxvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnL3R5cG8zY29uZi9leHQvd2hfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvaWNvbl9tYXAtcGluLXNvbGlkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmZvcnVtVWlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChtYXJrZXIucG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNsb2FkaW5nLWFuaW1hdGlvbicpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXVmb3JlbkFqYXhMaXN0LmFwcGVuZChnZXRIdG1sVGVtcGxhdGUoaXRlbSwgaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmZvV2luZG93Q29udGVudCA9IGdldEluZm9XaW5kb3dIdG1sKGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiYXVGb3J1bUl0ZW0gPSAkKCcjYmF1Zm9ydW0taXRlbS0nICsgaXRlbS5mb3J1bVVpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF1Rm9ydW1JdGVtLmJpbmQoJ2NsaWNrJywgbWFya2VyLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2gobWFya2VycywgZnVuY3Rpb24oaSwgbWFya2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm93aW5kb3cuc2V0Q29udGVudChpbmZvV2luZG93Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm93aW5kb3cub3BlbihtYXAsIG1hcmtlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXBFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcC1hbmNob3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogInN0YXJ0In0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcmtlciwgJ2NsaWNrJywgKGZ1bmN0aW9uKG1hcmtlciwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2gobWFya2VycywgZnVuY3Rpb24oaSwgbWFya2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihudWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm93aW5kb3cuc2V0Q29udGVudChpbmZvV2luZG93Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFwLCBtYXJrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkobWFya2VyLCBpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5maXRCb3VuZHMobWFwQm91bmRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHJlc3BvbnNlKS5sZW5ndGggPT09IDEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXRPcHRpb25zKHsgem9vbTogMTYgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWFyY2hGb3JtID0gJCgnI2JhdWZvcnVtU2VhcmNoRm9ybScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcXVlc3REYXRhID0gJCgnI3JlcXVlc3QtZGF0YScpLmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB6aXBDb2RlID0gcmVxdWVzdERhdGFbJ3ppcCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50cnlTaG9ydENvZGUgPSByZXF1ZXN0RGF0YVsnY291bnRyeSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRyeVNob3J0Q29kZSAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY291bnRyeVNlYXJjaCcpLnZhbChjb3VudHJ5U2hvcnRDb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHppcENvZGUgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2FkZHJlc3NTZWFyY2gnKS52YWwoemlwQ29kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNlYXJjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlYXJjaEluZm9IdG1sID0gJCgnI2JhdWZvcmVuQWpheExpc3QnKS5odG1sKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbignc3VibWl0Jywgc2VhcmNoRm9ybSxmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgemlwQ29kZVN0cmluZyA9ICQoJyNhZGRyZXNzU2VhcmNoJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHppcGNvZGVSZWdleCA9IG5ldyBSZWdFeHAoIl4oWzAtOV17NCw1fSkkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrID0gemlwY29kZVJlZ2V4LnRlc3QoemlwQ29kZVN0cmluZyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6aXBDb2RlU3RyaW5nLmxlbmd0aCA+IDAgJiYgY2hlY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhZGRyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJlc3NTZWFyY2giKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnYWRkcmVzcyc6IGFkZHJlc3N9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2xhdCcpLnZhbChyZXN1bHRzWzBdLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbG9uJykudmFsKHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24ubG5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAiICsgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNlYXJjaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2xhdCcpLnZhbCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2xvbicpLnZhbCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWFyY2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgJyNnZW9sb2NhdGlvbicsZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZGRyZXNzU2VhcmNoJykuYXR0cigicmVhZG9ubHkiLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWxvYWQnKS5jc3MoJ2Rpc3BsYXknLCdmbGV4Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHBvc2l0aW9uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnbGF0TG5nJzogcG9pbnR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXN1bHRzLCBzdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3N0YWxDb2RlID0gcmVzdWx0c1swXS5hZGRyZXNzX2NvbXBvbmVudHMuZmluZChmdW5jdGlvbiAoY29tcG9uZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC50eXBlc1swXSA9PT0gInBvc3RhbF9jb2RlIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50cnlDb2RlID0gcmVzdWx0c1swXS5hZGRyZXNzX2NvbXBvbmVudHMuZmluZChmdW5jdGlvbiAoY29tcG9uZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC50eXBlc1swXSA9PT0gImNvdW50cnkiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291bnRyeVNlbGVjdCA9ICQoJyNjb3VudHJ5U2VhcmNoJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY291bnRyeUNvZGUuc2hvcnRfbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RFJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeVNlbGVjdC52YWwoJ0QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0gnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbCgnQ0gnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTFUnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbCgnTCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbCgnRCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2FkZHJlc3NTZWFyY2giKS52YWwocG9zdGFsQ29kZS5sb25nX25hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWVycm9yJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWxvYWQnKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbGF0JykudmFsKHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbG9uJykudmFsKHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkdlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogIiArIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmZWhsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1lcnJvcicpLmNzcygnZGlzcGxheScsJ2ZsZXgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1sb2FkJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgnI2FkZHJlc3NTZWFyY2gnKS52YWwoJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYWRkcmVzc1NlYXJjaCcpLmF0dHIoInJlYWRvbmx5IiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tZXJyb3InKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2xlYXJNYXJrZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgnI2JhdWZvcmVuQWpheExpc3QnKS5odG1sKHNlYXJjaEluZm9IdG1sKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5wdXRSYW5nZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyYWRpdXMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmdlVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFuZ2VWYWx1ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdFZhbFBlcmNlbnQgPSAoaW5wdXRSYW5nZVNsaWRlci52YWx1ZUFzTnVtYmVyICAtIHBhcnNlSW50KGlucHV0UmFuZ2VTbGlkZXIubWluKSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlSW50KGlucHV0UmFuZ2VTbGlkZXIubWF4KSAtIHBhcnNlSW50KGlucHV0UmFuZ2VTbGlkZXIubWluKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2VTbGlkZXIuc3R5bGUgPSAnYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDAlLCAxMDAlIDAlLCBjb2xvci1zdG9wKCcgKyBpbml0VmFsUGVyY2VudCArICcsICNmZjAwMDApLCBjb2xvci1zdG9wKCcgKyBpbml0VmFsUGVyY2VudCArICcsICNlNWU1ZTMpKTsnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VWYWx1ZS5pbm5lckhUTUwgPSBpbnB1dFJhbmdlU2xpZGVyLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmdlU2xpZGVyLmlubmVySFRNTCA9IGlucHV0UmFuZ2VTbGlkZXIudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2VTbGlkZXIub25pbnB1dCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VWYWx1ZS5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxQZXJjZW50ID0gKGlucHV0UmFuZ2VTbGlkZXIudmFsdWVBc051bWJlciAgLSBwYXJzZUludChpbnB1dFJhbmdlU2xpZGVyLm1pbikpIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyc2VJbnQoaW5wdXRSYW5nZVNsaWRlci5tYXgpIC0gcGFyc2VJbnQoaW5wdXRSYW5nZVNsaWRlci5taW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFuZ2VTbGlkZXIuc3R5bGUgPSAnYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDAlLCAxMDAlIDAlLCBjb2xvci1zdG9wKCcgKyB2YWxQZXJjZW50ICsgJywgI2ZmMDAwMCksIGNvbG9yLXN0b3AoJyArIHZhbFBlcmNlbnQgKyAnLCAjZTVlNWUzKSk7JzsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA=
Mit Klick auf Google Maps willige ich in die Verarbeitung meiner Daten durch Google ein. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.
Aperçu de toutes les agences conseil
Montreux
Agence Suisse Romande
Avenue des Alpes 80 B
1820 Montreux
Tèl:
079 9372180
Vers l’agence conseil
Thun
Zelglistrasse 6
3608 Thun
Tèl:
078 8809001
Vers l’agence conseil
Zentralschweiz
Gartenstrasse 18
3800 Unterseen
Tèl:
033 2215177
Vers l’agence conseil
Arisdorf
Partner von WeberHaus Schweiz
Ringstrasse 78
4422 Arisdorf
Tèl:
061 81130-33
Vers l’agence conseil
Locarno
Home Expo
Bernstrasse Ost Nr. 46
5034 Suhr
Tèl:
062 842 32 32
Vers l’agence conseil
Suhr
Home Expo
Bernstrasse Ost Nr. 46
5034 Suhr
Tèl:
062 842 32 32
Vers l’agence conseil
Kreuzlingen
Müligässli 1
8598 Bottighofen
Tèl:
044 945 27 27
Vers l’agence conseil