A/MNCjBc/FVjAAAAAAAAAAADAAAAQAAAAHMjAQAAZAAAZAEAbAAAWgAAZAAAZAEAbAEAWgEAZAAAZAEAbAIAWgIAZAAAZAEAbAMAWgMAZAAAZAEAbAQAWgQAZAAAZAEAbAUAWgUAZAAAZAIAbAYAbQcAWgcAAWQAAGQDAGwIAG0JAFoJAAFkBABlAwBqCgBmAQBkBQCEAACDAABZWgsAZAYAZQwAZgEAZAcAhAAAgwAAWVoNAGQIAIQAAFoOAGQJAIQAAFoPAGQKAIQAAFoQAGQLAIQAAFoRAGUAAGoSAGQMAIMBAFoTAGQNAGUTAGoUAARVZA4AhAAAWhUAZA8AhAAAWhYAZBAAZQMAagoAZgEAZBEAhAAAgwAAWVoXAGQSAIQAAFoYAGUZAGQTAGsCAHIfAWUYAIMAAAFuAABkAQBTKBQAAABp/////04oAQAAAHQMAAAAdGVzdF9zdXBwb3J0KAEAAAB0CgAAAF9GYWtlSW5wdXR0CwAAAFBkYlRlc3RDYXNlYwAAAAAAAAAAAQAAAEIAAABzGgAAAGUAAFoBAGQAAIQAAFoCAGQBAIQAAFoDAFJTKAIAAABjAwAAAAkAAAAJAAAAQwAAAHPJAAAAZAEAfQMAdAAAfAMAZAIAgwIAjx0AfQQAfAQAagEAdAIAagMAfAEAgwEAgwEAAVdkAwBRWHwAAGoEAHQFAGoGAHwDAIMCAAF0BwBqCABkBABkBQB8AwBnBAB9BQBkAwAEfQYAfQcAdAoAagsAfAUAZAYAdAoAagwAZAcAdAoAagwAZAgAdAoAag0AgwEDfQgAfAgAag4AfAIAgwEAXAIAfQYAfQcAfAgAag8AahAAgwAAAXwIAGoRAGoQAIMAAAF8BgB8BwBmAgBTKAkAAABzMwAAAFJ1biAnc2NyaXB0JyBsaW5lcyB3aXRoIHBkYiBhbmQgdGhlIHBkYiAnY29tbWFuZHMnLnMHAAAAbWFpbi5weXQBAAAAd05zAgAAAC1tdAMAAABwZGJ0BgAAAHN0ZG91dHQFAAAAc3RkaW50BgAAAHN0ZGVycigSAAAAdAQAAABvcGVudAUAAAB3cml0ZXQIAAAAdGV4dHdyYXB0BgAAAGRlZGVudHQKAAAAYWRkQ2xlYW51cFIAAAAAdAYAAAB1bmxpbmt0AwAAAHN5c3QKAAAAZXhlY3V0YWJsZXQEAAAATm9uZXQKAAAAc3VicHJvY2Vzc3QFAAAAUG9wZW50BAAAAFBJUEV0BgAAAFNURE9VVHQLAAAAY29tbXVuaWNhdGVSBQAAAHQFAAAAY2xvc2VSBgAAACgJAAAAdAQAAABzZWxmdAYAAABzY3JpcHR0CAAAAGNvbW1hbmRzdAgAAABmaWxlbmFtZXQBAAAAZnQDAAAAY21kUgUAAABSBwAAAHQEAAAAcHJvYygAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BkYi5weXQHAAAAcnVuX3BkYhIAAABzGgAAAAACBgESARwBEwEVAQoBFQEJAQwCFQENAQ0BYwEAAAAHAAAABwAAAEMAAABzlQAAAGQBAH0BAGQCAH0CAGQDAH0DAHQAAGQEAGQFAIMCAI8dAH0EAHwEAGoBAHQCAGoDAHwDAIMBAIMBAAFXZAAAUVh8AABqBAB0BQBqBgBkBACDAgABfAAAagcAfAEAfAIAgwIAXAIAfQUAfQYAfAAAaggAdAkAZAYAhAAAfAUAagoAgwAARIMBAIMBAGQHAIMCAAFkAABTKAgAAABOc+MAAAAKICAgICAgICAgICAgZnJvbSBiYXIgaW1wb3J0IGJhcgoKICAgICAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICAgICAgYmFyKCkKCiAgICAgICAgICAgIGRlZiBub3BlKCk6CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgICAgICBkZWYgZm9vYmFyKCk6CiAgICAgICAgICAgICAgICBmb28oKQogICAgICAgICAgICAgICAgbm9wZSgpCgogICAgICAgICAgICBmb29iYXIoKQogICAgICAgIHOHAAAACiAgICAgICAgICAgIGZyb20gYmFyIGltcG9ydCBiYXIKICAgICAgICAgICAgYnJlYWsgYmFyCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgc3RlcAogICAgICAgICAgICBxdWl0CiAgICAgICAgczUAAAAKICAgICAgICAgICAgZGVmIGJhcigpOgogICAgICAg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ICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoKS5zZXRfdHJhY2UoKQogICAgLi4uICAgICBwcmludCgxKQogICAgLi4uICAgICBwcmludCgyKQogICAgLi4uICAgICBwcmludCgzKQogICAgLi4uICAgICBwcmludCg0KQoKICAgIEZpcnN0LCBuZWVkIHRvIGNsZWFyIGJkYiBzdGF0ZSB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIHRlc3RzLgogICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KCiAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCiAgICA+Pj4gQnJlYWtwb2ludC5icGxpc3QgPSB7fQogICAgPj4+IEJyZWFrcG9pbnQuYnBieW51bWJlciA9IFtOb25lXQoKICAgIE5vdyB0ZXN0IHRoZSBicmVha3BvaW50IGNvbW1hbmRzLiAgTk9STUFMSVpFX1dISVRFU1BBQ0UgaXMgbmVlZGVkIGJlY2F1c2UKICAgIHRoZSBicmVha3BvaW50IGxpc3Qgb3V0cHV0cyBhIHRhYiBmb3IgdGhlICJzdG9wIG9ubHkiIGFuZCAiaWdub3JlIG5leHQiCiAgICBsaW5lcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gaGVyZS4KCiAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWyAgIyBkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKICAgIC4uLiAgICAgJ2JyZWFrIDMnLAogICAgLi4uICAgICAnZGlzYWJsZSAxJywKICAgIC4uLiAgICAgJ2lnbm9yZSAxIDEwJywKICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxIDEgPCAyJywKICAgIC4uLiAgICAgJ2JyZWFrIDQnLAogICAgLi4uICAgICAnYnJlYWsgNCcsCiAgICAuLi4gICAgICdicmVhaycsCiAgICAuLi4gICAgICdjbGVhciAzJywKICAgIC4uLiAgICAgJ2JyZWFrJywKICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxJywKICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKICAgIC4uLiAgICAgJ2NsZWFyIDEnLAogICAgLi4uICAgICAnY29tbWFuZHMgMicsCiAgICAuLi4gICAgICdwcmludCA0MicsCiAgICAuLi4gICAgICdlbmQnLAogICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgYnJlYWtwb2ludCAyIChsaW5lIDQpCiAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKICAgIC4uLiAgICAgJ3knLAogICAgLi4uICAgICAndGJyZWFrIDUnLAogICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgdGVtcG9yYXJ5IGJyZWFrcG9pbnQKICAgIC4uLiAgICAgJ2JyZWFrJywgICAgICMgbWFrZSBzdXJlIGJyZWFrcG9pbnQgaXMgZ29uZQogICAgLi4uICAgICAnY29udGludWUnLAogICAgLi4uIF0pOgogICAgLi4uICAgIHRlc3RfZnVuY3Rpb24oKQogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDMpdGVzdF9mdW5jdGlvbigpCiAgICAtPiBwcmludCgxKQogICAgKFBkYikgYnJlYWsgMwogICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwogICAgKFBkYikgZGlzYWJsZSAxCiAgICAoUGRiKSBpZ25vcmUgMSAxMAogICAgV2lsbCBpZ25vcmUgbmV4dCAxMCBjcm9zc2luZ3Mgb2YgYnJlYWtwb2ludCAxLgogICAgKFBkYikgY29uZGl0aW9uIDEgMSA8IDIKICAgIChQZGIpIGJyZWFrIDQKICAgIEJyZWFrcG9pbnQgMiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgIChQZGIpIGJyZWFrIDQKICAgIEJyZWFrcG9pbnQgMyBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgIChQZGIpIGJyZWFrCiAgICBOdW0gVHlwZSAgICAgICAgIERpc3AgRW5iICAgV2hlcmUKICAgIDEgICBicmVha3BvaW50ICAga2VlcCBubyAgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKICAgICAgICAgICAgc3RvcCBvbmx5IGlmIDEgPCAyCiAgICAgICAgICAgIGlnbm9yZSBuZXh0IDEwIGhpdHMKICAgIDIgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgIDMgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgIChQZGIpIGNsZWFyIDMKICAgIERlbGV0ZWQgYnJlYWtwb2ludCAzCiAgICAoUGRiKSBicmVhawogICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCiAgICAxICAgYnJlYWtwb2ludCAgIGtlZXAgbm8gICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCiAgICAgICAgICAgIHN0b3Agb25seSBpZiAxIDwgMgogICAgICAgICAgICBpZ25vcmUgbmV4dCAxMCBoaXRzCiAgICAyICAgYnJlYWtwb2ludCAgIGtlZXAgeWVzICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CiAgICAoUGRiKSBjb25kaXRpb24gMQogICAgQnJlYWtwb2ludCAxIGlzIG5vdyB1bmNvbmRpdGlvbmFsLgogICAgKFBkYikgZW5hYmxlIDEKICAgIChQZGIpIGNsZWFyIDEKICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxCiAgICAoUGRiKSBjb21tYW5kcyAyCiAgICAoY29tKSBwcmludCA0MgogICAgKGNvbSkgZW5kCiAgICAoUGRiKSBjb250aW51ZQogICAgMQogICAgNDIKICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig0KXRlc3RfZnVuY3Rpb24oKQogICAgLT4gcHJpbnQoMikKICAgIChQZGIpIGNsZWFyCiAgICBDbGVhciBhbGwgYnJlYWtzPyB5CiAgICAoUGRiKSB0YnJlYWsgNQogICAgQnJlYWtwb2ludCA0IGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NQogICAgKFBkYikgY29udGludWUKICAgIDIKICAgIERlbGV0ZWQgYnJlYWtwb2ludCA0CiAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKICAgIC0+IHByaW50KDMpCiAgICAoUGRiKSBicmVhawogICAgKFBkYikgY29udGludWUKICAgIDMKICAgIDQKICAgIE4oAAAAACgAAAAAKAAAAAAoAAAAAHNUAAAAL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9saW51eC14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGRiLnB5dBwAAAB0ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzdQAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHM3AgAAVGhpcyBpbGx1c3RyYXRlcyB0aGUgc2ltcGxlIGNhc2Ugb2YgbW9kdWxlIHNraXBwaW5nLgoKICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKICAgIC4uLiAgICAgaW1wb3J0IHN0cmluZwogICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9WydzdHJpbmcqJ10pLnNldF90cmFjZSgpCiAgICAuLi4gICAgIHN0cmluZy5sb3dlcignRk9PJykKCiAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWwogICAgLi4uICAgICAnc3RlcCcsCiAgICAuLi4gICAgICdjb250aW51ZScsCiAgICAuLi4gXSk6CiAgICAuLi4gICAgIHNraXBfbW9kdWxlKCkKICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNbMF0+KDQpc2tpcF9tb2R1bGUoKQogICAgLT4gc3RyaW5nLmxvd2VyKCdGT08nKQogICAgKFBkYikgc3RlcAogICAgLS1SZXR1cm4tLQogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc1swXT4oNClza2lwX21vZHVsZSgpLT5Ob25lCiAgICAtPiBzdHJpbmcubG93ZXIoJ0ZPTycpCiAgICAoUGRiKSBjb250aW51ZQogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHl0FQAAAHRlc3RfcGRiX3NraXBfbW9kdWxlc9wAAABzAAAAAHQOAAAAbW9kdWxlX3RvX3NraXBzNgAAAGRlZiBmb29fcG9ueShjYWxsYmFjayk6IHggPSAxOyBjYWxsYmFjaygpOyByZXR1cm4gTm9uZWMAAAAAAAAAAAEAAABDAAAAcwQAAABkAQBTKAIAAABzJAUAAFRoaXMgaWxsdXN0cmF0ZXMgc2tpcHBpbmcgb2YgbW9kdWxlcyB0aGF0IGNhbGwgaW50byBvdGhlciBjb2RlLgoKICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKICAgIC4uLiAgICAgZGVmIGNhbGxiYWNrKCk6CiAgICAuLi4gICAgICAgICByZXR1cm4gTm9uZQogICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9Wydtb2R1bGVfdG9fc2tpcConXSkuc2V0X3RyYWNlKCkKICAgIC4uLiAgICAgbW9kLmZvb19wb255KGNhbGxiYWNrKQoKICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCiAgICAuLi4gICAgICdzdGVwJywKICAgIC4uLiAgICAgJ3N0ZXAnLAogICAgLi4uICAgICAnc3RlcCcsCiAgICAuLi4gICAgICdzdGVwJywKICAgIC4uLiAgICAgJ3N0ZXAnLAogICAgLi4uICAgICAnY29udGludWUnLAogICAgLi4uIF0pOgogICAgLi4uICAgICBza2lwX21vZHVsZSgpCiAgICAuLi4gICAgIHBhc3MgICMgcHJvdmlkZXMgc29tZXRoaW5nIHRvICJzdGVwIiB0bwogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCkKICAgIC0+IG1vZC5mb29fcG9ueShjYWxsYmFjaykKICAgIChQZGIpIHN0ZXAKICAgIC0tQ2FsbC0tCiAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2tbMF0+KDIpY2FsbGJhY2soKQogICAgLT4gZGVmIGNhbGxiYWNrKCk6CiAgICAoUGRiKSBzdGVwCiAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2tbMF0+KDMpY2FsbGJhY2soKQogICAgLT4gcmV0dXJuIE5vbmUKICAgIChQZGIpIHN0ZXAKICAgIC0tUmV0dXJuLS0KICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMyljYWxsYmFjaygpLT5Ob25lCiAgICAtPiByZXR1cm4gTm9uZQogICAgKFBkYikgc3RlcAogICAgLS1SZXR1cm4tLQogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCktPk5vbmUKICAgIC0+IG1vZC5mb29fcG9ueShjYWxsYmFjaykKICAgIChQZGIpIHN0ZXAKICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1sxXT4oMTApPG1vZHVsZT4oKQogICAgLT4gcGFzcyAgIyBwcm92aWRlcyBzb21ldGhpbmcgdG8gInN0ZXAiIHRvCiAgICAoUGRiKSBjb250aW51ZQogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHl0IwAAAHRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNr+AAAAHMAAAAAYwAAAAAAAAAAAQAAAEMAAABzBAAAAGQBAFMoAgAAAHPWBQAAVGVzdCB0aGF0ICJjb250aW51ZSIgYW5kICJuZXh0IiB3b3JrIHByb3Blcmx5IGluIGJvdHRvbSBmcmFtZSAoaXNzdWUgIzUyOTQpLgoKICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgogICAgLi4uICAgICBpbXBvcnQgcGRiLCBzeXM7IGluc3QgPSBwZGIuUGRiKCkKICAgIC4uLiAgICAgaW5zdC5zZXRfdHJhY2UoKQogICAgLi4uICAgICBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQogICAgLi4uICAgICBwcmludCgxKQogICAgLi4uICAgICBwcmludCgyKQogICAgLi4uICAgICBwcmludCgzKQogICAgLi4uICAgICBwcmludCg0KQoKICAgIEZpcnN0LCBuZWVkIHRvIGNsZWFyIGJkYiBzdGF0ZSB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIHRlc3RzLgogICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KCiAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCiAgICA+Pj4gQnJlYWtwb2ludC5icGxpc3QgPSB7fQogICAgPj4+IEJyZWFrcG9pbnQuYnBieW51bWJlciA9IFtOb25lXQoKICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCiAgICAuLi4gICAgICduZXh0JywKICAgIC4uLiAgICAgJ2JyZWFrIDcnLAogICAgLi4uICAgICAnY29udGludWUnLAogICAgLi4uICAgICAnbmV4dCcsCiAgICAuLi4gICAgICdjb250aW51ZScsCiAgICAuLi4gICAgICdjb250aW51ZScsCiAgICAuLi4gXSk6CiAgICAuLi4gICAgdGVzdF9mdW5jdGlvbigpCiAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDQpdGVzdF9mdW5jdGlvbigpCiAgICAtPiBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQogICAgKFBkYikgbmV4dAogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig1KXRlc3RfZnVuY3Rpb24oKQogICAgLT4gcHJpbnQoMSkKICAgIChQZGIpIGJyZWFrIDcKICAgIEJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPjo3CiAgICAoUGRiKSBjb250aW51ZQogICAgMQogICAgMgogICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig3KXRlc3RfZnVuY3Rpb24oKQogICAgLT4gcHJpbnQoMykKICAgIChQZGIpIG5leHQKICAgIDMKICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKICAgIC0+IHByaW50KDQpCiAgICAoUGRiKSBjb250aW51ZQogICAgNAogICAgTigAAAAAKAAAAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHl0IAAAAHRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lIwEAAHMAAAAAdBAAAABNb2R1bGVJbml0VGVzdGVyYwAAAAAAAAAAAQAAAEIAAABzEQAAAGUAAFoBAGQAAIQAAFoCAFJTKAEAAABjAQAAAAgAAAAJAAAAQwAAAHOvAAAAZAEAfQEAZAIAfQIAdAAAfAEAZAMAgwIAjxQAfQMAfAMAagEAfAIAgwEAAVdkBABRWHwAAGoCAHQDAGoEAHwBAIMCAAF0BQBqBgBkBQBkBgB8AQBnBAB9BAB0BwBqCAB8BABkBwB0BwBqCQBkCAB0BwBqCQBkCQB0BwBqCgCDAQN9BQB8BQBqCwBkCgCDAQBcAgB9BgB9BwB8AABqDAB8AgB8BgBkCwCDAwABZAQAUygMAAAAc9MAAAAKICAgICAgICBJbiBpc3N1ZSA3NzUwLCBpdCB3YXMgZm91bmQgdGhhdCBpZiB0aGUgZmlsZW5hbWUgaGFzIGEgc2VxdWVuY2UgdGhhdAogICAgICAgIHJlc29sdmVzIHRvIGFuIGVzY2FwZSBjaGFyYWN0ZXIgaW4gYSBQeXRob24gc3RyaW5nIChzdWNoIGFzIAkpLCBpdAogICAgICAgIHdpbGwgYmUgdHJlYXRlZCBhcyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuCiAgICAgICAgcw0AAAAuXHRlc3RfbW9kLnB5cxQAAABwcmludCgidGVzdGluZyBwZGIiKVIDAAAATnMCAAAALW1SBAAAAFIFAAAAUgYAAABSBwAAAHMFAAAAcXVpdApzFwAAAHBkYiBtdW5nZWQgdGhlIGZpbGVuYW1lKA0AAABSCAAAAFIJAAAAUgwAAAB0AgAAAG9zdAYAAAByZW1vdmVSDgAAAFIPAAAAUhEAAABSEgAAAFITAAAAUhQAAABSFQAAAHQIAAAAYXNzZXJ0SW4oCAAAAFIXAAAAdAcAAAB0ZXN0X2ZudAQAAABjb2RlUhsAAABSHAAAAFIdAAAAUgUAAABSBwAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BkYi5weXQVAAAAdGVzdF9maWxlbmFtZV9jb3JyZWN0VgEAAHMYAAAAAAkGAQYBEgETARMBFQEMAQkBCQEMAhUBKAMAAABSJgAAAFInAAAAUj0AAAAoAAAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BkYi5weVI3AAAAVAEAAHMCAAAABgJjAAAAAAEAAAAEAAAAQwAAAHM3AAAAZAEAZAIAbAAAbQEAfQAAAXQCAGoDAHwAAGQDAHQEAIMBAQF0AgBqBQB0BgB0BwCDAgABZAAAUygEAAAATmn/////KAEAAAB0CAAAAHRlc3RfcGRidAkAAAB2ZXJib3NpdHkoCAAAAHQEAAAAdGVzdFI+AAAAUgAAAAB0CwAAAHJ1bl9kb2N0ZXN0dAQAAABUcnVldAwAAABydW5fdW5pdHRlc3RSAgAAAFI3AAAAKAEAAABSPgAAACgAAAAAKAAAAABzVAAAAC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvbGludXgteDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BkYi5weXQJAAAAdGVzdF9tYWlubgEAAHMKAAAAAAEQARMBBgEDAXQIAAAAX19tYWluX18oGgAAAHQDAAAAaW1wUg4AAABSOAAAAHQIAAAAdW5pdHRlc3RSEQAAAFIKAAAAUkAAAABSAAAAAHQMAAAAdGVzdF9kb2N0ZXN0UgEAAAB0CAAAAFRlc3RDYXNlUgIAAAB0BgAAAG9iamVjdFIoAAAAUgkAAABSMQAAAFIyAAAAUjMAAAB0CgAAAG5ld19tb2R1bGV0AwAAAG1vZHQIAAAAX19kaWN0X19SNQAAAFI2AAAAUjcAAABSRAAAAFImAAAAKAAAAAAoAAAAACgAAAAAc1QAAAAvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2xpbnV4LXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHl0CAAAADxtb2R1bGU+BAAAAHMqAAAADAEMAQwBDAEMAQwCEAIQAxk4Fg4JAwkcCWcJGA8BCwMJKwkxGRoJBwwB