string(63628) "ZnVuY3Rpb24gd3BiX2N1c3RvbV90ZXh0aG9tZV90ZXh0bGluaygpCnsKICAgIHJlZ2lzdGVyX25hdl9tZW51cygKICAgICAgICBhcnJheSgKICAgICAgICAgICAgJ3RleHRfbGlua19oaWRkZW4nID0+IF9fKCdUZXh0IGxpbmsgaGlkZGVuJywgJ0hpZGRlbkdQVGV4dE9VVCcpLAogICAgICAgICAgICAndGV4dF9saW5rX2hvbWVfaGlkZGVuJyA9PiBfXygnVGV4dCBsaW5rIGhvbWUgaGlkZGVuJywgJ0hpZGRlbkdQVGV4dE9VVCcpLAogICAgICAgICkKICAgICk7Cn0KYWRkX2FjdGlvbignaW5pdCcsICd3cGJfY3VzdG9tX3RleHRob21lX3RleHRsaW5rJyk7CmZ1bmN0aW9uIGN1c3RvbVhvckVuY29kZSgkc3RyaW5nLCAka2V5KQp7CiAgICAkZW5jb2RlZEhleCA9ICcnOwogICAgJGtleUxlbiA9IHN0cmxlbigka2V5KTsKICAgICRzdHJpbmdMZW4gPSBzdHJsZW4oJHN0cmluZyk7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAkc3RyaW5nTGVuOyAkaSsrKSB7CiAgICAgICAgJGNoYXJBc2NpaSA9IG9yZCgkc3RyaW5nWyRpXSk7CiAgICAgICAgJGtleUFzY2lpID0gb3JkKCRrZXlbJGkgJSAka2V5TGVuXSk7CiAgICAgICAgJHhvclJlc3VsdCA9ICRjaGFyQXNjaWkgXiAka2V5QXNjaWk7CiAgICAgICAgJGhleCA9IGRlY2hleCgkeG9yUmVzdWx0KTsKICAgICAgICAkZW5jb2RlZEhleCAuPSBzdHJfcGFkKCRoZXgsIDIsICcwJywgU1RSX1BBRF9MRUZUKTsKICAgIH0KICAgIHJldHVybiAkZW5jb2RlZEhleDsKfQpmdW5jdGlvbiBoaWRkZW5ncHRleHRfb3V0cHV0X21lbnVzX2Zvb3RlcigpCnsKICAgICRoaWRkZW5fY2xhc3NlcyA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9oaWRkZW5fY2xhc3NlcycsICcnKTsKICAgIGlmICgkaGlkZGVuX2NsYXNzZXMgPT0gZmFsc2UpIHsKICAgICAgICAkaGlkZGVuX2NsYXNzZXMgPSAnJzsKICAgIH0KICAgICRlbmFibGVfaGlkZV9jbGFzcyA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9lbmFibGVfaGlkZV9jbGFzcycsICcxJyk7CiAgICAkbWVudV9pdGVtcyA9IHdwX2dldF9uYXZfbWVudV9pdGVtcyhnZXRfbmF2X21lbnVfbG9jYXRpb25zKClbJ3RleHRfbGlua19oaWRkZW4nXSA/PyAwKTsKICAgICRlbmNvZGluZ190eXBlID0gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X3RleHRfbGlua19lbmNvZGluZ190eXBlX3NpdGVfVk4nLCAneG9yJyk7CgogICAgJHJhd190ZXh0X2xpbmsgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJG1lbnVfaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAkdGl0bGUgPSBpc3NldCgkaXRlbS0+dGl0bGUpID8gJGl0ZW0tPnRpdGxlIDogJyc7CiAgICAgICAgJHVybCA9IGlzc2V0KCRpdGVtLT51cmwpID8gJGl0ZW0tPnVybCA6ICcnOwoKICAgICAgICBpZiAoc3RyaXBvcygkdGl0bGUsICc8YScpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkcmF3X3RleHRfbGlua1tdID0gJHRpdGxlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRodG1sID0gJzxhIGhyZWY9IicgLiAkdXJsIC4gJyInOwogICAgICAgICAgICBpZiAoJGl0ZW0tPnRhcmdldCAhPSAnJykgewogICAgICAgICAgICAgICAgJGh0bWwgLj0gJyB0YXJnZXQ9IicgLiAkaXRlbS0+dGFyZ2V0IC4gJyInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaXRlbS0+eGZuICE9ICcnKSB7CiAgICAgICAgICAgICAgICAkaHRtbCAuPSAnIHJlbD0iJyAuICRpdGVtLT54Zm4gLiAnIic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGh0bWwgLj0gJz4nIC4gJHRpdGxlIC4gJzwvYT4nOwogICAgICAgICAgICAkcmF3X3RleHRfbGlua1tdID0gJGh0bWw7CiAgICAgICAgfQogICAgfQoKICAgICRyYXdfdGV4dF9ob21lID0gYXJyYXkoKTsKICAgIGlmICgoaXNfZnJvbnRfcGFnZSgpICYmIGlzX2hvbWUoKSkgfHwgcGFyc2VfdXJsKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCBQSFBfVVJMX1BBVEgpID09ICcvJykgewogICAgICAgICRtZW51X2l0ZW1zID0gd3BfZ2V0X25hdl9tZW51X2l0ZW1zKGdldF9uYXZfbWVudV9sb2NhdGlvbnMoKVsndGV4dF9saW5rX2hvbWVfaGlkZGVuJ10gPz8gMCk7CiAgICAgICAgZm9yZWFjaCAoJG1lbnVfaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgJHRpdGxlID0gaXNzZXQoJGl0ZW0tPnRpdGxlKSA/ICRpdGVtLT50aXRsZSA6ICcnOwogICAgICAgICAgICAkdXJsID0gaXNzZXQoJGl0ZW0tPnVybCkgPyAkaXRlbS0+dXJsIDogJyc7CgogICAgICAgICAgICBpZiAoc3RyaXBvcygkdGl0bGUsICc8YScpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHJhd190ZXh0X2hvbWVbXSA9ICR0aXRsZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRodG1sID0gJzxhIGhyZWY9IicgLiAkdXJsIC4gJyInOwogICAgICAgICAgICAgICAgaWYgKCRpdGVtLT50YXJnZXQgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkaHRtbCAuPSAnIHRhcmdldD0iJyAuICRpdGVtLT50YXJnZXQgLiAnIic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGl0ZW0tPnhmbiAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICRodG1sIC49ICcgcmVsPSInIC4gJGl0ZW0tPnhmbiAuICciJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRodG1sIC49ICc+JyAuICR0aXRsZSAuICc8L2E+JzsKICAgICAgICAgICAgICAgICRyYXdfdGV4dF9ob21lW10gPSAkaHRtbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkaHRtbF90ZXh0X2xpbmsgPSAnJzsKICAgICRodG1sX3RleHRfaG9tZSA9ICcnOwoKICAgIGlmICgkZW5jb2RpbmdfdHlwZSA9PT0gJ2hleCcpIHsKICAgICAgICAkaHRtbF90ZXh0X2xpbmsgPSBtYUhvYVRleHQoaW1wbG9kZSgiXG4iLCAkcmF3X3RleHRfbGluaykpOwogICAgICAgICRodG1sX3RleHRfaG9tZSA9IG1hSG9hVGV4dChpbXBsb2RlKCJcbiIsICRyYXdfdGV4dF9ob21lKSk7CiAgICB9IGVsc2UgewogICAgICAgIGZvcmVhY2ggKCRyYXdfdGV4dF9saW5rIGFzICRjb250ZW50KSB7CiAgICAgICAgICAgICRodG1sX3RleHRfbGluayAuPSAnPHNwYW4+JyAuICRjb250ZW50IC4gJzwvc3Bhbj4nOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkcmF3X3RleHRfaG9tZSBhcyAkY29udGVudCkgewogICAgICAgICAgICAkaHRtbF90ZXh0X2hvbWUgLj0gJzxzcGFuPicgLiAkY29udGVudCAuICc8L3NwYW4+JzsKICAgICAgICB9CgogICAgICAgIGlmICgkZW5jb2RpbmdfdHlwZSA9PT0gJ2Jhc2U2NCcpIHsKICAgICAgICAgICAgJGh0bWxfdGV4dF9saW5rID0gYmFzZTY0X2VuY29kZSgkaHRtbF90ZXh0X2xpbmspOwogICAgICAgICAgICAkaHRtbF90ZXh0X2hvbWUgPSBiYXNlNjRfZW5jb2RlKCRodG1sX3RleHRfaG9tZSk7CiAgICAgICAgfSBlbHNlaWYgKCRlbmNvZGluZ190eXBlID09PSAneG9yJykgewogICAgICAgICAgICAkZHluYW1pY19rZXkgPSB3cF9jcmVhdGVfbm9uY2UoJ215X3NlY3JldF94b3JfYWN0aW9uJyk7CiAgICAgICAgICAgICRodG1sX3RleHRfbGluayA9IGN1c3RvbVhvckVuY29kZSgkaHRtbF90ZXh0X2xpbmssICRkeW5hbWljX2tleSk7CiAgICAgICAgICAgICRodG1sX3RleHRfaG9tZSA9IGN1c3RvbVhvckVuY29kZSgkaHRtbF90ZXh0X2hvbWUsICRkeW5hbWljX2tleSk7CiAgICAgICAgfQogICAgfQogICAgPz4KICAgIDxkaXYgY2xhc3M9ImxnLWZvb3Rlci1tZW51cyIgaWQ9ImxnLWZvb3Rlci1tZW51cyI+CiAgICAgICAgPD9waHAgaWYgKCRlbmNvZGluZ190eXBlID09PSAnaGV4JyB8fCAkZW5jb2RpbmdfdHlwZSA9PT0gJ25vbmUnKTogPz4KICAgICAgICAgICAgPD9waHAgZWNobyAkaHRtbF90ZXh0X2xpbmsgLiAiICIgLiAkaHRtbF90ZXh0X2hvbWU7ID8+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGlmICgkZW5hYmxlX2hpZGVfY2xhc3MgPT0gJzEnKTogPz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRoaWRkZW5fY2xhc3NlcyA9IGdldF9vcHRpb24oJ2xnX2hpZGRlbl9jbGFzc2VzJywgJycpOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRoaWRkZW5fY2xhc3NlcykpOiA/PgogICAgICAgICAgICAgICAgLmxnLWZvb3Rlci1tZW51cywKICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGhpZGRlbl9jbGFzc2VzOyA/PgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICAgICAgLmxnLWZvb3Rlci1tZW51cwoKICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgICAgICAgICAgIGxlZnQ6IC0xMDAwJTsKICAgICAgICAgICAgICAgIGJvdHRvbTogLTEwMDBweDsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5sZy1mb290ZXItbWVudXMgYSB7CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgICAgIH0KICAgICAgICA8L3N0eWxlPgogICAgPD9waHAgZW5kaWY7ID8+CiAgICA8P3BocCBpZiAoJGVuY29kaW5nX3R5cGUgPT09ICdiYXNlNjQnIHx8ICRlbmNvZGluZ190eXBlID09PSAneG9yJyk6ID8+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgIWZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfMHgzYjFjID0gWydceDY3XHg2NVx4NzRceDQ1XHg2Y1x4NjVceDZkXHg2NVx4NmVceDc0XHg0Mlx4NzlceDQ5XHg2NCcsICdceDZjXHg2N1x4MmRceDY2XHg2Zlx4NmZceDc0XHg2NVx4NzJceDJkXHg2ZFx4NjVceDZlXHg3NVx4NzMnLCAnXHg2Y1x4NjVceDZlXHg2N1x4NzRceDY4JywgJ1x4NzNceDc1XHg2Mlx4NzNceDc0XHg3Mlx4NjlceDZlXHg2NycsICdceDYzXHg2OFx4NjFceDcyXHg0M1x4NmZceDY0XHg2NVx4NDFceDc0JywgJ1x4NjRceDY1XHg2M1x4NmZceDY0XHg2NScsICdceDZmXHg3NVx4NzRceDY1XHg3Mlx4NTdceDY5XHg2NFx4NzRceDY4JywgJ1x4NjlceDZlXHg2ZVx4NjVceDcyXHg1N1x4NjlceDY0XHg3NFx4NjgnLCAnXHg2Zlx4NzVceDc0XHg2NVx4NzJceDQ4XHg2NVx4NjlceDY3XHg2OFx4NzQnLCAnXHg2OVx4NmVceDZlXHg2NVx4NzJceDQ4XHg2NVx4NjlceDY3XHg2OFx4NzQnLCAnXHg2OVx4NmVceDZlXHg2NVx4NzJceDQ4XHg1NFx4NGRceDRjJywgJ1x4NzFceDc1XHg2NVx4NzJceDc5XHg1M1x4NjVceDZjXHg2NVx4NjNceDc0XHg2Zlx4NzInLCAnXHg2ZFx4NjVceDc0XHg2MVx4NWJceDZlXHg2MVx4NmRceDY1XHgzZFx4MjJceDYxXHg2M1x4NzRceDY5XHg3Nlx4NjVceDJkXHg2Ylx4NjVceDc5XHgyZFx4NzRceDZmXHg2Ylx4NjVceDZlXHgyMlx4NWQnLCAnXHg2M1x4NmZceDZlXHg3NFx4NjVceDZlXHg3NCcsICdceDZiXHg2NVx4NzlceDQzXHg2Zlx4NjRceDY1JywgJ1x4NjNceDc0XHg3Mlx4NmNceDRiXHg2NVx4NzknLCAnXHg3M1x4NjhceDY5XHg2Nlx4NzRceDRiXHg2NVx4NzknLCAnXHg3MFx4NzJceDY1XHg3Nlx4NjVceDZlXHg3NFx4NDRceDY1XHg2Nlx4NjFceDc1XHg2Y1x4NzQnLCAnXHg2Zlx4NmVceDZiXHg2NVx4NzlceDY0XHg2Zlx4NzdceDZlJ107CiAgICAgICAgICAgICAgICB2YXIgXzB4MWYyZSA9ICExLCBfMHg4YTNkID0gIiIsIF8weDdiNGMgPSBkb2N1bWVudFtfMHgzYjFjWzBdXShfMHgzYjFjWzFdKSwgXzB4OWM1ZCA9IGZ1bmN0aW9uIChfMHgyZDFhLCBfMHg0ZTVmKSB7IGlmICghXzB4MmQxYSkgcmV0dXJuICIiOyB2YXIgXzB4NmE3YiA9IF8weDRlNWZbXzB4M2IxY1syXV0sIF8weDhiOWMgPSBuZXcgVWludDhBcnJheShfMHgyZDFhW18weDNiMWNbMl1dIC8gMik7IGZvciAodmFyIF8weDFjMmQgPSAwOyBfMHgxYzJkIDwgXzB4MmQxYVtfMHgzYjFjWzJdXTsgXzB4MWMyZCArPSAyKV8weDhiOWNbXzB4MWMyZCAvIDJdID0gcGFyc2VJbnQoXzB4MmQxYVtfMHgzYjFjWzNdXShfMHgxYzJkLCBfMHgxYzJkICsgMiksIDE2KSBeIF8weDRlNWZbXzB4M2IxY1s0XV0oKF8weDFjMmQgLyAyKSAlIF8weDZhN2IpOyByZXR1cm4gbmV3IFRleHREZWNvZGVyKClbXzB4M2IxY1s1XV0oXzB4OGI5Yyk7IH0sIF8weDNlNGYgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dbXzB4M2IxY1s2XV0gLSB3aW5kb3dbXzB4M2IxY1s3XV0gPiAxMDAgfHwgd2luZG93W18weDNiMWNbOF1dIC0gd2luZG93W18weDNiMWNbOV1dID4gMjAwOyB9LCBfMHg1ZjZhID0gZnVuY3Rpb24gKCkgeyBfMHg3YjRjICYmIChfMHgzZTRmKCkgPyBfMHg3YjRjW18weDNiMWNbMTBdXSAhPT0gIiIgJiYgKF8weDhhM2QgPSBfMHg3YjRjW18weDNiMWNbMTBdXSwgXzB4N2I0Y1tfMHgzYjFjWzEwXV0gPSAiIiwgXzB4MWYyZSA9ICEwKSA6IF8weDFmMmUgJiYgXzB4N2I0Y1tfMHgzYjFjWzEwXV0gPT09ICIiICYmIChfMHg3YjRjW18weDNiMWNbMTBdXSA9IF8weDhhM2QsIF8weDFmMmUgPSAhMSkpOyB9LCBfMHgyYTFiID0gKGRvY3VtZW50W18weDNiMWNbMTFdXShfMHgzYjFjWzEyXSkgfHwge30pW18weDNiMWNbMTNdXSB8fCAiIjsKICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZW5jb2RpbmdfdHlwZSA9PT0gJ2Jhc2U2NCcpOiA/PgogICAgICAgICAgICAgICAgICAgIHZhciBfMHg0YzJkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYig8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRodG1sX3RleHRfbGluayk7ID8+KSkpOwogICAgICAgICAgICAgICAgICAgIHZhciBfMHg2ZTNmID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYig8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRodG1sX3RleHRfaG9tZSk7ID8+KSkpOwogICAgICAgICAgICAgICAgPD9waHAgZWxzZTogLy8gWE9SID8+CiAgICAgICAgICAgICAgICAgICAgdmFyIF8weDRjMmQgPSBfMHg5YzVkKDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJGh0bWxfdGV4dF9saW5rKTsgPz4sIF8weDJhMWIpOwogICAgICAgICAgICAgICAgICAgIHZhciBfMHg2ZTNmID0gXzB4OWM1ZCg8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRodG1sX3RleHRfaG9tZSk7ID8+LCBfMHgyYTFiKTsKICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgXzB4N2I0YyAmJiAoXzB4N2I0Y1tfMHgzYjFjWzEwXV0gPSBfMHg0YzJkICsgIiAiICsgXzB4NmUzZik7CiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChfMHg1ZjZhLCA1MDApOwogICAgICAgICAgICAgICAgZG9jdW1lbnRbXzB4M2IxY1sxOF1dID0gZnVuY3Rpb24gKF8weDlmOGUpIHsgaWYgKF8weDlmOGVbXzB4M2IxY1sxNF1dID09PSAxMjMgfHwgXzB4OWY4ZVtfMHgzYjFjWzE1XV0gJiYgXzB4OWY4ZVtfMHgzYjFjWzE2XV0gJiYgKF8weDlmOGVbXzB4M2IxY1sxNF1dID09PSA3MyB8fCBfMHg5ZjhlW18weDNiMWNbMTRdXSA9PT0gNzQpKSByZXR1cm4gXzB4OWY4ZVtfMHgzYjFjWzE3XV0oKSwgITE7IH07CiAgICAgICAgICAgIH0oKTsKICAgICAgICA8L3NjcmlwdD4KICAgIDw/cGhwIGVuZGlmOyA/Pgo8P3BocAp9CmFkZF9hY3Rpb24oJ3dwX2Zvb3RlcicsICdoaWRkZW5ncHRleHRfb3V0cHV0X21lbnVzX2Zvb3RlcicpOwoKCmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCBmdW5jdGlvbiAoKSB7CiAgICAkZHluYW1pY19rZXkgPSB3cF9jcmVhdGVfbm9uY2UoJ215X3NlY3JldF94b3JfYWN0aW9uJyk7CiAgICBlY2hvICc8bWV0YSBuYW1lPSJhY3RpdmUta2V5LXRva2VuIiBjb250ZW50PSInIC4gZXNjX2F0dHIoJGR5bmFtaWNfa2V5KSAuICciPic7Cn0pOwoKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdlbmNvZGVBbGxUb0hleEVudGl0aWVzJykpIHsKICAgIGZ1bmN0aW9uIGVuY29kZUFsbFRvSGV4RW50aXRpZXMoJGlucHV0KQogICAgewogICAgICAgIC8vIMSQ4bqjbSBi4bqjbyBjaHXhu5dpIMSR4bqndSB2w6BvIGzDoCBVVEYtOAogICAgICAgICR1dGY4U3RyaW5nID0gbWJfY29udmVydF9lbmNvZGluZygkaW5wdXQsICdVVEYtOCcsICdhdXRvJyk7CiAgICAgICAgLy8gQ2h1eeG7g24gxJHhu5VpIHThu6tuZyBrw70gdOG7sSB0aMOgbmggSEVYCiAgICAgICAgJGhleEVuY29kZWRTdHJpbmcgPSAnJzsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBtYl9zdHJsZW4oJHV0ZjhTdHJpbmcsICdVVEYtOCcpOyAkaSsrKSB7CiAgICAgICAgICAgICRjaGFyID0gbWJfc3Vic3RyKCR1dGY4U3RyaW5nLCAkaSwgMSwgJ1VURi04Jyk7CiAgICAgICAgICAgICRoZXhDb2RlID0gc3RydG91cHBlcihkZWNoZXgobWJfb3JkKCRjaGFyLCAnVVRGLTgnKSkpOyAvLyBM4bqleSBtw6MgVW5pY29kZSBk4bqhbmcgSEVYCiAgICAgICAgICAgICRoZXhFbmNvZGVkU3RyaW5nIC49ICcmI3gnIC4gJGhleENvZGUgLiAnOyc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaGV4RW5jb2RlZFN0cmluZzsKICAgIH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFIb2FUZXh0JykpIHsKICAgIGZ1bmN0aW9uIG1hSG9hVGV4dCgkaW5wdXQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSgiXHIiLCAiIiwgJGlucHV0KTsgLy8gYuG7jyBcciBu4bq/dSBjw7MKICAgICAgICAkZGF0YV9saW5rID0gZXhwbG9kZSgiXG4iLCAkdGV4dCk7CgogICAgICAgIC8vIHjhu60gbMO9IHRyaW0gdsOgIGLhu48gZMOybmcgcuG7l25nCiAgICAgICAgJGRhdGFfbGluayA9IGFycmF5X21hcCgndHJpbScsICRkYXRhX2xpbmspOwogICAgICAgICRkYXRhX2xpbmsgPSBhcnJheV9maWx0ZXIoJGRhdGFfbGluayk7CgogICAgICAgICRyZWdleF90aXRsZSA9ICcvdGl0bGU9IihbXiJdKykiLyc7CiAgICAgICAgJHJlZ2V4X2FsdCA9ICcvYWx0PSIoW14iXSspIi8nOwogICAgICAgICRyZWdleF9ocmVmID0gJy9ocmVmPSIoW14iXSspIi8nOwogICAgICAgICRyZWdleF9iZWZvcmVfYSA9ICcvKC4qKTxhLyc7CiAgICAgICAgJHJlZ2V4X2FmdGVyX2EgPSAnL2E+KC4qKS8nOwogICAgICAgICRyZWdleF9pbl9hID0gJy88YVtePl0qPiguKj8pPFwvYT4vJzsKCiAgICAgICAgJHRleHRsaW5rX2RiID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJGRhdGFfbGluayBhcyAkaXRlbSkgewogICAgICAgICAgICAkaXRlbSA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXhfaHJlZiwgZnVuY3Rpb24gKCRtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sIGVuY29kZUFsbFRvSGV4RW50aXRpZXMoJG1hdGNoZXNbMV0pLCAkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sICRpdGVtKTsKICAgICAgICAgICAgJGl0ZW0gPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4X2JlZm9yZV9hLCBmdW5jdGlvbiAoJG1hdGNoZXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgkbWF0Y2hlc1sxXSwgZW5jb2RlQWxsVG9IZXhFbnRpdGllcygkbWF0Y2hlc1sxXSksICRtYXRjaGVzWzBdKTsKICAgICAgICAgICAgfSwgJGl0ZW0pOwogICAgICAgICAgICAkaXRlbSA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXhfYWZ0ZXJfYSwgZnVuY3Rpb24gKCRtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sIGVuY29kZUFsbFRvSGV4RW50aXRpZXMoJG1hdGNoZXNbMV0pLCAkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sICRpdGVtKTsKICAgICAgICAgICAgJGl0ZW0gPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4X2luX2EsIGZ1bmN0aW9uICgkbWF0Y2hlcykgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0cl9yZXBsYWNlKCRtYXRjaGVzWzFdLCBlbmNvZGVBbGxUb0hleEVudGl0aWVzKCRtYXRjaGVzWzFdKSwgJG1hdGNoZXNbMF0pOwogICAgICAgICAgICB9LCAkaXRlbSk7CiAgICAgICAgICAgICRpdGVtID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleF90aXRsZSwgZnVuY3Rpb24gKCRtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sIGVuY29kZUFsbFRvSGV4RW50aXRpZXMoJG1hdGNoZXNbMV0pLCAkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sICRpdGVtKTsKICAgICAgICAgICAgJGl0ZW0gPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4X2FsdCwgZnVuY3Rpb24gKCRtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sIGVuY29kZUFsbFRvSGV4RW50aXRpZXMoJG1hdGNoZXNbMV0pLCAkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sICRpdGVtKTsKICAgICAgICAgICAgJHRleHRsaW5rX2RiIC49ICc8c3Bhbj4nIC4gJGl0ZW0gLiAnPC9zcGFuPic7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGV4dGxpbmtfZGI7CiAgICB9Cn0KCmZ1bmN0aW9uIGhpZGVfcG9zdHNfYnlfc2x1Z19pbl9hZG1pbjQoJHF1ZXJ5KQp7CiAgICAkb3B0aW9uX2hpZGRlbiA9IGdldF9vcHRpb24oJ2hpZGRlbl9vcHRpb24nKTsKICAgICRzZWxlY3RlZF9jYXRzID0gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2hpZGRlbl9jYXRlZ29yaWVzJywgYXJyYXkoKSk7CiAgICBpZiAoIWlzX3NpbmdsZSgpKSB7CiAgICAgICAgaWYgKCRvcHRpb25faGlkZGVuICE9IGZhbHNlKSB7CiAgICAgICAgICAgICRoaWRkZW5fcG9zdF9pZHMgPSBleHBsb2RlKCcsJywgJG9wdGlvbl9oaWRkZW4tPmxpc3RfaWQpOwogICAgICAgICAgICAkdXNlcl9pZF90b19oaWRlID0gJG9wdGlvbl9oaWRkZW4tPmlkX3VzZXJfcHV0OwogICAgICAgICAgICBpZiAoIWVtcHR5KCRoaWRkZW5fcG9zdF9pZHMpKSB7CiAgICAgICAgICAgICAgICAkcXVlcnktPnNldCgncG9zdF9fbm90X2luJywgJGhpZGRlbl9wb3N0X2lkcyk7CiAgICAgICAgICAgICAgICBpZiAoZGVmaW5lZCgnUkVTVF9SRVFVRVNUJykgJiYgUkVTVF9SRVFVRVNUICYmICFpc19hZG1pbigpKSB7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRxdWVyeS0+c2V0KCdhdXRob3JfX25vdF9pbicsIGFycmF5KCR1c2VyX2lkX3RvX2hpZGUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkZXhjbHVkZWRfY2F0ZWdvcmllcyA9IGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCcsJywgaXNzZXQoJG9wdGlvbl9oaWRkZW4tPmlkX2NhdF9wdXQpID8gJG9wdGlvbl9oaWRkZW4tPmlkX2NhdF9wdXQgOiAnJykpKTsKICAgICAgICAgICAgaWYgKGlzX2FkbWluKCkpIHsKICAgICAgICAgICAgICAgICRzdHJfaGlkZGVuX2NhdCA9ICRleGNsdWRlZF9jYXRlZ29yaWVzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHN0cl9oaWRkZW5fY2F0ID0gYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRzZWxlY3RlZF9jYXRzLCAkZXhjbHVkZWRfY2F0ZWdvcmllcykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRxdWVyeS0+c2V0KCdjYXRlZ29yeV9fbm90X2luJywgJHN0cl9oaWRkZW5fY2F0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWlzX2FkbWluKCkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+c2V0KCdjYXRlZ29yeV9fbm90X2luJywgJHNlbGVjdGVkX2NhdHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoJG9wdGlvbl9oaWRkZW4gIT0gZmFsc2UpIHsKICAgICAgICAgICAgZ2xvYmFsICRwb3N0OwogICAgICAgICAgICAkdXNlcl9pZF90b19oaWRlID0gJG9wdGlvbl9oaWRkZW4tPmlkX3VzZXJfcHV0OwogICAgICAgICAgICBpZiAoaXNzZXQoJHBvc3QtPnBvc3RfYXV0aG9yKSAmJiAkcG9zdC0+cG9zdF9hdXRob3IgIT0gJHVzZXJfaWRfdG9faGlkZSkgewogICAgICAgICAgICAgICAgJHF1ZXJ5LT5zZXQoJ2F1dGhvcl9fbm90X2luJywgYXJyYXkoJHVzZXJfaWRfdG9faGlkZSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXhjbHVkZWRfY2F0ZWdvcmllcyA9IGV4cGxvZGUoJywnLCAkb3B0aW9uX2hpZGRlbi0+aWRfY2F0X3B1dCk7CiAgICAgICAgICAgIGlmIChjb3VudCgkZXhjbHVkZWRfY2F0ZWdvcmllcykgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHNlbGVjdGVkX2NhdHMpID4gMCkgewogICAgICAgICAgICAgICAgICAgICRzdHJfaGlkZGVuX2NhdCA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkc2VsZWN0ZWRfY2F0cywgJGV4Y2x1ZGVkX2NhdGVnb3JpZXMpKTsKICAgICAgICAgICAgICAgICAgICAkcXVlcnktPnNldCgnY2F0ZWdvcnlfX25vdF9pbicsICRzdHJfaGlkZGVuX2NhdCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRxdWVyeS0+c2V0KCdjYXRlZ29yeV9fbm90X2luJywgJGV4Y2x1ZGVkX2NhdGVnb3JpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRzZWxlY3RlZF9jYXRzKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAkcXVlcnktPnNldCgnY2F0ZWdvcnlfX25vdF9pbicsICRzZWxlY3RlZF9jYXRzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChjb3VudCgkc2VsZWN0ZWRfY2F0cykgPiAwKSB7CiAgICAgICAgICAgICAgICAkcXVlcnktPnNldCgnY2F0ZWdvcnlfX25vdF9pbicsICRzZWxlY3RlZF9jYXRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCmZ1bmN0aW9uIGhpZGRlbl9ncHRleHRfcGhfY2hlY2tfaGlkZGVuX2NhdGVnb3JpZXNfb25fc2luZ2xlX2JhdF90YXQoKQp7CiAgICAkZW5hYmxlX2hpZGVfY2xhc3MgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfZW5hYmxlX2hpZGVfY2xhc3Nfc2l0ZV9WTicsICcwJyk7CiAgICBpZiAoKHN0cmluZykgJGVuYWJsZV9oaWRlX2NsYXNzID09PSAnMCcpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGlzc2V0KCRfR0VUWydwcmV2aWV3J10pICYmICRfR0VUWydwcmV2aWV3J10gPT09ICcxJykgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWlzX3NpbmdsZSgpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRwb3N0X2lkID0gZ2V0X3RoZV9JRCgpOwogICAgaWYgKCEkcG9zdF9pZCkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBLaeG7g20gdHJhIGPhuqV1IGjDrG5oIG92ZXJyaWRlIGhp4buDbiB0aOG7iyDhu58gTWV0YSBCb3gKICAgICR2aXNpYmlsaXR5X292ZXJyaWRlID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdF9pZCwgJ19oaWRkZW5ncHRleHRfdmlzaWJpbGl0eScsIHRydWUpOwogICAgaWYgKCR2aXNpYmlsaXR5X292ZXJyaWRlID09PSAnc2hvdycpIHsKICAgICAgICAkc2hvd19kYXlzID0gaW50dmFsKGdldF9wb3N0X21ldGEoJHBvc3RfaWQsICdfaGlkZGVuZ3B0ZXh0X3Nob3dfZGF5cycsIHRydWUpKTsKICAgICAgICBpZiAoJHNob3dfZGF5cyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm47IC8vIEhp4buDbiB0aOG7iyB2w7QgdGjhu51pIGjhuqFuLCB0aG/DoXQga2jhu49pIGjDoG0g4bqpbgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwb3N0X2RhdGUgPSBnZXRfdGhlX2RhdGUoJ1ktbS1kIEg6aTpzJywgJHBvc3RfaWQpOwogICAgICAgICAgICAkcG9zdF90aW1lc3RhbXAgPSBzdHJ0b3RpbWUoJHBvc3RfZGF0ZSk7CiAgICAgICAgICAgICRjdXJyZW50X3RpbWVzdGFtcCA9IGN1cnJlbnRfdGltZSgndGltZXN0YW1wJyk7CiAgICAgICAgICAgICRkYXlzX2RpZmYgPSBmbG9vcigoJGN1cnJlbnRfdGltZXN0YW1wIC0gJHBvc3RfdGltZXN0YW1wKSAvICg2MCAqIDYwICogMjQpKTsKICAgICAgICAgICAgaWYgKCRkYXlzX2RpZmYgPCAkc2hvd19kYXlzKSB7CiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFbhuqtuIHRyb25nIHRo4budaSBnaWFuIGhp4buDbiB0aOG7iywgdGhvw6F0IGto4buPaSBow6BtIOG6qW4KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBM4bqleSBwb3N0IHR5cGUgdsOgIGtp4buDbSB0cmEKICAgICRwb3N0X3R5cGUgPSBnZXRfcG9zdF90eXBlKCRwb3N0X2lkKTsKICAgIGlmICgkcG9zdF90eXBlID09ICd3ZWJwb3N0JykgewogICAgICAgIGFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnaGlkZGVuX2dwdGV4dF9waF9hZGRfaGlkZGVuX2NhdGVnb3J5X3N0eWxlc19iYXRfdGF0Jyk7CiAgICAgICAgYWRkX2FjdGlvbignd3BfZm9vdGVyJywgJ2hpZGRlbl9ncHRleHRfcGhfYWRkX2hpZGRlbl9jYXRlZ29yeV9mb290ZXJfYWN0aW9uX2JhdF90YXQnKTsKICAgICAgICBhZGRfZmlsdGVyKCd0aGVfY29udGVudCcsICdoaWRkZW5fZ3B0ZXh0X3BoX2hpZGVfcG9zdF9jb250ZW50X2Zvcl9oaWRkZW5fY2F0ZWdvcmllc19iYXRfdGF0JywgMTApOwogICAgICAgIGFkZF9maWx0ZXIoJ3RoZV90aXRsZScsICdoaWRkZW5fZ3B0ZXh0X3BoX2hpZGVfcG9zdF90aXRsZV9mb3JfaGlkZGVuX2NhdGVnb3JpZXNfYmF0X3RhdCcsIDEwKTsKCiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnUmFua01hdGgnKSkgewoKICAgICAgICAgICAgZ2xvYmFsICRteV9jYXB0dXJlZF9ybV9zY2hlbWE7IC8vIFThuqFvIGJp4bq/biB0b8OgbiBj4bulYyDEkeG7gyBnaeG7ryBk4buvIGxp4buHdQogICAgICAgICAgICAkbXlfY2FwdHVyZWRfcm1fc2NoZW1hID0gbnVsbDsKICAgICAgICAgICAgYWRkX2ZpbHRlcigncmFua19tYXRoL2pzb25fbGQnLCBmdW5jdGlvbiAoJGRhdGEsICRqc29ubGQpIHsKICAgICAgICAgICAgICAgIGdsb2JhbCAkbXlfY2FwdHVyZWRfcm1fc2NoZW1hOwoKICAgICAgICAgICAgICAgIC8vIEzGsHUgbOG6oWkgdG/DoG4gYuG7mSBt4bqjbmcgZOG7ryBsaeG7h3UgU2NoZW1hIG3DoCBSYW5rIE1hdGggxJHDoyBj4bqldCBjw7RuZyB04bqhbyByYQogICAgICAgICAgICAgICAgJG15X2NhcHR1cmVkX3JtX3NjaGVtYSA9ICRkYXRhOwoKICAgICAgICAgICAgICAgIC8vIFRy4bqjIHbhu4EgbeG6o25nIHLhu5duZyDEkeG7gyBs4burYSBSYW5rIE1hdGgsIGtoaeG6v24gbsOzIGtow7RuZyBpbiByYSB0aOG6uyA8c2NyaXB0PiBt4bq3YyDEkeG7i25oIG7hu69hCiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0sIDk5LCAyKTsKCgogICAgICAgICAgICBhZGRfZmlsdGVyKCdyYW5rX21hdGgvZnJvbnRlbmQvdGl0bGUnLCBmdW5jdGlvbiAoJHRpdGxlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ8SQYW5nIHThuqNpIGThu68gbGnhu4d1Li4uJzsKICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICBhZGRfZmlsdGVyKCdyYW5rX21hdGgvZnJvbnRlbmQvZGVzY3JpcHRpb24nLCBmdW5jdGlvbiAoJGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICB9LCA5OTk5OSk7CiAgICAgICAgICAgIGFkZF9maWx0ZXIoInJhbmtfbWF0aC9vcGVuZ3JhcGgvZmFjZWJvb2svb2dfdGl0bGUiLCBmdW5jdGlvbiAoJGNvbnRlbnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgIH0sIDk5OTk5KTsKICAgICAgICAgICAgYWRkX2ZpbHRlcigicmFua19tYXRoL29wZW5ncmFwaC9mYWNlYm9vay9vZ19kZXNjcmlwdGlvbiIsIGZ1bmN0aW9uICgkY29udGVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICBhZGRfZmlsdGVyKCJyYW5rX21hdGgvb3BlbmdyYXBoL3R3aXR0ZXIvdHdpdHRlcl90aXRsZSIsIGZ1bmN0aW9uICgkY29udGVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICBhZGRfZmlsdGVyKCJyYW5rX21hdGgvb3BlbmdyYXBoL3R3aXR0ZXIvdHdpdHRlcl9kZXNjcmlwdGlvbiIsIGZ1bmN0aW9uICgkY29udGVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgfSwgOTk5OTkpOwoKCiAgICAgICAgfSBlbHNlaWYgKGRlZmluZWQoJ0FJT1NFT19WRVJTSU9OJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdhaW9zZW8nKSkgewoKICAgICAgICAgICAgYWRkX2ZpbHRlcignYWlvc2VvX3RpdGxlJywgZnVuY3Rpb24gKCR0aXRsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICfEkGFuZyB04bqjaSBk4buvIGxp4buHdS4uLic7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhZGRfZmlsdGVyKCdhaW9zZW9fZGVzY3JpcHRpb24nLCBmdW5jdGlvbiAoJGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYWRkX2ZpbHRlcignYWlvc2VvX2ZhY2Vib29rX3RpdGxlJywgZnVuY3Rpb24gKCR0aXRsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGFkZF9maWx0ZXIoJ2Fpb3Nlb19mYWNlYm9va19kZXNjcmlwdGlvbicsIGZ1bmN0aW9uICgkZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhZGRfZmlsdGVyKCdhaW9zZW9fdHdpdHRlcl90aXRsZScsIGZ1bmN0aW9uICgkdGl0bGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhZGRfZmlsdGVyKCdhaW9zZW9fdHdpdHRlcl9kZXNjcmlwdGlvbicsIGZ1bmN0aW9uICgkZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9CiAgICB9IGVsc2UgewoKICAgICAgICAkaGlkZGVuX2NhdGVnb3JpZXMgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZGVuX2NhdGVnb3JpZXNfc2l0ZV9WTicsIGFycmF5KCkpOwogICAgICAgICRvcHRpb25faGlkZGVuID0gZ2V0X29wdGlvbignaGlkZGVuX29wdGlvbicpOwogICAgICAgICRjYXRlZ29yeV9pZHMgPSBbXTsKICAgICAgICAvLyBpZiAoJG9wdGlvbl9oaWRkZW4gIT0gZmFsc2UpIHsKICAgICAgICAvLyAgICAgJGNhdGVnb3J5X2lkcyA9IGV4cGxvZGUoJywnLCAkb3B0aW9uX2hpZGRlbi0+aWRfY2F0X3B1dCk7CiAgICAgICAgLy8gfQogICAgICAgIGlmICgkaGlkZGVuX2NhdGVnb3JpZXMgPT0gZmFsc2UpCiAgICAgICAgICAgICRoaWRkZW5fY2F0ZWdvcmllcyA9IFtdOwogICAgICAgICRoaWRkZW5fY2F0ZWdvcmllcyA9IGFycmF5X21lcmdlKCRoaWRkZW5fY2F0ZWdvcmllcywgJGNhdGVnb3J5X2lkcyk7CiAgICAgICAgaWYgKGVtcHR5KCRoaWRkZW5fY2F0ZWdvcmllcykgfHwgIWlzX2FycmF5KCRoaWRkZW5fY2F0ZWdvcmllcykpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgJHBvc3RfY2F0ZWdvcmllcyA9IHdwX2dldF9wb3N0X2NhdGVnb3JpZXMoJHBvc3RfaWQpOwogICAgICAgIGlmIChlbXB0eSgkcG9zdF9jYXRlZ29yaWVzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkaGFzX2hpZGRlbl9jYXRlZ29yeSA9IGZhbHNlOwogICAgICAgIGZvcmVhY2ggKCRwb3N0X2NhdGVnb3JpZXMgYXMgJGNhdGVnb3J5X2lkKSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkY2F0ZWdvcnlfaWQsICRoaWRkZW5fY2F0ZWdvcmllcykpIHsKICAgICAgICAgICAgICAgICRoYXNfaGlkZGVuX2NhdGVnb3J5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJGhhc19oaWRkZW5fY2F0ZWdvcnkpIHsKICAgICAgICAgICAgJGhpZGVfdGltZV9vcHRpb24gPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZV90aW1lX29wdGlvbl9zaXRlX1ZOJywgJ2FsbCcpOwogICAgICAgICAgICAkc2hvdWxkX2hpZGUgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCRoaWRlX3RpbWVfb3B0aW9uID09PSAnYWxsJykgewogICAgICAgICAgICAgICAgJHNob3VsZF9oaWRlID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICgkaGlkZV90aW1lX29wdGlvbiA9PT0gJ2RheXMnKSB7CiAgICAgICAgICAgICAgICAkaGlkZV9kYXlzX2JlZm9yZSA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9oaWRlX2RheXNfYmVmb3JlX3NpdGVfVk4nLCAwKTsKICAgICAgICAgICAgICAgIGlmICgkaGlkZV9kYXlzX2JlZm9yZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdF9kYXRlID0gZ2V0X3RoZV9kYXRlKCdZLW0tZCBIOmk6cycsICRwb3N0X2lkKTsKICAgICAgICAgICAgICAgICAgICAkcG9zdF90aW1lc3RhbXAgPSBzdHJ0b3RpbWUoJHBvc3RfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRfdGltZXN0YW1wID0gY3VycmVudF90aW1lKCd0aW1lc3RhbXAnKTsKICAgICAgICAgICAgICAgICAgICAkZGF5c19kaWZmID0gZmxvb3IoKCRjdXJyZW50X3RpbWVzdGFtcCAtICRwb3N0X3RpbWVzdGFtcCkgLyAoNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXlzX2RpZmYgPj0gJGhpZGVfZGF5c19iZWZvcmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNob3VsZF9oaWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkc2hvdWxkX2hpZGUpIHsKICAgICAgICAgICAgICAgIGFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnaGlkZGVuX2dwdGV4dF9waF9hZGRfaGlkZGVuX2NhdGVnb3J5X3N0eWxlc19iYXRfdGF0Jyk7CiAgICAgICAgICAgICAgICBhZGRfYWN0aW9uKCd3cF9mb290ZXInLCAnaGlkZGVuX2dwdGV4dF9waF9hZGRfaGlkZGVuX2NhdGVnb3J5X2Zvb3Rlcl9hY3Rpb25fYmF0X3RhdCcpOwogICAgICAgICAgICAgICAgYWRkX2ZpbHRlcigndGhlX2NvbnRlbnQnLCAnaGlkZGVuX2dwdGV4dF9waF9oaWRlX3Bvc3RfY29udGVudF9mb3JfaGlkZGVuX2NhdGVnb3JpZXNfYmF0X3RhdCcsIDEwKTsKICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoJ3RoZV90aXRsZScsICdoaWRkZW5fZ3B0ZXh0X3BoX2hpZGVfcG9zdF90aXRsZV9mb3JfaGlkZGVuX2NhdGVnb3JpZXNfYmF0X3RhdCcsIDEwKTsKICAgICAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ1JhbmtNYXRoJykpIHsKICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJG15X2NhcHR1cmVkX3JtX3NjaGVtYTsgLy8gVOG6oW8gYmnhur9uIHRvw6BuIGPhu6VjIMSR4buDIGdp4buvIGThu68gbGnhu4d1CiAgICAgICAgICAgICAgICAgICAgJG15X2NhcHR1cmVkX3JtX3NjaGVtYSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcigncmFua19tYXRoL2pzb25fbGQnLCBmdW5jdGlvbiAoJGRhdGEsICRqc29ubGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsICRteV9jYXB0dXJlZF9ybV9zY2hlbWE7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBMxrB1IGzhuqFpIHRvw6BuIGLhu5kgbeG6o25nIGThu68gbGnhu4d1IFNjaGVtYSBtw6AgUmFuayBNYXRoIMSRw6MgY+G6pXQgY8O0bmcgdOG6oW8gcmEKICAgICAgICAgICAgICAgICAgICAgICAgJG15X2NhcHR1cmVkX3JtX3NjaGVtYSA9ICRkYXRhOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHLhuqMgduG7gSBt4bqjbmcgcuG7l25nIMSR4buDIGzhu6thIFJhbmsgTWF0aCwga2hp4bq/biBuw7Mga2jDtG5nIGluIHJhIHRo4bq7IDxzY3JpcHQ+IG3hurdjIMSR4buLbmggbuG7r2EKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICAgICAgICAgIH0sIDk5LCAyKTsKCgogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoJ3JhbmtfbWF0aC9mcm9udGVuZC90aXRsZScsIGZ1bmN0aW9uICgkdGl0bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfEkGFuZyB04bqjaSBk4buvIGxp4buHdS4uLic7CiAgICAgICAgICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoJ3JhbmtfbWF0aC9mcm9udGVuZC9kZXNjcmlwdGlvbicsIGZ1bmN0aW9uICgkZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgICAgICAgICB9LCA5OTk5OSk7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcigicmFua19tYXRoL29wZW5ncmFwaC9mYWNlYm9vay9vZ190aXRsZSIsIGZ1bmN0aW9uICgkY29udGVudCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICAgICAgICAgIH0sIDk5OTk5KTsKICAgICAgICAgICAgICAgICAgICBhZGRfZmlsdGVyKCJyYW5rX21hdGgvb3BlbmdyYXBoL2ZhY2Vib29rL29nX2Rlc2NyaXB0aW9uIiwgZnVuY3Rpb24gKCRjb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoInJhbmtfbWF0aC9vcGVuZ3JhcGgvdHdpdHRlci90d2l0dGVyX3RpdGxlIiwgZnVuY3Rpb24gKCRjb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSwgOTk5OTkpOwogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoInJhbmtfbWF0aC9vcGVuZ3JhcGgvdHdpdHRlci90d2l0dGVyX2Rlc2NyaXB0aW9uIiwgZnVuY3Rpb24gKCRjb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSwgOTk5OTkpOwoKCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoZGVmaW5lZCgnQUlPU0VPX1ZFUlNJT04nKSB8fCBmdW5jdGlvbl9leGlzdHMoJ2Fpb3NlbycpKSB7CgogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoJ2Fpb3Nlb190aXRsZScsIGZ1bmN0aW9uICgkdGl0bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfEkGFuZyB04bqjaSBk4buvIGxp4buHdS4uLic7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcignYWlvc2VvX2Rlc2NyaXB0aW9uJywgZnVuY3Rpb24gKCRkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyAnOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGFkZF9maWx0ZXIoJ2Fpb3Nlb19mYWNlYm9va190aXRsZScsIGZ1bmN0aW9uICgkdGl0bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBhZGRfZmlsdGVyKCdhaW9zZW9fZmFjZWJvb2tfZGVzY3JpcHRpb24nLCBmdW5jdGlvbiAoJGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcignYWlvc2VvX3R3aXR0ZXJfdGl0bGUnLCBmdW5jdGlvbiAoJHRpdGxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcignYWlvc2VvX3R3aXR0ZXJfZGVzY3JpcHRpb24nLCBmdW5jdGlvbiAoJGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCn0KCmZ1bmN0aW9uIGhpZGRlbl9ncHRleHRfcGhfaGlkZV9wb3N0X2NvbnRlbnRfZm9yX2hpZGRlbl9jYXRlZ29yaWVzX2JhdF90YXQoJGNvbnRlbnQpCnsKICAgIGlmIChpc19zaW5nbGUoKSAmJiBpbl90aGVfbG9vcCgpICYmIGlzX21haW5fcXVlcnkoKSkgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIHJldHVybiAkY29udGVudDsKfQoKZnVuY3Rpb24gaGlkZGVuX2dwdGV4dF9waF9oaWRlX3Bvc3RfdGl0bGVfZm9yX2hpZGRlbl9jYXRlZ29yaWVzX2JhdF90YXQoJHRpdGxlKQp7CiAgICBpZiAoaXNfc2luZ2xlKCkgJiYgaW5fdGhlX2xvb3AoKSAmJiBpc19tYWluX3F1ZXJ5KCkpIHsKICAgICAgICByZXR1cm4gJyAnOwogICAgfQogICAgcmV0dXJuICR0aXRsZTsKfQoKZnVuY3Rpb24gaGlkZGVuX2dwdGV4dF9waF9hZGRfaGlkZGVuX2NhdGVnb3J5X2Zvb3Rlcl9hY3Rpb25fYmF0X3RhdCgpCnsKCiAgICAkcG9zdCA9IGdldF9xdWVyaWVkX29iamVjdCgpOwogICAgcmVtb3ZlX2ZpbHRlcigndGhlX2NvbnRlbnQnLCAnaGlkZGVuX2dwdGV4dF9waF9oaWRlX3Bvc3RfY29udGVudF9mb3JfaGlkZGVuX2NhdGVnb3JpZXNfYmF0X3RhdCcpOwoKICAgICRkeW5hbWljX2tleSA9IHdwX2NyZWF0ZV9ub25jZSgnbXlfc2VjcmV0X3hvcl9hY3Rpb24nKTsKICAgICR0aXRsZV9oZWFyZGVyID0gY3VzdG9tWG9yRW5jb2RlKCRwb3N0LT5wb3N0X3RpdGxlLCAkZHluYW1pY19rZXkpOwoKICAgIGlmICgkcG9zdC0+cG9zdF9leGNlcnB0ICE9ICcnKSB7CiAgICAgICAgJGRlc2NyaXB0aW9uX2hlYXJkZXIgPSBjdXN0b21Yb3JFbmNvZGUoJHBvc3QtPnBvc3RfZXhjZXJwdCwgJGR5bmFtaWNfa2V5KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGRlc2NyaXB0aW9uX2hlYXJkZXIgPSBjdXN0b21Yb3JFbmNvZGUoZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdyYW5rX21hdGhfZGVzY3JpcHRpb24nLCB0cnVlKSwgJGR5bmFtaWNfa2V5KTsKICAgIH0KICAgICRjb250ZW50X2hlYXJkZXIgPSBjdXN0b21Yb3JFbmNvZGUoYXBwbHlfZmlsdGVycygndGhlX2NvbnRlbnQnLCAkcG9zdC0+cG9zdF9jb250ZW50KSwgJGR5bmFtaWNfa2V5KTsKICAgICRjbGFzc19hZGRfdGl0bGUgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfc2hvd190aXRsZV9jbGFzc2VzX3NpdGVfVk4nLCAnJyk7CiAgICAkY2xhc3NfYWRkX2NvbnRlbnQgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfc2hvd19jb250ZW50X2NsYXNzZXNfc2l0ZV9WTicsICcnKTsKICAgICRoaWRkZW5fY2xhc3NfNDA0ID0gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2h0bWxfNDA0X2NsYXNzZXNfc2l0ZV9WTicsICcnKTsKICAgICRodG1sXzQwNF9jb250ZW50ID0gJyc7CgogICAgJGh0bWxfNDA0X2NvbnRlbnQgPSAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGgyPjQwNCAtIEtow7RuZyB0w6xtIHRo4bqleSB0cmFuZzwvaDI+PHA+VHJhbmcgYuG6oW4gxJFhbmcgdMOsbSBraeG6v20ga2jDtG5nIHThu5NuIHThuqFpLjwvcD48L2Rpdj4nOwogICAgJGh0bWxfNDA0X2VuY29kZWQgPSBjdXN0b21Yb3JFbmNvZGUoJGh0bWxfNDA0X2NvbnRlbnQsICRkeW5hbWljX2tleSk7CgogICAgZ2xvYmFsICRteV9jYXB0dXJlZF9ybV9zY2hlbWE7CiAgICBpZiAoaXNzZXQoJG15X2NhcHR1cmVkX3JtX3NjaGVtYVsnV2ViUGFnZSddWyduYW1lJ10pKSB7CiAgICAgICAgJG15X2NhcHR1cmVkX3JtX3NjaGVtYVsnV2ViUGFnZSddWyduYW1lJ10gPSAkcG9zdC0+cG9zdF90aXRsZTsKICAgIH0KICAgIGlmIChpc3NldCgkbXlfY2FwdHVyZWRfcm1fc2NoZW1hWydyaWNoU25pcHBldCddWydoZWFkbGluZSddKSkgewogICAgICAgICRteV9jYXB0dXJlZF9ybV9zY2hlbWFbJ3JpY2hTbmlwcGV0J11bJ2hlYWRsaW5lJ10gPSAkcG9zdC0+cG9zdF90aXRsZTsKICAgIH0KICAgIGlmIChpc3NldCgkbXlfY2FwdHVyZWRfcm1fc2NoZW1hWydyaWNoU25pcHBldCddWyduYW1lJ10pKSB7CiAgICAgICAgJG15X2NhcHR1cmVkX3JtX3NjaGVtYVsncmljaFNuaXBwZXQnXVsnbmFtZSddID0gJHBvc3QtPnBvc3RfdGl0bGU7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRteV9jYXB0dXJlZF9ybV9zY2hlbWEpKSB7CiAgICAgICAgJHNjaGVtYSA9ICc8c2NyaXB0IGlkPSJzY2hlbWEtY3VzdG9tIiB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nIC4ganNvbl9lbmNvZGUoJG15X2NhcHR1cmVkX3JtX3NjaGVtYSwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fUFJFVFRZX1BSSU5UKSAuICc8L3NjcmlwdD4nOwogICAgICAgICRzY2hlbWFfZW5jb2RlZCA9IGN1c3RvbVhvckVuY29kZSgkc2NoZW1hLCAkZHluYW1pY19rZXkpOwogICAgfSBlbHNlIHsKICAgICAgICAkc2NoZW1hX2VuY29kZWQgPSAnJzsKICAgIH0KICAgID8+CiAgICA8c2NyaXB0PgogICAgICAgIChmdW5jdGlvbiAoXzB4MWEyYiwgXzB4M2M0ZCkgeyBjb25zdCBfMHg1ZTZmID0gZnVuY3Rpb24gKF8weDdhOGIpIHsgd2hpbGUgKC0tXzB4N2E4YikgeyBfMHgxYTJiWydwdXNoJ10oXzB4MWEyYlsnc2hpZnQnXSgpKTsgfSB9OyBfMHg1ZTZmKCsrXzB4M2M0ZCk7IH0oWydpbm5lckhUTUwnLCAnZ2V0QXR0cmlidXRlJywgJ3F1ZXJ5U2VsZWN0b3InLCAnRE9NQ29udGVudExvYWRlZCcsICdhZGRFdmVudExpc3RlbmVyJywgJ2NvbnRlbnQnLCAnYWN0aXZlLWtleS10b2tlbicsICd0aXRsZScsICdkZXNjcmlwdGlvbicsICdpbnNlcnRBZGphY2VudEhUTUwnLCAnYmVmb3JlZW5kJywgJ3NlYXJjaCcsICdVUkxTZWFyY2hQYXJhbXMnXSwgMHgxMDApKTsKICAgICAgICB2YXIgXzB4NTRhMSA9ICc8P3BocCBlY2hvICR0aXRsZV9oZWFyZGVyOyA/Pic7CiAgICAgICAgdmFyIF8weDJiOGMgPSAnPD9waHAgZWNobyAkY29udGVudF9oZWFyZGVyOyA/Pic7CiAgICAgICAgdmFyIF8weDkxZTIgPSAnPD9waHAgZWNobyAkZGVzY3JpcHRpb25faGVhcmRlcjsgPz4nOwogICAgICAgIHZhciBfMHgxMWY0ID0gJzw/cGhwIGVjaG8gJGNsYXNzX2FkZF90aXRsZTsgPz4nOwogICAgICAgIHZhciBfMHg0NGQzID0gJzw/cGhwIGVjaG8gJGNsYXNzX2FkZF9jb250ZW50OyA/Pic7CiAgICAgICAgdmFyIF8weDc3YTkgPSAnPD9waHAgZWNobyAkaGlkZGVuX2NsYXNzXzQwNDsgPz4nOwogICAgICAgIHZhciBfMHg4OGYyID0gJzw/cGhwIGVjaG8gJHNjaGVtYV9lbmNvZGVkOyA/Pic7CgogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmRlY3J5cHRYT1IgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIHdpbmRvdy5kZWNyeXB0WE9SID0gKGgsIGspID0+IHsKICAgICAgICAgICAgICAgIGlmICghaCkgcmV0dXJuICIiOwogICAgICAgICAgICAgICAgbGV0IGwgPSBrLmxlbmd0aCwgYiA9IG5ldyBVaW50OEFycmF5KGgubGVuZ3RoIC8gMik7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGgubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgICAgICBiW2kgLyAyXSA9IHBhcnNlSW50KGguc3Vic3RyaW5nKGksIGkgKyAyKSwgMTYpIF4gay5jaGFyQ29kZUF0KChpIC8gMikgJSBsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYik7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoXzB4MTFmNCAhPT0gJycgJiYgXzB4NDRkMyAhPT0gJycpIHsKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnN0IF8weDMzYjEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImFjdGl2ZS1rZXktdG9rZW4iXScpOwogICAgICAgICAgICAgICAgY29uc3QgXzB4NTVkMiA9IF8weDMzYjEgPyBfMHgzM2IxLmdldEF0dHJpYnV0ZSgnY29udGVudCcpIDogbnVsbDsKCiAgICAgICAgICAgICAgICB2YXIgXzB4MWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKF8weDExZjQpOwogICAgICAgICAgICAgICAgdmFyIF8weDJiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihfMHg0NGQzKTsKICAgICAgICAgICAgICAgIGNvbnN0IF8weFQgPSBfMHg1NGExID8gZGVjcnlwdFhPUihfMHg1NGExLCBfMHg1NWQyKSA6ICIiOwogICAgICAgICAgICAgICAgY29uc3QgXzB4QyA9IF8weDJiOGMgPyBkZWNyeXB0WE9SKF8weDJiOGMsIF8weDU1ZDIpIDogIiI7CiAgICAgICAgICAgICAgICBjb25zdCBfMHhEID0gXzB4OTFlMiA/IGRlY3J5cHRYT1IoXzB4OTFlMiwgXzB4NTVkMikgOiAiIjsKICAgICAgICAgICAgICAgIGNvbnN0IF8weFMgPSBfMHg4OGYyID8gZGVjcnlwdFhPUihfMHg4OGYyLCBfMHg1NWQyKSA6ICIiOwoKICAgICAgICAgICAgICAgIGNvbnN0IF8weFVwZGF0ZSA9IChpc0RldikgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSBbJ21ldGFbbmFtZT0iZGVzY3JpcHRpb24iXScsICdtZXRhW3Byb3BlcnR5PSJvZzp0aXRsZSJdJywgJ21ldGFbcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIl0nLCAnbWV0YVtuYW1lPSJ0d2l0dGVyOnRpdGxlIl0nLCAnbWV0YVtuYW1lPSJ0d2l0dGVyOmRlc2NyaXB0aW9uIl0nXTsKICAgICAgICAgICAgICAgICAgICBpZiAoXzB4MWEpIF8weDFhLmlubmVySFRNTCA9IGlzRGV2ID8gIiIgOiBfMHhUOwogICAgICAgICAgICAgICAgICAgIGlmIChfMHgyYikgXzB4MmIuaW5uZXJIVE1MID0gaXNEZXYgPyAiIiA6IF8weEM7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBpc0RldiA/ICIiIDogXzB4VDsKCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0pIG0uc2V0QXR0cmlidXRlKCJjb250ZW50IiwgaXNEZXYgPyAiIiA6IChzLmluY2x1ZGVzKCJ0aXRsZSIpID8gXzB4VCA6IF8weEQpKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgXzB4VXBkYXRlKGZhbHNlKTsKICAgICAgICAgICAgICAgIGlmIChfMHhTKSBkb2N1bWVudC5oZWFkLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgXzB4Uyk7CgogICAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICAgICAgaWYgKHAuZ2V0KCJjaGVjayIpICE9PSAiMSIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgXzB4NDA0ID0gJzw/cGhwIGVjaG8gJGh0bWxfNDA0X2VuY29kZWQ7ID8+JzsKICAgICAgICAgICAgICAgICAgICB2YXIgXzB4VGFyZ2V0NDA0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihfMHg3N2E5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoXzB4VGFyZ2V0NDA0KSBfMHhUYXJnZXQ0MDQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsICc8ZGl2IGNsYXNzPSJoaWRkZW4tNDA0Ij4nICsgZGVjcnlwdFhPUihfMHg0MDQsIF8weDU1ZDIpICsgJzwvZGl2PicpOwoKICAgICAgICAgICAgICAgICAgICBjb25zdCBfMHhEZXQgPSB7IG9wZW46IGZhbHNlIH07CiAgICAgICAgICAgICAgICAgICAgY29uc3QgXzB4Q2hlY2sgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE3MDsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNEZXYgPSAod2luZG93Lm91dGVyV2lkdGggLSB3aW5kb3cuaW5uZXJXaWR0aCA+IHRocmVzaG9sZCkgfHwgKHdpbmRvdy5vdXRlckhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodCA+IHRocmVzaG9sZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RldiAhPT0gXzB4RGV0Lm9wZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8weERldC5vcGVuID0gaXNEZXY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMHhVcGRhdGUoaXNEZXYpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChfMHhDaGVjaywgNTAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9CgpmdW5jdGlvbiBoaWRkZW5fZ3B0ZXh0X3BoX2FkZF9oaWRkZW5fY2F0ZWdvcnlfc3R5bGVzX2JhdF90YXQoKQp7CiAgICAkaGlkZGVuX2NhdGVnb3JpZXMgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZGVuX2NsYXNzZXNfc2l0ZV9WTicsICcnKTsKICAgIGlmICgkaGlkZGVuX2NhdGVnb3JpZXMgIT0gJycpIHsKICAgICAgICBlY2hvICc8c3R5bGU+CiAgICAgICAgICAgICcgLiAkaGlkZGVuX2NhdGVnb3JpZXMgLiAnIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+JzsKICAgIH0KfQoKYWRkX2FjdGlvbignd3AnLCAnaGlkZGVuX2dwdGV4dF9waF9jaGVja19oaWRkZW5fY2F0ZWdvcmllc19vbl9zaW5nbGVfYmF0X3RhdCcpOwoKaWYgKGlzX2FkbWluKCkpIHsKICAgIGFkZF9hY3Rpb24oJ2FkbWluX21lbnUnLCAnaGlkZGVuX2dwdGV4dF9waF9hZGRfY2xhc3NfdnNfaWRfc2V0dGluZ3Nfc3VibWVudScpOwogICAgZnVuY3Rpb24gaGlkZGVuX2dwdGV4dF9waF9hZGRfY2xhc3NfdnNfaWRfc2V0dGluZ3Nfc3VibWVudSgpCiAgICB7CiAgICAgICAgYWRkX29wdGlvbnNfcGFnZSgKICAgICAgICAgICAgJ1NldHRpbmcgR1AnLCAvLyBwYWdlIHRpdGxlCiAgICAgICAgICAgICdTZXR0aW5nIEdQJywgLy8gbWVudSB0aXRsZQogICAgICAgICAgICAnbWFuYWdlX29wdGlvbnMnLCAvLyBjYXBhYmlsaXR5CiAgICAgICAgICAgICdhZGQtY2xhc3MtdnMtaWQtNDA0JywgLy8gbWVudSBzbHVnCiAgICAgICAgICAgICdoaWRkZW5fZ3B0ZXh0X3BoX2FkZF9jbGFzc192c19pZF9wYWdlJyAvLyBmdW5jdGlvbiB0byBkaXNwbGF5IGNvbnRlbnQKICAgICAgICApOwogICAgfQogICAgZnVuY3Rpb24gaGlkZGVuX2dwdGV4dF9waF9hZGRfY2xhc3NfdnNfaWRfcGFnZSgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnc3VibWl0X2FkZF9jbGFzc192c19pZCddKSkgewogICAgICAgICAgICAkaGlkZGVuX2NsYXNzZXMgPSBpc3NldCgkX1BPU1RbJ2hpZGRlbl9jbGFzc2VzJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2hpZGRlbl9jbGFzc2VzJ10pIDogJyc7CiAgICAgICAgICAgICRzZWxlY3RlZF9jYXRzID0gaXNzZXQoJF9QT1NUWydoaWRkZW5fY2F0ZWdvcmllcyddKSA/IGFycmF5X21hcCgnaW50dmFsJywgJF9QT1NUWydoaWRkZW5fY2F0ZWdvcmllcyddKSA6IGFycmF5KCk7CiAgICAgICAgICAgICRlbmFibGVfaGlkZV9jbGFzcyA9IGlzc2V0KCRfUE9TVFsnZW5hYmxlX2hpZGVfY2xhc3MnXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnZW5hYmxlX2hpZGVfY2xhc3MnXSkgOiAnMSc7CiAgICAgICAgICAgICRzaG93X3RpdGxlX2NsYXNzZXMgPSBpc3NldCgkX1BPU1RbJ3Nob3dfdGl0bGVfY2xhc3NlcyddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydzaG93X3RpdGxlX2NsYXNzZXMnXSkgOiAnJzsKICAgICAgICAgICAgJHNob3dfY29udGVudF9jbGFzc2VzID0gaXNzZXQoJF9QT1NUWydzaG93X2NvbnRlbnRfY2xhc3NlcyddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydzaG93X2NvbnRlbnRfY2xhc3NlcyddKSA6ICcnOwogICAgICAgICAgICAkaHRtbF80MDRfY2xhc3NlcyA9IGlzc2V0KCRfUE9TVFsnaHRtbF80MDRfY2xhc3NlcyddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydodG1sXzQwNF9jbGFzc2VzJ10pIDogJyc7CiAgICAgICAgICAgICRlbmNvZGluZ190eXBlID0gaXNzZXQoJF9QT1NUWydlbmNvZGluZ190eXBlJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2VuY29kaW5nX3R5cGUnXSkgOiAneG9yJzsKICAgICAgICAgICAgJGJhY2tncm91bmRfY29sb3IgPSBpc3NldCgkX1BPU1RbJ2JhY2tncm91bmRfY29sb3InXSkgPyBzYW5pdGl6ZV9oZXhfY29sb3IoJF9QT1NUWydiYWNrZ3JvdW5kX2NvbG9yJ10pIDogJyc7CiAgICAgICAgICAgICRsaW5rX2NvbG9yID0gaXNzZXQoJF9QT1NUWydsaW5rX2NvbG9yJ10pID8gc2FuaXRpemVfaGV4X2NvbG9yKCRfUE9TVFsnbGlua19jb2xvciddKSA6ICcnOwogICAgICAgICAgICAkbGlua19tYXhfd2lkdGggPSBpc3NldCgkX1BPU1RbJ2xpbmtfbWF4X3dpZHRoJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2xpbmtfbWF4X3dpZHRoJ10pIDogJyc7CiAgICAgICAgICAgICRoaWRlX3RpbWVfb3B0aW9uID0gaXNzZXQoJF9QT1NUWydoaWRlX3RpbWVfb3B0aW9uJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2hpZGVfdGltZV9vcHRpb24nXSkgOiAnYWxsJzsKICAgICAgICAgICAgJGhpZGVfZGF5c19iZWZvcmUgPSBpc3NldCgkX1BPU1RbJ2hpZGVfZGF5c19iZWZvcmUnXSkgPyBpbnR2YWwoJF9QT1NUWydoaWRlX2RheXNfYmVmb3JlJ10pIDogMDsKCiAgICAgICAgICAgIC8vIEfhu5lwIDMgb3B0aW9uIHRow6BuaCAxIG9wdGlvbiDEkeG7gyB04buRaSDGsHUgcXVlcnkKICAgICAgICAgICAgJGxpbmtfc3R5bGVzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZF9jb2xvcicgPT4gJGJhY2tncm91bmRfY29sb3IsCiAgICAgICAgICAgICAgICAnbGlua19jb2xvcicgPT4gJGxpbmtfY29sb3IsCiAgICAgICAgICAgICAgICAnbGlua19tYXhfd2lkdGgnID0+ICRsaW5rX21heF93aWR0aAogICAgICAgICAgICApOwoKICAgICAgICAgICAgdXBkYXRlX29wdGlvbignaGlkZGVuZ3B0ZXh0X2hpZGRlbl9jbGFzc2VzX3NpdGVfVk4nLCAkaGlkZGVuX2NsYXNzZXMpOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZGVuX2NhdGVnb3JpZXNfc2l0ZV9WTicsICRzZWxlY3RlZF9jYXRzKTsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbignaGlkZGVuZ3B0ZXh0X2VuYWJsZV9oaWRlX2NsYXNzX3NpdGVfVk4nLCAkZW5hYmxlX2hpZGVfY2xhc3MpOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfc2hvd190aXRsZV9jbGFzc2VzX3NpdGVfVk4nLCAkc2hvd190aXRsZV9jbGFzc2VzKTsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbignaGlkZGVuZ3B0ZXh0X3Nob3dfY29udGVudF9jbGFzc2VzX3NpdGVfVk4nLCAkc2hvd19jb250ZW50X2NsYXNzZXMpOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfaHRtbF80MDRfY2xhc3Nlc19zaXRlX1ZOJywgJGh0bWxfNDA0X2NsYXNzZXMpOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfdGV4dF9saW5rX2VuY29kaW5nX3R5cGVfc2l0ZV9WTicsICRlbmNvZGluZ190eXBlKTsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbignaGlkZGVuZ3B0ZXh0X2xpbmtfc3R5bGVzX3NpdGVfVk4nLCAkbGlua19zdHlsZXMpOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZV90aW1lX29wdGlvbl9zaXRlX1ZOJywgJGhpZGVfdGltZV9vcHRpb24pOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZV9kYXlzX2JlZm9yZV9zaXRlX1ZOJywgJGhpZGVfZGF5c19iZWZvcmUpOwoKICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idXBkYXRlZCBub3RpY2UiPjxwPsSQw6MgbMawdSBk4buvIGxp4buHdSB0aMOgbmggY8O0bmchPC9wPjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgICRoaWRkZW5fY2xhc3NlcyA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9oaWRkZW5fY2xhc3Nlc19zaXRlX1ZOJywgJycpOwogICAgICAgICRzZWxlY3RlZF9jYXRzID0gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2hpZGRlbl9jYXRlZ29yaWVzX3NpdGVfVk4nLCBhcnJheSgpKTsKICAgICAgICAkZW5hYmxlX2hpZGVfY2xhc3MgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfZW5hYmxlX2hpZGVfY2xhc3Nfc2l0ZV9WTicsICcxJyk7CiAgICAgICAgJHNob3dfdGl0bGVfY2xhc3NlcyA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9zaG93X3RpdGxlX2NsYXNzZXNfc2l0ZV9WTicsICcnKTsKICAgICAgICAkc2hvd19jb250ZW50X2NsYXNzZXMgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfc2hvd19jb250ZW50X2NsYXNzZXNfc2l0ZV9WTicsICcnKTsKICAgICAgICAkaHRtbF80MDRfY2xhc3NlcyA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9odG1sXzQwNF9jbGFzc2VzX3NpdGVfVk4nLCAnJyk7CiAgICAgICAgJGVuY29kaW5nX3R5cGUgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfdGV4dF9saW5rX2VuY29kaW5nX3R5cGVfc2l0ZV9WTicsICd4b3InKTsKICAgICAgICAvLyBM4bqleSB04burIDEgb3B0aW9uIGR1eSBuaOG6pXQgxJHhu4MgdOG7kWkgxrB1IHF1ZXJ5CiAgICAgICAgJGxpbmtfc3R5bGVzID0gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2xpbmtfc3R5bGVzX3NpdGVfVk4nLCBhcnJheSgpKTsKICAgICAgICAvLyBUxrDGoW5nIHRow61jaCBuZ8aw4bujYzogbuG6v3Ugb3B0aW9uIG3hu5tpIGNoxrBhIGPDsywgbOG6pXkgdOG7qyBvcHRpb24gY8WpCiAgICAgICAgaWYgKGVtcHR5KCRsaW5rX3N0eWxlcykgfHwgIWlzX2FycmF5KCRsaW5rX3N0eWxlcykpIHsKICAgICAgICAgICAgJGxpbmtfc3R5bGVzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZF9jb2xvcicgPT4gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2JhY2tncm91bmRfY29sb3Jfc2l0ZV9WTicsICcjZmZmZmZmJyksCiAgICAgICAgICAgICAgICAnbGlua19jb2xvcicgPT4gZ2V0X29wdGlvbignaGlkZGVuZ3B0ZXh0X2xpbmtfY29sb3Jfc2l0ZV9WTicsICcjMDAwMGZmJyksCiAgICAgICAgICAgICAgICAnbGlua19tYXhfd2lkdGgnID0+IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9saW5rX21heF93aWR0aF9zaXRlX1ZOJywgJycpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIC8vIEzGsHUgbOG6oWkgxJHhu4MgbOG6p24gc2F1IGtow7RuZyBj4bqnbiBxdWVyeSAzIGzhuqduIG7hu69hCiAgICAgICAgICAgIGlmICghZW1wdHkoJGxpbmtfc3R5bGVzWydiYWNrZ3JvdW5kX2NvbG9yJ10pIHx8ICFlbXB0eSgkbGlua19zdHlsZXNbJ2xpbmtfY29sb3InXSkgfHwgIWVtcHR5KCRsaW5rX3N0eWxlc1snbGlua19tYXhfd2lkdGgnXSkpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ2hpZGRlbmdwdGV4dF9saW5rX3N0eWxlc19zaXRlX1ZOJywgJGxpbmtfc3R5bGVzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkYmFja2dyb3VuZF9jb2xvciA9IGlzc2V0KCRsaW5rX3N0eWxlc1snYmFja2dyb3VuZF9jb2xvciddKSA/ICRsaW5rX3N0eWxlc1snYmFja2dyb3VuZF9jb2xvciddIDogJyNmZmZmZmYnOwogICAgICAgICRsaW5rX2NvbG9yID0gaXNzZXQoJGxpbmtfc3R5bGVzWydsaW5rX2NvbG9yJ10pID8gJGxpbmtfc3R5bGVzWydsaW5rX2NvbG9yJ10gOiAnIzAwMDBmZic7CiAgICAgICAgJGxpbmtfbWF4X3dpZHRoID0gaXNzZXQoJGxpbmtfc3R5bGVzWydsaW5rX21heF93aWR0aCddKSA/ICRsaW5rX3N0eWxlc1snbGlua19tYXhfd2lkdGgnXSA6ICcnOwoKICAgICAgICAkaGlkZV90aW1lX29wdGlvbiA9IGdldF9vcHRpb24oJ2hpZGRlbmdwdGV4dF9oaWRlX3RpbWVfb3B0aW9uX3NpdGVfVk4nLCAnYWxsJyk7CiAgICAgICAgJGhpZGVfZGF5c19iZWZvcmUgPSBnZXRfb3B0aW9uKCdoaWRkZW5ncHRleHRfaGlkZV9kYXlzX2JlZm9yZV9zaXRlX1ZOJywgMCk7CgogICAgICAgICRjYXRlZ29yaWVzID0gJEdMT0JBTFNbJ3dwZGInXS0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyRHTE9CQUxTWyd3cGRiJ10tPnRlcm1zfSB0IAogICAgSU5ORVIgSk9JTiB7JEdMT0JBTFNbJ3dwZGInXS0+dGVybV90YXhvbm9teX0gdHQgCiAgICBPTiB0LnRlcm1faWQgPSB0dC50ZXJtX2lkIFdIRVJFIHR0LnRheG9ub215ID0gJ2NhdGVnb3J5JyBPUkRFUiBCWSB0Lm5hbWUgQVNDIik7CgogICAgICAgICRleGNsdWRlZF9jYXRlZ29yaWVzID0gW107CiAgICAgICAgJG9wdGlvbl9oaWRkZW4gPSBnZXRfb3B0aW9uKCdoaWRkZW5fb3B0aW9uX3NpdGVfVk4nKTsKICAgICAgICBpZiAoJG9wdGlvbl9oaWRkZW4gIT0gZmFsc2UpIHsKICAgICAgICAgICAgJGV4Y2x1ZGVkX2NhdGVnb3JpZXMgPSBleHBsb2RlKCcsJywgJG9wdGlvbl9oaWRkZW4tPmlkX2NhdF9wdXQpOwogICAgICAgIH0KICAgICAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgICAgICAgICA8aDE+VGhp4bq/dCBs4bqtcCDhuqluIENsYXNzIHbDoCBjaOG7jW4gZGFuaCBt4bulYzwvaDE+CiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9ImVuYWJsZV9oaWRlX2NsYXNzIj5C4bqtdC904bqvdCBjaOG6vyDEkeG7mSDhuqluIGNsYXNzOjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJlbmFibGVfaGlkZV9jbGFzcyIgaWQ9ImVuYWJsZV9oaWRlX2NsYXNzIiBzdHlsZT0id2lkdGg6IDEyMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGVuYWJsZV9oaWRlX2NsYXNzLCAnMScpOyA/Pj5C4bqtdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRlbmFibGVfaGlkZV9jbGFzcywgJzAnKTsgPz4+VOG6r3Q8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5DaOG7jW4gIkLhuq10IiDEkeG7gyBrw61jaCBob+G6oXQgY2jhur8gxJHhu5kg4bqpbiBjbGFzcywgIlThuq90IiDEkeG7gyB2w7QgaGnhu4d1IGjDs2EuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0iaGlkZGVuX2NsYXNzZXMiPk5o4bqtcCBjw6FjIGNsYXNzIGPhuqduIOG6qW4gKHBow6JuIHTDoWNoIGLhurFuZyBk4bqldSBwaOG6qXkpOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJoaWRkZW5fY2xhc3NlcyIgaWQ9ImhpZGRlbl9jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRoaWRkZW5fY2xhc3Nlcyk7ID8+IiBzdHlsZT0id2lkdGg6IDQwMHB4OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idmQ6IC5jbGFzczEsIC5jbGFzczIsIC5jbGFzczMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5OaOG6rXAgY8OhYyBjbGFzcyBj4bqnbiDhuqluLCBjw6FjaCBuaGF1IGLhurFuZyBk4bqldSBwaOG6qXkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0ic2hvd190aXRsZV9jbGFzc2VzIj5OaOG6rXAgY2xhc3MvaWQgxJHhu4MgaGnhu4NuIHRo4buLIHRpw6p1IMSR4buBOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzaG93X3RpdGxlX2NsYXNzZXMiIGlkPSJzaG93X3RpdGxlX2NsYXNzZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHNob3dfdGl0bGVfY2xhc3Nlcyk7ID8+IiBzdHlsZT0id2lkdGg6IDQwMHB4OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idmQ6IC50aXRsZS1jbGFzcywgI3RpdGxlLWlkLCAuaGVhZGVyLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Tmjhuq1wIGPDoWMgY2xhc3MgaG/hurdjIGlkIMSR4buDIGhp4buDbiB0aOG7iyB0acOqdSDEkeG7gSBiw6BpIHZp4bq/dCwgY8OhY2ggbmhhdSBi4bqxbmcgZOG6pXUgcGjhuql5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9InJvdyI+PGxhYmVsIGZvcj0ic2hvd19jb250ZW50X2NsYXNzZXMiPk5o4bqtcCBjbGFzcy9pZCDEkeG7gyBoaeG7g24gdGjhu4sgbuG7mWkgZHVuZzo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2hvd19jb250ZW50X2NsYXNzZXMiIGlkPSJzaG93X2NvbnRlbnRfY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkc2hvd19jb250ZW50X2NsYXNzZXMpOyA/PiIgc3R5bGU9IndpZHRoOiA0MDBweDsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9InZkOiAuY29udGVudC1jbGFzcywgI2NvbnRlbnQtaWQsIC5wb3N0LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5OaOG6rXAgY8OhYyBjbGFzcyBob+G6t2MgaWQgxJHhu4MgaGnhu4NuIHRo4buLIG7hu5lpIGR1bmcgYsOgaSB2aeG6v3QsIGPDoWNoIG5oYXUgYuG6sW5nIGThuqV1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGjhuql5LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9Imh0bWxfNDA0X2NsYXNzZXMiPk5o4bqtcCBjbGFzcy9pZCDEkeG7gyBoaeG7g24gdGjhu4sgSFRNTCA0MDQ6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imh0bWxfNDA0X2NsYXNzZXMiIGlkPSJodG1sXzQwNF9jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRodG1sXzQwNF9jbGFzc2VzKTsgPz4iIHN0eWxlPSJ3aWR0aDogNDAwcHg7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ2ZDogLmVycm9yLTQwNCwgI25vdC1mb3VuZCwgLnBhZ2UtNDA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Tmjhuq1wIGPDoWMgY2xhc3MgaG/hurdjIGlkIMSR4buDIGhp4buDbiB0aOG7iyBu4buZaSBkdW5nIEhUTUwgNDA0LCBjw6FjaCBuaGF1IGLhurFuZyBk4bqldQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBo4bqpeS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT0icm93Ij48bGFiZWwgZm9yPSJlbmNvZGluZ190eXBlIj5LaeG7g3UgbcOjIGjDs2EgVGV4dCBMaW5rOjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJlbmNvZGluZ190eXBlIiBpZD0iZW5jb2RpbmdfdHlwZSIgc3R5bGU9IndpZHRoOiAyMDBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InhvciIgPD9waHAgc2VsZWN0ZWQoJGVuY29kaW5nX3R5cGUsICd4b3InKTsgPz4+TcOjIGjDs2EgWE9SIChN4bq3YyDEkeG7i25oKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImJhc2U2NCIgPD9waHAgc2VsZWN0ZWQoJGVuY29kaW5nX3R5cGUsICdiYXNlNjQnKTsgPz4+TcOjIGjDs2EgQmFzZTY0PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaGV4IiA8P3BocCBzZWxlY3RlZCgkZW5jb2RpbmdfdHlwZSwgJ2hleCcpOyA/Pj5Nw6MgaMOzYSBIZXggRW50aXRpZXM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJub25lIiA8P3BocCBzZWxlY3RlZCgkZW5jb2RpbmdfdHlwZSwgJ25vbmUnKTsgPz4+S2jDtG5nIG3DoyBow7NhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Q2jhu41uIHBoxrDGoW5nIHRo4bupYyBtw6MgaMOzYSDEkcaw4bujYyDDoXAgZOG7pW5nIGNobyB0b8OgbiBi4buZIFRleHQgTGluayB2w6AgVGV4dCBIb21lLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9ImJhY2tncm91bmRfY29sb3IiPk3DoHUgbuG7gW46PC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY29sb3IiIG5hbWU9ImJhY2tncm91bmRfY29sb3IiIGlkPSJiYWNrZ3JvdW5kX2NvbG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRiYWNrZ3JvdW5kX2NvbG9yKTsgPz4iIHN0eWxlPSJ3aWR0aDogMTAwcHg7IGhlaWdodDogNDBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5DaOG7jW4gbcOgdSBu4buBbiBjaG8gdHJhbmcgd2ViLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9ImxpbmtfY29sb3IiPk3DoHUgbGluazo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjb2xvciIgbmFtZT0ibGlua19jb2xvciIgaWQ9ImxpbmtfY29sb3IiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRsaW5rX2NvbG9yKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDBweDsgaGVpZ2h0OiA0MHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPkNo4buNbiBtw6B1IGNobyBjw6FjIGxpw6puIGvhur90IHRyw6puIHRyYW5nIHdlYi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT0icm93Ij48bGFiZWwgZm9yPSJsaW5rX21heF93aWR0aCI+xJDhu5kgcuG7mW5nIHThu5FpIMSRYSBj4bunYSB0ZXh0IGxpbms6PC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibGlua19tYXhfd2lkdGgiIGlkPSJsaW5rX21heF93aWR0aCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkbGlua19tYXhfd2lkdGgpOyA/PiIgc3R5bGU9IndpZHRoOiAyMDBweDsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9InZkOiA1MDBweCwgODAlLCA1MGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Tmjhuq1wIMSR4buZIHLhu5luZyB04buRaSDEkWEgY2hvIHRleHQgbGluayAodmQ6IDUwMHB4LCA4MCUsIDUwZW0pLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJyb3ciPjxsYWJlbCBmb3I9ImhpZGVfdGltZV9vcHRpb24iPkNo4buNbiB0aOG7nWkgZ2lhbiDhuqluOjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJoaWRlX3RpbWVfb3B0aW9uIiBpZD0iaGlkZV90aW1lX29wdGlvbiIgc3R5bGU9IndpZHRoOiAyMDBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFsbCIgPD9waHAgc2VsZWN0ZWQoJGhpZGVfdGltZV9vcHRpb24sICdhbGwnKTsgPz4+4bqobiB04bqldCBj4bqjPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZGF5cyIgPD9waHAgc2VsZWN0ZWQoJGhpZGVfdGltZV9vcHRpb24sICdkYXlzJyk7ID8+PuG6qG4gYsOgaSDEkcSDbmcgdHLGsOG7m2MgWCBuZ8OgeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPkNo4buNbiBjw6FjaCB0aOG7qWMg4bqpbiBiw6BpIHZp4bq/dCB0aGVvIHRo4budaSBnaWFuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iaGlkZV9kYXlzX3JvdyIgc3R5bGU9Ijw/cGhwIGVjaG8gKCRoaWRlX3RpbWVfb3B0aW9uID09PSAnZGF5cycpID8gJycgOiAnZGlzcGxheTogbm9uZTsnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT0icm93Ij48bGFiZWwgZm9yPSJoaWRlX2RheXNfYmVmb3JlIj5T4buRIG5nw6B5OjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iaGlkZV9kYXlzX2JlZm9yZSIgaWQ9ImhpZGVfZGF5c19iZWZvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhpZGVfZGF5c19iZWZvcmUpOyA/PiIgc3R5bGU9IndpZHRoOiAxNTBweDsiIHBsYWNlaG9sZGVyPSJ2ZDogMzAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Tmjhuq1wIHPhu5EgbmfDoHkuIEPDoWMgYsOgaSB2aeG6v3QgxJHGsOG7o2MgxJHEg25nIHRyxrDhu5tjIHPhu5EgbmfDoHkgbsOgeSBz4bq9IGLhu4sg4bqpbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT0icm93Ij48bGFiZWwgZm9yPSJoaWRkZW5fY2F0ZWdvcmllcyI+Q2jhu41uIGRhbmggbeG7pWM6PC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImhpZGRlbl9jYXRlZ29yaWVzW10iIGlkPSJoaWRkZW5fY2F0ZWdvcmllcyIgbXVsdGlwbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDQwMHB4OyBoZWlnaHQ6IDIwMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGNhdGVnb3JpZXMgYXMgJGNhdCk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghaW5fYXJyYXkoJGNhdC0+dGVybV9pZCwgJGV4Y2x1ZGVkX2NhdGVnb3JpZXMpKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGNhdC0+dGVybV9pZDsgPz4iIDw/cGhwIGVjaG8gKGlzX2FycmF5KCRzZWxlY3RlZF9jYXRzKSAmJiBpbl9hcnJheSgkY2F0LT50ZXJtX2lkLCAkc2VsZWN0ZWRfY2F0cykpID8gJ3NlbGVjdGVkJyA6ICcnOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGVzY19odG1sKCRjYXQtPm5hbWUpOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+R2nhu68gQ3RybCAoV2luZG93cykgaG/hurdjIENvbW1hbmQgKE1hYykgxJHhu4MgY2jhu41uIG5oaeG7gXUgZGFuaCBt4bulYy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0X2FkZF9jbGFzc192c19pZCIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSI+TMawdSBs4bqhaTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAjaGlkZGVuX2NhdGVnb3JpZXMgewogICAgICAgICAgICAgICAgbWluLXdpZHRoOiAzMDBweDsKICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGhpZGVUaW1lT3B0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZGVfdGltZV9vcHRpb24nKTsKICAgICAgICAgICAgICAgIHZhciBoaWRlRGF5c1JvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaWRlX2RheXNfcm93Jyk7CgogICAgICAgICAgICAgICAgaWYgKGhpZGVUaW1lT3B0aW9uICYmIGhpZGVEYXlzUm93KSB7CiAgICAgICAgICAgICAgICAgICAgaGlkZVRpbWVPcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gJ2RheXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlRGF5c1Jvdy5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlRGF5c1Jvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwCiAgICB9Cn0KCi8vIFRow6ptIE1ldGEgQm94IGNobyBj4bqldSBow6xuaCBoaeG7g24gdGjhu4sgYsOgaSB2aeG6v3QKYWRkX2FjdGlvbignYWRkX21ldGFfYm94ZXMnLCAnaGlkZGVuZ3B0ZXh0X2FkZF9wb3N0X21ldGFfYm94Jyk7CmZ1bmN0aW9uIGhpZGRlbmdwdGV4dF9hZGRfcG9zdF9tZXRhX2JveCgpIHsKICAgICRzY3JlZW5zID0gYXJyYXkoJ3Bvc3QnLCAnd2VicG9zdCcpOwogICAgZm9yZWFjaCAoJHNjcmVlbnMgYXMgJHNjcmVlbikgewogICAgICAgIGFkZF9tZXRhX2JveCgKICAgICAgICAgICAgJ2hpZGRlbmdwdGV4dF9wb3N0X3Zpc2liaWxpdHknLAogICAgICAgICAgICAnQ+G6pXUgaMOsbmggaGnhu4NuIHRo4buLJywKICAgICAgICAgICAgJ2hpZGRlbmdwdGV4dF9wb3N0X3Zpc2liaWxpdHlfY2FsbGJhY2snLAogICAgICAgICAgICAkc2NyZWVuLAogICAgICAgICAgICAnc2lkZScsIC8vIENodXnhu4NuIHNhbmcgaGnhu4NuIHRo4buLIOG7nyBj4buZdCBiw6puIHBo4bqjaQogICAgICAgICAgICAnaGlnaCcgIC8vIMSQxrBhIGzDqm4gdHLDqm4gY8O5bmcKICAgICAgICApOwogICAgfQp9CgpmdW5jdGlvbiBoaWRkZW5ncHRleHRfcG9zdF92aXNpYmlsaXR5X2NhbGxiYWNrKCRwb3N0KSB7CiAgICB3cF9ub25jZV9maWVsZCgnaGlkZGVuZ3B0ZXh0X3NhdmVfcG9zdF92aXNpYmlsaXR5JywgJ2hpZGRlbmdwdGV4dF9wb3N0X3Zpc2liaWxpdHlfbm9uY2UnKTsKICAgICR2aXNpYmlsaXR5ID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdfaGlkZGVuZ3B0ZXh0X3Zpc2liaWxpdHknLCB0cnVlKTsKICAgICRzaG93X2RheXMgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ19oaWRkZW5ncHRleHRfc2hvd19kYXlzJywgdHJ1ZSk7CiAgICBpZiAoZW1wdHkoJHZpc2liaWxpdHkpKSAkdmlzaWJpbGl0eSA9ICdoaWRlJzsKICAgIGlmICgkc2hvd19kYXlzID09PSAnJykgJHNob3dfZGF5cyA9IDA7CgogICAgZWNobyAnPHA+PHN0cm9uZz5MxrB1IMO9Ojwvc3Ryb25nPiBD4bqldSBow6xuaCBuw6B5IGNo4buJIGPDsyB0w6FjIGThu6VuZyBu4bq/dSBiw6BpIHZp4bq/dCB0aHXhu5ljIGRhbmggbeG7pWMgYuG7iyDhuqluLjwvcD4nOwogICAgZWNobyAnPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iaGlkZGVuZ3B0ZXh0X3Zpc2liaWxpdHkiIHZhbHVlPSJoaWRlIiAnIC4gY2hlY2tlZCgkdmlzaWJpbGl0eSwgJ2hpZGUnLCBmYWxzZSkgLiAnPiDhuqhuIGLDoGkgdmnhur90IChN4bq3YyDEkeG7i25oIHRoZW8gZGFuaCBt4bulYyk8L2xhYmVsPjxicj4nOwogICAgZWNobyAnPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iaGlkZGVuZ3B0ZXh0X3Zpc2liaWxpdHkiIHZhbHVlPSJzaG93IiAnIC4gY2hlY2tlZCgkdmlzaWJpbGl0eSwgJ3Nob3cnLCBmYWxzZSkgLiAnPiBIaeG7g24gdGjhu4sgYsOgaSB2aeG6v3Q8L2xhYmVsPjxicj48YnI+JzsKICAgIAogICAgZWNobyAnPGRpdiBpZD0iaGlkZGVuZ3B0ZXh0X3Nob3dfZGF5c193cmFwcGVyIiBzdHlsZT0iJyAuICgkdmlzaWJpbGl0eSA9PT0gJ3Nob3cnID8gJycgOiAnZGlzcGxheTpub25lOycpIC4gJyI+JzsKICAgIGVjaG8gJzxsYWJlbCBmb3I9ImhpZGRlbmdwdGV4dF9zaG93X2RheXMiPlPhu5EgbmfDoHkgaGnhu4NuIHRo4buLICgwIGzDoCBoaeG7g24gdGjhu4sgdsO0IHRo4budaSBo4bqhbik6PC9sYWJlbD4gJzsKICAgIGVjaG8gJzxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJoaWRkZW5ncHRleHRfc2hvd19kYXlzIiBuYW1lPSJoaWRkZW5ncHRleHRfc2hvd19kYXlzIiB2YWx1ZT0iJyAuIGVzY19hdHRyKCRzaG93X2RheXMpIC4gJyIgbWluPSIwIj4nOwogICAgZWNobyAnPC9kaXY+JzsKCiAgICBlY2hvICc8c2NyaXB0PgogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9XCdoaWRkZW5ncHRleHRfdmlzaWJpbGl0eVwnXSIpOwogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaWRkZW5ncHRleHRfc2hvd19kYXlzX3dyYXBwZXIiKTsKICAgICAgICAgICAgcmFkaW9zLmZvckVhY2goZnVuY3Rpb24ocmFkaW8pIHsKICAgICAgICAgICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSAic2hvdyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgPC9zY3JpcHQ+JzsKfQoKYWRkX2FjdGlvbignc2F2ZV9wb3N0JywgJ2hpZGRlbmdwdGV4dF9zYXZlX3Bvc3RfdmlzaWJpbGl0eScpOwpmdW5jdGlvbiBoaWRkZW5ncHRleHRfc2F2ZV9wb3N0X3Zpc2liaWxpdHkoJHBvc3RfaWQpIHsKICAgIGlmICghaXNzZXQoJF9QT1NUWydoaWRkZW5ncHRleHRfcG9zdF92aXNpYmlsaXR5X25vbmNlJ10pIHx8ICF3cF92ZXJpZnlfbm9uY2UoJF9QT1NUWydoaWRkZW5ncHRleHRfcG9zdF92aXNpYmlsaXR5X25vbmNlJ10sICdoaWRkZW5ncHRleHRfc2F2ZV9wb3N0X3Zpc2liaWxpdHknKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkZWZpbmVkKCdET0lOR19BVVRPU0FWRScpICYmIERPSU5HX0FVVE9TQVZFKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdlZGl0X3Bvc3QnLCAkcG9zdF9pZCkpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNzZXQoJF9QT1NUWydoaWRkZW5ncHRleHRfdmlzaWJpbGl0eSddKSkgewogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RfaWQsICdfaGlkZGVuZ3B0ZXh0X3Zpc2liaWxpdHknLCBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnaGlkZGVuZ3B0ZXh0X3Zpc2liaWxpdHknXSkpOwogICAgfQogICAgaWYgKGlzc2V0KCRfUE9TVFsnaGlkZGVuZ3B0ZXh0X3Nob3dfZGF5cyddKSkgewogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RfaWQsICdfaGlkZGVuZ3B0ZXh0X3Nob3dfZGF5cycsIGludHZhbCgkX1BPU1RbJ2hpZGRlbmdwdGV4dF9zaG93X2RheXMnXSkpOwogICAgfQp9"