ZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliZ2V0b3B0LnRleCBiL0RvYy9saWIvbGliZ2V0b3B0LnRleAppbmRleCAxMzQ4OTIxLi40OWU2ZTAzIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmdldG9wdC50ZXgKKysrIGIvRG9jL2xpYi9saWJnZXRvcHQudGV4CkBAIC01NSw2ICs1NSwxOCBAQAogbWl4ZWQuCiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e2dudV9nZXRvcHR9e2FyZ3MsIG9wdGlvbnNcb3B0aW9uYWx7LCBsb25nX29wdGlvbnN9fQorVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIFxmdW5jdGlvbntnZXRvcHQoKX0sIGV4Y2VwdCB0aGF0IEdOVSBzdHlsZQorc2Nhbm5pbmcgbW9kZSBpcyB1c2VkIGJ5IGRlZmF1bHQuIFRoaXMgbWVhbnMgdGhhdCBvcHRpb24gYW5kCitub24tb3B0aW9uIGFyZ3VtZW50cyBtYXkgYmUgaW50ZXJtaXhlZC4gVGhlIFxmdW5jdGlvbntnZXRvcHQoKX0KK2Z1bmN0aW9uIHN0b3BzIHByb2Nlc3Npbmcgb3B0aW9ucyBhcyBzb29uIGFzIGEgbm9uLW9wdGlvbiBhcmd1bWVudCBpcworZW5jb3VudGVyZWQuCisKK0lmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG9wdGlvbiBzdHJpbmcgaXMgYCsnLCBvciBpZiB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCBpcyBzZXQsIHRoZW4gb3B0aW9uIHByb2Nlc3NpbmcKK3N0b3BzIGFzIHNvb24gYXMgYSBub24tb3B0aW9uIGFyZ3VtZW50IGlzIGVuY291bnRlcmVkLgorXGVuZHtmdW5jZGVzY30KKwogXGJlZ2lue2V4Y2Rlc2N9e0dldG9wdEVycm9yfQogVGhpcyBpcyByYWlzZWQgd2hlbiBhbiB1bnJlY29nbml6ZWQgb3B0aW9uIGlzIGZvdW5kIGluIHRoZSBhcmd1bWVudAogbGlzdCBvciB3aGVuIGFuIG9wdGlvbiByZXF1aXJpbmcgYW4gYXJndW1lbnQgaXMgZ2l2ZW4gbm9uZS4KZGlmZiAtLWdpdCBhL0xpYi9nZXRvcHQucHkgYi9MaWIvZ2V0b3B0LnB5CmluZGV4IDkxNTg0ZmUuLjNlOGI3YzIgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRvcHQucHkKKysrIGIvTGliL2dldG9wdC5weQpAQCAtNSwyMCArNSwzNiBAQAogZnVuY3Rpb24gKGluY2x1ZGluZyB0aGUgc3BlY2lhbCBtZWFuaW5ncyBvZiBhcmd1bWVudHMgb2YgdGhlIGZvcm0gYC0nCiBhbmQgYC0tJykuICBMb25nIG9wdGlvbnMgc2ltaWxhciB0byB0aG9zZSBzdXBwb3J0ZWQgYnkgR05VIHNvZnR3YXJlCiBtYXkgYmUgdXNlZCBhcyB3ZWxsIHZpYSBhbiBvcHRpb25hbCB0aGlyZCBhcmd1bWVudC4gIFRoaXMgbW9kdWxlCi1wcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbiBhbmQgYW4gZXhjZXB0aW9uOgorcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBhbmQgYW4gZXhjZXB0aW9uOgogCiBnZXRvcHQoKSAtLSBQYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworZ251X2dldG9wdCgpIC0tIExpa2UgZ2V0b3B0KCksIGJ1dCBhbGxvdyBvcHRpb24gYW5kIG5vbi1vcHRpb24gYXJndW1lbnRzCit0byBiZSBpbnRlcm1peGVkLiAKIEdldG9wdEVycm9yIC0tIGV4Y2VwdGlvbiAoY2xhc3MpIHJhaXNlZCB3aXRoICdvcHQnIGF0dHJpYnV0ZSwgd2hpY2ggaXMgdGhlCiBvcHRpb24gaW52b2x2ZWQgd2l0aCB0aGUgZXhjZXB0aW9uLgogIiIiCiAKICMgTG9uZyBvcHRpb24gc3VwcG9ydCBhZGRlZCBieSBMYXJzIFdpcnplbml1cyA8bGl3QGlraS5maT4uCi0KKyMKICMgR2Vycml0IEhvbGwgPGdlcnJpdEBubC5saW51eC5vcmc+IG1vdmVkIHRoZSBzdHJpbmctYmFzZWQgZXhjZXB0aW9ucwogIyB0byBjbGFzcy1iYXNlZCBleGNlcHRpb25zLgorIworIyBQZXRlciDFc3RyYW5kIDxhc3RyYW5kQGx5c2F0b3IubGl1LnNlPiBhZGRlZCBnbnVfZ2V0b3B0KCkuCisjCisjIFRPRE8gZm9yIGdudV9nZXRvcHQoKToKKyMKKyMgLSBHTlUgZ2V0b3B0X2xvbmdfb25seSBtZWNoYW5pc20KKyMgLSBhbGxvdyB0aGUgY2FsbGVyIHRvIHNwZWNpZnkgb3JkZXJpbmcKKyMgLSBSRVRVUk5fSU5fT1JERVIgb3B0aW9uCisjIC0gR05VIGV4dGVuc2lvbiB3aXRoICctJyBhcyBmaXJzdCBjaGFyYWN0ZXIgb2Ygb3B0aW9uIHN0cmluZworIyAtIG9wdGlvbmFsIGFyZ3VtZW50cywgc3BlY2lmaWVkIGJ5IGRvdWJsZSBjb2xvbnMKKyMgLSBhIG9wdGlvbiBzdHJpbmcgd2l0aCBhIFcgZm9sbG93ZWQgYnkgc2VtaWNvbG9uIHNob3VsZAorIyAgIHRyZWF0ICItVyBmb28iIGFzICItLWZvbyIKIAogX19hbGxfXyA9IFsiR2V0b3B0RXJyb3IiLCJlcnJvciIsImdldG9wdCJdCiAKK2ltcG9ydCBvcworCiBjbGFzcyBHZXRvcHRFcnJvcihFeGNlcHRpb24pOgogICAgIG9wdCA9ICcnCiAgICAgbXNnID0gJycKQEAgLTc1LDYgKzkxLDU2IEBACiAKICAgICByZXR1cm4gb3B0cywgYXJncwogCitkZWYgZ251X2dldG9wdChhcmdzLCBzaG9ydG9wdHMsIGxvbmdvcHRzID0gW10pOgorICAgICIiImdldG9wdChhcmdzLCBvcHRpb25zWywgbG9uZ19vcHRpb25zXSkgLT4gb3B0cywgYXJncworCisgICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIGdldG9wdCgpLCBleGNlcHQgdGhhdCBHTlUgc3R5bGUgc2Nhbm5pbmcKKyAgICBtb2RlIGlzIHVzZWQgYnkgZGVmYXVsdC4gVGhpcyBtZWFucyB0aGF0IG9wdGlvbiBhbmQgbm9uLW9wdGlvbgorICAgIGFyZ3VtZW50cyBtYXkgYmUgaW50ZXJtaXhlZC4gVGhlIGdldG9wdCgpIGZ1bmN0aW9uIHN0b3BzCisgICAgcHJvY2Vzc2luZyBvcHRpb25zIGFzIHNvb24gYXMgYSBub24tb3B0aW9uIGFyZ3VtZW50IGlzCisgICAgZW5jb3VudGVyZWQuCisKKyAgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBvcHRpb24gc3RyaW5nIGlzIGArJywgb3IgaWYgdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUIGlzIHNldCwgdGhlbiBvcHRpb24KKyAgICBwcm9jZXNzaW5nIHN0b3BzIGFzIHNvb24gYXMgYSBub24tb3B0aW9uIGFyZ3VtZW50IGlzIGVuY291bnRlcmVkLgorICAgIAorICAgICIiIgorCisgICAgb3B0cyA9IFtdCisgICAgcHJvZ19hcmdzID0gW10KKyAgICBpZiB0eXBlKGxvbmdvcHRzKSA9PSB0eXBlKCIiKToKKyAgICAgICAgbG9uZ29wdHMgPSBbbG9uZ29wdHNdCisgICAgZWxzZToKKyAgICAgICAgbG9uZ29wdHMgPSBsaXN0KGxvbmdvcHRzKQorCisgICAgIyBBbGxvdyBvcHRpb25zIGFmdGVyIG5vbi1vcHRpb24gYXJndW1lbnRzPworICAgIGlmIHNob3J0b3B0cy5zdGFydHN3aXRoKCcrJyk6CisgICAgICAgIHNob3J0b3B0cyA9IHNob3J0b3B0c1sxOl0KKyAgICAgICAgYWxsX29wdGlvbnNfZmlyc3QgPSAxCisgICAgZWxpZiBvcy5nZXRlbnYoIlBPU0lYTFlfQ09SUkVDVCIpOgorICAgICAgICBhbGxfb3B0aW9uc19maXJzdCA9IDEKKyAgICBlbHNlOgorICAgICAgICBhbGxfb3B0aW9uc19maXJzdCA9IDAKKworICAgIHdoaWxlIGFyZ3M6CisgICAgICAgIGlmIGFyZ3NbMF0gPT0gJy0tJzoKKyAgICAgICAgICAgIHByb2dfYXJncyArPSBhcmdzWzE6XQorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBhcmdzWzBdWzoyXSA9PSAnLS0nOgorICAgICAgICAgICAgb3B0cywgYXJncyA9IGRvX2xvbmdzKG9wdHMsIGFyZ3NbMF1bMjpdLCBsb25nb3B0cywgYXJnc1sxOl0pCisgICAgICAgIGVsaWYgYXJnc1swXVs6MV0gPT0gJy0nOgorICAgICAgICAgICAgb3B0cywgYXJncyA9IGRvX3Nob3J0cyhvcHRzLCBhcmdzWzBdWzE6XSwgc2hvcnRvcHRzLCBhcmdzWzE6XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFsbF9vcHRpb25zX2ZpcnN0OgorICAgICAgICAgICAgICAgIHByb2dfYXJncyArPSBhcmdzCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvZ19hcmdzLmFwcGVuZChhcmdzWzBdKQorICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzE6XQorCisgICAgcmV0dXJuIG9wdHMsIHByb2dfYXJncworCiBkZWYgZG9fbG9uZ3Mob3B0cywgb3B0LCBsb25nb3B0cywgYXJncyk6CiAgICAgdHJ5OgogICAgICAgICBpID0gb3B0LmluZGV4KCc9JykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKaW5kZXggZjg5ODlmMS4uZTJhZTlmZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKQEAgLTQsNiArNCw3IEBACiBpbXBvcnQgZ2V0b3B0CiBmcm9tIGdldG9wdCBpbXBvcnQgR2V0b3B0RXJyb3IKIGZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKK2ltcG9ydCBvcwogCiBkZWYgZXhwZWN0RXhjZXB0aW9uKHRlc3RzdHIsIGV4cGVjdGVkLCBmYWlsdXJlPUFzc2VydGlvbkVycm9yKToKICAgICAiIiJFeGVjdXRlcyBhIHN0YXRlbWVudCBwYXNzZWQgaW4gdGVzdHN0ciwgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24KQEAgLTEwNiw1ICsxMDcsMjQgQEAKICAgICAib3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoY21kbGluZSwgJ2E6YicsIFsnYWxwaGEnLCAnYmV0YSddKSIsCiAgICAgR2V0b3B0RXJyb3IpCiAKKyMgVGVzdCBoYW5kbGluZyBvZiBHTlUgc3R5bGUgc2Nhbm5pbmcgbW9kZS4KK2lmIHZlcmJvc2U6CisgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gZ2V0b3B0LmdudV9nZXRvcHQnCitjbWRsaW5lID0gWyctYScsICdhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddCisjIEdOVSBzdHlsZQorb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICdhYjonLCBbJ2FscGhhJywgJ2JldGE9J10pCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcnKSwgKCctYicsICcxJyksICgnLS1hbHBoYScsICcnKSwgKCctLWJldGEnLCAnMicpXSkKK3ZlcmlmeShhcmdzID09IFsnYXJnMSddKQorIyBQb3NpeCBzdHlsZSB2aWEgKworb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICcrYWI6JywgWydhbHBoYScsICdiZXRhPSddKQordmVyaWZ5KG9wdHMgPT0gWygnLWEnLCAnJyldKQordmVyaWZ5KGFyZ3MgPT0gWydhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddKQorIyBQb3NpeCBzdHlsZSB2aWEgUE9TSVhMWV9DT1JSRUNUCitvcy5lbnZpcm9uWyJQT1NJWExZX0NPUlJFQ1QiXSA9ICIxIgorb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICdhYjonLCBbJ2FscGhhJywgJ2JldGE9J10pCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcnKV0pCit2ZXJpZnkoYXJncyA9PSBbJ2FyZzEnLCAnLWInLCAnMScsICctLWFscGhhJywgJy0tYmV0YT0yJ10pCisKKwogaWYgdmVyYm9zZToKICAgICBwcmludCAiTW9kdWxlIGdldG9wdDogdGVzdHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggODZhZjY5My4uYTE5Zjc5NiAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtMjAsNiArMjAsNyBAQAogUm9zcyBBbmRydXMKIEphc29uIEFzYmFocgogRGF2aWQgQXNjaGVyCitQZXRlciDFc3RyYW5kCiBKb2huIEF5Y29jawogRG9ub3ZhbiBCYWFyZGEKIEFsZm9uc28gQmFjaWVybwpkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IGNlMmIwOWEuLjJkNzEwNjcgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTEzMCw2ICsxMzAsOCBAQAogCiBMaWJyYXJ5CiAKKy0gZ2V0b3B0LmdudV9nZXRvcHQgd2FzIGFkZGVkLgorCiAtIFN0b3AgdXNpbmcgc3RyaW5ncyBmb3IgZXhjZXB0aW9ucy4gIFN0cmluZyBvYmplY3RzIHVzZWQgZm9yCiAgIGV4Y2VwdGlvbnMgYXJlIG5vdyBjbGFzc2VzIGRlcml2aW5nIGZyb20gRXhjZXB0aW9uLiAgVGhlIG9iamVjdHMKICAgY2hhbmdlZCB3ZXJlOiBUa2ludGVyLlRjbEVycm9yLCBiZGIuQmRiUXVpdCwgbWFjcGF0aC5ub3JtX2Vycm9yLAo=