分身AI.com × 自分を知るワーク(Session 4)
Session 4: コミュニケーションスタイル (Communication Style)
あなたらしい伝え方を分身AIに移植します。正解はありません。普段どおりの感覚で答えてください。
全8問 / 所要時間: 約8-12分
Q1 / 8
13%
なぜそう思う?(任意)
スキップしました。後からいつでも答え直せます
折り返し地点です
あと4問で分身AIの話し方が完成します。
ここまでの回答はすべて自動保存されています。
Session 4 完了!
0
回答数
0
スキップ数
全体進捗(全48問)
0%
話し方の設定ができました。最後に事業の核心を固めます。
このブラウザに自動保存済みです。次回は同じ端末から続きを再開できます。
CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgcWZzU2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDsKICAgICAgdmFyIHFmc0NvbnRhaW5lciA9IHFmc1NjcmlwdCA/IHFmc1NjcmlwdC5jbG9zZXN0KCcucWYtc291bC1jb250YWluZXInKSA6IG51bGw7CiAgICAgIGlmICghcWZzQ29udGFpbmVyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKCiAgICAgIGZ1bmN0aW9uIHFmT25lKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHFmc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcWZBbGwoc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gcWZzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKiDilIDilIAgUXVlc3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdmFyIFFGX1NPVUxfUVVFU1RJT05TID0gWwogICAgICAgIHsgaWQ6ICdEMScsIHR5cGU6ICdjaG9pY2UnLCBxdWVzdGlvbjogJ+ikh+mbkeOBquWGheWuueOCkuiqrOaYjuOBmeOCi+aZguOAgeOBguOBquOBn+OBruOChOOCiuaWueOBq+i/keOBhOOBruOBr++8nycsIG9wdGlvbnM6IFsn44G+44Ga57WQ6KuW44GL44KJJywgJ+iDjOaZr+OBi+OCiemghuOBqycsICfkvovjgYjoqbHjgafkvJ3jgYjjgosnLCAn5Zuz44KE566H5p2h5pu444GN44Gn5pW055CGJ10sIGJiU2VjdGlvbjogJ1RPTkUnLCBiYkZpZWxkOiAn5Y+j6Kq/44O75paH5L2TJyB9LAogICAgICAgIHsgaWQ6ICdEMicsIHR5cGU6ICdjaG9pY2UnLCBxdWVzdGlvbjogJ+aZruauteOBruODoeODg+OCu+ODvOOCuOaWh+S9k+OBq+acgOOCgui/keOBhOODiOODvOODs+OBr++8nycsIG9wdGlvbnM6IFsn5LiB5a+n44O744OV44Kp44O844Oe44OrJywgJ+imquOBl+OBv+ODu+OCq+OCuOODpeOCouODqycsICfnq6/nmoTjg7vmpa3li5nnmoQnLCAn5piO44KL44GP6YGK44Gz5b+D44GC44KKJ10sIGJiU2VjdGlvbjogJ1RPTkUnLCBiYkZpZWxkOiAn5Y+j6Kq/44O75paH5L2TJyB9LAogICAgICAgIHsgaWQ6ICdEMycsIHR5cGU6ICdzY2FsZScsIHF1ZXN0aW9uOiAn6L+U5L+h6YCf5bqm44Gr5a++44GZ44KL44GT44Gg44KP44KK44KS6YG444KT44Gn44GP44Gg44GV44GE44CCJywgc2NhbGVMYWJlbHM6IFsn44G744G85rCX44Gr44GX44Gq44GEJywgJ+WwkeOBl+awl+OBq+OBmeOCiycsICfmma7pgJonLCAn44GL44Gq44KK5rCX44Gr44GZ44KLJywgJ+acgOWEquWFiOOBp+WNs+i/lOS/oSddLCBiYlNlY3Rpb246ICdUT05FJywgYmJGaWVsZDogJ+WPo+iqv+ODu+aWh+S9kycgfSwKICAgICAgICB7IGlkOiAnRDQnLCB0eXBlOiAnY2hvaWNlJywgcXVlc3Rpb246ICfmhI/opovjgYzjgbbjgaTjgYvjgaPjgZ/mmYLjga7liJ3li5Xjgavov5HjgYTjga7jga/vvJ8nLCBvcHRpb25zOiBbJ+OBvuOBmuebuOaJi+OCkuiBnuOBjycsICfjgZnjgZDoh6rliIbjga7mhI/opovjgpLkvJ3jgYjjgosnLCAn5LiA5pem5oyB44Gh5biw44KLJywgJ+irlueCueaVtOeQhuOBl+OBpuOBi+OCieipseOBmSddLCBiYlNlY3Rpb246ICdUT05FJywgYmJGaWVsZDogJ+WPo+iqv+ODu+aWh+S9kycgfSwKICAgICAgICB7IGlkOiAnRDUnLCB0eXBlOiAnY2hvaWNlJywgcXVlc3Rpb246ICfnm7jmiYvjgavkvJ3jgYjjgovmmYLjgIHmnIDjgoLph43oppbjgZnjgovjgZPjgajjga/vvJ8nLCBvcHRpb25zOiBbJ+ato+eiuuOBlScsICfpgJ/jgZUnLCAn44KP44GL44KK44KE44GZ44GVJywgJ+aEn+aDheOBuOOBrumFjeaFriddLCBiYlNlY3Rpb246ICdUT05FJywgYmJGaWVsZDogJ+WPo+iqv+ODu+aWh+S9kycgfSwKICAgICAgICB7IGlkOiAnRDYnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn5pat44KK44KE5L+u5q2j5L6d6aC844KS5Lyd44GI44KL5pmC44Gu44GC44Gq44Gf44Gu6KiA44GE5pa544KS5pWZ44GI44Gm44GP44Gg44GV44GE44CCJywgcGxhY2Vob2xkZXI6ICflrp/pmpvjgavpgIHjgovjg6Hjg4Pjgrvjg7zjgrjjgpLjgZ3jga7jgb7jgb7mm7jjgYTjgabjgY/jgaDjgZXjgYQuLi4nLCBiYlNlY3Rpb246ICdUT05FJywgYmJGaWVsZDogJ05H44Ov44O844OJK+OCreODqeODvOODleODrOODvOOCuicgfSwKICAgICAgICB7IGlkOiAnRDcnLCB0eXBlOiAnY2hvaWNlJywgcXVlc3Rpb246ICfjgYLjgarjgZ/jga7mgJ3ogIPmlbTnkIbjgavlkIjjgYblh7rlipvlvaLlvI/jga/jganjgozjgafjgZnjgYvvvJ8nLCBvcHRpb25zOiBbJ+euh+adoeabuOOBjScsICfnn63jgYTopoHntIQnLCAn5Lya6Kmx5b2i5byPJywgJ+OCueODhuODg+ODl+aJi+mghiddLCBiYlNlY3Rpb246ICdUT05FJywgYmJGaWVsZDogJ05H44Ov44O844OJK+OCreODqeODvOODleODrOODvOOCuicgfSwKICAgICAgICB7IGlkOiAnRDgnLCB0eXBlOiAnbG9uZ190ZXh0JywgcXVlc3Rpb246ICfliIbouqtBSeOBq+aXpeW4uOOBp+S9v+OBo+OBpuOBu+OBl+OBhOipseOBl+aWueOCkuWFt+S9k+eahOOBq+aVmeOBiOOBpuOBj+OBoOOBleOBhOOAgicsIHBsYWNlaG9sZGVyOiAn6Kqe5bC+44CB5LiA5Lq656ew44CB5pWs6Kqe44Gu5bqm5ZCI44GE44CB5Y+j55mW44Gq44Gp5YW35L2T55qE44GrLi4uJywgYmJTZWN0aW9uOiAnVE9ORScsIGJiRmllbGQ6ICdOR+ODr+ODvOODiSvjgq3jg6njg7zjg5Xjg6zjg7zjgronIH0KICAgICAgXTsKCiAgICAgIHZhciBHUk9XVEhfU1RBR0VTID0gWwogICAgICAgIHsgbWluOiAwLCBtYXg6IDE5LCBuYW1lOiAn44Gf44G+44GUJywgZW1vamk6ICdcdUQ4M0VcdURENUEnIH0sCiAgICAgICAgeyBtaW46IDIwLCBtYXg6IDM5LCBuYW1lOiAn44Gy44Gz5Ymy44KMJywgZW1vamk6ICdcdUQ4M0RcdURDMjMnIH0sCiAgICAgICAgeyBtaW46IDQwLCBtYXg6IDU5LCBuYW1lOiAn44G15YyWJywgZW1vamk6ICdcdUQ4M0RcdURDMjUnIH0sCiAgICAgICAgeyBtaW46IDYwLCBtYXg6IDc5LCBuYW1lOiAn44KI44Gh44KI44Gh5YiG6LqrQUknLCBlbW9qaTogJ1x1RDgzRVx1REQxNicgfSwKICAgICAgICB7IG1pbjogODAsIG1heDogMTAwLCBuYW1lOiAn55u45qOS44Oi44O844OJJywgZW1vamk6ICdcdUQ4M0VcdUREQkUnIH0KICAgICAgXTsKCiAgICAgIHZhciBTSEFMTE9XX1BBVFRFUk5TID0gWwogICAgICAgIC/oh6jmqZ/lv5zlpInjgasvLAogICAgICAgIC/nm7jmiYvjgavlkIjjgo/jgZvjgaYvLAogICAgICAgIC/mma7pgJrjgasvLAogICAgICAgIC/nibnjgavjgarjgYQvLAogICAgICAgIC/jgarjgpPjgajjgarjgY8vLAogICAgICAgIC/jgrHjg7zjgrnjg5DjgqTjgrHjg7zjgrkvLAogICAgICAgIC/mmYLjgajloLTlkIgvLAogICAgICAgIC/kuIHlr6fjgasvCiAgICAgIF07CgogICAgICB2YXIgRklWRV9TRU5TRV9ISU5UID0gJ+OBneOBruiogOiRieOCkuS8neOBiOOBn+aZguOAgeebuOaJi+OBruihqOaDheOBr+OBqeOBhuWkieOCj+OCiuOBvuOBl+OBn+OBi++8nyc7CgogICAgICB2YXIgU0VTU0lPTl9OVU1CRVIgPSA0OwogICAgICB2YXIgU0VTU0lPTl9RVUVTVElPTlMgPSA4OwoKICAgICAgLyog4pSA4pSAIERPTSByZWZzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdmFyIHFmc1NjcmVlbnMgPSB7CiAgICAgICAgd2VsY29tZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJ3ZWxjb21lIl0nKSwKICAgICAgICBxdWl6OiBxZk9uZSgnW2RhdGEtcWYtc291bC1zY3JlZW49InF1aXoiXScpLAogICAgICAgIG1pZHBvaW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1zY3JlZW49Im1pZHBvaW50Il0nKSwKICAgICAgICBjb21wbGV0ZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJjb21wbGV0ZSJdJykKICAgICAgfTsKCiAgICAgIHZhciBxZnNVSSA9IHsKICAgICAgICBzdGFydEJ1dHRvbjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJzdGFydCJdJyksCiAgICAgICAgY291bnRlcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY291bnRlcl0nKSwKICAgICAgICBwZXJjZW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1wZXJjZW50XScpLAogICAgICAgIHByb2dyZXNzQmFyOiBxZk9uZSgnW2RhdGEtcWYtc291bC1wcm9ncmVzc10nKSwKICAgICAgICBxdWVzdGlvbkJveDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcXVlc3Rpb24tYm94XScpLAogICAgICAgIHF1ZXN0aW9uTGFiZWw6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLWxhYmVsXScpLAogICAgICAgIHF1ZXN0aW9uVGV4dDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcXVlc3Rpb24tdGV4dF0nKSwKICAgICAgICBpbnB1dEFyZWE6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWlucHV0LWFyZWFdJyksCiAgICAgICAgcmVqZWN0aW9uOiBxZk9uZSgnW2RhdGEtcWYtc291bC1yZWplY3Rpb25dJyksCiAgICAgICAgcmVqZWN0aW9uTXNnOiBxZk9uZSgnW2RhdGEtcWYtc291bC1yZWplY3Rpb24tbXNnXScpLAogICAgICAgIHJlamVjdGlvbkhpbnQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWhpbnRdJyksCiAgICAgICAgZm9sbG93dXA6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWZvbGxvd3VwXScpLAogICAgICAgIGZvbGxvd3VwSW5wdXQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWZvbGxvd3VwLWlucHV0XScpLAogICAgICAgIG5leHRCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ibmV4dCJdJyksCiAgICAgICAgc2tpcEJ0bjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJza2lwIl0nKSwKICAgICAgICBza2lwTXNnOiBxZk9uZSgnW2RhdGEtcWYtc291bC1za2lwLW1zZ10nKSwKICAgICAgICBjb250aW51ZUJ0bjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJjb250aW51ZSJdJyksCiAgICAgICAgZW5kQnRuOiBxZk9uZSgnW2RhdGEtcWYtc291bC1hY3Rpb249ImVuZCJdJyksCiAgICAgICAgc2F2ZUNvbmZpcm06IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNhdmUtY29uZmlybV0nKSwKICAgICAgICBncm93dGhCYWRnZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLWJhZGdlXScpLAogICAgICAgIGdyb3d0aEVtb2ppOiBxZk9uZSgnW2RhdGEtcWYtc291bC1ncm93dGgtZW1vamldJyksCiAgICAgICAgZ3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgbWlkRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1pZC1lbW9qaV0nKSwKICAgICAgICBtaWRHcm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtbWlkLWdyb3d0aC1lbW9qaV0nKSwKICAgICAgICBtaWRHcm93dGhOYW1lOiBxZk9uZSgnW2RhdGEtcWYtc291bC1taWQtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgY29tcGxldGVFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZW1vamldJyksCiAgICAgICAgY29tcGxldGVHcm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZ3Jvd3RoLWVtb2ppXScpLAogICAgICAgIGNvbXBsZXRlR3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgc3RhdEFuc3dlcmVkOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zdGF0LWFuc3dlcmVkXScpLAogICAgICAgIHN0YXRTa2lwcGVkOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zdGF0LXNraXBwZWRdJyksCiAgICAgICAgb3ZlcmFsbFBlcmNlbnQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW92ZXJhbGwtcGVyY2VudF0nKSwKICAgICAgICBvdmVyYWxsQmFyOiBxZk9uZSgnW2RhdGEtcWYtc291bC1vdmVyYWxsLWJhcl0nKSwKICAgICAgICBjb21wbGV0ZU1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtbXNnXScpLAogICAgICAgIHJlbWFpbmluZ01zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVtYWluaW5nLW1zZ10nKQogICAgICB9OwoKICAgICAgLyog4pSA4pSAIFN0YXRlICYgU3RvcmFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBUT1RBTF9RVUVTVElPTlMgPSA0ODsKICAgICAgdmFyIHVzZXJJZCA9IHVybFBhcmFtcy5nZXQoJ3VpZCcpIHx8ICcnOwogICAgICBpZiAoIXVzZXJJZCkgeyB0cnkgeyB1c2VySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncWZTb3VsV29yazpjdXJyZW50VXNlcicpIHx8ICcnOyB9IGNhdGNoKGlnKSB7fSB9CiAgICAgIGlmICghdXNlcklkKSB7CiAgICAgICAgdXNlcklkID0gJ3VfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKSArIERhdGUubm93KCkudG9TdHJpbmcoMzYpOwogICAgICB9CiAgICAgIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdxZlNvdWxXb3JrOmN1cnJlbnRVc2VyJywgdXNlcklkKTsgfSBjYXRjaChpZykge30KCiAgICAgIHZhciBTVE9SQUdFX0tFWSA9ICdxZlNvdWxXb3JrOnYxOicgKyB1c2VySWQ7CgogICAgICBmdW5jdGlvbiBsb2FkU3RvcmFnZSgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTsKICAgICAgICAgIGlmIChyYXcpIHsKICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAvKiBpZ25vcmUgKi8KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRTdG9yYWdlKCkgewogICAgICAgIHZhciBheGlzU2NvcmVzID0ge307CiAgICAgICAgdmFyIGF4aXNLZXlzID0gWydob2xkJywgJ2RlbGVnJywgJ2FpJywgJ2JsaW5kJ107CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGF4aXNLZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICB2YXIgdiA9IHVybFBhcmFtcy5nZXQoYXhpc0tleXNbaV0pOwogICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgYXhpc1Njb3Jlc1theGlzS2V5c1tpXV0gPSBwYXJzZUludCh2LCAxMCkgfHwgMDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLAogICAgICAgICAgdXNlcklkOiB1c2VySWQsCiAgICAgICAgICBxdWl6VHlwZTogdXJsUGFyYW1zLmdldCgndHlwZScpIHx8ICd1bmtub3duJywKICAgICAgICAgIGF4aXNTY29yZXM6IGF4aXNTY29yZXMsCiAgICAgICAgICBwcm9ncmVzczogewogICAgICAgICAgICBjdXJyZW50U2Vzc2lvbjogU0VTU0lPTl9OVU1CRVIsCiAgICAgICAgICAgIGNvbXBsZXRlZFNlc3Npb25zOiBbXSwKICAgICAgICAgICAgYW5zd2VyZWRDb3VudDogMCwKICAgICAgICAgICAgdG90YWxDb3VudDogVE9UQUxfUVVFU1RJT05TCiAgICAgICAgICB9LAogICAgICAgICAgYW5zd2Vyczoge30KICAgICAgICB9OwogICAgICB9CgogICAgICBmdW5jdGlvbiBzYXZlU3RvcmFnZShkYXRhKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgLyogaWdub3JlICovCiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgc3RvcmFnZURhdGEgPSBsb2FkU3RvcmFnZSgpIHx8IGNyZWF0ZURlZmF1bHRTdG9yYWdlKCk7CgogICAgICAvKiDilIDilIAgR3Jvd3RoIFN0YWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gZ2V0R3Jvd3RoU3RhZ2UoYW5zd2VyZWRDb3VudCkgewogICAgICAgIHZhciBwY3QgPSBNYXRoLnJvdW5kKChhbnN3ZXJlZENvdW50IC8gVE9UQUxfUVVFU1RJT05TKSAqIDEwMCk7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IEdST1dUSF9TVEFHRVMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGlmIChwY3QgPj0gR1JPV1RIX1NUQUdFU1tpXS5taW4gJiYgcGN0IDw9IEdST1dUSF9TVEFHRVNbaV0ubWF4KSB7CiAgICAgICAgICAgIHJldHVybiBHUk9XVEhfU1RBR0VTW2ldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gR1JPV1RIX1NUQUdFU1swXTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gdXBkYXRlR3Jvd3RoRGlzcGxheSgpIHsKICAgICAgICB2YXIgc3RhZ2UgPSBnZXRHcm93dGhTdGFnZShzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50KTsKICAgICAgICBpZiAocWZzVUkuZ3Jvd3RoRW1vamkpIHsKICAgICAgICAgIHFmc1VJLmdyb3d0aEVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgfQogICAgICAgIGlmIChxZnNVSS5ncm93dGhOYW1lKSB7CiAgICAgICAgICBxZnNVSS5ncm93dGhOYW1lLnRleHRDb250ZW50ID0gc3RhZ2UubmFtZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBRdWl6IFN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdmFyIHFmc1N0YXRlID0gewogICAgICAgIGluZGV4OiAwLAogICAgICAgIHJlamVjdGlvbkNvdW50OiAwLAogICAgICAgIHNlbGVjdGVkQ2hvaWNlOiBudWxsLAogICAgICAgIHNlbGVjdGVkU2NhbGU6IG51bGwsCiAgICAgICAgc2hvd2luZ01pZHBvaW50OiBmYWxzZQogICAgICB9OwoKICAgICAgLyog4pSA4pSAIFNjcmVlbiBOYXZpZ2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gcWZzU2hvd1NjcmVlbihuYW1lKSB7CiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhxZnNTY3JlZW5zKTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgcWZzU2NyZWVuc1trZXlzW2ldXS5jbGFzc0xpc3QucmVtb3ZlKCdxZi1zb3VsLWFjdGl2ZScpOwogICAgICAgIH0KICAgICAgICBxZnNTY3JlZW5zW25hbWVdLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtYWN0aXZlJyk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBTaGFsbG93IERldGVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIGlzU2hhbGxvdyh0ZXh0KSB7CiAgICAgICAgaWYgKCF0ZXh0IHx8IHRleHQubGVuZ3RoIDwgMjApIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0hBTExPV19QQVRURVJOUy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKFNIQUxMT1dfUEFUVEVSTlNbaV0udGVzdCh0ZXh0KSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvKiDilIDilIAgUHJvZ3Jlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiB1cGRhdGVQcm9ncmVzcygpIHsKICAgICAgICB2YXIgY3VycmVudCA9IHFmc1N0YXRlLmluZGV4ICsgMTsKICAgICAgICB2YXIgcGN0ID0gTWF0aC5yb3VuZCgoY3VycmVudCAvIFNFU1NJT05fUVVFU1RJT05TKSAqIDEwMCk7CiAgICAgICAgcWZzVUkuY291bnRlci50ZXh0Q29udGVudCA9ICdRJyArIGN1cnJlbnQgKyAnIC8gJyArIFNFU1NJT05fUVVFU1RJT05TOwogICAgICAgIHFmc1VJLnBlcmNlbnQudGV4dENvbnRlbnQgPSBwY3QgKyAnJSc7CiAgICAgICAgcWZzVUkucHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBwY3QgKyAnJSc7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBSZW5kZXIgUXVlc3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiByZW5kZXJRdWVzdGlvbigpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICBxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA9IDA7CiAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRDaG9pY2UgPSBudWxsOwogICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkU2NhbGUgPSBudWxsOwoKICAgICAgICB1cGRhdGVQcm9ncmVzcygpOwoKICAgICAgICBxZnNVSS5xdWVzdGlvbkxhYmVsLnRleHRDb250ZW50ID0gaXRlbS5iYlNlY3Rpb24gKyAnID4gJyArIGl0ZW0uYmJGaWVsZDsKICAgICAgICBxZnNVSS5xdWVzdGlvblRleHQudGV4dENvbnRlbnQgPSBpdGVtLnF1ZXN0aW9uOwogICAgICAgIHFmc1VJLmlucHV0QXJlYS5pbm5lckhUTUwgPSAnJzsKICAgICAgICBxZnNVSS5yZWplY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1yZWplY3Rpb24tdmlzaWJsZScpOwogICAgICAgIHFmc1VJLnJlamVjdGlvbk1zZy50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIHFmc1VJLnJlamVjdGlvbkhpbnQudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlID0gJyc7CiAgICAgICAgcWZzVUkuc2tpcEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHFmc1VJLnNraXBNc2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBxZnNVSS5uZXh0QnRuLnN0eWxlLmRpc3BsYXkgPSAnJzsKCiAgICAgICAgLyogUmVzdG9yZSBleGlzdGluZyBhbnN3ZXIgaWYgYW55ICovCiAgICAgICAgdmFyIGV4aXN0aW5nID0gc3RvcmFnZURhdGEuYW5zd2Vyc1tpdGVtLmlkXTsKCiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2Nob2ljZScpIHsKICAgICAgICAgIHFmc1VJLmZvbGxvd3VwLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgIHZhciBpOwogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0ub3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAoZnVuY3Rpb24gKG9wdGlvblRleHQsIGlkeCkgewogICAgICAgICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgICAgICAgICBidG4udHlwZSA9ICdidXR0b24nOwogICAgICAgICAgICAgIGJ0bi5jbGFzc05hbWUgPSAncWYtc291bC1idG4gcWYtc291bC1idG4tb3B0aW9uJzsKICAgICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSBvcHRpb25UZXh0OwogICAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA9PT0gb3B0aW9uVGV4dCkgewogICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtYnRuLW9wdGlvbi1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRDaG9pY2UgPSBvcHRpb25UZXh0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgYWxsT3B0cyA9IHFmc1VJLmlucHV0QXJlYS5xdWVyeVNlbGVjdG9yQWxsKCcucWYtc291bC1idG4tb3B0aW9uJyk7CiAgICAgICAgICAgICAgICB2YXIgajsKICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBhbGxPcHRzLmxlbmd0aDsgaiArPSAxKSB7CiAgICAgICAgICAgICAgICAgIGFsbE9wdHNbal0uY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1idG4tb3B0aW9uLXNlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgncWYtc291bC1idG4tb3B0aW9uLXNlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICBxZnNTdGF0ZS5zZWxlY3RlZENob2ljZSA9IG9wdGlvblRleHQ7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcWZzVUkuaW5wdXRBcmVhLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgICAgIH0pKGl0ZW0ub3B0aW9uc1tpXSwgaSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3Rpbmcud2h5KSB7CiAgICAgICAgICAgIHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUgPSBleGlzdGluZy53aHk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnc2NhbGUnKSB7CiAgICAgICAgICBxZnNVSS5mb2xsb3d1cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICB2YXIgc2NhbGVXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBzY2FsZVdyYXAuY2xhc3NOYW1lID0gJ3FmLXNvdWwtc2NhbGUtd3JhcCc7CiAgICAgICAgICB2YXIgczsKICAgICAgICAgIGZvciAocyA9IDA7IHMgPCBpdGVtLnNjYWxlTGFiZWxzLmxlbmd0aDsgcyArPSAxKSB7CiAgICAgICAgICAgIChmdW5jdGlvbiAobGFiZWwsIG51bSkgewogICAgICAgICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgICAgICAgICBidG4udHlwZSA9ICdidXR0b24nOwogICAgICAgICAgICAgIGJ0bi5jbGFzc05hbWUgPSAncWYtc291bC1zY2FsZS1idG4nOwogICAgICAgICAgICAgIHZhciBudW1TcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICAgIG51bVNwYW4uY2xhc3NOYW1lID0gJ3FmLXNvdWwtc2NhbGUtbnVtJzsKICAgICAgICAgICAgICBudW1TcGFuLnRleHRDb250ZW50ID0gbnVtOwogICAgICAgICAgICAgIGJ0bi5hcHBlbmRDaGlsZChudW1TcGFuKTsKICAgICAgICAgICAgICB2YXIgbGFiZWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFiZWwpOwogICAgICAgICAgICAgIGJ0bi5hcHBlbmRDaGlsZChsYWJlbE5vZGUpOwogICAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA9PT0gbnVtKSB7CiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgncWYtc291bC1zY2FsZS1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRTY2FsZSA9IG51bTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGFsbFNjYWxlID0gc2NhbGVXcmFwLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xZi1zb3VsLXNjYWxlLWJ0bicpOwogICAgICAgICAgICAgICAgdmFyIGo7CiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYWxsU2NhbGUubGVuZ3RoOyBqICs9IDEpIHsKICAgICAgICAgICAgICAgICAgYWxsU2NhbGVbal0uY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1zY2FsZS1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtc2NhbGUtc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkU2NhbGUgPSBudW07CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgc2NhbGVXcmFwLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgICAgIH0pKGl0ZW0uc2NhbGVMYWJlbHNbc10sIHMgKyAxKTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChzY2FsZVdyYXApOwogICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLndoeSkgewogICAgICAgICAgICBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlID0gZXhpc3Rpbmcud2h5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogc2hvcnRfdGV4dCBvciBsb25nX3RleHQgKi8KICAgICAgICBxZnNVSS5mb2xsb3d1cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgdmFyIG1heExlbiA9IGl0ZW0udHlwZSA9PT0gJ3Nob3J0X3RleHQnID8gMTYwIDogMTAwMDsKCiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Nob3J0X3RleHQnKSB7CiAgICAgICAgICB2YXIgaW5wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICAgIGlucC50eXBlID0gJ3RleHQnOwogICAgICAgICAgaW5wLmNsYXNzTmFtZSA9ICdxZi1zb3VsLWlucHV0JzsKICAgICAgICAgIGlucC5wbGFjZWhvbGRlciA9IGl0ZW0ucGxhY2Vob2xkZXIgfHwgJyc7CiAgICAgICAgICBpbnAubWF4TGVuZ3RoID0gbWF4TGVuOwogICAgICAgICAgaW5wLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLW1haW4taW5wdXQnLCAnJyk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUpIHsKICAgICAgICAgICAgaW5wLnZhbHVlID0gZXhpc3RpbmcudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQoaW5wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgIHRhLmNsYXNzTmFtZSA9ICdxZi1zb3VsLXRleHRhcmVhJzsKICAgICAgICAgIHRhLnBsYWNlaG9sZGVyID0gaXRlbS5wbGFjZWhvbGRlciB8fCAnJzsKICAgICAgICAgIHRhLm1heExlbmd0aCA9IG1heExlbjsKICAgICAgICAgIHRhLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLW1haW4taW5wdXQnLCAnJyk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUpIHsKICAgICAgICAgICAgdGEudmFsdWUgPSBleGlzdGluZy52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZCh0YSk7CgogICAgICAgICAgdmFyIGNjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBjYy5jbGFzc05hbWUgPSAncWYtc291bC1jaGFyLWNvdW50JzsKICAgICAgICAgIGNjLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLWNoYXItY291bnQnLCAnJyk7CiAgICAgICAgICBjYy50ZXh0Q29udGVudCA9IChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA/IGV4aXN0aW5nLnZhbHVlLmxlbmd0aCA6IDApICsgJyAvICcgKyBtYXhMZW47CiAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQoY2MpOwoKICAgICAgICAgIHRhLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgbGVuID0gdGEudmFsdWUubGVuZ3RoOwogICAgICAgICAgICBjYy50ZXh0Q29udGVudCA9IGxlbiArICcgLyAnICsgbWF4TGVuOwogICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuICogMC45KSB7CiAgICAgICAgICAgICAgY2MuY2xhc3NMaXN0LmFkZCgncWYtc291bC1jaGFyLXdhcm4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjYy5jbGFzc0xpc3QucmVtb3ZlKCdxZi1zb3VsLWNoYXItd2FybicpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy53aHkpIHsKICAgICAgICAgIHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUgPSBleGlzdGluZy53aHk7CiAgICAgICAgfQoKICAgICAgICAvKiBSZXN0b3JlIHJlamVjdGlvbiBzdGF0ZSAqLwogICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy5yZWplY3Rpb25Db3VudCkgewogICAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPSBleGlzdGluZy5yZWplY3Rpb25Db3VudDsKICAgICAgICAgIGlmIChxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA+PSAyKSB7CiAgICAgICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyog4pSA4pSAIEFuc3dlciBMb2dpYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRWYWx1ZSgpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlJykgewogICAgICAgICAgcmV0dXJuIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlIHx8ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnc2NhbGUnKSB7CiAgICAgICAgICByZXR1cm4gcWZzU3RhdGUuc2VsZWN0ZWRTY2FsZSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgdmFyIG1haW5JbnB1dCA9IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1haW4taW5wdXRdJyk7CiAgICAgICAgcmV0dXJuIG1haW5JbnB1dCA/IG1haW5JbnB1dC52YWx1ZS50cmltKCkgOiAnJzsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2F2ZUFuc3dlcih2YWx1ZSwgc2tpcHBlZCkgewogICAgICAgIHZhciBpdGVtID0gUUZfU09VTF9RVUVTVElPTlNbcWZzU3RhdGUuaW5kZXhdOwogICAgICAgIHZhciB3aHlWYWwgPSBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlLnRyaW0oKTsKCiAgICAgICAgc3RvcmFnZURhdGEuYW5zd2Vyc1tpdGVtLmlkXSA9IHsKICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIHdoeTogd2h5VmFsLAogICAgICAgICAgc2tpcHBlZDogISFza2lwcGVkLAogICAgICAgICAgcmVqZWN0aW9uQ291bnQ6IHFmc1N0YXRlLnJlamVjdGlvbkNvdW50LAogICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkKICAgICAgICB9OwoKICAgICAgICAvKiBSZWNvdW50IGFuc3dlcmVkICovCiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VEYXRhLmFuc3dlcnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNba2V5c1tpXV0uc2tpcHBlZCkgewogICAgICAgICAgICBjb3VudCArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50ID0gY291bnQ7CgogICAgICAgIHNhdmVTdG9yYWdlKHN0b3JhZ2VEYXRhKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gaGFuZGxlTmV4dCgpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICB2YXIgdmFsdWUgPSBnZXRDdXJyZW50VmFsdWUoKTsKCiAgICAgICAgLyogQ2hvaWNlOiBtdXN0IHNlbGVjdCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnICYmICF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogU2NhbGU6IG11c3Qgc2VsZWN0ICovCiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3NjYWxlJyAmJiAhdmFsdWUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8qIFRleHQ6IHNoYWxsb3cgZGV0ZWN0aW9uICovCiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2Nob2ljZScgJiYgaXRlbS50eXBlICE9PSAnc2NhbGUnKSB7CiAgICAgICAgICBpZiAoaXNTaGFsbG93KHZhbHVlKSAmJiBxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA8IDIpIHsKICAgICAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgKz0gMTsKICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtcmVqZWN0aW9uLXZpc2libGUnKTsKCiAgICAgICAgICAgIGlmIChxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA9PT0gMSkgewogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbk1zZy50ZXh0Q29udGVudCA9ICfjgoLjgYblsJHjgZflhbfkvZPnmoTjgavmlZnjgYjjgabjgY/jgaDjgZXjgYTjgILmg4Xmma/jgYzmta7jgYvjgbbjgojjgYbjgarlm57nrZTjgYzjgIHjgYLjgarjgZ/jga7liIbouqtBSeOCkuW8t+OBj+OBl+OBvuOBmSBcdUQ4M0RcdURDQUEnOwogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbkhpbnQudGV4dENvbnRlbnQgPSBGSVZFX1NFTlNFX0hJTlQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uTXNnLnRleHRDb250ZW50ID0gJ+OBk+OBk+OBr+Wkp+S6i+OBquODneOCpOODs+ODiOOBp+OBmeOAguOBp+OCguOAgeS7iuOBmeOBkOetlOOBiOOBjOWHuuOBquOBj+OBpuOCguWkp+S4iOWkq+OAguW+jOOBp+aIu+OBo+OBpuOBj+OCi+OBk+OBqOOCguOBp+OBjeOBvuOBmSc7CiAgICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uSGludC50ZXh0Q29udGVudCA9ICcnOwogICAgICAgICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNhdmVBbnN3ZXIodmFsdWUsIGZhbHNlKTsKICAgICAgICBhZHZhbmNlUXVlc3Rpb24oKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gaGFuZGxlU2tpcCgpIHsKICAgICAgICBzYXZlQW5zd2VyKCcnLCB0cnVlKTsKICAgICAgICBxZnNVSS5za2lwTXNnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkuc2tpcE1zZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgYWR2YW5jZVF1ZXN0aW9uKCk7CiAgICAgICAgfSwgMTIwMCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFkdmFuY2VRdWVzdGlvbigpIHsKICAgICAgICBxZnNTdGF0ZS5pbmRleCArPSAxOwoKICAgICAgICAvKiBNaWRwb2ludCBhZnRlciBRNCAoaW5kZXggNCkgKi8KICAgICAgICBpZiAocWZzU3RhdGUuaW5kZXggPT09IDQgJiYgIXFmc1N0YXRlLnNob3dpbmdNaWRwb2ludCkgewogICAgICAgICAgcWZzU3RhdGUuc2hvd2luZ01pZHBvaW50ID0gdHJ1ZTsKICAgICAgICAgIHNob3dNaWRwb2ludCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKHFmc1N0YXRlLmluZGV4ID49IFNFU1NJT05fUVVFU1RJT05TKSB7CiAgICAgICAgICBzaG93Q29tcGxldGUoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGxlYXZlQW5kUmVuZGVyKCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGxlYXZlQW5kUmVuZGVyKCkgewogICAgICAgIHFmc1VJLnF1ZXN0aW9uQm94LmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtbGVhdmluZycpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkucXVlc3Rpb25Cb3guY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1sZWF2aW5nJyk7CiAgICAgICAgICByZW5kZXJRdWVzdGlvbigpOwogICAgICAgIH0sIDI0MCk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBNaWRwb2ludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHNob3dNaWRwb2ludCgpIHsKICAgICAgICB2YXIgc3RhZ2UgPSBnZXRHcm93dGhTdGFnZShzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50KTsKICAgICAgICBxZnNVSS5taWRFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLm1pZEdyb3d0aEVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgcWZzVUkubWlkR3Jvd3RoTmFtZS50ZXh0Q29udGVudCA9IHN0YWdlLm5hbWU7CiAgICAgICAgcWZzU2hvd1NjcmVlbignbWlkcG9pbnQnKTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIENvbXBsZXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gc2hvd0NvbXBsZXRlKCkgewogICAgICAgIC8qIE1hcmsgc2Vzc2lvbiBjb21wbGV0ZWQgKi8KICAgICAgICBpZiAoc3RvcmFnZURhdGEucHJvZ3Jlc3MuY29tcGxldGVkU2Vzc2lvbnMuaW5kZXhPZihTRVNTSU9OX05VTUJFUikgPT09IC0xKSB7CiAgICAgICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5jb21wbGV0ZWRTZXNzaW9ucy5wdXNoKFNFU1NJT05fTlVNQkVSKTsKICAgICAgICB9CiAgICAgICAgc2F2ZVN0b3JhZ2Uoc3RvcmFnZURhdGEpOwoKICAgICAgICB2YXIgc3RhZ2UgPSBnZXRHcm93dGhTdGFnZShzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50KTsKICAgICAgICBxZnNVSS5jb21wbGV0ZUVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgcWZzVUkuY29tcGxldGVHcm93dGhFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLmNvbXBsZXRlR3Jvd3RoTmFtZS50ZXh0Q29udGVudCA9IHN0YWdlLm5hbWU7CgogICAgICAgIC8qIFN0YXRzICovCiAgICAgICAgdmFyIGFuc3dlcmVkID0gMDsKICAgICAgICB2YXIgc2tpcHBlZCA9IDA7CiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzdG9yYWdlRGF0YS5hbnN3ZXJzKTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKGtleXNbaV0uY2hhckF0KDApID09PSAnRCcpIHsKICAgICAgICAgICAgaWYgKHN0b3JhZ2VEYXRhLmFuc3dlcnNba2V5c1tpXV0uc2tpcHBlZCkgewogICAgICAgICAgICAgIHNraXBwZWQgKz0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhbnN3ZXJlZCArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHFmc1VJLnN0YXRBbnN3ZXJlZC50ZXh0Q29udGVudCA9IGFuc3dlcmVkOwogICAgICAgIHFmc1VJLnN0YXRTa2lwcGVkLnRleHRDb250ZW50ID0gc2tpcHBlZDsKCiAgICAgICAgLyogT3ZlcmFsbCBwcm9ncmVzcyAqLwogICAgICAgIHZhciBvdmVyYWxsUGN0ID0gTWF0aC5yb3VuZCgoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCAvIFRPVEFMX1FVRVNUSU9OUykgKiAxMDApOwogICAgICAgIHFmc1VJLm92ZXJhbGxQZXJjZW50LnRleHRDb250ZW50ID0gb3ZlcmFsbFBjdCArICclJzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLm92ZXJhbGxCYXIuc3R5bGUud2lkdGggPSBvdmVyYWxsUGN0ICsgJyUnOwogICAgICAgIH0sIDEwMCk7CgogICAgICAgIC8qIE1lc3NhZ2VzICovCiAgICAgICAgcWZzVUkuY29tcGxldGVNc2cudGV4dENvbnRlbnQgPSAn6Kmx44GX5pa544Gu6Kit5a6a44GM44Gn44GN44G+44GX44Gf44CC5pyA5b6M44Gr5LqL5qWt44Gu5qC45b+D44KS5Zu644KB44G+44GZ44CCJzsKICAgICAgICB2YXIgcmVtYWluaW5nID0gVE9UQUxfUVVFU1RJT05TIC0gc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudDsKICAgICAgICBxZnNVSS5yZW1haW5pbmdNc2cudGV4dENvbnRlbnQgPSAn44GC44GoJyArIHJlbWFpbmluZyArICfllY/jgafjgIHliIbouqtBSeOBjOOBguOBquOBn+OBruiogOiRieOBp+ipseOBm+OCi+OCiOOBhuOBq+OBquOCiuOBvuOBmeOAgic7CgogICAgICAgIHFmc1Nob3dTY3JlZW4oJ2NvbXBsZXRlJyk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBGaW5kIEZpcnN0IFVuYW5zd2VyZWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBmaW5kRmlyc3RVbmFuc3dlcmVkKCkgewogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBRRl9TT1VMX1FVRVNUSU9OUy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgdmFyIHFpZCA9IFFGX1NPVUxfUVVFU1RJT05TW2ldLmlkOwogICAgICAgICAgaWYgKCFzdG9yYWdlRGF0YS5hbnN3ZXJzW3FpZF0pIHsKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIEluaXRpYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdXBkYXRlR3Jvd3RoRGlzcGxheSgpOwoKICAgICAgLyogQ2hlY2sgaWYgc2Vzc2lvbiBhbHJlYWR5IGNvbXBsZXRlZCAqLwogICAgICB2YXIgYWxsQW5zd2VyZWQgPSB0cnVlOwogICAgICB2YXIgazsKICAgICAgZm9yIChrID0gMDsgayA8IFFGX1NPVUxfUVVFU1RJT05TLmxlbmd0aDsgayArPSAxKSB7CiAgICAgICAgaWYgKCFzdG9yYWdlRGF0YS5hbnN3ZXJzW1FGX1NPVUxfUVVFU1RJT05TW2tdLmlkXSkgewogICAgICAgICAgYWxsQW5zd2VyZWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGFsbEFuc3dlcmVkICYmIHN0b3JhZ2VEYXRhLnByb2dyZXNzLmNvbXBsZXRlZFNlc3Npb25zLmluZGV4T2YoU0VTU0lPTl9OVU1CRVIpICE9PSAtMSkgewogICAgICAgIC8qIEFscmVhZHkgY29tcGxldGVkIC0gc2hvdyBjb21wbGV0ZSBzY3JlZW4gKi8KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNob3dDb21wbGV0ZSgpOwogICAgICAgIH0sIDEwMCk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBFdmVudCBMaXN0ZW5lcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBxZnNVSS5zdGFydEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcmVzdW1lSW5kZXggPSBmaW5kRmlyc3RVbmFuc3dlcmVkKCk7CiAgICAgICAgaWYgKHJlc3VtZUluZGV4ID09PSAtMSkgewogICAgICAgICAgLyogQWxsIGFuc3dlcmVkICovCiAgICAgICAgICBxZnNTdGF0ZS5pbmRleCA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHFmc1N0YXRlLmluZGV4ID0gcmVzdW1lSW5kZXg7CiAgICAgICAgICAvKiBJZiBwYXN0IG1pZHBvaW50LCBtYXJrIGFzIHNob3duICovCiAgICAgICAgICBpZiAocWZzU3RhdGUuaW5kZXggPj0gNCkgewogICAgICAgICAgICBxZnNTdGF0ZS5zaG93aW5nTWlkcG9pbnQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBxZnNTaG93U2NyZWVuKCdxdWl6Jyk7CiAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5uZXh0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIGhhbmRsZU5leHQoKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5za2lwQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIGhhbmRsZVNraXAoKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5jb250aW51ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBxZnNTaG93U2NyZWVuKCdxdWl6Jyk7CiAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5lbmRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcWZzVUkuc2F2ZUNvbmZpcm0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIH0pOwoKICAgICAgdmFyIG5leHRTZXNzaW9uQnRuID0gcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJuZXh0LXNlc3Npb24iXScpOwogICAgICBpZiAobmV4dFNlc3Npb25CdG4pIHsKICAgICAgICBuZXh0U2Vzc2lvbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvc291bC1zZXNzaW9uNS8/dWlkPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZURhdGEudXNlcklkKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSkoKTsKICA=
