IiBUZXN0cyBmb3IgdGhlIHdyaXRlZmlsZSgpIGZ1bmN0aW9uIGFuZCBzb21lIDp3cml0ZSBjb21tYW5kcy4KCnNvdXJjZSBjaGVjay52aW0Kc291cmNlIHRlcm1fdXRpbC52aW0KCmZ1bmMgVGVzdF93cml0ZWZpbGUoKQogIGxldCBmID0gdGVtcG5hbWUoKQogIGNhbGwgd3JpdGVmaWxlKFsib3ZlciIsIndyaXR0ZW4iXSwgZiwgImIiKQogIGNhbGwgd3JpdGVmaWxlKFsiaGVsbG8iLCJ3b3JsZCJdLCBmLCAiYiIpCiAgY2FsbCB3cml0ZWZpbGUoWyIhIiwgImdvb2QiXSwgZiwgImEiKQogIGNhbGwgd3JpdGVmaWxlKFsibW9ybmluZyJdLCBmLCAiYWIiKQogIGNhbGwgd3JpdGVmaWxlKFsiIiwgInZpbW1lcnMiXSwgZiwgImFiIikKICBsZXQgbCA9IHJlYWRmaWxlKGYpCiAgY2FsbCBhc3NlcnRfZXF1YWwoImhlbGxvIiwgbFswXSkKICBjYWxsIGFzc2VydF9lcXVhbCgid29ybGQhIiwgbFsxXSkKICBjYWxsIGFzc2VydF9lcXVhbCgiZ29vZCIsIGxbMl0pCiAgY2FsbCBhc3NlcnRfZXF1YWwoIm1vcm5pbmciLCBsWzNdKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJ2aW1tZXJzIiwgbFs0XSkKICBjYWxsIGRlbGV0ZShmKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoInRleHQiLCAiWHdmZmlsZSIpJywgJ0U0NzU6IEludmFsaWQgYXJndW1lbnQ6IHdyaXRlZmlsZSgpIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBMaXN0IG9yIGEgQmxvYicpCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfaWdub3JlX3JlZ2V4cF9lcnJvcigpCiAgd3JpdGUgWHRbei1hXWVzdC50eHQKICBjYWxsIGRlbGV0ZSgnWHRbei1hXWVzdC50eHQnKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2ZhaWxzX2dlbnRseSgpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFsidGVzdCJdLCAiWHdmZmlsZSIsIFtdKScsICdFNzMwOicpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCJYd2ZmaWxlIikpCiAgY2FsbCBkZWxldGUoIlh3ZmZpbGUiKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoWyJ0ZXN0IiwgW10sIFtdLCBbXSwgInRzZXQiXSwgIlh3ZmZpbGUiKScsICdFNzMwOicpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCJYd2ZmaWxlIikpCiAgY2FsbCBkZWxldGUoIlh3ZmZpbGUiKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoW10sICJYd2ZmaWxlIiwgW10pJywgJ0U3MzA6JykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoIlh3ZmZpbGUiKSkKICBjYWxsIGRlbGV0ZSgiWHdmZmlsZSIpCgogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbXSwgW10pJywgJ0U3MzA6JykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9mYWlsc19jb252ZXJzaW9uKCkKICBDaGVja0ZlYXR1cmUgaWNvbnYKICBpZiBoYXMoJ3N1bicpCiAgICB0aHJvdyAnU2tpcHBlZDogZG9lcyBub3Qgd29yayBvbiBTdW5PUycKICBlbmRpZgogICIgV2l0aG91dCBhIGJhY2t1cCBmaWxlIHRoZSB3cml0ZSB3b24ndCBoYXBwZW4gaWYgdGhlcmUgaXMgYSBjb252ZXJzaW9uCiAgIiBlcnJvci4KICBzZXQgbm9iYWNrdXAgbm93cml0ZWJhY2t1cCBiYWNrdXBkaXI9LiBiYWNrdXBza2lwPQogIG5ldwogIGxldCBjb250ZW50cyA9IFsibGluZSBvbmUiLCAibGluZSB0d28iXQogIGNhbGwgd3JpdGVmaWxlKGNvbnRlbnRzLCAnWHdmY2ZpbGUnKQogIGVkaXQgWHdmY2ZpbGUKICBjYWxsIHNldGxpbmUoMSwgWyJmaXJzdCBsaW5lIiwgImNhbm5vdCBjb252ZXJ0IFx1MDEwYiIsICJ0aGlyZCBsaW5lIl0pCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlICsrZW5jPWNwOTMyJywgJ0U1MTM6JykKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZmNmaWxlJykpCgogICIgV2l0aCAnYmFja3VwY29weScgc2V0LCBpZiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gZXJyb3IsIHRoZSBiYWNrdXAgZmlsZSBpcwogICIgc3RpbGwgY3JlYXRlZC4KICBzZXQgYmFja3VwY29weT15ZXMgd3JpdGViYWNrdXAmIGJhY2t1cCYKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbGUnIC4uICZiYWNrdXBleHQpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlICsrZW5jPWNwOTMyJywgJ0U1MTM6JykKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZmNmaWxlJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoY29udGVudHMsIHJlYWRmaWxlKCdYd2ZjZmlsZScgLi4gJmJhY2t1cGV4dCkpCiAgc2V0IGJhY2t1cGNvcHkmCiAgJWJ3IQoKICAiIENvbnZlcnNpb24gZXJyb3IgZHVyaW5nIHdyaXRlCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsiXFUxMDAwMDAwMCJdKQogIGxldCBvdXRwdXQgPSBleGVjdXRlKCd3cml0ZSEgKytlbmM9dXRmLTE2IFh3ZmNmaWxlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBsZXQgb3V0cHV0ID0gZXhlY3V0ZSgnd3JpdGUhICsrZW5jPXVjcy0yIFh3ZmNmaWxlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbHp+JykKICBjYWxsIGRlbGV0ZSgnWHdmY2ZpbHl+JykKICAlYnchCgogIGNhbGwgZGVsZXRlKCdYd2ZjZmlsZScpCiAgY2FsbCBkZWxldGUoJ1h3ZmNmaWxlJyAuLiAmYmFja3VwZXh0KQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbjIoKQogIENoZWNrRmVhdHVyZSBpY29udgogIGlmIGhhcygnc3VuJykKICAgIHRocm93ICdTa2lwcGVkOiBkb2VzIG5vdCB3b3JrIG9uIFN1bk9TJwogIGVuZGlmCiAgIiBXaXRoIGEgYmFja3VwIGZpbGUgdGhlIHdyaXRlIGhhcHBlbnMgZXZlbiBpZiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gZXJyb3IsCiAgIiBidXQgdGhlbiB0aGUgYmFja3VwIGZpbGUgbXVzdCByZW1haW4KICBzZXQgbm9iYWNrdXAgd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1h3ZjJmaWxlX2NvbnZlcnNpb25fZXJyJykKICBlZGl0IFh3ZjJmaWxlX2NvbnZlcnNpb25fZXJyCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIHNldCBmaWxlZW5jb2Rpbmc9bGF0aW4xCiAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1h3ZjJmaWxlX2NvbnZlcnNpb25fZXJyficpKQoKICBjYWxsIGRlbGV0ZSgnWHdmMmZpbGVfY29udmVyc2lvbl9lcnInKQogIGNhbGwgZGVsZXRlKCdYd2YyZmlsZV9jb252ZXJzaW9uX2Vycn4nKQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgU2V0RmxhZyh0aW1lcikKICBsZXQgZzpmbGFnID0gMQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgc3BsaXR0aW5nIHdpbmRvdyBvbiBmaWxlIHdyaXRlLgogIGF1Z3JvdXAgdGVzdGdyb3VwCiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlICogc3BsaXQKICBhdWdyb3VwIEVORAogIGUhIFh3cXNmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICdub3RoaW5nJykKICB3cQoKICBpZiBoYXMoJ3RpbWVycycpCiAgICAiIHRpbWVyIHdpbGwgbm90IHJ1biBpZiAiZXhpdGluZyIgaXMgc3RpbGwgc2V0CiAgICBsZXQgZzpmbGFnID0gMAogICAgY2FsbCB0aW1lcl9zdGFydCgxLCAnU2V0RmxhZycpCiAgICBzbGVlcCA1MG0KICAgIGNhbGwgYXNzZXJ0X2VxdWFsKDEsIGc6ZmxhZykKICAgIHVubGV0IGc6ZmxhZwogIGVuZGlmCiAgYXUhIHRlc3Rncm91cAogIGJ3aXBlIFh3cXNmaWxlCiAgY2FsbCBkZWxldGUoJ1h3cXNmaWxlJykKZW5kZnVuYwoKZnVuYyBUZXN0X25vd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgb3BlbmluZyBhIGhlbHAgd2luZG93LgogIGUhIFhucXNmaWxlCiAgaGVscAogIHdpbmNtZCB3CiAgZXhlIHdpbm5yKCkgLiAncScKCiAgaWYgaGFzKCd0aW1lcnMnKQogICAgIiB0aW1lciB3aWxsIG5vdCBydW4gaWYgImV4aXRpbmciIGlzIHN0aWxsIHNldAogICAgbGV0IGc6ZmxhZyA9IDAKICAgIGNhbGwgdGltZXJfc3RhcnQoMSwgJ1NldEZsYWcnKQogICAgc2xlZXAgNTBtCiAgICBjYWxsIGFzc2VydF9lcXVhbCgxLCBnOmZsYWcpCiAgICB1bmxldCBnOmZsYWcKICBlbmRpZgogIGJ3aXBlIFhucXNmaWxlCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfc3luY19hcmcoKQogICIgVGhpcyBkb2Vzbid0IGNoZWNrIGlmIGZzeW5jKCkgd29ya3MsIG9ubHkgdGhhdCB0aGUgYXJndW1lbnQgaXMgYWNjZXB0ZWQuCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1h0ZXN0JywgJ3MnKQogIGNhbGwgd3JpdGVmaWxlKFsndHdvJ10sICdYdGVzdCcsICdTJykKICBjYWxsIGRlbGV0ZSgnWHRlc3QnKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX3N5bmNfZGV2X3N0ZG91dCgpCiAgQ2hlY2tVbml4CiAgaWYgZmlsZXdyaXRhYmxlKCcvZGV2L3N0ZG91dCcpCiAgICAiIEp1c3QgY2hlY2sgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYW4gZXJyb3IuCiAgICBjYWxsIHdyaXRlZmlsZShbJ29uZSddLCAnL2Rldi9zdGRvdXQnKQogIGVsc2UKICAgIHRocm93ICdTa2lwcGVkOiAvZGV2L3N0ZG91dCBpcyBub3Qgd3JpdGFibGUnCiAgZW5kaWYKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9hdXRvd3JpdGUoKQogIHNldCBhdXRvd3JpdGUKICBuZXcKICBuZXh0IFhhIFhiIFhjCiAgY2FsbCBzZXRsaW5lKDEsICdhYWEnKQogIG5leHQKICBjYWxsIGFzc2VydF9lcXVhbChbJ2FhYSddLCByZWFkZmlsZSgnWGEnKSkKICBjYWxsIHNldGxpbmUoMSwgJ2JiYicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2VkaXQgWFgnKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGInKSkKCiAgc2V0IGF1dG93cml0ZWFsbAogIGVkaXQgWFgKICBjYWxsIGFzc2VydF9lcXVhbChbJ2JiYiddLCByZWFkZmlsZSgnWGInKSkKCiAgYndpcGUhCiAgY2FsbCBkZWxldGUoJ1hhJykKICBjYWxsIGRlbGV0ZSgnWGInKQogIHNldCBub2F1dG93cml0ZQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2F1dG93cml0ZV9ub3dyaXRlKCkKICBzZXQgYXV0b3dyaXRlCiAgbmV3CiAgbmV4dCBYYSBYYiBYYwogIHNldCBidWZ0eXBlPW5vd3JpdGUKICBjYWxsIHNldGxpbmUoMSwgJ2FhYScpCiAgbGV0IGJ1ZiA9IGJ1Zm5yKCclJykKICAiIGJ1ZmZlciBjb250ZW50cyBzaWxlbnRseSBsb3N0CiAgZWRpdCBYWAogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGEnKSkKICByZXdpbmQKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2V0bGluZSgxKSkKCiAgYndpcGUhCiAgc2V0IG5vYXV0b3dyaXRlCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJzp3ICE8Y21kPicgdG8gcGlwZSBsaW5lcyBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBhbiBleHRlcm5hbAoiIGNvbW1hbmQuCmZ1bmMgVGVzdF93cml0ZV9waXBlX3RvX2NtZCgpCiAgQ2hlY2tVbml4CiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnLCAnTDInLCAnTDMnLCAnTDQnXSkKICAyLDN3ICFjYXQgPiBYcHRmaWxlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydMMicsICdMMyddLCByZWFkZmlsZSgnWHB0ZmlsZScpKQogIGNsb3NlIQogIGNhbGwgZGVsZXRlKCdYcHRmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciA6c2F2ZWFzCmZ1bmMgVGVzdF9zYXZlYXMoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMnLCAnRTQ3MTonKQogIGNhbGwgd3JpdGVmaWxlKFsnTDEnXSwgJ1hzYWZpbGUnKQogIG5ldyBYc2FmaWxlCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnXSkKICBjYWxsIGFzc2VydF9mYWlscygnc2F2ZWFzIFhzYWZpbGUnLCAnRTEzOTonKQogIGNsb3NlIQogIGVuZXcgfCBvbmx5CiAgY2FsbCBkZWxldGUoJ1hzYWZpbGUnKQoKICAiIDpzYXZlYXMgc2hvdWxkIGRldGVjdCBhbmQgc2V0IHRoZSBmaWxlIHR5cGUuCiAgc3ludGF4IG9uCiAgc2F2ZWFzISBYc2F2ZWFzLnBsCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3BlcmwnLCAmZmlsZXR5cGUpCiAgc3ludGF4IG9mZgogICVidyEKICBjYWxsIGRlbGV0ZSgnWHNhdmVhcy5wbCcpCgogICIgOnNhdmVhcyBmYWlscyBmb3IgIm5vZmlsZSIgYnVmZmVyCiAgc2V0IGJ1ZnR5cGU9bm9maWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3NhdmVhcyBYc2FmaWxlJywgJ0U2NzY6IE5vIG1hdGNoaW5nIGF1dG9jb21tYW5kcyBmb3IgYnVmdHlwZT1ub2ZpbGUgYnVmZmVyJykKCiAgYndpcGUhCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZV9lcnJvcnMoKQogICIgVGVzdCBmb3Igd3JpdGluZyBwYXJ0aWFsIGJ1ZmZlcgogIGNhbGwgd3JpdGVmaWxlKFsnTDEnLCAnTDInLCAnTDMnXSwgJ1h3ZWZpbGUnKQogIG5ldyBYd2VmaWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJzEsMndyaXRlJywgJ0UxNDA6JykKICBjbG9zZSEKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3cgPiBYdGVzdCcsICdFNDk0OicpCiAKICAiIFRyeSB0byBvdmVyd3JpdGUgYSBkaXJlY3RvcnkKICBpZiBoYXMoJ3VuaXgnKQogICAgY2FsbCBta2RpcignWHdlcmRpcjEnKQogICAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIFh3ZXJkaXIxJywgJ0UxNzonKQogICAgY2FsbCBkZWxldGUoJ1h3ZXJkaXIxJywgJ2QnKQogIGVuZGlmCgogICIgVGVzdCBmb3IgOndhbGwgZm9yIGEgYnVmZmVyIHdpdGggbm8gbmFtZQogIGVuZXcgfCBvbmx5CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnXSkKICBjYWxsIGFzc2VydF9mYWlscygnd2FsbCcsICdFMTQxOicpCiAgZW5ldyEKCiAgIiBUZXN0IGZvciB3cml0aW5nIGEgJ3JlYWRvbmx5JyBmaWxlCiAgbmV3IFh3ZWZpbGUKICBzZXQgcmVhZG9ubHkKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTQ1OicpCiAgY2xvc2UKCiAgIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgcmVhZC1vbmx5IGZpbGUKICBuZXcgWHdlZmlsZQogIGNhbGwgc2V0ZnBlcm0oJ1h3ZWZpbGUnLCAnci0tci0tci0tJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwNTonKQogIGNhbGwgc2V0ZnBlcm0oJ1h3ZWZpbGUnLCAncnctcnctcnctJykKICBjbG9zZQoKICBjYWxsIGRlbGV0ZSgnWHdlZmlsZScpCgogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9saXN0KCksICdYd2VmaWxlJykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoJ1h3ZWZpbGUnKSkKICBjYWxsIHdyaXRlZmlsZSh0ZXN0X251bGxfYmxvYigpLCAnWHdlZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYd2VmaWxlJykpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCAiIiknLCAnRTQ4MjonKQoKICAiIHZlcnkgbG9uZyBmaWxlIG5hbWUKICBsZXQgbG9uZ19mbmFtZSA9IHJlcGVhdCgnbicsIDUwMDApCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2V4ZSAidyAiIC4uIGxvbmdfZm5hbWUnLCAnRTc1OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCBsb25nX2ZuYW1lKScsICdFNDgyOicpCgogICIgVGVzdCBmb3Igd3JpdGluZyB0byBhIGJsb2NrIGRldmljZSBvbiBVbml4LWxpa2Ugc3lzdGVtcwogIGlmIGhhcygndW5peCcpICYmIGdldGZwZXJtKCcvZGV2L2xvb3AwJykgIT0gJycKICAgICAgICBcICYmIGdldGZ0eXBlKCcvZGV2L2xvb3AwJykgPT0gJ2JkZXYnICYmICFJc1Jvb3QoKQogICAgbmV3CiAgICBlZGl0IC9kZXYvbG9vcDAKICAgIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNTAzOiAnKQogICAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIScsICdFNTAzOiAnKQogICAgY2xvc2UhCiAgZW5kaWYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgZmlsZSB3aGljaCBpcyBtb2RpZmllZCBhZnRlciBWaW0gcmVhZCBpdApmdW5jIFRlc3Rfd3JpdGVfZmlsZV9tdGltZSgpCiAgQ2hlY2tFbmdsaXNoCiAgQ2hlY2tSdW5WaW1JblRlcm1pbmFsCgogICIgRmlyc3QgcmVhZCB0aGUgZmlsZSBpbnRvIGEgYnVmZmVyCiAgY2FsbCB3cml0ZWZpbGUoWyJMaW5lMSIsICJMaW5lMiJdLCAnWHdmbWZpbGUnKQogIGxldCBvbGRfZnRpbWUgPSBnZXRmdGltZSgnWHdmbWZpbGUnKQogIGxldCBidWYgPSBSdW5WaW1JblRlcm1pbmFsKCdYd2ZtZmlsZScsICN7cm93cyA6IDEwfSkKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAiOnNldCBub3N3YXBmaWxlXDxDUj4iKQogIGNhbGwgVGVybVdhaXQoYnVmKQoKICAiIE1vZGlmeSB0aGUgZmlsZSBkaXJlY3RseS4gIE1ha2Ugc3VyZSB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZSBpcwogICIgZGlmZmVyZW50LiBOb3RlIHRoYXQgb24gTGludXgvVW5peCwgdGhlIGZpbGUgaXMgY29uc2lkZXJlZCBtb2RpZmllZAogICIgb3V0c2lkZSwgb25seSBpZiB0aGUgZGlmZmVyZW5jZSBpcyAyIHNlY29uZHMgb3IgbW9yZQogIHNsZWVwIDEKICBjYWxsIHdyaXRlZmlsZShbIkxpbmUzIiwgIkxpbmU0Il0sICdYd2ZtZmlsZScpCiAgbGV0IG5ld19mdGltZSA9IGdldGZ0aW1lKCdYd2ZtZmlsZScpCiAgd2hpbGUgbmV3X2Z0aW1lIC0gb2xkX2Z0aW1lIDwgMgogICAgc2xlZXAgMTAwbQogICAgY2FsbCB3cml0ZWZpbGUoWyJMaW5lMyIsICJMaW5lNCJdLCAnWHdmbWZpbGUnKQogICAgbGV0IG5ld19mdGltZSA9IGdldGZ0aW1lKCdYd2ZtZmlsZScpCiAgZW5kd2hpbGUKCiAgIiBUcnkgdG8gb3ZlcndyaXRlIHRoZSBmaWxlIGFuZCBjaGVjayBmb3IgdGhlIHByb21wdAogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6d1w8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIFdhaXRGb3JBc3NlcnQoey0+IGFzc2VydF9lcXVhbCgiV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhIiwgdGVybV9nZXRsaW5lKGJ1ZiwgOSkpfSkKICBjYWxsIGFzc2VydF9lcXVhbCgiRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0ICh5L24pPyIsCiAgICAgICAgXCB0ZXJtX2dldGxpbmUoYnVmLCAxMCkpCiAgY2FsbCB0ZXJtX3NlbmRrZXlzKGJ1ZiwgIm5cPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCiAgY2FsbCBhc3NlcnRfZXF1YWwobmV3X2Z0aW1lLCBnZXRmdGltZSgnWHdmbWZpbGUnKSkKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAiOndcPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCiAgY2FsbCB0ZXJtX3NlbmRrZXlzKGJ1ZiwgInlcPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCiAgY2FsbCBXYWl0Rm9yQXNzZXJ0KHstPiBhc3NlcnRfZXF1YWwoJ0xpbmUyJywgcmVhZGZpbGUoJ1h3Zm1maWxlJylbMV0pfSkKCiAgIiBjbGVhbiB1cAogIGNhbGwgU3RvcFZpbUluVGVybWluYWwoYnVmKQogIGNhbGwgZGVsZXRlKCdYd2ZtZmlsZScpCmVuZGZ1bmMKCiIgVGVzdCBmb3IgYW4gYXV0b2NtZCB1bmxvYWRpbmcgYSBidWZmZXIgZHVyaW5nIGEgd3JpdGUgY29tbWFuZApmdW5jIFRlc3Rfd3JpdGVfYXV0b2NtZF91bmxvYWRidWZfbG9ja21hcmsoKQogIGF1Z3JvdXAgV3JpdGVUZXN0CiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlIFh3YXVmaWxlIGVuZXcgfCB3cml0ZQogIGF1Z3JvdXAgRU5ECiAgZSBYd2F1ZmlsZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdsb2NrbWFya3Mgd3JpdGUnLCBbJ0UzMjonLCAnRTIwMzonXSkKICBhdWdyb3VwIFdyaXRlVGVzdAogICAgYXUhCiAgYXVncm91cCBFTkQKICBhdWdyb3VwISBXcml0ZVRlc3QKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgYnVmZmVyIHdpdGggJ2Fjd3JpdGUnIGJ1dCB3aXRob3V0IGF1dG9jbWRzCmZ1bmMgVGVzdF93cml0ZV9hY3dyaXRlX2Vycm9yKCkKICBuZXcgWHdhZWZpbGUKICBjYWxsIHNldGxpbmUoMSwgWydsaW5lMScsICdsaW5lMicsICdsaW5lMyddKQogIHNldCBidWZ0eXBlPWFjd3JpdGUKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTY3NjonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcxLDJ3cml0ZSEnLCAnRTY3NjonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3ID4+JywgJ0U2NzY6JykKICBjbG9zZSEKZW5kZnVuYwoKIiBUZXN0IGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzIGZyb20gYW4gYXV0b2NtZCB3aGVuIHdyaXRpbmcgYSBidWZmZXIKZnVuYyBUZXN0X3dyaXRlX2F1dG9jbWRfYWRkX3JlbW92ZV9saW5lcygpCiAgbmV3IFh3YWFmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCgogICIgQXV0b2NtZCBkZWxldGluZyBsaW5lcyBmcm9tIHRoZSBmaWxlIHdoZW4gd3JpdGluZyBhIHBhcnRpYWwgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEZpbGVXcml0ZVByZSBYd2FhZmlsZSAxLDJkCiAgYXVncm91cCBFTkQKICBjYWxsIGFzc2VydF9mYWlscygnMiwzdyEnLCAnRTIwNDonKQoKICAiIEF1dG9jbWQgYWRkaW5nIGxpbmVzIHRvIGEgZmlsZSB3aGVuIHdyaXRpbmcgYSBwYXJ0aWFsIGZpbGUKICBhdWdyb3VwIFdyaXRlVGVzdDIKICAgIGF1IQogICAgYXV0b2NtZCBGaWxlV3JpdGVQcmUgWHdhYWZpbGUgY2FsbCBhcHBlbmQoMCwgWyd4eHgnLCAneXl5J10pCiAgYXVncm91cCBFTkQKICAlZAogIGNhbGwgc2V0bGluZSgxLCBbJ2FhYScsICdiYmInLCAnY2NjJywgJ2RkZCddKQogIDEsMnchCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyd4eHgnLCAneXl5JywgJ2FhYScsICdiYmInXSwgcmVhZGZpbGUoJ1h3YWFmaWxlJykpCgogICIgQXV0b2NtZCBkZWxldGluZyBsaW5lcyBmcm9tIHRoZSBmaWxlIHdoZW4gd3JpdGluZyB0aGUgd2hvbGUgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlIFh3YWFmaWxlIDEsMmQKICBhdWdyb3VwIEVORAogICVkCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCiAgdwogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnY2NjJywgJ2RkZCddLCByZWFkZmlsZSgnWHdhYWZpbGUnKSkKCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICBhdWdyb3VwIEVORAogIGF1Z3JvdXAhIFdyaXRlVGVzdDIKCiAgY2xvc2UhCiAgY2FsbCBkZWxldGUoJ1h3YWFmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgcmVhZG9ubHkgZmlsZQpmdW5jIFRlc3Rfd3JpdGVfcmVhZG9ubHkoKQogIGNhbGwgd3JpdGVmaWxlKFtdLCAnWHdyb2ZpbGUnKQogIGNhbGwgc2V0ZnBlcm0oJ1h3cm9maWxlJywgInItLS0tLS0tLSIpCiAgZWRpdCBYd3JvZmlsZQogIHNldCBub3JlYWRvbmx5IGJhY2t1cHNraXA9CiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlJywgJ0U1MDU6JykKICBsZXQgc2F2ZV9jcG8gPSAmY3BvCiAgc2V0IGNwbys9VwogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZSEnLCAnRTUwNDonKQogIGxldCAmY3BvID0gc2F2ZV9jcG8KICBjYWxsIHNldGxpbmUoMSwgWydsaW5lMSddKQogIHdyaXRlIQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnbGluZTEnXSwgcmVhZGZpbGUoJ1h3cm9maWxlJykpCgogICIgQXV0by1zYXZpbmcgYSByZWFkb25seSBmaWxlIHNob3VsZCBmYWlsIHdpdGggJ2F1dG93cml0ZWFsbCcKICAlYnchCiAgZSBYd3JvZmlsZQogIHNldCBub3JlYWRvbmx5IGF1dG93cml0ZWFsbAogIGNhbGwgc2V0bGluZSgxLCBbJ2FhYWEnXSkKICBjYWxsIGFzc2VydF9mYWlscygnbicsICdFNTA1OicpCiAgc2V0IGNwbys9VwogIGNhbGwgYXNzZXJ0X2ZhaWxzKCduJywgJ0U1MDQ6JykKICBzZXQgY3BvLT1XCiAgc2V0IGF1dG93cml0ZWFsbCYKCiAgc2V0IGJhY2t1cHNraXAmCiAgY2FsbCBkZWxldGUoJ1h3cm9maWxlJykKICAlYnchCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJ3BhdGNobW9kZScKZnVuYyBUZXN0X3BhdGNobW9kZSgpCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1hwYWZpbGUnKQogIHNldCBwYXRjaG1vZGU9Lm9yaWcgbm9iYWNrdXAgYmFja3Vwc2tpcD0gd3JpdGViYWNrdXAKICBuZXcgWHBhZmlsZQogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICAiIGZpcnN0IHdyaXRlIHNob3VsZCBjcmVhdGUgdGhlIC5vcmlnIGZpbGUKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnb25lJ10sIHJlYWRmaWxlKCdYcGFmaWxlLm9yaWcnKSkKICBjYWxsIHNldGxpbmUoMSwgJ3RocmVlJykKICAiIHN1YnNlcXVlbnQgd3JpdGVzIHNob3VsZCBub3QgY3JlYXRlL21vZGlmeSB0aGUgLm9yaWcgZmlsZQogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydvbmUnXSwgcmVhZGZpbGUoJ1hwYWZpbGUub3JpZycpKQoKICAiIHVzZSAncGF0Y2htb2RlJyB3aXRoICdub2JhY2t1cCcgYW5kICdub3dyaXRlYmFja3VwJyB0byBjcmVhdGUgYW4gZW1wdHkKICAiIG9yaWdpbmFsIGZpbGUKICBjYWxsIGRlbGV0ZSgnWHBhZmlsZScpCiAgY2FsbCBkZWxldGUoJ1hwYWZpbGUub3JpZycpCiAgJWJ3IQogIHNldCBwYXRjaG1vZGU9Lm9yaWcgbm9iYWNrdXAgbm93cml0ZWJhY2t1cAogIGVkaXQgWHBhZmlsZQogIGNhbGwgc2V0bGluZSgxLCBbJ3h4eCddKQogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyd4eHgnXSwgcmVhZGZpbGUoJ1hwYWZpbGUnKSkKICBjYWxsIGFzc2VydF9lcXVhbChbXSwgcmVhZGZpbGUoJ1hwYWZpbGUub3JpZycpKQoKICBzZXQgcGF0Y2htb2RlJiBiYWNrdXAmIGJhY2t1cHNraXAmIHdyaXRlYmFja3VwJgogIGNhbGwgZGVsZXRlKCdYcGFmaWxlJykKICBjYWxsIGRlbGV0ZSgnWHBhZmlsZS5vcmlnJykKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgZmlsZSBpbiBhIHJlYWRvbmx5IGRpcmVjdG9yeQoiIE5PVEU6IGlmIHlvdSBydW4gdGVzdHMgYXMgcm9vdCB0aGlzIHdpbGwgZmFpbC4gIERvbid0IHJ1biB0ZXN0cyBhcyByb290IQpmdW5jIFRlc3Rfd3JpdGVfcmVhZG9ubHlfZGlyKCkKICAiIE9uIE1TLVdpbmRvd3MsIG1vZGlmeWluZyBmaWxlcyBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnkgaXMgYWxsb3dlZC4KICBDaGVja1VuaXgKICAiIFJvb3QgY2FuIGRvIGl0IHRvby4KICBDaGVja05vdFJvb3QKCiAgY2FsbCBta2RpcignWHJvZGlyLycpCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1hyb2Rpci9YZmlsZTEnKQogIGNhbGwgc2V0ZnBlcm0oJ1hyb2RpcicsICdyLXhyLS1yLS0nKQogICIgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlIGluIHRoZSBkaXJlY3RvcnkKICBuZXcgWHJvZGlyL1hmaWxlMgogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTIxMjonKQogICIgdHJ5IHRvIGNyZWF0ZSBhIGJhY2t1cCBmaWxlIGluIHRoZSBkaXJlY3RvcnkKICBlZGl0ISBYcm9kaXIvWGZpbGUxCiAgc2V0IGJhY2t1cGRpcj0uL1hyb2RpciBiYWNrdXBza2lwPQogIHNldCBwYXRjaG1vZGU9Lm9yaWcKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwOTonKQogIGNhbGwgc2V0ZnBlcm0oJ1hyb2RpcicsICdyd3hyLS1yLS0nKQogIGNhbGwgZGVsZXRlKCdYcm9kaXInLCAncmYnKQogIHNldCBiYWNrdXBkaXImIGJhY2t1cHNraXAmIHBhdGNobW9kZSYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgZmlsZSB1c2luZyBpbnZhbGlkIGZpbGUgZW5jb2RpbmcKZnVuYyBUZXN0X3dyaXRlX2ludmFsaWRfZW5jb2RpbmcoKQogIG5ldwogIGNhbGwgc2V0bGluZSgxLCAnYWJjJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUgKytlbmM9YXhieWMgWGllZmlsZScsICdFMjEzOicpCiAgY2xvc2UhCmVuZGZ1bmMKCiIgVGVzdHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgd2l0aCBjb252ZXJzaW9uIGZvciBXaW4zMi4KZnVuYyBUZXN0X3dyaXRlX2ZpbGVfZW5jb2RpbmcoKQogIENoZWNrTVNXaW5kb3dzCiAgbGV0IHNhdmVfZW5jb2RpbmcgPSAmZW5jb2RpbmcKICBsZXQgc2F2ZV9maWxlZW5jb2RpbmdzID0gJmZpbGVlbmNvZGluZ3MKICBzZXQgZW5jb2Rpbmc9bGF0aW4xIGZpbGVlbmNvZGluZ3MmCiAgbGV0IHRleHQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgd3JpdGVmaWxlKHRleHQsICdYd2ZlZmlsZScpCiAgZWRpdCBYd2ZlZmlsZQoKICAiIHdyaXRlIHRlc3RzOgogICIgY29tYmluZSB0aHJlZSB2YWx1ZXMgZm9yICdlbmNvZGluZycgd2l0aCB0aHJlZSB2YWx1ZXMgZm9yICdmaWxlZW5jb2RpbmcnCiAgIiBhbHNvIHdyaXRlIGZpbGVzIGZvciByZWFkIHRlc3RzCiAgY2FsbCBjdXJzb3IoMSwgMSkKICBzZXQgZW5jb2Rpbmc9dXRmLTgKICAudyEgKytlbmM9dXRmLTggWHdmZXRlc3QKICAudyArK2VuYz1jcDEyNTEgPj4gWHdmZXRlc3QKICAudyArK2VuYz1jcDg2NiA+PiBYd2ZldGVzdAogIC53ISArK2VuYz11dGYtOCBYdXRmOAogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h3ZmV0ZXN0JykpCgogIGNhbGwgY3Vyc29yKDIsIDEpCiAgc2V0IGVuY29kaW5nPWNwMTI1MQogIC53ISArK2VuYz11dGYtOCBYd2ZldGVzdAogIC53ICsrZW5jPWNwMTI1MSA+PiBYd2ZldGVzdAogIC53ICsrZW5jPWNwODY2ID4+IFh3ZmV0ZXN0CiAgLnchICsrZW5jPWNwMTI1MSBYY3AxMjUxCiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMiBjcDEyNTEgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHdmZXRlc3QnKSkKCiAgY2FsbCBjdXJzb3IoMywgMSkKICBzZXQgZW5jb2Rpbmc9Y3A4NjYKICAudyEgKytlbmM9dXRmLTggWHdmZXRlc3QKICAudyArK2VuYz1jcDEyNTEgPj4gWHdmZXRlc3QKICAudyArK2VuYz1jcDg2NiA+PiBYd2ZldGVzdAogIC53ISArK2VuYz1jcDg2NiBYY3A4NjYKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAzIGNwODY2IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYd2ZldGVzdCcpKQoKICAiIHJlYWQgdGhyZWUgJ2ZpbGVlbmNvZGluZydzIHdpdGggdXRmLTggJ2VuY29kaW5nJwogIHNldCBlbmNvZGluZz11dGYtOCBmZW5jcz11dGYtOCxjcDEyNTEKICBlIFh1dGY4CiAgLnchICsrZW5jPXV0Zi04IFh3ZmV0ZXN0CiAgZSBYY3AxMjUxCiAgLncgKytlbmM9dXRmLTggPj4gWHdmZXRlc3QKICBzZXQgZmVuY3M9dXRmLTgsY3A4NjYKICBlIFhjcDg2NgogIC53ICsrZW5jPXV0Zi04ID4+IFh3ZmV0ZXN0CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h3ZmV0ZXN0JykpCgogICIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCBjcDEyNTEgJ2VuY29kaW5nJwogIHNldCBlbmNvZGluZz11dGYtOCBmZW5jcz11dGYtOCxjcDEyNTEKICBlIFh1dGY4CiAgLnchICsrZW5jPWNwMTI1MSBYd2ZldGVzdAogIGUgWGNwMTI1MQogIC53ICsrZW5jPWNwMTI1MSA+PiBYd2ZldGVzdAogIHNldCBmZW5jcz11dGYtOCxjcDg2NgogIGUgWGNwODY2CiAgLncgKytlbmM9Y3AxMjUxID4+IFh3ZmV0ZXN0CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h3ZmV0ZXN0JykpCgogICIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCBjcDg2NiAnZW5jb2RpbmcnCiAgc2V0IGVuY29kaW5nPWNwODY2IGZlbmNzPXV0Zi04LGNwMTI1MQogIGUgWHV0ZjgKICAudyEgKytlbmM9Y3A4NjYgWHdmZXRlc3QKICBlIFhjcDEyNTEKICAudyArK2VuYz1jcDg2NiA+PiBYd2ZldGVzdAogIHNldCBmZW5jcz11dGYtOCxjcDg2NgogIGUgWGNwODY2CiAgLncgKytlbmM9Y3A4NjYgPj4gWHdmZXRlc3QKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHdmZXRlc3QnKSkKCiAgY2FsbCBkZWxldGUoJ1h3ZmVmaWxlJykKICBjYWxsIGRlbGV0ZSgnWHdmZXRlc3QnKQogIGNhbGwgZGVsZXRlKCdYdXRmOCcpCiAgY2FsbCBkZWxldGUoJ1hjcDEyNTEnKQogIGNhbGwgZGVsZXRlKCdYY3A4NjYnKQogIGxldCAmZW5jb2RpbmcgPSBzYXZlX2VuY29kaW5nCiAgbGV0ICZmaWxlZW5jb2RpbmdzID0gc2F2ZV9maWxlZW5jb2RpbmdzCiAgJWJ3IQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgYSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBCT00uCiIgQnl0ZSBPcmRlciBNYXJrIChCT00pIGNoYXJhY3RlciBmb3IgdmFyaW91cyBlbmNvZGluZ3MgaXMgYmVsb3c6CiIgICAgIFVURi04ICAgICAgOiBFRiBCQiBCRgoiICAgICBVVEYtMTYgKEJFKTogRkUgRkYKIiAgICAgVVRGLTE2IChMRSk6IEZGIEZFCiIgICAgIFVURi0zMiAoQkUpOiAwMCAwMCBGRSBGRgoiICAgICBVVEYtMzIgKExFKTogRkYgRkUgMDAgMDAKZnVuYyBUZXN0X3JlYWR3cml0ZV9maWxlX3dpdGhfYm9tKCkKICBsZXQgdXRmOF9ib20gPSAiXHhFRlx4QkJceEJGIgogIGxldCB1dGYxNmJlX2JvbSA9ICJceEZFXHhGRiIKICBsZXQgdXRmMTZsZV9ib20gPSAiXHhGRlx4RkUiCiAgbGV0IHV0ZjMyYmVfYm9tID0gIlxuXG5ceEZFXHhGRiIKICBsZXQgdXRmMzJsZV9ib20gPSAiXHhGRlx4RkVcblxuIgogIGxldCBzYXZlX2ZpbGVlbmNvZGluZyA9ICZmaWxlZW5jb2RpbmcKICBzZXQgY3BvcHRpb25zKz1TCgogICIgQ2hlY2sgdGhhdCBlZGl0aW5nIGEgbGF0aW4xIGZpbGUgZG9lc24ndCBzZWUgYSBCT00KICBjYWxsIHdyaXRlZmlsZShbIlx4RkVceEZFbGF0aW4tMSJdLCAnWHJ3dGVzdDEnKQogIGVkaXQgWHJ3dGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgnbGF0aW4xJywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgwLCAmYm9tYikKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsiXHhGRVx4RkVsYXRpbi0xIiwgJyddLCByZWFkZmlsZSgnWHJ3ZmlsZTInLCAnYicpKQogIHNldCBib21iIGZlbmM9bGF0aW4xCiAgd3JpdGUgWHJ3dGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbIlx4RkVceEZFbGF0aW4tMSIsICcnXSwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKICBzZXQgYm9tYiYKCiAgIiBDaGVjayB1dGYtOCBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjhfYm9tIC4uICJ1dGYtOCJdLCAnWHJ3dGVzdDEnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi04JywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndXRmLTgnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsndXRmLTgnLCAnJ10sIHJlYWRmaWxlKCdYcndmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dXRmLTgKICB3ISBYcnd0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGY4X2JvbSAuLiAidXRmLTgiLCAnJ10sIHJlYWRmaWxlKCdYcnd0ZXN0MycsICdiJykpCgogICIgQ2hlY2sgdXRmLTggd2l0aCBhbiBlcnJvciAod2lsbCBmYWxsIGJhY2sgdG8gbGF0aW4tMSkKICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjhfYm9tIC4uICJ1dGYtOFx4ODBlcnIiXSwgJ1hyd3Rlc3QxJykKICBlZGl0ISBYcnd0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdsYXRpbjEnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDAsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJceEMzXHhBRlx4QzJceEJCXHhDMlx4QkZ1dGYtOFx4QzJceDgwZXJyIiwgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWHJ3ZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmOF9ib20gLi4gInV0Zi04XHg4MGVyciIsICcnXSwgcmVhZGZpbGUoJ1hyd2ZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11dGYtOAogIHchIFhyd3Rlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJceEMzXHhBRlx4QzJceEJCXHhDMlx4QkZ1dGYtOFx4QzJceDgwZXJyIiwgJyddLAogICAgICAgIFwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtMiBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjE2YmVfYm9tIC4uICJcbnVcbmNcbnNcbi1cbjJcbiJdLCAnWHJ3dGVzdDEnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi0xNicsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy0yJywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWHJ3ZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbInVjcy0yIiwgJyddLCByZWFkZmlsZSgnWHJ3ZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXVjcy0yCiAgdyEgWHJ3dGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMTZiZV9ib20gLi4gIlxudVxuY1xuc1xuLVxuMlxuIiwgJyddLAogICAgICAgIFwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtMmxlIEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMTZsZV9ib20gLi4gInVcbmNcbnNcbi1cbjJcbmxcbmVcbiJdLCAnWHJ3dGVzdDEnKQogICIgTmVlZCB0byBhZGQgYSBOVUwgYnl0ZSBhZnRlciB0aGUgTkwgYnl0ZQogIGNhbGwgd3JpdGVmaWxlKDB6MDAsICdYcnd0ZXN0MScsICdhJykKICBlZGl0ISBYcnd0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1dGYtMTZsZScsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy0ybGUnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTJsZSIsICcnXSwgcmVhZGZpbGUoJ1hyd2ZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11Y3MtMmxlCiAgdyEgWHJ3dGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMTZsZV9ib20gLi4gInVcbmNcbnNcbi1cbjJcbmxcbmVcbiIsICJcbiJdLAogICAgICAgIFwgcmVhZGZpbGUoJ1hyd3Rlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtNCBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjMyYmVfYm9tIC4uICJcblxuXG51XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbiJdLCAnWHJ3dGVzdDEnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00JywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTQnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYcndmaWxlMgogIGNhbGwgYXNzZXJ0X2VxdWFsKFsidWNzLTQiLCAnJ10sIHJlYWRmaWxlKCdYcndmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTQKICB3ISBYcnd0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGYzMmJlX2JvbSAuLiAiXG5cblxudVxuXG5cbmNcblxuXG5zXG5cblxuLVxuXG5cbjRcblxuXG4iLCAnJ10sIHJlYWRmaWxlKCdYcnd0ZXN0MycsICdiJykpCgogICIgQ2hlY2sgdWNzLTRsZSBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjMybGVfYm9tIC4uICJ1XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbmxcblxuXG5lXG5cblxuIl0sICdYcnd0ZXN0MScpCiAgIiBOZWVkIHRvIGFkZCB0aHJlZSBOVUwgYnl0ZXMgYWZ0ZXIgdGhlIE5MIGJ5dGUKICBjYWxsIHdyaXRlZmlsZSgwejAwMDAwMCwgJ1hyd3Rlc3QxJywgJ2EnKQogIGVkaXQhIFhyd3Rlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00bGUnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtNGxlJywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWHJ3ZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbInVjcy00bGUiLCAnJ10sIHJlYWRmaWxlKCdYcndmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTRsZQogIHchIFhyd3Rlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjMybGVfYm9tIC4uICJ1XG5cblxuY1xuXG5cbnNcblxuXG4tXG5cblxuNFxuXG5cbmxcblxuXG5lXG5cblxuIiwgIlxuXG5cbiJdLCByZWFkZmlsZSgnWHJ3dGVzdDMnLCAnYicpKQoKICBzZXQgY3BvcHRpb25zLT1TCiAgbGV0ICZmaWxlZW5jb2RpbmcgPSBzYXZlX2ZpbGVlbmNvZGluZwogIGNhbGwgZGVsZXRlKCdYcnd0ZXN0MScpCiAgY2FsbCBkZWxldGUoJ1hyd2ZpbGUyJykKICBjYWxsIGRlbGV0ZSgnWHJ3dGVzdDMnKQogICVidyEKZW5kZnVuYwoKZnVuYyBUZXN0X3JlYWRfd3JpdGVfYmluKCkKICAiIHdyaXRlIGZpbGUgbWlzc2luZyBFT0wKICBjYWxsIHdyaXRlZmlsZShbJ25vZW9sJ10sICJYTm9Fb2xTZXRFb2wiLCAnYlMnKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDB6NkU2RjY1NkY2QywgcmVhZGZpbGUoJ1hOb0VvbFNldEVvbCcsICdCJykpCgogICIgd2hlbiBmaWxlIGlzIHJlYWQgJ2VvbCcgaXMgb2ZmCiAgc2V0IG5vZml4ZW9sCiAgZSEgKytmZj11bml4IFhOb0VvbFNldEVvbAogIGNhbGwgYXNzZXJ0X2VxdWFsKDAsICZlb2wpCgogICIgd3JpdGluZyB3aXRoICdlb2wnIHNldCBhZGRzIHRoZSBuZXdsaW5lCiAgc2V0bG9jYWwgZW9sCiAgdwogIGNhbGwgYXNzZXJ0X2VxdWFsKDB6NkU2RjY1NkY2QzBBLCByZWFkZmlsZSgnWE5vRW9sU2V0RW9sJywgJ0InKSkKCiAgY2FsbCBkZWxldGUoJ1hOb0VvbFNldEVvbCcpCiAgc2V0IGZmJiBmaXhlb2wmCiAgYndpcGUhIFhOb0VvbFNldEVvbAplbmRmdW5jCgoiIFRlc3QgZm9yIHRoZSAnYmFja3VwY29weScgb3B0aW9uIHdoZW4gd3JpdGluZyBmaWxlcwpmdW5jIFRlc3RfYmFja3VwY29weSgpCiAgQ2hlY2tVbml4CiAgc2V0IGJhY2t1cHNraXA9CiAgIiBXaXRoIHRoZSBkZWZhdWx0ICdiYWNrdXBjb3B5JyBzZXR0aW5nLCBzYXZpbmcgYSBzeW1ib2xpYyBsaW5rIGZpbGUKICAiIHNob3VsZCBub3QgYnJlYWsgdGhlIGxpbmsuCiAgc2V0IGJhY2t1cGNvcHkmCiAgY2FsbCB3cml0ZWZpbGUoWycxMTExJ10sICdYYmNmaWxlMScpCiAgc2lsZW50ICFsbiAtcyBYYmNmaWxlMSBYYmNmaWxlMgogIG5ldyBYYmNmaWxlMgogIGNhbGwgc2V0bGluZSgxLCBbJzIyMjInXSkKICB3cml0ZQogIGNsb3NlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWycyMjIyJ10sIHJlYWRmaWxlKCdYYmNmaWxlMScpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdYYmNmaWxlMScsIHJlc29sdmUoJ1hiY2ZpbGUyJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2xpbmsnLCBnZXRmdHlwZSgnWGJjZmlsZTInKSkKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTEnKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlMicpCgogICIgV2l0aCB0aGUgJ2JhY2t1cGNvcHknIHNldCB0byAnYnJlYWtzeW1saW5rJywgc2F2aW5nIGEgc3ltYm9saWMgbGluayBmaWxlCiAgIiBzaG91bGQgYnJlYWsgdGhlIGxpbmsuCiAgc2V0IGJhY2t1cGNvcHk9eWVzLGJyZWFrc3ltbGluawogIGNhbGwgd3JpdGVmaWxlKFsnMTExMSddLCAnWGJjZmlsZTEnKQogIHNpbGVudCAhbG4gLXMgWGJjZmlsZTEgWGJjZmlsZTIKICBuZXcgWGJjZmlsZTIKICBjYWxsIHNldGxpbmUoMSwgWycyMjIyJ10pCiAgd3JpdGUKICBjbG9zZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnMTExMSddLCByZWFkZmlsZSgnWGJjZmlsZTEnKSkKICBjYWxsIGFzc2VydF9lcXVhbChbJzIyMjInXSwgcmVhZGZpbGUoJ1hiY2ZpbGUyJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ1hiY2ZpbGUyJywgcmVzb2x2ZSgnWGJjZmlsZTInKSkKICBjYWxsIGFzc2VydF9lcXVhbCgnZmlsZScsIGdldGZ0eXBlKCdYYmNmaWxlMicpKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlMScpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUyJykKICBzZXQgYmFja3VwY29weSYKCiAgIiBXaXRoIHRoZSBkZWZhdWx0ICdiYWNrdXBjb3B5JyBzZXR0aW5nLCBzYXZpbmcgYSBoYXJkIGxpbmsgZmlsZQogICIgc2hvdWxkIG5vdCBicmVhayB0aGUgbGluay4KICBzZXQgYmFja3VwY29weSYKICBjYWxsIHdyaXRlZmlsZShbJzExMTEnXSwgJ1hiY2ZpbGUxJykKICBzaWxlbnQgIWxuIFhiY2ZpbGUxIFhiY2ZpbGUyCiAgbmV3IFhiY2ZpbGUyCiAgY2FsbCBzZXRsaW5lKDEsIFsnMjIyMiddKQogIHdyaXRlCiAgY2xvc2UKICBjYWxsIGFzc2VydF9lcXVhbChbJzIyMjInXSwgcmVhZGZpbGUoJ1hiY2ZpbGUxJykpCiAgY2FsbCBkZWxldGUoJ1hiY2ZpbGUxJykKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTInKQoKICAiIFdpdGggdGhlICdiYWNrdXBjb3B5JyBzZXQgdG8gJ2JyZWFrc3ltbGluaycsIHNhdmluZyBhIGhhcmQgbGluayBmaWxlCiAgIiBzaG91bGQgYnJlYWsgdGhlIGxpbmsuCiAgc2V0IGJhY2t1cGNvcHk9eWVzLGJyZWFraGFyZGxpbmsKICBjYWxsIHdyaXRlZmlsZShbJzExMTEnXSwgJ1hiY2ZpbGUxJykKICBzaWxlbnQgIWxuIFhiY2ZpbGUxIFhiY2ZpbGUyCiAgbmV3IFhiY2ZpbGUyCiAgY2FsbCBzZXRsaW5lKDEsIFsnMjIyMiddKQogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWycxMTExJ10sIHJlYWRmaWxlKCdYYmNmaWxlMScpKQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnMjIyMiddLCByZWFkZmlsZSgnWGJjZmlsZTInKSkKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZTEnKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlMicpCgogICIgSWYgYSBiYWNrdXAgZmlsZSBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZW4gYSBzbGlnaHRseSBtb2RpZmllZCBmaWxlbmFtZQogICIgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGJhY2t1cCBmaWxlLiBUcnkgd2l0aCAnYmFja3VwY29weScgc2V0IHRvICd5ZXMnIGFuZAogICIgJ25vJy4KICAlYncKICBjYWxsIHdyaXRlZmlsZShbJ2FhYWEnXSwgJ1hiY2ZpbGUnKQogIGNhbGwgd3JpdGVmaWxlKFsnYmJiYiddLCAnWGJjZmlsZS5iYWsnKQogIHNldCBiYWNrdXBjb3B5PXllcyBiYWNrdXBleHQ9LmJhawogIG5ldyBYYmNmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsnY2NjYyddKQogIHdyaXRlCiAgY2xvc2UKICBjYWxsIGFzc2VydF9lcXVhbChbJ2NjY2MnXSwgcmVhZGZpbGUoJ1hiY2ZpbGUnKSkKICBjYWxsIGFzc2VydF9lcXVhbChbJ2JiYmInXSwgcmVhZGZpbGUoJ1hiY2ZpbGUuYmFrJykpCiAgc2V0IGJhY2t1cGNvcHk9bm8gYmFja3VwZXh0PS5iYWsKICBuZXcgWGJjZmlsZQogIGNhbGwgc2V0bGluZSgxLCBbJ2RkZGQnXSkKICB3cml0ZQogIGNsb3NlCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydkZGRkJ10sIHJlYWRmaWxlKCdYYmNmaWxlJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydiYmJiJ10sIHJlYWRmaWxlKCdYYmNmaWxlLmJhaycpKQogIGNhbGwgZGVsZXRlKCdYYmNmaWxlJykKICBjYWxsIGRlbGV0ZSgnWGJjZmlsZS5iYWsnKQoKICAiIFdyaXRlIHRvIGEgZGV2aWNlIGZpbGUgKGluIFVuaXgtbGlrZSBzeXN0ZW1zKSB3aGljaCBjYW5ub3QgYmUgYmFja2VkIHVwLgogIGlmIGhhcygndW5peCcpCiAgICBzZXQgd3JpdGViYWNrdXAgYmFja3VwY29weT15ZXMgbm9iYWNrdXAKICAgIG5ldwogICAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhYSddKQogICAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlISAvZGV2L251bGwnKQogICAgY2FsbCBhc3NlcnRfbWF0Y2goJyIvZGV2L251bGwiIFxbRGV2aWNlXScsIG91dHB1dCkKICAgIGNsb3NlCiAgICBzZXQgd3JpdGViYWNrdXAgYmFja3VwY29weT1ubyBub2JhY2t1cAogICAgbmV3CiAgICBjYWxsIHNldGxpbmUoMSwgWydhYWFhJ10pCiAgICBsZXQgb3V0cHV0ID0gZXhlY3V0ZSgnd3JpdGUhIC9kZXYvbnVsbCcpCiAgICBjYWxsIGFzc2VydF9tYXRjaCgnIi9kZXYvbnVsbCIgXFtEZXZpY2VdJywgb3V0cHV0KQogICAgY2xvc2UKICAgIHNldCBiYWNrdXAgd3JpdGViYWNrdXAmIGJhY2t1cGNvcHkmCiAgICBuZXcKICAgIGNhbGwgc2V0bGluZSgxLCBbJ2FhYWEnXSkKICAgIGxldCBvdXRwdXQgPSBleGVjdXRlKCd3cml0ZSEgL2Rldi9udWxsJykKICAgIGNhbGwgYXNzZXJ0X21hdGNoKCciL2Rldi9udWxsIiBcW0RldmljZV0nLCBvdXRwdXQpCiAgICBjbG9zZQogIGVuZGlmCgogIHNldCBiYWNrdXBjb3B5JiBiYWNrdXBza2lwJiBiYWNrdXBleHQmIGJhY2t1cCYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgZmlsZSB3aXRoICdlbmNvZGluZycgc2V0IHRvICd1dGYtMTYnCmZ1bmMgVGVzdF93cml0ZV91dGYxNigpCiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsiXFUwMDAxMDAwMSJdKQogIHdyaXRlICsrZW5jPXV0Zi0xNiBYdzE2ZmlsZQogIGJ3IQogIGNhbGwgYXNzZXJ0X2VxdWFsKDB6RDgwMERDMDEsIHJlYWRmaWxlKCdYdzE2ZmlsZScsICdCJylbMDozXSkKICBjYWxsIGRlbGV0ZSgnWHcxNmZpbGUnKQplbmRmdW5jCgoiIFRlc3QgZm9yIHRyeWluZyB0byBzYXZlIGEgYmFja3VwIGZpbGUgd2hlbiB0aGUgYmFja3VwIGZpbGUgaXMgYSBzeW1ib2xpYwoiIGxpbmsgdG8gdGhlIG9yaWdpbmFsIGZpbGUuIFRoZSBiYWNrdXAgZmlsZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgpmdW5jIFRlc3Rfd3JpdGVfYmFja3VwX3N5bWxpbmsoKQogIENoZWNrVW5peAogIGNhbGwgbWtkaXIoJ1hiYWNrdXAnKQogIGxldCBzYXZlX2JhY2t1cGRpciA9ICZiYWNrdXBkaXIKICBzZXQgYmFja3VwZGlyPS4sLi9YYmFja3VwCiAgY2FsbCB3cml0ZWZpbGUoWycxMTExJ10sICdYd2JzZmlsZScpCiAgc2lsZW50ICFsbiAtcyBYd2JzZmlsZSBYd2JzZmlsZS5iYWsKCiAgbmV3IFh3YnNmaWxlCiAgc2V0IGJhY2t1cCBiYWNrdXBjb3B5PXllcyBiYWNrdXBleHQ9LmJhawogIHdyaXRlCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ2xpbmsnLCBnZXRmdHlwZSgnWHdic2ZpbGUuYmFrJykpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ1h3YnNmaWxlJywgcmVzb2x2ZSgnWHdic2ZpbGUuYmFrJykpCiAgIiBiYWNrdXAgZmlsZSBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgJ2JhY2t1cCcgZGlyZWN0b3J5CiAgaWYgIWhhcygnYnNkJykKICAgICIgVGhpcyBjaGVjayBmYWlscyBvbiBGcmVlQlNECiAgICBjYWxsIGFzc2VydF90cnVlKGZpbGVyZWFkYWJsZSgnLi9YYmFja3VwL1h3YnNmaWxlLmJhaycpKQogIGVuZGlmCiAgc2V0IGJhY2t1cCYgYmFja3VwY29weSYgYmFja3VwZXh0JgogICVidwoKICBjYWxsIGRlbGV0ZSgnWHdic2ZpbGUnKQogIGNhbGwgZGVsZXRlKCdYd2JzZmlsZS5iYWsnKQogIGNhbGwgZGVsZXRlKCdYYmFja3VwJywgJ3JmJykKICBsZXQgJmJhY2t1cGRpciA9IHNhdmVfYmFja3VwZGlyCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJzp3cml0ZSArK2JpbicgYW5kICc6d3JpdGUgKytub2JpbicKZnVuYyBUZXN0X3dyaXRlX2JpbmFyeV9maWxlKCkKICAiIGNyZWF0ZSBhIGZpbGUgd2l0aG91dCBhbiBlb2wvZW9mIGNoYXJhY3RlcgogIGNhbGwgd3JpdGVmaWxlKDB6NjE2MTYxLCAnWHdiZmlsZTEnLCAnYicpCiAgbmV3IFh3YmZpbGUxCiAgd3JpdGUgKytiaW4gWHdiZmlsZTIKICB3cml0ZSArK25vYmluIFh3YmZpbGUzCiAgY2FsbCBhc3NlcnRfZXF1YWwoMHo2MTYxNjEsIHJlYWRibG9iKCdYd2JmaWxlMicpKQogIGlmIGhhcygnd2luMzInKQogICAgY2FsbCBhc3NlcnRfZXF1YWwoMHo2MTYxNjEwRC4wQSwgcmVhZGJsb2IoJ1h3YmZpbGUzJykpCiAgZWxzZQogICAgY2FsbCBhc3NlcnRfZXF1YWwoMHo2MTYxNjEwQSwgcmVhZGJsb2IoJ1h3YmZpbGUzJykpCiAgZW5kaWYKICBjYWxsIGRlbGV0ZSgnWHdiZmlsZTEnKQogIGNhbGwgZGVsZXRlKCdYd2JmaWxlMicpCiAgY2FsbCBkZWxldGUoJ1h3YmZpbGUzJykKZW5kZnVuYwoKZnVuYyBEb1dyaXRlRGVmZXIoKQogIGNhbGwgd3JpdGVmaWxlKFsnc29tZSB0ZXh0J10sICdYZGVmZXJEZWxldGUnLCAnRCcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydzb21lIHRleHQnXSwgcmVhZGZpbGUoJ1hkZWZlckRlbGV0ZScpKQplbmRmdW5jCgpkZWYgRGVmV3JpdGVEZWZlcigpCiAgd3JpdGVmaWxlKFsnc29tZSB0ZXh0J10sICdYZGVmZGVmZXJEZWxldGUnLCAnRCcpCiAgYXNzZXJ0X2VxdWFsKFsnc29tZSB0ZXh0J10sIHJlYWRmaWxlKCdYZGVmZGVmZXJEZWxldGUnKSkKZW5kZGVmCgpmdW5jIFRlc3Rfd3JpdGVfd2l0aF9kZWZlcnJlZF9kZWxldGUoKQogIGNhbGwgRG9Xcml0ZURlZmVyKCkKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWGRlZmVyRGVsZXRlJykpCiAgY2FsbCBEZWZXcml0ZURlZmVyKCkKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWGRlZmRlZmVyRGVsZXRlJykpCmVuZGZ1bmMKCmZ1bmMgRG9Xcml0ZUZpbGUoKQogIGNhbGwgd3JpdGVmaWxlKFsndGV4dCddLCAnWHRoZWZpbGUnLCAnRCcpCiAgY2QgLi4KZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlX2RlZmVyX2RlbGV0ZV9jaGRpcigpCiAgbGV0IGRpciA9IGdldGN3ZCgpCiAgY2FsbCBEb1dyaXRlRmlsZSgpCiAgY2FsbCBhc3NlcnRfbm90ZXF1YWwoZGlyLCBnZXRjd2QoKSkKICBjYWxsIGNoZGlyKGRpcikKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2xvYignWHRoZWZpbGUnKSkKZW5kZnVuYwoKIiBDaGVjayB0aGF0IGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZSB0cmlnZ2VyaW5nIFF1aXRQcmUKZnVuYyBUZXN0X3dxX3F1aXRwcmVfYXV0b2NvbW1hbmQoKQogIGVkaXQgWHNvbWVmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICdoZWxsbycpCiAgc3BsaXQKICBsZXQgZzpzZXEgPSBbXQogIGF1Z3JvdXAgVGVzdGluZwogICAgYXUgUXVpdFByZSAqIGNhbGwgYWRkKGc6c2VxLCAnUXVpdFByZSAtICcgLi4gKCZtb2RpZmllZCA/ICdtb2RpZmllZCcgOiAnbm90IG1vZGlmaWVkJykpCiAgICBhdSBCdWZXcml0ZVBvc3QgKiBjYWxsIGFkZChnOnNlcSwgJ3dyaXR0ZW4nKQogIGF1Z3JvdXAgRU5ECiAgd3EKICBjYWxsIGFzc2VydF9lcXVhbChbJ3dyaXR0ZW4nLCAnUXVpdFByZSAtIG5vdCBtb2RpZmllZCddLCBnOnNlcSkKCiAgYXVncm91cCBUZXN0aW5nCiAgICBhdSEKICBhdWdyb3VwIEVORAogIGJ3aXBlIQogIHVubGV0IGc6c2VxCiAgY2FsbCBkZWxldGUoJ1hzb21lZmlsZScpCmVuZGZ1bmMKCiIgdmltOiBzaGlmdHdpZHRoPTIgc3RzPTIgZXhwYW5kdGFiCg==