ZGlmZiAtLWdpdCBhL2hvc3RfdGhyZWFkLnB5IGIvaG9zdF90aHJlYWQucHkKaW5kZXggZTg3NzUwNS4uMTczNjM0YiAxMDA2NDQKLS0tIGEvaG9zdF90aHJlYWQucHkKKysrIGIvaG9zdF90aHJlYWQucHkKQEAgLTM2LDcgKzM2LDggQEAKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHBhcmFtaWtvCiBmcm9tIGpzb25zY2hlbWEgaW1wb3J0IHZhbGlkYXRlIGFzIGpzX3YsIGV4Y2VwdGlvbnMgYXMganNfZQotaW1wb3J0IGxpYnZpcnQKKyNpbXBvcnQgbGlidmlydAoraW1wb3J0IGltcAogZnJvbSB2aW1fc2NoZW1hIGltcG9ydCBsb2NhbGluZm9fc2NoZW1hLCBob3N0aW5mb19zY2hlbWEKIGltcG9ydCByYW5kb20KICNmcm9tIGxvZ2dpbmcgaW1wb3J0IExvZ2dlcgpAQCAtNDQsNiArNDUsOSBAQAogCiAjVE9ETzogaW5zZXJ0IGEgbG9nZ2luZyBzeXN0ZW0KIAorZ2xvYmFsIGx2aXJ0X21vZHVsZQorbHZpcnRfbW9kdWxlPU5vbmUgICNsaWJ2aXJ0IG1vZHVsZSBpcyBjaGFyZ2VkIG9ubHkgaWYgbm90IGluIHRlc3QgbW9kZQorCiBjbGFzcyBob3N0X3RocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaG9zdCwgdXNlciwgZGIsIGRiX2xvY2ssIHRlc3QsIGltYWdlX3BhdGgsIGhvc3RfaWQsIHZlcnNpb24sIGRldmVsb3BfbW9kZSwgZGV2ZWxvcF9icmlkZ2VfaWZhY2UpOgogICAgICAgICAnJydJbml0IGEgdGhyZWFkLgpAQCAtNjAsNiArNjQsMTMgQEAKICAgICAgICAgc2VsZi5kYiA9IGRiCiAgICAgICAgIHNlbGYuZGJfbG9jayA9IGRiX2xvY2sKICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICBpZiBub3QgdGVzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdmlydF9tb2R1bGUgPSBpbXAuZmluZF9tb2R1bGUoImxpYnZpcnQiKQorICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBJbXBvcnRFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQ2Fubm90IGltcG9ydCBweXRob24tbGlidmlydC4gT3BlbnZpbSBub3QgcHJvcGVybHkgaW5zdGFsbGVkIiArc3RyKGUpKQorCisKICAgICAgICAgc2VsZi5kZXZlbG9wX21vZGUgPSBkZXZlbG9wX21vZGUKICAgICAgICAgc2VsZi5kZXZlbG9wX2JyaWRnZV9pZmFjZSA9IGRldmVsb3BfYnJpZGdlX2lmYWNlCiAgICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKQEAgLTEyMCw3ICsxMzEsNyBAQAogICAgICAgICAgICAgZXhjZXB0IHBhcmFtaWtvLnNzaF9leGNlcHRpb24uU1NIRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgdGV4dCA9IGUuYXJnc1swXQogICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogbG9hZF9sb2NhbGluZm8gc3NoIEV4Y2VwdGlvbjoiLCB0ZXh0Ci0gICAgICAgICAgICBleGNlcHQgbGlidmlydC5saWJ2aXJ0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBsdmlydF9tb2R1bGUubGlidmlydEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgdGV4dCA9IGUuZ2V0X2Vycm9yX21lc3NhZ2UoKQogICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogbG9hZF9sb2NhbGluZm8gbGlidmlydCBFeGNlcHRpb246IiwgdGV4dAogICAgICAgICAgICAgZXhjZXB0IHlhbWwuWUFNTEVycm9yIGFzIGV4YzoKQEAgLTE2NSw3ICsxNzYsNyBAQAogICAgICAgICBleGNlcHQgcGFyYW1pa28uc3NoX2V4Y2VwdGlvbi5TU0hFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHRleHQgPSBlLmFyZ3NbMF0KICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogbG9hZF9ob3N0aW5mbyBzc2ggRXhjZXB0aW9uOiIsIHRleHQKLSAgICAgICAgZXhjZXB0IGxpYnZpcnQubGlidmlydEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBsdmlydF9tb2R1bGUubGlidmlydEVycm9yIGFzIGU6CiAgICAgICAgICAgICB0ZXh0ID0gZS5nZXRfZXJyb3JfbWVzc2FnZSgpCiAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICI6IGxvYWRfaG9zdGluZm8gbGlidmlydCBFeGNlcHRpb246IiwgdGV4dAogICAgICAgICBleGNlcHQgeWFtbC5ZQU1MRXJyb3IgYXMgZXhjOgpAQCAtMjA2LDcgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgc2VsZi5uYW1lLCAiOiBzYXZlX2xvY2FsaW5mbyBzc2ggRXhjZXB0aW9uOiIsIHRleHQKICAgICAgICAgICAgICAgICBpZiAiU1NIIHNlc3Npb24gbm90IGFjdGl2ZSIgaW4gdGV4dDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2hfY29ubmVjdCgpCi0gICAgICAgICAgICBleGNlcHQgbGlidmlydC5saWJ2aXJ0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBsdmlydF9tb2R1bGUubGlidmlydEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgdGV4dCA9IGUuZ2V0X2Vycm9yX21lc3NhZ2UoKQogICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogc2F2ZV9sb2NhbGluZm8gbGlidmlydCBFeGNlcHRpb246IiwgdGV4dAogICAgICAgICAgICAgZXhjZXB0IHlhbWwuWUFNTEVycm9yIGFzIGV4YzoKQEAgLTkzMyw3ICs5NDQsNyBAQAogICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogY3JlYXRlIHhtbCBzZXJ2ZXIgZXJyb3I6IiwgeG1sCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0yLCB4bWwKICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogY3JlYXRlIHhtbDoiLCB4bWwKLSAgICAgICAgICAgIGF0cmlidXRlID0gbGlidmlydC5WSVJfRE9NQUlOX1NUQVJUX1BBVVNFRCBpZiBwYXVzZWQgPT0gInllcyIgZWxzZSAwCisgICAgICAgICAgICBhdHJpYnV0ZSA9IGx2aXJ0X21vZHVsZS5WSVJfRE9NQUlOX1NUQVJUX1BBVVNFRCBpZiBwYXVzZWQgPT0gInllcyIgZWxzZSAwCiAgICAgICAgICM0IFN0YXJ0IHRoZSBkb21haW4KICAgICAgICAgICAgIGlmIG5vdCByZWJ1aWxkOiAjZW5zdXJlcyB0aGF0IGFueSBwZW5kaW5nIGRlc3Ryb3lpbmcgc2VydmVyIGlzIGRvbmUKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9mb3JjZW9mZihUcnVlKQpAQCAtOTQ4LDcgKzk1OSw3IEBACiAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICI6IGxhdW5jaF9zZXJ2ZXIoJXMpIHNzaCBFeGNlcHRpb246ICVzIiAlKHNlcnZlcl9pZCwgdGV4dCkKICAgICAgICAgICAgIGlmICJTU0ggc2Vzc2lvbiBub3QgYWN0aXZlIiBpbiB0ZXh0OgogICAgICAgICAgICAgICAgIHNlbGYuc3NoX2Nvbm5lY3QoKQotICAgICAgICBleGNlcHQgbGlidmlydC5saWJ2aXJ0RXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IGx2aXJ0X21vZHVsZS5saWJ2aXJ0RXJyb3IgYXMgZToKICAgICAgICAgICAgIHRleHQgPSBlLmdldF9lcnJvcl9tZXNzYWdlKCkKICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogbGF1bmNoX3NlcnZlciglcykgbGlidmlydCBFeGNlcHRpb246ICVzIiAgJShzZXJ2ZXJfaWQsIHRleHQpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKQEAgLTk3MSwyNiArOTgyLDI2IEBACiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAKICAgICAgICAgCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbm4gPSBsaWJ2aXJ0Lm9wZW4oInFlbXUrc3NoOi8vIitzZWxmLnVzZXIrIkAiK3NlbGYuaG9zdCsiL3N5c3RlbSIpCisgICAgICAgICAgICBjb25uID0gbHZpcnRfbW9kdWxlLm9wZW4oInFlbXUrc3NoOi8vIitzZWxmLnVzZXIrIkAiK3NlbGYuaG9zdCsiL3N5c3RlbSIpCiAgICAgICAgICAgICBkb21haW5zPSAgY29ubi5saXN0QWxsRG9tYWlucygpIAogICAgICAgICAgICAgZG9tYWluX2RpY3Q9e30KICAgICAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKICAgICAgICAgICAgICAgICB1dWlkID0gZG9tYWluLlVVSURTdHJpbmcoKSA7CiAgICAgICAgICAgICAgICAgbGlidmlydF9zdGF0dXMgPSBkb21haW4uc3RhdGUoKQogICAgICAgICAgICAgICAgICNwcmludCBsaWJ2aXJ0X3N0YXR1cwotICAgICAgICAgICAgICAgIGlmIGxpYnZpcnRfc3RhdHVzWzBdID09IGxpYnZpcnQuVklSX0RPTUFJTl9SVU5OSU5HIG9yIGxpYnZpcnRfc3RhdHVzWzBdID09IGxpYnZpcnQuVklSX0RPTUFJTl9TSFVURE9XTjoKKyAgICAgICAgICAgICAgICBpZiBsaWJ2aXJ0X3N0YXR1c1swXSA9PSBsdmlydF9tb2R1bGUuVklSX0RPTUFJTl9SVU5OSU5HIG9yIGxpYnZpcnRfc3RhdHVzWzBdID09IGx2aXJ0X21vZHVsZS5WSVJfRE9NQUlOX1NIVVRET1dOOgogICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdHVzID0gIkFDVElWRSIKLSAgICAgICAgICAgICAgICBlbGlmIGxpYnZpcnRfc3RhdHVzWzBdID09IGxpYnZpcnQuVklSX0RPTUFJTl9QQVVTRUQ6CisgICAgICAgICAgICAgICAgZWxpZiBsaWJ2aXJ0X3N0YXR1c1swXSA9PSBsdmlydF9tb2R1bGUuVklSX0RPTUFJTl9QQVVTRUQ6CiAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0dXMgPSAiUEFVU0VEIgotICAgICAgICAgICAgICAgIGVsaWYgbGlidmlydF9zdGF0dXNbMF0gPT0gbGlidmlydC5WSVJfRE9NQUlOX1NIVVRPRkY6CisgICAgICAgICAgICAgICAgZWxpZiBsaWJ2aXJ0X3N0YXR1c1swXSA9PSBsdmlydF9tb2R1bGUuVklSX0RPTUFJTl9TSFVUT0ZGOgogICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdHVzID0gIklOQUNUSVZFIgotICAgICAgICAgICAgICAgIGVsaWYgbGlidmlydF9zdGF0dXNbMF0gPT0gbGlidmlydC5WSVJfRE9NQUlOX0NSQVNIRUQ6CisgICAgICAgICAgICAgICAgZWxpZiBsaWJ2aXJ0X3N0YXR1c1swXSA9PSBsdmlydF9tb2R1bGUuVklSX0RPTUFJTl9DUkFTSEVEOgogICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdHVzID0gIkVSUk9SIgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0dXMgPSBOb25lCiAgICAgICAgICAgICAgICAgZG9tYWluX2RpY3RbdXVpZF0gPSBuZXdfc3RhdHVzCiAgICAgICAgICAgICBjb25uLmNsb3NlCi0gICAgICAgIGV4Y2VwdCBsaWJ2aXJ0LmxpYnZpcnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgbHZpcnRfbW9kdWxlLmxpYnZpcnRFcnJvciBhcyBlOgogICAgICAgICAgICAgcHJpbnQgc2VsZi5uYW1lLCAiOiBnZXRfc3RhdGUoKSBFeGNlcHRpb24gJyIsIGUuZ2V0X2Vycm9yX21lc3NhZ2UoKQogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTEwNTYsMTUgKzEwNjcsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9pbWFnZShOb25lLCByZXEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY29ubiA9IGxpYnZpcnQub3BlbigicWVtdStzc2g6Ly8iK3NlbGYudXNlcisiQCIrc2VsZi5ob3N0KyIvc3lzdGVtIikKKyAgICAgICAgICAgICAgICBjb25uID0gbHZpcnRfbW9kdWxlLm9wZW4oInFlbXUrc3NoOi8vIitzZWxmLnVzZXIrIkAiK3NlbGYuaG9zdCsiL3N5c3RlbSIpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkb20gPSBjb25uLmxvb2t1cEJ5VVVJRFN0cmluZyhzZXJ2ZXJfaWQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IGxpYnZpcnQubGlidmlydEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IGx2aXJ0X21vZHVsZS5saWJ2aXJ0RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGUuZ2V0X2Vycm9yX21lc3NhZ2UoKQogICAgICAgICAgICAgICAgICAgICBpZiAnTG9va3VwQnlVVUlEU3RyaW5nJyBpbiB0ZXh0IG9yICdEb21haW4gbm90IGZvdW5kJyBpbiB0ZXh0IG9yICdObyBleGlzdGUgdW4gZG9taW5pbyBjb2luY2lkZW50ZScgaW4gdGV4dDoKICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogYWN0aW9uX29uX3NlcnZlcigiLHNlcnZlcl9pZCwiKSBsaWJ2aXJ0IGV4Y2VwdGlvbjoiLCB0ZXh0IAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgc2VsZi5uYW1lLCAiOiBhY3Rpb25fb25fc2VydmVyKCIsc2VydmVyX2lkLCIpIGxpYnZpcnQgZXhjZXB0aW9uOiIsIHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAnZm9yY2VPZmYnIGluIHJlcVsnYWN0aW9uJ106CkBAIC0xMTg1LDcgKzExOTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKSAgICAKLSAgICAgICAgICAgIGV4Y2VwdCBsaWJ2aXJ0LmxpYnZpcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IGx2aXJ0X21vZHVsZS5saWJ2aXJ0RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBjb25uIGlzIG5vdCBOb25lOiBjb25uLmNsb3NlCiAgICAgICAgICAgICAgICAgdGV4dCA9IGUuZ2V0X2Vycm9yX21lc3NhZ2UoKQogICAgICAgICAgICAgICAgIG5ld19zdGF0dXMgPSAiRVJST1IiCkBAIC0xMjQyLDcgKzEyNTMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIDAsIE5vbmUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgbm90IGxpYl9jb25uOgotICAgICAgICAgICAgICAgIGNvbm4gPSBsaWJ2aXJ0Lm9wZW4oInFlbXUrc3NoOi8vIitzZWxmLnVzZXIrIkAiK3NlbGYuaG9zdCsiL3N5c3RlbSIpCisgICAgICAgICAgICAgICAgY29ubiA9IGx2aXJ0X21vZHVsZS5vcGVuKCJxZW11K3NzaDovLyIrc2VsZi51c2VyKyJAIitzZWxmLmhvc3QrIi9zeXN0ZW0iKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb25uID0gbGliX2Nvbm4KICAgICAgICAgICAgICAgICAKQEAgLTEyNTMsNyArMTI2NCw3IEBACiAgICAgICAgICAgICBpZmFjZS5kZXN0cm95KCkKICAgICAgICAgICAgIGlmYWNlLmNyZWF0ZSgpCiAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICI6IHJlc3RvcmVfaWZhY2UgJyVzJyAlcyIgJSAobmFtZSwgbWFjKQotICAgICAgICBleGNlcHQgbGlidmlydC5saWJ2aXJ0RXJyb3IgYXMgZTogICAKKyAgICAgICAgZXhjZXB0IGx2aXJ0X21vZHVsZS5saWJ2aXJ0RXJyb3IgYXMgZToKICAgICAgICAgICAgIGVycm9yX3RleHQgPSBlLmdldF9lcnJvcl9tZXNzYWdlKCkKICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogcmVzdG9yZV9pZmFjZSAnJXMnICclcycgbGlidmlydCBleGNlcHRpb246ICVzIiAlKG5hbWUsIG1hYywgZXJyb3JfdGV4dCkgCiAgICAgICAgICAgICByZXQ9LTEKQEAgLTEzNDMsMTIgKzEzNTQsMTIgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvbm49Tm9uZQotICAgICAgICAgICAgICAgIGNvbm4gPSBsaWJ2aXJ0Lm9wZW4oInFlbXUrc3NoOi8vIitzZWxmLnVzZXIrIkAiK3NlbGYuaG9zdCsiL3N5c3RlbSIpCisgICAgICAgICAgICAgICAgY29ubiA9IGx2aXJ0X21vZHVsZS5vcGVuKCJxZW11K3NzaDovLyIrc2VsZi51c2VyKyJAIitzZWxmLmhvc3QrIi9zeXN0ZW0iKQogICAgICAgICAgICAgICAgIGRvbSA9IGNvbm4ubG9va3VwQnlVVUlEU3RyaW5nKHBvcnRbImluc3RhbmNlX2lkIl0pCiAgICAgICAgICAgICAgICAgaWYgb2xkX25ldDoKICAgICAgICAgICAgICAgICAgICAgdGV4dD0iXG4iLmpvaW4oeG1sKQogICAgICAgICAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICI6IGVkaXRfaWZhY2UgZGV0YWNoaW5nIFNSSU9WIGludGVyZmFjZSIsIHRleHQKLSAgICAgICAgICAgICAgICAgICAgZG9tLmRldGFjaERldmljZUZsYWdzKHRleHQsIGZsYWdzPWxpYnZpcnQuVklSX0RPTUFJTl9BRkZFQ1RfTElWRSkKKyAgICAgICAgICAgICAgICAgICAgZG9tLmRldGFjaERldmljZUZsYWdzKHRleHQsIGZsYWdzPWx2aXJ0X21vZHVsZS5WSVJfRE9NQUlOX0FGRkVDVF9MSVZFKQogICAgICAgICAgICAgICAgIGlmIG5ld19uZXQ6CiAgICAgICAgICAgICAgICAgICAgIHhtbFstMV0gPSIgIDx2bGFuPiAgIDx0YWcgaWQ9JyIgKyBzdHIocG9ydFsndmxhbiddKSArICInLz4gICA8L3ZsYW4+IgogICAgICAgICAgICAgICAgICAgICBzZWxmLnhtbF9sZXZlbCA9IDEKQEAgLTEzNTYsOSArMTM2Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIHhtbC5hcHBlbmQoJzwvaW50ZXJmYWNlPicpICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB0ZXh0PSJcbiIuam9pbih4bWwpCiAgICAgICAgICAgICAgICAgICAgIHByaW50IHNlbGYubmFtZSwgIjogZWRpdF9pZmFjZSBhdHRhY2hpbmcgU1JJT1YgaW50ZXJmYWNlIiwgdGV4dAotICAgICAgICAgICAgICAgICAgICBkb20uYXR0YWNoRGV2aWNlRmxhZ3ModGV4dCwgZmxhZ3M9bGlidmlydC5WSVJfRE9NQUlOX0FGRkVDVF9MSVZFKQorICAgICAgICAgICAgICAgICAgICBkb20uYXR0YWNoRGV2aWNlRmxhZ3ModGV4dCwgZmxhZ3M9bHZpcnRfbW9kdWxlLlZJUl9ET01BSU5fQUZGRUNUX0xJVkUpCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZXhjZXB0IGxpYnZpcnQubGlidmlydEVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgbHZpcnRfbW9kdWxlLmxpYnZpcnRFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHRleHQgPSBlLmdldF9lcnJvcl9tZXNzYWdlKCkKICAgICAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICI6IGVkaXRfaWZhY2UoIixwb3J0WyJpbnN0YW5jZV9pZCJdLCIpIGxpYnZpcnQgZXhjZXB0aW9uOiIsIHRleHQgCiAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9odHRwc2VydmVyLnB5IGIvaHR0cHNlcnZlci5weQppbmRleCA5ZjI2NzM3Li5lY2Y4NzhjIDEwMDY0NAotLS0gYS9odHRwc2VydmVyLnB5CisrKyBiL2h0dHBzZXJ2ZXIucHkKQEAgLTM3LDcgKzM3LDggQEAKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCBvcwotaW1wb3J0IFJBRGNsYXNzCitpbXBvcnQgaW1wCisjaW1wb3J0IG9ubHkgaWYgbmVlZGVkIGJlY2F1c2Ugbm90IG5lZWRlZCBpbiB0ZXN0IG1vZGUuIFRvIGFsbG93IGFuIGVhc2llciBpbnN0YWxsYXRpb24gICBpbXBvcnQgUkFEY2xhc3MKIGZyb20ganNvbnNjaGVtYSBpbXBvcnQgdmFsaWRhdGUgYXMganNfdiwgZXhjZXB0aW9ucyBhcyBqc19lCiBpbXBvcnQgaG9zdF90aHJlYWQgYXMgaHQKIGZyb20gdmltX3NjaGVtYSBpbXBvcnQgaG9zdF9uZXdfc2NoZW1hLCBob3N0X2VkaXRfc2NoZW1hLCB0ZW5hbnRfbmV3X3NjaGVtYSwgXApAQCAtNTAsNiArNTEsOCBAQAogZ2xvYmFsIG15CiBnbG9iYWwgdXJsX2Jhc2UKIGdsb2JhbCBjb25maWdfZGljCitnbG9iYWwgUkFEY2xhc3NfbW9kdWxlCitSQURjbGFzcz1Ob25lICAjUkFEY2xhc3MgbW9kdWxlIGlzIGNoYXJnZWQgb25seSBpZiBub3QgaW4gdGVzdCBtb2RlCiAKIHVybF9iYXNlPSIvb3BlbnZpbSIKIApAQCAtNTM1LDkgKzUzOCwxNCBAQAogICAgICAgICBpcF9uYW1lPWhvc3RbJ2lwX25hbWUnXQogICAgICAgICB1c2VyPWhvc3RbJ3VzZXInXQogICAgICAgICBwYXNzd29yZD1ob3N0LmdldCgncGFzc3dvcmQnLCBOb25lKQorICAgICAgICBpZiBub3QgUkFEY2xhc3NfbW9kdWxlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIFJBRGNsYXNzX21vZHVsZSA9IGltcC5maW5kX21vZHVsZSgiUkFEY2xhc3MiKQorICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBJbXBvcnRFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQ2Fubm90IGltcG9ydCBSQURjbGFzcy5weSBPcGVudmltIG5vdCBwcm9wZXJseSBpbnN0YWxsZWQiICtzdHIoZSkpCiAKICAgICAgICAgI2ZpbGwgcmFkIGluZm8KLSAgICAgICAgcmFkID0gUkFEY2xhc3MuUkFEY2xhc3MoKQorICAgICAgICByYWQgPSBSQURjbGFzc19tb2R1bGUuUkFEY2xhc3MoKQogICAgICAgICAocmV0dXJuX3N0YXR1cywgY29kZSkgPSByYWQub2J0YWluX1JBRCh1c2VyLCBwYXNzd29yZCwgaXBfbmFtZSkKICAgICAgICAgCiAgICAgICAgICNyZXR1cm4gCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtVUJVTlRVMTYuMC40LnNoIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVVCVU5UVTE2LjAuNC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDgyYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb25maWd1cmUtY29tcHV0ZS1ub2RlLVVCVU5UVTE2LjAuNC5zaApAQCAtMCwwICsxLDU0MyBAQAorIyEvYmluL2Jhc2gKKworIyMKKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbDs25pY2EgSW52ZXN0aWdhY2nDs24geSBEZXNhcnJvbGxvLCBTLkEuVS4KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygb3BlbnZpbQorIyBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbgorIyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisjIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgRm9yIHRob3NlIHVzYWdlcyBub3QgY292ZXJlZCBieSB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIHBsZWFzZQorIyBjb250YWN0IHdpdGg6IG5mdmxhYnNAdGlkLmVzCisjIworCisjIEF1dGhvcnM6IEFudG9uaW8gTG9wZXosIFBhYmxvIE1vbnRlcywgQWxmb25zbyBUaWVybm8KKyMgSnVuZSAyMDE1CisKKyMgUGVyc29uYWxpemUgUkhFTDcuMSBvbiBjb21wdXRlIG5vZGVzCisjIFByZXBhcmVkIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5nIG5ldHdvcmsgY2FyZCBkcml2ZXJzOgorIyAJdGczLCBpZ2IgZHJpdmVycyBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2VzCisjIAlpeGdiZSAoSW50ZWwgTmlhbnRpYykgYW5kIGk0MGUgKEludGVsIEZvcnR2aWxsZSkgZHJpdmVycyBmb3IgZGF0YSBwbGFuZSBpbnRlcmZhY2VzCisKKyMgVG8gZG93bmxvYWQ6CisjIHdnZXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25mdmxhYnMvb3Blbm1hbm8vbWFzdGVyL3NjcmlwdHMvY29uZmlndXJlLWNvbXB1dGUtbm9kZS1VQlVOVFUxNC4wNC5zaAorIyBUbyBleGVjdXRlOgorIyBjaG1vZCAreCAuL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtVUJVTlRVMTQuMDQuc2gKKyMgc3VkbyAuL2NvbmZpZ3VyZS1jb21wdXRlLW5vZGUtUkhFTDcuMS5zaCA8dXNlcj4gPGlmYWNlPgorCisjIEFzc3VtcHRpb25zOgorIyBBbGwgdmlydHVhbGl6YXRpb24gb3B0aW9ucyBhY3RpdmF0ZWQgb24gQklPUyAodnQtZCwgdnQteCwgU1ItSU9WLCBubyBwb3dlciBzYXZpbmdzLi4uKQorIyBSSEVMNy4xIGluc3RhbGxlZCB3aXRob3V0IC9ob21lIHBhcnRpdGlvbiBhbmQgd2l0aCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIHNlbGVjdGlvbjoKKyMgQGJhc2UsIEBjb3JlLCBAZGV2ZWxvcG1lbnQsIEBuZXR3b3JrLWZpbGUtc3lzdGVtLWNsaWVudCwgQHZpcnR1YWxpemF0aW9uLWh5cGVydmlzb3IsIEB2aXJ0dWFsaXphdGlvbi1wbGF0Zm9ybSwgQHZpcnR1YWxpemF0aW9uLXRvb2xzCisKKworZnVuY3Rpb24gdXNhZ2UoKXsKKyAgICBlY2hvIC1lICJVc2FnZTogc3VkbyAkMCBbLXldIDx1c2VyLW5hbWU+ICBbIDxpZmFjZS1uYW1lPiAgWzxpcC1hZGRyZXNzPnxkaGNwXSBdIgorICAgIGVjaG8gLWUgIiAgQ29uZmlndXJlIGNvbXB1dGUgaG9zdCBmb3IgVklNIHVzYWdlLiAodmVyc2lvbiAwLjQpLiBQYXJhbXM6IgorICAgIGVjaG8gLWUgIiAgICAgLXkgIGRvIG5vdCBwcm9tcHQgZm9yIGNvbmZpcm1hdGlvbi4gSWYgYSBuZXcgdXNlciBpcyBjcmVhdGVkLCB0aGUgdXNlciBuYW1lIGlzIHNldCBhcyBwYXNzd29yZCIKKyAgICBlY2hvIC1lICIgICAgIDx1c2VyLW5hbWU+IENyZWF0ZSBpZiBub3QgZXhpc3QgYW5kIGNvbmZpZ3VyZSB0aGlzIHVzZXIgZm9yIG9wZW52aW0gdG8gY29ubmVjdCIKKyAgICBlY2hvIC1lICIgICAgIDxpZmFjZS1uYW1lPiBpZiBzdXBsaWVkIGNyZWF0ZXMgYnJpZGdlIGludGVyZmFjZXMgb24gdGhpcyBpbnRlcmZhY2UsIG5lZWRlZCBmb3Igb3BlbnZpbSIKKyAgICBlY2hvIC1lICIgICAgIGlwIG9yIGRoY3AgaWYgc3VwbGllZCwgY29uZmlndXJlIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGlzIGlwIGFkZHJlc3MgKC8yNCkgb3IgJ2RoY3AnICIKK30KKworCisjMSBDSEVDSyBpbnB1dCBwYXJhbWV0ZXJzCisjMS4xIHJvb3QgcHJpdmlsZWdlcworWyAiJFVTRVIiICE9ICJyb290IiBdICYmIGVjaG8gIk5lZWRlZCByb290IHByaXZpbGVnZXMiICYmIHVzYWdlICYmIGV4aXQgLTEKKworIzEuMiBpbnB1dCBwYXJhbWV0ZXJzCitGT1JDRT0iIgord2hpbGUgZ2V0b3B0cyAieSIgbzsgZG8KKyAgICBjYXNlICIke299IiBpbgorICAgICAgICB5KQorICAgICAgICAgICAgRk9SQ0U9InllcyIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICB1c2FnZQorICAgICAgICAgICAgZXhpdCAtMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCitzaGlmdCAkKChPUFRJTkQtMSkpCisKKworCitpZiBbICQjIC1sdCAxIF0KK3RoZW4KKyAgdXNhZ2UKKyAgZXhpdAorZmkKKworCit1c2VyX25hbWU9JDEKK2ludGVyZmFjZT0kMgoraXBfaWZhY2U9JDMKKworaWYgWyAtbiAiJGludGVyZmFjZSIgXSAmJiAhIGlmY29uZmlnICRpbnRlcmZhY2UgJj4gL2Rldi9udWxsCit0aGVuCisgIGVjaG8gIkVycm9yOiBpbnRlcmZhY2UgJyRpbnRlcmZhY2UnIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0iCisgIHVzYWdlCisgIGV4aXQgMQorZmkKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgSU5TVEFMTCBORUVERUQgUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworCisjIFJlcXVpcmVkIHBhY2thZ2VzCithcHQtZ2V0IC15IHVwZGF0ZQorI2FwdC1nZXQgLXkgaW5zdGFsbCBncnViLWNvbW1vbiBzY3JlZW4gdmlydC1tYW5hZ2VyIGV0aHRvb2wgYnVpbGQtZXNzZW50aWFsIHgxMS1jb21tb24geDExLXV0aWxzIHgxMS1hcHBzIGxpYmd1ZXN0ZnMtdG9vbHMgaHdsb2MgbGliZ3Vlc3Rmcy10b29scyBudW1hY3RsIHZsYW4gbmZzLWNvbW1vbiBuZnMta2VybmVsLXNlcnZlcgorYXB0LWdldCAteSBpbnN0YWxsIGdydWItY29tbW9uIHNjcmVlbiB2aXJ0LW1hbmFnZXIgZXRodG9vbCBidWlsZC1lc3NlbnRpYWwgeDExLWNvbW1vbiB4MTEtdXRpbHMgbGliZ3Vlc3Rmcy10b29scyBod2xvYyBsaWJndWVzdGZzLXRvb2xzIG51bWFjdGwgdmxhbiBuZnMtY29tbW9uIG5mcy1rZXJuZWwtc2VydmVyCisKK2VjaG8gIlJlbW92ZSB1bm5lZWRlZCBwYWNrYWdlcy4uLi4uIgorYXB0LWdldCAteSBhdXRvcmVtb3ZlCisjIFNlbGludXggbWFuYWdlbWVudAorI3l1bSBpbnN0YWxsIC15IHBvbGljeWNvcmV1dGlscy1weXRob24KKworCisKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgIElOU1RBTEwgVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKKworIyBBZGQgcmVxdWlyZWQgZ3JvdXBzCitncm91cGFkZCAtZiBhZG1pbgorZ3JvdXBhZGQgLWYgbGlidmlydCAgICNmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IGJlIGxpYnZpcnRkCisKKyMgQWRkcyB1c2VyLCBkZWZhdWx0IHBhc3N3b3JkIHNhbWUgYXMgbmFtZQoraWYgZ3JlcCAtcSAiXiR7dXNlcl9uYW1lfToiIC9ldGMvcGFzc3dkCit0aGVuCisgICN1c2VyIGV4aXN0LCBhZGQgdG8gZ3JvdXAKKyAgZWNobyAiYWRkaW5nIHVzZXIgJHt1c2VyX25hbWV9IHRvIGdyb3VwcyBsaWJ2aXJ0LGFkbWluIgorICB1c2VybW9kIC1hIC1HIGxpYnZpcnQsYWRtaW4gLWcgYWRtaW4gJHVzZXJfbmFtZQorZWxzZQorICAjY3JlYXRlIHVzZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QKKyAgWyAteiAiJEZPUkNFIiBdICYmIHJlYWQgLXAgInVzZXIgJyR7dXNlcl9uYW1lfScgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSAoWS9uKSIga2sKKyAgaWYgISBbIC16ICIka2siIC1vICIka2siPSJ5IiAtbyAiJGtrIj0iWSIgXQorICB0aGVuCisgICAgZXhpdAorICBmaQorICBlY2hvICJjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgdXNlciB7dXNlcl9uYW1lfSIKKyAgdXNlcmFkZCAtbSAtRyBsaWJ2aXJ0LGFkbWluIC1nIGFkbWluICR1c2VyX25hbWUKKyAgI1Bhc3N3b3JkCisgIGlmIFsgLXogIiRGT1JDRSIgXQorICB0aGVuCisgICAgIGVjaG8gIlByb3ZpZGUgYSBwYXNzd29yZCBmb3IgJHVzZXJfbmFtZSIKKyAgICAgcGFzc3dkICR1c2VyX25hbWUKKyAgZWxzZQorICAgICBlY2hvIC1lICIkdXNlcl9uYW1lXG4kdXNlcl9uYW1lIiB8IHBhc3N3ZCAtLXN0ZGluICR1c2VyX25hbWUKKyAgZmkKK2ZpCisKKyMjIEFsbG93IGFkbWluIHVzZXJzIHRvIGFjY2VzcyB3aXRob3V0IHBhc3N3b3JkCisjaWYgISBncmVwIC1xICIjb3Blbm1hbm8iIC9ldGMvc3Vkb2VycworI3RoZW4KKyMgICAgY2F0ID4+IC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoIDw8IEVPTAorIyMhL2Jpbi9iYXNoCisjY2F0IFwkMSB8IGF3ayAnKFwkMH4icmVxdWlyZXR0eSIpe3ByaW50ICIjIlwkMH0oXCQwIX4icmVxdWlyZXR0eSIpe3ByaW50IFwkMH0nID4gdG1wCisjY2F0IHRtcCA+IFwkMQorI3JtIHRtcAorI2VjaG8gIiIgPj4gXCQxCisjZWNobyAiI29wZW5tYW5vIGFsbG93IHRvIGdyb3VwIGFkbWluIHRvIGdyYW50IHJvb3QgcHJpdmlsZWdlcyB3aXRob3V0IHBhc3N3b3JkIiA+PiBcJDEKKyNlY2hvICIlYWRtaW4gQUxMPShBTEwpIE5PUEFTU1dEOiBBTEwiID4+IFwkMQorI0VPTAorIyAgICBjaG1vZCAreCAvaG9tZS8ke3VzZXJfbmFtZX0vc2NyaXB0X3Zpc3Vkby5zaAorIyAgICBlY2hvICJhbGxvd2luZyBhZG1pbiB1c2VyIHRvIGdldCByb290IHByaXZpbGVnZXMgd2l0aHV0IHBhc3N3b3JkIgorIyAgICBleHBvcnQgRURJVE9SPS9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoICYmIHN1ZG8gLUUgdmlzdWRvCisjICAgIHJtIC1mIC9ob21lLyR7dXNlcl9uYW1lfS9zY3JpcHRfdmlzdWRvLnNoCisjZmkKKworCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICBJTlNUQUxMIEhVR0VQQUdFUyBJU09MQ1BVUyBHUlVCICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCisKKyMgSHVnZSBwYWdlcyAxRyBhdXRvIG1vdW50Citta2RpciAtcCAvbW50L2h1Z2UKK2lmICEgZ3JlcCAtcSAiSHVnZSBwYWdlcyIgL2V0Yy9mc3RhYgordGhlbgorICBlY2hvICIiID4+IC9ldGMvZnN0YWIKKyAgZWNobyAiIyBIdWdlIHBhZ2VzIiA+PiAvZXRjL2ZzdGFiCisgIGVjaG8gIm5vZGV2IC9tbnQvaHVnZSBodWdldGxiZnMgcGFnZXNpemU9MUdCIDAgMCIgPj4gL2V0Yy9mc3RhYgorICBlY2hvICIiID4+IC9ldGMvZnN0YWIKK2ZpCisKKyMgSHVnZSBwYWdlcyByZXNlcnZhdGlvbiBzZXJ2aWNlCitpZiAhIFsgLWYgL2xpYi9zeXN0ZW1kL3N5c3RlbS9odWdldGxiLWdpZ2FudGljLXBhZ2VzLnNlcnZpY2UgXQordGhlbgorICBlY2hvICJjb25maWd1cmluZyBodWdlIHBhZ2VzIHNlcnZpY2UiCisgIGVjaG8gIltVbml0XQorRGVzY3JpcHRpb249SHVnZVRMQiBHaWdhbnRpYyBQYWdlcyBSZXNlcnZhdGlvbgorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQmVmb3JlPWRldi1odWdlcGFnZXMubW91bnQKK0NvbmRpdGlvblBhdGhFeGlzdHM9L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlCitDb25kaXRpb25LZXJuZWxDb21tYW5kTGluZT1odWdlcGFnZXN6PTFHCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitFeGVjU3RhcnQ9L3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1zeXNpbml0LnRhcmdldCIgPj4gL2xpYi9zeXN0ZW1kL3N5c3RlbS9odWdldGxiLWdpZ2FudGljLXBhZ2VzLnNlcnZpY2UKKworICAgICMgIGNhdCA+IC91c3IvbGliL3N5c3RlbWQvc3lzdGVtL2h1Z2V0bGItZ2lnYW50aWMtcGFnZXMuc2VydmljZSA8PCBFT0wKKyAgICAjW1VuaXRdCisgICAgI0Rlc2NyaXB0aW9uPUh1Z2VUTEIgR2lnYW50aWMgUGFnZXMgUmVzZXJ2YXRpb24KKyAgICAjRGVmYXVsdERlcGVuZGVuY2llcz1ubworICAgICNCZWZvcmU9ZGV2LWh1Z2VwYWdlcy5tb3VudAorICAgICNDb25kaXRpb25QYXRoRXhpc3RzPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZQorICAgICNDb25kaXRpb25LZXJuZWxDb21tYW5kTGluZT1odWdlcGFnZXN6PTFHCisgICAjCisgICAgI1tTZXJ2aWNlXQorICAgICNUeXBlPW9uZXNob3QKKyAgICAjUmVtYWluQWZ0ZXJFeGl0PXllcworICAgICNFeGVjU3RhcnQ9L3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgICAjCisgICAgI1tJbnN0YWxsXQorICAgICNXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorICAgICNFT0wKK2ZpCisKKworIyBHZXQgaXNvbGNwdXMKK2lzb2xjcHVzPWBnYXdrICdCRUdJTntwcmU9LTI7fQorICAoJDE9PSJwcm9jZXNzb3IiKXtwcm89JDM7fQorICAoJDE9PSJjb3JlIiAmJiAkNCE9MCl7CisgICAgIGlmIChwcmUrMT09cHJvKXtlbmRyYW5nZT0iLSIgcHJvfQorICAgICBlbHNle2NwdXM9Y3B1cyBlbmRyYW5nZSBzZXAgcHJvOyBzZXA9IiwiOyBlbmRyYW5nZT0iIjt9OworICAgICBwcmU9cHJvO30KKyAgRU5Ee3ByaW50ZigiJXMiLGNwdXMgZW5kcmFuZ2UpO30nIC9wcm9jL2NwdWluZm9gCisKKworZWNobyAiQ1BVUzogJGlzb2xjcHVzIgorCisjIEh1Z2UgcGFnZXMgcmVzZXJ2YXRpb24gZmlsZTogcmVzZXJ2aW5nIGFsbCBtZW1vcnkgYXBhcnQgZnJvbSA0R0IgcGVyIE5VTUEgbm9kZQorIyBHZXQgdGhlIG51bWJlciBvZiBodWdlcGFnZXM6IGFsbCBtZW1vcnkgYnV0IDhHQiByZXNlcnZlZCBmb3IgdGhlIE9TCisjdG90YWxtZW09YGRtaWRlY29kZSAtLXR5cGUgMTd8Z3JlcCBTaXplIHxncmVwIE1CIHxnYXdrICd7c3VtYSs9JDJ9IEVORCB7cHJpbnQgc3VtYS8xMDI0fSdgCisjaHVnZXBhZ2VzPSQoKCR0b3RhbG1lbS04KSkKKworaWYgISBbIC1mIC91c3IvbGliL3N5c3RlbWQvaHVnZXRsYi1yZXNlcnZlLXBhZ2VzIF0KK3RoZW4KKyAgY2F0ID4gL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMgPDwgRU9MCisjIS9iaW4vYmFzaAorbm9kZXNfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL25vZGUvCitpZiBbICEgLWQgXCRub2Rlc19wYXRoIF07IHRoZW4KKyAgICAgICAgZWNobyAiRVJST1I6IFwkbm9kZXNfcGF0aCBkb2VzIG5vdCBleGlzdCIKKyAgICAgICAgZXhpdCAxCitmaQorCityZXNlcnZlX3BhZ2VzKCkKK3sKKyAgICAgICAgZWNobyBcJDEgPiBcJG5vZGVzX3BhdGgvXCQyL2h1Z2VwYWdlcy9odWdlcGFnZXMtMTA0ODU3NmtCL25yX2h1Z2VwYWdlcworfQorCisjIFRoaXMgZXhhbXBsZSByZXNlcnZlcyBhbGwgYXZhaWxhYmxlIG1lbW9yeSBhcGFydCBmcm9tIDQgR0IgZm9yIGxpbnV4CisjIHVzaW5nIDFHQiBzaXplLiBZb3UgY2FuIG1vZGlmeSBpdCB0byB5b3VyIG5lZWRzIG9yIGNvbW1lbnQgdGhlIGxpbmVzCisjIHRvIGF2b2lkIHJlc2VydmUgbWVtb3J5IGluIGEgbnVtYSBub2RlCitFT0wKKyAgZm9yIGYgaW4gL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGU/L21lbWluZm8KKyAgZG8KKyAgICBub2RlPWBoZWFkIC1uMSAkZiB8IGdhd2sgJygkNT09ImtCIil7cHJpbnQgJDJ9J2AKKyAgICBtZW1vcnk9YGhlYWQgLW4xICRmIHwgZ2F3ayAnKCQ1PT0ia0IiKXtwcmludCAkNH0nYAorICAgIG1lbW9yeT0kKChtZW1vcnkrMTA0ODU3Ni0xKSkgICAjbWVtb3J5IG11c3QgYmUgY2VpbGVkCisgICAgbWVtb3J5PSQoKG1lbW9yeS8xMDQ4NTc2KSkgICAjZnJvbSBga0IgdG8gR0IKKyAgICAjaWYgbWVtb3J5CisgICAgWyAkbWVtb3J5IC1ndCA0IF0gJiYgZWNobyAicmVzZXJ2ZV9wYWdlcyAkKChtZW1vcnktNCkpIG5vZGUkbm9kZSIgPj4gL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgZG9uZQorCisgICMgUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gZW5hYmxlIGh1Z2UgcGFnZXMgZWFybHkgYm9vdCByZXNlcnZhdGlvbjoKKyAgY2htb2QgK3ggL3Vzci9saWIvc3lzdGVtZC9odWdldGxiLXJlc2VydmUtcGFnZXMKKyAgc3lzdGVtY3RsIGVuYWJsZSBodWdldGxiLWdpZ2FudGljLXBhZ2VzCitmaQorCisjIFByZXBhcmVzIHRoZSB0ZXh0IHRvIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBncnViIGxpbmUsIGluY2x1ZGluZyBibGFja2xpc3RpbmcgaXhnYmV2ZiBkcml2ZXIgaW4gdGhlIGhvc3QKK21lbXRvdGFsPWBncmVwIE1lbVRvdGFsIC9wcm9jL21lbWluZm8gfCBhd2sgJ3sgcHJpbnQgJDIgfScgYAoraHBhZ2VzPSQoKCAoJG1lbXRvdGFsLygxMDI0KjEwMjQpKS04ICkpCisKK21lbXRvdGFsPSQoKG1lbXRvdGFsKzEwNDg1NzYtMSkpICAgI21lbW9yeSBtdXN0IGJlIGNlaWxlZAorbWVtdG90YWw9JCgobWVtdG90YWwvMTA0ODU3NikpICAgI2Zyb20gYGtCIHRvIEdCYQoraHBhZ2VzPSQoKG1lbXRvdGFsLTgpKQorW1sgJGhwYWdlcyAtbHQgMCBdXSAmJiBocGFnZXM9MAorCisKK2VjaG8gIi0tLS0tLT4gbWVtdG90YWw6ICRtZW10b3RhbCIKKwordGV4dG9rZXJuZWw9IiBpbnRlbF9pb21tdT1vbiBkZWZhdWx0X2h1Z2VwYWdlc3o9MUcgaHVnZXBhZ2Vzej0xRyBodWdlcGFnZXM9JGhwYWdlcyBpc29sY3B1cz0kaXNvbGNwdXMgbW9kcHJvYmUuYmxhY2tsaXN0PWl4Z2JldmYgbW9kcHJvYmUuYmxhY2tsaXN0PWk0MGV2ZiIKKworZWNobyAiVGV4dCB0byBrZXJuZWw6ICR0ZXh0b2tlcm5lbCIKKworCisjIEFkZCB0ZXh0IHRvIHRoZSBrZXJuZWwgbGluZQoraWYgISBncmVwIC1xICIgaW50ZWxfaW9tbXU9b24gZGVmYXVsdF9odWdlcGFnZXN6PTFHIGh1Z2VwYWdlc3o9MUciIC9ldGMvZGVmYXVsdC9ncnViCit0aGVuCisgIGVjaG8gIj4+Pj4+Pj4gIGFkZGluZyBjbWRsaW5lICR7dGV4dG9rZXJuZWx9IgorICBzZWQgLWkgIi9eR1JVQl9DTURMSU5FX0xJTlVYX0RFRkFVTFQ9L3MvXCJcJC8ke3RleHRva2VybmVsfVwiLyIgL2V0Yy9kZWZhdWx0L2dydWIKKyAgc2VkIC1pICIvXkdSVUJfQ01ETElORV9MSU5VWD0vcy9cIlwkLyR7dGV4dG9rZXJuZWx9XCIvIiAvZXRjL2RlZmF1bHQvZ3J1YgorCisgIHVwZGF0ZS1ncnViCisgICMgQklPUyBiYXNlZCBzeXN0ZW1zCisgIGdydWItbWtjb25maWcgLW8gL2Jvb3QvZWZpL0VGSS91YnVudHUvZ3J1Yi5jZmcKKyAgIyBVRUZJIGJhc2VkIHN5c3RlbXMKKyAgZ3J1Yi1ta2NvbmZpZyAtbyAvYm9vdC9ncnViL2dydWIuY2ZnCitmaQorCitlY2hvICcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICBPVEhFUiBDT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCisKKyMgTGlua3MgdGhlIE9wZW5NQU5PIHJlcXVpcmVkIGZvbGRlciAvb3B0L1ZORi9pbWFnZXMgdG8gL3Zhci9saWIvbGlidmlydC9pbWFnZXMuIFRoZSBPUyBpbnN0YWxsYXRpb24KKyMgc2hvdWxkIGhhdmUgb25seSBhIC8gcGFydGl0aW9uIHdpdGggYWxsIHBvc3NpYmxlIHNwYWNlIGF2YWlsYWJsZQorCitlY2hvICIgbGluayAvb3B0L1ZORi9pbWFnZXMgdG8gL3Zhci9saWIvbGlidmlydC9pbWFnZXMiCitpZiBbICIkdXNlcl9uYW1lIiAhPSAiIiBdCit0aGVuCisgICNta2RpciAtcCAvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcworICAjY2hvd24gLVIgJHt1c2VyX25hbWV9OmFkbWluIC9ob21lLyR7dXNlcl9uYW1lfS9WTkZfaW1hZ2VzCisgICNjaG1vZCBnbyt4ICRIT01FCisKKyAgIyBUaGUgb3JjaGVzdGF0b3IgbmVlZHMgdG8gbGluayB0aGUgaW1hZ2VzIGZvbGRlcgorICBybSAtZiAvb3B0L1ZORi9pbWFnZXMKKyAgbWtkaXIgLXAgL29wdC9WTkYvCisgIGxuIC1zIC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzIC9vcHQvVk5GL2ltYWdlcworICBjaG93biAtUiAke3VzZXJfbmFtZX06YWRtaW4gL29wdC9WTkYKKyAgY2hvd24gLVIgcm9vdDphZG1pbiAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcworICBjaG1vZCBnK3J3eCAvdmFyL2xpYi9saWJ2aXJ0L2ltYWdlcworCisgICMgU2VsaW51eCBtYW5hZ2VtZW50CisgICNlY2hvICJjb25maWd1cmUgIFNlbGludXggbWFuYWdlbWVudCIKKyAgI3NlbWFuYWdlIGZjb250ZXh0IC1hIC10IHZpcnRfaW1hZ2VfdCAiL2hvbWUvJHt1c2VyX25hbWV9L1ZORl9pbWFnZXMoLy4qKT8iCisgICNjYXQgL2V0Yy9zZWxpbnV4L3RhcmdldGVkL2NvbnRleHRzL2ZpbGVzL2ZpbGVfY29udGV4dHMubG9jYWwgfGdyZXAgdmlydF9pbWFnZQorICAjcmVzdG9yZWNvbiAtUiAtdiAvaG9tZS8ke3VzZXJfbmFtZX0vVk5GX2ltYWdlcworZWxzZQorICBta2RpciAtcCAvb3B0L1ZORi9pbWFnZXMKKyAgY2htb2QgbytyeCAvb3B0L1ZORi9pbWFnZXMKK2ZpCisKK2VjaG8gImNyZWF0aW5nIGxvY2FsIGluZm9ybWF0aW9uIC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sIgorZWNobyAiI0J5IGRlZmF1bHQgb3BlbnZpbSBhc3N1bWVzIGNvbnRyb2wgcGxhbmUgaW50ZXJmYWNlIG5hbWluZyBhcyBlbTEsZW0yLGVtMyxlbTQgIiA+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitlY2hvICIjYW5kIGJyaWRnZSBpZmFjZXMgYXMgdmlyYnJNYW4xLCB2aXJick1hbjIsIC4uLiIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiNpZiBjb21wdXRlIG5vZGUgY29udGFpbiBhIGRpZmZlcmVudCBuYW1lIGl0IG11c3QgYmUgaW5kaWNhdGVkIGluIHRoaXMgZmlsZSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2VjaG8gIiN3aXRoIHRoZSBmb3JtYXQgZXh0YW5kYXJkLW5hbWU6IGNvbXB1dGUtbmFtZSIgPj4gL29wdC9WTkYvaW1hZ2VzL2hvc3RpbmZvLnlhbWwKK2lmIFsgIiRpbnRlcmZhY2UiICE9ICIiIC1hICIkaW50ZXJmYWNlIiAhPSAiZW0xIiBdCit0aGVuCisgIGVjaG8gImlmYWNlX25hbWVzOiIgID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCisgIGVjaG8gIiAgZW0xOiAke2ludGVyZmFjZX0iID4+IC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCitmaQorY2htb2QgbytyIC9vcHQvVk5GL2ltYWdlcy9ob3N0aW5mby55YW1sCisKKyMgZGVhY3RpdmF0ZSBtZW1vcnkgb3ZlcmNvbW1pdAorI2VjaG8gImRlYWN0aXZhdGUgbWVtb3J5IG92ZXJjb21taXQiCisjc2VydmljZSBrc210dW5lZCBzdG9wCisjc2VydmljZSBrc20gc3RvcAorI2Noa2NvbmZpZyBrc210dW5lZCBvZmYKKyNjaGtjb25maWcga3NtIG9mZgorCisKKyMgTGlidmlydCBvcHRpb25zICh1bmNvbW1lbnQgdGhlIGZvbGxvd2luZykKK2VjaG8gImNvbmZpZ3VyZSBMaWJ2aXJ0IG9wdGlvbnMiCitzZWQgLWkgJ3MvI3VuaXhfc29ja19ncm91cCA9ICJsaWJ2aXJ0Ii91bml4X3NvY2tfZ3JvdXAgPSAibGlidmlydCIvJyAvZXRjL2xpYnZpcnQvbGlidmlydGQuY29uZgorc2VkIC1pICdzLyN1bml4X3NvY2tfcndfcGVybXMgPSAiMDc3MCIvdW5peF9zb2NrX3J3X3Blcm1zID0gIjA3NzAiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jdW5peF9zb2NrX2RpciA9ICJcL3ZhclwvcnVuXC9saWJ2aXJ0Ii91bml4X3NvY2tfZGlyID0gIlwvdmFyXC9ydW5cL2xpYnZpcnQiLycgL2V0Yy9saWJ2aXJ0L2xpYnZpcnRkLmNvbmYKK3NlZCAtaSAncy8jYXV0aF91bml4X3J3ID0gIm5vbmUiL2F1dGhfdW5peF9ydyA9ICJub25lIi8nIC9ldGMvbGlidmlydC9saWJ2aXJ0ZC5jb25mCisKKworZWNobyAnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgTkVUV09SSyBDT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJworIyBOZXR3b3JrIGNvbmZpZyAoaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbmV0KQorZWNobyAiSW50ZXJmYWNlID09PiAkaW50ZXJmYWNlIgoraWYgWyAtbiAiJGludGVyZmFjZSIgXQordGhlbgorCisKKyAgIyBGb3IgbWFuYWdlbWVudCBhbmQgZGF0YSBpbnRlcmZhY2VzCisgIHJtIC1mIC9ldGMvdWRldi9ydWxlcy5kL3BjaV9jb25maWcucnVsZXMgIyBpdCB3aWxsIGJlIGNyZWF0ZWQgdG8gZGVmaW5lIFZGcworCisKKyAgIyBTZXQgT05CT09UPW9uIGFuZCBNVFU9OTAwMCBvbiB0aGUgaW50ZXJmYWNlIHVzZWQgZm9yIHRoZSBicmlkZ2VzCisgIGVjaG8gImNvbmZpZ3VyaW5nIGlmYWNlICRpbnRlcmZhY2UiCisKKyNNVFUgZm9yIGludGVyZmFjZXMgYW5kIGJyaWRnZXMKK01UVT05MDAwCisKK2NwIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGludGVyZmFjZXMudG1wCisKKworICAjQ3JlYXRlIGluZnJhc3RydWN0dXJlIGJyaWRnZSwgbm9ybWFsbHkgdXNlZCBmb3IgY29ubmVjdGluZyB0byBjb21wdXRlIG5vZGVzLCBvcGVuZmxvdyBjb250cm9sbGVyLCAuLi4KKworCisgICAgI0NyZWF0ZSBWTEFOIGZvciBpbmZyYXN0cnVjdHVyZSBicmlkZ2UKKworIGVjaG8gIgorIyMjIyMjIyMjIENVVExJTkUgIyMjIyMjIyMjCisKK2F1dG8gJHtpbnRlcmZhY2V9CitpZmFjZSAke2ludGVyZmFjZX0gaW5ldCBtYW51YWwKKyAgICBwb3N0LXVwIGlwIGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7TVRVfQorCithdXRvICR7aW50ZXJmYWNlfS4xMDAxCitpZmFjZSAke2ludGVyZmFjZX0uMTAwMSBpbmV0IG1hbnVhbAorICAgIHZsYW4tcmF3LWRldmljZSAke2ludGVyZmFjZX0KKyAgICBwb3N0LXVwIGlwIGxpbmsgc2V0IG10dSAkTVRVIGRldiAke2ludGVyZmFjZX0uMTAwMQorIiA+PiBpbnRlcmZhY2VzLnRtcAorCisjIGVjaG8gImlmY29uZmlnICR7aW50ZXJmYWNlfSBtdHUgJE1UVQorIyBpZmNvbmZpZyAke2ludGVyZmFjZX0gdXAKKyMiID4gbXR1LnRtcAorCisKKyAgI0NyZWF0ZSBicmlkZ2UgaW50ZXJmYWNlcworICBlY2hvICJDcmVhdGluZyBicmlkZ2UgaWZhY2VzOiAiCisgIGZvciAoKGk9MTtpPD0yMDtpKyspKQorICBkbworICAgIGkyZGlnaXRzPSRpCisgICAgWyAkaSAtbHQgMTAgXSAmJiBpMmRpZ2l0cz0iMCRpIgorICAgIGVjaG8gIiAgICB2aXJick1hbiRpICB2bGFuIDIwJGkyZGlnaXRzIgorCisgICAgaj0kaQorCisgZWNobyAiCithdXRvICR7aW50ZXJmYWNlfS4yMCRpMmRpZ2l0cworaWZhY2UgJHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzIGluZXQgbWFudWFsCisgICAgcG9zdC11cCBpcCBsaW5rIHNldCBtdHUgJE1UVSBkZXYgJHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzCisKK2F1dG8gdmlyYnJNYW4kagoraWZhY2UgdmlyYnJNYW4kaiBpbmV0IG1hbnVhbAorCWJyaWRnZV9wb3J0cyAke2ludGVyZmFjZX0uMjAkaTJkaWdpdHMKKwlwb3N0LXVwIGlwIGxpbmsgc2V0IGRldiB2aXJick1hbiRqICYmIGlwIGxpbmsgc2V0IG10dSA5MDAwIGRldiB2aXJick1hbiRqCisiID4+IGludGVyZmFjZXMudG1wCisKKyMgZWNobyAiaWZjb25maWcgJHtpbnRlcmZhY2V9LjIwJGkyZGlnaXRzIG10dSAkTVRVCisjaWZjb25maWcgdmlyYnJNYW4kaiBtdHUgJE1UVQorI2lmY29uZmlnIHZpcmJyTWFuJGogdXAKKyMiID4+IG10dS50bXAKKworICBkb25lCisKKyBlY2hvICIKK2F1dG8gZW0yLjEwMDEKK2lmYWNlIGVtMi4xMDAxIGluZXQgbWFudWFsCisgICAgcG9zdC11cCBpcCBsaW5rIHNldCBkZXYgZW0yLjEwMDEgbXR1IDkwMDAKKworYXV0byB2aXJickluZgoraWZhY2UgdmlyYnJJbmYgaW5ldCBtYW51YWwKKwlicmlkZ2VfcG9ydHMgZW0yLjEwMDEKKwlwb3N0LXVwIGlwIGxpbmsgc2V0IGRldiB2aXJickluZiAmJiBpcCBsaW5rIHNldCBtdHUgOTAwMCBkZXYgdmlyYnJJbmYKKyIgPj4gaW50ZXJmYWNlcy50bXAKKworIyBlY2hvICJpZmNvbmZpZyBlbTIuMTAwMSBtdHUgJE1UVQorI2lmY29uZmlnIHZpcmJySW5mIG10dSAkTVRVCisjaWZjb25maWcgdmlyYnJJbmYgdXAKKyMiID4+IG10dS50bXAKKworaWYgISBncmVwIC1xICIjIyMjIENVVExJTkUgIyMjIyIgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMKK3RoZW4KKwllY2hvICI9PT09PT0gQ29weWluZyBpbnRlcmZhY2VzLnRtcCB0byAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyIKKwljcCBpbnRlcmZhY2VzLnRtcCAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcworZmkKKworCisgICNwb3BkCitmaQorCisKKyMgQWN0aXZhdGUgOCBWaXJ0dWFsIEZ1bmN0aW9ucyBwZXIgUEYgb24gTmlhbnRpYyBjYXJkcyAoaXhnYmUgZHJpdmVyKQoraWYgW1sgYGxzbW9kIHwgY3V0IC1kIiAiIC1mMSB8IGdyZXAgIml4Z2JlIiB8IGdyZXAgLXYgdmZgIF1dCit0aGVuCisJaWYgISBncmVwIC1xICJpeGdiZSIgL2V0Yy9tb2Rwcm9iZS5kL2l4Z2JlLmNvbmYKKwl0aGVuCisJZWNobyAib3B0aW9ucyBpeGdiZSBtYXhfdmZzPTgiID4+IC9ldGMvbW9kcHJvYmUuZC9peGdiZS5jb25mCisJZmkKKworZmkKKworZWNobyAiIyEvYmluL2Jhc2giID4gL2V0Yy9hY3RpdmF0ZS12ZnMuc2gKK2NobW9kICt4IC9ldGMvYWN0aXZhdGUtdmZzLnNoCitmb3IgaWZhY2UgaW4gYGlwIC1vIGxpbmsgc2hvdyB8IGF3ayAtRic6ICcgJ3twcmludCAkMn0nICB8IGdyZXAgLXYgIC1lICJcLiIgLWUgImxvIiAtZSAidmlyYnIiIC1lICJ0YXAiYAorZG8KKyMgMTAvNDAgR2JwcyBpbnRlcmZhY2VzCisjIEludGVsIFg1MjAgY2FyZHM6IGRyaXZlciBpeGdiZQorIyBJbnRlbCBYTDcxMCBGb3J0dmlsbGUgY2FyZHM6IGRyaXZlciBpNDBlCitkcml2ZXI9YGV0aHRvb2wgLWkgJGlmYWNlfCBhd2sgJygkMH4iZHJpdmVyIil7cHJpbnQgJDJ9J2AKK2lmIFsgIiRkcml2ZXIiID0gImk0MGUiIC1vICIkZHJpdmVyIiA9ICJpeGdiZSIgXQordGhlbgorICBlY2hvICJjb25maWd1cmluZyBkYXRhcGxhbmUgaWZhY2UgJGlmYWNlIgorCisgICMgQ3JlYXRlIDggU1ItSU9WIHBlciBQRiBieSB1ZGV2IHJ1bGVzIG9ubHkgZm9yIEZvcnR2aWxsZSBjYXJkcyAoaTQwZSBkcml2ZXIpCisgIGlmIFsgIiRkcml2ZXIiID0gImk0MGUiIF0KKyAgdGhlbgorICBwY2k9YGV0aHRvb2wgLWkgJGlmYWNlIHwgYXdrICcoJDB+ImJ1cy1pbmZvIil7cHJpbnQgJDJ9J2AKKyAgIGVjaG8gImVjaG8gOCA+IC9zeXMvYnVzL3BjaS9kZXZpY2VzLyRwY2kvc3Jpb3ZfbnVtdmZzIiA+PiAvZXRjL2FjdGl2YXRlLXZmcy5zaAorICBmaQorZmkKK2RvbmUKKworIyBTZXQgZGF0YXBsYW5lIE1UVQorCisjZWNobyAic2xlZXAgMTAiID4+IG10dS50bXAKKworI2ludGVyZmFjZXM9YGlmY29uZmlnIC1hIHwgZ3JlcCBecCB8IGN1dCAtZCAiICIgLWYgMWAKKyNmb3IgcGggaW4gJGludGVyZmFjZXMKKyNkbworIyAgICAgICAgZWNobyAiaWZjb25maWcgJHBoIG10dSAkTVRVIiA+PiBtdHUudG1wCisjICAgICAgICBlY2hvICJpZmNvbmZpZyAkcGggdXAiID4+IG10dS50bXAKKyNkb25lCisKKworCisjY3AgbXR1LnRtcCAvZXRjL3NldG10dS5zaAorI2NobW9kICt4IC9ldGMvc2V0bXR1LnNoCisKKyMgVG8gZGVmaW5lIDggVkZzIHBlciBQRiB3ZSBkbyBpdCBvbiByYy5sb2NhbCwgYmVjYXVzZSB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIHVubG9hZGVkIGFuZCBsb2FkZWQgYWdhaW4KKyNpZiAhIGdyZXAgLXEgIk5GViIgL2V0Yy9yYy5sb2NhbAorI3RoZW4KKyAgZWNobyAiIyEvYmluL3NoIC1lCisiID4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICIjIE5GViIgPj4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICJtb2Rwcm9iZSAtciBpeGdiZSIgPj4gL2V0Yy9yYy5sb2NhbAorICBlY2hvICJtb2Rwcm9iZSBpeGdiZSBtYXhfdmZzPTgiID4+IC9ldGMvcmMubG9jYWwKKyAgZWNobyAiL2V0Yy9hY3RpdmF0ZS12ZnMuc2giID4+IC9ldGMvcmMubG9jYWwKKyAgI2VjaG8gIi9ldGMvc2V0bXR1LnNoIiA+PiAvZXRjL3JjLmxvY2FsCisgIGVjaG8gIgorZXhpdCAwIiA+PiAvZXRjL3JjLmxvY2FsCisgIGVjaG8gIiIgPj4gL2V0Yy9yYy5sb2NhbAorCisgIGNobW9kICt4IC9ldGMvcmMubG9jYWwKKyAgY2htb2QgK3ggL2V0Yy9hY3RpdmF0ZS12ZnMuc2gKKworI2ZpCisKK2NobW9kIGErcnd4IC92YXIvbGliL2xpYnZpcnQvaW1hZ2VzCitta2RpciAvdXNyL2xpYmV4ZWMvCitwdXNoZCAvdXNyL2xpYmV4ZWMvCitsbiAtcyAvdXNyL2Jpbi9xZW11LXN5c3RlbS14ODZfNjQgcWVtdS1rdm0KK3BvcGQKKworI0RlYWN0aXZhdGluZyBhcHBhcm1vciB3aGlsZSBsb29raW5nIGZvciBhIGJldHRlciBzb2x1dGlvbgorL2V0Yy9pbml0LmQvYXBwYXJtb3Igc3RvcAordXBkYXRlLXJjLmQgLWYgYXBwYXJtb3IgcmVtb3ZlCisKK2VjaG8KK2VjaG8gIkRvIG5vdCBmb3JnZXQgdG8gY3JlYXRlIGEgc2hhcmVkIChORlMsIFNhbWJhLCAuLi4pIHdoZXJlIG9yaWdpbmFsIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgYXJlIGFsbG9jYXRlZCIKK2VjaG8KK2VjaG8gIkRvIG5vdCBmb3JnZXQgdG8gY29weSB0aGUgcHVibGljIHNzaCBrZXkgaW50byAvaG9tZS8ke3VzZXJfbmFtZX0vLnNzaC9hdXRob3JpemVkX2tleXMgZm9yIGF1dGhvbWF0aWMgbG9naW4gZnJvbSBvcGVudmltIGNvbnRyb2xsZXIiCitlY2hvCisKK2VjaG8gIlJlYm9vdCB0aGUgc3lzdGVtIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlIgorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldC1vcHRpb25zLnNoIGIvc2NyaXB0cy9nZXQtb3B0aW9ucy5zaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9zY3JpcHRzL2hvc3QtYWRkLnNoIGIvc2NyaXB0cy9ob3N0LWFkZC5zaAppbmRleCBjNTJmM2ZhLi44YWE5YmRlIDEwMDc1NQotLS0gYS9zY3JpcHRzL2hvc3QtYWRkLnNoCisrKyBiL3NjcmlwdHMvaG9zdC1hZGQuc2gKQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vYmFzaAogCiAjIwotIyBDb3B5cmlnaHQgMjAxNSBUZWxlZvNuaWNhIEludmVzdGlnYWNp824geSBEZXNhcnJvbGxvLCBTLkEuVS4KKyMgQ29weXJpZ2h0IDIwMTUgVGVsZWbvv71uaWNhIEludmVzdGlnYWNp77+9biB5IERlc2Fycm9sbG8sIFMuQS5VLgogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBvcGVudmltCiAjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCkBAIC0xMzQsNyArMTM0LDcgQEAKIFtbICIkIyIgLWx0ICIyIiBdXSAmJiBlY2hvICJNaXNzaW5nIHBhcmFtZXRlcnMiICYmIHVzYWdlCiBsb2FkX3ZmX2RyaXZlciBpeGdiZQogbG9hZF92Zl9kcml2ZXIgaTQwZQotCisvZXRjL3JjLmxvY2FsCiBIT1NUX05BTUU9YGNhdCAvZXRjL2hvc3RuYW1lYAogRkVBVFVSRVM9YGdyZXAgIl5mbGFncyIgIC9wcm9jL2NwdWluZm9gCiBGRUFUVVJFU19MSVNUPSIiCkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICBldmFsICR1bmRlcnNjb3JlZF9wY2lbInN3aXRjaF9wb3J0Il09JHN3aXRjaF9wb3J0CiAgIGZpCiAKLSAgI0HxYWRvIGVsIHBjaSBkZSBjYWRhIHVubyBkZSBsb3MgaGlqb3MKKyAgI0Hvv71hZG8gZWwgcGNpIGRlIGNhZGEgdW5vIGRlIGxvcyBoaWpvcwogICBTUklPVl9jb3VudGVyPTAKICAgZm9yIGNoaWxkIGluIGB4bWxwYXRoX2FyZ3MgImRldmljZS9jYXBhYmlsaXR5L2NhcGFiaWxpdHkvYWRkcmVzcyIgPCBwYXJlbnRfeG1sYAogICBkbyAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLXNlcnZpY2Uuc2ggYi9zY3JpcHRzL2luc3RhbGwtb3BlbnZpbS1zZXJ2aWNlLnNoCmluZGV4IDA1Mzg0ZWEuLjRjZjM5M2QgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLXNlcnZpY2Uuc2gKKysrIGIvc2NyaXB0cy9pbnN0YWxsLW9wZW52aW0tc2VydmljZS5zaApAQCAtMjYsMTggKzI2LDE5IEBACiAKIGZ1bmN0aW9uIHVzYWdlKCl7CiAgICAgZWNobyAtZSAidXNhZ2U6IHN1ZG8gJDAgW09QVElPTlNdIgotICAgIGVjaG8gLWUgIkNvbmZpZ3VyZXMgb3BlbnZpbSB0byBydW4gYXMgYSBzZXJ2aWNlIgorICAgIGVjaG8gLWUgIkNvbmZpZ3VyZXMgb3BlbnZpbSB0byBydW4gYXMgYSBzZXJ2aWNlIGF0IC9vcHQiCiAgICAgZWNobyAtZSAiICBPUFRJT05TIgogICAgIGVjaG8gLWUgIiAgICAgLXUgVVNFUl9PV05FUiAgdXNlciBvd25lciBvZiB0aGUgc2VydmljZSwgJ3Jvb3QnIGJ5IGRlZmF1bHQiCiAgICAgZWNobyAtZSAiICAgICAtZiBQQVRIICBwYXRoIHdoZXJlIG9wZW52aW0gc291cmNlIGlzIGxvY2F0ZWQuIElmIG1pc3NpbmcgaXQgaXMgZG93bmxvYWRlZCBmcm9tIGdpdCIKLSAgICAjZWNobyAtZSAiICAgICAtcTogIGluc3RhbGwgaW4gYW4gdW5hdHRlbmRlZCBtb2RlIgorICAgIGVjaG8gLWUgIiAgICAgLWQgLS1kZWxldGU6ICBpZiAtZiBpcyBwcm92aWRlZCwgZGVsZXRlIHRoaXMgcGF0aCBhZnRlciBjb3B5aW5nIHRvIC9vcHQiCiAgICAgZWNobyAtZSAiICAgICAtaDogIHNob3cgdGhpcyBoZWxwIgogICAgIGVjaG8gLWUgIiAgICAgLS11bmluc3RhbGw6IHJlbW92ZSBjcmVhdGVkIHNlcnZpY2UgYW5kIGZpbGVzIgogfQogCiBmdW5jdGlvbiB1bmluc3RhbGwoKXsKLSAgICBzZXJ2aWNlIG9wZW52aW0gc3RvcAotICAgIGZvciBmaWxlIGluIC9vcHQvb3BlbnZpbSAvZXRjL2RlZmF1bHQvb3BlbnZpbWQuY2ZnIC92YXIvbG9nL29wZW52aW0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9vcGVudmltLnNlcnZpY2UgL3Vzci9zYmluL29wZW52aW0gL3Vzci9zYmluL2luaXRvcGVudmltIC91c3Ivc2Jpbi9vcGVudmltCisgICAgZWNobyAic3lzdGVtY3RsIGRpc2FibGUgb3BlbnZpbS5zZXJ2aWNlICIgJiYgIHN5c3RlbWN0bCBkaXNhYmxlIG9wZW52aW0uc2VydmljZSAyPi9kZXYvbnVsbCB8fCBlY2hvICIgIEFscmVhZHkgZG9uZSIKKyAgICBlY2hvICJzZXJ2aWNlIG9wZW52aW0gc3RvcCAiICYmIHNlcnZpY2Ugb3BlbnZpbSBzdG9wIDI+L2Rldi9udWxsIHx8IGVjaG8gIiAgQWxyZWFkeSBkb25lIgorICAgIGZvciBmaWxlIGluIC9vcHQvb3BlbnZpbSAvZXRjL2RlZmF1bHQvb3BlbnZpbWQuY2ZnIC92YXIvbG9nL29wZW52aW0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9vcGVudmltLnNlcnZpY2UgL3Vzci9iaW4vb3BlbnZpbSAvdXNyL2Jpbi9pbml0b3BlbnZpbSAvdXNyL3NiaW4vc2VydmljZS1vcGVudmltIC91c3IvYmluL29wZW52aW0tcmVwb3J0IC91c3IvYmluL29wZW5mbG93CiAgICAgZG8KICAgICAgICAgcm0gLXJmICRmaWxlIHx8ICEgZWNobyAiQ2FuIG5vdCBkZWxldGUgJyRmaWxlJy4gTmVlZGVkIHJvb3QgcHJpdmlsZWdlcz8iID4mMiB8fCBleGl0IDEKICAgICBkb25lCkBAIC00NSwxMiArNDYsMTIgQEAKIH0KIAogQkFEX1BBVEhfRVJST1I9IlBhdGggJyRGSUxFJyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgb3BlbnZpbSBkaXN0cmlidXRpb24iCi1HSVRfVVJMPWh0dHBzOi8vb3NtLmV0c2kub3JnL2dlcnJpdC9vc20vUk8uZ2l0CitHSVRfVVJMPWh0dHBzOi8vb3NtLmV0c2kub3JnL2dlcnJpdC9vc20vb3BlbnZpbS5naXQKIFVTRVJfT1dORVI9InJvb3QiCiBRVUlFVF9NT0RFPSIiCiBGSUxFPSIiCiBERUxFVEU9IiIKLXdoaWxlIGdldG9wdHMgIjp1OmY6aHEtOiIgbzsgZG8KK3doaWxlIGdldG9wdHMgIjp1OmY6aGRxLToiIG87IGRvCiAgICAgY2FzZSAiJHtvfSIgaW4KICAgICAgICAgdSkKICAgICAgICAgICAgIGV4cG9ydCBVU0VSX09XTkVSPSIkT1BUQVJHIgpAQCAtNjQsMTAgKzY1LDE0IEBACiAgICAgICAgIGgpCiAgICAgICAgICAgICB1c2FnZSAmJiBleGl0IDAKICAgICAgICAgICAgIDs7CisgICAgICAgIGQpCisgICAgICAgICAgICBERUxFVEU9eQorICAgICAgICAgICAgOzsKICAgICAgICAgLSkKICAgICAgICAgICAgIFsgIiR7T1BUQVJHfSIgPT0gImhlbHAiIF0gJiYgdXNhZ2UgJiYgZXhpdCAwCiAgICAgICAgICAgICBbICIke09QVEFSR30iID09ICJ1bmluc3RhbGwiIF0gJiYgdW5pbnN0YWxsICYmIGV4aXQgMAotICAgICAgICAgICAgZWNobyAtZSAiSW52YWxpZCBvcHRpb246ICctLSRPUFRBUkcnXG5UcnkgJDAgLS1oZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIiA+JjIgCisgICAgICAgICAgICBbICIke09QVEFSR30iID09ICJkZWxldGUiIF0gJiYgREVMRVRFPXkgJiYgY29udGludWUKKyAgICAgICAgICAgIGVjaG8gLWUgIkludmFsaWQgb3B0aW9uOiAnLS0kT1BUQVJHJ1xuVHJ5ICQwIC0taGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIgPiYyCiAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgIDs7IAogICAgICAgICBcPykKQEAgLTg0LDYgKzg5LDcgQEAKICAgICAgICAgICAgIDs7CiAgICAgZXNhYwogZG9uZQorQkFEX1BBVEhfRVJST1I9IlBhdGggJyRGSUxFJyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgb3BlbnZpbSBkaXN0cmlidXRpb24iCiAKICNjaGVjayByb290IHByaXZpbGVnZXMKIFsgIiRVU0VSIiAhPSAicm9vdCIgXSAmJiBlY2hvICJOZWVkZWQgcm9vdCBwcml2aWxlZ2VzIiA+JjIgJiYgZXhpdCAxCkBAIC0xMTEsMjggKzExNywyOSBAQAogCiBpZiBbWyAteiAkRklMRSBdXQogdGhlbgotICAgIGdpdCBjbG9uZSAkR0lUX1VSTCBfX3RlbXBfXyB8fCAhIGVjaG8gIkNhbm5vdCBnZXQgb3BlbnZpbSBzb3VyY2UgY29kZSBmcm9tICRHSVRfVVJMIiA+JjIgfHwgZXhpdCAxCi0gICAgI2dpdCBjaGVja291dCA8dGFnIHZlcnNpb24+Ci0gICAgRklMRT0uL19fdGVtcF9fCisgICAgRklMRT1fX3RlbXBfXyR7UkFORE9NfQorICAgIGdpdCBjbG9uZSAkR0lUX1VSTCAkRklMRSB8fCAhIGVjaG8gIkNhbm5vdCBnZXQgb3BlbnZpbSBzb3VyY2UgY29kZSBmcm9tICRHSVRfVVJMIiA+JjIgfHwgZXhpdCAxCiAgICAgREVMRVRFPXkKKyAgICAjZ2l0IGNoZWNrb3V0IDx0YWcgdmVyc2lvbj4KK2Vsc2UKKyAgICBbWyAtZCAgIiRGSUxFIiBdXSB8fCAhIGVjaG8gJEJBRF9QQVRIX0VSUk9SID4mMiB8fCBleGl0IDEKIGZpCiAKICNtYWtlIGlkZW5wb3RlbnQKLXJtIC1yZiAvb3B0L29wZW52aW0KLXJtIC1mIC9ldGMvZGVmYXVsdC9vcGVudmltZC5jZmcKLXJtIC1mIC92YXIvbG9nL29wZW52aW0KLWNwIC1yICRGSUxFIC9vcHQvb3BlbnZpbSAgICAgICAgIHx8ICEgZWNobyAkQkFEX1BBVEhfRVJST1IgPiYyIHx8IGV4aXQgMQordW5pbnN0YWxsCisjY29weSBmaWxlcworY3AgLXIgIiRGSUxFIiAvb3B0L29wZW52aW0gICAgICAgICB8fCAhIGVjaG8gJEJBRF9QQVRIX0VSUk9SID4mMiB8fCBleGl0IDEKIG1rZGlyIC1wIC9vcHQvb3BlbnZpbS9sb2dzCi1ybSAtcmYgL3Vzci9zYmluL29wZW52aW0KLXJtIC1yZiAvdXNyL3NiaW4vaW5pdG9wZW52aW0KLSNjcCAke0ZJTEV9L29wZW52aW0gL3Vzci9zYmluLyAgICB8fCAhIGVjaG8gJEJBRF9QQVRIX0VSUk9SID4mMiB8fCBleGl0IDEKLWxuIC1zIC9vcHQvb3BlbnZpbS9vcGVudmltZC5jZmcgL2V0Yy9kZWZhdWx0L29wZW52aW1kLmNmZyAgfHwgZWNobyAid2FybmluZyBjYW5ub3QgY3JlYXRlIGxpbmsgJy9ldGMvZGVmYXVsdC9vcGVudmltZC5jZmcnIgotbG4gLXMgL29wdC9vcGVudmltL2xvZ3MgL3Zhci9sb2cvb3BlbnZpbSAgfHwgZWNobyAid2FybmluZyBjYW5ub3QgY3JlYXRlIGxpbmsgJy92YXIvbG9nL29wZW52aW0nIgotbG4gLXMgL29wdC9vcGVudmltL29wZW52aW0gL3Vzci9zYmluL29wZW52aW0KLWxuIC1zIC9vcHQvb3BlbnZpbS9zY3JpcHRzL3NlcnZpY2Utb3BlbnZpbS5zaCAvdXNyL3NiaW4vaW5pdG9wZW52aW0KKyNtYWtlcyBsaW5rcworbG4gLXMgLXYgL29wdC9vcGVudmltL29wZW52aW1kLmNmZyAvZXRjL2RlZmF1bHQvb3BlbnZpbWQuY2ZnICB8fCBlY2hvICJ3YXJuaW5nIGNhbm5vdCBjcmVhdGUgbGluayAnL2V0Yy9kZWZhdWx0L29wZW52aW1kLmNmZyciCitsbiAtcyAtdiAvb3B0L29wZW52aW0vbG9ncyAvdmFyL2xvZy9vcGVudmltICB8fCBlY2hvICJ3YXJuaW5nIGNhbm5vdCBjcmVhdGUgbGluayAnL3Zhci9sb2cvb3BlbnZpbSciCitsbiAtcyAtdiAvb3B0L29wZW52aW0vb3BlbnZpbSAvdXNyL2Jpbi9vcGVudmltCitsbiAtcyAtdiAvb3B0L29wZW52aW0vc2NyaXB0cy9zZXJ2aWNlLW9wZW52aW0uc2ggL3Vzci9zYmluL3NlcnZpY2Utb3BlbnZpbQorbG4gLXMgLXYgL29wdC9vcGVudmltL3NjcmlwdHMvb3BlbnZpbS1yZXBvcnQuc2ggL3Vzci9iaW4vb3BlbnZpbS1yZXBvcnQKK2xuIC1zIC12IC9vcHQvb3BlbnZpbS9zY3JpcHRzL2luaXRvcGVudmltLnNoIC91c3IvYmluL2luaXRvcGVudmltCitsbiAtcyAtdiAvb3B0L29wZW52aW0vb3BlbmZsb3cgL3Vzci9iaW4vb3BlbmZsb3cKIAotY2hvd24gJFVTRVJfT1dORVIgL29wdC9vcGVudmltL29wZW52aW1kLmNmZwotY2hvd24gLVIgJFVTRVJfT1dORVIgL29wdC9vcGVudmltCitjaG93biAtUiAkU1VET19VU0VSIC9vcHQvb3BlbnZpbQogCiBta2RpciAtcCAvZXRjL3N5c3RlbWQvc3lzdGVtLwogY2F0ICA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0vb3BlbnZpbS5zZXJ2aWNlICA8PCBFT0YgCkBAIC0xNTEsNiArMTU4LDcgQEAKIFtbIC1uICRERUxFVEUgXV0gJiYgcm0gLXJmICRGSUxFCiAKIHNlcnZpY2Ugb3BlbnZpbSBzdGFydAorc3lzdGVtY3RsIGVuYWJsZSBvcGVudmltLnNlcnZpY2UKIAogZWNobyBEb25lCiBleGl0CmRpZmYgLS1naXQgYS9zY3JpcHRzL2luc3RhbGwtb3BlbnZpbS5zaCBiL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLnNoCmluZGV4IDg4YTkyZGQuLjc0N2M4ZTYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLnNoCisrKyBiL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLnNoCkBAIC0yNSw2ICsyNSw4IEBACiAjR2V0IG5lZWRlZCBwYWNrYWdlcywgc291cmNlIGNvZGUgYW5kIGNvbmZpZ3VyZSB0byBydW4gb3BlbnZpbQogI0FzayBmb3IgZGF0YWJhc2UgdXNlciBhbmQgcGFzc3dvcmQgaWYgbm90IHByb3ZpZGVkCiAKKworCiBmdW5jdGlvbiB1c2FnZSgpewogICAgIGVjaG8gLWUgInVzYWdlOiBzdWRvICQwIFtPUFRJT05TXSIKICAgICBlY2hvIC1lICJJbnN0YWxsIGxhc3Qgc3RhYmxlIHNvdXJjZSBjb2RlIGluIC4vb3BlbnZpbSBhbmQgdGhlIG5lZWRlZCBwYWNrYWdlcyIKQEAgLTM1LDcgKzM3LDEwIEBACiAgICAgZWNobyAtZSAiICAgICAtcSAtLXF1aWV0OiBpbnN0YWxsIGluIGFuIHVuYXR0ZW5kZWQgbW9kZSIKICAgICBlY2hvIC1lICIgICAgIC1oIC0taGVscDogIHNob3cgdGhpcyBoZWxwIgogICAgIGVjaG8gLWUgIiAgICAgLS1kZXZlbG9wOiAgaW5zdGFsbCBsYXN0IHZlcnNpb24gZm9yIGRldmVsb3BlcnMsIGFuZCBkbyBub3QgY29uZmlndXJlIGFzIGEgc2VydmljZSIKLSAgICBlY2hvIC1lICIgICAgIC0tc2tpcC1pbnN0YWxsLXBhY2thZ2VzOiB1c2UgdGhpcyBvcHRpb24gdG8gc2tpcCBhbmQgdXBkYXRlIGFuZCBpbnN0YWxsIHRoZSByZXF1aXJlcyBwYWNrYWdlcy4gVGhpcyBhdm9pZCB3YXN0aW5nIHRpbWUgaWYgeW91IGFyZSBzdXJlIHJlcXVpcmVzIHBhY2thZ2VzIGFyZSBwcmVzZW50IGZvciBlLmcuIGEgcHJldmlvdXMgaW5zdGFsbGF0aW9uIgorICAgIGVjaG8gLWUgIiAgICAgLS1mb3JjZWRiOiAgcmVpbnN0YWxsIHZpbV9kYiBEQiwgZGVsZXRpbmcgcHJldmlvdXMgZGF0YWJhc2UgaWYgZXhpc3RzIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUiCisgICAgZWNobyAtZSAiICAgICAtLWZvcmNlOiAgICBtYWtlcyBpZGVucG90ZW50LCBkZWxldGUgcHJldmlvdXMgaW5zdGFsbGF0aW9ucyBmb2xkZXJzIGlmIG5lZWRlZCIKKyAgICBlY2hvIC1lICIgICAgIC0tbm9jbG9uZTogIGFzc3VtZXMgdGhhdCBvcGVudmltIHdhcyBjbG9uZWQgcHJldmlvdXNseSBhbmQgdGhhdCB0aGlzIHNjcmlwdCBpcyBydW4gZnJvbSB0aGUgbG9jYWwgcmVwbyIKKyAgICBlY2hvIC1lICIgICAgIC0tbm8taW5zdGFsbC1wYWNrYWdlczogdXNlIHRoaXMgb3B0aW9uIHRvIHNraXAgdXBkYXRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIHJlcXVpcmVzIHBhY2thZ2VzLiBUaGlzIGF2b2lkIHdhc3RpbmcgdGltZSBpZiB5b3UgYXJlIHN1cmUgcmVxdWlyZXMgcGFja2FnZXMgYXJlIHByZXNlbnQgZS5nLiBiZWNhdXNlIG9mIGEgcHJldmlvdXMgaW5zdGFsbGF0aW9uIgogfQogCiBmdW5jdGlvbiBpbnN0YWxsX3BhY2thZ2VzKCl7CkBAIC01Niw2ICs2MSwxNiBAQAogICAgIGRvbmUKIH0KIAorZnVuY3Rpb24gZGJfZXhpc3RzKCkgeworICAgIFJFU1VMVD1gbXlzcWxzaG93IC0tZGVmYXVsdHMtZXh0cmEtZmlsZT0iJDIiIHwgZ3JlcCAtdiBXaWxkY2FyZCB8IGdyZXAgLW8gJDFgCisgICAgaWYgWyAiJFJFU1VMVCIgPT0gIiQxIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIiBEQiAkMSBleGlzdHMiCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBlY2hvICIgREIgJDEgZG9lcyBub3QgZXhpc3QiCisgICAgcmV0dXJuIDEKK30KKwogCiBHSVRfVVJMPWh0dHBzOi8vb3NtLmV0c2kub3JnL2dlcnJpdC9vc20vb3BlbnZpbS5naXQKIERCVVNFUj0icm9vdCIKQEAgLTYzLDYgKzc4LDkgQEAKIERCUEFTU1dEX1BBUkFNPSIiCiBRVUlFVF9NT0RFPSIiCiBERVZFTE9QPSIiCitGT1JDRURCPSIiCitGT1JDRT0iIgorTk9DTE9ORT0iIgogTk9fUEFDS0FHRVM9IiIKIHdoaWxlIGdldG9wdHMgIjp1OnA6aGlxLToiIG87IGRvCiAgICAgY2FzZSAiJHtvfSIgaW4KQEAgLTgzLDggKzEwMSwxMSBAQAogICAgICAgICAtKQogICAgICAgICAgICAgWyAiJHtPUFRBUkd9IiA9PSAiaGVscCIgXSAmJiB1c2FnZSAmJiBleGl0IDAKICAgICAgICAgICAgIFsgIiR7T1BUQVJHfSIgPT0gImRldmVsb3AiIF0gJiYgREVWRUxPUD0ieSIgJiYgY29udGludWUKKyAgICAgICAgICAgIFsgIiR7T1BUQVJHfSIgPT0gImZvcmNlZGIiIF0gJiYgRk9SQ0VEQj0ieSIgJiYgY29udGludWUKKyAgICAgICAgICAgIFsgIiR7T1BUQVJHfSIgPT0gImZvcmNlIiBdICAgJiYgRk9SQ0VEQj0ieSIgJiYgRk9SQ0U9InkiICYmIGNvbnRpbnVlCisgICAgICAgICAgICBbICIke09QVEFSR30iID09ICJub2Nsb25lIiBdICYmIE5PQ0xPTkU9InkiICYmIGNvbnRpbnVlCiAgICAgICAgICAgICBbICIke09QVEFSR30iID09ICJxdWlldCIgXSAmJiBleHBvcnQgUVVJRVRfTU9ERT15ZXMgJiYgZXhwb3J0IERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZSAmJiBjb250aW51ZQotICAgICAgICAgICAgWyAiJHtPUFRBUkd9IiA9PSAic2tpcC1pbnN0YWxsLXBhY2thZ2VzIiBdICYmIGV4cG9ydCBOT19QQUNLQUdFUz15ZXMgJiYgY29udGludWUKKyAgICAgICAgICAgIFsgIiR7T1BUQVJHfSIgPT0gIm5vLWluc3RhbGwtcGFja2FnZXMiIF0gJiYgZXhwb3J0IE5PX1BBQ0tBR0VTPXllcyAmJiBjb250aW51ZQogICAgICAgICAgICAgZWNobyAtZSAiSW52YWxpZCBvcHRpb246ICctLSRPUFRBUkcnXG5UcnkgJDAgLS1oZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uIiA+JjIKICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgOzsKQEAgLTE1MCw2ICsxNzEsMjMgQEAKICAgICBbICIkS0siICE9ICJ5IiAtYSAgIiRLSyIgIT0gInllcyIgXSAmJiBlY2hvICJDYW5jZWxsZWQiICYmIGV4aXQgMAogZmkKIAorI2NoZWNrIGlmIGluc3RhbGxlZCBhcyBhIHNlcnZpY2UKK0lOU1RBTExfQVNfQV9TRVJWSUNFPSIiCitbWyAiJF9ESVNUUk8iID09ICJVYnVudHUiIF1dICYmICBbWyAke19SRUxFQVNFJSUuKn0gPT0gMTYgXV0gJiYgW1sgLXogJERFVkVMT1AgXV0gJiYgSU5TVEFMTF9BU19BX1NFUlZJQ0U9InkiCisKKyNOZXh0IG9wZXJhdGlvbnMgcmVxdWlyZSBrbm93aW5nIEJBU0VGT0xERVIKK2lmIFtbIC16ICIkTk9DTE9ORSIgXV07IHRoZW4KKyAgICBpZiBbWyAtbiAiJElOU1RBTExfQVNfQV9TRVJWSUNFIiBdXSA7IHRoZW4KKyAgICAgICAgT1BFTlZJTV9CQVNFRk9MREVSPV9fb3BlbnZpbV9fJHtSQU5ET019CisgICAgZWxzZQorICAgICAgICBPUEVOVklNX0JBU0VGT0xERVI9IiR7UFdEfS9vcGVudmltIgorICAgIGZpCisgICAgW1sgLW4gIiRGT1JDRSIgXV0gJiYgcm0gLXJmICRPUEVOVklNX0JBU0VGT0xERVIgI21ha2UgaWRlbXBvdGVudAorZWxzZQorICAgIEhFUkU9JChyZWFscGF0aCAkKGRpcm5hbWUgJDApKQorICAgIE9QRU5WSU1fQkFTRUZPTERFUj0kKGRpcm5hbWUgJEhFUkUpCitmaQorCiAKIGlmIFtbIC16ICIkTk9fUEFDS0FHRVMiIF1dCiB0aGVuCkBAIC0yMzIsMzAgKzI3MCw3NSBAQAogCiBmaSAgI1tbIC16ICIkTk9fUEFDS0FHRVMiIF1dCiAKLWVjaG8gJworaWYgW1sgLXogJE5PQ0xPTkUgXV07IHRoZW4KKyAgICBlY2hvICcKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyAgICAgICAgICAgICAgICAgRE9XTkxPQUQgU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCi1zdSAkU1VET19VU0VSIC1jICdnaXQgY2xvbmUgJyIke0dJVF9VUkx9Iicgb3BlbnZpbScKLVtbIC16ICRERVZFTE9QIF1dICYmIHN1ICRTVURPX1VTRVIgLWMgJ2dpdCAtQyBvcGVudmltIGNoZWNrb3V0IHRhZ3MvdjEuMC4xJworICAgIGlmIFtbIC1kICIke09QRU5WSU1fQkFTRUZPTERFUn0iIF1dCisgICAgdGhlbgorICAgICAgICBpZiBbWyAtbiAiJEZPUkNFIiBdXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICJkZWxldGluZyAnJHtPUEVOVklNX0JBU0VGT0xERVJ9JyBmb2xkZXIiCisgICAgICAgICAgICBybSAtcmYgIiRPUEVOVklNX0JBU0VGT0xERVIiICNtYWtlIGlkZW1wb3RlbnQKKyAgICAgICAgZWxpZiBbWyAteiAiJFFVSUVUX01PREUiIF1dCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHJlYWQgLWUgLXAgIiR7T1BFTlZJTV9CQVNFRk9MREVSfSBmb2xkZXIgZXhpc3QsIG92ZXJ3cml0ZT8gKHkvTikiIEtLCisgICAgICAgICAgICBpZiBbWyAiJEtLIiA9PSAieSIgXV0gfHwgW1sgIiRLSyIgPT0gInllcyIgXV0KKyAgICAgICAgICAgICAgICB0aGVuIHJtIC1yZiAiJE9QRU5WSU1fQkFTRUZPTERFUiIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlY2hvICJjYW5jZWxlZCIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIicke09QRU5WSU1fQkFTRUZPTERFUn0nIGZvbGRlciBleGlzdCIgPiYyICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCiAKLSNVbm5jb21lbnQgdG8gdXNlIGEgY29uY3JldGUgYnJhbmNoLCBpZiBub3QgbWFpbiBicmFuY2ggCi0jcHVzaGQgb3BlbnZpbQotI3N1ICRTVURPX1VTRVIgLWMgJ2dpdCBjaGVja291dCB2MC40JwotI3BvcGQKKworICAgIHN1ICRTVURPX1VTRVIgLWMgImdpdCBjbG9uZSAke0dJVF9VUkx9ICR7T1BFTlZJTV9CQVNFRk9MREVSfSIKKyAgICBzdSAkU1VET19VU0VSIC1jICJjcCAke09QRU5WSU1fQkFTRUZPTERFUn0vLmdpdGlnbm9yZS1jb21tb24gJHtPUEVOVklNX0JBU0VGT0xERVJ9Ly5naXRpZ25vcmUiCisgICAgW1sgLXogJERFVkVMT1AgXV0gJiYgc3UgJFNVRE9fVVNFUiAtYyAiZ2l0IC1DICAke09QRU5WSU1fQkFTRUZPTERFUn0gY2hlY2tvdXQgdGFncy92MS4wLjIiCitmaQogCiBlY2hvICcKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyAgICAgICAgICAgICAgIENSRUFURSBEQVRBQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCi1teXNxbGFkbWluIC11JERCVVNFUiAkREJQQVNTV0RfUEFSQU0gLXMgY3JlYXRlIHZpbV9kYiB8fCAhIGVjaG8gIkNhbm5vdCBjcmVhdGUgZGF0YWJhc2UgdmltX2RiIiB8fCBleGl0IDEKK2VjaG8gLWUgIlxuQ3JlYXRpbmcgdGVtcG9yYXJ5IGZpbGUgZm9ybSBNWVNRTCBpbnN0YWxsYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIgorVEVNUEZJTEU9IiQobWt0ZW1wIC1xIC0tdG1wZGlyICJpbnN0YWxsb3BlbnZpbS5YWFhYWFgiKSIKK3RyYXAgJ3JtIC1mICIkVEVNUEZJTEUiJyBFWElUCitjaG1vZCAwNjAwICIkVEVNUEZJTEUiCitlY2hvIC1lICJbY2xpZW50XVxuIHVzZXI9JyREQlVTRVInXG4gcGFzc3dvcmQ9JyREQlBBU1NXRCciPiIkVEVNUEZJTEUiCiAKLWVjaG8gIkNSRUFURSBVU0VSICd2aW0nQCdsb2NhbGhvc3QnIGlkZW50aWZpZWQgYnkgJ3ZpbXB3JzsiICAgICB8IG15c3FsIC11JERCVVNFUiAkREJQQVNTV0RfUEFSQU0gfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGFiYXNlIiB8fCBleGl0IDEKLWVjaG8gIkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIHZpbV9kYi4qIFRPICd2aW0nQCdsb2NhbGhvc3QnOyIgICB8IG15c3FsIC11JERCVVNFUiAkREJQQVNTV0RfUEFSQU0gfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGFiYXNlIiB8fCBleGl0IDEKLWVjaG8gIiBEYXRhYmFzZSAndmltX2RiJyBjcmVhdGVkLCB1c2VyICd2aW0nIHBhc3N3b3JkICd2aW1wdyciCitpZiBkYl9leGlzdHMgInZpbV9kYiIgJFRFTVBGSUxFIDsgdGhlbgorICAgIGlmIFtbIC1uICRGT1JDRURCIF1dOyB0aGVuCisgICAgICAgIGVjaG8gIiAgIERlbGV0aW5nIHByZXZpb3VzIGRhdGFiYXNlIHZpbV9kYiIKKyAgICAgICAgREJERUxFVEVQQVJBTT0iIgorICAgICAgICBbWyAtbiAkUVVJRVRfTU9ERSBdXSAmJiBEQkRFTEVURVBBUkFNPSItZiIKKyAgICAgICAgbXlzcWxhZG1pbiAtLWRlZmF1bHRzLWV4dHJhLWZpbGU9JFRFTVBGSUxFIC1zIGRyb3AgdmltX2RiICREQkRFTEVURVBBUkFNIHx8ICEgZWNobyAiQ291bGQgbm90IGRlbGV0ZSB2aW1fZGIgZGF0YWJhc2UiIHx8IGV4aXQgMQorICAgICAgICAjZWNobyAiUkVWT0tFIEFMTCBQUklWSUxFR0VTIE9OIHZpbV9kYi4qIEZST00gJ3ZpbSdAJ2xvY2FsaG9zdCc7IiB8IG15c3FsIC0tZGVmYXVsdHMtZXh0cmEtZmlsZT0kVEVNUEZJTEUgLXMgfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGF0YWJhc2UiIHx8IGV4aXQgMQorICAgICAgICAjZWNobyAiREVMRVRFIFVTRVIgJ3ZpbSdAJ2xvY2FsaG9zdCc7IiAgIHwgbXlzcWwgLS1kZWZhdWx0cy1leHRyYS1maWxlPSRURU1QRklMRSAtcyB8fCAhIGVjaG8gIkZhaWxlZCB3aGlsZSBjcmVhdGluZyB1c2VyIHZpbSBhdCBkYXRhYmFzZSIgfHwgZXhpdCAxCisgICAgICAgIG15c3FsYWRtaW4gLS1kZWZhdWx0cy1leHRyYS1maWxlPSRURU1QRklMRSAtcyBjcmVhdGUgdmltX2RiIHx8ICEgZWNobyAiRXJyb3IgY3JlYXRpbmcgdmltX2RiIGRhdGFiYXNlIiB8fCBleGl0IDEKKyAgICAgICAgZWNobyAiRFJPUCBVU0VSICd2aW0nQCdsb2NhbGhvc3QnOyIgICB8IG15c3FsIC0tZGVmYXVsdHMtZXh0cmEtZmlsZT0kVEVNUEZJTEUgLXMgfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGF0YWJhc2UiIHx8IGV4aXQgMQorICAgICAgICBlY2hvICJDUkVBVEUgVVNFUiAndmltJ0AnbG9jYWxob3N0JyBpZGVudGlmaWVkIGJ5ICd2aW1wdyc7IiAgIHwgbXlzcWwgLS1kZWZhdWx0cy1leHRyYS1maWxlPSRURU1QRklMRSAtcyB8fCAhIGVjaG8gIkZhaWxlZCB3aGlsZSBjcmVhdGluZyB1c2VyIHZpbSBhdCBkYXRhYmFzZSIgfHwgZXhpdCAxCisgICAgICAgIGVjaG8gIkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIHZpbV9kYi4qIFRPICd2aW0nQCdsb2NhbGhvc3QnOyIgfCBteXNxbCAtLWRlZmF1bHRzLWV4dHJhLWZpbGU9JFRFTVBGSUxFIC1zIHx8ICEgZWNobyAiRmFpbGVkIHdoaWxlIGNyZWF0aW5nIHVzZXIgdmltIGF0IGRhdGFiYXNlIiB8fCBleGl0IDEKKyAgICAgICAgZWNobyAiIERhdGFiYXNlICd2aW1fZGInIGNyZWF0ZWQsIHVzZXIgJ3ZpbScgcGFzc3dvcmQgJ3ZpbXB3JyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkRhdGFiYXNlIGV4aXN0cy4gVXNlIG9wdGlvbiAnLS1mb3JjZWRiJyB0byBmb3JjZSB0aGUgZGVsZXRpb24gb2YgdGhlIGV4aXN0aW5nIG9uZSIgJiYgZXhpdCAxCisgICAgZmkKK2Vsc2UKKyAgICBteXNxbGFkbWluIC11JERCVVNFUiAkREJQQVNTV0RfUEFSQU0gLXMgY3JlYXRlIHZpbV9kYiB8fCAhIGVjaG8gIkVycm9yIGNyZWF0aW5nIHZpbV9kYiBkYXRhYmFzZSIgfHwgZXhpdCAxCisgICAgZWNobyAiQ1JFQVRFIFVTRVIgJ3ZpbSdAJ2xvY2FsaG9zdCcgaWRlbnRpZmllZCBieSAndmltcHcnOyIgICB8IG15c3FsIC0tZGVmYXVsdHMtZXh0cmEtZmlsZT0kVEVNUEZJTEUgLXMgfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGF0YWJhc2UiIHx8IGV4aXQgMQorICAgIGVjaG8gIkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIHZpbV9kYi4qIFRPICd2aW0nQCdsb2NhbGhvc3QnOyIgfCBteXNxbCAtLWRlZmF1bHRzLWV4dHJhLWZpbGU9JFRFTVBGSUxFIC1zIHx8ICEgZWNobyAiRmFpbGVkIHdoaWxlIGNyZWF0aW5nIHVzZXIgdmltIGF0IGRhdGFiYXNlIiB8fCBleGl0IDEKKyAgICBlY2hvICIgRGF0YWJhc2UgJ3ZpbV9kYicgY3JlYXRlZCwgdXNlciAndmltJyBwYXNzd29yZCAndmltcHcnIgorZmkKIAotCi1zdSAkU1VET19VU0VSIC1jICcuL29wZW52aW0vZGF0YWJhc2VfdXRpbHMvaW5pdF92aW1fZGIuc2ggLXUgdmltIC1wIHZpbXB3JyAgfHwgISBlY2hvICJGYWlsZWQgd2hpbGUgY3JlYXRpbmcgdXNlciB2aW0gYXQgZGFiYXNlIiB8fCBleGl0IDEKK2VjaG8gJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICBJTklUIERBVEFCQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKK3N1ICRTVURPX1VTRVIgLWMgIiR7T1BFTlZJTV9CQVNFRk9MREVSfS9kYXRhYmFzZV91dGlscy9pbml0X3ZpbV9kYi5zaCAtdSB2aW0gLXAgdmltcHcgLWQgdmltX2RiIiB8fCAhIGVjaG8gIkZhaWxlZCB3aGlsZSBpbml0aWFsaXppbmcgZGF0YWJhc2UiIHx8IGV4aXQgMQogCiAKIGlmIFsgIiRfRElTVFJPIiA9PSAiQ2VudE9TIiAtbyAiJF9ESVNUUk8iID09ICJSZWQiIF0KQEAgLTI5Miw0MCArMzc1LDQyIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIyMgICAgICAgIENPTkZJR1VSRSBvcGVudmltIENMSUVOVCAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwotI2NyZWF0ZXMgYSBsaW5rIGF0IH4vYmluCi1zdSAkU1VET19VU0VSIC1jICdta2RpciAtcCB+L2JpbicKLXN1ICRTVURPX1VTRVIgLWMgJ3JtIC1mICR7SE9NRX0vYmluL29wZW52aW0nCi1zdSAkU1VET19VU0VSIC1jICdybSAtZiAke0hPTUV9L2Jpbi9vcGVuZmxvdycKLXN1ICRTVURPX1VTRVIgLWMgJ3JtIC1mICR7SE9NRX0vYmluL3NlcnZpY2Utb3BlbnZpbScKLXN1ICRTVURPX1VTRVIgLWMgJ3JtIC1mICR7SE9NRX0vYmluL2luaXRvcGVudmltJwotc3UgJFNVRE9fVVNFUiAtYyAncm0gLWYgJHtIT01FfS9iaW4vc2VydmljZS1mbG9vZGxpZ2h0Jwotc3UgJFNVRE9fVVNFUiAtYyAncm0gLWYgJHtIT01FfS9iaW4vc2VydmljZS1vcGVuZGF5bGlnaHQnCi1zdSAkU1VET19VU0VSIC1jICdybSAtZiAke0hPTUV9L2Jpbi9nZXRfZGhjcF9sZWFzZS5zaCcKLXN1ICRTVURPX1VTRVIgLWMgJ2xuIC1zICR7UFdEfS9vcGVudmltL29wZW52aW0gICAke0hPTUV9L2Jpbi9vcGVudmltJwotc3UgJFNVRE9fVVNFUiAtYyAnbG4gLXMgJHtQV0R9L29wZW52aW0vb3BlbmZsb3cgICR7SE9NRX0vYmluL29wZW5mbG93Jwotc3UgJFNVRE9fVVNFUiAtYyAnbG4gLXMgJHtQV0R9L29wZW52aW0vc2NyaXB0cy9zZXJ2aWNlLW9wZW52aW0uc2ggICR7SE9NRX0vYmluL3NlcnZpY2Utb3BlbnZpbScKLXN1ICRTVURPX1VTRVIgLWMgJ2xuIC1zICR7UFdEfS9vcGVudmltL3NjcmlwdHMvaW5pdG9wZW52aW0uc2ggICR7SE9NRX0vYmluL2luaXRvcGVudmltJwotc3UgJFNVRE9fVVNFUiAtYyAnbG4gLXMgJHtQV0R9L29wZW52aW0vc2NyaXB0cy9zZXJ2aWNlLWZsb29kbGlnaHQuc2ggICR7SE9NRX0vYmluL3NlcnZpY2UtZmxvb2RsaWdodCcKLXN1ICRTVURPX1VTRVIgLWMgJ2xuIC1zICR7UFdEfS9vcGVudmltL3NjcmlwdHMvc2VydmljZS1vcGVuZGF5bGlnaHQuc2ggICR7SE9NRX0vYmluL3NlcnZpY2Utb3BlbmRheWxpZ2h0Jwotc3UgJFNVRE9fVVNFUiAtYyAnbG4gLXMgJHtQV0R9L29wZW52aW0vc2NyaXB0cy9nZXRfZGhjcF9sZWFzZS5zaCAgJHtIT01FfS9iaW4vZ2V0X2RoY3BfbGVhc2Uuc2gnCi0KLSNpbnNlcnQgL2hvbWUvPHVzZXI+L2JpbiBpbiB0aGUgUEFUSAotI3NraXBlZCBiZWNhdXNlIG5vcm1hbGx5IHRoaXMgaXMgZG9uZSBhdXRob21hdGljYWxseSB3aGVuIH4vYmluIGV4aXN0Ci0jaWYgISBzdSAkU1VET19VU0VSIC1jICdlY2hvICRQQVRIJyB8IGdyZXAgLXEgIi9ob21lLyR7U1VET19VU0VSfS9iaW4iCi0jdGhlbgotIyAgICBlY2hvICIgICAgaW5zZXJ0aW5nIC9ob21lLyRTVURPX1VTRVIvYmluIGluIHRoZSBQQVRIIGF0IC5iYXNocmMiCi0jICAgIHN1ICRTVURPX1VTRVIgLWMgJ2VjaG8gIlBBVEg9XCRQQVRIOi9ob21lL1wke1VTRVJ9L2JpbiIgPj4gfi8uYmFzaHJjJwotI2ZpCi0KLWlmIFtbICRTVURPX1VTRVIgPT0gcm9vdCBdXQorI2NyZWF0ZXMgYSBsaW5rIGF0IH4vYmluIGlmIG5vdCBjb25maWd1cmVkIGFzIGEgc2VydmljZQoraWYgW1sgLXogIiRJTlNUQUxMX0FTX0FfU0VSVklDRSIgXV0KIHRoZW4KLSAgICBpZiAhIGVjaG8gJFBBVEggfCBncmVwIC1xICIke0hPTUV9L2JpbiIKKyAgICBzdSAkU1VET19VU0VSIC1jICdta2RpciAtcCB+L2JpbicKKyAgICBzdSAkU1VET19VU0VSIC1jICdybSAtZiAke0hPTUV9L2Jpbi9vcGVudmltJworICAgIHN1ICRTVURPX1VTRVIgLWMgJ3JtIC1mICR7SE9NRX0vYmluL29wZW5mbG93JworICAgIHN1ICRTVURPX1VTRVIgLWMgJ3JtIC1mICR7SE9NRX0vYmluL3NlcnZpY2Utb3BlbnZpbScKKyAgICBzdSAkU1VET19VU0VSIC1jICdybSAtZiAke0hPTUV9L2Jpbi9pbml0b3BlbnZpbScKKyAgICBzdSAkU1VET19VU0VSIC1jICdybSAtZiAke0hPTUV9L2Jpbi9zZXJ2aWNlLWZsb29kbGlnaHQnCisgICAgc3UgJFNVRE9fVVNFUiAtYyAncm0gLWYgJHtIT01FfS9iaW4vc2VydmljZS1vcGVuZGF5bGlnaHQnCisgICAgc3UgJFNVRE9fVVNFUiAtYyAncm0gLWYgJHtIT01FfS9iaW4vZ2V0X2RoY3BfbGVhc2Uuc2gnCisgICAgc3UgJFNVRE9fVVNFUiAtYyAibG4gLXMgJyR7T1BFTlZJTV9CQVNFRk9MREVSfS9vcGVudmltJyAgICInJHtIT01FfS9iaW4vb3BlbnZpbScKKyAgICBzdSAkU1VET19VU0VSIC1jICJsbiAtcyAnJHtPUEVOVklNX0JBU0VGT0xERVJ9L29wZW5mbG93JyAgIicke0hPTUV9L2Jpbi9vcGVuZmxvdycKKyAgICBzdSAkU1VET19VU0VSIC1jICJsbiAtcyAnJHtPUEVOVklNX0JBU0VGT0xERVJ9L3NjcmlwdHMvc2VydmljZS1vcGVudmltLnNoJyAgIicke0hPTUV9L2Jpbi9zZXJ2aWNlLW9wZW52aW0nCisgICAgc3UgJFNVRE9fVVNFUiAtYyAibG4gLXMgJyR7T1BFTlZJTV9CQVNFRk9MREVSfS9zY3JpcHRzL2luaXRvcGVudmltLnNoJyAgIicke0hPTUV9L2Jpbi9pbml0b3BlbnZpbScKKyAgICBzdSAkU1VET19VU0VSIC1jICJsbiAtcyAnJHtPUEVOVklNX0JBU0VGT0xERVJ9L3NjcmlwdHMvc2VydmljZS1mbG9vZGxpZ2h0LnNoJyAgIicke0hPTUV9L2Jpbi9zZXJ2aWNlLWZsb29kbGlnaHQnCisgICAgc3UgJFNVRE9fVVNFUiAtYyAibG4gLXMgJyR7T1BFTlZJTV9CQVNFRk9MREVSfS9zY3JpcHRzL3NlcnZpY2Utb3BlbmRheWxpZ2h0LnNoJyAgIicke0hPTUV9L2Jpbi9zZXJ2aWNlLW9wZW5kYXlsaWdodCcKKyAgICBzdSAkU1VET19VU0VSIC1jICJsbiAtcyAnJHtPUEVOVklNX0JBU0VGT0xERVJ9L3NjcmlwdHMvZ2V0X2RoY3BfbGVhc2Uuc2gnICAiJyR7SE9NRX0vYmluL2dldF9kaGNwX2xlYXNlLnNoJworICAgIAorICAgICNpbnNlcnQgL2hvbWUvPHVzZXI+L2JpbiBpbiB0aGUgUEFUSAorICAgICNza2lwZWQgYmVjYXVzZSBub3JtYWxseSB0aGlzIGlzIGRvbmUgYXV0aG9tYXRpY2FsbHkgd2hlbiB+L2JpbiBleGlzdAorICAgICNpZiAhIHN1ICRTVURPX1VTRVIgLWMgJ2VjaG8gJFBBVEgnIHwgZ3JlcCAtcSAiL2hvbWUvJHtTVURPX1VTRVJ9L2JpbiIKKyAgICAjdGhlbgorICAgICMgICAgZWNobyAiICAgIGluc2VydGluZyAvaG9tZS8kU1VET19VU0VSL2JpbiBpbiB0aGUgUEFUSCBhdCAuYmFzaHJjIgorICAgICMgICAgc3UgJFNVRE9fVVNFUiAtYyAnZWNobyAiUEFUSD1cJFBBVEg6L2hvbWUvXCR7VVNFUn0vYmluIiA+PiB+Ly5iYXNocmMnCisgICAgI2ZpCisgICAgCisgICAgaWYgW1sgJFNVRE9fVVNFUiA9PSByb290IF1dCiAgICAgdGhlbgotICAgICAgICBlY2hvICJQQVRIPVwkUEFUSDpcJHtIT01FfS9iaW4iID4+ICR7SE9NRX0vLmJhc2hyYworICAgICAgICBpZiAhIGVjaG8gJFBBVEggfCBncmVwIC1xICIke0hPTUV9L2JpbiIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZWNobyAiUEFUSD1cJFBBVEg6XCR7SE9NRX0vYmluIiA+PiAke0hPTUV9Ly5iYXNocmMKKyAgICAgICAgZmkKICAgICBmaQogZmkKIAotCiAjY29uZmlndXJlIGFyZy1hdXRvY29tcGxldGUgZm9yIHRoaXMgdXNlcgogI2luIGNhc2Ugb2YgbWlubWFsIGluc3RhbGF0aW9uIHRoaXMgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKIFtbICIkX0RJU1RSTyIgPT0gIkNlbnRPUyIgfHwgIiRfRElTVFJPIiA9PSAiUmVkIiBdXSAmJiB5dW0gaW5zdGFsbCAteSBiYXNoLWNvbXBsZXRpb24KQEAgLTMzOSwxOSArNDI0LDIxIEBACiAKIAogCi1pZiBbWyAiJF9ESVNUUk8iID09ICJVYnVudHUiIF1dICYmICBbWyAke19SRUxFQVNFJSUuKn0gPT0gMTYgXV0gJiYgW1sgLXogJERFVkVMT1AgXV0KK2lmIFtbIC1uICIkSU5TVEFMTF9BU19BX1NFUlZJQ0UiICBdXQogdGhlbgogZWNobyAnCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIyMgICAgICAgICAgICAgQ09ORklHVVJFIE9QRU5WSU0gU0VSVklDRSAgICAgICAgICAgICAgICAgIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwogCi0gICAgLi9vcGVudmltL3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLXNlcnZpY2Uuc2ggLWYgb3BlbnZpbSAjLXUgJFNVRE9fVVNFUgorICAgIERFTEVURV9QQVJBTT0iIiAmJiBbWyAteiAiJE5PQ0xPTkUiIF1dICYmIERFTEVURV9QQVJBTT0iLWQiCisgICAgJHtPUEVOVklNX0JBU0VGT0xERVJ9L3NjcmlwdHMvaW5zdGFsbC1vcGVudmltLXNlcnZpY2Uuc2ggLWYgJHtPUEVOVklNX0JBU0VGT0xERVJ9ICR7REVMRVRFX1BBUkFNfQogIyAgICBhbGlhcyBzZXJ2aWNlLW9wZW52aW09InNlcnZpY2Ugb3BlbnZpbSIKICMgICAgZWNobyAnYWxpYXMgc2VydmljZS1vcGVudmltPSJzZXJ2aWNlIG9wZW52aW0iJyA+PiAke0hPTUV9Ly5iYXNocmMKIAogICAgIGVjaG8KLSAgICBlY2hvICJEb25lISAgeW91IG1heSBuZWVkIHRvIGxvZ291dCBhbmQgbG9naW4gYWdhaW4gZm9yIGxvYWRpbmcgY2xpZW50IGNvbmZpZ3VyYXRpb24iCisgICAgZWNobworICAgIGVjaG8gIkRvbmUhICBpbnN0YWxsZWQgYXQgL29wdC9vcGVudmltIgogICAgIGVjaG8gIiBNYW5hZ2Ugc2VydmVyIHdpdGggJ3NlcnZpY2Ugb3BlbnZpbSBzdGFydHxzdG9wfHN0YXR1c3wuLi4nICIKIAogCkBAIC0zNTksNiArNDQ2LDYgQEAKIAogICAgIGVjaG8KICAgICBlY2hvICJEb25lISAgeW91IG1heSBuZWVkIHRvIGxvZ291dCBhbmQgbG9naW4gYWdhaW4gZm9yIGxvYWRpbmcgY2xpZW50IGNvbmZpZ3VyYXRpb24iCi0gICAgZWNobyAiIFJ1biAnLi9vcGVudmltL3NjcmlwdHMvc2VydmljZS1vcGVudmltLnNoIHN0YXJ0JyBmb3Igc3RhcnRpbmcgb3BlbnZpbSBpbiBhIHNjcmVlbiIKKyAgICBlY2hvICIgUnVuICdzZXJ2aWNlLW9wZW52aW0gc3RhcnQnIGZvciBzdGFydGluZyBvcGVudmltIGluIGEgc2NyZWVuIgogCiBmaQo=