IiBUZXN0cyBmb3IgdGhlIHdyaXRlZmlsZSgpIGZ1bmN0aW9uIGFuZCBzb21lIDp3cml0ZSBjb21tYW5kcy4KCnNvdXJjZSBjaGVjay52aW0Kc291cmNlIHRlcm1fdXRpbC52aW0KCmZ1bmMgVGVzdF93cml0ZWZpbGUoKQogIGxldCBmID0gdGVtcG5hbWUoKQogIGNhbGwgd3JpdGVmaWxlKFsib3ZlciIsICJ3cml0dGVuIl0sIGYsICJiRCIpCiAgY2FsbCB3cml0ZWZpbGUoWyJoZWxsbyIsICJ3b3JsZCJdLCBmLCAiYiIpCiAgY2FsbCB3cml0ZWZpbGUoWyIhIiwgImdvb2QiXSwgZiwgImEiKQogIGNhbGwgd3JpdGVmaWxlKFsibW9ybmluZyJdLCBmLCAiYWIiKQogIGNhbGwgd3JpdGVmaWxlKFsiIiwgInZpbW1lcnMiXSwgZiwgImFiIikKICBsZXQgbCA9IHJlYWRmaWxlKGYpCiAgY2FsbCBhc3NlcnRfZXF1YWwoImhlbGxvIiwgbFswXSkKICBjYWxsIGFzc2VydF9lcXVhbCgid29ybGQhIiwgbFsxXSkKICBjYWxsIGFzc2VydF9lcXVhbCgiZ29vZCIsIGxbMl0pCiAgY2FsbCBhc3NlcnRfZXF1YWwoIm1vcm5pbmciLCBsWzNdKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJ2aW1tZXJzIiwgbFs0XSkKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKCJ0ZXh0IiwgIlh3ZmZpbGUiKScsICdFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiB3cml0ZWZpbGUoKSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgTGlzdCBvciBhIEJsb2InKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2lnbm9yZV9yZWdleHBfZXJyb3IoKQogIHdyaXRlIFh0W3otYV1lc3QudHh0CiAgY2FsbCBkZWxldGUoJ1h0W3otYV1lc3QudHh0JykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9mYWlsc19nZW50bHkoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbInRlc3QiXSwgIlh3ZmZpbGUiLCBbXSknLCAnRTczMDonKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgiWHdmZmlsZSIpKQogIGNhbGwgZGVsZXRlKCJYd2ZmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFsidGVzdCIsIFtdLCBbXSwgW10sICJ0c2V0Il0sICJYd2ZmaWxlIiknLCAnRTczMDonKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgiWHdmZmlsZSIpKQogIGNhbGwgZGVsZXRlKCJYd2ZmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCAiWHdmZmlsZSIsIFtdKScsICdFNzMwOicpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCJYd2ZmaWxlIikpCiAgY2FsbCBkZWxldGUoIlh3ZmZpbGUiKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoW10sIFtdKScsICdFNzMwOicpCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbigpCiAgQ2hlY2tGZWF0dXJlIGljb252CiAgaWYgaGFzKCdzdW4nKQogICAgdGhyb3cgJ1NraXBwZWQ6IGRvZXMgbm90IHdvcmsgb24gU3VuT1MnCiAgZW5kaWYKICAiIFdpdGhvdXQgYSBiYWNrdXAgZmlsZSB0aGUgd3JpdGUgd29uJ3QgaGFwcGVuIGlmIHRoZXJlIGlzIGEgY29udmVyc2lvbgogICIgZXJyb3IuCiAgc2V0IG5vYmFja3VwIG5vd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBuZXcKICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1h3ZmNmaWxlJywgJ0QnKQogIGVkaXQgWHdmY2ZpbGUKICBjYWxsIHNldGxpbmUoMSwgWyJmaXJzdCBsaW5lIiwgImNhbm5vdCBjb252ZXJ0IFx1MDEwYiIsICJ0aGlyZCBsaW5lIl0pCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlICsrZW5jPWNwOTMyJywgJ0U1MTM6JykKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZmNmaWxlJykpCgogICIgV2l0aCAnYmFja3VwY29weScgc2V0LCBpZiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gZXJyb3IsIHRoZSBiYWNrdXAgZmlsZSBpcwogICIgc3RpbGwgY3JlYXRlZC4KICBzZXQgYmFja3VwY29weT15ZXMgd3JpdGViYWNrdXAmIGJhY2t1cCYKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbGUnIC4uICZiYWNrdXBleHQpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlICsrZW5jPWNwOTMyJywgJ0U1MTM6JykKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZmNmaWxlJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoY29udGVudHMsIHJlYWRmaWxlKCdYd2ZjZmlsZScgLi4gJmJhY2t1cGV4dCkpCiAgc2V0IGJhY2t1cGNvcHkmCiAgJWJ3IQoKICAiIENvbnZlcnNpb24gZXJyb3IgZHVyaW5nIHdyaXRlCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsiXFUxMDAwMDAwMCJdKQogIGxldCBvdXRwdXQgPSBleGVjdXRlKCd3cml0ZSEgKytlbmM9dXRmLTE2IFh3ZmNmaWxlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBsZXQgb3V0cHV0ID0gZXhlY3V0ZSgnd3JpdGUhICsrZW5jPXVjcy0yIFh3ZmNmaWxlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbHp+JykKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbHl+JykKICAlYnchCgogIGNhbGwgZGVsZXRlKCdYd2ZjZmlsZScgLi4gJmJhY2t1cGV4dCkKICBid2lwZSEKICBzZXQgYmFja3VwJiB3cml0ZWJhY2t1cCYgYmFja3VwZGlyJnZpbSBiYWNrdXBza2lwJnZpbQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2ZhaWxzX2NvbnZlcnNpb24yKCkKICBDaGVja0ZlYXR1cmUgaWNvbnYKICBpZiBoYXMoJ3N1bicpCiAgICB0aHJvdyAnU2tpcHBlZDogZG9lcyBub3Qgd29yayBvbiBTdW5PUycKICBlbmRpZgogICIgV2l0aCBhIGJhY2t1cCBmaWxlIHRoZSB3cml0ZSBoYXBwZW5zIGV2ZW4gaWYgdGhlcmUgaXMgYSBjb252ZXJzaW9uIGVycm9yLAogICIgYnV0IHRoZW4gdGhlIGJhY2t1cCBmaWxlIG11c3QgcmVtYWluCiAgc2V0IG5vYmFja3VwIHdyaXRlYmFja3VwIGJhY2t1cGRpcj0uIGJhY2t1cHNraXA9CiAgbGV0IGNvbnRlbnRzID0gWyJsaW5lIG9uZSIsICJsaW5lIHR3byJdCiAgY2FsbCB3cml0ZWZpbGUoY29udGVudHMsICdYd2YyZmlsZV9jb252ZXJzaW9uX2VycicsICdEJykKICBlZGl0IFh3ZjJmaWxlX2NvbnZlcnNpb25fZXJyCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIHNldCBmaWxlZW5jb2Rpbmc9bGF0aW4xCiAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZjJmaWxlX2NvbnZlcnNpb25fZXJyficpKQoKICBjYWxsIGRlbGV0ZSgnWHdmMmZpbGVfY29udmVyc2lvbl9lcnJ+JykKICBid2lwZSEKICBzZXQgYmFja3VwJiB3cml0ZWJhY2t1cCYgYmFja3VwZGlyJnZpbSBiYWNrdXBza2lwJnZpbQplbmRmdW5jCgpmdW5jIFNldEZsYWcodGltZXIpCiAgbGV0IGc6ZmxhZyA9IDEKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlX3F1aXRfc3BsaXQoKQogICIgUHJldmVudCBleGl0aW5nIGJ5IHNwbGl0dGluZyB3aW5kb3cgb24gZmlsZSB3cml0ZS4KICBhdWdyb3VwIHRlc3Rncm91cAogICAgYXV0b2NtZCBCdWZXcml0ZVByZSAqIHNwbGl0CiAgYXVncm91cCBFTkQKICBlISBYd3FzZmlsZQogIGNhbGwgc2V0bGluZSgxLCAnbm90aGluZycpCiAgd3EKCiAgaWYgaGFzKCd0aW1lcnMnKQogICAgIiB0aW1lciB3aWxsIG5vdCBydW4gaWYgImV4aXRpbmciIGlzIHN0aWxsIHNldAogICAgbGV0IGc6ZmxhZyA9IDAKICAgIGNhbGwgdGltZXJfc3RhcnQoMSwgJ1NldEZsYWcnKQogICAgc2xlZXAgNTBtCiAgICBjYWxsIGFzc2VydF9lcXVhbCgxLCBnOmZsYWcpCiAgICB1bmxldCBnOmZsYWcKICBlbmRpZgogIGF1ISB0ZXN0Z3JvdXAKICBid2lwZSBYd3FzZmlsZQogIGNhbGwgZGVsZXRlKCdYd3FzZmlsZScpCmVuZGZ1bmMKCmZ1bmMgVGVzdF9ub3dyaXRlX3F1aXRfc3BsaXQoKQogICIgUHJldmVudCBleGl0aW5nIGJ5IG9wZW5pbmcgYSBoZWxwIHdpbmRvdy4KICBlISBYbnFzZmlsZQogIGhlbHAKICB3aW5jbWQgdwogIGV4ZSB3aW5ucigpIC4gJ3EnCgogIGlmIGhhcygndGltZXJzJykKICAgICIgdGltZXIgd2lsbCBub3QgcnVuIGlmICJleGl0aW5nIiBpcyBzdGlsbCBzZXQKICAgIGxldCBnOmZsYWcgPSAwCiAgICBjYWxsIHRpbWVyX3N0YXJ0KDEsICdTZXRGbGFnJykKICAgIHNsZWVwIDUwbQogICAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgZzpmbGFnKQogICAgdW5sZXQgZzpmbGFnCiAgZW5kaWYKICBid2lwZSBYbnFzZmlsZQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX3N5bmNfYXJnKCkKICAiIFRoaXMgZG9lc24ndCBjaGVjayBpZiBmc3luYygpIHdvcmtzLCBvbmx5IHRoYXQgdGhlIGFyZ3VtZW50IGlzIGFjY2VwdGVkLgogIGNhbGwgd3JpdGVmaWxlKFsnb25lJ10sICdYdGVzdCcsICdzRCcpCiAgY2FsbCB3cml0ZWZpbGUoWyd0d28nXSwgJ1h0ZXN0JywgJ1MnKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX3N5bmNfZGV2X3N0ZG91dCgpCiAgQ2hlY2tVbml4CiAgaWYgZmlsZXdyaXRhYmxlKCcvZGV2L3N0ZG91dCcpCiAgICAiIEp1c3QgY2hlY2sgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYW4gZXJyb3IuCiAgICBjYWxsIHdyaXRlZmlsZShbJ29uZSddLCAnL2Rldi9zdGRvdXQnKQogIGVsc2UKICAgIHRocm93ICdTa2lwcGVkOiAvZGV2L3N0ZG91dCBpcyBub3Qgd3JpdGFibGUnCiAgZW5kaWYKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9hdXRvd3JpdGUoKQogIHNldCBhdXRvd3JpdGUKICBuZXcKICBuZXh0IFhhIFhiIFhjCiAgY2FsbCBzZXRsaW5lKDEsICdhYWEnKQogIG5leHQKICBjYWxsIGFzc2VydF9lcXVhbChbJ2FhYSddLCByZWFkZmlsZSgnWGEnKSkKICBjYWxsIHNldGxpbmUoMSwgJ2JiYicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2VkaXQgWFgnKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGInKSkKCiAgc2V0IGF1dG93cml0ZWFsbAogIGVkaXQgWFgKICBjYWxsIGFzc2VydF9lcXVhbChbJ2JiYiddLCByZWFkZmlsZSgnWGInKSkKCiAgYndpcGUhCiAgY2FsbCBkZWxldGUoJ1hhJykKICBjYWxsIGRlbGV0ZSgnWGInKQogIHNldCBub2F1dG93cml0ZQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2F1dG93cml0ZV9ub3dyaXRlKCkKICBzZXQgYXV0b3dyaXRlCiAgbmV3CiAgbmV4dCBYYSBYYiBYYwogIHNldCBidWZ0eXBlPW5vd3JpdGUKICBjYWxsIHNldGxpbmUoMSwgJ2FhYScpCiAgbGV0IGJ1ZiA9IGJ1Zm5yKCclJykKICAiIGJ1ZmZlciBjb250ZW50cyBzaWxlbnRseSBsb3N0CiAgZWRpdCBYWAogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGEnKSkKICByZXdpbmQKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2V0bGluZSgxKSkKCiAgYndpcGUhCiAgc2V0IG5vYXV0b3dyaXRlCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJzp3ICE8Y21kPicgdG8gcGlwZSBsaW5lcyBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBhbiBleHRlcm5hbAoiIGNvbW1hbmQuCmZ1bmMgVGVzdF93cml0ZV9waXBlX3RvX2NtZCgpCiAgQ2hlY2tVbml4CiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnLCAnTDInLCAnTDMnLCAnTDQnXSkKICAyLDN3ICFjYXQgPiBYcHRmaWxlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydMMicsICdMMyddLCByZWFkZmlsZSgnWHB0ZmlsZScpKQogIGNsb3NlIQogIGNhbGwgZGVsZXRlKCdYcHRmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciA6c2F2ZWFzCmZ1bmMgVGVzdF9zYXZlYXMoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMnLCAnRTQ3MTonKQogIGNhbGwgd3JpdGVmaWxlKFsnTDEnXSwgJ1hzYWZpbGUnKQogIG5ldyBYc2FmaWxlCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnXSkKICBjYWxsIGFzc2VydF9mYWlscygnc2F2ZWFzIFhzYWZpbGUnLCAnRTEzOTonKQogIGNsb3NlIQogIGVuZXcgfCBvbmx5CiAgY2FsbCBkZWxldGUoJ1hzYWZpbGUnKQoKICAiIDpzYXZlYXMgc2hvdWxkIGRldGVjdCBhbmQgc2V0IHRoZSBmaWxlIHR5cGUuCiAgc3ludGF4IG9uCiAgc2F2ZWFzISBYc2F2ZWFzLnBsCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3BlcmwnLCAmZmlsZXR5cGUpCiAgc3ludGF4IG9mZgogICVidyEKICBjYWxsIGRlbGV0ZSgnWHNhdmVhcy5wbCcpCgogICIgOnNhdmVhcyBmYWlscyBmb3IgIm5vZmlsZSIgYnVmZmVyCiAgc2V0IGJ1ZnR5cGU9bm9maWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3NhdmVhcyBYc2FmaWxlJywgJ0U2NzY6IE5vIG1hdGNoaW5nIGF1dG9jb21tYW5kcyBmb3IgYnVmdHlwZT1ub2ZpbGUgYnVmZmVyJykKCiAgYndpcGUhCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZV9lcnJvcnMoKQogICIgVGVzdCBmb3Igd3JpdGluZyBwYXJ0aWFsIGJ1ZmZlcgogIGNhbGwgd3JpdGVmaWxlKFsnTDEnLCAnTDInLCAnTDMnXSwgJ1h3ZWZpbGUnKQogIG5ldyBYd2VmaWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJzEsMndyaXRlJywgJ0UxNDA6JykKICBjbG9zZSEKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3cgPiBYdGVzdCcsICdFNDk0OicpCiAKICAiIFRyeSB0byBvdmVyd3JpdGUgYSBkaXJlY3RvcnkKICBpZiBoYXMoJ3VuaXgnKQogICAgY2FsbCBta2RpcignWHdlcmRpcjEnKQogICAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIFh3ZXJkaXIxJywgJ0UxNzonKQogICAgY2FsbCBkZWxldGUoJ1h3ZXJkaXIxJywgJ2QnKQogIGVuZGlmCgogICIgVGVzdCBmb3IgOndhbGwgZm9yIGEgYnVmZmVyIHdpdGggbm8gbmFtZQogIGVuZXcgfCBvbmx5CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnXSkKICBjYWxsIGFzc2VydF9mYWlscygnd2FsbCcsICdFMTQxOicpCiAgZW5ldyEKCiAgIiBUZXN0IGZvciB3cml0aW5nIGEgJ3JlYWRvbmx5JyBmaWxlCiAgbmV3IFh3ZWZpbGUKICBzZXQgcmVhZG9ubHkKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTQ1OicpCiAgY2xvc2UKCiAgIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgcmVhZC1vbmx5IGZpbGUKICBuZXcgWHdlZmlsZQogIGNhbGwgc2V0ZnBlcm0oJ1h3ZWZpbGUnLCAnci0tci0tci0tJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwNTonKQogIGNhbGwgc2V0ZnBlcm0oJ1h3ZWZpbGUnLCAncnctcnctcnctJykKICBjbG9zZQoKICBjYWxsIGRlbGV0ZSgnWHdlZmlsZScpCgogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9saXN0KCksICdYd2VmaWxlJykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoJ1h3ZWZpbGUnKSkKICBjYWxsIHdyaXRlZmlsZSh0ZXN0X251bGxfYmxvYigpLCAnWHdlZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYd2VmaWxlJykpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCAiIiknLCAnRTQ4MjonKQoKICAiIHZlcnkgbG9uZyBmaWxlIG5hbWUKICBsZXQgbG9uZ19mbmFtZSA9IHJlcGVhdCgnbicsIDUwMDApCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2V4ZSAidyAiIC4uIGxvbmdfZm5hbWUnLCAnRTc1OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCBsb25nX2ZuYW1lKScsICdFNDgyOicpCgogICIgVGVzdCBmb3Igd3JpdGluZyB0byBhIGJsb2NrIGRldmljZSBvbiBVbml4LWxpa2Ugc3lzdGVtcwogIGlmIGhhcygndW5peCcpICYmIGdldGZwZXJtKCcvZGV2L2xvb3AwJykgIT0gJycKICAgICAgICBcICYmIGdldGZ0eXBlKCcvZGV2L2xvb3AwJykgPT0gJ2JkZXYnICYmICFJc1Jvb3QoKQogICAgbmV3CiAgICBlZGl0IC9kZXYvbG9vcDAKICAgIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNTAzOiAnKQogICAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIScsICdFNTAzOiAnKQogICAgY2xvc2UhCiAgZW5kaWYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgZmlsZSB3aGljaCBpcyBtb2RpZmllZCBhZnRlciBWaW0gcmVhZCBpdApmdW5jIFRlc3Rfd3JpdGVfZmlsZV9tdGltZSgpCiAgQ2hlY2tFbmdsaXNoCiAgQ2hlY2tSdW5WaW1JblRlcm1pbmFsCgogICIgRmlyc3QgcmVhZCB0aGUgZmlsZSBpbnRvIGEgYnVmZmVyCiAgY2FsbCB3cml0ZWZpbGUoWyJMaW5lMSIsICJMaW5lMiJdLCAnWHdmbWZpbGUnLCAnRCcpCiAgbGV0IG9sZF9mdGltZSA9IGdldGZ0aW1lKCdYd2ZtZmlsZScpCiAgbGV0IGJ1ZiA9IFJ1blZpbUluVGVybWluYWwoJ1h3Zm1maWxlJywgI3tyb3dzIDogMTB9KQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6c2V0IG5vc3dhcGZpbGVcPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCgogICIgTW9kaWZ5IHRoZSBmaWxlIGRpcmVjdGx5LiAgTWFrZSBzdXJlIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzCiAgIiBkaWZmZXJlbnQuIE5vdGUgdGhhdCBvbiBMaW51eC9Vbml4LCB0aGUgZmlsZSBpcyBjb25zaWRlcmVkIG1vZGlmaWVkCiAgIiBvdXRzaWRlLCBvbmx5IGlmIHRoZSBkaWZmZXJlbmNlIGlzIDIgc2Vjb25kcyBvciBtb3JlCiAgc2xlZXAgMQogIGNhbGwgd3JpdGVmaWxlKFsiTGluZTMiLCAiTGluZTQiXSwgJ1h3Zm1maWxlJykKICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1h3Zm1maWxlJykKICB3aGlsZSBuZXdfZnRpbWUgLSBvbGRfZnRpbWUgPCAyCiAgICBzbGVlcCAxMDBtCiAgICBjYWxsIHdyaXRlZmlsZShbIkxpbmUzIiwgIkxpbmU0Il0sICdYd2ZtZmlsZScpCiAgICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1h3Zm1maWxlJykKICBlbmR3aGlsZQoKICAiIFRyeSB0byBvdmVyd3JpdGUgdGhlIGZpbGUgYW5kIGNoZWNrIGZvciB0aGUgcHJvbXB0CiAgY2FsbCB0ZXJtX3NlbmRrZXlzKGJ1ZiwgIjp3XDxDUj4iKQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgV2FpdEZvckFzc2VydCh7LT4gYXNzZXJ0X2VxdWFsKCJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiLCB0ZXJtX2dldGxpbmUoYnVmLCA5KSl9KQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQgKHkvbik/IiwKICAgICAgICBcIHRlcm1fZ2V0bGluZShidWYsIDEwKSkKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAiblw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIGFzc2VydF9lcXVhbChuZXdfZnRpbWUsIGdldGZ0aW1lKCdYd2ZtZmlsZScpKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6d1w8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAieVw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIFdhaXRGb3JBc3NlcnQoey0+IGFzc2VydF9lcXVhbCgnTGluZTInLCByZWFkZmlsZSgnWHdmbWZpbGUnKVsxXSl9KQoKICAiIGNsZWFuIHVwCiAgY2FsbCBTdG9wVmltSW5UZXJtaW5hbChidWYpCmVuZGZ1bmMKCiIgVGVzdCBmb3IgYW4gYXV0b2NtZCB1bmxvYWRpbmcgYSBidWZmZXIgZHVyaW5nIGEgd3JpdGUgY29tbWFuZApmdW5jIFRlc3Rfd3JpdGVfYXV0b2NtZF91bmxvYWRidWZfbG9ja21hcmsoKQogIGF1Z3JvdXAgV3JpdGVUZXN0CiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlIFh3YXVmaWxlIGVuZXcgfCB3cml0ZQogIGF1Z3JvdXAgRU5ECiAgZSBYd2F1ZmlsZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdsb2NrbWFya3Mgd3JpdGUnLCBbJ0UzMjonLCAnRTIwMzonXSkKICBhdWdyb3VwIFdyaXRlVGVzdAogICAgYXUhCiAgYXVncm91cCBFTkQKICBhdWdyb3VwISBXcml0ZVRlc3QKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgYnVmZmVyIHdpdGggJ2Fjd3JpdGUnIGJ1dCB3aXRob3V0IGF1dG9jbWRzCmZ1bmMgVGVzdF93cml0ZV9hY3dyaXRlX2Vycm9yKCkKICBuZXcgWHdhZWZpbGUKICBjYWxsIHNldGxpbmUoMSwgWydsaW5lMScsICdsaW5lMicsICdsaW5lMyddKQogIHNldCBidWZ0eXBlPWFjd3JpdGUKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTY3NjonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcxLDJ3cml0ZSEnLCAnRTY3NjonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3ID4+JywgJ0U2NzY6JykKICBjbG9zZSEKZW5kZnVuYwoKIiBUZXN0IGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzIGZyb20gYW4gYXV0b2NtZCB3aGVuIHdyaXRpbmcgYSBidWZmZXIKZnVuYyBUZXN0X3dyaXRlX2F1dG9jbWRfYWRkX3JlbW92ZV9saW5lcygpCiAgbmV3IFh3YWFmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCgogICIgQXV0b2NtZCBkZWxldGluZyBsaW5lcyBmcm9tIHRoZSBmaWxlIHdoZW4gd3JpdGluZyBhIHBhcnRpYWwgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEZpbGVXcml0ZVByZSBYd2FhZmlsZSAxLDJkCiAgYXVncm91cCBFTkQKICBjYWxsIGFzc2VydF9mYWlscygnMiwzdyEnLCAnRTIwNDonKQoKICAiIEF1dG9jbWQgYWRkaW5nIGxpbmVzIHRvIGEgZmlsZSB3aGVuIHdyaXRpbmcgYSBwYXJ0aWFsIGZpbGUKICBhdWdyb3VwIFdyaXRlVGVzdDIKICAgIGF1IQogICAgYXV0b2NtZCBGaWxlV3JpdGVQcmUgWHdhYWZpbGUgY2FsbCBhcHBlbmQoMCwgWyd4eHgnLCAneXl5J10pCiAgYXVncm91cCBFTkQKICAlZAogIGNhbGwgc2V0bGluZSgxLCBbJ2FhYScsICdiYmInLCAnY2NjJywgJ2RkZCddKQogIDEsMnchCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyd4eHgnLCAneXl5JywgJ2FhYScsICdiYmInXSwgcmVhZGZpbGUoJ1h3YWFmaWxlJykpCgogICIgQXV0b2NtZCBkZWxldGluZyBsaW5lcyBmcm9tIHRoZSBmaWxlIHdoZW4gd3JpdGluZyB0aGUgd2hvbGUgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlIFh3YWFmaWxlIDEsMmQKICBhdWdyb3VwIEVORAogICVkCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCiAgdwogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnY2NjJywgJ2RkZCddLCByZWFkZmlsZSgnWHdhYWZpbGUnKSkKCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICBhdWdyb3VwIEVORAogIGF1Z3JvdXAhIFdyaXRlVGVzdDIKCiAgY2xvc2UhCiAgY2FsbCBkZWxldGUoJ1h3YWFmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgcmVhZG9ubHkgZmlsZQpmdW5jIFRlc3Rfd3JpdGVfcmVhZG9ubHkoKQogIGNhbGwgd3JpdGVmaWxlKFtdLCAnWHdyb2ZpbGUnLCAnRCcpCiAgY2FsbCBzZXRmcGVybSgnWHdyb2ZpbGUnLCAici0tLS0tLS0tIikKICBlZGl0IFh3cm9maWxlCiAgc2V0IG5vcmVhZG9ubHkgYmFja3Vwc2tpcD0KICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwNTonKQogIGxldCBzYXZlX2NwbyA9ICZjcG8KICBzZXQgY3BvKz1XCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIScsICdFNTA0OicpCiAgbGV0ICZjcG8gPSBzYXZlX2NwbwogIGNhbGwgc2V0bGluZSgxLCBbJ2xpbmUxJ10pCiAgd3JpdGUhCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydsaW5lMSddLCByZWFkZmlsZSgnWHdyb2ZpbGUnKSkKCiAgIiBBdXRvLXNhdmluZyBhIHJlYWRvbmx5IGZpbGUgc2hvdWxkIGZhaWwgd2l0aCAnYXV0b3dyaXRlYWxsJwogICVidyEKICBlIFh3cm9maWxlCiAgc2V0IG5vcmVhZG9ubHkgYXV0b3dyaXRlYWxsCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhYSddKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCduJywgJ0U1MDU6JykKICBzZXQgY3BvKz1XCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ24nLCAnRTUwNDonKQogIHNldCBjcG8tPVcKICBzZXQgYXV0b3dyaXRlYWxsJgoKICBzZXQgYmFja3Vwc2tpcCYKICAlYnchCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJ3BhdGNobW9kZScKZnVuYyBUZXN0X3BhdGNobW9kZSgpCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1hwYWZpbGUnLCAnRCcpCiAgc2V0IHBhdGNobW9kZT0ub3JpZyBub2JhY2t1cCBiYWNrdXBza2lwPSB3cml0ZWJhY2t1cAogIG5ldyBYcGFmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICd0d28nKQogICIgZmlyc3Qgd3JpdGUgc2hvdWxkIGNyZWF0ZSB0aGUgLm9yaWcgZmlsZQogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydvbmUnXSwgcmVhZGZpbGUoJ1hwYWZpbGUub3JpZycpKQogIGNhbGwgc2V0bGluZSgxLCAndGhyZWUnKQogICIgc3Vic2VxdWVudCB3cml0ZXMgc2hvdWxkIG5vdCBjcmVhdGUvbW9kaWZ5IHRoZSAub3JpZyBmaWxlCiAgd3JpdGUKICBjYWxsIGFzc2VydF9lcXVhbChbJ29uZSddLCByZWFkZmlsZSgnWHBhZmlsZS5vcmlnJykpCgogICIgdXNlICdwYXRjaG1vZGUnIHdpdGggJ25vYmFja3VwJyBhbmQgJ25vd3JpdGViYWNrdXAnIHRvIGNyZWF0ZSBhbiBlbXB0eQogICIgb3JpZ2luYWwgZmlsZQogIGNhbGwgZGVsZXRlKCdYcGFmaWxlJykKICBjYWxsIGRlbGV0ZSgnWHBhZmlsZS5vcmlnJykKICAlYnchCiAgc2V0IHBhdGNobW9kZT0ub3JpZyBub2JhY2t1cCBub3dyaXRlYmFja3VwCiAgZWRpdCBYcGFmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsneHh4J10pCiAgd3JpdGUKICBjYWxsIGFzc2VydF9lcXVhbChbJ3h4eCddLCByZWFkZmlsZSgnWHBhZmlsZScpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKFtdLCByZWFkZmlsZSgnWHBhZmlsZS5vcmlnJykpCgogIHNldCBwYXRjaG1vZGUmIGJhY2t1cCYgYmFja3Vwc2tpcCYgd3JpdGViYWNrdXAmCiAgY2FsbCBkZWxldGUoJ1hwYWZpbGUub3JpZycpCmVuZGZ1bmMKCiIgVGVzdCBmb3Igd3JpdGluZyB0byBhIGZpbGUgaW4gYSByZWFkb25seSBkaXJlY3RvcnkKIiBOT1RFOiBpZiB5b3UgcnVuIHRlc3RzIGFzIHJvb3QgdGhpcyB3aWxsIGZhaWwuICBEb24ndCBydW4gdGVzdHMgYXMgcm9vdCEKZnVuYyBUZXN0X3dyaXRlX3JlYWRvbmx5X2RpcigpCiAgIiBPbiBNUy1XaW5kb3dzLCBtb2RpZnlpbmcgZmlsZXMgaW4gYSByZWFkLW9ubHkgZGlyZWN0b3J5IGlzIGFsbG93ZWQuCiAgQ2hlY2tVbml4CiAgIiBSb290IGNhbiBkbyBpdCB0b28uCiAgQ2hlY2tOb3RSb290CgogIGNhbGwgbWtkaXIoJ1hyb2Rpci8nLCAnUicpCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1hyb2Rpci9YZmlsZTEnKQogIGNhbGwgc2V0ZnBlcm0oJ1hyb2RpcicsICdyLXhyLS1yLS0nKQogICIgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlIGluIHRoZSBkaXJlY3RvcnkKICBuZXcgWHJvZGlyL1hmaWxlMgogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTIxMjonKQogICIgdHJ5IHRvIGNyZWF0ZSBhIGJhY2t1cCBmaWxlIGluIHRoZSBkaXJlY3RvcnkKICBlZGl0ISBYcm9kaXIvWGZpbGUxCiAgc2V0IGJhY2t1cGRpcj0uL1hyb2RpciBiYWNrdXBza2lwPQogIHNldCBwYXRjaG1vZGU9Lm9yaWcKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwOTonKQogIGNhbGwgc2V0ZnBlcm0oJ1hyb2RpcicsICdyd3hyLS1yLS0nKQogIHNldCBiYWNrdXBkaXImIGJhY2t1cHNraXAmIHBhdGNobW9kZSYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgZmlsZSB1c2luZyBpbnZhbGlkIGZpbGUgZW5jb2RpbmcKZnVuYyBUZXN0X3dyaXRlX2ludmFsaWRfZW5jb2RpbmcoKQogIG5ldwogIGNhbGwgc2V0bGluZSgxLCAnYWJjJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUgKytlbmM9YXhieWMgWGllZmlsZScsICdFMjEzOicpCiAgY2xvc2UhCmVuZGZ1bmMKCiIgVGVzdHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgd2l0aCBjb252ZXJzaW9uIGZvciBXaW4zMi4KZnVuYyBUZXN0X3dyaXRlX2ZpbGVfZW5jb2RpbmcoKQogIENoZWNrTVNXaW5kb3dzCiAgbGV0IHNhdmVfZW5jb2RpbmcgPSAmZW5jb2RpbmcKICBsZXQgc2F2ZV9maWxlZW5jb2RpbmdzID0gJmZpbGVlbmNvZGluZ3MKICBzZXQgZW5jb2Rpbmc9bGF0aW4xIGZpbGVlbmNvZGluZ3MmCiAgbGV0IHRleHQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgd3JpdGVmaWxlKHRleHQsICdYd2ZlZmlsZScsICdEJykKICBlZGl0IFh3ZmVmaWxlCgogICIgd3JpdGUgdGVzdHM6CiAgIiBjb21iaW5lIHRocmVlIHZhbHVlcyBmb3IgJ2VuY29kaW5nJyB3aXRoIHRocmVlIHZhbHVlcyBmb3IgJ2ZpbGVlbmNvZGluZycKICAiIGFsc28gd3JpdGUgZmlsZXMgZm9yIHJlYWQgdGVzdHMKICBjYWxsIGN1cnNvcigxLCAxKQogIHNldCBlbmNvZGluZz11dGYtOAogIC53ISArK2VuYz11dGYtOCBYd2ZldGVzdAogIC53ICsrZW5jPWNwMTI1MSA+PiBYd2ZldGVzdAogIC53ICsrZW5jPWNwODY2ID4+IFh3ZmV0ZXN0CiAgLnchICsrZW5jPXV0Zi04IFh1dGY4CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDEgdXRmLTggdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAxIHV0Zi04IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHdmZXRlc3QnKSkKCiAgY2FsbCBjdXJzb3IoMiwgMSkKICBzZXQgZW5jb2Rpbmc9Y3AxMjUxCiAgLnchICsrZW5jPXV0Zi04IFh3ZmV0ZXN0CiAgLncgKytlbmM9Y3AxMjUxID4+IFh3ZmV0ZXN0CiAgLncgKytlbmM9Y3A4NjYgPj4gWHdmZXRlc3QKICAudyEgKytlbmM9Y3AxMjUxIFhjcDEyNTEKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAyIGNwMTI1MSB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYd2ZldGVzdCcpKQoKICBjYWxsIGN1cnNvcigzLCAxKQogIHNldCBlbmNvZGluZz1jcDg2NgogIC53ISArK2VuYz11dGYtOCBYd2ZldGVzdAogIC53ICsrZW5jPWNwMTI1MSA+PiBYd2ZldGVzdAogIC53ICsrZW5jPWNwODY2ID4+IFh3ZmV0ZXN0CiAgLnchICsrZW5jPWNwODY2IFhjcDg2NgogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h3ZmV0ZXN0JykpCgogICIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCB1dGYtOCAnZW5jb2RpbmcnCiAgc2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQogIGUgWHV0ZjgKICAudyEgKytlbmM9dXRmLTggWHdmZXRlc3QKICBlIFhjcDEyNTEKICAudyArK2VuYz11dGYtOCA+PiBYd2ZldGVzdAogIHNldCBmZW5jcz11dGYtOCxjcDg2NgogIGUgWGNwODY2CiAgLncgKytlbmM9dXRmLTggPj4gWHdmZXRlc3QKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHdmZXRlc3QnKSkKCiAgIiByZWFkIHRocmVlICdmaWxlZW5jb2RpbmcncyB3aXRoIGNwMTI1MSAnZW5jb2RpbmcnCiAgc2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQogIGUgWHV0ZjgKICAudyEgKytlbmM9Y3AxMjUxIFh3ZmV0ZXN0CiAgZSBYY3AxMjUxCiAgLncgKytlbmM9Y3AxMjUxID4+IFh3ZmV0ZXN0CiAgc2V0IGZlbmNzPXV0Zi04LGNwODY2CiAgZSBYY3A4NjYKICAudyArK2VuYz1jcDEyNTEgPj4gWHdmZXRlc3QKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHdmZXRlc3QnKSkKCiAgIiByZWFkIHRocmVlICdmaWxlZW5jb2RpbmcncyB3aXRoIGNwODY2ICdlbmNvZGluZycKICBzZXQgZW5jb2Rpbmc9Y3A4NjYgZmVuY3M9dXRmLTgsY3AxMjUxCiAgZSBYdXRmOAogIC53ISArK2VuYz1jcDg2NiBYd2ZldGVzdAogIGUgWGNwMTI1MQogIC53ICsrZW5jPWNwODY2ID4+IFh3ZmV0ZXN0CiAgc2V0IGZlbmNzPXV0Zi04LGNwODY2CiAgZSBYY3A4NjYKICAudyArK2VuYz1jcDg2NiA+PiBYd2ZldGVzdAogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYd2ZldGVzdCcpKQoKICBjYWxsIGRlbGV0ZSgnWHdmZXRlc3QnKQogIGNhbGwgZGVsZXRlKCdYdXRmOCcpCiAgY2FsbCBkZWxldGUoJ1hjcDEyNTEnKQogIGNhbGwgZGVsZXRlKCdYY3A4NjYnKQogIGxldCAmZW5jb2RpbmcgPSBzYXZlX2VuY29kaW5nCiAgbGV0ICZmaWxlZW5jb2RpbmdzID0gc2F2ZV9maWxlZW5jb2RpbmdzCiAgJWJ3IQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgYSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBCT00uCiIgQnl0ZSBPcmRlciBNYXJrIChCT00pIGNoYXJhY3RlciBmb3IgdmFyaW91cyBlbmNvZGluZ3MgaXMgYmVsb3c6CiIgICAgIFVURi04ICAgICAgOiBFRiBCQiBCRgoiICAgICBVVEYtMTYgKEJFKTogRkUgRkYKIiAgICAgVVRGLTE2IChMRSk6IEZGIEZFCiIgICAgIFVURi0zMiAoQkUpOiAwMCAwMCBGRSBGRgoiICAgICBVVEYtMzIgKExFKTogRkYgRkUgMDAgMDAKZnVuYyBUZXN0X3JlYWR3cml0ZV9maWxlX3dpdGhfYm9tKCkKICBsZXQgdXRmOF9ib20gPSAiXHhFRlx4QkJceEJGIgogIGxldCB1dGYxNmJlX2JvbSA9ICJceEZFXHhGRiIKICBsZXQgdXRmMTZsZV9ib20gPSAiXHhGRlx4RkUiCiAgbGV0IHV0ZjMyYmVfYm9tID0gIlxuXG5ceEZFXHhGRiIKICBsZXQgdXRmMzJsZV9ib20gPSAiXHhGRlx4RkVcblxuIgogIGxldCBzYXZlX2ZpbGVlbmNvZGluZyA9ICZmaWxlZW5jb2RpbmcKICBzZXQgY3BvcHRpb25zKz1TCgogICIgQ2hlY2sgdGhhdCBlZGl0aW5nIGEgbGF0aW4xIGZpbGUgZG9lc24ndCBzZWUgYSBCT00KICBjYWxsIHdyaXRlZmlsZShbIlx4RkVceEZFbGF0aW4tMSJdLCAnWHJ3dGVzdDEnLCAnRCcpCiAgZWRpdCBYcnd0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdsYXRpbjEnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDAsICZib21iKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlIFhyd2ZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJceEZFXHhGRWxhdGluLTEiLCAnJ10sIHJlYWRmaWxlKCdYcndmaWxlMicsICdiJykpCiAgc2V0IGJvbWIgZmVuYz1sYXRpbjEKICB3cml0ZSBYcnd0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFsiXHhGRVx4RkVsYXRpbi0xIiwgJyddLCByZWFkZmlsZSgnWHJ3dGVzdDMnLCAnYicpKQogIHNldCBib21iJgoKICAiIENoZWNrIHV0Zi04IEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmOF9ib20gLi4gInV0Zi04Il0sICdYcnd0ZXN0MScpCiAgZWRpdCEgWHJ3dGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndXRmLTgnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1dGYtOCcsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhyd2ZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyd1dGYtOCcsICcnXSwgcmVhZGZpbGUoJ1hyd2ZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11dGYtOAogIHchIFhyd3Rlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjhfYm9tIC4uICJ1dGYtOCIsICcnXSwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1dGYtOCB3aXRoIGFuIGVycm9yICh3aWxsIGZhbGwgYmFjayB0byBsYXRpbi0xKQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmOF9ib20gLi4gInV0Zi04XHg4MGVyciJdLCAnWHJ3dGVzdDEnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2xhdGluMScsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMCwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoIlx4QzNceEFGXHhDMlx4QkJceEMyXHhCRnV0Zi04XHhDMlx4ODBlcnIiLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGY4X2JvbSAuLiAidXRmLThceDgwZXJyIiwgJyddLCByZWFkZmlsZSgnWHJ3ZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXV0Zi04CiAgdyEgWHJ3dGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbIlx4QzNceEFGXHhDMlx4QkJceEMyXHhCRnV0Zi04XHhDMlx4ODBlcnIiLCAnJ10sCiAgICAgICAgXCByZWFkZmlsZSgnWHJ3dGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy0yIEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMTZiZV9ib20gLi4gIlxudVxuY1xuc1xuLVxuMlxuIl0sICdYcnd0ZXN0MScpCiAgZWRpdCEgWHJ3dGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndXRmLTE2JywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTInLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTIiLCAnJ10sIHJlYWRmaWxlKCdYcndmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTIKICB3ISBYcnd0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGYxNmJlX2JvbSAuLiAiXG51XG5jXG5zXG4tXG4yXG4iLCAnJ10sCiAgICAgICAgXCByZWFkZmlsZSgnWHJ3dGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy0ybGUgQk9NCiAgJWJ3IQogIGNhbGwgd3JpdGVmaWxlKFt1dGYxNmxlX2JvbSAuLiAidVxuY1xuc1xuLVxuMlxubFxuZVxuIl0sICdYcnd0ZXN0MScpCiAgIiBOZWVkIHRvIGFkZCBhIE5VTCBieXRlIGFmdGVyIHRoZSBOTCBieXRlCiAgY2FsbCB3cml0ZWZpbGUoMHowMCwgJ1hyd3Rlc3QxJywgJ2EnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi0xNmxlJywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTJsZScsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhyd2ZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtMmxlIiwgJyddLCByZWFkZmlsZSgnWHJ3ZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXVjcy0ybGUKICB3ISBYcnd0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGYxNmxlX2JvbSAuLiAidVxuY1xuc1xuLVxuMlxubFxuZVxuIiwgIlxuIl0sCiAgICAgICAgXCByZWFkZmlsZSgnWHJ3dGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy00IEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMzJiZV9ib20gLi4gIlxuXG5cbnVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxuIl0sICdYcnd0ZXN0MScpCiAgZWRpdCEgWHJ3dGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTQnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtNCcsIGdldGxpbmUoMSkpCiAgc2V0IGZlbmM9bGF0aW4xCiAgd3JpdGUhIFhyd2ZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtNCIsICcnXSwgcmVhZGZpbGUoJ1hyd2ZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11Y3MtNAogIHchIFhyd3Rlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjMyYmVfYm9tIC4uICJcblxuXG51XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbiIsICcnXSwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtNGxlIEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMzJsZV9ib20gLi4gInVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxubFxuXG5cbmVcblxuXG4iXSwgJ1hyd3Rlc3QxJykKICAiIE5lZWQgdG8gYWRkIHRocmVlIE5VTCBieXRlcyBhZnRlciB0aGUgTkwgYnl0ZQogIGNhbGwgd3JpdGVmaWxlKDB6MDAwMDAwLCAnWHJ3dGVzdDEnLCAnYScpCiAgZWRpdCEgWHJ3dGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTRsZScsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00bGUnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTRsZSIsICcnXSwgcmVhZGZpbGUoJ1hyd2ZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11Y3MtNGxlCiAgdyEgWHJ3dGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMzJsZV9ib20gLi4gInVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxubFxuXG5cbmVcblxuXG4iLCAiXG5cblxuIl0sIHJlYWRmaWxlKCdYcnd0ZXN0MycsICdiJykpCgogIHNldCBjcG9wdGlvbnMtPVMKICBsZXQgJmZpbGVlbmNvZGluZyA9IHNhdmVfZmlsZWVuY29kaW5nCiAgY2FsbCBkZWxldGUoJ1hyd2ZpbGUyJykKICBjYWxsIGRlbGV0ZSgnWHJ3dGVzdDMnKQogICVidyEKZW5kZnVuYwoKZnVuYyBUZXN0X3JlYWRfd3JpdGVfYmluKCkKICAiIHdyaXRlIGZpbGUgbWlzc2luZyBFT0wKICBjYWxsIHdyaXRlZmlsZShbJ25vZW9sJ10sICJYTm9Fb2xTZXRFb2wiLCAnYlNEJykKICBjYWxsIGFzc2VydF9lcXVhbCgwejZFNkY2NTZGNkMsIHJlYWRmaWxlKCdYTm9Fb2xTZXRFb2wnLCAnQicpKQoKICAiIHdoZW4gZmlsZSBpcyByZWFkICdlb2wnIGlzIG9mZgogIHNldCBub2ZpeGVvbAogIGUhICsrZmY9dW5peCBYTm9Fb2xTZXRFb2wKICBjYWxsIGFzc2VydF9lcXVhbCgwLCAmZW9sKQoKICAiIHdyaXRpbmcgd2l0aCAnZW9sJyBzZXQgYWRkcyB0aGUgbmV3bGluZQogIHNldGxvY2FsIGVvbAogIHcKICBjYWxsIGFzc2VydF9lcXVhbCgwejZFNkY2NTZGNkMwQSwgcmVhZGZpbGUoJ1hOb0VvbFNldEVvbCcsICdCJykpCgogIHNldCBmZiYgZml4ZW9sJgogIGJ3aXBlISBYTm9Fb2xTZXRFb2wKZW5kZnVuYwoKIiBUZXN0IGZvciB0aGUgJ2JhY2t1cGNvcHknIG9wdGlvbiB3aGVuIHdyaXRpbmcgZmlsZXMKZnVuYyBUZXN0X2JhY2t1cGNvcHkoKQogIENoZWNrVW5peAogIHNldCBiYWNrdXBza2lwPQogICIgV2l0aCB0aGUgZGVmYXVsdCAnYmFja3VwY29weScgc2V0dGluZywgc2F2aW5nIGEgc3ltYm9saWMgbGluayBmaWxlCiAgIiBzaG91bGQgbm90IGJyZWFrIHRoZSBsaW5rLgogIHNldCBiYWNrdXBjb3B5JgogIGNhbGwgd3JpdGVmaWxlKFsnMTExMSddLCAnWGJjZmlsZTEnKQogIHNpbGVudCAhbG4gLXMgWGJjZmlsZTEgWGJjZmlsZTIKICBuZXcgWGJjZmlsZTIKICBjYWxsIHNldGxpbmUoMSwgWycyMjIyJ10pCiAgd3JpdGUKICBjbG9zZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnMjIyMiddLCByZWFkZmlsZSgnWGJjZmlsZTEnKSkKICBjYWxsIGFzc2VydF9lcXVhbCgnWGJjZmlsZTEnLCByZXNvbHZlKCdYYmNmaWxlMicpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdsaW5rJywgZ2V0ZnR5cGUoJ1hiY2ZpbGUyJykpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUxJykKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTInKQoKICAiIFdpdGggdGhlICdiYWNrdXBjb3B5JyBzZXQgdG8gJ2JyZWFrc3ltbGluaycsIHNhdmluZyBhIHN5bWJvbGljIGxpbmsgZmlsZQogICIgc2hvdWxkIGJyZWFrIHRoZSBsaW5rLgogIHNldCBiYWNrdXBjb3B5PXllcyxicmVha3N5bWxpbmsKICBjYWxsIHdyaXRlZmlsZShbJzExMTEnXSwgJ1hiY2ZpbGUxJykKICBzaWxlbnQgIWxuIC1zIFhiY2ZpbGUxIFhiY2ZpbGUyCiAgbmV3IFhiY2ZpbGUyCiAgY2FsbCBzZXRsaW5lKDEsIFsnMjIyMiddKQogIHdyaXRlCiAgY2xvc2UKICBjYWxsIGFzc2VydF9lcXVhbChbJzExMTEnXSwgcmVhZGZpbGUoJ1hiY2ZpbGUxJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWycyMjIyJ10sIHJlYWRmaWxlKCdYYmNmaWxlMicpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdYYmNmaWxlMicsIHJlc29sdmUoJ1hiY2ZpbGUyJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2ZpbGUnLCBnZXRmdHlwZSgnWGJjZmlsZTInKSkKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTEnKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlMicpCiAgc2V0IGJhY2t1cGNvcHkmCgogICIgV2l0aCB0aGUgZGVmYXVsdCAnYmFja3VwY29weScgc2V0dGluZywgc2F2aW5nIGEgaGFyZCBsaW5rIGZpbGUKICAiIHNob3VsZCBub3QgYnJlYWsgdGhlIGxpbmsuCiAgc2V0IGJhY2t1cGNvcHkmCiAgY2FsbCB3cml0ZWZpbGUoWycxMTExJ10sICdYYmNmaWxlMScpCiAgc2lsZW50ICFsbiBYYmNmaWxlMSBYYmNmaWxlMgogIG5ldyBYYmNmaWxlMgogIGNhbGwgc2V0bGluZSgxLCBbJzIyMjInXSkKICB3cml0ZQogIGNsb3NlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWycyMjIyJ10sIHJlYWRmaWxlKCdYYmNmaWxlMScpKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlMScpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUyJykKCiAgIiBXaXRoIHRoZSAnYmFja3VwY29weScgc2V0IHRvICdicmVha3N5bWxpbmsnLCBzYXZpbmcgYSBoYXJkIGxpbmsgZmlsZQogICIgc2hvdWxkIGJyZWFrIHRoZSBsaW5rLgogIHNldCBiYWNrdXBjb3B5PXllcyxicmVha2hhcmRsaW5rCiAgY2FsbCB3cml0ZWZpbGUoWycxMTExJ10sICdYYmNmaWxlMScpCiAgc2lsZW50ICFsbiBYYmNmaWxlMSBYYmNmaWxlMgogIG5ldyBYYmNmaWxlMgogIGNhbGwgc2V0bGluZSgxLCBbJzIyMjInXSkKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnMTExMSddLCByZWFkZmlsZSgnWGJjZmlsZTEnKSkKICBjYWxsIGFzc2VydF9lcXVhbChbJzIyMjInXSwgcmVhZGZpbGUoJ1hiY2ZpbGUyJykpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUxJykKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTInKQoKICAiIElmIGEgYmFja3VwIGZpbGUgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGVuIGEgc2xpZ2h0bHkgbW9kaWZpZWQgZmlsZW5hbWUKICAiIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBiYWNrdXAgZmlsZS4gVHJ5IHdpdGggJ2JhY2t1cGNvcHknIHNldCB0byAneWVzJyBhbmQKICAiICdubycuCiAgJWJ3CiAgY2FsbCB3cml0ZWZpbGUoWydhYWFhJ10sICdYYmNmaWxlJykKICBjYWxsIHdyaXRlZmlsZShbJ2JiYmInXSwgJ1hiY2ZpbGUuYmFrJykKICBzZXQgYmFja3VwY29weT15ZXMgYmFja3VwZXh0PS5iYWsKICBuZXcgWGJjZmlsZQogIGNhbGwgc2V0bGluZSgxLCBbJ2NjY2MnXSkKICB3cml0ZQogIGNsb3NlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydjY2NjJ10sIHJlYWRmaWxlKCdYYmNmaWxlJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydiYmJiJ10sIHJlYWRmaWxlKCdYYmNmaWxlLmJhaycpKQogIHNldCBiYWNrdXBjb3B5PW5vIGJhY2t1cGV4dD0uYmFrCiAgbmV3IFhiY2ZpbGUKICBjYWxsIHNldGxpbmUoMSwgWydkZGRkJ10pCiAgd3JpdGUKICBjbG9zZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnZGRkZCddLCByZWFkZmlsZSgnWGJjZmlsZScpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnYmJiYiddLCByZWFkZmlsZSgnWGJjZmlsZS5iYWsnKSkKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZScpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUuYmFrJykKCiAgIiBXcml0ZSB0byBhIGRldmljZSBmaWxlIChpbiBVbml4LWxpa2Ugc3lzdGVtcykgd2hpY2ggY2Fubm90IGJlIGJhY2tlZCB1cC4KICBpZiBoYXMoJ3VuaXgnKQogICAgc2V0IHdyaXRlYmFja3VwIGJhY2t1cGNvcHk9eWVzIG5vYmFja3VwCiAgICBuZXcKICAgIGNhbGwgc2V0bGluZSgxLCBbJ2FhYWEnXSkKICAgIGxldCBvdXRwdXQgPSBleGVjdXRlKCd3cml0ZSEgL2Rldi9udWxsJykKICAgIGNhbGwgYXNzZXJ0X21hdGNoKCciL2Rldi9udWxsIiBcW0RldmljZV0nLCBvdXRwdXQpCiAgICBjbG9zZQogICAgc2V0IHdyaXRlYmFja3VwIGJhY2t1cGNvcHk9bm8gbm9iYWNrdXAKICAgIG5ldwogICAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhYSddKQogICAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlISAvZGV2L251bGwnKQogICAgY2FsbCBhc3NlcnRfbWF0Y2goJyIvZGV2L251bGwiIFxbRGV2aWNlXScsIG91dHB1dCkKICAgIGNsb3NlCiAgICBzZXQgYmFja3VwIHdyaXRlYmFja3VwJiBiYWNrdXBjb3B5JgogICAgbmV3CiAgICBjYWxsIHNldGxpbmUoMSwgWydhYWFhJ10pCiAgICBsZXQgb3V0cHV0ID0gZXhlY3V0ZSgnd3JpdGUhIC9kZXYvbnVsbCcpCiAgICBjYWxsIGFzc2VydF9tYXRjaCgnIi9kZXYvbnVsbCIgXFtEZXZpY2VdJywgb3V0cHV0KQogICAgY2xvc2UKICBlbmRpZgoKICBzZXQgYmFja3VwY29weSYgYmFja3Vwc2tpcCYgYmFja3VwZXh0JiBiYWNrdXAmCmVuZGZ1bmMKCiIgVGVzdCBmb3Igd3JpdGluZyBhIGZpbGUgd2l0aCAnZW5jb2RpbmcnIHNldCB0byAndXRmLTE2JwpmdW5jIFRlc3Rfd3JpdGVfdXRmMTYoKQogIG5ldwogIGNhbGwgc2V0bGluZSgxLCBbIlxVMDAwMTAwMDEiXSkKICB3cml0ZSArK2VuYz11dGYtMTYgWHcxNmZpbGUKICBidyEKICBjYWxsIGFzc2VydF9lcXVhbCgwekQ4MDBEQzAxLCByZWFkZmlsZSgnWHcxNmZpbGUnLCAnQicpWzA6M10pCiAgY2FsbCBkZWxldGUoJ1h3MTZmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciB0cnlpbmcgdG8gc2F2ZSBhIGJhY2t1cCBmaWxlIHdoZW4gdGhlIGJhY2t1cCBmaWxlIGlzIGEgc3ltYm9saWMKIiBsaW5rIHRvIHRoZSBvcmlnaW5hbCBmaWxlLiBUaGUgYmFja3VwIGZpbGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KZnVuYyBUZXN0X3dyaXRlX2JhY2t1cF9zeW1saW5rKCkKICBDaGVja1VuaXgKICBjYWxsIG1rZGlyKCdYYmFja3VwJykKICBsZXQgc2F2ZV9iYWNrdXBkaXIgPSAmYmFja3VwZGlyCiAgc2V0IGJhY2t1cGRpcj0uLC4vWGJhY2t1cAogIGNhbGwgd3JpdGVmaWxlKFsnMTExMSddLCAnWHdic2ZpbGUnLCAnRCcpCiAgc2lsZW50ICFsbiAtcyBYd2JzZmlsZSBYd2JzZmlsZS5iYWsKCiAgbmV3IFh3YnNmaWxlCiAgc2V0IGJhY2t1cCBiYWNrdXBjb3B5PXllcyBiYWNrdXBleHQ9LmJhawogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2xpbmsnLCBnZXRmdHlwZSgnWHdic2ZpbGUuYmFrJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ1h3YnNmaWxlJywgcmVzb2x2ZSgnWHdic2ZpbGUuYmFrJykpCiAgIiBiYWNrdXAgZmlsZSBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgJ2JhY2t1cCcgZGlyZWN0b3J5CiAgaWYgIWhhcygnYnNkJykKICAgICIgVGhpcyBjaGVjayBmYWlscyBvbiBGcmVlQlNECiAgICBjYWxsIGFzc2VydF90cnVlKGZpbGVyZWFkYWJsZSgnLi9YYmFja3VwL1h3YnNmaWxlLmJhaycpKQogIGVuZGlmCiAgc2V0IGJhY2t1cCYgYmFja3VwY29weSYgYmFja3VwZXh0JgogICVidwoKICBjYWxsIGRlbGV0ZSgnWHdic2ZpbGUuYmFrJykKICBjYWxsIGRlbGV0ZSgnWGJhY2t1cCcsICdyZicpCiAgbGV0ICZiYWNrdXBkaXIgPSBzYXZlX2JhY2t1cGRpcgplbmRmdW5jCgoiIFRlc3QgZm9yICc6d3JpdGUgKytiaW4nIGFuZCAnOndyaXRlICsrbm9iaW4nCmZ1bmMgVGVzdF93cml0ZV9iaW5hcnlfZmlsZSgpCiAgIiBjcmVhdGUgYSBmaWxlIHdpdGhvdXQgYW4gZW9sL2VvZiBjaGFyYWN0ZXIKICBjYWxsIHdyaXRlZmlsZSgwejYxNjE2MSwgJ1h3YmZpbGUxJywgJ2JEJykKICBuZXcgWHdiZmlsZTEKICB3cml0ZSArK2JpbiBYd2JmaWxlMgogIHdyaXRlICsrbm9iaW4gWHdiZmlsZTMKICBjYWxsIGFzc2VydF9lcXVhbCgwejYxNjE2MSwgcmVhZGJsb2IoJ1h3YmZpbGUyJykpCiAgaWYgaGFzKCd3aW4zMicpCiAgICBjYWxsIGFzc2VydF9lcXVhbCgwejYxNjE2MTBELjBBLCByZWFkYmxvYignWHdiZmlsZTMnKSkKICBlbHNlCiAgICBjYWxsIGFzc2VydF9lcXVhbCgwejYxNjE2MTBBLCByZWFkYmxvYignWHdiZmlsZTMnKSkKICBlbmRpZgogIGNhbGwgZGVsZXRlKCdYd2JmaWxlMicpCiAgY2FsbCBkZWxldGUoJ1h3YmZpbGUzJykKZW5kZnVuYwoKZnVuYyBEb1dyaXRlRGVmZXIoKQogIGNhbGwgd3JpdGVmaWxlKFsnc29tZSB0ZXh0J10sICdYZGVmZXJEZWxldGUnLCAnRCcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydzb21lIHRleHQnXSwgcmVhZGZpbGUoJ1hkZWZlckRlbGV0ZScpKQplbmRmdW5jCgpkZWYgRGVmV3JpdGVEZWZlcigpCiAgd3JpdGVmaWxlKFsnc29tZSB0ZXh0J10sICdYZGVmZGVmZXJEZWxldGUnLCAnRCcpCiAgYXNzZXJ0X2VxdWFsKFsnc29tZSB0ZXh0J10sIHJlYWRmaWxlKCdYZGVmZGVmZXJEZWxldGUnKSkKZW5kZGVmCgpmdW5jIFRlc3Rfd3JpdGVfd2l0aF9kZWZlcnJlZF9kZWxldGUoKQogIGNhbGwgRG9Xcml0ZURlZmVyKCkKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWGRlZmVyRGVsZXRlJykpCiAgY2FsbCBEZWZXcml0ZURlZmVyKCkKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWGRlZmRlZmVyRGVsZXRlJykpCmVuZGZ1bmMKCmZ1bmMgRG9Xcml0ZUZpbGUoKQogIGNhbGwgd3JpdGVmaWxlKFsndGV4dCddLCAnWHRoZWZpbGUnLCAnRCcpCiAgY2QgLi4KZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlX2RlZmVyX2RlbGV0ZV9jaGRpcigpCiAgbGV0IGRpciA9IGdldGN3ZCgpCiAgY2FsbCBEb1dyaXRlRmlsZSgpCiAgY2FsbCBhc3NlcnRfbm90ZXF1YWwoZGlyLCBnZXRjd2QoKSkKICBjYWxsIGNoZGlyKGRpcikKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWHRoZWZpbGUnKSkKZW5kZnVuYwoKIiBDaGVjayB0aGF0IGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZSB0cmlnZ2VyaW5nIFF1aXRQcmUKZnVuYyBUZXN0X3dxX3F1aXRwcmVfYXV0b2NvbW1hbmQoKQogIGVkaXQgWHNvbWVmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICdoZWxsbycpCiAgc3BsaXQKICBsZXQgZzpzZXEgPSBbXQogIGF1Z3JvdXAgVGVzdGluZwogICAgYXUgUXVpdFByZSAqIGNhbGwgYWRkKGc6c2VxLCAnUXVpdFByZSAtICcgLi4gKCZtb2RpZmllZCA/ICdtb2RpZmllZCcgOiAnbm90IG1vZGlmaWVkJykpCiAgICBhdSBCdWZXcml0ZVBvc3QgKiBjYWxsIGFkZChnOnNlcSwgJ3dyaXR0ZW4nKQogIGF1Z3JvdXAgRU5ECiAgd3EKICBjYWxsIGFzc2VydF9lcXVhbChbJ3dyaXR0ZW4nLCAnUXVpdFByZSAtIG5vdCBtb2RpZmllZCddLCBnOnNlcSkKCiAgYXVncm91cCBUZXN0aW5nCiAgICBhdSEKICBhdWdyb3VwIEVORAogIGJ3aXBlIQogIHVubGV0IGc6c2VxCiAgY2FsbCBkZWxldGUoJ1hzb21lZmlsZScpCmVuZGZ1bmMKCiIgdmltOiBzaGlmdHdpZHRoPTIgc3RzPTIgZXhwYW5kdGFiCg==