DIR : /home/kozerus/public_html/ko/index.php
/home/kozerus/public_html/ko
<?php
// /ko/index.php
$options=Array();
if( isset( $_SERVER['QUERY_STRING'] )) {
$query_string=$_SERVER['QUERY_STRING'];
$options=explode("/",$query_string);
// print_r($options);
}
main_wz($options);
function main_wz($options) {
$html=""; $j=0; $k=0;
// printf( "<h1>BUGS_101 main index.php</h1>" );
$html.=html_head($options);
// printf( "<h1>BUGS_102 main index.php</h1>" );
$html.=html_script_ko_b64($options);
// printf( "<h1>BUGS_103 main index.php</h1>" );
$html.=html_script_ko($options);
// printf( "<h1>BUGS_104 main index.php</h1>" );
$html.=html_style_ko($options);
// printf( "<h1>BUGS_105 main index.php</h1>" );
$html.=html_body($options);
// printf( "<h1>BUGS_106 main index.php</h1>" );
$html.=html_div_wz($options);
// printf( "<h1>BUGS_108 main index.php</h1>" );
$html.=html_script_startup_wz($options);
$html.=html_script_anim($options);
// printf( "<h1>BUGS_109 main index.php</h1>" );
$html.=html_script_set_dhtml($options);
// printf( "<h1>BUGS_110 main index.php</h1>" );
$html.=html_tail($options);
// printf( "<h1>BUGS_111 main END index.php</h1>" );
printf( $html );
return($html);
}
function html_head($options) {
$html=''; $j=0; $k=0;
$html.='<html>\n';
$html.='<head>\n';
$html.=' <title>/ko/index.php 20230328_1300</title>\n';
// printf( '<h1>BUGS_201 html_head</h1>' );
return($html);
}
function html_script_ko_b64($options) {
$html=''; $j=0; $k=0;
// printf( "<h1>BUGS_50 html_script_ko_b64 </h1>\n" );
$html_script_ko_b64=<<<HTML_SCRIPT_KO_B64
<!-- <script src='/fb/extras/jquery.min.1.7.js'></script> -->
<!-- <script src='/fb/extras/modnizr.2.5.3.min.js'></script> -->
<!-- <script src='/fb/lib/hash.js'></script> -->
<!-- <script src='/fb/lib/turn_html4.js'></script> -->
<!-- <script src='/fb/lib/zoom.js'></script> -->
<!-- <script src='/fb/html/magazine/js/magazine.js'></script> -->
<script id="fb_extras_jquery_min_17_js"
src="data:/text/plain;base64,LyohIGpRdWVyeSB2MS43IGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY0EoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjeChhKXtpZighY21bYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NufHwoY249Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbi5mcmFtZUJvcmRlcj1jbi53aWR0aD1jbi5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbik7aWYoIWNvfHwhY24uY3JlYXRlRWxlbWVudCljbz0oY24uY29udGVudFdpbmRvd3x8Y24uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjby53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY28uY2xvc2UoKTtkPWNvLmNyZWF0ZUVsZW1lbnQoYSksY28uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNuKX1jbVthXT1lfXJldHVybiBjbVthXX1mdW5jdGlvbiBjdyhhLGIpe3ZhciBjPXt9O2YuZWFjaChjcy5jb25jYXQuYXBwbHkoW10sY3Muc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdigpe2N0PWJ9ZnVuY3Rpb24gY3UoKXtzZXRUaW1lb3V0KGN2LDApO3JldHVybiBjdD1mLm5vdygpfWZ1bmN0aW9uIGNsKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2soKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNkKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2MoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkcudGVzdChhKT9kKGEsZSk6Y2MoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2MoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGNiKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gY2EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJWLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Y2EoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Y2EoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJfKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J6OmJBO2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YkIoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2V">
</script id="script_jquery_187_js_end">
<!-- <script id="script_ko_b64" src="/js/wz/wz_dragdrop.js" > </script id="script_ko_b64_end"> -->
<script id="script_b64_wz_dragdrop_js"
src="data:/text/plain;base64,LyogVGhpcyBub3RpY2UgbXVzdCBiZSB1bnRvdWNoZWQgYXQgYWxsIHRpbWVzLCBhbmQgbXVzdCBub3QgYmUgcmVtb3ZlZC4KCnd6X2RyYWdkcm9wLmpzCXYuIDQuOTEKVGhlIGxhdGVzdCB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBhdApodHRwOi8vd3d3LndhbHRlcnpvcm4uY29tCm9yIGh0dHA6Ly93d3cuZGV2aXJhLmNvbQpvciBodHRwOi8vd3d3LndhbHRlcnpvcm4uZGUKCkNvcHlyaWdodCAoYykgV2FsdGVyIFpvcm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkNyZWF0ZWQgMjYuIDguIDIwMDIgYnkgV2FsdGVyIFpvcm4gKFdlYjogaHR0cDovL3d3dy53YWx0ZXJ6b3JuLmNvbSApCkxhc3QgbW9kaWZpZWQ6IDEwLjEwLjIwMDgKClRoaXMgREhUTUwgJiBEcmFnJkRyb3AgTGlicmFyeSBhZGRzIERyYWcmRHJvcCBmdW5jdGlvbmFsaXR5IHRvOgotIGltYWdlcywgZXZlbiB0aG9zZSBub3QgcG9zaXRpb25lZCB2aWEgbGF5ZXJzLAogIG5vciB2aWEgc3R5bGVzaGVldHMgb3IgYW55IG90aGVyIGtpbmQgb2YgImhhcmQtY29kaW5nIjsKLSByZWxhdGl2ZWx5IGFuZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbGF5ZXJzIChESVYgZWxlbWVudHMpLgpNb3Jlb3ZlciwgaXQgcHJvdmlkZXMgZXh0ZW5kZWQgREhUTUwgY2FwYWJpbGl0aWVzLgoKTElDRU5TRTogTEdQTAoKVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgKExHUEwpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgpUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgoKRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApzZWUgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sCiovCgoKLy8gUEFUSCBUTyBUSEUgVFJBTlNQQVJFTlQgMSoxIFBYIElNQUdFIChyZXF1aXJlZCBieSBOUyA0IGFzIHNwYWNlcikKdmFyIHNwYWNlciA9ICd0cmFuc3BhcmVudHBpeGVsLmdpZic7CgoKCgovL3dpbmRvdy5vbmVycm9yID0gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdHJ1ZTsnKTsKCgovLyBPcHRpb25hbCBjb21tYW5kcyBwYXNzZWQgdG8gU0VUX0RIVE1MKCkgb24gdGhlIGh0bWwtcGFnZSAoZzogbWF5IGJlIGFwcGxpZWQgZ2xvYmFsbHksIGk6IGluZGl2aWR1YWxseSkKdmFyIENMT05FCQkJPSAnQzEwbkUnOyAgIC8vIGkgIGltZwkgIGNsb25lIGltYWdlCnZhciBDT1BZCQkJPSAnQzBwWSc7CS8vIGkgIGltZwkgIGNyZWF0ZSBjb3BpZXMKdmFyIERFVEFDSF9DSElMRFJFTiA9ICdkMzdhQ0gnOyAgLy8gaSAgbHlyCSAgZGV0YWNoIGltYWdlcwp2YXIgSE9SSVpPTlRBTAkJPSAnSDByMVonOyAgIC8vIGkgIGltZyxseXIgIGhvcml6b250YWxseSBkcmFnZ2FibGUgb25seQp2YXIgTUFYSEVJR0hUCQk9ICdtN3g4SSc7ICAgLy8gaSAgaW1nLGx5ciAgbWF4aW11bSBoZWlnaHQgbGltaXQsICIKdmFyIE1BWE9GRkJPVFRPTQk9ICdtN3hkMHdOJzsgLy8gaSAgaW1nLGx5ciAgZG93bndhcmQgb2Zmc2V0IGxpbWl0CnZhciBNQVhPRkZMRUZUCQk9ICdtN3gyM0Z0JzsgLy8gaSAgaW1nLGx5ciAgbGVmdHdhcmQgb2Zmc2V0IGxpbWl0CnZhciBNQVhPRkZSSUdIVAkJPSAnbTd4MEZmOCc7IC8vIGkgIGltZyxseXIgIHJpZ2h0d2FyZCBvZmZzZXQgbGltaXQKdmFyIE1BWE9GRlRPUAkJPSAnbTd4dTknOyAgIC8vIGkgIGltZyxseXIgIHVwd2FyZCBvZmZzZXQgbGltaXQKdmFyIE1BWFdJRFRICQk9ICdtN3hXMSc7ICAgLy8gaSAgaW1nLGx5ciAgbWF4aW11bSB3aWR0aCBsaW1pdCwgdXNlIHdpdGggcmVzaXphYmxlIG9yIHNjYWxhYmxlCnZhciBNSU5XSURUSAkJPSAnbTFudzEnOyAgIC8vIGkgIGltZyxseXIgIG1pbmltdW0gd2lkdGggbGltaXQsICIKdmFyIE1JTkhFSUdIVAkJPSAnbTFuOEknOyAgIC8vIGkgIGltZyxseXIgIG1pbmltdW0gaGVpZ2h0IGxpbWl0LCAiCnZhciBOT19BTFQJCQk9ICdubzgxVCc7ICAgLy8gZ2kgaW1nCSAgZGlzYWJsZSBhbHQgYW5kIHRpdGxlIGF0dHJpYnV0ZXMKdmFyIE5PX0RSQUcJCQk9ICdOMGQ0QWcnOyAgLy8gaSAgaW1nLGx5ciAgZGlzYWJsZSBkcmFnZ2FiaWxpdHkKdmFyIFJFU0VUX1oJCQk9ICdyMzVFN3onOyAgLy8gZ2kgaW1nLGx5ciAgcmVzZXQgei1pbmRleCB3aGVuIGRyb3BwZWQKdmFyIFJFU0laQUJMRQkJPSAncjVJWmJsJzsgIC8vIGdpIGltZyxseXIgIHJlc2l6YWJsZSBpZiA8Y3RybD4gb3IgPHNoaWZ0PiBwcmVzc2VkCnZhciBTQ0FMQUJMRQkJPSAnU0NMYmwnOyAgIC8vIGdpIGltZyxseXIgIHNjYWxhYmxlCQkgICAiCnZhciBTQ1JPTEwJCQk9ICdzQzhsTCc7ICAgLy8gZ2kgaW1nLGx5ciAgZW5hYmxlIGF1dG8gc2Nyb2xsIGZ1bmN0aW9uYWxpdHkKdmFyIFRSQU5TUEFSRU5UCQk9ICdkSUFwSEFuJzsgLy8gZ2kgaW1nLGx5ciAgdHJhbnNsdWNlbnQgd2hpbGUgZHJhZ2dlZAp2YXIgVkVSVElDQUwJCT0gJ1YzUnQxQyc7ICAvLyBpICBpbWcsbHlyICB2ZXJ0aWNhbGx5IGRyYWdnYWJsZSBvbmx5CnZhciBkZF9jdXJzb3JzID0gbmV3IEFycmF5KAoJJ2M6ZGVmYXVsdCcsCgknYzpjcm9zc2hhaXInLAoJJ2M6ZS1yZXNpemUnLAoJJ2M6aGFuZCcsCgknYzpoZWxwJywKCSdjOm1vdmUnLAoJJ2M6bi1yZXNpemUnLAoJJ2M6bmUtcmVzaXplJywKCSdjOm53LXJlc2l6ZScsCgknYzpzLXJlc2l6ZScsCgknYzpzZS1yZXNpemUnLAoJJ2M6c3ctcmVzaXplJywKCSdjOnRleHQnLAoJJ2M6dy1yZXNpemUnLAoJJ2M6d2FpdCcKKTsKZm9yKHZhciBkZF9pID0gZGRfY3Vyc29ycy5sZW5ndGg7IGRkX2k7KQp7LS1kZF9pOwoJZXZhbCgndmFyIENVUlNPUl8nICsgKGRkX2N1cnNvcnNbZGRfaV0uc3Vic3RyaW5nKDIpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgnLScsICdfJykpICsgJyA9ICInICsgZGRfY3Vyc29yc1tkZF9pXSArICciOycpOwp9CnZhciBkZF91ID0gInVuZGVmaW5lZCI7CmZ1bmN0aW9uIFdaREQoKQp7Cgl0aGlzLmVsZW1lbnRzID0gbmV3IEFycmF5KDApOwoJdGhpcy5vYmogPSBudWxsOwoJdGhpcy5uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwoJdGhpcy5kYiA9IChkb2N1bWVudC5jb21wYXRNb2RlICYmIGRvY3VtZW50LmNvbXBhdE1vZGUudG9Mb3dlckNhc2UoKSAhPSAiYmFja2NvbXBhdCIpPwoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudAoJCTogKGRvY3VtZW50LmJvZHkgfHwgbnVsbCk7Cgl0aGlzLm9wID0gISEod2luZG93Lm9wZXJhICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKTsKCWlmKHRoaXMub3ApIGRvY3VtZW50Lm9ubW91c2Vkb3duID0gbmV3IEZ1bmN0aW9uKCdlJywKCQknaWYoKChlID0gZSB8fCB3aW5kb3cuZXZlbnQpLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpLnRhZ05hbWUgPT0gIklNQUdFIikgcmV0dXJuIGZhbHNlOycpOwoJdGhpcy5pZSA9ICEhKHRoaXMubi5pbmRleE9mKCJtc2llIikgPj0gMCAmJiBkb2N1bWVudC5hbGwgJiYgdGhpcy5kYiAmJiAhdGhpcy5vcCk7Cgl0aGlzLmllbWFjID0gISEodGhpcy5pZSAmJiB0aGlzLm4uaW5kZXhPZigibWFjIikgPj0gMCk7Cgl0aGlzLmllNCA9ICEhKHRoaXMuaWUgJiYgIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKTsKCXRoaXMubjQgPSAhIShkb2N1bWVudC5sYXllcnMgJiYgdHlwZW9mIGRvY3VtZW50LmNsYXNzZXMgIT0gZGRfdSk7Cgl0aGlzLm42ID0gISEodHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICE9IGRkX3UgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZVJhbmdlICE9IGRkX3UpOwoJdGhpcy53M2MgPSAhISghdGhpcy5vcCAmJiAhdGhpcy5pZSAmJiAhdGhpcy5uNiAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCk7Cgl0aGlzLmNlID0gISEoZG9jdW1lbnQuY2FwdHVyZUV2ZW50cyAmJiBkb2N1bWVudC5yZWxlYXNlRXZlbnRzICYmICF0aGlzLm42KTsKCXRoaXMucHggPSB0aGlzLm40PyAnJyA6ICdweCc7Cgl0aGlzLnRXYWl0ID0gdGhpcy53M2M/IDQwIDogMTA7Cgl0aGlzLm5vUmVjYWxjID0gZmFsc2U7Cn0KdmFyIGRkID0gbmV3IFdaREQoKTsKCmRkLkludCA9IGZ1bmN0aW9uKGRfeCwgZF95KQp7CglyZXR1cm4gaXNOYU4oZF95ID0gcGFyc2VJbnQoZF94KSk/IDAgOiBkX3k7Cn07CmRkLmdldFduZFcgPSBmdW5jdGlvbigpCnsKCXJldHVybiBkZC5JbnQoCgkJKGRkLmRiICYmICFkZC5vcCAmJiAhZGQudzNjICYmIGRkLmRiLmNsaWVudFdpZHRoKT8gZGQuZGIuY2xpZW50V2lkdGgKCQk6ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKQoJKTsKfTsKZGQuZ2V0V25kSCA9IGZ1bmN0aW9uKCkKewoJcmV0dXJuIGRkLkludCgKCQkoZGQuZGIgJiYgIWRkLm9wICYmICFkZC53M2MgJiYgZGQuZGIuY2xpZW50SGVpZ2h0KT8gZGQuZGIuY2xpZW50SGVpZ2h0CgkJOiAod2luZG93LmlubmVySGVpZ2h0IHx8IDApCgkpOwp9OwpkZC5nZXRTY3JvbGxYID0gZnVuY3Rpb24oKQp7CglyZXR1cm4gZGQuSW50KHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZGQuZGI/IGRkLmRiLnNjcm9sbExlZnQgOiAwKSk7Cn07CmRkLmdldFNjcm9sbFkgPSBmdW5jdGlvbigpCnsKCXJldHVybiBkZC5JbnQod2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkZC5kYj8gZGQuZGIuc2Nyb2xsVG9wIDogMCkpOwp9OwpkZC5nZXRQYWdlWFkgPSBmdW5jdGlvbihkX28pCnsKCWlmKGRkLm40ICYmIGRfbykKCXsKCQlkZC54ID0gZF9vLnBhZ2VYIHx8IDA7CgkJZGQueSA9IGRfby5wYWdlWSB8fCAwOwoJfQoJZWxzZQoJewoJCWRkLnggPSBkZC55ID0gMDsgLy9nbG9iYWwgaGVscGVyIHZhcnMKCQl3aGlsZShkX28pCgkJewoJCQlkZC54ICs9IGRkLkludChkX28ub2Zmc2V0TGVmdCk7CgkJCWRkLnkgKz0gZGQuSW50KGRfby5vZmZzZXRUb3ApOwoJCQlkX28gPSBkX28ub2Zmc2V0UGFyZW50IHx8IG51bGw7CgkJfQoJfQp9OwpkZC5nZXRDc3NYWSA9IGZ1bmN0aW9uKGRfbykKewoJaWYoZF9vLmRpdikKCXsKCQlpZihkZC5uNCkKCQl7CgkJCWRfby5jc3N4ID0gZF9vLmRpdi54OwoJCQlkX28uY3NzeSA9IGRfby5kaXYueTsKCQl9CgkJZWxzZSBpZihkZC5pZTQpCgkJewoJCQlkX28uY3NzeCA9IGRfby5jc3MucGl4ZWxMZWZ0OwoJCQlkX28uY3NzeSA9IGRfby5jc3MucGl4ZWxUb3A7CgkJfQoJCWVsc2UKCQl7CgkJCWRfby5jc3MubGVmdCA9IGRfby5jc3MudG9wID0gMCArIGRkLnB4OwoJCQlkZC5nZXRQYWdlWFkoZF9vLmRpdik7CgkJCWRfby5jc3N4ID0gZF9vLnggLSBkZC54OwoJCQlkX28uY3NzeSA9IGRfby55IC0gZGQueTsKCQkJZF9vLmNzcy5sZWZ0ID0gZF9vLmNzc3ggKyBkZC5weDsKCQkJZF9vLmNzcy50b3AgPSBkX28uY3NzeSArIGRkLnB4OwoJCX0KCX0KCWVsc2UKCXsKCQlkX28uY3NzeCA9IDA7CgkJZF9vLmNzc3kgPSAwOwoJfQp9OwpkZC5nZXRJbWdXID0gZnVuY3Rpb24oZF9vKQp7CglyZXR1cm4gZF9vPyBkZC5JbnQoZF9vLndpZHRoKSA6IDA7Cn07CmRkLmdldEltZ0ggPSBmdW5jdGlvbihkX28pCnsKCXJldHVybiBkX28/IGRkLkludChkX28uaGVpZ2h0KSA6IDA7Cn07CmRkLmdldERpdlcgPSBmdW5jdGlvbihkX28pCnsKCXJldHVybiBkZC5JbnQoCgkJZGQubjQ/IChkX28uZGl2PyBkX28uZGl2LmNsaXAud2lkdGggOiAwKQoJCTogZF9vLmRpdj8gKGRfby5kaXYub2Zmc2V0V2lkdGggfHwgZF9vLmNzcy5waXhlbFdpZHRoIHx8IGRfby5jc3Mud2lkdGggfHwgMCkKCQk6IDAKCSk7Cn07CmRkLmdldERpdkggPSBmdW5jdGlvbihkX28pCnsKCXJldHVybiBkZC5JbnQoCgkJZGQubjQ/IChkX28uZGl2PyBkX28uZGl2LmNsaXAuaGVpZ2h0IDogMCkKCQk6IGRfby5kaXY/IChkX28uZGl2Lm9mZnNldEhlaWdodCB8fCBkX28uY3NzLnBpeGVsSGVpZ2h0IHx8IGRfby5jc3MuaGVpZ2h0IHx8IDApCgkJOiAwCgkpOwp9OwpkZC5nZXRXSCA9IGZ1bmN0aW9uKGRfbykKewoJZF9vLncgPSBkZC5nZXREaXZXKGRfbyk7CglkX28uaCA9IGRkLmdldERpdkgoZF9vKTsKCWlmKGRfby5jc3MpCgl7CgkJZF9vLmNzcy53aWR0aCA9IGRfby53ICsgZGQucHg7CgkJZF9vLmNzcy5oZWlnaHQgPSBkX28uaCArIGRkLnB4OwoJCWRfby5kdyA9IGRkLmdldERpdlcoZF9vKS1kX28udzsKCQlkX28uZGggPSBkZC5nZXREaXZIKGRfbyktZF9vLmg7CgkJZF9vLmNzcy53aWR0aCA9IChkX28udy1kX28uZHcpICsgZGQucHg7CgkJZF9vLmNzcy5oZWlnaHQgPSAoZF9vLmgtZF9vLmRoKSArIGRkLnB4OwoJfQoJZWxzZSBkX28uZHcgPSBkX28uZGggPSAwOwp9OwpkZC5nZXRDc3NQcm9wID0gZnVuY3Rpb24oZF9vLCBkX3BuNiwgZF9wc3R5bGUsIGRfcG40KQp7CglpZihkX28gJiYgZGQubjYpIHJldHVybiAnJyt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkX28sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoZF9wbjYpOwoJaWYoZF9vICYmIGRfby5jdXJyZW50U3R5bGUpIHJldHVybiAnJytldmFsKCdkX28uY3VycmVudFN0eWxlLicrZF9wc3R5bGUpOwoJaWYoZF9vICYmIGRfby5zdHlsZSkgcmV0dXJuICcnK2V2YWwoJ2Rfby5zdHlsZS4nK2RfcHN0eWxlKTsKCWlmKGRfbyAmJiBkZC5uNCkgcmV0dXJuICcnK2V2YWwoJ2Rfby4nK2RfcG40KTsKCXJldHVybiAnJzsKfTsKZGQuZ2V0RGl2ID0gZnVuY3Rpb24oZF94LCBkX2QpCnsKCWRfZCA9IGRfZCB8fCBkb2N1bWVudDsKCWlmKGRkLm40KQoJewoJCWlmKGRfZC5sYXllcnNbZF94XSkgcmV0dXJuIGRfZC5sYXllcnNbZF94XTsKCQlmb3IodmFyIGRfaSA9IGRfZC5sYXllcnMubGVuZ3RoOyBkX2k7KQoJCXsKCQkJdmFyIGRfeSA9IGRkLmdldERpdihkX3gsIGRfZC5sYXllcnNbLS1kX2ldLmRvY3VtZW50KTsKCQkJaWYoZF95KSByZXR1cm4gZF95OwoJCX0KCX0KCWlmKGRkLmllKSByZXR1cm4gZF9kLmFsbFtkX3hdIHx8IG51bGw7CglpZihkX2QuZ2V0RWxlbWVudEJ5SWQpIHJldHVybiBkX2QuZ2V0RWxlbWVudEJ5SWQoZF94KSB8fCBudWxsOwoJcmV0dXJuIG51bGw7Cn07CmRkLmdldEltZyA9IGZ1bmN0aW9uKGRfbywgZF9ubSwgZF94eSwgZF93KQp7CglkX3cgPSBkX3cgfHwgd2luZG93OwoJdmFyIGRfaW1nOwoJaWYoZG9jdW1lbnQuaW1hZ2VzICYmIChkX2ltZyA9IGRfdy5kb2N1bWVudC5pbWFnZXNbZF9ubV0pKQoJewoJCWlmKGRfeHkpCgkJewoJCQlpZihkZC5uNCkKCQkJewoJCQkJZGQuZ2V0UGFnZVhZKGRfdyk7CgkJCQlkX28uZGVmeCA9IGRfaW1nLnggKyBkZC54OwoJCQkJZF9vLmRlZnkgPSBkX2ltZy55ICsgZGQueTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWRkLmdldFBhZ2VYWShkX2ltZyk7CgkJCQlkX28uZGVmeCA9IGRkLng7CgkJCQlkX28uZGVmeSA9IGRkLnk7CgkJCX0KCQl9CgkJcmV0dXJuIGRfaW1nOwoJfQoJaWYoZGQubjQpIGZvcih2YXIgZF9pID0gZF93LmRvY3VtZW50LmxheWVycy5sZW5ndGg7IGRfaTspCgl7CgkJdmFyIGRfeSA9IGRkLmdldEltZyhkX28sIGRfbm0sIGRfeHksIGRfdy5kb2N1bWVudC5sYXllcnNbLS1kX2ldKTsKCQlpZihkX3kpIHJldHVybiBkX3k7Cgl9CglyZXR1cm4gbnVsbDsKfTsKZGQuZ2V0UGFyZW50ID0gZnVuY3Rpb24oZF9vLCBkX3ApCnsKCWlmKGRkLm40KQoJewoJCWZvcih2YXIgZF9pID0gZGQuZWxlbWVudHMubGVuZ3RoOyBkX2k7KQoJCXsKCQkJaWYoISgoZF9wID0gZGQuZWxlbWVudHNbLS1kX2ldKS5pc19pbWFnZSkgJiYgZF9wLmRpdiAmJiAoZF9wLmRpdi5kb2N1bWVudC5sYXllcnNbZF9vLm5hbWVdIHx8IGRfby5vaW1nICYmIGRfcC5kaXYuZG9jdW1lbnQuaW1hZ2VzW2Rfby5vaW1nLm5hbWVdKSkKCQkJCWRfcC5hZGRDaGlsZChkX28sIGRfcC5kZXRhY2gsIDEpOwoJCX0KCX0KCWVsc2UKCXsKCQlkX3AgPSBkX28uaXNfaW1hZ2U/IGRkLmdldEltZyhkX28sIGRfby5vaW1nLm5hbWUpIDogKGRfby5kaXYgfHwgbnVsbCk7CgkJd2hpbGUoZF9wICYmICEhKGRfcCA9IGRfcC5vZmZzZXRQYXJlbnQgfHwgZF9wLnBhcmVudE5vZGUgfHwgbnVsbCkpCgkJewoJCQlpZihkX3AuZGRPYmopCgkJCXsKCQkJCWRfcC5kZE9iai5hZGRDaGlsZChkX28sIGRfcC5kZE9iai5kZXRhY2gsIDEpOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9Cn07CmRkLmdldENtZCA9IGZ1bmN0aW9uKGRfbywgZF9jbWQsIGRfY21kU3RyKQp7Cgl2YXIgZF9pID0gZF9vLmlkLmluZGV4T2YoZF9jbWQpLCBkX2osCglkX3kgPSAoZF9pID49IDApKjE7CglpZihkX3kpCgl7CgkJZF9qID0gZF9pK2RfY21kLmxlbmd0aDsKCQlpZihkX2NtZFN0cikgZF9vLmNtZCArPSBkX28uaWQuc3Vic3RyaW5nKGRfaSwgZF9qKTsKCQlkX28uaWQgPSBkX28uaWQuc3Vic3RyaW5nKDAsIGRfaSkgKyBkX28uaWQuc3Vic3RyaW5nKGRfaik7Cgl9CglyZXR1cm4gZF95Owp9OwpkZC5nZXRDbWRWYWwgPSBmdW5jdGlvbihkX28sIGRfY21kLCBkX2NtZFN0ciwgaW50MCkKewoJdmFyIGRfaSA9IGRfby5pZC5pbmRleE9mKGRfY21kKSwgZF9qLAoJZF95ID0gKGRfby5pZC5pbmRleE9mKGRfY21kKSA+PSAwKT8gZGQuSW50KGRfby5pZC5zdWJzdHJpbmcoZF9vLmlkLmluZGV4T2YoZF9jbWQpK2RfY21kLmxlbmd0aCkpIDogaW50MD8gLTEgOiAwOwoJaWYoIWludDAgJiYgZF95IHx8IGludDAgJiYgZF95ID49IDApCgl7CgkJZF9qID0gZF9pK2RfY21kLmxlbmd0aCsoIiIrZF95KS5sZW5ndGg7CgkJaWYoZF9jbWRTdHIpIGRfby5jbWQgKz0gZF9vLmlkLnN1YnN0cmluZyhkX2ksIGRfaik7CgkJZF9vLmlkID0gZF9vLmlkLnN1YnN0cmluZygwLCBkX2kpICsgZF9vLmlkLnN1YnN0cmluZyhkX2opOwoJfQoJcmV0dXJuIGRfeTsKfTsKZGQuYWRkRWx0ID0gZnVuY3Rpb24oZF9vLCBkX3ApCnsKCWRkLmVsZW1lbnRzW2Rfby5uYW1lXSA9IGRkLmVsZW1lbnRzW2Rfby5pbmRleCA9IGRkLmVsZW1lbnRzLmxlbmd0aF0gPSBkX287CglpZihkX3ApIGRfcC5jb3BpZXNbZF9vLm5hbWVdID0gZF9wLmNvcGllc1tkX3AuY29waWVzLmxlbmd0aF0gPSBkX287Cn07CmRkLm1rV3pEb20gPSBmdW5jdGlvbigpCnsKCXZhciBkX28sIGRfbCA9IGRkLmVsZW1lbnRzLmxlbmd0aCwgZF9pOwoJZm9yKGRfaSA9IGRfbDsgZF9pOykgZGQuZ2V0UGFyZW50KGRkLmVsZW1lbnRzWy0tZF9pXSk7Cglmb3IoZF9pID0gZF9sOyBkX2k7KQoJewoJCWlmKChkX28gPSBkZC5lbGVtZW50c1stLWRfaV0pLmNoaWxkcmVuICYmICFkX28ucGFyZW50KQoJCXsKCQkJZm9yKHZhciBkX2ogPSBkX28uY2hpbGRyZW4ubGVuZ3RoOyBkX2o7KQoJCQl7LS1kX2o7CgkJCQlkX28uY2hpbGRyZW5bZF9qXS5zZXRaKGRfby56K2Rfby5jaGlsZHJlbltkX2pdLnosIDEpOwoJCQl9CgkJfQoJfQp9OwpkZC5hZGRQcm9wcyA9IGZ1bmN0aW9uKGRfbykKewoJaWYoZF9vLmlzX2ltYWdlKQoJewoJCWRfby5kaXYgPSBkZC5nZXREaXYoZF9vLmlkKTsKCQlkX28uY3NzID0gKGRfby5kaXYgJiYgdHlwZW9mIGRfby5kaXYuc3R5bGUgIT0gZGRfdSk/IGRfby5kaXYuc3R5bGUgOiBudWxsOwoJCWRfby5uaW1nID0gKGRkLm40ICYmIGRfby5kaXYpPyBkX28uZGl2LmRvY3VtZW50LmltYWdlc1swXSA6IChkb2N1bWVudC5pbWFnZXNbZF9vLmlkKyJOSTFtNkciXSB8fCBudWxsKTsKCQlpZighZF9vLm5vYWx0ICYmICFkZC5ub2FsdCAmJiBkX28ubmltZyAmJiBkX28ub2ltZykKCQl7CgkJCWRfby5uaW1nLmFsdCA9IGRfby5vaW1nLmFsdCB8fCAnJzsKCQkJZF9vLm5pbWcudGl0bGUgPSBkX28ub2ltZy50aXRsZTsKCQkJZF9vLm5pbWcub25tb3VzZW92ZXIgPSBkX28ub2ltZy5vbm1vdXNlb3ZlcjsKCQkJZF9vLm5pbWcub25tb3VzZW91dCA9IGRfby5vaW1nLm9ubW91c2VvdXQ7CgkJfQoJCWRfby5iZ0NvbG9yID0gJyc7Cgl9CgllbHNlCgl7CgkJZF9vLmJnQ29sb3IgPSBkZC5nZXRDc3NQcm9wKGRfby5kaXYsICdiYWNrZ3JvdW5kLWNvbG9yJywnYmFja2dyb3VuZENvbG9yJywnYmdDb2xvcicpLnRvTG93ZXJDYXNlKCk7CgkJaWYoZGQubjYgJiYgZF9vLmRpdikKCQl7CgkJCXZhciBkX2MgPSBkX28uYmdDb2xvci50b0xvd2VyQ2FzZSgpOwoJCQlpZihkX2MuaW5kZXhPZigncmdiJykgPj0gMCkKCQkJewoJCQkJZF9jID0gZF9jLnN1YnN0cmluZyg0LCBkX2MubGVuZ3RoLTEpLnNwbGl0KCcsJyk7CgkJCQlkX28uYmdDb2xvciA9ICcjJzsKCQkJCWZvcih2YXIgZF9sID0gZF9jLmxlbmd0aCwgZF9pID0gMDsgZF9pIDwgZF9sOyBkX2krKykgZF9vLmJnQ29sb3IgKz0gcGFyc2VJbnQoZF9jW2RfaV0pLnRvU3RyaW5nKDB4MTApOwoJCQl9CgkJCWVsc2UgZF9vLmJnQ29sb3IgPSBkX2M7CgkJfQoJfQoJaWYoZGQuc2NhbGFibGUpIGRfby5zY2FsYWJsZSA9IGRfby5yZXNpemFibGVeMTsKCWVsc2UgaWYoZGQucmVzaXphYmxlKSBkX28ucmVzaXphYmxlID0gZF9vLnNjYWxhYmxlXjE7CglkX28uc2V0WihkX28uZGVmeik7CglkX28uY3Vyc29yID0gZF9vLmN1cnNvciB8fCBkZC5jdXJzb3IgfHwgJ2F1dG8nOwoJZF9vLl9zZXRDcnMoZF9vLm5vZHJhZz8gJ2F1dG8nIDogZF9vLmN1cnNvcik7CglkX28uZGlhcGhhbiA9IGRfby5kaWFwaGFuIHx8IGRkLmRpYXBoYW4gfHwgMDsKCWRfby5vcGFjaXR5ID0gMS4wOwoJZF9vLnZpc2libGUgPSB0cnVlOwp9OwpkZC5pbml0eiA9IGZ1bmN0aW9uKCkKewoJaWYoIShkZCAmJiAoZGQubjQgfHwgZGQubjYgfHwgZGQuaWUgfHwgZGQub3AgfHwgZGQudzNjKSkpIHJldHVybjsKCWVsc2UgaWYoZGQubjYgfHwgZGQuaWUgfHwgZGQub3AgfHwgZGQudzNjKSBkZC5yZWNhbGMoMSk7Cgl2YXIgZF9kcmFnID0gKGRvY3VtZW50Lm9ubW91c2Vtb3ZlID09IERSQUcpLAoJZF9yZXNpemUgPSAoZG9jdW1lbnQub25tb3VzZW1vdmUgPT0gUkVTSVpFKTsKCWlmKGRkLmxvYWRGdW5jKSBkZC5sb2FkRnVuYygpOwoJaWYoZF9kcmFnKSBkZC5zZXRNb3ZIZGwoRFJBRyk7CgllbHNlIGlmKGRfcmVzaXplKSBkZC5zZXRNb3ZIZGwoUkVTSVpFKTsKCWlmKGRfZHJhZyB8fCBkX3Jlc2l6ZSkgZGQuc2V0VXBIZGwoRFJPUCk7CglkZC5zZXREd25IZGwoUElDSyk7Cn07CmRkLmZpbmx6ID0gZnVuY3Rpb24oKQp7CglpZihkZC5pZSAmJiBkZC5lbGVtZW50cykKCXsKCQlkZC5ub1JlY2FsYyA9IHRydWU7CgkJZm9yKHZhciBkX2kgPSBkZC5lbGVtZW50cy5sZW5ndGg7IGRfaTspCgkJCWRkLmVsZW1lbnRzWy0tZF9pXS5kZWwoKTsKCQlkZC5ub1JlY2FsYyA9IGZhbHNlOwoJfQoJaWYoZGQudWxvYWRGdW5jKSBkZC51bG9hZEZ1bmMoKTsKfTsKZGQuc2V0Q2UgPSBmdW5jdGlvbihkX2UsIGRfZm5jKQp7CglkX2ZuYz8gZG9jdW1lbnQuY2FwdHVyZUV2ZW50cyhkX2UpIDogZG9jdW1lbnQucmVsZWFzZUV2ZW50cyhkX2UpOwp9OwpkZC5zZXREd25IZGwgPSBmdW5jdGlvbihkX3gpCnsKCWlmKGRvY3VtZW50Lm9ubW91c2Vkb3duICE9IGRfeCkKCXsKCQlkZC5kb3duRnVuYyA9IGRvY3VtZW50Lm9ubW91c2Vkb3duOwoJCWRvY3VtZW50Lm9ubW91c2Vkb3duID0gZF94OwoJCWlmKGRkLmNlKSBkZC5zZXRDZShFdmVudC5NT1VTRURPV04sIGRfeCk7Cgl9Cn07CmRkLnNldE1vdkhkbCA9IGZ1bmN0aW9uKGRfeCkKewoJaWYoZG9jdW1lbnQub25tb3VzZW1vdmUgIT0gZF94KQoJewoJCWRkLm1vdmVGdW5jID0gZG9jdW1lbnQub25tb3VzZW1vdmU7CgkJZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkX3g7CgkJaWYoZGQuY2UpIGRkLnNldENlKEV2ZW50Lk1PVVNFTU9WRSwgZF94KTsKCX0KfTsKZGQuc2V0VXBIZGwgPSBmdW5jdGlvbihkX3gpCnsKCWlmKGRvY3VtZW50Lm9ubW91c2V1cCAhPSBkX3gpCgl7CgkJZGQudXBGdW5jID0gZG9jdW1lbnQub25tb3VzZXVwOwoJCWRvY3VtZW50Lm9ubW91c2V1cCA9IGRfeDsKCQlpZihkZC5jZSkgZGQuc2V0Q2UoRXZlbnQuTU9VU0VVUCwgZF94KTsKCX0KfTsKZGQuZXZ0ID0gZnVuY3Rpb24oZF9lKQp7Cgl0aGlzLmJ1dCA9ICh0aGlzLmUgPSBkX2UgfHwgd2luZG93LmV2ZW50KS53aGljaCB8fCB0aGlzLmUuYnV0dG9uIHx8IDA7Cgl0aGlzLmJ1dHRvbiA9ICh0aGlzLmUudHlwZSA9PSAnbW91c2Vkb3duJyk/IHRoaXMuYnV0CgkJOiAoZGQuZSAmJiBkZC5lLmJ1dHRvbik/IGRkLmUuYnV0dG9uCgkJOiAwOwoJdGhpcy5zcmMgPSB0aGlzLmUudGFyZ2V0IHx8IHRoaXMuZS5zcmNFbGVtZW50IHx8IG51bGw7Cgl0aGlzLnNyYy50YWcgPSAoIiIgKyAodGhpcy5zcmMudGFnTmFtZSB8fCB0aGlzLnNyYykpLnRvTG93ZXJDYXNlKCk7Cgl0aGlzLnggPSBkZC5JbnQodGhpcy5lLnBhZ2VYIHx8IHRoaXMuZS5jbGllbnRYIHx8IDApOwoJdGhpcy55ID0gZGQuSW50KHRoaXMuZS5wYWdlWSB8fCB0aGlzLmUuY2xpZW50WSB8fCAwKTsKCWlmKGRkLmllKQoJewoJCXRoaXMueCArPSBkZC5nZXRTY3JvbGxYKCkgLSAoZGQuaWUgJiYgIWRkLmllbWFjKSoxOwoJCXRoaXMueSArPSBkZC5nZXRTY3JvbGxZKCkgLSAoZGQuaWUgJiYgIWRkLmllbWFjKSoxOwoJfQoJdGhpcy5tb2RpZktleSA9IHRoaXMuZS5tb2RpZmllcnM/IHRoaXMuZS5tb2RpZmllcnMmRXZlbnQuU0hJRlRfTUFTSyA6ICh0aGlzLmUuc2hpZnRLZXkgfHwgZmFsc2UpOwp9OwpkZC5nZXRFdmVudFRhcmdldCA9IGZ1bmN0aW9uKGRfZSwgZF9zLCBkX24pCnsKCWRfZSA9IGRfZSB8fCB3aW5kb3cuZXZlbnQ7CglpZihkX2UgJiYgKGRfcyA9IGRfZS50YXJnZXQgfHwgZF9lLnNyY0VsZW1lbnQgfHwgbnVsbCkgIT0gbnVsbCkKCXsKCQlpZihudWxsICE9IChkX24gPSBkX3MuaWQgfHwgZF9zLm5hbWUgfHwgbnVsbCkpCgkJewoJCQlpZihkX24uaW5kZXhPZigiZElpMTV2TkkxbTZHIikgPT0gZF9uLmxlbmd0aC0xMikKCQkJCXJldHVybiBkZC5lbGVtZW50c1tkX24uc3Vic3RyaW5nKDAsIGRfbi5sZW5ndGgtMTIpXSB8fCBudWxsOwoJCQlpZihkX24uaW5kZXhPZigiZElpMTV2IikgPT0gZF9uLmxlbmd0aC02KQoJCQkJcmV0dXJuIGRkLmVsZW1lbnRzW2Rfbi5zdWJzdHJpbmcoMCwgZF9uLmxlbmd0aC02KV0gfHwgbnVsbDsKCQkJcmV0dXJuIGRkLmVsZW1lbnRzW2Rfbl0gfHwgbnVsbDsKCQl9Cgl9CglyZXR1cm4gbnVsbDsKfTsKZGQucmVjYWxjID0gZnVuY3Rpb24oZF94KQp7CglpZihkZC5ub1JlY2FsYykgcmV0dXJuOwoJZm9yKHZhciBkX28sIGRfaSA9IGRkLmVsZW1lbnRzLmxlbmd0aDsgZF9pOykKCXsKCQlpZighKGRfbyA9IGRkLmVsZW1lbnRzWy0tZF9pXSkuaXNfaW1hZ2UgJiYgZF9vLmRpdikKCQl7CgkJCWRkLmdldFdIKGRfbyk7CgkJCWlmKGRfby5kaXYucG9zX3JlbCkKCQkJewoJCQkJZGQuZ2V0UGFnZVhZKGRfby5kaXYpOwoJCQkJdmFyIGRfZHggPSBkZC54IC0gZF9vLngsIGRfZHkgPSBkZC55IC0gZF9vLnk7CgkJCQlkX28uZGVmeCArPSBkX2R4OwoJCQkJZF9vLnggKz0gZF9keDsKCQkJCWRfby5kZWZ5ICs9IGRfZHk7CgkJCQlkX28ueSArPSBkX2R5OwoJCQkJZm9yKHZhciBkX3AsIGRfaiA9IGRfby5jaGlsZHJlbi5sZW5ndGg7IGRfajspCgkJCQl7CgkJCQkJaWYoIShkX3AgPSBkX28uY2hpbGRyZW5bLS1kX2pdKS5kZXRhY2hlZCAmJiAoZF9vICE9IGRfcC5kZWZwYXJlbnQgfHwgIShkX3AuaXNfaW1hZ2UgJiYgZGQuZ2V0SW1nKGRfcCwgZF9wLm9pbWcubmFtZSwgMSkpKSkKCQkJCQl7CgkJCQkJCWRfcC5kZWZ4ICs9IGRfZHg7CgkJCQkJCWRfcC5kZWZ5ICs9IGRfZHk7CgkJCQkJCWRfcC5tb3ZlQnkoZF9keCwgZF9keSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgaWYoZF9vLmlzX2ltYWdlICYmICFkZC5uNCkKCQl7CgkJCWlmKGRkLm42ICYmIGRfeCAmJiAhZF9vLmRlZncpIGRfby5yZXNpemVUbyhkX28uZGVmdyA9IGRkLmdldEltZ1coZF9vLm9pbWcpLCBkX28uZGVmaCA9IGRkLmdldEltZ0goZF9vLm9pbWcpKTsKCQkJdmFyIGRfZGVmeCA9IGRfby5kZWZ4LCBkX2RlZnkgPSBkX28uZGVmeTsKCQkJaWYoIShkX28ucGFyZW50ICYmIGRfby5wYXJlbnQgIT0gZF9vLmRlZnBhcmVudCkgJiYgKGRfeCB8fCAhZF9vLmRldGFjaGVkIHx8IGRfby5ob3Jpem9udGFsIHx8IGRfby52ZXJ0aWNhbCkgJiYgZGQuZ2V0SW1nKGRfbywgZF9vLm9pbWcubmFtZSwgMSkpCgkJCQlkX28ubW92ZUJ5KGRfby5kZWZ4LWRfZGVmeCwgZF9vLmRlZnktZF9kZWZ5KTsKCQl9Cgl9Cn07CmZ1bmN0aW9uIFdJTlNaKGRfeCkKewoJaWYoZF94KQoJewoJCWlmKGRkLm40KQoJCXsKCQkJZGQuaVcgPSBpbm5lcldpZHRoOwoJCQlkZC5pSCA9IGlubmVySGVpZ2h0OwoJCX0KCQl3aW5kb3cub25yZXNpemUgPSBuZXcgRnVuY3Rpb24oJ1dJTlNaKCk7Jyk7Cgl9CgllbHNlIGlmKGRkLm40ICYmIChpbm5lcldpZHRoICE9IGRkLmlXIHx8IGlubmVySGVpZ2h0ICE9IGRkLmlIKSkgbG9jYXRpb24ucmVsb2FkKCk7CgllbHNlIGlmKCFkZC5uNCkgc2V0VGltZW91dCgnZGQucmVjYWxjKCknLCAweGEpOwp9CldJTlNaKDEpOwoKZnVuY3Rpb24gRERPYmooZF9vLCBkX2kpCnsKCXRoaXMuaWQgPSBkX287Cgl0aGlzLmNtZCA9ICcnOwoJdGhpcy5jcHlfbiA9IGRkLmdldENtZFZhbCh0aGlzLCBDT1BZKTsKCXRoaXMubWF4b2ZmYiA9IGRkLmdldENtZFZhbCh0aGlzLCBNQVhPRkZCT1RUT00sIDAsIDEpOwoJdGhpcy5tYXhvZmZsID0gZGQuZ2V0Q21kVmFsKHRoaXMsIE1BWE9GRkxFRlQsIDAsIDEpOwoJdGhpcy5tYXhvZmZyID0gZGQuZ2V0Q21kVmFsKHRoaXMsIE1BWE9GRlJJR0hULCAwLCAxKTsKCXRoaXMubWF4b2ZmdCA9IGRkLmdldENtZFZhbCh0aGlzLCBNQVhPRkZUT1AsIDAsIDEpOwoJdmFyIGRfaiA9IGRkX2N1cnNvcnMubGVuZ3RoOyB3aGlsZShkX2otLSkKCQlpZihkZC5nZXRDbWQodGhpcywgZGRfY3Vyc29yc1tkX2pdLCAxKSkgdGhpcy5jdXJzb3IgPSBkZF9jdXJzb3JzW2Rfal0uc3Vic3RyaW5nKDIpOwoJdGhpcy5jbG9uZSA9IGRkLmdldENtZCh0aGlzLCBDTE9ORSwgMSk7Cgl0aGlzLmRldGFjaCA9IGRkLmdldENtZCh0aGlzLCBERVRBQ0hfQ0hJTERSRU4pOwoJdGhpcy5zY2FsYWJsZSA9IGRkLmdldENtZCh0aGlzLCBTQ0FMQUJMRSwgMSk7Cgl0aGlzLmhvcml6b250YWwgPSBkZC5nZXRDbWQodGhpcywgSE9SSVpPTlRBTCk7Cgl0aGlzLm5vYWx0ID0gZGQuZ2V0Q21kKHRoaXMsIE5PX0FMVCwgMSk7Cgl0aGlzLm5vZHJhZyA9IGRkLmdldENtZCh0aGlzLCBOT19EUkFHKTsKCXRoaXMuc2Nyb2xsID0gZGQuZ2V0Q21kKHRoaXMsIFNDUk9MTCwgMSk7Cgl0aGlzLnJlc2l6YWJsZSA9IGRkLmdldENtZCh0aGlzLCBSRVNJWkFCTEUsIDEpOwoJdGhpcy5yZV96ID0gZGQuZ2V0Q21kKHRoaXMsIFJFU0VUX1osIDEpOwoJdGhpcy5kaWFwaGFuID0gZGQuZ2V0Q21kKHRoaXMsIFRSQU5TUEFSRU5ULCAxKTsKCXRoaXMudmVydGljYWwgPSBkZC5nZXRDbWQodGhpcywgVkVSVElDQUwpOwoJdGhpcy5tYXh3ID0gZGQuZ2V0Q21kVmFsKHRoaXMsIE1BWFdJRFRILCAxLCAxKTsKCXRoaXMubWludyA9IE1hdGguYWJzKGRkLmdldENtZFZhbCh0aGlzLCBNSU5XSURUSCwgMSwgMSkpOwoJdGhpcy5tYXhoID0gZGQuZ2V0Q21kVmFsKHRoaXMsIE1BWEhFSUdIVCwgMSwgMSk7Cgl0aGlzLm1pbmggPSBNYXRoLmFicyhkZC5nZXRDbWRWYWwodGhpcywgTUlOSEVJR0hULCAxLCAxKSk7Cgl0aGlzLnBpY2tGdW5jID0gdGhpcy5kcmFnRnVuYyA9IHRoaXMucmVzaXplRnVuYyA9IHRoaXMuZHJvcEZ1bmMgPSBudWxsOwoKCXRoaXMubmFtZSA9IHRoaXMuaWQgKyAoZF9pIHx8ICcnKTsKCXRoaXMub2ltZyA9IGRkLmdldEltZyh0aGlzLCB0aGlzLmlkLCAxKTsKCXRoaXMuaXNfaW1hZ2UgPSAhIXRoaXMub2ltZzsKCXRoaXMuY29waWVzID0gbmV3IEFycmF5KCk7Cgl0aGlzLmNoaWxkcmVuID0gbmV3IEFycmF5KCk7Cgl0aGlzLnBhcmVudCA9IHRoaXMub3JpZ2luYWwgPSBudWxsOwoJaWYodGhpcy5vaW1nKQoJewoJCXRoaXMuaWQgPSB0aGlzLm5hbWUgKyAiZElpMTV2IjsKCQl0aGlzLncgPSBkZC5nZXRJbWdXKHRoaXMub2ltZyk7CgkJdGhpcy5oID0gZGQuZ2V0SW1nSCh0aGlzLm9pbWcpOwoJCXRoaXMuZHcgPSB0aGlzLmRoID0gMDsKCQl0aGlzLmRlZnogPSBkZC5JbnQoZGQuZ2V0Q3NzUHJvcCh0aGlzLm9pbWcsICd6LWluZGV4JywnekluZGV4JywnekluZGV4JykpIHx8IDE7CgkJdGhpcy5kZWZzcmMgPSB0aGlzLnNyYyA9IHRoaXMub2ltZy5zcmM7CgkJdGhpcy5odG0gPSAnPGltZyBuYW1lPSInICsgdGhpcy5pZCArICdOSTFtNkciJysKCQkJJyBzcmM9IicgKyB0aGlzLm9pbWcuc3JjICsgJyIgJysKCQkJJ3dpZHRoPSInICsgdGhpcy53ICsgJyIgaGVpZ2h0PSInICsgdGhpcy5oICsgJyI+JzsKCQl0aGlzLnRfaHRtID0gJzxkaXYgaWQ9IicgKyB0aGlzLmlkICsKCQkJJyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOycrCgkJCSdsZWZ0OicgKyAodGhpcy5jc3N4ID0gdGhpcy54ID0gdGhpcy5kZWZ4KSArICdweDsnKwoJCQkndG9wOicgKyAodGhpcy5jc3N5ID0gdGhpcy55ID0gdGhpcy5kZWZ5KSArICdweDsnKwoJCQknd2lkdGg6JyArIHRoaXMudyArICdweDsnKwoJCQknaGVpZ2h0OicgKyB0aGlzLmggKyAncHg7Ij4nKwoJCQl0aGlzLmh0bSArICc8L2Rpdj4nOwoJfQoJZWxzZQoJewoJCWlmKCEhKHRoaXMuZGl2ID0gZGQuZ2V0RGl2KHRoaXMuaWQpKSAmJiB0eXBlb2YgdGhpcy5kaXYuc3R5bGUgIT0gZGRfdSkgdGhpcy5jc3MgPSB0aGlzLmRpdi5zdHlsZTsKCQlkZC5nZXRXSCh0aGlzKTsKCQlpZih0aGlzLmRpdikKCQl7CgkJCXRoaXMuZGl2LmRkT2JqID0gdGhpczsKCQkJdGhpcy5kaXYucG9zX3JlbCA9IGRkLmdldENzc1Byb3AodGhpcy5kaXYsICdwb3NpdGlvbicsJ3Bvc2l0aW9uJywncG9zaXRpb24nKSA9PSAicmVsYXRpdmUiOwoJCX0KCQlkZC5nZXRQYWdlWFkodGhpcy5kaXYpOwoJCXRoaXMuZGVmeCA9IHRoaXMueCA9IGRkLng7CgkJdGhpcy5kZWZ5ID0gdGhpcy55ID0gZGQueTsKCQlkZC5nZXRDc3NYWSh0aGlzKTsKCQl0aGlzLmRlZnogPSBkZC5JbnQoZGQuZ2V0Q3NzUHJvcCh0aGlzLmRpdiwgJ3otaW5kZXgnLCd6SW5kZXgnLCd6SW5kZXgnKSk7Cgl9Cgl0aGlzLmRlZncgPSB0aGlzLncgfHwgMDsKCXRoaXMuZGVmaCA9IHRoaXMuaCB8fCAwOwp9CkRET2JqLnByb3RvdHlwZS5zZXRQaWNrRnVuYyA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy5waWNrRnVuYyA9IGRfeDsKfTsKRERPYmoucHJvdG90eXBlLnNldERyYWdGdW5jID0gZnVuY3Rpb24oZF94KQp7Cgl0aGlzLmRyYWdGdW5jID0gZF94Owp9OwpERE9iai5wcm90b3R5cGUuc2V0UmVzaXplRnVuYyA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy5yZXNpemVGdW5jID0gZF94Owp9OwpERE9iai5wcm90b3R5cGUuc2V0RHJvcEZ1bmMgPSBmdW5jdGlvbihkX3gpCnsKCXRoaXMuZHJvcEZ1bmMgPSBkX3g7Cn07CkRET2JqLnByb3RvdHlwZS5tb3ZlQnkgPSBmdW5jdGlvbihkX3gsIGRfeSwgZF9rZHMsIGRfbykKewoJaWYoIXRoaXMuZGl2KSByZXR1cm47Cgl0aGlzLnggKz0gKGRfeCA9IGRkLkludChkX3gpKTsKCXRoaXMueSArPSAoZF95ID0gZGQuSW50KGRfeSkpOwoJaWYoIWRfa2RzIHx8IHRoaXMuaXNfaW1hZ2UgfHwgdGhpcy5wYXJlbnQgIT0gdGhpcy5kZWZwYXJlbnQpCgl7CgkJKGRfbyA9IHRoaXMuY3NzIHx8IHRoaXMuZGl2KS5sZWZ0ID0gKHRoaXMuY3NzeCArPSBkX3gpICsgZGQucHg7CgkJZF9vLnRvcCA9ICh0aGlzLmNzc3kgKz0gZF95KSArIGRkLnB4OwoJfQoJZm9yKHZhciBkX2kgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgZF9pOykKCXsKCQlpZighKGRfbyA9IHRoaXMuY2hpbGRyZW5bLS1kX2ldKS5kZXRhY2hlZCkgZF9vLm1vdmVCeShkX3gsIGRfeSwgMSk7CgkJZF9vLmRlZnggKz0gZF94OwoJCWRfby5kZWZ5ICs9IGRfeTsKCX0KfTsKCkRET2JqLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbihkX3gsIGRfeSkKewoJdGhpcy5tb3ZlQnkoZGQuSW50KGRfeCktdGhpcy54LCBkZC5JbnQoZF95KS10aGlzLnkpOwp9OwpERE9iai5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKGRfbSwgZF9vLCBkX3ApCnsKCWlmKHRoaXMuZGl2ICYmIHRoaXMudmlzaWJsZSkKCXsKCQlkX3AgPSB0aGlzLmNzcyB8fCB0aGlzLmRpdjsKCQlpZihkX20gJiYgIWRkLm40KQoJCXsKCQkJdGhpcy5kaXNwbGF5ID0gZGQuZ2V0Q3NzUHJvcCh0aGlzLmRpdiwgImRpc3BsYXkiLCAiZGlzcGxheSIsICJkaXNwbGF5Iik7CgkJCWlmKHRoaXMub2ltZykKCQkJewoJCQkJdGhpcy5vaW1nLmRpc3BsYXkgPSBkZC5nZXRDc3NQcm9wKHRoaXMub2ltZywgImRpc3BsYXkiLCAiZGlzcGxheSIsICJkaXNwbGF5Iik7CgkJCQl0aGlzLm9pbWcuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCQkJfQoJCQlkX3AuZGlzcGxheSA9ICJub25lIjsKCQkJZGQucmVjYWxjKCk7CgkJfQoJCWVsc2UgZF9wLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCX0KCXRoaXMudmlzaWJsZSA9IGZhbHNlOwoJZm9yKHZhciBkX2kgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgZF9pOykKCQlpZighKGRfbyA9IHRoaXMuY2hpbGRyZW5bLS1kX2ldKS5kZXRhY2hlZCkgZF9vLmhpZGUoZF9tKTsKfTsKRERPYmoucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihkX28sIGRfcCkKewoJaWYodGhpcy5kaXYpCgl7CgkJZF9wID0gdGhpcy5jc3MgfHwgdGhpcy5kaXY7CgkJaWYoZF9wLmRpc3BsYXkgJiYgZF9wLmRpc3BsYXkgPT0gIm5vbmUiKQoJCXsKCQkJZF9wLmRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgfHwgImJsb2NrIjsKCQkJaWYodGhpcy5vaW1nKSB0aGlzLm9pbWcuc3R5bGUuZGlzcGxheSA9IHRoaXMub2ltZy5kaXNwbGF5IHx8ICJpbmxpbmUiOwoJCQlkZC5yZWNhbGMoKTsKCQl9CgkJZWxzZSBkX3AudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKCX0KCXRoaXMudmlzaWJsZSA9IHRydWU7Cglmb3IodmFyIGRfaSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBkX2k7KQoJCWlmKCEoZF9vID0gdGhpcy5jaGlsZHJlblstLWRfaV0pLmRldGFjaGVkKSBkX28uc2hvdygpOwp9OwpERE9iai5wcm90b3R5cGUucmVzaXplVG8gPSBmdW5jdGlvbihkX3csIGRfaCwgZF9vKQp7CglpZighdGhpcy5kaXYpIHJldHVybjsKCWRfdyA9ICh0aGlzLncgPSBkZC5JbnQoZF93KSktdGhpcy5kdzsKCWRfaCA9ICh0aGlzLmggPSBkZC5JbnQoZF9oKSktdGhpcy5kaDsKCWlmKGRkLm40KQoJewoJCXRoaXMuZGl2LnJlc2l6ZVRvKGRfdywgZF9oKTsKCQlpZih0aGlzLmlzX2ltYWdlKQoJCXsKCQkJdGhpcy53cml0ZSgnPGltZyBzcmM9IicgKyB0aGlzLnNyYyArICciIHdpZHRoPSInICsgZF93ICsgJyIgaGVpZ2h0PSInICsgZF9oICsgJyI+Jyk7CgkJCSh0aGlzLm5pbWcgPSB0aGlzLmRpdi5kb2N1bWVudC5pbWFnZXNbMF0pLnNyYyA9IHRoaXMuc3JjOwoJCX0KCX0KCWVsc2UgaWYodHlwZW9mIHRoaXMuY3NzLnBpeGVsV2lkdGggIT0gZGRfdSkKCXsKCQl0aGlzLmNzcy5waXhlbFdpZHRoID0gZF93OwoJCXRoaXMuY3NzLnBpeGVsSGVpZ2h0ID0gZF9oOwoJCWlmKHRoaXMuaXNfaW1hZ2UpCgkJewoJCQkoZF9vID0gdGhpcy5uaW1nLnN0eWxlKS5waXhlbFdpZHRoID0gZF93OwoJCQlkX28ucGl4ZWxIZWlnaHQgPSBkX2g7CgkJfQoJfQoJZWxzZQoJewoJCXRoaXMuY3NzLndpZHRoID0gZF93ICsgZGQucHg7CgkJdGhpcy5jc3MuaGVpZ2h0ID0gZF9oICsgZGQucHg7CgkJaWYodGhpcy5pc19pbWFnZSkKCQl7CgkJCShkX28gPSB0aGlzLm5pbWcpLndpZHRoID0gZF93OwoJCQlkX28uaGVpZ2h0ID0gZF9oOwoJCQlpZighZF9vLmNvbXBsZXRlKSBkX28uc3JjID0gdGhpcy5zcmM7CgkJfQoJfQp9OwpERE9iai5wcm90b3R5cGUucmVzaXplQnkgPSBmdW5jdGlvbihkX2R3LCBkX2RoKQp7Cgl0aGlzLnJlc2l6ZVRvKHRoaXMudytkZC5JbnQoZF9kdyksIHRoaXMuaCtkZC5JbnQoZF9kaCkpOwp9OwpERE9iai5wcm90b3R5cGUuc3dhcEltYWdlID0gZnVuY3Rpb24oZF94LCBkX2NwKQp7CglpZighdGhpcy5uaW1nKSByZXR1cm47Cgl0aGlzLm5pbWcuc3JjID0gZF94OwoJdGhpcy5zcmMgPSB0aGlzLm5pbWcuc3JjOwoJaWYoZF9jcCkKCXsKCQlmb3IodmFyIGRfaSA9IHRoaXMuY29waWVzLmxlbmd0aDsgZF9pOykKCQl7LS1kX2k7CgkJCXRoaXMuY29waWVzW2RfaV0uc3JjID0gdGhpcy5jb3BpZXNbZF9pXS5uaW1nLnNyYyA9IHRoaXMubmltZy5zcmM7CgkJfQoJfQp9OwpERE9iai5wcm90b3R5cGUuc2V0QmdDb2xvciA9IGZ1bmN0aW9uKGRfeCkKewoJaWYoZGQubjQgJiYgdGhpcy5kaXYpIHRoaXMuZGl2LmJnQ29sb3IgPSBkX3g7CgllbHNlIGlmKHRoaXMuY3NzKSB0aGlzLmNzcy5iYWNrZ3JvdW5kID0gZF94OwoJdGhpcy5iZ0NvbG9yID0gZF94Owp9OwpERE9iai5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkX3gsIGRfbykKewoJdGhpcy50ZXh0ID0gZF94OwoJaWYoIXRoaXMuZGl2KSByZXR1cm47CglpZihkZC5uNCkKCXsKCQkoZF9vID0gdGhpcy5kaXYuZG9jdW1lbnQpLm9wZW4oKTsKCQlkX28ud3JpdGUoZF94KTsKCQlkX28uY2xvc2UoKTsKCQlkZC5nZXRXSCh0aGlzKTsKCX0KCWVsc2UKCXsKCQl0aGlzLmNzcy5oZWlnaHQgPSAnYXV0byc7CgkJdGhpcy5kaXYuaW5uZXJIVE1MID0gZF94OwoJCWlmKCFkZC5pZTQpIGRkLnJlY2FsYygpOwoJCWlmKGRkLmllNCB8fCBkZC5uNikgc2V0VGltZW91dCgnZGQucmVjYWxjKCk7JywgMCk7IC8vIG42LjA6IHJlY2FsYyB0d2ljZQoJfQp9OwpERE9iai5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uKGRfbiwgZF9wLCBkX2IpCnsKCWlmKCF0aGlzLm9pbWcpIHJldHVybjsKCWRfYiA9IChkZC5pZSAmJiBkb2N1bWVudC5hbGwudGFncygnYm9keScpKT8gZG9jdW1lbnQuYWxsLnRhZ3MoJ2JvZHknKVswXSA6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lPyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSB8fCBkZC5kYikgOiBkZC5kYjsKCWZvcihkX24gPSBkX24gfHwgMTsgZF9uID4gMDsgLS1kX24pCgl7CgkJdmFyIGRfbCA9IHRoaXMuY29waWVzLmxlbmd0aCwKCQlkX28gPSBuZXcgRERPYmoodGhpcy5uYW1lK3RoaXMuY21kLCBkX2wrMSk7CgkJaWYoZGQubjQpCgkJewoJCQlkX28uaWQgPSAoZF9wID0gbmV3IExheWVyKGRfby53KSkubmFtZTsKCQkJZF9wLmNsaXAuaGVpZ2h0ID0gZF9vLmg7CgkJCWRfcC52aXNpYmlsaXR5ID0gJ3Nob3cnOwoJCQkoZF9wID0gZF9wLmRvY3VtZW50KS5vcGVuKCk7CgkJCWRfcC53cml0ZShkX28uaHRtKTsKCQkJZF9wLmNsb3NlKCk7CgkJfQoJCWVsc2UgaWYoZF9iICYmIGRfYi5pbnNlcnRBZGphY2VudEhUTUwpIGRfYi5pbnNlcnRBZGphY2VudEhUTUwoIkFmdGVyQmVnaW4iLCBkX28udF9odG0pOwoJCWVsc2UgaWYoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAmJiBkX2IgJiYgZF9iLmFwcGVuZENoaWxkKQoJCXsKCQkJZF9iLmFwcGVuZENoaWxkKGRfcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRJaTE1diIpKTsKCQkJZF9wLmlubmVySFRNTCA9IGRfby5odG07CgkJCWRfcC5pZCA9IGRfby5pZDsKCQkJZF9wLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKCQkJZF9wLnN0eWxlLndpZHRoID0gZF9vLncgKyAncHgnOwoJCQlkX3Auc3R5bGUuaGVpZ2h0ID0gZF9vLmggKyAncHgnOwoJCX0KCQllbHNlIGlmKGRfYiAmJiBkX2IuaW5uZXJIVE1MKSBkX2IuaW5uZXJIVE1MICs9IGRfby50X2h0bTsKCQlkX28uZGVmeiA9IHRoaXMuZGVmeisxK2RfbDsKCQlkZC5hZGRQcm9wcyhkX28pOwoJCWRfby5vcmlnaW5hbCA9IHRoaXM7CgkJZGQuYWRkRWx0KGRfbywgdGhpcyk7CgkJaWYodGhpcy5wYXJlbnQpCgkJewoJCQl0aGlzLnBhcmVudC5hZGRDaGlsZChkX28sIHRoaXMuZGV0YWNoZWQpOwoJCQlkX28uZGVmcGFyZW50ID0gdGhpcy5kZWZwYXJlbnQ7CgkJfQoJCWRfby5tb3ZlVG8oZF9vLmRlZnggPSB0aGlzLmRlZngsIGRfby5kZWZ5ID0gdGhpcy5kZWZ5KTsKCQlpZihkZC5uNCkgZF9vLmRlZnNyYyA9IGRfby5zcmMgPSB0aGlzLmRlZnNyYzsKCQlkX28uc3dhcEltYWdlKHRoaXMuc3JjKTsKCX0KfTsKRERPYmoucHJvdG90eXBlLmFkZENoaWxkID0gZnVuY3Rpb24oZF9rZCwgZGV0YWNoLCBkZWZwKQp7CglpZih0eXBlb2YgZF9rZCAhPSAib2JqZWN0IikgZF9rZCA9IGRkLmVsZW1lbnRzW2Rfa2RdOwoJaWYoZF9rZC5wYXJlbnQgJiYgZF9rZC5wYXJlbnQgPT0gdGhpcyB8fCBkX2tkID09IHRoaXMgfHwgIWRfa2QuaXNfaW1hZ2UgJiYgZF9rZC5kZWZwYXJlbnQgJiYgIWRlZnApIHJldHVybjsKCgl0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoXSA9IHRoaXMuY2hpbGRyZW5bZF9rZC5uYW1lXSA9IGRfa2Q7CglkX2tkLmRldGFjaGVkID0gZGV0YWNoIHx8IDA7CglpZihkZWZwKSBkX2tkLmRlZnBhcmVudCA9IHRoaXM7CgllbHNlIGlmKHRoaXMgPT0gZF9rZC5kZWZwYXJlbnQgJiYgZF9rZC5pc19pbWFnZSkgZGQuZ2V0SW1nKHRoaXMsIGRfa2Qub2ltZy5uYW1lLCAxKTsKCWlmKCFkX2tkLmRlZnBhcmVudCB8fCB0aGlzICE9IGRfa2QuZGVmcGFyZW50KQoJewoJCWRfa2QuZGVmeCA9IGRfa2QueDsKCQlkX2tkLmRlZnkgPSBkX2tkLnk7Cgl9CglpZighZGV0YWNoKQoJewoJCWRfa2QuZGVmeiA9IGRfa2QuZGVmeit0aGlzLmRlZnotKGRfa2QucGFyZW50PyBkX2tkLnBhcmVudC5kZWZ6IDogMCkrKCFkX2tkLmlzX2ltYWdlKjEpOwoJCWRfa2Quc2V0WihkX2tkLnordGhpcy56LShkX2tkLnBhcmVudD8gZF9rZC5wYXJlbnQueiA6IDApKyghZF9rZC5pc19pbWFnZSoxKSwgMSk7Cgl9CglpZihkX2tkLnBhcmVudCkgZF9rZC5wYXJlbnQucmVtb3ZlQ2hpbGQoZF9rZCwgMSk7CglkX2tkLnBhcmVudCA9IHRoaXM7Cn07CkRET2JqLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGRfa2QsIGRfbmV3cCkKewoJaWYodHlwZW9mIGRfa2QgIT0gIm9iamVjdCIpIGRfa2QgPSB0aGlzLmNoaWxkcmVuW2Rfa2RdOwoJdmFyIGRfb2MgPSB0aGlzLmNoaWxkcmVuLCBkX25jID0gbmV3IEFycmF5KCk7Cglmb3IodmFyIGRfaSA9IDA7IGRfaSA8IGRfb2MubGVuZ3RoOyBkX2krKykKCQlpZihkX29jW2RfaV0gIT0gZF9rZCkgZF9uY1tkX25jLmxlbmd0aF0gPSBkX29jW2RfaV07Cgl0aGlzLmNoaWxkcmVuID0gZF9uYzsKCWRfa2QucGFyZW50ID0gbnVsbDsKCWlmKCFkX25ld3ApCgl7CgkJZF9rZC5kZXRhY2hlZCA9IGRfa2QuZGVmcCA9IDA7CgkJaWYoZF9rZC5pc19pbWFnZSkgZGQuZ2V0SW1nKGRfa2QsIGRfa2Qub2ltZy5uYW1lLCAxKTsKCX0KfTsKRERPYmoucHJvdG90eXBlLmF0dGFjaENoaWxkID0gZnVuY3Rpb24oZF9rZCkKewoJKGRfa2QgPSAodHlwZW9mIGRfa2QgIT0gIm9iamVjdCIpPyB0aGlzLmNoaWxkcmVuW2Rfa2RdOiBkX2tkKS5kZXRhY2hlZCA9IDA7CglkX2tkLnNldFooZF9rZC5kZWZ6ICsgdGhpcy56LXRoaXMuZGVmeiwgMSk7Cn07CkRET2JqLnByb3RvdHlwZS5kZXRhY2hDaGlsZCA9IGZ1bmN0aW9uKGRfa2QpCnsKCShkX2tkID0gKHR5cGVvZiBkX2tkICE9ICJvYmplY3QiKT8gdGhpcy5jaGlsZHJlbltkX2tkXTogZF9rZCkuZGV0YWNoZWQgPSAxOwp9OwpERE9iai5wcm90b3R5cGUuc2V0WiA9IGZ1bmN0aW9uKGRfeCwgZF9rZHMsIGRfbykKewoJaWYoZF9rZHMpCgl7CgkJZm9yKHZhciBkX2R6ID0gZF94LXRoaXMueiwgZF9pID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGRfaTspCgkJCWlmKCEoZF9vID0gdGhpcy5jaGlsZHJlblstLWRfaV0pLmRldGFjaGVkKSBkX28uc2V0WihkX28ueitkX2R6LCAxKTsKCX0KCWRkLnogPSBNYXRoLm1heChkZC56LCB0aGlzLnogPSB0aGlzLmRpdj8gKCh0aGlzLmNzcyB8fCB0aGlzLmRpdikuekluZGV4ID0gZF94KSA6IDApOwp9OwpERE9iai5wcm90b3R5cGUubWF4aW1pemVaID0gZnVuY3Rpb24oKQp7Cgl0aGlzLnNldFooZGQueisxLCAxKTsKfTsKRERPYmoucHJvdG90eXBlLl9yZXNldFogPSBmdW5jdGlvbihkX28pCnsKCWlmKHRoaXMucmVfeiB8fCBkZC5yZV96KQoJewoJCXRoaXMuc2V0Wih0aGlzLmRlZnopOwoJCWZvcih2YXIgZF9pID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGRfaTspCgkJCWlmKCEoZF9vID0gdGhpcy5jaGlsZHJlblstLWRfaV0pLmRldGFjaGVkKSBkX28uc2V0WihkX28uZGVmeik7Cgl9Cn07CkRET2JqLnByb3RvdHlwZS5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZF94KQp7Cgl0aGlzLm9wYWNpdHkgPSBkX3g7Cgl0aGlzLl9zZXRPcGFSZWwoMS4wLCAxKTsKfTsKRERPYmoucHJvdG90eXBlLl9zZXRPcGFSZWwgPSBmdW5jdGlvbihkX3gsIGRfa2QsIGRfeSwgZF9vKQp7CglpZih0aGlzLmNzcyAmJiAodGhpcy5kaWFwaGFuIHx8IGRfa2QpKQoJewoJCWRfeSA9IHRoaXMub3BhY2l0eSpkX3g7CgkJaWYodHlwZW9mIHRoaXMuY3NzLk1vek9wYWNpdHkgIT0gZGRfdSkgdGhpcy5jc3MuTW96T3BhY2l0eSA9IGRfeTsKCQllbHNlIGlmICh0eXBlb2YgdGhpcy5jc3Mub3BhY2l0eSAhPSBkZF91KSB0aGlzLmNzcy5vcGFjaXR5ID0gZF95OwoJCWVsc2UgaWYodHlwZW9mIHRoaXMuY3NzLmZpbHRlciAhPSBkZF91KQoJCQl0aGlzLmNzcy5maWx0ZXIgPSAiQWxwaGEob3BhY2l0eT0iK3BhcnNlSW50KDEwMCpkX3kpKyIpIjsKCQlmb3IodmFyIGRfaSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBkX2k7KQoJCQlpZighKGRfbyA9IHRoaXMuY2hpbGRyZW5bLS1kX2ldKS5kZXRhY2hlZCkgZF9vLl9zZXRPcGFSZWwoZF94LCAxKTsKCX0KfTsKRERPYmoucHJvdG90eXBlLnNldEN1cnNvciA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy5fc2V0Q3JzKHRoaXMuY3Vyc29yID0gKGRfeC5pbmRleE9mKCdjOicpKzEpPyBkX3guc3Vic3RyaW5nKDIpIDogZF94KTsKfTsKRERPYmoucHJvdG90eXBlLl9zZXRDcnMgPSBmdW5jdGlvbihkX3gpCnsKCWlmKHRoaXMuY3NzKSB0aGlzLmNzcy5jdXJzb3IgPSAoKCFkZC5pZSB8fCBkZC5pZW1hYykgJiYgZF94ID09ICdoYW5kJyk/ICdwb2ludGVyJyA6IGRfeDsKfTsKRERPYmoucHJvdG90eXBlLnNldERyYWdnYWJsZSA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy5ub2RyYWcgPSAhZF94KjE7Cgl0aGlzLl9zZXRDcnMoZF94PyB0aGlzLmN1cnNvciA6ICdhdXRvJyk7Cn07CkRET2JqLnByb3RvdHlwZS5zZXRSZXNpemFibGUgPSBmdW5jdGlvbihkX3gpCnsKCXRoaXMucmVzaXphYmxlID0gZF94KjE7CglpZihkX3gpIHRoaXMuc2NhbGFibGUgPSAwOwp9OwpERE9iai5wcm90b3R5cGUuc2V0U2NhbGFibGUgPSBmdW5jdGlvbihkX3gpCnsKCXRoaXMuc2NhbGFibGUgPSBkX3gqMTsKCWlmKGRfeCkgdGhpcy5yZXNpemFibGUgPSAwOwp9OwpERE9iai5wcm90b3R5cGUuc2V0SG9yaXpvbnRhbCA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy5ob3Jpem9udGFsID0gZF94KjE7Cn07CkRET2JqLnByb3RvdHlwZS5zZXRWZXJ0aWNhbCA9IGZ1bmN0aW9uKGRfeCkKewoJdGhpcy52ZXJ0aWNhbCA9IGRfeCoxOwp9OwpERE9iai5wcm90b3R5cGUuZ2V0RWx0QmVsb3cgPSBmdW5jdGlvbihkX3JldCwgZF94LCBkX3kpCnsKCXZhciBkX28sIGRfY21wID0gLTEsIGRfaSA9IGRkLmVsZW1lbnRzLmxlbmd0aDsgd2hpbGUoZF9pLS0pCgl7CgkJZF9vID0gZGQuZWxlbWVudHNbZF9pXTsKCQlkX3ggPSBkX28ueC10aGlzLncvMjsKCQlkX3kgPSBkX28ueS10aGlzLmgvMjsKCQlpZihkX28udmlzaWJsZSAmJiBkX28ueiA8IHRoaXMueiAmJiB0aGlzLnggPj0gZF94ICYmIHRoaXMueCA8PSBkX3grZF9vLncgJiYgdGhpcy55ID49IGRfeSAmJiB0aGlzLnkgPD0gZF95K2Rfby5oKQoJCXsKCQkJaWYoZF9vLnogPiBkX2NtcCkKCQkJewoJCQkJZF9jbXAgPSBkX28uejsKCQkJCWRfcmV0ID0gZF9vOwoJCQl9CgkJfQoJfQoJcmV0dXJuIGRfcmV0Owp9OwpERE9iai5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24oZF9vcywgZF9vKQp7Cgl2YXIgZF9pLCBkX2w7CglpZih0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCkgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7CglpZih0aGlzLm9yaWdpbmFsKQoJewoJCXRoaXMuaGlkZSgpOwoJCWlmKHRoaXMub3JpZ2luYWwuY29waWVzKQoJCXsKCQkJZF9vcyA9IG5ldyBBcnJheSgpOwoJCQlmb3IoZF9sID0gdGhpcy5vcmlnaW5hbC5jb3BpZXMubGVuZ3RoLCBkX2kgPSAwOyBkX2kgPCBkX2w7IGRfaSsrKQoJCQkJaWYoKGRfbyA9IHRoaXMub3JpZ2luYWwuY29waWVzW2RfaV0pICE9IHRoaXMpIGRfb3NbZF9vLm5hbWVdID0gZF9vc1tkX29zLmxlbmd0aF0gPSBkX287CgkJCXRoaXMub3JpZ2luYWwuY29waWVzID0gZF9vczsKCQl9Cgl9CgllbHNlIGlmKHRoaXMuaXNfaW1hZ2UpCgl7CgkJdGhpcy5oaWRlKCk7CgkJaWYodGhpcy5vaW1nKQoJCXsKCQkgIGlmKGRkLm40KSB0aGlzLm9pbWcuc3JjID0gdGhpcy5kZWZzcmM7CgkJICBlbHNlIHRoaXMub2ltZy5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwoJCX0KCX0KCWVsc2UgaWYodGhpcy5tb3ZlVG8pCgl7CgkJaWYodGhpcy5jc3MpIHRoaXMuY3NzLmN1cnNvciA9ICdkZWZhdWx0JzsKCQl0aGlzLm1vdmVUbyh0aGlzLmRlZngsIHRoaXMuZGVmeSk7CgkJdGhpcy5yZXNpemVUbyh0aGlzLmRlZncsIHRoaXMuZGVmaCk7Cgl9CglkX29zID0gbmV3IEFycmF5KCk7Cglmb3IoZF9sID0gZGQuZWxlbWVudHMubGVuZ3RoLCBkX2kgPSAwOyBkX2kgPCBkX2w7IGRfaSsrKQoJewoJCWlmKChkX28gPSBkZC5lbGVtZW50c1tkX2ldKSAhPSB0aGlzKSBkX29zW2Rfby5uYW1lXSA9IGRfb3NbZF9vLmluZGV4ID0gZF9vcy5sZW5ndGhdID0gZF9vOwoJCWVsc2UgZF9vLl9mcmVlKCk7Cgl9CglkZC5lbGVtZW50cyA9IGRfb3M7CglpZighZGQubjQpIGRkLnJlY2FsYygpOwp9OwpERE9iai5wcm90b3R5cGUuX2ZyZWUgPSBmdW5jdGlvbigpCnsKCWZvcih2YXIgZF9pIGluIHRoaXMpCgkJdGhpc1tkX2ldID0gbnVsbDsKCWRkLmVsZW1lbnRzW3RoaXMubmFtZV0gPSBudWxsOwp9OwpkZC5uNFJlY3RWaXMgPSBmdW5jdGlvbih2aXMpCnsKCWZvcih2YXIgZF9pID0gNDsgZF9pOykKCXstLWRfaTsKCQlkZC5yZWN0SVtkX2ldLnZpc2liaWxpdHkgPSBkZC5yZWN0QVtkX2ldLnZpc2liaWxpdHkgPSB2aXM/ICdzaG93JyA6ICdoaWRlJzsKCQlpZih2aXMpIGRkLnJlY3RJW2RfaV0uekluZGV4ID0gZGQucmVjdEFbZF9pXS56SW5kZXggPSBkZC56KzI7Cgl9Cn07CmRkLm40UmVjdFBvcyA9IGZ1bmN0aW9uKGRfbywgZF94LCBkX3ksIGRfdywgZF9oKQp7CglkX28ueCA9IGRfeDsKCWRfby55ID0gZF95OwoJZF9vLmNsaXAud2lkdGggPSBkX3c7CglkX28uY2xpcC5oZWlnaHQgPSBkX2g7Cn07Ci8vIE5ONDogRHJhdyBpbWcgc2l6aW5nIHJlY3QKZGQubjRSZWN0ID0gZnVuY3Rpb24oZF93LCBkX2gpCnsKCXZhciBkX2k7CglpZighZGQucmVjdEkpCgl7CgkJZGQucmVjdEkgPSBuZXcgQXJyYXkoKTsKCQlkZC5yZWN0QSA9IG5ldyBBcnJheSgpOwoJfQoJaWYoIWRkLnJlY3RJWzBdKQoJewoJCWZvcihkX2kgPSA0OyBkX2k7KQoJCXsKCQkJKGRkLnJlY3RJWy0tZF9pXSA9IG5ldyBMYXllcigxKSkuYmdDb2xvciA9ICcjMDAwMDAwJzsKCQkJKGRkLnJlY3RBW2RfaV0gPSBuZXcgTGF5ZXIoMSkpLmJnQ29sb3IgPSAnI2ZmZmZmZic7CgkJfQoJfQoJaWYoIWRkLnJlY3RJWzBdLnZpc2liaWxpdHkgfHwgZGQucmVjdElbMF0udmlzaWJpbGl0eSA9PSAnaGlkZScpIGRkLm40UmVjdFZpcygxKTsKCWRkLm9iai53ID0gZF93OwoJZGQub2JqLmggPSBkX2g7Cglmb3IoZF9pID0gNDsgZF9pOykKCXstLWRfaTsKCQlkZC5uNFJlY3RQb3MoZGQucmVjdElbZF9pXSwgZGQub2JqLnggKyAoIShkX2ktMSk/IChkZC5vYmoudy0xKSA6IDApLCBkZC5vYmoueSArICghKGRfaS0yKT8gKGRkLm9iai5oLTEpIDogMCksIGRfaSYxIHx8IGRkLm9iai53LCAhKGRfaSYxKSB8fCBkZC5vYmouaCk7CgkJZGQubjRSZWN0UG9zKGRkLnJlY3RBW2RfaV0sICEoZF9pLTEpPyBkZC5yZWN0SVsxXS54KzEgOiAoZGQub2JqLngtMSksICEoZF9pLTIpPyBkZC5yZWN0SVsyXS55KzEgOiAoZGQub2JqLnktMSksIGRfaSYxIHx8IGRkLm9iai53KzIsICEoZF9pJjEpIHx8IGRkLm9iai5oKzIpOwoJfQp9OwpkZC5yZXN6VG8gPSBmdW5jdGlvbihkX3csIGRfaCkKewoJaWYoZGQubjQgJiYgZGQub2JqLmlzX2ltYWdlKSBkZC5uNFJlY3QoZF93LCBkX2gpOwoJZWxzZSBkZC5vYmoucmVzaXplVG8oZF93LCBkX2gpOwp9OwpkZC5lbWJlZFZpcyA9IGZ1bmN0aW9uKGRfdmlzKQp7Cgl2YXIgZF9vID0gbmV3IEFycmF5KCdpZnJhbWUnLCAnYXBwbGV0JywgJ2VtYmVkJywgJ29iamVjdCcpOwoJZm9yKHZhciBkX2kgPSBkX28ubGVuZ3RoOyBkX2k7KQoJey0tZF9pOwoJCXZhciBkX3AgPSBkZC5pZT8gZG9jdW1lbnQuYWxsLnRhZ3MoZF9vW2RfaV0pIDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWU/IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGRfb1tkX2ldKSA6IG51bGw7CgkJaWYoZF9wKQoJCXsKCQkJZm9yKHZhciBkX2ogPSBkX3AubGVuZ3RoOyBkX2o7KQoJCQl7CgkJCQl2YXIgZF9xID0gZF9wWy0tZF9qXTsKCQkJCXdoaWxlKGRfcS5vZmZzZXRQYXJlbnQgfHwgZF9xLnBhcmVudE5vZGUpCgkJCQl7CgkJCQkJaWYoKGRfcSA9IGRfcS5wYXJlbnROb2RlIHx8IGRfcS5vZmZzZXRQYXJlbnQgfHwgbnVsbCkgPT0gZGQub2JqLmRpdikKCQkJCQl7CgkJCQkJCWRfcFtkX2pdLnN0eWxlLnZpc2liaWxpdHkgPSBkX3ZpczsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQp9OwoKZGQubWF4T2ZmWCA9IGZ1bmN0aW9uKGRfeCwgZF95KQp7CglyZXR1cm4oCgkJKGRkLm9iai5tYXhvZmZsKzEgJiYgKGRfeSA9IGRkLm9iai5kZWZ4LWRkLm9iai5tYXhvZmZsKS1kX3ggPiAwCgkJfHwgZGQub2JqLm1heG9mZnIrMSAmJiAoZF95ID0gZGQub2JqLmRlZngrZGQub2JqLm1heG9mZnIpLWRfeCA8IDApPyBkX3kKCQk6IGRfeAoJKTsKfTsKZGQubWF4T2ZmWSA9IGZ1bmN0aW9uKGRfeCwgZF95KQp7CglyZXR1cm4oCgkJKGRkLm9iai5tYXhvZmZ0KzEgJiYgKGRfeSA9IGRkLm9iai5kZWZ5LWRkLm9iai5tYXhvZmZ0KS1kX3ggPiAwCgkJfHwgZGQub2JqLm1heG9mZmIrMSAmJiAoZF95ID0gZGQub2JqLmRlZnkrZGQub2JqLm1heG9mZmIpLWRfeCA8IDApPyBkX3kKCQk6IGRfeAoJKTsKfTsKZGQuaW5XbmRXID0gZnVuY3Rpb24oZF94LCBkX3kpCnsKCXZhciBkX3d4ID0gZGQuZ2V0U2Nyb2xsWCgpLAoJZF93dyA9IGRkLmdldFduZFcoKTsKCXJldHVybigKCQkoKGRfeSA9IGRfd3grMiktZF94ID4gMCkgfHwgKChkX3kgPSBkX3d4K2Rfd3crZGQub2JqLnctMiktZF94IDwgMCk/IGRfeQoJCTogZF94CgkpOwp9OwpkZC5pblduZEggPSBmdW5jdGlvbihkX3gsIGRfeSkKewoJdmFyIGRfd3kgPSBkZC5nZXRTY3JvbGxZKCksCglkX3doID0gZGQuZ2V0V25kSCgpOwoJcmV0dXJuKAoJCSgoZF95ID0gZF93eSsyKS1kX3ggPiAwKSB8fCAoKGRfeSA9IGRfd3krZF93aCtkZC5vYmouaC0yKS1kX3ggPCAwKT8gZF95CgkJOiBkX3gKCSk7Cn07Ci8vIFRoZXNlIHR3byBmdW5jcyBsaW1pdCB0aGUgc2l6ZSBvZiBlbGVtZW50IHdoZW4gbW91c2VyZXNpemVkLgovLyBJbXBsZW1lbnRlZCAyMi41LjIwMDMgYnkgR3JlZ29yIEx0b2xmLCBtb2RpZmllZCBieSBXYWx0ZXIgWm9ybgpkZC5saW1XID0gZnVuY3Rpb24oZF93KQp7CglyZXR1cm4oCgkJKGRkLm9iai5taW53LWRfdyA+IDApPyBkZC5vYmoubWludwoJCTogKGRkLm9iai5tYXh3ID4gMCAmJiBkZC5vYmoubWF4dy1kX3cgPCAwKT8gZGQub2JqLm1heHcKCQk6IGRfdwoJKTsKfTsKZGQubGltSCA9IGZ1bmN0aW9uKGRfaCkKewoJcmV0dXJuKAoJCShkZC5vYmoubWluaC1kX2ggPiAwKT8gZGQub2JqLm1pbmgKCQk6IChkZC5vYmoubWF4aCA+IDAgJiYgZGQub2JqLm1heGgtZF9oIDwgMCk/IGRkLm9iai5tYXhoCgkJOiBkX2gKCSk7Cn07Ci8vIE9wdGlvbmFsIGF1dG9zY3JvbGwtcGFnZSBmdW5jdGlvbmFsaXR5LiBDb3VydGVzeSBDZWRyaWMgU2F2YXJlc2UuCi8vIE1vZGlmaWVkIGJ5IFdhbHRlciBab3JuLgpmdW5jdGlvbiBERFNjcm9sbCgpCnsKCWlmKCFkZC5vYmogfHwgIWRkLm9iai5zY3JvbGwgJiYgIWRkLnNjcm9sbCB8fCBkZC5pZTQgfHwgZGQud2hyYXRpbykKCXsKCQlkZC5zY3J4ID0gZGQuc2NyeSA9IDA7CgkJcmV0dXJuOwoJfQoJdmFyIGRfYm5kID0gMHgxYywKCWRfd3ggPSBkZC5nZXRTY3JvbGxYKCksIGRfd3kgPSBkZC5nZXRTY3JvbGxZKCk7CglpZihkZC5tc21vdmVkKQoJewoJCXZhciBkX3d3ID0gZGQuZ2V0V25kVygpLCBkX3doID0gZGQuZ2V0V25kSCgpLCBkX3k7CgkJZGQuc2NyeCA9ICgoZF95ID0gZGQuZS54LWRfd3ctZF93eCtkX2JuZCkgPiAwKT8gKGRfeT4+PTIpKmRfeQoJCQk6ICgoZF95ID0gZF93eCtkX2JuZC1kZC5lLngpID4gMCk/IC0oZF95Pj49MikqZF95CgkJCTogMDsKCQlkZC5zY3J5ID0gKChkX3kgPSBkZC5lLnktZF93aC1kX3d5K2RfYm5kKSA+IDApPyAoZF95Pj49MikqZF95CgkJCTogKChkX3kgPSBkX3d5K2RfYm5kLWRkLmUueSkgPiAwKT8gLShkX3k+Pj0yKSpkX3kKCQkJOiAwOwoJfQoJaWYoZGQuc2NyeCB8fCBkZC5zY3J5KQoJewoJCXdpbmRvdy5zY3JvbGxUbygKCQkJZF93eCArIChkZC5zY3J4ID0gZGQub2JqLmlzX3Jlc2l6ZWQ/IGRkLmxpbVcoZGQub2JqLncrZGQuc2NyeCktZGQub2JqLncgOiBkZC5vYmoudmVydGljYWw/IDAgOiAoZGQubWF4T2ZmWChkZC5vYmoueCtkZC5zY3J4KS1kZC5vYmoueCkpLAoJCQlkX3d5ICsgKGRkLnNjcnkgPSBkZC5vYmouaXNfcmVzaXplZD8gZGQubGltSChkZC5vYmouaCtkZC5zY3J5KS1kZC5vYmouaCA6IGRkLm9iai5ob3Jpem9udGFsPyAwIDogKGRkLm1heE9mZlkoZGQub2JqLnkrZGQuc2NyeSktZGQub2JqLnkpKQoJCSk7CgkJZGQub2JqLmlzX2RyYWdnZWQ/IGRkLm9iai5tb3ZlVG8oZGQub2JqLngrZGQuZ2V0U2Nyb2xsWCgpLWRfd3gsIGRkLm9iai55K2RkLmdldFNjcm9sbFkoKS1kX3d5KQoJCQk6IGRkLnJlc3pUbyhkZC5vYmoudytkZC5nZXRTY3JvbGxYKCktZF93eCwgZGQub2JqLmgrZGQuZ2V0U2Nyb2xsWSgpLWRfd3kpOwoJfQoJZGQubXNtb3ZlZCA9IDA7Cgl3aW5kb3cuc2V0VGltZW91dCgnRERTY3JvbGwoKScsIDB4MzMpOwp9CmZ1bmN0aW9uIFBJQ0soZF9ldikKewoJZGQuZSA9IG5ldyBkZC5ldnQoZF9ldik7CglpZihkZC5lLnggPj0gZGQuZ2V0V25kVygpK2RkLmdldFNjcm9sbFgoKSB8fCBkZC5lLnkgPj0gZGQuZ2V0V25kSCgpK2RkLmdldFNjcm9sbFkoKSkgcmV0dXJuIHRydWU7IC8vIG9uIHNjcm9sbGJhcgoJZm9yKHZhciBkX28sIGRfdCwgZF9jbXAgPSAtMSwgZF9pID0gZGQuZWxlbWVudHMubGVuZ3RoOyBkX2k7KQoJewoJCWRfbyA9IGRkLmVsZW1lbnRzWy0tZF9pXTsKCQlpZihkZC5uNCAmJiBkZC5lLmJ1dCA+IDEgJiYgZGQuZS5zcmMgPT0gZF9vLm9pbWcgJiYgIWRfby5jbG9uZSkgcmV0dXJuIGZhbHNlOwoJCWlmKGRfby52aXNpYmxlICYmIGRkLmUuYnV0IDw9IDEgJiYgZGQuZS54ID49IGRfby54ICYmIGRkLmUueCA8PSBkX28ueCtkX28udyAmJiBkZC5lLnkgPj0gZF9vLnkgJiYgZGQuZS55IDw9IGRfby55K2Rfby5oKQoJCXsKCQkJaWYoZF9vLnogPiBkX2NtcCAmJiAoZF90ID0gZGQuZS5zcmMudGFnKS5pbmRleE9mKCdpbnB1JykgPCAwICYmIGRfdC5pbmRleE9mKCd0ZXh0YScpIDwgMCAmJiBkX3QuaW5kZXhPZignc2VsZScpIDwgMCAmJiBkX3QuaW5kZXhPZignb3B0aScpIDwgMCAmJiBkX3QuaW5kZXhPZignc2Nyb2wnKSA8IDApCgkJCXsKCQkJCWRfY21wID0gZF9vLno7CgkJCQlkZC5vYmogPSBkX287CgkJCX0KCQl9Cgl9CglpZihkZC5vYmopCgl7CgkJaWYoZGQub2JqLm5vZHJhZykgZGQub2JqID0gbnVsbDsKCQllbHNlCgkJewoJCQlkZC5lLmUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQkJdmFyIGRfcnN6ID0gZGQuZS5tb2RpZktleSAmJiAoZGQub2JqLnJlc2l6YWJsZSB8fCBkZC5vYmouc2NhbGFibGUpOwoJCQlpZihkZC5vcCkKCQkJewoJCQkJKGRfbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdPcEJsVXInKSkuc3R5bGUucGl4ZWxMZWZ0ID0gZGQuZS54OwoJCQkJZF9vLnN0eWxlLnBpeGVsVG9wID0gZGQuZS55OwoJCQkJKGRfbyA9IGRfby5jaGlsZHJlblswXS5jaGlsZHJlblswXSkuZm9jdXMoKTsKCQkJCWRfby5ibHVyKCk7CgkJCX0KCQkJZWxzZSBpZihkZC5pZSAmJiAhZGQuaWU0KQoJCQl7CgkJCQlpZihkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTsKCQkJCWRkLmRiLm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbigpCgkJCQl7CgkJCQkJZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQkJCX07CgkJCX0KCQkJaWYoZF9yc3opCgkJCXsKCQkJCWRkLm9iai5fc2V0Q3JzKCdzZS1yZXNpemUnKTsKCQkJCWRkLm9iai5pc19yZXNpemVkID0gMTsKCQkJCWRkLndocmF0aW8gPSBkZC5vYmouc2NhbGFibGU/IGRkLm9iai5kZWZ3L2RkLm9iai5kZWZoIDogMDsKCQkJCWlmKGRkLmllKQoJCQkJewoJCQkJCWlmKGRkLmllNCkKCQkJCQl7CgkJCQkJCXdpbmRvdy5kZF94ID0gZGQuZ2V0U2Nyb2xsWCgpOwoJCQkJCQl3aW5kb3cuZGRfeSA9IGRkLmdldFNjcm9sbFkoKTsKCQkJCQl9CgkJCQkJc2V0VGltZW91dCgKCQkJCQkJJ2lmKGRkLm9iaiAmJiBkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KScrCgkJCQkJCSd7JysKCQkJCQkJCSdkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTsnKwoJCQkJCQkJJ2lmKGRkLmllNCkgd2luZG93LnNjcm9sbFRvKHdpbmRvdy5kZF94LCB3aW5kb3cuZGRfeSk7JysKCQkJCQkJJ30nCgkJCQkJLDApOwoJCQkJfQoJCQkJZGQuc2V0TW92SGRsKFJFU0laRSk7CgkJCQlkZC5yZXN6VG8oZGQub2JqLncsIGRkLm9iai5oKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWRkLm9iai5pc19kcmFnZ2VkID0gMTsKCQkJCWRkLnNldE1vdkhkbChEUkFHKTsKCQkJfQoJCQlkZC5zZXRVcEhkbChEUk9QKTsKCQkJZGQuZW1iZWRWaXMoJ2hpZGRlbicpOwoJCQlkZC5vYmouX3NldE9wYVJlbCgwLjcpOwoJCQlkZC5vYmoubWF4aW1pemVaKCk7CgkJCWRkLm9meCA9IGRkLm9iai54K2RkLm9iai53LWRkLmUueDsKCQkJZGQub2Z5ID0gZGQub2JqLnkrZGQub2JqLmgtZGQuZS55OwoJCQlpZih3aW5kb3cubXlfUGlja0Z1bmMpIG15X1BpY2tGdW5jKCk7CgkJCWlmKGRkLm9iai5waWNrRnVuYykgZGQub2JqLnBpY2tGdW5jKCk7CgkJCUREU2Nyb2xsKCk7CgkJCXJldHVybiAhKAoJCQkJZGQub2JqLmlzX3Jlc2l6ZWQKCQkJCXx8IGRkLm40ICYmIGRkLm9iai5pc19pbWFnZQoJCQkJfHwgZGQubjYgfHwgZGQudzNjCgkJCSk7CgkJfQoJfQoJaWYoZGQuZG93bkZ1bmMpIHJldHVybiBkZC5kb3duRnVuYyhkX2V2KTsKCXJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIERSQUcoZF9ldikKewoJaWYoIWRkLm9iaiB8fCAhZGQub2JqLnZpc2libGUpIHJldHVybiB0cnVlOwoJaWYoZGQuaWU0IHx8IGRkLnczYyB8fCBkZC5uNiB8fCBkZC5vYmouY2hpbGRyZW4ubGVuZ3RoID4gMHhmKQoJewoJCWlmKGRkLndhaXQpIHJldHVybiBmYWxzZTsKCQlkZC53YWl0ID0gMTsKCQlzZXRUaW1lb3V0KCdkZC53YWl0ID0gMDsnLCBkZC50V2FpdCk7Cgl9CglkZC5lID0gbmV3IGRkLmV2dChkX2V2KTsKCWlmKGRkLmllICYmICFkZC5lLmJ1dCkKCXsKCQlEUk9QKGRfZXYpOwoJCXJldHVybiB0cnVlOwoJfQoJZGQubXNtb3ZlZCA9IDE7CglkZC5vYmoubW92ZVRvKAoJCWRkLm9iai52ZXJ0aWNhbD8gZGQub2JqLnggOiBkZC5tYXhPZmZYKGRkLmluV25kVyhkZC5vZngrZGQuZS54KS1kZC5vYmoudyksCgkJZGQub2JqLmhvcml6b250YWw/IGRkLm9iai55IDogZGQubWF4T2ZmWShkZC5pblduZEgoZGQub2Z5K2RkLmUueSktZGQub2JqLmgpCgkpOwoKCWlmKHdpbmRvdy5teV9EcmFnRnVuYykgbXlfRHJhZ0Z1bmMoKTsKCWlmKGRkLm9iai5kcmFnRnVuYykgZGQub2JqLmRyYWdGdW5jKCk7CglpZihkZC5tb3ZlRnVuYykgcmV0dXJuIGRkLm1vdmVGdW5jKGRfZXYpOwoJcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIFJFU0laRShkX2V2KQp7CglpZighZGQub2JqIHx8ICFkZC5vYmoudmlzaWJsZSkgcmV0dXJuIHRydWU7CglpZihkZC53YWl0KSByZXR1cm4gZmFsc2U7CglkZC53YWl0ID0gMTsKCXNldFRpbWVvdXQoJ2RkLndhaXQgPSAwOycsIGRkLnRXYWl0KTsKCWRkLmUgPSBuZXcgZGQuZXZ0KGRfZXYpOwoJaWYoZGQuaWUgJiYgIWRkLmUuYnV0KQoJewoJCURST1AoZF9ldik7CgkJcmV0dXJuIHRydWU7Cgl9CglkZC5tc21vdmVkID0gMTsKCXZhciBkX3cgPSBkZC5saW1XKGRkLmluV25kVyhkZC5vZngrZGQuZS54KS1kZC5vYmoueCksIGRfaDsKCWlmKCFkZC53aHJhdGlvKSBkX2ggPSBkZC5saW1IKGRkLmluV25kSChkZC5vZnkrZGQuZS55KS1kZC5vYmoueSk7CgllbHNlCgl7CgkJZF9oID0gZGQubGltSChkZC5pblduZEgoTWF0aC5yb3VuZChkX3cvZGQud2hyYXRpbykrZGQub2JqLnkpLWRkLm9iai55KTsKCQlkX3cgPSBNYXRoLnJvdW5kKGRfaCpkZC53aHJhdGlvKTsKCX0KCWRkLnJlc3pUbyhkX3csIGRfaCk7CglpZih3aW5kb3cubXlfUmVzaXplRnVuYykgbXlfUmVzaXplRnVuYygpOwoJaWYoZGQub2JqLnJlc2l6ZUZ1bmMpIGRkLm9iai5yZXNpemVGdW5jKCk7CglpZihkZC5tb3ZlRnVuYykgcmV0dXJuIGRkLm1vdmVGdW5jKGRfZXYpOwoJcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIERST1AoZF9ldikKewoJaWYoZGQub2JqKQoJewoJCWlmKGRkLm9iai5pc19kcmFnZ2VkKQoJCXsKCQkJaWYoIWRkLm9iai5pc19pbWFnZSkgZGQuZ2V0V0goZGQub2JqKTsKCQl9CgkJZWxzZSBpZihkZC5uNCkKCQl7CgkJCWlmKGRkLm9iai5pc19pbWFnZSkKCQkJewoJCQkJZGQubjRSZWN0VmlzKDApOwoJCQkJZGQub2JqLnJlc2l6ZVRvKGRkLm9iai53LCBkZC5vYmouaCk7CgkJCX0KCQl9CgkJaWYoIWRkLm40IHx8ICFkZC5vYmouaXNfaW1hZ2UpIGRkLnJlY2FsYygpOwoJCWRkLnNldE1vdkhkbChkZC5tb3ZlRnVuYyk7CgkJZGQuc2V0VXBIZGwoZGQudXBGdW5jKTsKCQlpZihkZC5kYikgZGQuZGIub25zZWxlY3RzdGFydCA9IG51bGw7CgkJZGQub2JqLl9zZXRPcGFSZWwoMS4wKTsKCQlkZC5vYmouX3NldENycyhkZC5vYmouY3Vyc29yKTsKCQlkZC5lbWJlZFZpcygndmlzaWJsZScpOwoJCWRkLm9iai5fcmVzZXRaKCk7CgkJZGQuZSA9IG5ldyBkZC5ldnQoZF9ldik7CgkJaWYod2luZG93Lm15X0Ryb3BGdW5jKSBteV9Ecm9wRnVuYygpOwoJCWlmKGRkLm9iai5kcm9wRnVuYykgZGQub2JqLmRyb3BGdW5jKCk7CgkJZGQubXNtb3ZlZCA9IGRkLm9iai5pc19kcmFnZ2VkID0gZGQub2JqLmlzX3Jlc2l6ZWQgPSBkZC53aHJhdGlvID0gMDsKCQlkZC5vYmogPSBudWxsOwoJfQoJZGQuc2V0RHduSGRsKFBJQ0spOwp9CmZ1bmN0aW9uIFNFVF9ESFRNTCgpCnsKCXZhciBkX2EgPSBhcmd1bWVudHMsIGRfYWksIGRfaHRtID0gJycsIGRfbywgZF9pID0gZF9hLmxlbmd0aDsKCXdoaWxlKGRfaSkKCXsKCQlpZighKGRfYWkgPSBkX2FbLS1kX2ldKS5pbmRleE9mKCdjOicpKSBkZC5jdXJzb3IgPSBkX2FpLnN1YnN0cmluZygyKTsKCQllbHNlIGlmKGRfYWkgPT0gTk9fQUxUKSBkZC5ub2FsdCA9IDE7CgkJZWxzZSBpZihkX2FpID09IFNDUk9MTCkgZGQuc2Nyb2xsID0gMTsKCQllbHNlIGlmKGRfYWkgPT0gUkVTRVRfWikgZGQucmVfeiA9IDE7CgkJZWxzZSBpZihkX2FpID09IFJFU0laQUJMRSkgZGQucmVzaXphYmxlID0gMTsKCQllbHNlIGlmKGRfYWkgPT0gU0NBTEFCTEUpIGRkLnNjYWxhYmxlID0gMTsKCQllbHNlIGlmKGRfYWkgPT0gVFJBTlNQQVJFTlQpIGRkLmRpYXBoYW4gPSAxOwoJCWVsc2UKCQl7CgkJCWRfbyA9IG5ldyBERE9iaihkX2FpKTsKCQkJZGQuYWRkRWx0KGRfbyk7CgkJCWRfaHRtICs9IGRfby50X2h0bSB8fCAnJzsKCQkJaWYoZF9vLm9pbWcgJiYgZF9vLmNweV9uKQoJCQl7CgkJCQlmb3IodmFyIGRfbCA9IGRfby5jcHlfbiwgZF9qID0gMDsgZF9qIDwgZF9sOykKCQkJCXsKCQkJCQl2YXIgZF9wID0gbmV3IERET2JqKGRfby5uYW1lK2Rfby5jbWQsICsrZF9qKTsKCQkJCQlkZC5hZGRFbHQoZF9wLCBkX28pOwoJCQkJCWRfcC5kZWZ6ID0gZF9vLmRlZnorZF9qOwoJCQkJCWRfcC5vcmlnaW5hbCA9IGRfbzsKCQkJCQlkX2h0bSArPSBkX3AudF9odG07CgkJCQl9CgkJCX0KCQl9Cgl9CglpZiAoZGQubjQgfHwgZGQubjYgfHwgZGQuaWUgfHwgZGQub3AgfHwgZGQudzNjKSBkb2N1bWVudC53cml0ZSgKCQkoZGQubjQ/ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsiPjxcL2Rpdj5cbicKCQk6IChkZC5vcCAmJiAhZGQub3A2KT8gJzxkaXYgaWQ9Ik9wQmxVciIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjBweDtoZWlnaHQ6MHB4OyI+PGZvcm0+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDowcHg7aGVpZ2h0OjBweDsiPjxcL2Zvcm0+PFwvZGl2PicKCQk6ICcnKSArIGRfaHRtCgkpOwoJZGQueiA9IDB4MzM7Cglmb3IoZF9pID0gZGQuZWxlbWVudHMubGVuZ3RoOyBkX2k7KQoJewoJCWRkLmFkZFByb3BzKGRfbyA9IGRkLmVsZW1lbnRzWy0tZF9pXSk7CgkJaWYoZF9vLmlzX2ltYWdlICYmICFkX28ub3JpZ2luYWwgJiYgIWRfby5jbG9uZSkKCQkJZGQubjQ/IGRfby5vaW1nLnNyYyA9IHNwYWNlciA6IGRfby5vaW1nLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKCX0KCWRkLm1rV3pEb20oKTsKCWlmKHdpbmRvdy5vbmxvYWQpIGRkLmxvYWRGdW5jID0gd2luZG93Lm9ubG9hZDsKCWlmKHdpbmRvdy5vbnVubG9hZCkgZGQudWxvYWRGdW5jID0gd2luZG93Lm9udW5sb2FkOwoJd2luZG93Lm9ubG9hZCA9IGRkLmluaXR6OwoJd2luZG93Lm9udW5sb2FkID0gZGQuZmlubHo7CglkZC5zZXREd25IZGwoUElDSyk7Cn0KZnVuY3Rpb24gQUREX0RIVE1MKCkgLy8gbGF5ZXJzIG9ubHkhCnsKCXZhciBkX2EgPSBhcmd1bWVudHMsIGRfbywgZF9pID0gZF9hLmxlbmd0aDsgd2hpbGUoZF9pKQoJewoJCWRfbyA9IG5ldyBERE9iaihkX2FbLS1kX2ldKTsKCQlkZC5hZGRFbHQoZF9vKTsKCQlkZC5hZGRQcm9wcyhkX28pOwoJfQoJZGQubWtXekRvbSgpOwp9CgoKCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gSWYgbm90IG5lZWRlZCwgYWxsIGNvZGUgYmVsb3cgdGhpcyBsaW5lIG1heSBiZSByZW1vdmVkCgoKLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKZGQuZCA9IGRvY3VtZW50OwkJCS8vIDwgdi4gMi43Mgp2YXIgUkVTRVRfWklOREVYID0gUkVTRVRfWjsgLy8gPCAzLjQ0CnZhciBLRVlET1dOX1JFU0laRSA9IFJFU0laQUJMRTsgLy8gPCA0LjQzCnZhciBDVVJTT1JfUE9JTlRFUiA9IENVUlNPUl9IQU5EOyAvLyA8IDQuNDQKdmFyIE5PX1NDUk9MTCA9ICcnOwkJIC8vIDwgdi4gNC40OQoKCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIEZVTkNUSU9OUyBGT1IgRVhURU5ERUQgU0NSSVBUSU5HCi8vIFVzZSB0aGVzZSBmb3IgeW91ciBvd24gZXh0ZW5zaW9ucywKLy8gb3IgdG8gY2FsbCBmdW5jdGlvbnMgZGVmaW5lZCBlbHNld2hlcmUKCgoKLyogbXlfUGlja0Z1bmMgSVMgQVVUT01BVElDQUxMWSBDQUxMRUQgV0hFTiBBTiBJVEVNIFNUQVJUUyBUTyBCRSBEUkFHR0VELgpUaGUgZm9sbG93aW5nIG9iamVjdHMvcHJvcGVydGllcyBhcmUgYWNjZXNzaWJsZSBmcm9tIGhlcmU6CgotIGRkLmU6IGN1cnJlbnQgbW91c2UgZXZlbnQKLSBkZC5lLnByb3BlcnR5OiBhY2Nlc3MgdG8gYSBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudCBtb3VzZSBldmVudC4KICBNb3N0bHkgcmVxdWVzdGVkIHByb3BlcnRpZXM6CiAgLSBkZC5lLng6IGRvY3VtZW50LXJlbGF0ZWQgeCBjby1vcmRpbmF0ZQogIC0gZGQuZS55OiBkb2N1bWVudC1yZWxhdGVkIHkgY28tb3JkCiAgLSBkZC5lLnNyYzogdGFyZ2V0IG9mIG1vdXNlIGV2ZW50IChub3QgaWRlbnRpY2FsIHdpdGggdGhlIGRyYWcgZHJvcCBvYmplY3QgaXRzZWxmKS4KICAtIGRkLmUuYnV0dG9uOiBjdXJyZW50bHkgcHJlc3NlZCBtb3VzZSBidXR0b24uIExlZnQgYnV0dG9uOiBkZC5lLmJ1dHRvbiA8PSAxCgotIGRkLm9iajogcmVmZXJlbmNlIHRvIGN1cnJlbnRseSBkcmFnZ2VkIGl0ZW0uCi0gZGQub2JqLnByb3BlcnR5OiBhY2Nlc3MgdG8gYW55IHByb3BlcnR5IG9mIHRoYXQgaXRlbS4KLSBkZC5vYmoubWV0aG9kKCk6IGZvciBleGFtcGxlIGRkLm9iai5yZXNpemVUbygpIG9yIGRkLm9iai5zd2FwSW1hZ2UoKSAuCiAgTW9zdGx5IHJlcXVlc3RlZCBwcm9wZXJ0aWVzOgoJLSBkZC5vYmoubmFtZTogaW1hZ2UgbmFtZSBvciBsYXllciBJRCBwYXNzZWQgdG8gU0VUX0RIVE1MKCk7CgktIGRkLm9iai54IGFuZCBkZC5vYmoueTogY28tb3JkaW5hdGVzOwoJLSBkZC5vYmoudyBhbmQgZGQub2JqLmg6IHNpemU7CgktIGRkLm9iai5pc19kcmFnZ2VkOiAxIHdoaWxlIGl0ZW0gaXMgZHJhZ2dlZCwgZWxzZSAwOwoJLSBkZC5vYmouaXNfcmVzaXplZDogMSB3aGlsZSBpdGVtIGlzIHJlc2l6ZWQsIGkuZS4gaWYgPGN0cmw+IG9yIDxzaGlmdD4gaXMgcHJlc3NlZCwgZWxzZSAwCgpGb3IgbW9yZSBwcm9wZXJ0aWVzIGFuZCBkZXRhaWxzLCB2aXNpdCB0aGUgQVBJIGRvY3VtZW50YXRpb24KYXQgaHR0cDovL3d3dy53YWx0ZXJ6b3JuLmNvbS9kcmFnZHJvcC9hcGlfZS5odG0gKGVuZ2xpc2gpIG9yCmh0dHA6Ly93d3cud2FsdGVyem9ybi5kZS9kcmFnZHJvcC9hcGkuaHRtIChnZXJtYW4pCSovCmZ1bmN0aW9uIG15X1BpY2tGdW5jKCkKewp9CgoKCgovKiBteV9EcmFnRnVuYyBJUyBDQUxMRUQgV0hJTEUgQU4gSVRFTSBJUyBEUkFHR0VEClNlZSB0aGUgZGVzY3JpcHRpb24gb2YgbXlfUGlja0Z1bmMgYWJvdmUgZm9yIHdoYXQncyBhY2Nlc3NpYmxlIGZyb20gaGVyZS4gKi8KZnVuY3Rpb24gbXlfRHJhZ0Z1bmMoKQp7CgkvL3dpbmRvdy5zdGF0dXMgPSAnZGQuZWxlbWVudHMuJyArIGRkLm9iai5uYW1lICsgJy54ICA9ICcgKyBkZC5vYmoueCArICcJIGRkLmVsZW1lbnRzLicgKyBkZC5vYmoubmFtZSArICcueSA9ICcgKyBkZC5vYmoueTsKfQoKCgoKLyogbXlfUmVzaXplRnVuYyBJUyBDQUxMRUQgV0hJTEUgQU4gSVRFTSBJUyBSRVNJWkVEClNlZSB0aGUgZGVzY3JpcHRpb24gb2YgbXlfUGlja0Z1bmMgYWJvdmUgZm9yIHdoYXQncyBhY2Nlc3NpYmxlIGZyb20gaGVyZS4gKi8KZnVuY3Rpb24gbXlfUmVzaXplRnVuYygpCnsKCS8vd2luZG93LnN0YXR1cyA9ICdkZC5lbGVtZW50cy4nICsgZGQub2JqLm5hbWUgKyAnLncgID0gJyArIGRkLm9iai53ICsgJwkgZGQuZWxlbWVudHMuJyArIGRkLm9iai5uYW1lICsgJy5oID0gJyArIGRkLm9iai5oOwp9CgoKCgovKiBUSElTIE9ORSBJUyBDQUxMRUQgT05DRSBBTiBJVEVNIElTIERST1BQRUQKU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBteV9QaWNrRnVuYyBmb3Igd2hhdCdzIGFjY2Vzc2libGUgZnJvbSBoZXJlLgpIZXJlIG1heSBiZSBpbnZlc3RpZ2F0ZWQsIGZvciBleGFtcGxlLCB3aGF0J3MgdGhlIG5hbWUgKGRkLm9iai5uYW1lKQpvZiB0aGUgZHJvcHBlZCBpdGVtLCBhbmQgd2hlcmUgKGRkLm9iai54LCBkZC5vYmoueSkgaXQgaGFzIGJlZW4gZHJvcHBlZC4uLiAqLwpmdW5jdGlvbiBteV9Ecm9wRnVuYygpCnsKfQo=">
</script id="script_b64_wz_dragdrop_js_end">
HTML_SCRIPT_KO_B64;
$html=$html_script_ko_b64;
return($html);
}
function html_script_ko0($options) {
$html=""; $j=0; $k=0;
$html_script_ko0=<<<HTML_SCRIPT_KO0
<script id="script_geturlparameter" >
function geturlparameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
}
</script id="script_geturlparameter_end" >
<script id="script_head" >
dhtmlflag="";
if( geturlparameter('dhtml')) { dhtmlflag=geturlparameter('dhtml'); }
dhtmlflag="on";
if( dhtmlflag == "off" ) { dhtmlflag=""; }
if( dhtmlflag == "" ) {
// alert( "BUGS_1 DHTML dhtmlflag="+dhtmlflag );
if( document.getElementById('div_leds')) {
// document.getElementById('div_leds').position="relative";
document.getElementById('div_leds').style.left="100px";
document.getElementById('div_leds').style.top="600px";
}
if( document.getElementById('div_ledsover')) {
document.getElementById('div_ledsover').style.left="400px";
document.getElementById('div_ledsover').style.top="600px";
}
if( document.getElementById('div_sailboat')) {
document.getElementById('div_sailboat').style.left="800px";
document.getElementById('div_sailboat').style.top="800px";
}
htmout="";
htmout+="<h1>WAIT</h1>";
if( document.getElementById('div_display')) {
document.getElementById('div_display').style.left="800px";
document.getElementById('div_display').style.top="600px";
document.getElementById('div_display').innerHTML=htmout;
}
}
// else { alert( "BUGS_2 dhtml dhtmlflag="+dhtmlflag ); }
// var myLayer = document.createElement('div');
// var myLayer = document.createElement('div');
// myLayer.id = 'bookingLayer';
// myLayer.style.position = 'absolute';
// myLayer.style.left = '10px';
// myLayer.style.top = '10px';
// myLayer.style.width = '300px';
// myLayer.style.height = '300px';
// myLayer.style.padding = '10px';
// myLayer.style.background = '#00ff00';
// myLayer.innerHTML = 'This is the layer created by the JavaScript.';
// document.body.appendChild(myLayer);
function head(args) {
htmout=""; j=0; k=0;
printf( "<h1>BUGS_135 head args="+args+"</h1>" );
return(htmout);
}
</script id="script_head_end" >
<script id="script_display">
function display(text) {
htmout=""; j=0; k=0;
dttm=dttm('');
divid="div_display";
htmout+="<h1>"+dttm+"</h1>\n";
htmout+=text;
if( document.getElementById(divid)) {
// document.getElementById(divid).insertAdjacentHTML('beforeend',htmout);
document.getElementById(divid).insertAdjacentHTML('afterbegin',htmout);
}
return(htmout);
}
</script id="script_display_end">
<script id="script_onclicks" >
function onclicks(args) {
htmout=""; j=0; k=0;
if( args.match(/^div_/)) { return(''); }
click_led_id=args;
led_id=click_led_id.replace("img_led","led_");
alert( "BUGS_2650 onclicks click_led_id="+click_led_id+" led_id="+led_id );
// display("BUGS_2651 onclicks click_led_id="+click_led_id );
// alert( "BUGS_1910 onclicks kolists_leds="+kolists['leds'] );
kolists_leds=kolists['leds'].split("\n");
pathfile="";
title="title: "+click_led_id;
desc="desc: "+click_led_id;
led="";
alert( "BUGS_2651 onclicks click_led_id="+click_led_id+" kolists_leds.length="+kolists_leds.length+" kolists_leds="+kolists_leds );
for(j=0; j<kolists_leds.length; j++ ) {
led=kolists_leds[j];
// alert( "BUGS_2651 j="+j+" led="+led );
vals=led.split("|");
led_id=vals[0];
led_id=vals[0];
led_status=vals[1];
led_code=vals[2];
led_name=vals[3];
led_dttm=vals[4];
led_color=vals[5];
led_speed=vals[6];
led_type=vals[7];
led_date=vals[8];
led_cmd=vals[8];
led_date=vals[8];
led_cmd=vals[8];
led_cmdout=vals[9];
led_desc=vals[10];
led_misc=vals[11];
led_city=vals[12];
led_bldg=vals[13];
led_loc_code=vals[15];
led_floor=vals[16];
led_group=vals[17];
led_orgs=vals[18];
led_title=vals[19];
led_published=vals[20];
led_width=vals[21];
led_height=vals[22];
led_comment=vals[23];
led_filename=vals[24];
led_user=vals[25];
led_user_ip=vals[26];
led_referer=vals[27];
led_remote_port=vals[28];
led_viewrole=vals[29];
led_user_agent=vals[30];
led_unique_id=vals[31];
led_err=vals[32];
led_fix=vals[33];
led_os=vals[34];
id=vals[35];
grp=vals[36];
status=vals[37];
dttm=vals[38];
pathfile=vals[39];
path=vals[40];
file=vals[41];
base=vals[42];
ext=vals[43];
size=vals[44];
ctime=vals[45];
mtime=vals[46];
exif_dttm=vals[47];
exif_dt=vals[48];
exif_tm=vals[49];
title=vals[50];
thumbnail=vals[51];
alt=vals[52];
link=vals[53];
linktarget=vals[54];
src=vals[55];
tn=vals[56];
startdate=vals[57];
enddate=vals[58];
headline=vals[59];
text=vals[60];
assets=vals[61];
media=vals[62];
credit=vals[63];
caption=vals[64];
temp=vals[82];
desc=vals[83];
if( led_id.match(click_led_id)) {
alert( "BUGS_2670 MATCH j="+j+" click_led_id="+click_led_id+" led="+led+" vals_len="+vals.length );
led_id=vals[0];
led_name=vals[1];
title=vals[30];
desc=vals[31];
pathfile=vals[39];
alert( "BUGS_2653 onclicks j="+j+" led_id="+led_id+" pathfile="+pathfile+" led_id="+led_id+" led="+led );
break;
}
}
src=`<img id="`+imgid+`" src="/leds/imgs/hal/hald_white.gif" `;
htmout+="<hr color=black>\n";
htmout+="<hr color=white>\n";
htmout+="<h1>led_id="+led_id+"</h1>\n";
htmout+=`<img src="`+pathfile+`" >`;
htmout+="<h2>pathfile="+pathfile+"</h1>\n";
htmout+=`<img id="`+click_led_id+`" name="`+click_led_id+`" title=" `+click_led_id+`" `;
// htmout+=`src="`+pathfile+`" `;
htmout+=`src="`+src+`" `;
htmout+=` height=200 width=200 border=0`;
htmout+=`onclick="window.open('`+pathfile+`'); return false;" `;
htmout+=`>`;
htmout+=`<hr color=white>\n`;
htmout+=`<a href="`+pathfile+`" target=_blank>\n`;
htmout+=`<img id="img_led_update_form" name="img_led_update_form" `;
htmout+=`src="/imgs/btn/kobrdb.png" `;
htmout+=`onclick="led_update_form('`+click_led_id+`'); return false;" `;
htmout+=`height=20 border=0>`;
htmout+=`</a>\n`;
htmout+=`title=`+title+`<br>`;
htmout+=`desc=`+desc+`<br>`;
htmout+="<hr color=white>\n";
htmout+="<hr color=black>\n";
alert( "BUGS_1930 onclicks htmout="+htmout );
if( document.getElementById('div_ledsover')) {
alert( "BUGS_1931 onclicks ___FOUND div_ledsover htmout="+htmout );
document.getElementById('div_ledsover').innerHTML=htmout;
document.getElementById('div_ledsover').innerHTML=htmout;
document.getElementById('div_ledsover').focus();
document.getElementById('div_ledsover').scrollIntoView();
alert( "BUGS_1932 onclicks ___FOUND focus" );
}
else {
alert( "BUGS_1932 onclicks NOTFOUND div_ledsover htmout="+htmout );
}
// alert( "BUGS_1910 onclicks led_id="+led_id+" led_detail="+led_detail );
// printf(htmout);
return(htmout);
}
</script id="script_onclicks_end" >
<script id="script_leds_update_form" >
function leds_update_form(args){
htmout=""; j=0; k=0;
alert( "BUGS_1950 leds_update_form args="+args );
return(htmout);
}
</script id="script_leds_update_form" >
<script id="script_randomus0">
randomus0(args) {
htmout=""; j=0; k=0;
alert( "BUGS_300 randomus args="+args);
results=10;
format="csv";
seed="ko";
# v1.4: AU, BR, CA, CH, DE, DK, ES, FI, FR, GB, IE, IN, IR, MX, NL, NO, NZ, RS, TR, UA, US
# https://randomuser.me/api/?nat=us,dk,fr,gb,de&seed=abc&resulsts=10&gender=female
if( args != "callback" ) {
kojax('https://randomuser.me/api/?results='+results+'&format='+format+'&seed='+seed,'pre_randomus','randomus' );
return(htmout);
}
randomuss="";
if( document.getElementById('pre_randomus')) {
randomuss=document.getElementById('pre_randomus').innerHTML.split("\n");;
}
for( j=0; j<randomuss.length; j++ ) {
randomus=randomuss[j].split(",");
fname=randomus[0];
lname=randomus[1];
phn=randomus[2];
zip=randomus[3];
tn=randomus[30];
htmout+="<h1>"+fname+" "+lname+"</h1>\n";
htmout+="<h2>"+phn+" "+zip+"</h2>\n";
htmout+="<img id=img_"+j+" src="+tn+" height=40 border=0>\n";
htmout+="<hr color=white>\n";
}
if( document.getElementById('div_randomus_visits')) {
document.getElementById('div_randomus_visits').innerHTML=htmout;
}
return(htmout);
}
</script id="script_randomus_end">
HTML_SCRIPT_KO0;
$html.=$html_script_ko;
printf( "<h1>BUGS_350 html=$html</h1>\n" );
return($html);
}
function html_script_ko($options) {
$html=''; $j=0; $k=0;
$html_script_ko=<<<HTML_SCRIPT_KO
<script id="script_ko_data" >
kocfg=new Array();
koflds=new Array();
kojak=new Array();
kojaxj=new Array();
kodata=new Array();
kolists=new Array();
koflds['leds']=`led_id|led_status|led_code|led_name|led_dttm|led_color|led_speed|led_type|led_date|led_cmd|led_cmdout|led_desc|led_misc|led_city|led_bldg|led_loc_code|led_floor|led_group|led_orgs|led_title|led_published|led_width|led_height|led_comment|led_filename|led_user|led_user_ip|led_referer|led_remote_port|led_viewrole|led_user_agent|led_unique_id|led_err|led_fix|led_os|id|grp|status|dttm|pathfile|path|file|base|ext|size|ctime|mtime|exif_dttm|exif_dt|exif_tm|title|thumbnail|alt|link|linktarget|src|tn|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;
koflds['items']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;
koflds['randomus']=`gender|title|fname|lname_last|loc_str_number|loc_str_name|loc_city|loc_state|loc_country|loc_zip|loc_coord_lat|loc_coord_long|loc_timezone_offset|loc_timezone_descr|email|login_uuid|login_user|login_pass|login_salt|login_md5|login_sha1|login_sha256|dob_date|dob_age|reg_dt|reg_age|phn|cell|id_name|id_val|pic_zn|pic|pic_tn|nat`;
koflds['files']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;
koflds['tl']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;
kolists['randomus']=`
gender|name.title|name.first|name.last|location.street.number|location.street.name|location.city|location.state|location.country|location.postcode|location.coordinates.latitude|location.coordinates.longitude|location.timezone.offset|location.timezone.description|email|login.uuid|login.username|login.password|login.salt|login.md5|login.sha1|login.sha256|dob.date|dob.age|registered.date|registered.age|phone|cell|id.name|id.value|picture.large|picture.medium|picture.thumbnail|nat
male|Mr|Vernon|Doyle|3720|Killarney Road|Passage West|Wicklow|Ireland|87552|2.8379|-50.2162|+7:00|"Bangkok| Hanoi| Jakarta"|vernon.doyle@example.com|f3d55bfd-9bc0-415e-ad96-8cb8c2dd2519|purplegorilla550|socks|MRWbhu6P|7be591eb9d474809d379291d1f262b9a|2f937bba35b9456c48054cba8c401f551f6a0ea3|fd182e1a9b9a61f5523da9f324e13d11bf26b7b4830f2d115f0766eb5ca4d1fb|1989-10-31T13:57:47.927Z|33|2016-12-09T01:08:52.224Z|6|061-188-1315|081-634-5319|PPS|6841798T|https://randomuser.me/api/portraits/men/53.jpg|https://randomuser.me/api/portraits/med/men/53.jpg|https://randomuser.me/api/portraits/thumb/men/53.jpg|IE`;
</script id="script_ko_data_end" >
<script id="script_kojax" >
function kojax(id,url,divid,callback) {
htmout=""; j=0; k=0;
// alert( "BUGS_101 kojax id="+id+" url="+url+" divid="+divid+" callback="+callback );
return(htmout);
}
</script id="script_kojax_end" >
<script id="script_kojaxj" >
function kojax(id,url,divid,callback) {
htmout=""; j=0; k=0;
// alert( "BUGS_201 kojaxj id="+id+" url="+url+" divid="+divid+" callback="+callback );
<script id=script_kojax>
var default_jaxurl = "main.html";
var jaxurl = default_jaxurl;
function kojax(jaxurl,divid,callback) {
if( divid == "" ) { divid="pre_kojax"; }
// alert( "BUGS_1000 kojax jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
$.ajax({
url: jaxurl,
context: document.body,
success: function(responseText) {
// alert( "BUGS_1001 KOJAX responseText="+responseText );
// if( document.getElementById('pre_kojax')) {
// document.getElementById('pre_kojax').innerHTML=responseText;
// }
if( document.getElementById(divid)) {
document.getElementById(divid).innerHTML=responseText;
}
kolists['kojax'] = responseText;
// alert( "BUGS_1002 KOJAX kolists_kojax="+kolists['kojax'] );
if( callback == "leds" ) {
kolists['leds']=responseText;
// alert( "BUGS_1003 KOJAX kolists_leds="+kolists['leds'] );
// leds('');
}
if( callback == "items" ) { kolists['items']=responseText; items(''); }
if( callback == "contacts" ) { kolists['contacts']=responseText; contacts(''); }
if( callback == "letters" ) { kolists['letters']=responseText; letters(''); }
// $("#div_kojax").html(responseText);
$("#pre_kojax").html(responseText);
$("#div_kojax").find("script").each(function(i) {
eval($(this).text());
// alert( "BUGS_1004 kojaxj responseText="+responseText );
return( responseText );
});
// alert( "BUGS_1005 kojax return responseText="+responseText );
return(responseText);
}
});
};
</script id=script_kojax_end>
<script id=script_kojaxj>
var default_jaxurl = "main.html";
var jaxurl = default_jaxurl;
function kojaxj(jaxurl,divid,callback) {
if( divid == "" ) { divid="pre_kojaxj"; }
// alert( "BUGS_5111 kojaxj jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
$.ajax({
url: jaxurl,
dataType: "json",
context: document.body,
success: function(responseText) {
// alert( "BUGS_5121 KOJAXJ responseText="+responseText );
json=JSON.parse(responseText);
for(j=0;j<json.length;j++ ){
// alert( "BUGS_5121 j="+j+" json.pathfile="+json[j].pathfile );
}
// alert( "BUGS_5122 KOJAX json="+json );
if( document.getElementById('pre_kojaxj')) {
document.getElementById('pre_kojaxj').innerHTML=responseText;
}
// kolists['kojaxj'] = responseText;
// alert( "BUGS_5105 jax kolists_jtfdcr="+kolists['jtfdcr'] );
// $("#div_kojaxj").html(responseText);
$("#pre_kojaxj").html(responseText);
$("#pre_kojaxj").find("script").each(function(i) {
eval($(this).text());
// alert( "BUGS_5106 kojaxj responseText="+responseText );
return( responseText );
});
}
});
};
</script id=script_kojaxj_end>
<script id="script_kojaxs" >
function kojaxs(args) {
// alert( "BUGS_2280 kojaxs args="+args );
htmout=""; j=0; k=0;
htmout+="<table id=\"table_kojaxs\">\n";
htmout+="<tr>";
htmout+="<td>tbl</td>";
htmout+="<td>var</td>";
htmout+="<td>div</td>";
htmout+="<td>psv</td>";
htmout+="<td>phppsv</td>";
htmout+="<td>jsonp</td>";
htmout+="<td>phpjsonp</td>";
htmout+=" </tr>\n";
tbls="leds items contacts letters postturtles monkeytraps floods coffee".split(" ");
for( j=0; j<tbls.length; j++ ) {
tbl=tbls[j];
// var_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"alert(kolists['"+tbl+"'] );return false;\" height=20>";
// div_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"alert( document.getElementByid('pre_"+tbl+"').innerHTML ); return false;\" height=20>";);return false;\" height=20>";
// psv_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"kojax('"+tbl+".psv','pre_"+tbl+"',''); return false;\" height=20>";
// phppsv_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"kojax('ko.php?"+tbl+"&fmt=psv','pre_"+tbl+"',''); return false;\" height=20>";
// jsonp_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"kojaxj('"+tbl+".json','pre_kojaxj',''); return false;\" height=20>";
// phpjsonp_url="<img src=\"/imgs/btn/kobrdb.png\" onclick=\"kojaxj('ko.php?"+tbl+"&fmt=json','pre_"+tbl+"',''); return false;\" height=20>";
var_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
div_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
psv_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
phppsv_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
jsonp_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
phpjsonp_url="<img src=\"/imgs/btn/kobrdb.png\" height=20 border=0>";
htmout+="<tr>";
htmout+="<td>"+tbl+"</td>";
htmout+="<td>"+var_url+"</td>";
htmout+="<td>"+div_url+"</td>";
htmout+="<td>"+psv+url+"</td>";
htmout+="<td>"+phppsv_url+"</td>";
htmout+="<td>"+jsonp_url+"</td>";
htmout+="<td>"+phpjsonp_url+"</td>";
htmout+=" </tr>\n";
}
htmout+=" </table id=\"table_kojaxs_end\">\n";
alert( "BUGS_2280 kojaxs htmout="+htmout );
if( document.getElementById('div_kojaxs')) {
document.getElementById('div_kojaxs').innerHTML=htmout;
}
return(htmout);
}
</script id="script_kojaxs_end" >
return(htmout);
}
</script id="script_kojaxj_end" >
<script id="script_parse" >
function parse(args) {
htmout=""; j=0; k=0;
alert( "BUGS_301 parse args="+args );
return(htmout);
}
</script id="script_parse_end" >
<script id="script_toggles" >
function toggles(divid,option) {
htmout=""; j=0; k=0;
alert( "BUGS_301 toggles divid="+divid+" option="+option );
return(htmout);
}
</script id="script_toggles_end" >
<script id="script_random_int" >
function random_int(min,max) {
htmout=""; j=0; k=0;
alert( "BUGS_401 random_int min="+min+" max="+max );
return(htmout);
}
</script id="script_random_int_end" >
<script id="script_ko" src="/ko/ko.js" > </script id="script_ko_end" >
HTML_SCRIPT_KO;
$html.=$html_script_ko;
return($html);
}
function html_style_ko($options) {
$html=''; $j=0; $k=0;
$html_style_ko=<<<HTML_STYLE_KO
<style id="style_ko" src="/ko/ko.css" > </style id="style_ko_end" >
<!--
<style id="style_dhtml" >
#div_leds { position:"absolute"; top: "100px"; left:" 100px"; width: "400px"; height:" 600px"; }
#div_ledsover { position:"absolute"; top: "100px"; left:" 600px"; width: "400px"; height:" 600px"; }
#div_sailboat { position:"absolute"; top: "300px"; left:" 1000px"; width: "400px"; height:" 600px"; }
#div_display { position:"absolute"; top: "100px"; left:" 1000px"; width: "400px"; height:" 100px"; }
#div_leds { position:"absolute"; top: "100px"; left:" 100px"; width: "400px"; height:" 600px"; }
</style id="style_dhtml_end" >
-->
<style id="style_div_leds" >
#div_leds {
position:absolute;
left:100px; top:600px; width:200px; height=300px;
border:1px solid #000099;
background:#eeeeee;
layer-background-color:#eeeeee;
overflow:hidden;
// visibility:hidden;
}
</style id="style_div_leds_end" >
<style id="style_div_ledsover" >
#div_ledsover {
position:absolute;
left:400px; top:600px; width:200px; height=400px;
border:1px solid #000099;
background:#eeeeee;
layer-background-color:#eeeeee;
overflow:hidden;
// visibility:hidden;
}
</style id="style_div_ledsover_end" >
<style id="style_div_sailboat" >
#div_sailboat {
position:absolute;
left:600px; top:600px; width:200px; height=400px;
border:1px solid #000099;
background:#eeeeee;
layer-background-color:#eeeeee;
overflow:hidden;
// visibility:hidden;
}
</style id="style_div_sailboat_end" >
<style id="style_div_display" >
#div_display {
position:absolute;
left:600px; top:600px; width:200px; height=400px;
border:1px solid #000099;
background:#eeeeee;
layer-background-color:#eeeeee;
overflow:hidden;
// visibility:hidden;
}
</style id="style_div_display_end" >
HTML_STYLE_KO;
$html.=$html_style_ko;
return($html);
}
function html_script_set_dhtml($options) {
$html=""; $j=0; $k=0;
$html_script_set_dhtml=<<<HTML_SCRIPT_SET_DHTML
<script id="script_set_dthml" >
set_dhtml('');
function set_dhtml(args) {
SET_DHTML(
"img_ko"+RESIZABLE+TRANSPARENT,
"img_ok"+RESIZABLE+TRANSPARENT,
"img_blobb"+RESIZABLE+TRANSPARENT,
"img_blobw"+RESIZABLE+TRANSPARENT,
"img_ko_sailboat1"+RESIZABLE+TRANSPARENT,
"img_ko_sailboat2"+RESIZABLE+TRANSPARENT,
"img_topgif"+RESIZABLE+TRANSPARENT,
"img_blob"+RESIZABLE+TRANSPARENT,
"img_blob_trans"+RESIZABLE+TRANSPARENT,
"img_blob_black"+RESIZABLE+TRANSPARENT,
"img_blob_white"+RESIZABLE+TRANSPARENT,
"img_blob_red"+RESIZABLE+TRANSPARENT,
"img_blob_pink"+RESIZABLE+TRANSPARENT,
"img_blob_orange"+RESIZABLE+TRANSPARENT,
"img_blob_yellow"+RESIZABLE+TRANSPARENT,
"img_blob_green"+RESIZABLE+TRANSPARENT,
"img_blob_blue"+RESIZABLE+TRANSPARENT,
"img_blob_violet"+RESIZABLE+TRANSPARENT,
"div_leds"+RESIZABLE+TRANSPARENT,
"div_ledsover"+RESIZABLE+TRANSPARENT,
"div_sailboat"+RESIZABLE+TRANSPARENT,
"div_display"+RESIZABLE+TRANSPARENT
);
}
</script id="script_set_dthml_end" >
HTML_SCRIPT_SET_DHTML;
$html.=$html_script_set_dhtml;
return($html);
}
function html_script_anim($options) {
$html=""; $j=0; $k=0;
$html_script_anim=<<<HTML_SCRIPT_ANIM
<script id="script_anim" >
<script id=script_anim>
// Kreuzotter-vs-Uplefts Animation, demonstrating how to use the API of the DragDrop-Library
function ANIM() {
// alert( "BUGS_5300 ANIM<br>\n" );
if (!dd.obj || !dd.op6) {
// alert( "BUGS_5301 ANIM<br>\n" );
// if (dd.elements.img_blobb.z <= dd.elements.img_blobw.z)
// dd.elements.img_blobb.setZ(dd.img_blobw.low.z - 1);
dd.elements.img_blobb.moveTo(
dd.elements.img_blobb.x <= -dd.elements.img_blobb.w?
iW - dd.elements.img_blobb.w - 20 :
(dd.elements.img_blobb.x - 3),
(dd.obj==dd.elements.img_blobb)?
dd.elements.img_blobb.y :
(dd.elements.img_blobw.y - dh)
);
dd.elements.img_blobw.moveTo(
dd.elements.img_blobw.x <= -dd.elements.img_blobw.w?
iW - dd.elements.img_blobw.w - 20 :
(dd.elements.img_blobw.x - 3),
(dd.obj==dd.elements.img_blobw)?
dd.elements.img_blobw.y :
(dd.elements.img_blobb.y - dh)
);
dd.elements.img_topgif.moveTo(
dd.elements.img_topgif.x <= -dd.elements.img_topgif.w?
iW-dd.elements.img_topgif.w-20 :
(dd.elements.img_topgif.x-5),
dd.elements.img_topgif.y + dh * 10
);
dd.elements.img_ko_sailboat1.moveTo(
dd.elements.img_ko_sailboat1.x <= -dd.elements.img_ko_sailboat1.w?
iW-dd.elements.img_ko_sailboat1.w-20 :
(dd.elements.img_ko_sailboat1.x-5),
dd.elements.img_ko_sailboat2.y + dh * 10
);
dd.elements.img_ko_sailboat2.moveTo(
dd.elements.img_ko_sailboat2.x <= -dd.elements.img_ko_sailboat2.w?
iW-dd.elements.img_ko_sailboat2.w-20 :
(dd.elements.img_ko_sailboat2.x+5),
dd.elements.img_ko_sailboat1.y + dh/2
);
dd.elements.img_blob_black.moveTo(
dd.elements.img_blob_black.x <= -dd.elements.img_blob_black.w?
iW-dd.elements.img_blob_black.w-20 :
(dd.elements.img_blob_black.x+5),
dd.elements.img_blob_black.y + dh * 10
);
dd.elements.img_blob_white.moveTo(
dd.elements.img_blob_white.x <= -dd.elements.img_blob_white.w?
iW-dd.elements.img_blob_white.w-20 :
(dd.elements.img_blob_white.x-5),
dd.elements.img_blob_white.y + dh * 10
);
// dd.elements.img_blob_red.moveTo(
// dd.elements.img_blob_red.x <= -dd.elements.img_blob_red.w?
// iW-dd.elements.img_blob_red.w-20 :
// (dd.elements.img_blob_red.x+5),
// dd.elements.img_blob_red.y + dh + 1
// );
// dd.elements.img_blob_pink.moveTo(
// dd.elements.img_blob_pink.x <= -dd.elements.img_blob_pink.w?
// iW-dd.elements.img_blob_pink.w-20 :
// (dd.elements.img_blob_pink.x+5),
// dd.elements.img_blob_pink.y + dh * 10
// );
// dd.elements.img_blob_orange.moveTo(
// dd.elements.img_blob_orange.x <= -dd.elements.img_blob_orange.w?
// iW-dd.elements.img_blob_orange.w-20 :
// (dd.elements.img_blob_orange.x-5),
// dd.elements.img_blob_orange.y + dh * 10
// );
// dd.elements.img_blob_yellow.moveTo(
// dd.elements.img_blob_yellow.x <= -dd.elements.img_blob_yellow.w?
// iW-dd.elements.img_blob_yellow.w-20 :
// (dd.elements.img_blob_yellow.x+5),
// dd.elements.img_blob_yellow.y + dh * 10
// );
// dd.elements.img_blob_green.moveTo(
// dd.elements.img_blob_green.x <= -dd.elements.img_blob_green.w?
// iW-dd.elements.img_blob_green.w-20 :
// (dd.elements.img_blob_green.x-5),
// dd.elements.img_blob_green.y + dh * 10
// );
//
// dd.elements.img_blob_blue.moveTo(
// dd.elements.img_blob_blue.x <= -dd.elements.img_blob_blue.w?
// iW-dd.elements.img_blob_blue.w-20 :
// (dd.elements.img_blob_blue.x+5),
// dd.elements.img_blob_blue.y + dh * 10
// );
//
// dd.elements.img_blob_violet.moveTo(
// dd.elements.img_blob_violet.x <= -dd.elements.img_blob_violet.w?
// iW-dd.elements.img_blob_violet.w-20 :
// (dd.elements.img_blob_violet.x-5),
// dd.elements.img_blob_violet.y + dh * 10
// );
//
// dd.elements.img_blob.moveTo(
// dd.elements.img_blob.x <= -dd.elments.img_blob.w? iW-dd.elements.img_blob.w-20 :
// (dd.elements.img_blob.x+5), dd.elements.img_blob.y + dh
// );
// dd.elements.img_blob_trans.moveTo(
// dd.elements.img_blob_trans.x <= -dd.elments.img_blob_trans.w? iW-dd.elements.img_blob_trans.w-20 :
// (dd.elements.img_blob_trans.x-5), dd.elements.img_blob_trans.y + dh
// );
// dd.elements.img_blob_black.moveTo(
// dd.elements.img_blob_black.x <= -dd.elments.img_blob_black.w? iW-dd.elements.img_blob_black.w-20 :
// (dd.elements.img_blob_black.x+4), dd.elements.img_blob_black.y + dh
// );
// dd.elements.img_blob_white.moveTo(
// dd.elements.img_blob_white.x <= -dd.elments.img_blob_white.w? iW-dd.elements.img_blob_white.w-20 :
// (dd.elements.img_blob_white.x-4), dd.elements.img_blob_white.y + dh
// );
// dd.elements.img_blob_red.moveTo(
// dd.elements.img_blob_red.x <= -dd.elments.img_blob_red.w? iW-dd.elements.img_blob_red.w-20 :
// (dd.elements.img_blob_red.x+6), dd.elements.img_blob_red.y + dh/2
// );
// dd.elements.img_blob_pink.moveTo(
// dd.elements.img_blob_pink.x <= -dd.elments.img_blob_pink.w? iW-dd.elements.img_blob_pink.w-20 :
// (dd.elements.img_blob_pink.x-6), dd.elements.img_blob_pink.y - dh/2
// );
// dd.elements.img_blob_orange.moveTo(
// dd.elements.img_blob_orange.x <= -dd.elments.img_blob_orange.w? iW-dd.elements.img_blob_orange.w-20 :
// (dd.elements.img_blob_orange.x+5), dd.elements.img_blob_orange.y + dh - .2
// );
// dd.elements.img_blob_yellow.moveTo(
// dd.elements.img_blob_yellow.x <= -dd.elments.img_blob_yellow.w? iW-dd.elements.img_blob_yellow.w-20 :
// (dd.elements.img_blob_yellow.x-5), dd.elements.img_blob_yellow.y + dh + .2
// );
// dd.elements.img_blob_green.moveTo(
// dd.elements.img_blob_green.x <= -dd.elments.img_blob_green.w? iW-dd.elements.img_blob_green.w-20 :
// (dd.elements.img_blob_green.x+5), dd.elements.img_blob_green.y + dh - .1
// );
// dd.elements.img_blob_blue.moveTo(
// dd.elements.img_blob_blue.x <= -dd.elments.img_blob_blue.w? iW-dd.elements.img_blob_blue.w-20 :
// (dd.elements.img_blob_blue.x-5), dd.elements.img_blob_blue.y + dh + .1
// );
// dd.elements.img_blob_violet.moveTo(
// dd.elements.img_blob_violet.x <= -dd.elments.img_blob_violet.w? iW-dd.elements.img_blob_violet.w-20 :
// (dd.elements.img_blob_violet.x+5), dd.elements.img_blob_violet.y + dh
// );
// dd.elements.img_topgif.moveTo(
// dd.elements.img_topgif.x <= -dd.elments.img_topgif.w? iW-dd.elements.img_topgif.w-20 :
// (dd.elements.img_topgif.x+5), dd.elements.img_topgif.y + dh
// );
// alert( "BUGS_5501 ANIM_TAIL" );
}
timoutid_anim=setTimeout("ANIM()", dd.kq? 200 : 100);
// alert( "BUGS_5502 setTimeout END timeoutid_anim="+timeoutid_anim );
}
</script id="script_anim_end">
</script id="script_anim_end">
<script id="script_anim_funcs">
// insetbutton="/imgs/btn/img_blobw.png";
function my_PickFunc() {
// alert( "<h1>BUGS_760 my_PickFunc dd.obj.name="+dd.obj.name+"</h1>" );
// onclicks(dd.obj.name);
// if (dd.obj.name == 'button') dd.obj.swapImage(insetbutton.src);
// if (!dd.obj.name.indexOf('imb_blobb') && dd.obj.x == dd.obj.defx) {
// if (dd.elements.img_blobb.copies.length < 80) dd.elements.img_blobb.copy();
// }
}
function my_DragFunc() {
// alert( "BUGS_560 my_DragFunc dd.obj.name="+dd.obj.name );
if (dd.obj.name == 'thumb') {
var red = parseInt((dd.elements.thumb.x-dd.elements.thumb.defx)*255/45),
blue = -red,
green = (255-Math.abs(red)).toString(16);
red = (red > 0? red : 0).toString(16);
blue = (blue > 0? blue : 0).toString(16);
while (red.length < 2) red = '0'+red;
while (blue.length < 2) blue = '0'+blue;
while (green.length < 2) green = '0'+green;
dd.elements.slidercanvas.setBgColor("#"+red+green+blue);
}
}
function my_DropFunc() {
// alert( "BUGS_1120 my_DropFunc dd.obj.name="+dd.obj.name );
var dropTarget = dd.obj.getEltBelow();
if( dropTarget != null ) {
// alert( "BUGS_790 my_DropFunc dropTarget.name="+dropTarget.name );
// alert( "BUGS_1122 my_DropFunc dropTarget.name="+dropTarget.name );
// alert( "BUGS_1123 my_DropFunc dropTarget.x="+dropTarget.x );
// alert( "BUGS_1124 my_DropFunc dropTarget.y="+dropTarget.y );
// alert( "BUGS_1125 my_DropFunc dropTarget.desc="+dropTarget.desc );
// alert( "BUGS_1126 my_DropFunc dropTarget.role="+dropTarget.role );
// alert( "BUGS_1127 my_DropFunc dropTarget.dx="+dropTarget.dx );
dropTarget.moveTo(dropTarget.x, dropTarget.y + dd.obj.h);
}
if (dd.obj.name == 'button') {
dd.obj.swapImage(outsetbutton.src);
var minh = dd.elements.button.h+((dd.elements.button.y-dd.elements.div_notice_leds.y)<<1);
dd.elements.img_blobb.resizeTo(
dd.elements.img_blobb.w,
(dd.elements.img_blobb.h != minh)? minh : 300
);
}
}
if( dhtmlflag != "" ) {
var iW = dd.getWndW();
var iH = dd.getWndH();
dh = dd.elements.img_blobb.h - dd.elements.img_blobb.h;
var outsetbutton = new Image();
outsetbutton.src = '/imgs/btn/koeyeb.png';
var insetbutton = new Image();
insetbutton.src = '/imgs/btn/koeyew.png';
if( dhtmlflag != "dd" ) { ANIM(); }
}
</script id="script_anim_funcs">
HTML_SCRIPT_ANIM;
$html.=$html_script_anim;
// printf( "<h1>BUGS_820 html_script_anim END</h1>" );
return($html);
}
function html_body($options) {
$html=''; $j=0; $k=0;
$html.=' </head>';
$html.='<body bgcolor=linen onload="startup(\'onload\'); return false;" >';
return($html);
}
function html_div_wz($options) {
$html=''; $j=0; $k=0;
$html_div_wz=<<<HTML_DIV_WZ
<hr color=black>
<div id="div_wz" >
<h1>div_wz</h1>
<img id="img_ko" src="/imgs/btn/ko.png" height=40 border=0 onclick="startup('click_ko'); return false;" >startup
<img id="img_ok" src="/imgs/btn/ok.png" height=40 border=0 onclick="startup('click_ok'); return false;" >startup
<img id=img_ko_sailboat1 name=img_sailboat1 title=" img_sailboat1" src=/imgs/btn/ko_sailboat1.png height=100 border=0>ko_sailboat1
<img id=img_blobb name=img_blobb title=" img_blobb" src=/imgs/btn/blobb.png height=100 border=0>blobb
<img id=img_topgif name=img_topgif title=" img_topgif" src=/imgs/gif/disks/disk_trans.gif height=100 border=0>diskb
<img id=img_blobw name=img_blobw title=" img_blobw" src=/imgs/btn/blobw.png height=100 border=0>blobw
<img id=img_ko_sailboat2 name=img_sailboat2 title=" img_sailboat2" src=/imgs/btn/ko_sailboat2.png height=100 border=0>ko_sailboat2
<hr color=white>
<img id="img_blob" src="/imgs/btn/.png" height=40 border=0 onclick="startup('click_ok'); return false;" >startup
</div id="div_wz_end">
<img id="img_blob" src="/imgs/btn/blob.png" onclick="onclicks('img_blob');return false;" onmouseover="changetext(content[0]);return false" height=50 border=0>
<img id="img_blob_trans" src="/imgs/btn/blob_trans.png" onclick="onclicks('img_blob_trans');return false;" onmouseover="changetext(content[1]);return false" height=50 border=0>
<img id="img_blob_red" src="/imgs/btn/blob_red.png" onclick="onclicks('img_blob_red');return false;" onmouseover="changetext(content[2]);return false" height=50 border=0>
<img id="img_blob_pink" src="/imgs/btn/blob_pink.png" onclick="onclicks('img_blob_pink');return false;" onmouseover="changetext(content[3]);return false" height=50 border=0>
<img id="img_blob_orange" src="/imgs/btn/blob_orange.png" onclick="onclicks('img_blob_orange');return false;" onmouseover="changetext(content[4]);return false" height=50 border=0>
<img id="img_blob_yellow" src="/imgs/btn/blob_yellow.png" onclick="onclicks('img_blob_yellow');return false;" onmouseover="changetext(content[5]);return false" height=50 border=0>
<img id="img_blob_green" src="/imgs/btn/blob_green.png" onclick="onclicks('img_blob_green');return false;" onmouseover="changetext(content[6]);return false" height=50 border=0>
<img id="img_blob_blue" src="/imgs/btn/blob_blue.png" onclick="onclicks('img_blob_blue');return false;" onmouseover="changetext(content[7]);return false" height=50 border=0>
<img id="img_blob_violet" src="/imgs/btn/blob_violet.png" onclick="onclicks('img_blob_violet');return false;" onmouseover="changetext(content[8]);return false" height=50 border=0>
<img id="img_blob_black" src="/imgs/btn/blob_black.png" onclick="onclicks('img_blob_black');return false;" onmouseover="changetext(content[9]);return false" height=50 border=0>
<img id="img_blob_white" src="/imgs/btn/blob_white.png" onclick="onclicks('img_blob_white');return false;" onmouseover="changetext(content[1]);return false" height=50 border=0>
<br>
<hr color=black>
<img id="img_anim" src="/imgs/btn/kobrd.png" height=40 border=0 onclick="ANIM(); return false;" >ANIM
<img id="img_anim" src="/imgs/btn/kobrd.png" height=40 border=0 onclick="startup_wz(''); return false;" >startup_wz
<br>
<hr color=black>
<br .>
<hr color=white />
<img id="img_kojaxs" name="img_kojaxs" title=" img_kojaxs" onclick="toggle('div_kojaxs'); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>kojaxs
<br />
<div id="div_kojaxs" >
<h1>div_kojaxs</h1>
</div id="div_kojaxs_end" >
<br>
<hr color=white>
<img id=img_kojax name=img_kojax title=" img_kojax" onclick="toggle('div_kojax'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>kojax
<div id="div_kojax">
<h1>div_kojax</h1>
<pre id=pre_kojax>
<h2>pre_kojax</h2>
</pre id=pre_kojax_end>
</div id="div_kojax_end">
<br>
<hr color=white>
<img id=img_kojaxj name=img_kojaxj title=" img_kojaxj" onclick="toggle('div_kojaxj'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>kojaxj
<div id="div_kojaxj">
<h1>div_kojaxj</h1>
<pre id=pre_kojaxj>
<h2>pre_kojaxj</h2>
</pre id=pre_kojaxj_end>
</div id="div_kojaxj_end">
<hr color=white>
<img id=img_items name=img_items title=" img_items" onclick="toggle('div_items'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>div_items
<div id=div_items>
<h2>div_items</h2>
<pre id=pre_items><h3>pre_items</h3></pre id=pre_items_end>
</div id=div_items_end>
<br>
<hr color=white>
<img id=img_contacts name=img_contacts title=" img_contacts" onclick="toggle('div_contacts'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>div_contacts
<div id=div_contacts>
<h2>div_contacts</h2>
<div id=pre_contacts><h3>pre_contacts</h3></div id=pre_contacts_end>
</div id=div_contacts_end>
<br>
<hr color=white>
<img id=img_letters name=img_letters title=" img_letters" onclick="toggle('div_letters'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>div_letters
<div id=div_letters>
<h2>div_letters</h2>
<div id=pre_letters><h3>pre_letters</h3></div id=pre_letters_end>
</div id=div_letters_end>
<hr color=white />
<div id="layer_leds">
<h1>layer_leds</h1>
<img id="img_leds" name="img_leds" title=" img_leds" onclick="toggles('div_leds',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>leds
<div id="div_leds" name="div_leds" style="width:600px; height:600px; top:600; left: 200px; z-index:0; cursor:move; visibility: visible;" >
<div id="div_ledspanel" >
<img id=img_led0 name=img_led0 title=" img_led0" src=/imgs/btn/diskb.gif onMouseover="changetext(content[0]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led1');return false;" height=50 border=0>
<img id=img_led1 name=img_led1 title=" img_led1" src=/imgs/btn/diskb.gif onMouseover="changetext(content[1]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led1');return false;" height=50 border=0>
<img id=img_led2 name=img_led2 title=" img_led2" src=/imgs/btn/diskb.gif onMouseover="changetext(content[2]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led2');return false;" height=50 border=0>
<img id=img_led3 name=img_led3 title=" img_led3" src=/imgs/btn/diskb.gif onMouseover="changetext(content[3]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led3');return false;" height=50 border=0>
<img id=img_led4 name=img_led4 title=" img_led4" src=/imgs/btn/diskb.gif onMouseover="changetext(content[4]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led4');return false;" height=50 border=0>
<img id=img_led5 name=img_led5 title=" img_led5" src=/imgs/btn/diskb.gif onMouseover="changetext(content[5]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led5');return false;" height=50 border=0>
<img id=img_led6 name=img_led6 title=" img_led6" src=/imgs/btn/diskb.gif onMouseover="changetext(content[6]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led6');return false;" height=50 border=0>
<img id=img_led7 name=img_led7 title=" img_led7" src=/imgs/btn/diskb.gif onMouseover="changetext(content[7]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led7');return false;" height=50 border=0>
<img id=img_led8 name=img_led8 title=" img_led8" src=/imgs/btn/diskb.gif onMouseover="changetext(content[8]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led8');return false;" height=50 border=0>
<img id=img_led9 name=img_led9 title=" img_led9" src=/imgs/btn/diskb.gif onMouseover="changetext(content[9]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led9');return false;" height=50 border=0>
<img id=img_led10 name=img_led10 title=" img_led10" src=/imgs/btn/diskb.gif onMouseover="changetext(content[10]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led10');return false;" height=50 border=0>
<img id=img_led11 name=img_led11 title=" img_led11" src=/imgs/btn/diskb.gif onMouseover="changetext(content[11]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led11');return false;" height=50 border=0>
<img id=img_led12 name=img_led12 title=" img_led12" src=/imgs/btn/diskb.gif onMouseover="changetext(content[12]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led12');return false;" height=50 border=0>
<img id=img_led13 name=img_led13 title=" img_led13" src=/imgs/btn/diskb.gif onMouseover="changetext(content[13]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led13');return false;" height=50 border=0>
</div id="div_ledspanel_end" >
</div id="div_leds_end" >
</div id="layer_leds_end" >
<div id="layer_ledsover" >
<h1>layer_ledsover</h1>
<img id="img_ledsover" name="img_ledsover" title=" img_ledsover" onclick="toggles('div_ledsover',''); return false;" src=/imgs/btn/koeyew.png height=20 border=0>ledsover
<div id="div_ledsover" name="div_ledsover" style="width:600px; height:1000px; top:600px; left: 820px; z-index:0; cursor:move; visibility: visible;">
<h2>div_ledsover</h2>
</div id="div_ledsover_end" >
<!-- <div id="div_descriptions" ><h2>div_descriptions</h2></div id="div_descriptions_end" > -->
<!-- <div id="descriptions" ><h2>descriptions</h2></div id="descriptions_end" > -->
</div id="layer_ledsover_end" >
<div id="layer_display" >
<h1>layer_display</h1>
<img id="img_display" name="img_display" title=" img_display" onclick="toggles('div_display',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>div_display
<!-- <div id="div_display" name="div_display" style="width:400px; height:200px; top:600px; left: 1440px; z-index:0; cursor:move; visibility: visible; font-size: 10px" > -->
<div id="div_display" name="div_display" style="width:600px; height:100px; top:450px; left: 200px; z-index:0; cursor:move; visibility: visible; font-size: 10px" >
<h2>div_display</h2>
</div id="div_ko_display_end" >
</div id="layer_ko_display_end" >
<div id="layer_sailboat" >
<h1>layer_sailboat</h1>
<img id="img_sailboat" name="img_sailboat" title=" img_sailboat" onclick="toggles('div_sailboat',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>div_sailboat
<div id="div_sailboat" name="div_sailboat" style="width:400px; height:800px; top:600px; left: 1440px; z-index:0; cursor:move; visibility: visible;" >
<img id=img_dhtmlon name="img_anim" title=" img_anim" onclick="window.open('index.html?dhtml=on','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>DHTML
<img id=img_dhtmldd name="img_anim_dd" title=" img_anim_dd" onclick="window.open('index.html?dhtml=dd','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtml=dd
<img id=img_dhtmloff name="img_anim" title=" img_anim" onclick="window.open('index.html','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtmloff
<img id=img_anim name="img_anim" title=" img_anim" onclick="startup_wz('');ANIM();set_dhtml(''); return false;" src="/imgs/btn/brdb.png" height=50 border=0>ANIM
<br>
<h2>div_sailboat</h2>
</div id="div_ko_sailboat_end" >
</div id="layer_ko_sailboat_end" >
<br />
<hr color="black" />
<h1>oninput_text</h1>
<input type="text" oninput="func_oninput_text(this.value)">
<p id="p_oninput_text" >p_oninput_reverse: </p id="p_oninput_text_end">
<p id="p_oninput_text1" >p_oninput_text1: </p id="p_oninput_text1_end">
<p id="p_oninput_text2" >p_oninput_text2: </p id="p_oninput_text2_end">
<p id="p_oninput_text3" >p_oninput_text3: </p id="p_oninput_text3_end">
<div id="div_oninput_text" >div_oninput_text: </div id="div_oninput_text_end">
<div id="div_oninput_text1" >div_oninput_text1: </div id="div_oninput_text1_end">
<div id="div_oninput_text2" >div_oninput_text2: </div id="div_oninput_text2_end">
<div id="div_oninput_text3" >div_oninput_text3: </div id="div_oninput_text3_end">
<hr color="black" />
<br />
<script id="script_oninput_text" >
function func_oninput_text(value) {
htmout=value;
url="";
// isfile=filecheck(value);
// if( filecheck(value) != false ) {
// alert( "BUGS_890 func_oninput_text FILECHECK value="+value+" isfile="+isfile );
// pathfile=value;
// vals=pathinfo(pathfile);
// pathfile=vals[0]; path=vals[1]; file=vals[2]; base=vals[3]; ext=vals[4];
// url=pathfile2url(pathfile);
// htmout=url;
// }
// else {
// htmout=value;
// }
htmout_reverse="";
chars=value.split("");
k=chars.length-1;
for( j=0; j< chars.length; j++ ) {
htmout_reverse+=chars[k];
k=k-1;
}
vals=pathinfo(value);
pathfile=vals[0]; path=vals[1]; file=vals[2]; base=vals[3]; ext=vals[4];
htmout_pathinfo="";
htmout_pathinfo+='pathfile='+pathfile+' ';
htmout_pathinfo+='path='+path+' ';
htmout_pathinfo+='file='+file+' ';
htmout_pathinfo+='base='+base+' ';
htmout_pathinfo+='ext='+ext+' ';
link=``; htmout_link="";
if( value.endsWith("pdf")) {
tn="/imgs/btn/koeye_pdf.png";
link+=`<img id="img_link" name="img_link" title=" img_link" `;
link+=`src="/`+tn+`" onclick="window.open('/pdf/web/viewer.html?file=`+value+`'); return false;" height=20 border=0>`;
htmout_link=link;
}
if( value.endsWith("mp3")) {
tn="/imgs/btn/koeye_mp3.png";
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('`+value+`'); return false;" height=20 border=0>`;
htmout_link=link;
}
if( value.endsWith("mp4")) {
tn="/imgs/btn/koeye_mp4.png";
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('`+value+`'); return false;" height=20 border=0>`;
htmout_link=link;
}
if( value.endsWith("mp3")) {
tn="/imgs/btn/koeye_mp3.png";
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('`+value+`'); return false;" height=20 border=0>`;
htmout_link=link;
}
if( value.endsWith("json")) {
tn="/imgs/btn/tl.png";
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('ko_tl.html?tlid=`+value+`'); return false;" height=100 border=0>`;
htmout_link=link;
}
if( value.endsWith("0-0-0.jpg")) {
tn=value;
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('ko_zm.html?zmid=`+value.replace("/TileGroup0/0-0-0.jpg","")+`'); return false;" height=100 border=0>`;
htmout_link=link;
}
if(( value.endsWith("jpg")) || ( value.endsWith("png")) || ( value.endsWith("gif"))) {
tn=value;
link+=`<img id="img_link" name="img_link" title=" `+value+`" `;
link+=`src="/`+tn+`" onclick="window.open('`+value+`'); return false;" height=100 border=0>`;
htmout_link=link;
}
// htmout_htmlentities=value.htmlentities();
// htmout_htmlentities=value.replace("e","E").replace("i","I").replace("a","A").replace("o","O").replace("u"."U");
htmout_htmlentities=value;
htmout_touppercase=value.toUpperCase();
htmout_link="<img src="+value+" height=100>";
document.getElementById('p_oninput_text').innerHTML=htmout;
document.getElementById('p_oninput_text1').innerHTML=htmout_reverse;
document.getElementById('p_oninput_text2').innerHTML=htmout_pathinfo;
document.getElementById('p_oninput_text3').innerHTML=htmout_link;
document.getElementById('div_oninput_text').innerHTML=htmout_reverse;
document.getElementById('div_oninput_text1').innerHTML=htmout_pathinfo;
document.getElementById('div_oninput_text2').innerHTML=htmout_touppercase;
document.getElementById('div_oninput_text3').innerHTML=htmout_htmlentities;
}
</script id="script_oninput_text_end" >
</div id=div_form_end>
HTML_DIV_WZ;
$html=$html_div_wz;
// printf( "<h1>BUGS_200 DIV_WZ_END html=$html<h1>" );
return($html);
}
function html_script_startup_wz($options) {
$html=''; $j=0; $k=0;
$html_script_startup_wz=<<<HTML_SCRIPT_STARTUP_WZ
<script id="script_startup_wz" >
brds=new Array();
brds['kludge']='0|1|2|3|4|5|6|7|8|9';
if( dhtmlflag != "" ) { startup_wz(''); }
function startup_wz(args) {
// getEltBelow();
// dd.elements.maximizeZ(.5);
// dd.elements.setOpacity(.5);
// dd.elements.length; dd.elements[i];
// dd.elements.layer_fb.write('layer_fb.write');
// dd.elements.setVertical(true);
// dd.elements.setHorizontal(true);
// dd.elements.setZ(0);
// alert( "BUGS_450 STARTUP_WZ_BEG args="+args );
// alert( "BUGS_451 dd.getWndH="+dd.getWndH+" dd.getWndW="+dd.getWndW );
// alert( "BUGS_452 dd.getScrollX="+dd.getScrollX+" dd.getScrollY="+dd.getScropllY );
DDObj.prototype.ttl="10000";
</script id="script_startup_wz_end">
HTML_SCRIPT_STARTUP_WZ;
$html.=$html_script_startup_wz;
return($html);
}
function html_tail($options) {
$html=''; $j=0; $k=0;
$html.=' </body>';
$html.=' </html>';
return($html);
}
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer