ZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21tYXAucnN0IGIvRG9jL2xpYnJhcnkvbW1hcC5yc3QKaW5kZXggOWU1NTJmZC4uMzczOTFkMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbW1hcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbW1hcC5yc3QKQEAgLTEzNywxMSArMTM3LDEyIEBACiAgICBhbiBleGNlcHRpb24gYmVpbmcgcmFpc2VkLgogCiAKLS4uIG1ldGhvZDo6IG1tYXAuZmluZChzdHJpbmdbLCBzdGFydF0pCisuLiBtZXRob2Q6OiBtbWFwLmZpbmQoc3RyaW5nWywgc3RhcnRbLCBlbmRdXSkKIAotICAgUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHN1YnN0cmluZyAqc3RyaW5nKiBpcyBmb3VuZC4KLSAgIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuICAqc3RhcnQqIGlzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgc2VhcmNoIGJlZ2lucywgYW5kCi0gICBkZWZhdWx0cyB0byB6ZXJvLgorICAgUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHN1YnN0cmluZyAqc3RyaW5nKiBpcyBmb3VuZCwKKyAgIHN1Y2ggdGhhdCAqc3RyaW5nKiBpcyBjb250YWluZWQgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uIE9wdGlvbmFsCisgICBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgorICAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KIAogCiAuLiBtZXRob2Q6OiBtbWFwLmZsdXNoKFtvZmZzZXQsIHNpemVdKQpAQCAtMTg2LDYgKzE4NywxNCBAQAogICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCiAKIAorLi4gbWV0aG9kOjogbW1hcC5yZmluZChzdHJpbmdbLCBzdGFydFssIGVuZF1dKQorCisgICBSZXR1cm5zIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHN1YnN0cmluZyAqc3RyaW5nKiBpcworICAgZm91bmQsIHN1Y2ggdGhhdCAqc3RyaW5nKiBpcyBjb250YWluZWQgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLAorICAgKmVuZCpdLiBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlCisgICBub3RhdGlvbi4gIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCisKKwogLi4gbWV0aG9kOjogbW1hcC5zZWVrKHBvc1ssIHdoZW5jZV0pCiAKICAgIFNldCB0aGUgZmlsZSdzIGN1cnJlbnQgcG9zaXRpb24uICAqd2hlbmNlKiBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CmluZGV4IGM5MDBlYTcuLjJjODVjODYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdApAQCAtNDQsNyArNDQsNyBAQAogbm90IGV4aXQgdW50aWwgYWxsIHRocmVhZHMgY3JlYXRlZCBieSA6Y2xhc3M6YFRocmVhZGluZ01peEluYCBoYXZlIGV4aXRlZC4KIAogU2VydmVyIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZSBleHRlcm5hbCBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzLCBubyBtYXR0ZXIgd2hhdAotbmV0d29yayBwcm90b2NvbCB0aGV5IHVzZToKK25ldHdvcmsgcHJvdG9jb2wgdGhleSB1c2UuCiAKIAogU2VydmVyIENyZWF0aW9uIE5vdGVzCkBAIC0xOTMsNiArMTkzLDEzIEBACiAgICBUaGUgdHlwZSBvZiBzb2NrZXQgdXNlZCBieSB0aGUgc2VydmVyOyA6Y29uc3Q6YHNvY2tldC5TT0NLX1NUUkVBTWAgYW5kCiAgICA6Y29uc3Q6YHNvY2tldC5TT0NLX0RHUkFNYCBhcmUgdHdvIHBvc3NpYmxlIHZhbHVlcy4KIAorLi4gZGF0YTo6IHRpbWVvdXQKKworICAgVGltZW91dCBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gc2Vjb25kcywgb3IgOmNvbnN0OmBOb25lYCBpZiBubyB0aW1lb3V0IGlzIGRlc2lyZWQuCisgICBJZiBubyBpbmNvbWluZyByZXF1ZXN0cyBhcmUgcmVjZWl2ZWQgd2l0aGluIHRoZSB0aW1lb3V0IHBlcmlvZCwgCisgICB0aGUgOm1ldGg6YGhhbmRsZV90aW1lb3V0YCBtZXRob2QgaXMgY2FsbGVkIGFuZCB0aGVuIHRoZSBzZXJ2ZXIgcmVzdW1lcyB3YWl0aW5nIGZvciAKKyAgIHJlcXVlc3RzLgorCiBUaGVyZSBhcmUgdmFyaW91cyBzZXJ2ZXIgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgb2YgYmFzZQogc2VydmVyIGNsYXNzZXMgbGlrZSA6Y2xhc3M6YFRDUFNlcnZlcmA7IHRoZXNlIG1ldGhvZHMgYXJlbid0IHVzZWZ1bCB0byBleHRlcm5hbAogdXNlcnMgb2YgdGhlIHNlcnZlciBvYmplY3QuCkBAIC0yMjAsNiArMjI3LDEzIEBACiAgICBtZXRob2QgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byBwcmludCB0aGUgdHJhY2ViYWNrIHRvCiAgICBzdGFuZGFyZCBvdXRwdXQgYW5kIGNvbnRpbnVlIGhhbmRsaW5nIGZ1cnRoZXIgcmVxdWVzdHMuCiAKKy4uIGZ1bmN0aW9uOjogaGFuZGxlX3RpbWVvdXQoKQorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSA6YXR0cjpgdGltZW91dGAgYXR0cmlidXRlIGhhcyBiZWVuIHNldCB0byBhIAorICAgdmFsdWUgb3RoZXIgdGhhbiA6Y29uc3Q6YE5vbmVgIGFuZCB0aGUgdGltZW91dCBwZXJpb2QgaGFzIHBhc3NlZCB3aXRoIG5vIAorICAgcmVxdWVzdHMgYmVpbmcgcmVjZWl2ZWQuICBUaGUgZGVmYXVsdCBhY3Rpb24gZm9yIGZvcmtpbmcgc2VydmVycyBpcworICAgdG8gY29sbGVjdCB0aGUgc3RhdHVzIG9mIGFueSBjaGlsZCBwcm9jZXNzZXMgdGhhdCBoYXZlIGV4aXRlZCwgd2hpbGUKKyAgIGluIHRocmVhZGluZyBzZXJ2ZXJzIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy4KIAogLi4gZnVuY3Rpb246OiBwcm9jZXNzX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CmluZGV4IGMwMTUzNzIuLjZmM2U5NWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdApAQCAtNjE1LDE4ICs2MTUsMTkgQEAKIAogICAgV2hlbiB0aGUgKnRpbWVvdXQqIGFyZ3VtZW50IGlzIHByZXNlbnQgYW5kIG5vdCBgYE5vbmVgYCwgaXQgc2hvdWxkIGJlIGEgZmxvYXRpbmcKICAgIHBvaW50IG51bWJlciBzcGVjaWZ5aW5nIGEgdGltZW91dCBmb3IgdGhlIG9wZXJhdGlvbiBpbiBzZWNvbmRzIChvciBmcmFjdGlvbnMKLSAgIHRoZXJlb2YpLiBBcyA6bWV0aDpgam9pbmAgYWx3YXlzICByZXR1cm5zIGBgTm9uZWBgLCB5b3UgbXVzdCBjYWxsCi0gICA6bWV0aDpgaXNBbGl2ZWAgdG8gZGVjaWRlIHdoZXRoZXIgIGEgdGltZW91dCBoYXBwZW5lZC4KKyAgIHRoZXJlb2YpLiBBcyA6bWV0aDpgam9pbmAgYWx3YXlzIHJldHVybnMgYGBOb25lYGAsIHlvdSBtdXN0IGNhbGwgOm1ldGg6YGlzQWxpdmVgCisgICBhZnRlciA6bWV0aDpgam9pbmAgdG8gZGVjaWRlIHdoZXRoZXIgYSB0aW1lb3V0IGhhcHBlbmVkIC0tIGlmIHRoZSB0aHJlYWQgaXMKKyAgIHN0aWxsIGFsaXZlLCB0aGUgOm1ldGg6YGpvaW5gIGNhbGwgdGltZWQgb3V0LgogCiAgICBXaGVuIHRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgbm90IHByZXNlbnQgb3IgYGBOb25lYGAsIHRoZSBvcGVyYXRpb24gd2lsbCBibG9jawogICAgdW50aWwgdGhlIHRocmVhZCB0ZXJtaW5hdGVzLgogCiAgICBBIHRocmVhZCBjYW4gYmUgOm1ldGg6YGpvaW5gXCBlZCBtYW55IHRpbWVzLgogCi0gICA6bWV0aDpgam9pbmAgbWF5IHRocm93IGEgOmV4YzpgUnVudGltZUVycm9yYCwgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGpvaW4gdGhlCi0gICBjdXJyZW50IHRocmVhZCBhcyB0aGF0IHdvdWxkIGNhdXNlIGEgZGVhZGxvY2suIEl0IGlzIGFsc28gYW4gZXJyb3IgdG8KLSAgIDptZXRoOmBqb2luYCBhIHRocmVhZCBiZWZvcmUgaXQgaGFzIGJlZW4gc3RhcnRlZCBhbmQgYXR0ZW1wdHMgdG8gZG8gc28gcmFpc2VzCi0gICBzYW1lIGV4Y2VwdGlvbi4KKyAgIDptZXRoOmBqb2luYCByYWlzZXMgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBqb2luCisgICB0aGUgY3VycmVudCB0aHJlYWQgYXMgdGhhdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLiBJdCBpcyBhbHNvIGFuIGVycm9yIHRvCisgICA6bWV0aDpgam9pbmAgYSB0aHJlYWQgYmVmb3JlIGl0IGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIGF0dGVtcHRzIHRvIGRvIHNvCisgICByYWlzZXMgdGhlIHNhbWUgZXhjZXB0aW9uLgogCiAKIC4uIG1ldGhvZDo6IFRocmVhZC5nZXROYW1lKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlLnJzdAppbmRleCA5MWNmMWE0Li45ZDBjMGM0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90cmFjZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2UucnN0CkBAIC02NCwxMiArNjQsMTQgQEAKICAgIHN0ZG91dCBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4KIAogOm9wdGlvbjpgLS1pZ25vcmUtbW9kdWxlYAotICAgSWdub3JlIHRoZSBuYW1lZCBtb2R1bGUgYW5kIGl0cyBzdWJtb2R1bGVzIChpZiBpdCBpcyBhIHBhY2thZ2UpLiAgTWF5IGJlIGdpdmVuCisgICBBY2NlcHRzIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBuYW1lcy4gSWdub3JlIGVhY2ggb2YgdGhlIG5hbWVkCisgICBtb2R1bGUgYW5kIGl0cyBzdWJtb2R1bGVzIChpZiBpdCBpcyBhIHBhY2thZ2UpLiAgTWF5IGJlIGdpdmVuIAogICAgbXVsdGlwbGUgdGltZXMuCiAKIDpvcHRpb246YC0taWdub3JlLWRpcmAKLSAgIElnbm9yZSBhbGwgbW9kdWxlcyBhbmQgcGFja2FnZXMgaW4gdGhlIG5hbWVkIGRpcmVjdG9yeSBhbmQgc3ViZGlyZWN0b3JpZXMuICBNYXkKLSAgIGJlIGdpdmVuIG11bHRpcGxlIHRpbWVzLgorICAgSWdub3JlIGFsbCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBpbiB0aGUgbmFtZWQgZGlyZWN0b3J5IGFuZCBzdWJkaXJlY3RvcmllcworICAgKG11bHRpcGxlIGRpcmVjdG9yaWVzIGNhbiBiZSBqb2luZWQgYnkgb3MucGF0aHNlcCkuICBNYXkgYmUgZ2l2ZW4gbXVsdGlwbGUKKyAgIHRpbWVzLiAKIAogCiAuLiBfdHJhY2UtYXBpOgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNi5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi42LnJzdAppbmRleCA0NjkyMmE0Li5lMzg2YjM2IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi42LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi42LnJzdApAQCAtOTYwLDYgKzk2MCwxMyBAQAogCiAgIC4uIFBhdGNoICMxNDkwMTkwCiAKKyogOmNsYXNzOmBtbWFwYCBvYmplY3RzIG5vdyBoYXZlIGEgOm1ldGg6YHJmaW5kYCBtZXRob2QgdGhhdCBmaW5kcworICBhIHN1YnN0cmluZywgYmVnaW5uaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBhbmQgc2VhcmNoaW5nCisgIGJhY2t3YXJkcy4gIFRoZSA6bWV0aDpgZmluZGAgbWV0aG9kCisgIGFsc28gZ2FpbmVkIGEgKmVuZCogcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AKKyAgdGhlIGZvcndhcmQgc2VhcmNoLgorICAoQ29udHJpYnV0ZWQgYnkgSm9obiBMZW50b24uKQorCiAqIFRoZSA6bW9kOmBuZXdgIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gUHl0aG9uIDMuMC4KICAgSW1wb3J0aW5nIGl0IHRoZXJlZm9yZQogICB0cmlnZ2VycyBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuIFB5dGhvbiBpcyBydW5uaW5nIGluIDMuMC13YXJuaW5nCkBAIC0xMTAyLDYgKzExMDksMTMgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IEFsYmVydG8gQmVydG9nbGkuKQogCiAgIC4uIFBhdGNoICMxNjQ2CisKKyogVGhlIGJhc2UgY2xhc3NlcyBpbiB0aGUgOm1vZDpgU29ja2V0U2VydmVyYCBtb2R1bGUgbm93IHN1cHBvcnQKKyAgY2FsbGluZyBhIDptZXRoOmBoYW5kbGVfdGltZW91dGAgbWV0aG9kIGFmdGVyIGEgc3BhbiBvZiBpbmFjdGl2aXR5IAorICBzcGVjaWZpZWQgYnkgdGhlIHNlcnZlcidzIDphdHRyOmB0aW1lb3V0YCBhdHRyaWJ1dGUuICAoQ29udHJpYnV0ZWQgCisgIGJ5IE1pY2hhZWwgUG9tcmFuaW5nLikKKworICAuLiBQYXRjaCAjNzQyNTk4CiAgCiAqIEEgbmV3IHZhcmlhYmxlIGluIHRoZSA6bW9kOmBzeXNgIG1vZHVsZSwKICAgOmF0dHI6YGZsb2F0X2luZm9gLCBpcyBhbiBvYmplY3QKZGlmZiAtLWdpdCBhL0xpYi9Tb2NrZXRTZXJ2ZXIucHkgYi9MaWIvU29ja2V0U2VydmVyLnB5CmluZGV4IDk5NGEzYzYuLmY2MmI3ZGYgMTAwNjQ0Ci0tLSBhL0xpYi9Tb2NrZXRTZXJ2ZXIucHkKKysrIGIvTGliL1NvY2tldFNlcnZlci5weQpAQCAtMTU4LDYgKzE1OCw3IEBACiAgICAgLSBzZXJ2ZXJfYmluZCgpCiAgICAgLSBzZXJ2ZXJfYWN0aXZhdGUoKQogICAgIC0gZ2V0X3JlcXVlc3QoKSAtPiByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcworICAgIC0gaGFuZGxlX3RpbWVvdXQoKQogICAgIC0gdmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAgICAgLSBzZXJ2ZXJfY2xvc2UoKQogICAgIC0gcHJvY2Vzc19yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQpAQCAtMTcxLDYgKzE3Miw3IEBACiAgICAgQ2xhc3MgdmFyaWFibGVzIHRoYXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzIG9yCiAgICAgaW5zdGFuY2VzOgogCisgICAgLSB0aW1lb3V0CiAgICAgLSBhZGRyZXNzX2ZhbWlseQogICAgIC0gc29ja2V0X3R5cGUKICAgICAtIGFsbG93X3JldXNlX2FkZHJlc3MKQEAgLTE4Miw2ICsxODQsOCBAQAogCiAgICAgIiIiCiAKKyAgICB0aW1lb3V0ID0gTm9uZQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKToKICAgICAgICAgIiIiQ29uc3RydWN0b3IuICBNYXkgYmUgZXh0ZW5kZWQsIGRvIG5vdCBvdmVycmlkZS4iIiIKICAgICAgICAgc2VsZi5zZXJ2ZXJfYWRkcmVzcyA9IHNlcnZlcl9hZGRyZXNzCkBAIC0yMDQsOCArMjA4LDkgQEAKICAgICAjIGZpbmlzaGluZyBhIHJlcXVlc3QgaXMgZmFpcmx5IGFyYml0cmFyeS4gIFJlbWVtYmVyOgogICAgICMKICAgICAjIC0gaGFuZGxlX3JlcXVlc3QoKSBpcyB0aGUgdG9wLWxldmVsIGNhbGwuICBJdCBjYWxscwotICAgICMgICBnZXRfcmVxdWVzdCgpLCB2ZXJpZnlfcmVxdWVzdCgpIGFuZCBwcm9jZXNzX3JlcXVlc3QoKQotICAgICMgLSBnZXRfcmVxdWVzdCgpIGlzIGRpZmZlcmVudCBmb3Igc3RyZWFtIG9yIGRhdGFncmFtIHNvY2tldHMKKyAgICAjICAgYXdhaXRfcmVxdWVzdCgpLCB2ZXJpZnlfcmVxdWVzdCgpIGFuZCBwcm9jZXNzX3JlcXVlc3QoKQorICAgICMgLSBnZXRfcmVxdWVzdCgpLCBjYWxsZWQgYnkgYXdhaXRfcmVxdWVzdCgpLCBpcyBkaWZmZXJlbnQgZm9yCisgICAgIyAgIHN0cmVhbSBvciBkYXRhZ3JhbSBzb2NrZXRzCiAgICAgIyAtIHByb2Nlc3NfcmVxdWVzdCgpIGlzIHRoZSBwbGFjZSB0aGF0IG1heSBmb3JrIGEgbmV3IHByb2Nlc3MKICAgICAjICAgb3IgY3JlYXRlIGEgbmV3IHRocmVhZCB0byBmaW5pc2ggdGhlIHJlcXVlc3QKICAgICAjIC0gZmluaXNoX3JlcXVlc3QoKSBpbnN0YW50aWF0ZXMgdGhlIHJlcXVlc3QgaGFuZGxlciBjbGFzczsKQEAgLTIxNCw3ICsyMTksNyBAQAogICAgIGRlZiBoYW5kbGVfcmVxdWVzdChzZWxmKToKICAgICAgICAgIiIiSGFuZGxlIG9uZSByZXF1ZXN0LCBwb3NzaWJseSBibG9ja2luZy4iIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLmdldF9yZXF1ZXN0KCkKKyAgICAgICAgICAgIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzID0gc2VsZi5hd2FpdF9yZXF1ZXN0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKQEAgLTIyNCw2ICsyMjksMjggQEAKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKIAorICAgIGRlZiBhd2FpdF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJDYWxsIGdldF9yZXF1ZXN0IG9yIGhhbmRsZV90aW1lb3V0LCBvYnNlcnZpbmcgc2VsZi50aW1lb3V0LgorCisgICAgICAgIFJldHVybnMgdmFsdWUgZnJvbSBnZXRfcmVxdWVzdCgpIG9yIHJhaXNlcyBzb2NrZXQudGltZW91dCBleGNlcHRpb24gaWYKKyAgICAgICAgdGltZW91dCB3YXMgZXhjZWVkZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmIHRpbWVvdXQgPT0gMCwgeW91J3JlIHJlc3BvbnNpYmxlIGZvciB5b3VyIG93biBmZCBtYWdpYy4KKyAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKKyAgICAgICAgICAgIGZkX3NldHMgPSBzZWxlY3Quc2VsZWN0KFtzZWxmXSwgW10sIFtdLCBzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBpZiBub3QgZmRfc2V0c1swXToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBzb2NrZXQudGltZW91dCgiTGlzdGVuaW5nIHRpbWVkIG91dCIpCisgICAgICAgIHJldHVybiBzZWxmLmdldF9yZXF1ZXN0KCkKKworICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIGlmIG5vIG5ldyByZXF1ZXN0IGFycml2ZXMgd2l0aGluIHNlbGYudGltZW91dC4KKworICAgICAgICBPdmVycmlkZGVuIGJ5IEZvcmtpbmdNaXhJbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKwogICAgIGRlZiB2ZXJpZnlfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICIiIlZlcmlmeSB0aGUgcmVxdWVzdC4gIE1heSBiZSBvdmVycmlkZGVuLgogCkBAIC0yODksNiArMzE2LDcgQEAKICAgICAtIHNlcnZlcl9iaW5kKCkKICAgICAtIHNlcnZlcl9hY3RpdmF0ZSgpCiAgICAgLSBnZXRfcmVxdWVzdCgpIC0+IHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzCisgICAgLSBoYW5kbGVfdGltZW91dCgpCiAgICAgLSB2ZXJpZnlfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKICAgICAtIHByb2Nlc3NfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKICAgICAtIGNsb3NlX3JlcXVlc3QocmVxdWVzdCkKQEAgLTMwMSw2ICszMjksNyBAQAogICAgIENsYXNzIHZhcmlhYmxlcyB0aGF0IG1heSBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3NlcyBvcgogICAgIGluc3RhbmNlczoKIAorICAgIC0gdGltZW91dAogICAgIC0gYWRkcmVzc19mYW1pbHkKICAgICAtIHNvY2tldF90eXBlCiAgICAgLSByZXF1ZXN0X3F1ZXVlX3NpemUgKG9ubHkgZm9yIHN0cmVhbSBzb2NrZXRzKQpAQCAtNDA1LDExICs0MzQsMTIgQEAKIAogICAgICIiIk1peC1pbiBjbGFzcyB0byBoYW5kbGUgZWFjaCByZXF1ZXN0IGluIGEgbmV3IHByb2Nlc3MuIiIiCiAKKyAgICB0aW1lb3V0ID0gMzAwCiAgICAgYWN0aXZlX2NoaWxkcmVuID0gTm9uZQogICAgIG1heF9jaGlsZHJlbiA9IDQwCiAKICAgICBkZWYgY29sbGVjdF9jaGlsZHJlbihzZWxmKToKLSAgICAgICAgIiIiSW50ZXJuYWwgcm91dGluZSB0byB3YWl0IGZvciBkaWVkIGNoaWxkcmVuLiIiIgorICAgICAgICAiIiJJbnRlcm5hbCByb3V0aW5lIHRvIHdhaXQgZm9yIGNoaWxkcmVuIHRoYXQgaGF2ZSBleGl0ZWQuIiIiCiAgICAgICAgIHdoaWxlIHNlbGYuYWN0aXZlX2NoaWxkcmVuOgogICAgICAgICAgICAgaWYgbGVuKHNlbGYuYWN0aXZlX2NoaWxkcmVuKSA8IHNlbGYubWF4X2NoaWxkcmVuOgogICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcy5XTk9IQU5HCkBAIC00MjQsNiArNDU0LDEzIEBACiAgICAgICAgICAgICBpZiBub3QgcGlkOiBicmVhawogICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4ucmVtb3ZlKHBpZCkKIAorICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3Igem9tYmllcyBhZnRlciBzZWxmLnRpbWVvdXQgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgorCisgICAgICAgIE1heSBiZSBleHRlbmRlZCwgZG8gbm90IG92ZXJyaWRlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb2xsZWN0X2NoaWxkcmVuKCkKKwogICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgogICAgICAgICAiIiJGb3JrIGEgbmV3IHN1YnByb2Nlc3MgdG8gcHJvY2VzcyB0aGUgcmVxdWVzdC4iIiIKICAgICAgICAgc2VsZi5jb2xsZWN0X2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCA0Y2Y1OTE2Li4yNzE4YmJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC03NDMsNiArNzQzLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwTzEyMycsIDgpLCA4MykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBCMTAwJywgMiksIDQpCiAKKyAgICAgICAgIyBCdWcgMTY3OTogIjB4IiBpcyBub3QgYSB2YWxpZCBoZXggbGl0ZXJhbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICIweCIsIDE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICIweCIsIDApCisKKwogICAgICAgICAjIFNGIGJ1ZyAxMzM0NjYyOiBpbnQoc3RyaW5nLCBiYXNlKSB3cm9uZyBhbnN3ZXJzCiAgICAgICAgICMgVmFyaW91cyByZXByZXNlbnRhdGlvbnMgb2YgMioqMzIgZXZhbHVhdGVkIHRvIDAKICAgICAgICAgIyByYXRoZXIgdGhhbiAyKiozMiBpbiBwcmV2aW91cyB2ZXJzaW9ucwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5IGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CmluZGV4IDdhYjc1NTcuLjA3NzczMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKQEAgLTMyLDYgKzMyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMG8zNzcsIDI1NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjE0NzQ4MzY0NywgMG8xNzc3Nzc3Nzc3NykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMGIxMDAxLCA5KQorICAgICAgICAjICIweCIgaXMgbm90IGEgdmFsaWQgbGl0ZXJhbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjB4IikKICAgICAgICAgZnJvbSBzeXMgaW1wb3J0IG1heHNpemUKICAgICAgICAgaWYgbWF4c2l6ZSA9PSAyMTQ3NDgzNjQ3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTIxNDc0ODM2NDctMSwgLTBvMjAwMDAwMDAwMDApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggM2QzMDEwOS4uNWJmN2ViMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMjUyLDYgKzI1Miw0MiBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKHNsaWNlICsgYid4JyksIC0xKQogICAgICAgICBtLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2ZpbmRfZW5kKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhlIG5ldyAnZW5kJyBwYXJhbWV0ZXIgd29ya3MgYXMgZXhwZWN0ZWQKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorICAgICAgICBkYXRhID0gJ29uZSB0d28gb25lcycKKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG4pCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmUnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZXMnKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZScsIDAsIC0xKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZScsIDEpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lJywgMSwgLTEpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lJywgMSwgLTIpLCAtMSkKKworCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgbmV3ICdlbmQnIHBhcmFtZXRlciB3b3JrcyBhcyBleHBlY3RlZAorICAgICAgICBmID0gb3BlbihURVNURk4sICd3KycpCisgICAgICAgIGRhdGEgPSAnb25lIHR3byBvbmVzJworICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUnKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUgJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lJywgMCwgLTEpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZScsIDAsIC0yKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUnLCAxLCAtMSksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lJywgMSwgLTIpLCAtMSkKKworCiAgICAgZGVmIHRlc3RfZG91YmxlX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBhIGRvdWJsZSBjbG9zZSBkb2Vzbid0IGNyYXNoIG9uIFNvbGFyaXMgKEJ1ZyMgNjY1OTEzKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3YisnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQppbmRleCAyM2I3NzU5Li5kM2I4NzBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpAQCAtMjg4LDcgKzI4OCw2IEBACiAKICAgICBkZWYgdGVzdFJlZkNvdW50R2V0TmFtZUluZm8oc2VsZik6CiAgICAgICAgICMgVGVzdGluZyByZWZlcmVuY2UgY291bnQgZm9yIGdldG5hbWVpbmZvCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgaGFzYXR0cihzeXMsICJnZXRyZWZjb3VudCIpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgT24gc29tZSB2ZXJzaW9ucywgdGhpcyBsb3NlcyBhIHJlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zc2wucHkgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQppbmRleCA4MTk0M2E1Li4zNGJiMzFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQpAQCAtMzgsNiArMzgsMjcgQEAKIAogY2xhc3MgQmFzaWNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdFNTTGNvbm5lY3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUpCisgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgYyA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICBpZiBjOgorICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIlBlZXIgY2VydCAlcyBzaG91bGRuJ3QgYmUgaGVyZSEiKQorICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAjIHRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB3ZSBoYXZlIG5vIHZlcmlmaWNhdGlvbiBjZXJ0cworICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKICAgICBkZWYgdGVzdENydWNpYWxDb25zdGFudHMoc2VsZik6CiAgICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MgogICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIzCkBAIC04MSw3ICsxMDIsNiBAQAogY2xhc3MgTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RDb25uZWN0KHNlbGYpOgotCiAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUpCiAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CmluZGV4IGIyMjZjNzEuLjNmMjIzOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQpAQCAtMzg1LDYgKzM4NSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICBvJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudCA9ICcgJyoxNSkKIAorICAgICAgICAjIGJ1ZyAxMTQ2LiAgUHJldmVudCBhIGxvbmcgd29yZCB0byBiZSB3cm9uZ2x5IHdyYXBwZWQgd2hlbiB0aGUKKyAgICAgICAgIyBwcmVjZWRpbmcgd29yZCBpcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgc2hvcnRlciB0aGFuIHRoZSB3aWR0aAorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnRGlkIHlvdSBzYXkgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInN1cGVyY2FsaWZyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWdpbGlzdGljZXhwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaWFsaWRvY2lvdXM/JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIiBIb3cgKmRvKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3lvdSBzcGVsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoYXQgb2RkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnd29yZCwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhbnl3YXlzPyddKQorCiAgICAgZGVmIHRlc3Rfbm9icmVha19sb25nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBicmVha19sb25nX3dvcmRzIGRpc2FibGVkCiAgICAgICAgIHNlbGYud3JhcHBlci5icmVha19sb25nX3dvcmRzID0gMApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkgYi9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQppbmRleCBhZGU2Zjg0Li4xNmVmNzk4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQpAQCAtMzQ3LDcgKzM0Nyw4IEBACiAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBlLmhlYWRlcnMpKQogCi0gICAgZGVmIHRlc3RfNDA0KHNlbGYpOgorICAgICMgW2NoXSBUaGUgdGVzdCA0MDQgaXMgY2F1c2luZyBsb3RzIG9mIGZhbHNlIGFsYXJtcy4KKyAgICBkZWYgWFhYdGVzdF80MDQoc2VsZik6CiAgICAgICAgICMgc2VuZCBQT1NUIHdpdGggaHR0cGxpYiwgaXQgc2hvdWxkIHJldHVybiA0MDQgaGVhZGVyIGFuZAogICAgICAgICAjICdOb3QgRm91bmQnIG1lc3NhZ2UuCiAgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBQT1JUKQpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IGU2ZTFiOTcuLjdlMDVjMWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTE1OSw3ICsxNTksMTIgQEAKICAgICAgICAgSGFuZGxlIGEgY2h1bmsgb2YgdGV4dCAobW9zdCBsaWtlbHkgYSB3b3JkLCBub3Qgd2hpdGVzcGFjZSkgdGhhdAogICAgICAgICBpcyB0b28gbG9uZyB0byBmaXQgaW4gYW55IGxpbmUuCiAgICAgICAgICIiIgotICAgICAgICBzcGFjZV9sZWZ0ID0gbWF4KHdpZHRoIC0gY3VyX2xlbiwgMSkKKyAgICAgICAgIyBGaWd1cmUgb3V0IHdoZW4gaW5kZW50IGlzIGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgd2lkdGgsIGFuZCBtYWtlCisgICAgICAgICMgc3VyZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGlzIHN0cmlwcGVkIG9mZiBvbiBldmVyeSBwYXNzCisgICAgICAgIGlmIHdpZHRoIDwgMToKKyAgICAgICAgICAgIHNwYWNlX2xlZnQgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGFjZV9sZWZ0ID0gd2lkdGggLSBjdXJfbGVuCiAKICAgICAgICAgIyBJZiB3ZSdyZSBhbGxvd2VkIHRvIGJyZWFrIGxvbmcgd29yZHMsIHRoZW4gZG8gc286IHB1dCBhcyBtdWNoCiAgICAgICAgICMgb2YgdGhlIG5leHQgY2h1bmsgb250byB0aGUgY3VycmVudCBsaW5lIGFzIHdpbGwgZml0LgpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuaXplLnB5IGIvTGliL3Rva2VuaXplLnB5CmluZGV4IDBkOWEzZmIuLjc5N2I2ZTAgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbml6ZS5weQorKysgYi9MaWIvdG9rZW5pemUucHkKQEAgLTQ5LDkgKzQ5LDkgQEAKIElnbm9yZSA9IFdoaXRlc3BhY2UgKyBhbnkocidcXFxyP1xuJyArIFdoaXRlc3BhY2UpICsgbWF5YmUoQ29tbWVudCkKIE5hbWUgPSByJ1thLXpBLVpfXVx3KicKIAotSGV4bnVtYmVyID0gcicwW3hYXVtcZGEtZkEtRl0qJwotQmlubnVtYmVyID0gcicwW2JCXVswMV0qJwotT2N0bnVtYmVyID0gcicwW29PXVswLTddKicKK0hleG51bWJlciA9IHInMFt4WF1bXGRhLWZBLUZdKycKK0Jpbm51bWJlciA9IHInMFtiQl1bMDFdKycKK09jdG51bWJlciA9IHInMFtvT11bMC03XSsnCiBEZWNudW1iZXIgPSByJyg/OjArfFsxLTldXGQqKScKIEludG51bWJlciA9IGdyb3VwKEhleG51bWJlciwgQmlubnVtYmVyLCBPY3RudW1iZXIsIERlY251bWJlcikKIEV4cG9uZW50ID0gcidbZUVdWy0rXT9cZCsnCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggZjZkYTAyNi4uYzUyYzhhOCAxMDA2NDQKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtOTYsOCArOTYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgIChDYW4gb25seSBiZSB1c2VkIHdpdGggLS1jb3VudCBvciAtLXJlcG9ydC4pCiAKIEZpbHRlcnMsIG1heSBiZSByZXBlYXRlZCBtdWx0aXBsZSB0aW1lczoKLS0taWdub3JlLW1vZHVsZT08bW9kPiBJZ25vcmUgdGhlIGdpdmVuIG1vZHVsZSBhbmQgaXRzIHN1Ym1vZHVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAoaWYgaXQgaXMgYSBwYWNrYWdlKS4KKy0taWdub3JlLW1vZHVsZT08bW9kPiBJZ25vcmUgdGhlIGdpdmVuIG1vZHVsZShzKSBhbmQgaXRzIHN1Ym1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAoaWYgaXQgaXMgYSBwYWNrYWdlKS4gIEFjY2VwdHMgY29tbWEgc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBtb2R1bGUgbmFtZXMKIC0taWdub3JlLWRpcj08ZGlyPiAgICBJZ25vcmUgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSAobXVsdGlwbGUKICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBjYW4gYmUgam9pbmVkIGJ5IG9zLnBhdGhzZXApLgogIiIiICUgc3lzLmFyZ3ZbMF0pCkBAIC03MjUsNyArNzI2LDggQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgaWYgb3B0ID09ICItLWlnbm9yZS1tb2R1bGUiOgotICAgICAgICAgICAgaWdub3JlX21vZHVsZXMuYXBwZW5kKHZhbCkKKyAgICAgICAgICAgIGZvciBtb2QgaW4gdmFsLnNwbGl0KCIsIik6CisgICAgICAgICAgICAgICAgaWdub3JlX21vZHVsZXMuYXBwZW5kKG1vZC5zdHJpcCgpKQogICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICBpZiBvcHQgPT0gIi0taWdub3JlLWRpciI6CmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggOGJiMzVkOC4uM2RlNDFlMiAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtMTA5LDggKzEwOSw2IEBACiBCcmV0dCBDYW5ub24KIE1pa2UgQ2FybHRvbgogVGVycnkgQ2Fycm9sbAotQnJpYW4gTGVhaXIKLUx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24KIERvbm4gQ2F2ZQogUGVyIENlZGVycXZpc3QKIE9jdGF2aWFuIENlcm5hCkBAIC0zOTAsNiArMzg4LDcgQEAKIEJlbiBMYXVyaWUKIFNpbW9uIExhdwogQ2hyaXMgTGF3cmVuY2UKK0JyaWFuIExlYWlyCiBDaHJpc3RvcGhlciBMZWUKIElueWVvbCBMZWUKIEpvaG4gSi4gTGVlCkBAIC0zOTcsNyArMzk2LDkgQEAKIEx1YyBMZWZlYnZyZQogS2lwIExlaG1hbgogSm9lcmcgTGVobWFubgorTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbgogTWFyYy1BbmRyZSBMZW1idXJnCitKb2huIExlbnRvbgogTWFyayBMZXZpbnNvbgogV2lsbGlhbSBMZXdpcwogUm9iZXJ0IHZhbiBMaWVyZQpAQCAtNTI0LDYgKzUyNSw3IEBACiBGcmFu529pcyBQaW5hcmQKIFphY2ggUGluY3VzCiBNaWNoYWVsIFBpb3Ryb3dza2kKK01pY2hhZWwgUG9tcmFuaW5nCiBJdXN0aW4gUG9wCiBKb2huIFBvcHBsZXdlbGwKIEFtcml0IFByZW0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbW1hcG1vZHVsZS5jIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKaW5kZXggODMwMjc2Ny4uYWI5ZWVkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKQEAgLTI1NCwxOSArMjU0LDIyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1tbWFwX2ZpbmRfbWV0aG9kKG1tYXBfb2JqZWN0ICpzZWxmLAotCQkgUHlPYmplY3QgKmFyZ3MpCittbWFwX2dmaW5kKG1tYXBfb2JqZWN0ICpzZWxmLAorCSAgIFB5T2JqZWN0ICphcmdzLAorCSAgIGludCByZXZlcnNlKQogewogCVB5X3NzaXplX3Qgc3RhcnQgPSBzZWxmLT5wb3M7CisgICAgICAgIFB5X3NzaXplX3QgZW5kID0gc2VsZi0+c2l6ZTsKIAljaGFyICpuZWVkbGU7CiAJUHlfc3NpemVfdCBsZW47CiAKIAlDSEVDS19WQUxJRChOVUxMKTsKLQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfG46ZmluZCIsICZuZWVkbGUsICZsZW4sICZzdGFydCkpIHsKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgcmV2ZXJzZSA/ICJzI3xubjpyZmluZCIgOiAicyN8bm46ZmluZCIsCisJCQkgICAgICAmbmVlZGxlLCAmbGVuLCAmc3RhcnQsICZlbmQpKSB7CiAJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CiAJCWNoYXIgKnA7Ci0JCWNoYXIgKmUgPSBzZWxmLT5kYXRhICsgc2VsZi0+c2l6ZTsKKwkJY2hhciBzaWduID0gcmV2ZXJzZSA/IC0xIDogMTsKIAogICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApCiAJCQlzdGFydCArPSBzZWxmLT5zaXplOwpAQCAtMjc1LDcgKzI3OCwxOCBAQAogICAgICAgICAgICAgICAgIGVsc2UgaWYgKChzaXplX3Qpc3RhcnQgPiBzZWxmLT5zaXplKQogCQkJc3RhcnQgPSBzZWxmLT5zaXplOwogCi0JCWZvciAocCA9IHNlbGYtPmRhdGEgKyBzdGFydDsgcCArIGxlbiA8PSBlOyArK3ApIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5kIDwgMCkKKwkJCWVuZCArPSBzZWxmLT5zaXplOworCQlpZiAoZW5kIDwgMCkKKwkJCWVuZCA9IDA7CisJCWVsc2UgaWYgKChzaXplX3QpZW5kID4gc2VsZi0+c2l6ZSkKKwkJCWVuZCA9IHNlbGYtPnNpemU7CisKKwkJc3RhcnQgKz0gKFB5X3NzaXplX3Qpc2VsZi0+ZGF0YTsKKwkJZW5kICs9IChQeV9zc2l6ZV90KXNlbGYtPmRhdGE7CisKKwkJZm9yIChwID0gKGNoYXIgKikocmV2ZXJzZSA/IGVuZCAtIGxlbiA6IHN0YXJ0KTsKKwkJICAgICBwID49IChjaGFyICopc3RhcnQgJiYgcCArIGxlbiA8PSAoY2hhciAqKWVuZDsgcCs9c2lnbikgewogCQkJUHlfc3NpemVfdCBpOwogCQkJZm9yIChpID0gMDsgaSA8IGxlbiAmJiBuZWVkbGVbaV0gPT0gcFtpXTsgKytpKQogCQkJCS8qIG5vdGhpbmcgKi87CkBAIC0yODcsNiArMzAxLDIwIEBACiAJfQogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbW1hcF9maW5kX21ldGhvZChtbWFwX29iamVjdCAqc2VsZiwKKwkJIFB5T2JqZWN0ICphcmdzKQoreworCXJldHVybiBtbWFwX2dmaW5kKHNlbGYsIGFyZ3MsIDApOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbW1hcF9yZmluZF9tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsCisJCSBQeU9iamVjdCAqYXJncykKK3sKKwlyZXR1cm4gbW1hcF9nZmluZChzZWxmLCBhcmdzLCAxKTsKK30KKwogc3RhdGljIGludAogaXNfd3JpdGFibGUobW1hcF9vYmplY3QgKnNlbGYpCiB7CkBAIC02MDQsNiArNjMyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW1hcF9vYmplY3RfbWV0aG9kc1tdID0gewogCXsiY2xvc2UiLAkoUHlDRnVuY3Rpb24pIG1tYXBfY2xvc2VfbWV0aG9kLAlNRVRIX05PQVJHU30sCiAJeyJmaW5kIiwJKFB5Q0Z1bmN0aW9uKSBtbWFwX2ZpbmRfbWV0aG9kLAkJTUVUSF9WQVJBUkdTfSwKKwl7InJmaW5kIiwJKFB5Q0Z1bmN0aW9uKSBtbWFwX3JmaW5kX21ldGhvZCwJTUVUSF9WQVJBUkdTfSwKIAl7ImZsdXNoIiwJKFB5Q0Z1bmN0aW9uKSBtbWFwX2ZsdXNoX21ldGhvZCwJTUVUSF9WQVJBUkdTfSwKIAl7Im1vdmUiLAkoUHlDRnVuY3Rpb24pIG1tYXBfbW92ZV9tZXRob2QsCQlNRVRIX1ZBUkFSR1N9LAogCXsicmVhZCIsCShQeUNGdW5jdGlvbikgbW1hcF9yZWFkX21ldGhvZCwJCU1FVEhfVkFSQVJHU30sCmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmMgYi9QYXJzZXIvdG9rZW5pemVyLmMKaW5kZXggNzllZDg3ZC4uMzczM2Y0OSAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5jCisrKyBiL1BhcnNlci90b2tlbml6ZXIuYwpAQCAtMTM1MiwxOSArMTM1MiwzOCBAQAogCQkJCWdvdG8gaW1hZ2luYXJ5OwogI2VuZGlmCiAJCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKKwogCQkJCS8qIEhleCAqLworCQkJCWMgPSB0b2tfbmV4dGModG9rKTsKKwkJCQlpZiAoIWlzeGRpZ2l0KGMpKSB7CisJCQkJCXRvay0+ZG9uZSA9IEVfVE9LRU47CisJCQkJCXRva19iYWNrdXAodG9rLCBjKTsKKwkJCQkJcmV0dXJuIEVSUk9SVE9LRU47CisJCQkJfQogCQkJCWRvIHsKIAkJCQkJYyA9IHRva19uZXh0Yyh0b2spOwogCQkJCX0gd2hpbGUgKGlzeGRpZ2l0KGMpKTsKIAkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ28nIHx8IGMgPT0gJ08nKSB7CiAJCQkJLyogT2N0YWwgKi8KKwkJCQljID0gdG9rX25leHRjKHRvayk7CisJCQkJaWYgKGMgPCAnMCcgfHwgYyA+ICc4JykgeworCQkJCQl0b2stPmRvbmUgPSBFX1RPS0VOOworCQkJCQl0b2tfYmFja3VwKHRvaywgYyk7CisJCQkJCXJldHVybiBFUlJPUlRPS0VOOworCQkJCX0KIAkJCQlkbyB7CiAJCQkJCWMgPSB0b2tfbmV4dGModG9rKTsKIAkJCQl9IHdoaWxlICgnMCcgPD0gYyAmJiBjIDwgJzgnKTsKIAkJCX0KIAkJCWVsc2UgaWYgKGMgPT0gJ2InIHx8IGMgPT0gJ0InKSB7CiAJCQkJLyogQmluYXJ5ICovCisJCQkJYyA9IHRva19uZXh0Yyh0b2spOworCQkJCWlmIChjICE9ICcwJyAmJiBjICE9ICcxJykgeworCQkJCQl0b2stPmRvbmUgPSBFX1RPS0VOOworCQkJCQl0b2tfYmFja3VwKHRvaywgYyk7CisJCQkJCXJldHVybiBFUlJPUlRPS0VOOworCQkJCX0KIAkJCQlkbyB7CiAJCQkJCWMgPSB0b2tfbmV4dGModG9rKTsKIAkJCQl9IHdoaWxlIChjID09ICcwJyB8fCBjID09ICcxJyk7CmRpZmYgLS1naXQgYS9QeXRob24vbW9kc3VwcG9ydC5jIGIvUHl0aG9uL21vZHN1cHBvcnQuYwppbmRleCA2OGUxZmE0Li4zZDkwZWRlIDEwMDY0NAotLS0gYS9QeXRob24vbW9kc3VwcG9ydC5jCisrKyBiL1B5dGhvbi9tb2RzdXBwb3J0LmMKQEAgLTY5NiwxMSArNjk2LDIzIEBACiBpbnQgCiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChQeU9iamVjdCAqbSwgY29uc3QgY2hhciAqbmFtZSwgbG9uZyB2YWx1ZSkKIHsKLQlyZXR1cm4gUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWUsIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSkpOworCVB5T2JqZWN0ICpvID0gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKwlpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWUsIG8pID09IDApCisJCXJldHVybiAwOworCVB5X0RFQ1JFRihvKTsKKwlyZXR1cm4gLTE7CiB9CiAKIGludCAKIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KFB5T2JqZWN0ICptLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKLQlyZXR1cm4gUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWUsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbHVlKSk7CisJUHlPYmplY3QgKm8gPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh2YWx1ZSk7CisJaWYgKCFvKQorCQlyZXR1cm4gLTE7CisJaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lLCBvKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlQeV9ERUNSRUYobyk7CisJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL215c3RydG91bC5jIGIvUHl0aG9uL215c3RydG91bC5jCmluZGV4IGNmMjMwNTEuLmMyNjExMWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9teXN0cnRvdWwuYworKysgYi9QeXRob24vbXlzdHJ0b3VsLmMKQEAgLTExNiwxMiArMTE2LDMwIEBACiAJCWlmICgqc3RyID09ICcwJykgewogCQkJKytzdHI7CiAJCQlpZiAoKnN0ciA9PSAneCcgfHwgKnN0ciA9PSAnWCcpIHsKKwkJCQkvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLworCQkJCWlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKKwkJCQkJaWYgKHB0cikKKwkJCQkJCSpwdHIgPSBzdHI7CisJCQkJCXJldHVybiAwOworCQkJCX0KIAkJCQkrK3N0cjsKIAkJCQliYXNlID0gMTY7CiAJCQl9IGVsc2UgaWYgKCpzdHIgPT0gJ28nIHx8ICpzdHIgPT0gJ08nKSB7CisJCQkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KKwkJCQlpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKKwkJCQkJaWYgKHB0cikKKwkJCQkJCSpwdHIgPSBzdHI7CisJCQkJCXJldHVybiAwOworCQkJCX0KIAkJCQkrK3N0cjsKIAkJCQliYXNlID0gODsKIAkJCX0gZWxzZSBpZiAoKnN0ciA9PSAnYicgfHwgKnN0ciA9PSAnQicpIHsKKwkJCQkvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLworCQkJCWlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgeworCQkJCQlpZiAocHRyKQorCQkJCQkJKnB0ciA9IHN0cjsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQogCQkJCSsrc3RyOwogCQkJCWJhc2UgPSAyOwogCQkJfSBlbHNlIHsKQEAgLTE0MywyMiArMTYxLDQzIEBACiAJY2FzZSAxNjoKIAkJaWYgKCpzdHIgPT0gJzAnKSB7CiAJCQkrK3N0cjsKLQkJCWlmICgqc3RyID09ICd4JyB8fCAqc3RyID09ICdYJykKKwkJCWlmICgqc3RyID09ICd4JyB8fCAqc3RyID09ICdYJykgeworCQkJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCisJCQkJaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgeworCQkJCQlpZiAocHRyKQorCQkJCQkJKnB0ciA9IHN0cjsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQogCQkJCSsrc3RyOworCQkJfQogCQl9CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKCpzdHIgPT0gJzAnKSB7CiAJCQkrK3N0cjsKLQkJCWlmICgqc3RyID09ICdvJyB8fCAqc3RyID09ICdPJykKKwkJCWlmICgqc3RyID09ICdvJyB8fCAqc3RyID09ICdPJykgeworCQkJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCisJCQkJaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CisJCQkJCWlmIChwdHIpCisJCQkJCQkqcHRyID0gc3RyOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CiAJCQkJKytzdHI7CisJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlpZigqc3RyID09ICcwJykgewogCQkJKytzdHI7Ci0JCQlpZiAoKnN0ciA9PSAnYicgfHwgKnN0ciA9PSAnQicpCisJCQlpZiAoKnN0ciA9PSAnYicgfHwgKnN0ciA9PSAnQicpIHsKKwkJCQkvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLworCQkJCWlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgeworCQkJCQlpZiAocHRyKQorCQkJCQkJKnB0ciA9IHN0cjsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQogCQkJCSsrc3RyOworCQkJfQogCQl9CiAJCWJyZWFrOwogCX0K