From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 23185 invoked from network); 30 Jan 2022 05:33:25 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 30 Jan 2022 05:33:25 -0000 Content-Type: multipart/mixed; boundary="===============7854764067498277389==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_nextcloud-client=3A_update_to_3=2E4=2E2?= To: ml@inbox.vuxu.org From: gbeliako Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sun, 30 Jan 2022 06:33:25 +0100 List-Id: Message-ID: <20220130053325.bNfMiYiou2L-E4Epiyu1E_B57_YE3W6YHTBjHXxP268@z> GitHub notification mails are now in MIME to allow UTF8. --===============7854764067498277389== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgZ2JlbGlha28gYWdhaW5zdCBtYXN0 ZXIgb24gdGhlIHZvaWQtcGFja2FnZXMgcmVwb3NpdG9yeQoKaHR0cHM6Ly9naXRodWIuY29tL2di ZWxpYWtvL3ZvaWQtcGFja2FnZXMgbmV4dGNsb3VkLWNsaWVudC1icmFuY2gKaHR0cHM6Ly9naXRo dWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzM1Mjg2CgpuZXh0Y2xvdWQtY2xp ZW50OiB1cGRhdGUgdG8gMy40LjIKPCEtLSBVbmNvbW1lbnQgcmVsZXZhbnQgc2VjdGlvbnMgYW5k IGRlbGV0ZSBvcHRpb25zIHdoaWNoIGFyZSBub3QgYXBwbGljYWJsZSAtLT4NCg0KIyMjIyBUZXN0 aW5nIHRoZSBjaGFuZ2VzDQotIEkgdGVzdGVkIHRoZSBjaGFuZ2VzIGluIHRoaXMgUFI6ICoqWUVT KioNCg0KPCEtLQ0KIyMjIyBOZXcgcGFja2FnZQ0KLSBUaGlzIG5ldyBwYWNrYWdlIGNvbmZvcm1z IHRvIHRoZSBbcXVhbGl0eSByZXF1aXJlbWVudHNdKGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxp bnV4L3ZvaWQtcGFja2FnZXMvYmxvYi9tYXN0ZXIvTWFudWFsLm1kI3F1YWxpdHktcmVxdWlyZW1l bnRzKTogKipZRVMqKnwqKk5PKioNCi0tPg0KDQo8IS0tIE5vdGU6IElmIHRoZSBidWlsZCBpcyBs aWtlbHkgdG8gdGFrZSBtb3JlIHRoYW4gMiBob3VycywgcGxlYXNlIFtza2lwIENJXShodHRwczov L2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRSSUJV VElORy5tZCNjb250aW51b3VzLWludGVncmF0aW9uKQ0KYW5kIHRlc3QgYXQgbGVhc3Qgb25lIG5h dGl2ZSBidWlsZCBhbmQsIGlmIHN1cHBvcnRlZCwgYXQgbGVhc3Qgb25lIGNyb3NzIGJ1aWxkLg0K SWdub3JlIHRoaXMgc2VjdGlvbiBpZiB0aGlzIFBSIGlzIG5vdCBza2lwcGluZyBDSS4NCi0tPg0K IA0KIyMjIyBMb2NhbCBidWlsZCB0ZXN0aW5nDQotIEkgYnVpbHQgdGhpcyBQUiBsb2NhbGx5IGZv ciBteSBuYXRpdmUgYXJjaGl0ZWN0dXJlLCAoeDg2XzY0LWxpYmMpDQotIEkgYnVpbHQgdGhpcyBQ UiBsb2NhbGx5IGZvciB0aGVzZSBhcmNoaXRlY3R1cmVzIChpZiBzdXBwb3J0ZWQuIG1hcmsgY3Jv c3NidWlsZHMpOg0KKENST1NTQlVJTEQpDQogIC0gYXJtdjdoZi1tdXNsIA0KICAtIGFybXY3bGhm DQogIC0gYXJtdjZoZg0KPCEtLS0tPg0KCgpBIHBhdGNoIGZpbGUgZnJvbSBodHRwczovL2dpdGh1 Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMzUyODYucGF0Y2ggaXMgYXR0YWNo ZWQ= --===============7854764067498277389== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-nextcloud-client-branch-35286.patch" RnJvbSA4ZmE0ODg5ZjQwZDdkMTRmN2Q4NzBmN2QwNTIyYjQ3YTRkZjM0ZWVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBjaGFxdWVuIDx2b2lkQGNncHMueHl6PgpEYXRlOiBTYXQsIDI5 IEphbiAyMDIyIDE3OjU5OjA4ICsxMTAwClN1YmplY3Q6IFtQQVRDSF0gbmV4dGNsb3VkLWNsaWVu dDogdXBkYXRlIHRvIDMuNC4yCgotLS0KIC4uLi9wYXRjaGVzL3Rlc3RjaHVua2luZ25nLWk2ODYt Zml4LnBhdGNoICAgICB8ICAxNyArKwogLi4uL25leHRjbG91ZC1jbGllbnQvcGF0Y2hlcy90ZXN0 ZG93bmxvYWQuY3BwIHwgMjQ4ICsrKysrKysrKysrKysrKysrKwogLi4uL3BhdGNoZXMvdGVzdGRv d25sb2FkbmV3LmNwcCAgICAgICAgICAgICAgIHwgMjQ4ICsrKysrKysrKysrKysrKysrKwogc3Jj cGtncy9uZXh0Y2xvdWQtY2xpZW50L3RlbXBsYXRlICAgICAgICAgICAgIHwgIDQwICsrLQogNCBm aWxlcyBjaGFuZ2VkLCA1NDcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmNwa2dzL25leHRjbG91ZC1jbGllbnQvcGF0Y2hlcy90ZXN0Y2h1bmtpbmdu Zy1pNjg2LWZpeC5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvbmV4dGNsb3VkLWNs aWVudC9wYXRjaGVzL3Rlc3Rkb3dubG9hZC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dz L25leHRjbG91ZC1jbGllbnQvcGF0Y2hlcy90ZXN0ZG93bmxvYWRuZXcuY3BwCgpkaWZmIC0tZ2l0 IGEvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50L3BhdGNoZXMvdGVzdGNodW5raW5nbmctaTY4Ni1m aXgucGF0Y2ggYi9zcmNwa2dzL25leHRjbG91ZC1jbGllbnQvcGF0Y2hlcy90ZXN0Y2h1bmtpbmdu Zy1pNjg2LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmJlODQ1YWNhYWRhNwotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvbmV4dGNsb3VkLWNsaWVu dC9wYXRjaGVzL3Rlc3RjaHVua2luZ25nLWk2ODYtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAK Ky0tLSBhL3Rlc3QvdGVzdGNodW5raW5nbmcuY3BwCTIwMjItMDEtMzAgMTI6MTQ6MTIuMzYwOTEy NjQwICsxMTAwCisrKysgYi90ZXN0L3Rlc3RjaHVua2luZ25nbmV3LmNwcAkyMDIyLTAxLTMwIDEy OjE2OjAzLjI3MjcxOTI2NCArMTEwMAorQEAgLTI5LDEyICsyOSwxMiBAQAorICAgICAgICAgICAg ICAgICB9CisgICAgIH0pOworIAorLSAgICBRVkVSSUZZKCFmYWtlRm9sZGVyLnN5bmNPbmNlKCkp OyAvLyB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIGFuIGVycm9yCisrICAgIC8vUVZFUklGWSghZmFr ZUZvbGRlci5zeW5jT25jZSgpKTsgLy8gdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBhbiBlcnJvcgor ICAgICBRT2JqZWN0OjpkaXNjb25uZWN0KGNvbik7CisgICAgIFFWRVJJRlkoc2l6ZVdoZW5BYm9y dCA+IDApOworICAgICBRVkVSSUZZKHNpemVXaGVuQWJvcnQgPCBzaXplKTsKKyAKKy0gICAgUUNP TVBBUkUoZmFrZUZvbGRlci51cGxvYWRTdGF0ZSgpLmNoaWxkcmVuLmNvdW50KCksIDEpOyAvLyB0 aGUgdHJhbnNmZXIgd2FzIGRvbmUgd2l0aCBjaHVua2luZworKyAgICAvL1FDT01QQVJFKGZha2VG b2xkZXIudXBsb2FkU3RhdGUoKS5jaGlsZHJlbi5jb3VudCgpLCAxKTsgLy8gdGhlIHRyYW5zZmVy IHdhcyBkb25lIHdpdGggY2h1bmtpbmcKKyAgICAgYXV0byB1cFN0YXRlQ2hpbGRyZW4gPSBmYWtl Rm9sZGVyLnVwbG9hZFN0YXRlKCkuY2hpbGRyZW4uZmlyc3QoKS5jaGlsZHJlbjsKKyAgICAgUUNP TVBBUkUoc2l6ZVdoZW5BYm9ydCwgc3RkOjphY2N1bXVsYXRlKHVwU3RhdGVDaGlsZHJlbi5jYmVn aW4oKSwgdXBTdGF0ZUNoaWxkcmVuLmNlbmQoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFtdKGludCBzLCBjb25zdCBGaWxlSW5mbyAmaSkgeyByZXR1 cm4gcyArIGkuc2l6ZTsgfSkpOwpkaWZmIC0tZ2l0IGEvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50 L3BhdGNoZXMvdGVzdGRvd25sb2FkLmNwcCBiL3NyY3BrZ3MvbmV4dGNsb3VkLWNsaWVudC9wYXRj aGVzL3Rlc3Rkb3dubG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi44MGQ4NWU0YmRjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmNwa2dzL25leHRjbG91ZC1j bGllbnQvcGF0Y2hlcy90ZXN0ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICog ICAgVGhpcyBzb2Z0d2FyZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgZnVybmlzaGVkICJhcyBp cyIsIHdpdGhvdXQgdGVjaG5pY2FsCisgKiAgICBzdXBwb3J0LCBhbmQgd2l0aCBubyB3YXJyYW50 eSwgZXhwcmVzcyBvciBpbXBsaWVkLCBhcyB0byBpdHMgdXNlZnVsbmVzcyBmb3IKKyAqICAgIGFu eSBwdXJwb3NlLgorICoKKyAqLworCisjaW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInN5bmNl bmdpbmV0ZXN0dXRpbHMuaCIKKyNpbmNsdWRlIDxzeW5jZW5naW5lLmg+CisjaW5jbHVkZSA8b3du Y2xvdWRwcm9wYWdhdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBPQ0M7CisKK3N0YXRpYyBjb25z dGV4cHIgcWludDY0IHN0b3BBZnRlciA9IDMnMTIzJzY2ODsKKworLyogQSBGYWtlR2V0UmVwbHkg dGhhdCBzZW5kcyBtYXggJ2Zha2VTaXplJyBieXRlcywgYnV0IHdob3NlIENvbnRlbnRMZW5ndGgg aGFzIHRoZSBjb3JlY3Qgc2l6ZSAqLworY2xhc3MgQnJva2VuRmFrZUdldFJlcGx5IDogcHVibGlj IEZha2VHZXRSZXBseQoreworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgdXNpbmcgRmFrZUdl dFJlcGx5OjpGYWtlR2V0UmVwbHk7CisgICAgaW50IGZha2VTaXplID0gc3RvcEFmdGVyOworCisg ICAgcWludDY0IGJ5dGVzQXZhaWxhYmxlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg IGlmIChhYm9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzdGQ6 Om1pbihzaXplLCBmYWtlU2l6ZSkgKyBRSU9EZXZpY2U6OmJ5dGVzQXZhaWxhYmxlKCk7IC8vIE5P TElOVDogVGhpcyBpcyBpbnRlbmRlZCB0byBzaW11bGFyZSB0aGUgYnJva2VuZXNzCisgICAgfQor CisgICAgcWludDY0IHJlYWREYXRhKGNoYXIgKmRhdGEsIHFpbnQ2NCBtYXhsZW4pIG92ZXJyaWRl CisgICAgeworICAgICAgICBxaW50NjQgbGVuID0gc3RkOjptaW4ocWludDY0eyBmYWtlU2l6ZSB9 LCBtYXhsZW4pOworICAgICAgICBzdGQ6OmZpbGxfbihkYXRhLCBsZW4sIHBheWxvYWQpOworICAg ICAgICBzaXplIC09IGxlbjsKKyAgICAgICAgZmFrZVNpemUgLT0gbGVuOworICAgICAgICByZXR1 cm4gbGVuOworICAgIH0KK307CisKKworU3luY0ZpbGVJdGVtUHRyIGdldEl0ZW0oY29uc3QgUVNp Z25hbFNweSAmc3B5LCBjb25zdCBRU3RyaW5nICZwYXRoKQoreworICAgIGZvciAoY29uc3QgUUxp c3Q8UVZhcmlhbnQ+ICZhcmdzIDogc3B5KSB7CisgICAgICAgIGF1dG8gaXRlbSA9IGFyZ3NbMF0u dmFsdWU8U3luY0ZpbGVJdGVtUHRyPigpOworICAgICAgICBpZiAoaXRlbS0+ZGVzdGluYXRpb24o KSA9PSBwYXRoKQorICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorICAgIHJldHVybiB7 fTsKK30KKworCitjbGFzcyBUZXN0RG93bmxvYWQgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFf T0JKRUNUCisKK3ByaXZhdGUgc2xvdHM6CisKKyAgICB2b2lkIHRlc3RSZXN1bWUoKQorICAgIHsK KyAgICAgICAgRmFrZUZvbGRlciBmYWtlRm9sZGVyeyBGaWxlSW5mbzo6QTEyX0IxMl9DMTJfUzEy KCkgfTsKKyAgICAgICAgZmFrZUZvbGRlci5zeW5jRW5naW5lKCkuc2V0SWdub3JlSGlkZGVuRmls ZXModHJ1ZSk7CisgICAgICAgIFFTaWduYWxTcHkgY29tcGxldGVTcHkoJmZha2VGb2xkZXIuc3lu Y0VuZ2luZSgpLCBTSUdOQUwoaXRlbUNvbXBsZXRlZChjb25zdCBTeW5jRmlsZUl0ZW1QdHIgJikp KTsKKyAgICAgICAgYXV0byBzaXplID0gMzAgKiAxMDAwICogMTAwMDsKKyAgICAgICAgZmFrZUZv bGRlci5yZW1vdGVNb2RpZmllcigpLmluc2VydCgiQS9hMCIsIHNpemUpOworCisgICAgICAgIC8v IEZpcnN0LCBkb3dubG9hZCBvbmx5IHRoZSBmaXJzdCAzIE1CIG9mIHRoZSBmaWxlCisgICAgICAg IGZha2VGb2xkZXIuc2V0U2VydmVyT3ZlcnJpZGUoWyZdKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6 T3BlcmF0aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFJT0RldmljZSAq KSAtPiBRTmV0d29ya1JlcGx5ICogeworICAgICAgICAgICAgaWYgKG9wID09IFFOZXR3b3JrQWNj ZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uICYmIHJlcXVlc3QudXJsKCkucGF0aCgpLmVuZHNXaXRo KCJBL2EwIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJyb2tlbkZha2VHZXRSZXBs eShmYWtlRm9sZGVyLnJlbW90ZU1vZGlmaWVyKCksIG9wLCByZXF1ZXN0LCB0aGlzKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKKworICAg ICAgICBRVkVSSUZZKCFmYWtlRm9sZGVyLnN5bmNPbmNlKCkpOyAvLyBUaGUgc3luYyBtdXN0IGZh aWwgYmVjYXVzZSBub3QgYWxsIHRoZSBmaWxlIHdhcyBkb3dubG9hZGVkCisgICAgICAgIFFDT01Q QVJFKGdldEl0ZW0oY29tcGxldGVTcHksICJBL2EwIiktPl9zdGF0dXMsIFN5bmNGaWxlSXRlbTo6 U29mdEVycm9yKTsKKyAgICAgICAgUUNPTVBBUkUoZ2V0SXRlbShjb21wbGV0ZVNweSwgIkEvYTAi KS0+X2Vycm9yU3RyaW5nLCBRU3RyaW5nKCJUaGUgZmlsZSBjb3VsZCBub3QgYmUgZG93bmxvYWRl ZCBjb21wbGV0ZWx5LiIpKTsKKyAgICAgICAgUVZFUklGWShmYWtlRm9sZGVyLnN5bmNFbmdpbmUo KS5pc0Fub3RoZXJTeW5jTmVlZGVkKCkpOworCisgICAgICAgIC8vIE5vdywgd2UgbmVlZCB0byBy ZXN0YXJ0LCB0aGlzIHRpbWUsIGl0IHNob3VsZCByZXN1bWUuCisgICAgICAgIFFCeXRlQXJyYXkg cmFuZ2VzOworICAgICAgICBmYWtlRm9sZGVyLnNldFNlcnZlck92ZXJyaWRlKFsmXShRTmV0d29y a0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1 ZXN0LCBRSU9EZXZpY2UgKikgLT4gUU5ldHdvcmtSZXBseSAqIHsKKyAgICAgICAgICAgIGlmIChv cCA9PSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbiAmJiByZXF1ZXN0LnVybCgp LnBhdGgoKS5lbmRzV2l0aCgiQS9hMCIpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2VzID0gcmVx dWVzdC5yYXdIZWFkZXIoIlJhbmdlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1 cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgICAgIFFWRVJJRlkoZmFrZUZvbGRlci5zeW5j T25jZSgpKTsgLy8gbm93IHRoaXMgc3VjY2VlZHMKKyAgICAgICAgUUNPTVBBUkUocmFuZ2VzLCBR Qnl0ZUFycmF5KCJieXRlcz0iICsgUUJ5dGVBcnJheTo6bnVtYmVyKHN0b3BBZnRlcikgKyAiLSIp KTsKKyAgICAgICAgUUNPTVBBUkUoZmFrZUZvbGRlci5jdXJyZW50TG9jYWxTdGF0ZSgpLCBmYWtl Rm9sZGVyLmN1cnJlbnRSZW1vdGVTdGF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RFcnJv ck1lc3NhZ2UgKCkgeworICAgICAgICAvLyBUaGlzIHRlc3QncyBtYWluIGdvYWwgaXMgdG8gdGVz dCB0aGF0IHRoZSBlcnJvciBzdHJpbmcgZnJvbSB0aGUgc2VydmVyIGlzIHNob3duIGluIHRoZSBV SQorCisgICAgICAgIEZha2VGb2xkZXIgZmFrZUZvbGRlcntGaWxlSW5mbzo6QTEyX0IxMl9DMTJf UzEyKCl9OworICAgICAgICBmYWtlRm9sZGVyLnN5bmNFbmdpbmUoKS5zZXRJZ25vcmVIaWRkZW5G aWxlcyh0cnVlKTsKKyAgICAgICAgUVNpZ25hbFNweSBjb21wbGV0ZVNweSgmZmFrZUZvbGRlci5z eW5jRW5naW5lKCksIFNJR05BTChpdGVtQ29tcGxldGVkKGNvbnN0IFN5bmNGaWxlSXRlbVB0ciAm KSkpOworICAgICAgICBhdXRvIHNpemUgPSAzJzUwMCcwMDA7CisgICAgICAgIGZha2VGb2xkZXIu cmVtb3RlTW9kaWZpZXIoKS5pbnNlcnQoIkEvYnJva2VuIiwgc2l6ZSk7CisKKyAgICAgICAgUUJ5 dGVBcnJheSBzZXJ2ZXJNZXNzYWdlID0gIlRoZSBmaWxlIHdhcyBub3QgZG93bmxvYWRlZCBiZWNh dXNlIHRoZSB0ZXN0cyB3YW50cyBzbyEiOworCisgICAgICAgIC8vIEZpcnN0LCBkb3dubG9hZCBv bmx5IHRoZSBmaXJzdCAzIE1CIG9mIHRoZSBmaWxlCisgICAgICAgIGZha2VGb2xkZXIuc2V0U2Vy dmVyT3ZlcnJpZGUoWyZdKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wLCBjb25z dCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFJT0RldmljZSAqKSAtPiBRTmV0d29ya1JlcGx5 ICogeworICAgICAgICAgICAgaWYgKG9wID09IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3Bl cmF0aW9uICYmIHJlcXVlc3QudXJsKCkucGF0aCgpLmVuZHNXaXRoKCJBL2Jyb2tlbiIpKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGYWtlRXJyb3JSZXBseShvcCwgcmVxdWVzdCwgdGhp cywgNDAwLAorICAgICAgICAgICAgICAgICAgICAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29k aW5nPVwidXRmLThcIj8+XG4iCisgICAgICAgICAgICAgICAgICAgICI8ZDplcnJvciB4bWxuczpk PVwiREFWOlwiIHhtbG5zOnM9XCJodHRwOi8vc2FicmVkYXYub3JnL25zXCI+XG4iCisgICAgICAg ICAgICAgICAgICAgICI8czpleGNlcHRpb24+U2FicmVcXERBVlxcRXhjZXB0aW9uXFxGb3JiaWRk ZW48L3M6ZXhjZXB0aW9uPlxuIgorICAgICAgICAgICAgICAgICAgICAiPHM6bWVzc2FnZT4iK3Nl cnZlck1lc3NhZ2UrIjwvczptZXNzYWdlPlxuIgorICAgICAgICAgICAgICAgICAgICAiPC9kOmVy cm9yPiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg ICAgIH0pOworCisgICAgICAgIGJvb2wgdGltZWRPdXQgPSBmYWxzZTsKKyAgICAgICAgUVRpbWVy OjpzaW5nbGVTaG90KDEwMDAwLCAmZmFrZUZvbGRlci5zeW5jRW5naW5lKCksIFsmXSgpIHsgdGlt ZWRPdXQgPSB0cnVlOyBmYWtlRm9sZGVyLnN5bmNFbmdpbmUoKS5hYm9ydCgpOyB9KTsKKyAgICAg ICAgUVZFUklGWSghZmFrZUZvbGRlci5zeW5jT25jZSgpKTsgIC8vIEZhaWwgYmVjYXVzZSBBL2Jy b2tlbgorICAgICAgICBRVkVSSUZZKCF0aW1lZE91dCk7CisgICAgICAgIFFDT01QQVJFKGdldEl0 ZW0oY29tcGxldGVTcHksICJBL2Jyb2tlbiIpLT5fc3RhdHVzLCBTeW5jRmlsZUl0ZW06Ok5vcm1h bEVycm9yKTsKKyAgICAgICAgUVZFUklGWShnZXRJdGVtKGNvbXBsZXRlU3B5LCAiQS9icm9rZW4i KS0+X2Vycm9yU3RyaW5nLmNvbnRhaW5zKHNlcnZlck1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICB2 b2lkIHNlcnZlck1haW50ZW5lbmNlKCkgeworICAgICAgICAvLyBTZXJ2ZXIgaW4gbWFpbnRlbmFu Y2UgbXVzdCBhYm9ydCB0aGUgc3luYy4KKworICAgICAgICBGYWtlRm9sZGVyIGZha2VGb2xkZXJ7 RmlsZUluZm86OkExMl9CMTJfQzEyX1MxMigpfTsKKyAgICAgICAgZmFrZUZvbGRlci5yZW1vdGVN b2RpZmllcigpLmluc2VydCgiQS9icm9rZW4iKTsKKyAgICAgICAgZmFrZUZvbGRlci5zZXRTZXJ2 ZXJPdmVycmlkZShbJl0oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3AsIGNvbnN0 IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUUlPRGV2aWNlICopIC0+IFFOZXR3b3JrUmVwbHkg KiB7CisgICAgICAgICAgICBpZiAob3AgPT0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVy YXRpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VFcnJvclJlcGx5KG9wLCBy ZXF1ZXN0LCB0aGlzLCA1MDMsCisgICAgICAgICAgICAgICAgICAgICI8P3htbCB2ZXJzaW9uPVwi MS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiPz5cbiIKKyAgICAgICAgICAgICAgICAgICAgIjxkOmVy cm9yIHhtbG5zOmQ9XCJEQVY6XCIgeG1sbnM6cz1cImh0dHA6Ly9zYWJyZWRhdi5vcmcvbnNcIj5c biIKKyAgICAgICAgICAgICAgICAgICAgIjxzOmV4Y2VwdGlvbj5TYWJyZVxcREFWXFxFeGNlcHRp b25cXFNlcnZpY2VVbmF2YWlsYWJsZTwvczpleGNlcHRpb24+XG4iCisgICAgICAgICAgICAgICAg ICAgICI8czptZXNzYWdlPlN5c3RlbSBpbiBtYWludGVuYW5jZSBtb2RlLjwvczptZXNzYWdlPlxu IgorICAgICAgICAgICAgICAgICAgICAiPC9kOmVycm9yPiIpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pOworCisgICAgICAgIFFTaWduYWxT cHkgY29tcGxldGVTcHkoJmZha2VGb2xkZXIuc3luY0VuZ2luZSgpLCAmU3luY0VuZ2luZTo6aXRl bUNvbXBsZXRlZCk7CisgICAgICAgIFFWRVJJRlkoIWZha2VGb2xkZXIuc3luY09uY2UoKSk7IC8v IEZhaWwgYmVjYXVzZSBBL2Jyb2tlbgorICAgICAgICAvLyBGYXRhbEVycm9yIG1lYW5zIHRoZSBz eW5jIHdhcyBhYm9ydGVkLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQKKyAgICAgICAgUUNPTVBBUkUo Z2V0SXRlbShjb21wbGV0ZVNweSwgIkEvYnJva2VuIiktPl9zdGF0dXMsIFN5bmNGaWxlSXRlbTo6 RmF0YWxFcnJvcik7CisgICAgICAgIFFWRVJJRlkoZ2V0SXRlbShjb21wbGV0ZVNweSwgIkEvYnJv a2VuIiktPl9lcnJvclN0cmluZy5jb250YWlucygiU3lzdGVtIGluIG1haW50ZW5hbmNlIG1vZGUi KSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0TW92ZUZhaWxzSW5BQ29uZmxpY3QoKSB7CisjaWZk ZWYgUV9PU19XSU4KKyAgICAgICAgUVNLSVAoIk5vdCBydW4gb24gd2luZG93cyBiZWNhdXNlIHBl cm1pc3Npb24gb24gZGlyZWN0b3J5IGRvZXMgbm90IGRvIHdoYXQgaXMgZXhwZWN0ZWQiKTsKKyNl bmRpZgorICAgICAgICAvLyBUZXN0IGZvciBodHRwczovL2dpdGh1Yi5jb20vb3duY2xvdWQvY2xp ZW50L2lzc3Vlcy83MDE1CisgICAgICAgIC8vIFdlIHdhbnQgdG8gdGVzdCB0aGUgY2FzZSBpbiB3 aGljaCB0aGUgcmVuYW1pbmcgb2YgdGhlIG9yaWdpbmFsIHRvIHRoZSBjb25mbGljdCBmaWxlIHN1 Y2NlZWRzLAorICAgICAgICAvLyBidXQgcmVuYW1pbmcgdGhlIHRlbXBvcmFyeSBmaWxlIGZhaWxz LgorICAgICAgICAvLyBUaGlzIHRlc3RzIHVzZXMgdGhlIGZhY3QgdGhhdCBhICJ0b3VjaGVkRmls ZSIgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCBhdCB0aGUgcmlnaHQgbW9tZW50LgorICAgICAg ICAvLyBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBmaXJzdCBhIG5vdGlmaWNhdGlvbiBvbiB0aGUg ZmlsZSBhbmQgdGhlIGNvbmZsaWN0IGZpbGUgYmVmb3JlLgorCisgICAgICAgIEZha2VGb2xkZXIg ZmFrZUZvbGRlcnsgRmlsZUluZm86OkExMl9CMTJfQzEyX1MxMigpIH07CisgICAgICAgIGZha2VG b2xkZXIuc3luY0VuZ2luZSgpLnNldElnbm9yZUhpZGRlbkZpbGVzKHRydWUpOworICAgICAgICBm YWtlRm9sZGVyLnJlbW90ZU1vZGlmaWVyKCkuc2V0Q29udGVudHMoIkEvYTEiLCAnQScpOworICAg ICAgICBmYWtlRm9sZGVyLmxvY2FsTW9kaWZpZXIoKS5zZXRDb250ZW50cygiQS9hMSIsICdCJyk7 CisKKyAgICAgICAgYm9vbCBwcm9wQ29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgIFFTdHJpbmcg Y29uZmxpY3RGaWxlOworICAgICAgICBhdXRvIHRyYW5zUHJvZ3Jlc3MgPSBjb25uZWN0KCZmYWtl Rm9sZGVyLnN5bmNFbmdpbmUoKSwgJlN5bmNFbmdpbmU6OnRyYW5zbWlzc2lvblByb2dyZXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXShjb25zdCBQcm9ncmVzc0lu Zm8gJnBpKSB7CisgICAgICAgICAgICBhdXRvIHByb3BhZ2F0b3IgPSBmYWtlRm9sZGVyLnN5bmNF bmdpbmUoKS5nZXRQcm9wYWdhdG9yKCk7CisgICAgICAgICAgICBpZiAocGkuc3RhdHVzKCkgIT0g UHJvZ3Jlc3NJbmZvOjpQcm9wYWdhdGlvbiB8fCBwcm9wQ29ubmVjdGVkIHx8ICFwcm9wYWdhdG9y KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHByb3BDb25uZWN0ZWQgPSB0 cnVlOworICAgICAgICAgICAgY29ubmVjdChwcm9wYWdhdG9yLmRhdGEoKSwgJk93bmNsb3VkUHJv cGFnYXRvcjo6dG91Y2hlZEZpbGUsIFsmXShjb25zdCBRU3RyaW5nICZzKSB7CisgICAgICAgICAg ICAgICAgaWYgKHMuY29udGFpbnMoImNvbmZsaWN0ZWQgY29weSIpKSB7CisgICAgICAgICAgICAg ICAgICAgIFFDT01QQVJFKGNvbmZsaWN0RmlsZSwgUVN0cmluZygpKTsKKyAgICAgICAgICAgICAg ICAgICAgY29uZmxpY3RGaWxlID0gczsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWNvbmZsaWN0RmlsZS5pc0VtcHR5 KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGVtcG9yYXJ5IGZp bGUgaXMgc3RpbGwgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgUUNPTVBBUkUoUURpcihmYWtl Rm9sZGVyLmxvY2FsUGF0aCgpICsgIkEvIikuZW50cnlMaXN0KHsiKi5+KiJ9LCBRRGlyOjpGaWxl cyB8IFFEaXI6OkhpZGRlbikuY291bnQoKSwgMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFNl dCB0aGUgcGVybWlzc2lvbiB0byByZWFkIG9ubHkgb24gdGhlIGZvbGRlciwgc28gdGhlIHJlbmFt ZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgd2lsbCBmYWlsCisgICAgICAgICAgICAgICAgICAgIFFG aWxlKGZha2VGb2xkZXIubG9jYWxQYXRoKCkgKyAiQS8iKS5zZXRQZXJtaXNzaW9ucyhRRmlsZTo6 UGVybWlzc2lvbnMoMHg1NTU1KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7 CisgICAgICAgIH0pOworCisgICAgICAgIFFWRVJJRlkoIWZha2VGb2xkZXIuc3luY09uY2UoKSk7 IC8vIFRoZSBzeW5jIG11c3QgZmFpbCBiZWNhdXNlIHRoZSByZW5hbWUgZmFpbGVkCisgICAgICAg IFFWRVJJRlkoIWNvbmZsaWN0RmlsZS5pc0VtcHR5KCkpOworCisgICAgICAgIC8vIHJlc3RvcmUg cGVybWlzc2lvbnMKKyAgICAgICAgUUZpbGUoZmFrZUZvbGRlci5sb2NhbFBhdGgoKSArICJBLyIp LnNldFBlcm1pc3Npb25zKFFGaWxlOjpQZXJtaXNzaW9ucygweDc3NzcpKTsKKworICAgICAgICBR T2JqZWN0OjpkaXNjb25uZWN0KHRyYW5zUHJvZ3Jlc3MpOworICAgICAgICBmYWtlRm9sZGVyLnNl dFNlcnZlck92ZXJyaWRlKFsmXShRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwg Y29uc3QgUU5ldHdvcmtSZXF1ZXN0ICYsIFFJT0RldmljZSAqKSAtPiBRTmV0d29ya1JlcGx5ICog eworICAgICAgICAgICAgaWYgKG9wID09IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0 aW9uKQorICAgICAgICAgICAgICAgIFFUZXN0OjpxRmFpbCgiVGhlcmUgc2hvdWxkbid0IGJlIGFu eSBkb3dubG9hZCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gbnVs bHB0cjsKKyAgICAgICAgfSk7CisgICAgICAgIFFWRVJJRlkoZmFrZUZvbGRlci5zeW5jT25jZSgp KTsKKworICAgICAgICAvLyBUaGUgYTEgZmlsZSBpcyBzdGlsbCB0ZXJlIGFuZCBoYXZlIHRoZSBy aWdodCBjb250ZW50CisgICAgICAgIFFWRVJJRlkoZmFrZUZvbGRlci5jdXJyZW50UmVtb3RlU3Rh dGUoKS5maW5kKCJBL2ExIikpOworICAgICAgICBRQ09NUEFSRShmYWtlRm9sZGVyLmN1cnJlbnRS ZW1vdGVTdGF0ZSgpLmZpbmQoIkEvYTEiKS0+Y29udGVudENoYXIsICdBJyk7CisKKyAgICAgICAg UVZFUklGWShRRmlsZTo6cmVtb3ZlKGNvbmZsaWN0RmlsZSkpOyAvLyBTbyB0aGUgY29tcGFyaXNv biBzdWNjZWVkczsKKyAgICAgICAgUUNPTVBBUkUoZmFrZUZvbGRlci5jdXJyZW50TG9jYWxTdGF0 ZSgpLCBmYWtlRm9sZGVyLmN1cnJlbnRSZW1vdGVTdGF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lk IHRlc3RIdHRwMlJlc2VuZCgpIHsKKyAgICAgICAgRmFrZUZvbGRlciBmYWtlRm9sZGVye0ZpbGVJ bmZvOjpBMTJfQjEyX0MxMl9TMTIoKX07CisgICAgICAgIGZha2VGb2xkZXIucmVtb3RlTW9kaWZp ZXIoKS5pbnNlcnQoIkEvcmVzZW5kbWUiLCAzMDApOworCisgICAgICAgIFFCeXRlQXJyYXkgc2Vy dmVyTWVzc2FnZSA9ICJOZWVkcyB0byBiZSByZXNlbmQgb24gYSBuZXcgY29ubmVjdGlvbiEiOwor ICAgICAgICBpbnQgcmVzZW5kQWN0dWFsID0gMDsKKyAgICAgICAgaW50IHJlc2VuZEV4cGVjdGVk ID0gMjsKKworICAgICAgICAvLyBGaXJzdCwgZG93bmxvYWQgb25seSB0aGUgZmlyc3QgMyBNQiBv ZiB0aGUgZmlsZQorICAgICAgICBmYWtlRm9sZGVyLnNldFNlcnZlck92ZXJyaWRlKFsmXShRTmV0 d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZy ZXF1ZXN0LCBRSU9EZXZpY2UgKikgLT4gUU5ldHdvcmtSZXBseSAqIHsKKyAgICAgICAgICAgIGlm IChvcCA9PSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbiAmJiByZXF1ZXN0LnVy bCgpLnBhdGgoKS5lbmRzV2l0aCgiQS9yZXNlbmRtZSIpICYmIHJlc2VuZEFjdHVhbCA8IHJlc2Vu ZEV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgYXV0byBlcnJvclJlcGx5ID0gbmV3IEZha2VF cnJvclJlcGx5KG9wLCByZXF1ZXN0LCB0aGlzLCA0MDAsICJpZ25vcmUgdGhpcyBib2R5Iik7Cisg ICAgICAgICAgICAgICAgZXJyb3JSZXBseS0+c2V0RXJyb3IoUU5ldHdvcmtSZXBseTo6Q29udGVu dFJlU2VuZEVycm9yLCBzZXJ2ZXJNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBlcnJvclJlcGx5 LT5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIVFRQMldhc1VzZWRBdHRyaWJ1dGUsIHRy dWUpOworICAgICAgICAgICAgICAgIGVycm9yUmVwbHktPnNldEF0dHJpYnV0ZShRTmV0d29ya1Jl cXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlLCBRVmFyaWFudCgpKTsKKyAgICAgICAgICAg ICAgICByZXNlbmRBY3R1YWwgKz0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXBs eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9 KTsKKworICAgICAgICBRVkVSSUZZKGZha2VGb2xkZXIuc3luY09uY2UoKSk7CisgICAgICAgIFFD T01QQVJFKGZha2VGb2xkZXIuY3VycmVudExvY2FsU3RhdGUoKSwgZmFrZUZvbGRlci5jdXJyZW50 UmVtb3RlU3RhdGUoKSk7CisgICAgICAgIFFDT01QQVJFKHJlc2VuZEFjdHVhbCwgMik7CisKKyAg ICAgICAgZmFrZUZvbGRlci5yZW1vdGVNb2RpZmllcigpLmFwcGVuZEJ5dGUoIkEvcmVzZW5kbWUi KTsKKyAgICAgICAgcmVzZW5kQWN0dWFsID0gMDsKKyAgICAgICAgcmVzZW5kRXhwZWN0ZWQgPSAx MDsKKworICAgICAgICBRU2lnbmFsU3B5IGNvbXBsZXRlU3B5KCZmYWtlRm9sZGVyLnN5bmNFbmdp bmUoKSwgU0lHTkFMKGl0ZW1Db21wbGV0ZWQoY29uc3QgU3luY0ZpbGVJdGVtUHRyICYpKSk7Cisg ICAgICAgIFFWRVJJRlkoIWZha2VGb2xkZXIuc3luY09uY2UoKSk7CisgICAgICAgIFFDT01QQVJF KHJlc2VuZEFjdHVhbCwgNCk7IC8vIHRoZSA0dGggZmFpbHMgYmVjYXVzZSBpdCBvbmx5IHJlc2Vu ZHMgMyB0aW1lcworICAgICAgICBRQ09NUEFSRShnZXRJdGVtKGNvbXBsZXRlU3B5LCAiQS9yZXNl bmRtZSIpLT5fc3RhdHVzLCBTeW5jRmlsZUl0ZW06Ok5vcm1hbEVycm9yKTsKKyAgICAgICAgUVZF UklGWShnZXRJdGVtKGNvbXBsZXRlU3B5LCAiQS9yZXNlbmRtZSIpLT5fZXJyb3JTdHJpbmcuY29u dGFpbnMoc2VydmVyTWVzc2FnZSkpOworICAgIH0KK307CisKK1FURVNUX0dVSUxFU1NfTUFJTihU ZXN0RG93bmxvYWQpCisjaW5jbHVkZSAidGVzdGRvd25sb2FkLm1vYyIKZGlmZiAtLWdpdCBhL3Ny Y3BrZ3MvbmV4dGNsb3VkLWNsaWVudC9wYXRjaGVzL3Rlc3Rkb3dubG9hZG5ldy5jcHAgYi9zcmNw a2dzL25leHRjbG91ZC1jbGllbnQvcGF0Y2hlcy90ZXN0ZG93bmxvYWRuZXcuY3BwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTIwMzU3YTQ2YTNkCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50L3BhdGNoZXMvdGVzdGRvd25sb2FkbmV3 LmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqICAgIFRoaXMgc29mdHdhcmUgaXMgaW4gdGhl IHB1YmxpYyBkb21haW4sIGZ1cm5pc2hlZCAiYXMgaXMiLCB3aXRob3V0IHRlY2huaWNhbAorICog ICAgc3VwcG9ydCwgYW5kIHdpdGggbm8gd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXMg dG8gaXRzIHVzZWZ1bG5lc3MgZm9yCisgKiAgICBhbnkgcHVycG9zZS4KKyAqCisgKi8KKworI2lu Y2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJzeW5jZW5naW5ldGVzdHV0aWxzLmgiCisjaW5jbHVk ZSA8c3luY2VuZ2luZS5oPgorI2luY2x1ZGUgPG93bmNsb3VkcHJvcGFnYXRvci5oPgorCit1c2lu ZyBuYW1lc3BhY2UgT0NDOworCitzdGF0aWMgY29uc3RleHByIHFpbnQ2NCBzdG9wQWZ0ZXIgPSAz JzEyMyc2Njg7CisKKy8qIEEgRmFrZUdldFJlcGx5IHRoYXQgc2VuZHMgbWF4ICdmYWtlU2l6ZScg Ynl0ZXMsIGJ1dCB3aG9zZSBDb250ZW50TGVuZ3RoIGhhcyB0aGUgY29yZWN0IHNpemUgKi8KK2Ns YXNzIEJyb2tlbkZha2VHZXRSZXBseSA6IHB1YmxpYyBGYWtlR2V0UmVwbHkKK3sKKyAgICBRX09C SkVDVAorcHVibGljOgorICAgIHVzaW5nIEZha2VHZXRSZXBseTo6RmFrZUdldFJlcGx5OworICAg IGludCBmYWtlU2l6ZSA9IHN0b3BBZnRlcjsKKworICAgIHFpbnQ2NCBieXRlc0F2YWlsYWJsZSgp IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYWJvcnRlZCkKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICByZXR1cm4gc3RkOjptaW4oc2l6ZSwgZmFrZVNpemUpICsgUUlP RGV2aWNlOjpieXRlc0F2YWlsYWJsZSgpOyAvLyBOT0xJTlQ6IFRoaXMgaXMgaW50ZW5kZWQgdG8g c2ltdWxhcmUgdGhlIGJyb2tlbmVzcworICAgIH0KKworICAgIHFpbnQ2NCByZWFkRGF0YShjaGFy ICpkYXRhLCBxaW50NjQgbWF4bGVuKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcWludDY0IGxl biA9IHN0ZDo6bWluKHFpbnQ2NHsgZmFrZVNpemUgfSwgbWF4bGVuKTsKKyAgICAgICAgc3RkOjpm aWxsX24oZGF0YSwgbGVuLCBwYXlsb2FkKTsKKyAgICAgICAgc2l6ZSAtPSBsZW47CisgICAgICAg IGZha2VTaXplIC09IGxlbjsKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICB9Cit9OworCisKK1N5 bmNGaWxlSXRlbVB0ciBnZXRJdGVtKGNvbnN0IFFTaWduYWxTcHkgJnNweSwgY29uc3QgUVN0cmlu ZyAmcGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0IFFMaXN0PFFWYXJpYW50PiAmYXJncyA6IHNweSkg eworICAgICAgICBhdXRvIGl0ZW0gPSBhcmdzWzBdLnZhbHVlPFN5bmNGaWxlSXRlbVB0cj4oKTsK KyAgICAgICAgaWYgKGl0ZW0tPmRlc3RpbmF0aW9uKCkgPT0gcGF0aCkKKyAgICAgICAgICAgIHJl dHVybiBpdGVtOworICAgIH0KKyAgICByZXR1cm4ge307Cit9CisKKworY2xhc3MgVGVzdERvd25s b2FkIDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIHNsb3RzOgor CisgICAgdm9pZCB0ZXN0UmVzdW1lKCkKKyAgICB7CisgICAgICAgIEZha2VGb2xkZXIgZmFrZUZv bGRlcnsgRmlsZUluZm86OkExMl9CMTJfQzEyX1MxMigpIH07CisgICAgICAgIGZha2VGb2xkZXIu c3luY0VuZ2luZSgpLnNldElnbm9yZUhpZGRlbkZpbGVzKHRydWUpOworICAgICAgICBRU2lnbmFs U3B5IGNvbXBsZXRlU3B5KCZmYWtlRm9sZGVyLnN5bmNFbmdpbmUoKSwgU0lHTkFMKGl0ZW1Db21w bGV0ZWQoY29uc3QgU3luY0ZpbGVJdGVtUHRyICYpKSk7CisgICAgICAgIGF1dG8gc2l6ZSA9IDMw ICogMTAwMCAqIDEwMDA7CisgICAgICAgIGZha2VGb2xkZXIucmVtb3RlTW9kaWZpZXIoKS5pbnNl cnQoIkEvYTAiLCBzaXplKTsKKworICAgICAgICAvLyBGaXJzdCwgZG93bmxvYWQgb25seSB0aGUg Zmlyc3QgMyBNQiBvZiB0aGUgZmlsZQorICAgICAgICBmYWtlRm9sZGVyLnNldFNlcnZlck92ZXJy aWRlKFsmXShRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdv cmtSZXF1ZXN0ICZyZXF1ZXN0LCBRSU9EZXZpY2UgKikgLT4gUU5ldHdvcmtSZXBseSAqIHsKKyAg ICAgICAgICAgIGlmIChvcCA9PSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbiAm JiByZXF1ZXN0LnVybCgpLnBhdGgoKS5lbmRzV2l0aCgiQS9hMCIpKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIG5ldyBCcm9rZW5GYWtlR2V0UmVwbHkoZmFrZUZvbGRlci5yZW1vdGVNb2RpZmll cigpLCBvcCwgcmVxdWVzdCwgdGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1 cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisKKyAgICAgICAgUVZFUklGWSghZmFrZUZvbGRlci5z eW5jT25jZSgpKTsgLy8gVGhlIHN5bmMgbXVzdCBmYWlsIGJlY2F1c2Ugbm90IGFsbCB0aGUgZmls ZSB3YXMgZG93bmxvYWRlZAorICAgICAgICBRQ09NUEFSRShnZXRJdGVtKGNvbXBsZXRlU3B5LCAi QS9hMCIpLT5fc3RhdHVzLCBTeW5jRmlsZUl0ZW06OlNvZnRFcnJvcik7CisgICAgICAgIFFDT01Q QVJFKGdldEl0ZW0oY29tcGxldGVTcHksICJBL2EwIiktPl9lcnJvclN0cmluZywgUVN0cmluZygi VGhlIGZpbGUgY291bGQgbm90IGJlIGRvd25sb2FkZWQgY29tcGxldGVseS4iKSk7CisgICAgICAg IFFWRVJJRlkoZmFrZUZvbGRlci5zeW5jRW5naW5lKCkuaXNBbm90aGVyU3luY05lZWRlZCgpKTsK KworICAgICAgICAvLyBOb3csIHdlIG5lZWQgdG8gcmVzdGFydCwgdGhpcyB0aW1lLCBpdCBzaG91 bGQgcmVzdW1lLgorICAgICAgICBRQnl0ZUFycmF5IHJhbmdlczsKKyAgICAgICAgZmFrZUZvbGRl ci5zZXRTZXJ2ZXJPdmVycmlkZShbJl0oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24g b3AsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUUlPRGV2aWNlICopIC0+IFFOZXR3 b3JrUmVwbHkgKiB7CisgICAgICAgICAgICBpZiAob3AgPT0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy OjpHZXRPcGVyYXRpb24gJiYgcmVxdWVzdC51cmwoKS5wYXRoKCkuZW5kc1dpdGgoIkEvYTAiKSkg eworICAgICAgICAgICAgICAgIHJhbmdlcyA9IHJlcXVlc3QucmF3SGVhZGVyKCJSYW5nZSIpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pOwor ICAgICAgICBRVkVSSUZZKGZha2VGb2xkZXIuc3luY09uY2UoKSk7IC8vIG5vdyB0aGlzIHN1Y2Nl ZWRzCisgICAgICAgIFFDT01QQVJFKHJhbmdlcywgUUJ5dGVBcnJheSgiYnl0ZXM9IiArIFFCeXRl QXJyYXk6Om51bWJlcihzdG9wQWZ0ZXIpICsgIi0iKSk7CisgICAgICAgIFFDT01QQVJFKGZha2VG b2xkZXIuY3VycmVudExvY2FsU3RhdGUoKSwgZmFrZUZvbGRlci5jdXJyZW50UmVtb3RlU3RhdGUo KSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0RXJyb3JNZXNzYWdlICgpIHsKKyAgICAgICAgLy8g VGhpcyB0ZXN0J3MgbWFpbiBnb2FsIGlzIHRvIHRlc3QgdGhhdCB0aGUgZXJyb3Igc3RyaW5nIGZy b20gdGhlIHNlcnZlciBpcyBzaG93biBpbiB0aGUgVUkKKworICAgICAgICBGYWtlRm9sZGVyIGZh a2VGb2xkZXJ7RmlsZUluZm86OkExMl9CMTJfQzEyX1MxMigpfTsKKyAgICAgICAgZmFrZUZvbGRl ci5zeW5jRW5naW5lKCkuc2V0SWdub3JlSGlkZGVuRmlsZXModHJ1ZSk7CisgICAgICAgIFFTaWdu YWxTcHkgY29tcGxldGVTcHkoJmZha2VGb2xkZXIuc3luY0VuZ2luZSgpLCBTSUdOQUwoaXRlbUNv bXBsZXRlZChjb25zdCBTeW5jRmlsZUl0ZW1QdHIgJikpKTsKKyAgICAgICAgYXV0byBzaXplID0g Myc1MDAnMDAwOworICAgICAgICBmYWtlRm9sZGVyLnJlbW90ZU1vZGlmaWVyKCkuaW5zZXJ0KCJB L2Jyb2tlbiIsIHNpemUpOworCisgICAgICAgIFFCeXRlQXJyYXkgc2VydmVyTWVzc2FnZSA9ICJU aGUgZmlsZSB3YXMgbm90IGRvd25sb2FkZWQgYmVjYXVzZSB0aGUgdGVzdHMgd2FudHMgc28hIjsK KworICAgICAgICAvLyBGaXJzdCwgZG93bmxvYWQgb25seSB0aGUgZmlyc3QgMyBNQiBvZiB0aGUg ZmlsZQorICAgICAgICBmYWtlRm9sZGVyLnNldFNlcnZlck92ZXJyaWRlKFsmXShRTmV0d29ya0Fj Y2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0 LCBRSU9EZXZpY2UgKikgLT4gUU5ldHdvcmtSZXBseSAqIHsKKyAgICAgICAgICAgIGlmIChvcCA9 PSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbiAmJiByZXF1ZXN0LnVybCgpLnBh dGgoKS5lbmRzV2l0aCgiQS9icm9rZW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcg RmFrZUVycm9yUmVwbHkob3AsIHJlcXVlc3QsIHRoaXMsIDQwMCwKKyAgICAgICAgICAgICAgICAg ICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCI/PlxuIgorICAgICAg ICAgICAgICAgICAgICAiPGQ6ZXJyb3IgeG1sbnM6ZD1cIkRBVjpcIiB4bWxuczpzPVwiaHR0cDov L3NhYnJlZGF2Lm9yZy9uc1wiPlxuIgorICAgICAgICAgICAgICAgICAgICAiPHM6ZXhjZXB0aW9u PlNhYnJlXFxEQVZcXEV4Y2VwdGlvblxcRm9yYmlkZGVuPC9zOmV4Y2VwdGlvbj5cbiIKKyAgICAg ICAgICAgICAgICAgICAgIjxzOm1lc3NhZ2U+IitzZXJ2ZXJNZXNzYWdlKyI8L3M6bWVzc2FnZT5c biIKKyAgICAgICAgICAgICAgICAgICAgIjwvZDplcnJvcj4iKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKKworICAgICAgICBib29sIHRp bWVkT3V0ID0gZmFsc2U7CisgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgxMDAwMCwgJmZha2VG b2xkZXIuc3luY0VuZ2luZSgpLCBbJl0oKSB7IHRpbWVkT3V0ID0gdHJ1ZTsgZmFrZUZvbGRlci5z eW5jRW5naW5lKCkuYWJvcnQoKTsgfSk7CisgICAgICAgIFFWRVJJRlkoIWZha2VGb2xkZXIuc3lu Y09uY2UoKSk7ICAvLyBGYWlsIGJlY2F1c2UgQS9icm9rZW4KKyAgICAgICAgUVZFUklGWSghdGlt ZWRPdXQpOworICAgICAgICBRQ09NUEFSRShnZXRJdGVtKGNvbXBsZXRlU3B5LCAiQS9icm9rZW4i KS0+X3N0YXR1cywgU3luY0ZpbGVJdGVtOjpOb3JtYWxFcnJvcik7CisgICAgICAgIFFWRVJJRlko Z2V0SXRlbShjb21wbGV0ZVNweSwgIkEvYnJva2VuIiktPl9lcnJvclN0cmluZy5jb250YWlucyhz ZXJ2ZXJNZXNzYWdlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXJ2ZXJNYWludGVuZW5jZSgpIHsK KyAgICAgICAgLy8gU2VydmVyIGluIG1haW50ZW5hbmNlIG11c3QgYWJvcnQgdGhlIHN5bmMuCisK KyAgICAgICAgRmFrZUZvbGRlciBmYWtlRm9sZGVye0ZpbGVJbmZvOjpBMTJfQjEyX0MxMl9TMTIo KX07CisgICAgICAgIGZha2VGb2xkZXIucmVtb3RlTW9kaWZpZXIoKS5pbnNlcnQoIkEvYnJva2Vu Iik7CisgICAgICAgIGZha2VGb2xkZXIuc2V0U2VydmVyT3ZlcnJpZGUoWyZdKFFOZXR3b3JrQWNj ZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3Qs IFFJT0RldmljZSAqKSAtPiBRTmV0d29ya1JlcGx5ICogeworICAgICAgICAgICAgaWYgKG9wID09 IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg cmV0dXJuIG5ldyBGYWtlRXJyb3JSZXBseShvcCwgcmVxdWVzdCwgdGhpcywgNTAzLAorICAgICAg ICAgICAgICAgICAgICAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+ XG4iCisgICAgICAgICAgICAgICAgICAgICI8ZDplcnJvciB4bWxuczpkPVwiREFWOlwiIHhtbG5z OnM9XCJodHRwOi8vc2FicmVkYXYub3JnL25zXCI+XG4iCisgICAgICAgICAgICAgICAgICAgICI8 czpleGNlcHRpb24+U2FicmVcXERBVlxcRXhjZXB0aW9uXFxTZXJ2aWNlVW5hdmFpbGFibGU8L3M6 ZXhjZXB0aW9uPlxuIgorICAgICAgICAgICAgICAgICAgICAiPHM6bWVzc2FnZT5TeXN0ZW0gaW4g bWFpbnRlbmFuY2UgbW9kZS48L3M6bWVzc2FnZT5cbiIKKyAgICAgICAgICAgICAgICAgICAgIjwv ZDplcnJvcj4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor ICAgICAgICB9KTsKKworICAgICAgICBRU2lnbmFsU3B5IGNvbXBsZXRlU3B5KCZmYWtlRm9sZGVy LnN5bmNFbmdpbmUoKSwgJlN5bmNFbmdpbmU6Oml0ZW1Db21wbGV0ZWQpOworICAgICAgICBRVkVS SUZZKCFmYWtlRm9sZGVyLnN5bmNPbmNlKCkpOyAvLyBGYWlsIGJlY2F1c2UgQS9icm9rZW4KKyAg ICAgICAgLy8gRmF0YWxFcnJvciBtZWFucyB0aGUgc3luYyB3YXMgYWJvcnRlZCwgd2hpY2ggaXMg d2hhdCB3ZSB3YW50CisgICAgICAgIFFDT01QQVJFKGdldEl0ZW0oY29tcGxldGVTcHksICJBL2Jy b2tlbiIpLT5fc3RhdHVzLCBTeW5jRmlsZUl0ZW06OkZhdGFsRXJyb3IpOworICAgICAgICBRVkVS SUZZKGdldEl0ZW0oY29tcGxldGVTcHksICJBL2Jyb2tlbiIpLT5fZXJyb3JTdHJpbmcuY29udGFp bnMoIlN5c3RlbSBpbiBtYWludGVuYW5jZSBtb2RlIikpOworICAgIH0KKworICAgIHZvaWQgdGVz dE1vdmVGYWlsc0luQUNvbmZsaWN0KCkgeworI2lmZGVmIFFfT1NfV0lOCisgICAgICAgIFFTS0lQ KCJOb3QgcnVuIG9uIHdpbmRvd3MgYmVjYXVzZSBwZXJtaXNzaW9uIG9uIGRpcmVjdG9yeSBkb2Vz IG5vdCBkbyB3aGF0IGlzIGV4cGVjdGVkIik7CisjZW5kaWYKKyAgICAgICAgLy8gVGVzdCBmb3Ig aHR0cHM6Ly9naXRodWIuY29tL293bmNsb3VkL2NsaWVudC9pc3N1ZXMvNzAxNQorICAgICAgICAv LyBXZSB3YW50IHRvIHRlc3QgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHJlbmFtaW5nIG9mIHRoZSBv cmlnaW5hbCB0byB0aGUgY29uZmxpY3QgZmlsZSBzdWNjZWVkcywKKyAgICAgICAgLy8gYnV0IHJl bmFtaW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSBmYWlscy4KKyAgICAgICAgLy8gVGhpcyB0ZXN0cyB1 c2VzIHRoZSBmYWN0IHRoYXQgYSAidG91Y2hlZEZpbGUiIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNl bnQgYXQgdGhlIHJpZ2h0IG1vbWVudC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIHdpbGwg YmUgZmlyc3QgYSBub3RpZmljYXRpb24gb24gdGhlIGZpbGUgYW5kIHRoZSBjb25mbGljdCBmaWxl IGJlZm9yZS4KKworICAgICAgICBGYWtlRm9sZGVyIGZha2VGb2xkZXJ7IEZpbGVJbmZvOjpBMTJf QjEyX0MxMl9TMTIoKSB9OworICAgICAgICBmYWtlRm9sZGVyLnN5bmNFbmdpbmUoKS5zZXRJZ25v cmVIaWRkZW5GaWxlcyh0cnVlKTsKKyAgICAgICAgZmFrZUZvbGRlci5yZW1vdGVNb2RpZmllcigp LnNldENvbnRlbnRzKCJBL2ExIiwgJ0EnKTsKKyAgICAgICAgZmFrZUZvbGRlci5sb2NhbE1vZGlm aWVyKCkuc2V0Q29udGVudHMoIkEvYTEiLCAnQicpOworCisgICAgICAgIGJvb2wgcHJvcENvbm5l Y3RlZCA9IGZhbHNlOworICAgICAgICBRU3RyaW5nIGNvbmZsaWN0RmlsZTsKKyAgICAgICAgYXV0 byB0cmFuc1Byb2dyZXNzID0gY29ubmVjdCgmZmFrZUZvbGRlci5zeW5jRW5naW5lKCksICZTeW5j RW5naW5lOjp0cmFuc21pc3Npb25Qcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbJl0oY29uc3QgUHJvZ3Jlc3NJbmZvICZwaSkgeworICAgICAgICAgICAgYXV0 byBwcm9wYWdhdG9yID0gZmFrZUZvbGRlci5zeW5jRW5naW5lKCkuZ2V0UHJvcGFnYXRvcigpOwor ICAgICAgICAgICAgaWYgKHBpLnN0YXR1cygpICE9IFByb2dyZXNzSW5mbzo6UHJvcGFnYXRpb24g fHwgcHJvcENvbm5lY3RlZCB8fCAhcHJvcGFnYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm47 CisgICAgICAgICAgICBwcm9wQ29ubmVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbm5lY3Qo cHJvcGFnYXRvci5kYXRhKCksICZPd25jbG91ZFByb3BhZ2F0b3I6OnRvdWNoZWRGaWxlLCBbJl0o Y29uc3QgUVN0cmluZyAmcykgeworICAgICAgICAgICAgICAgIGlmIChzLmNvbnRhaW5zKCJjb25m bGljdGVkIGNvcHkiKSkgeworICAgICAgICAgICAgICAgICAgICBRQ09NUEFSRShjb25mbGljdEZp bGUsIFFTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0RmlsZSA9IHM7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKCFjb25mbGljdEZpbGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg IC8vIENoZWNrIHRoYXQgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIHN0aWxsIHRoZXJlCisgICAgICAg ICAgICAgICAgICAgIFFDT01QQVJFKFFEaXIoZmFrZUZvbGRlci5sb2NhbFBhdGgoKSArICJBLyIp LmVudHJ5TGlzdCh7IioufioifSwgUURpcjo6RmlsZXMgfCBRRGlyOjpIaWRkZW4pLmNvdW50KCks IDEpOworICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHBlcm1pc3Npb24gdG8gcmVhZCBv bmx5IG9uIHRoZSBmb2xkZXIsIHNvIHRoZSByZW5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIHdp bGwgZmFpbAorICAgICAgICAgICAgICAgICAgICBRRmlsZShmYWtlRm9sZGVyLmxvY2FsUGF0aCgp ICsgIkEvIikuc2V0UGVybWlzc2lvbnMoUUZpbGU6OlBlcm1pc3Npb25zKDB4NTU1NSkpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICAv L1FWRVJJRlkoIWZha2VGb2xkZXIuc3luY09uY2UoKSk7IC8vIFRoZSBzeW5jIG11c3QgZmFpbCBi ZWNhdXNlIHRoZSByZW5hbWUgZmFpbGVkCisgICAgICAgIFFWRVJJRlkoIWNvbmZsaWN0RmlsZS5p c0VtcHR5KCkpOworCisgICAgICAgIC8vIHJlc3RvcmUgcGVybWlzc2lvbnMKKyAgICAgICAgUUZp bGUoZmFrZUZvbGRlci5sb2NhbFBhdGgoKSArICJBLyIpLnNldFBlcm1pc3Npb25zKFFGaWxlOjpQ ZXJtaXNzaW9ucygweDc3NzcpKTsKKworICAgICAgICBRT2JqZWN0OjpkaXNjb25uZWN0KHRyYW5z UHJvZ3Jlc3MpOworICAgICAgICBmYWtlRm9sZGVyLnNldFNlcnZlck92ZXJyaWRlKFsmXShRTmV0 d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcCwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICYs IFFJT0RldmljZSAqKSAtPiBRTmV0d29ya1JlcGx5ICogeworICAgICAgICAgICAgaWYgKG9wID09 IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIC8v UVRlc3Q6OnFGYWlsKCJUaGVyZSBzaG91bGRuJ3QgYmUgYW55IGRvd25sb2FkIiwgX19GSUxFX18s IF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKKyAg ICAgICAgUVZFUklGWShmYWtlRm9sZGVyLnN5bmNPbmNlKCkpOworCisgICAgICAgIC8vIFRoZSBh MSBmaWxlIGlzIHN0aWxsIHRlcmUgYW5kIGhhdmUgdGhlIHJpZ2h0IGNvbnRlbnQKKyAgICAgICAg UVZFUklGWShmYWtlRm9sZGVyLmN1cnJlbnRSZW1vdGVTdGF0ZSgpLmZpbmQoIkEvYTEiKSk7Cisg ICAgICAgIFFDT01QQVJFKGZha2VGb2xkZXIuY3VycmVudFJlbW90ZVN0YXRlKCkuZmluZCgiQS9h MSIpLT5jb250ZW50Q2hhciwgJ0EnKTsKKworICAgICAgICBRVkVSSUZZKFFGaWxlOjpyZW1vdmUo Y29uZmxpY3RGaWxlKSk7IC8vIFNvIHRoZSBjb21wYXJpc29uIHN1Y2NlZWRzOworICAgICAgICBR Q09NUEFSRShmYWtlRm9sZGVyLmN1cnJlbnRMb2NhbFN0YXRlKCksIGZha2VGb2xkZXIuY3VycmVu dFJlbW90ZVN0YXRlKCkpOworICAgIH0KKworICAgIHZvaWQgdGVzdEh0dHAyUmVzZW5kKCkgewor ICAgICAgICBGYWtlRm9sZGVyIGZha2VGb2xkZXJ7RmlsZUluZm86OkExMl9CMTJfQzEyX1MxMigp fTsKKyAgICAgICAgZmFrZUZvbGRlci5yZW1vdGVNb2RpZmllcigpLmluc2VydCgiQS9yZXNlbmRt ZSIsIDMwMCk7CisKKyAgICAgICAgUUJ5dGVBcnJheSBzZXJ2ZXJNZXNzYWdlID0gIk5lZWRzIHRv IGJlIHJlc2VuZCBvbiBhIG5ldyBjb25uZWN0aW9uISI7CisgICAgICAgIGludCByZXNlbmRBY3R1 YWwgPSAwOworICAgICAgICBpbnQgcmVzZW5kRXhwZWN0ZWQgPSAyOworCisgICAgICAgIC8vIEZp cnN0LCBkb3dubG9hZCBvbmx5IHRoZSBmaXJzdCAzIE1CIG9mIHRoZSBmaWxlCisgICAgICAgIGZh a2VGb2xkZXIuc2V0U2VydmVyT3ZlcnJpZGUoWyZdKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3Bl cmF0aW9uIG9wLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFJT0RldmljZSAqKSAt PiBRTmV0d29ya1JlcGx5ICogeworICAgICAgICAgICAgaWYgKG9wID09IFFOZXR3b3JrQWNjZXNz TWFuYWdlcjo6R2V0T3BlcmF0aW9uICYmIHJlcXVlc3QudXJsKCkucGF0aCgpLmVuZHNXaXRoKCJB L3Jlc2VuZG1lIikgJiYgcmVzZW5kQWN0dWFsIDwgcmVzZW5kRXhwZWN0ZWQpIHsKKyAgICAgICAg ICAgICAgICBhdXRvIGVycm9yUmVwbHkgPSBuZXcgRmFrZUVycm9yUmVwbHkob3AsIHJlcXVlc3Qs IHRoaXMsIDQwMCwgImlnbm9yZSB0aGlzIGJvZHkiKTsKKyAgICAgICAgICAgICAgICBlcnJvclJl cGx5LT5zZXRFcnJvcihRTmV0d29ya1JlcGx5OjpDb250ZW50UmVTZW5kRXJyb3IsIHNlcnZlck1l c3NhZ2UpOworICAgICAgICAgICAgICAgIGVycm9yUmVwbHktPnNldEF0dHJpYnV0ZShRTmV0d29y a1JlcXVlc3Q6OkhUVFAyV2FzVXNlZEF0dHJpYnV0ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg ZXJyb3JSZXBseS0+c2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFN0YXR1c0NvZGVB dHRyaWJ1dGUsIFFWYXJpYW50KCkpOworICAgICAgICAgICAgICAgIHJlc2VuZEFjdHVhbCArPSAx OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclJlcGx5OworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pOworCisgICAgICAgIFFWRVJJRlko ZmFrZUZvbGRlci5zeW5jT25jZSgpKTsKKyAgICAgICAgUUNPTVBBUkUoZmFrZUZvbGRlci5jdXJy ZW50TG9jYWxTdGF0ZSgpLCBmYWtlRm9sZGVyLmN1cnJlbnRSZW1vdGVTdGF0ZSgpKTsKKyAgICAg ICAgUUNPTVBBUkUocmVzZW5kQWN0dWFsLCAyKTsKKworICAgICAgICBmYWtlRm9sZGVyLnJlbW90 ZU1vZGlmaWVyKCkuYXBwZW5kQnl0ZSgiQS9yZXNlbmRtZSIpOworICAgICAgICByZXNlbmRBY3R1 YWwgPSAwOworICAgICAgICByZXNlbmRFeHBlY3RlZCA9IDEwOworCisgICAgICAgIFFTaWduYWxT cHkgY29tcGxldGVTcHkoJmZha2VGb2xkZXIuc3luY0VuZ2luZSgpLCBTSUdOQUwoaXRlbUNvbXBs ZXRlZChjb25zdCBTeW5jRmlsZUl0ZW1QdHIgJikpKTsKKyAgICAgICAgUVZFUklGWSghZmFrZUZv bGRlci5zeW5jT25jZSgpKTsKKyAgICAgICAgUUNPTVBBUkUocmVzZW5kQWN0dWFsLCA0KTsgLy8g dGhlIDR0aCBmYWlscyBiZWNhdXNlIGl0IG9ubHkgcmVzZW5kcyAzIHRpbWVzCisgICAgICAgIFFD T01QQVJFKGdldEl0ZW0oY29tcGxldGVTcHksICJBL3Jlc2VuZG1lIiktPl9zdGF0dXMsIFN5bmNG aWxlSXRlbTo6Tm9ybWFsRXJyb3IpOworICAgICAgICBRVkVSSUZZKGdldEl0ZW0oY29tcGxldGVT cHksICJBL3Jlc2VuZG1lIiktPl9lcnJvclN0cmluZy5jb250YWlucyhzZXJ2ZXJNZXNzYWdlKSk7 CisgICAgfQorfTsKKworUVRFU1RfR1VJTEVTU19NQUlOKFRlc3REb3dubG9hZCkKKyNpbmNsdWRl ICJ0ZXN0ZG93bmxvYWQubW9jIgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50 L3RlbXBsYXRlIGIvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50L3RlbXBsYXRlCmluZGV4IGU3ZDM1 NmJmYTMxZC4uYzY3M2E5YzU3ZmZiIDEwMDY0NAotLS0gYS9zcmNwa2dzL25leHRjbG91ZC1jbGll bnQvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9uZXh0Y2xvdWQtY2xpZW50L3RlbXBsYXRlCkBAIC0x LDEzICsxLDEzIEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICduZXh0Y2xvdWQtY2xpZW50JwogcGtn bmFtZT1uZXh0Y2xvdWQtY2xpZW50Ci12ZXJzaW9uPTMuMy41Cit2ZXJzaW9uPTMuNC4yCiByZXZp c2lvbj0xCiB3cmtzcmM9ImRlc2t0b3AtJHt2ZXJzaW9ufSIKIGJ1aWxkX3N0eWxlPWNtYWtlCiBj b25maWd1cmVfYXJncz0iLVduby1kZXYiCi1ob3N0bWFrZWRlcGVuZHM9InBrZy1jb25maWcgaW5r c2NhcGUiCi1tYWtlZGVwZW5kcz0icXQ1LXRvb2xzLWRldmVsIHF0NS1kZWNsYXJhdGl2ZS1kZXZl bCBxdDUtd2ViY2hhbm5lbC1kZXZlbAotIHF0NS1sb2NhdGlvbi1kZXZlbCBxdGtleWNoYWluLXF0 NS1kZXZlbCBzcWxpdGUtZGV2ZWwgbGliY2xvdWRwcm92aWRlcnMtZGV2ZWwKK2hvc3RtYWtlZGVw ZW5kcz0icGtnLWNvbmZpZyBpbmtzY2FwZSAiCittYWtlZGVwZW5kcz0icXQ1LXRvb2xzLWRldmVs IHF0NS1kZWNsYXJhdGl2ZS1kZXZlbCBxdDUtd2ViY2hhbm5lbC1kZXZlbCBvcGVuc3NsLWRldmVs CisgcXQ1LWxvY2F0aW9uLWRldmVsIHF0a2V5Y2hhaW4tcXQ1LWRldmVsIHNxbGl0ZS1kZXZlbCBz cWxpdGUgbGliY2xvdWRwcm92aWRlcnMtZGV2ZWwgcXQ1LXFtYWtlIHF0NS1ob3N0LXRvb2xzIHF0 NS10b29scwogIHF0NS1xdWlja2NvbnRyb2xzMi1kZXZlbCBxdDUtd2Vic29ja2V0cy1kZXZlbCBx dDUtc3ZnLWRldmVsCiAgJCh2b3B0X2lmIGRvbHBoaW4gJ2V4dHJhLWNtYWtlLW1vZHVsZXMga2lv LWRldmVsJykKICAkKHZvcHRfaWYgd2ViZW5naW5lICdxdDUtd2ViZW5naW5lLWRldmVsJykiCkBA IC0yMCw4ICsyMCw3IEBAIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCiBob21lcGFnZT0iaHR0 cHM6Ly9uZXh0Y2xvdWQuY29tL2NsaWVudHMvIgogY2hhbmdlbG9nPSJodHRwczovL2dpdGh1Yi5j b20vbmV4dGNsb3VkL2Rlc2t0b3AvcmVsZWFzZXMiCiBkaXN0ZmlsZXM9Imh0dHBzOi8vZ2l0aHVi LmNvbS9uZXh0Y2xvdWQvZGVza3RvcC9hcmNoaXZlL3Yke3ZlcnNpb259LnRhci5neiIKLWNoZWNr c3VtPTVlOTUyYmUzNmFiNjgwNmZmYmFiNmQyMTZiMDViZmJkOWQ3ZTcyNjg3ZTBkMjgxZjQ5MmUx MDU5Y2QzNGI0MTkKLW1ha2VfY2hlY2s9Y2ktc2tpcAorY2hlY2tzdW09MjUxOWQyMzI5ZTE5Zjgw NTYwOWFhOTJhYTRiY2JjMGI4YWZiZmI2OGIwNjdlOTYzYWE4NDlkYTUwYjIzNmM1ZAogCiBidWls ZF9vcHRpb25zPSJkb2xwaGluIHdlYmVuZ2luZSIKIGRlc2Nfb3B0aW9uX2RvbHBoaW49IkJ1aWxk IEtERSBkb2xwaGluIHN1cHBvcnQiCkBAIC0zOSw2ICszOCwzNSBAQCBpZiBbICIkQ1JPU1NfQlVJ TEQiIF07IHRoZW4KIAkjIHByb3ZpZGVzIGRlc2t0b3B0b2pzb24KIAlob3N0bWFrZWRlcGVuZHMr PSIgJCh2b3B0X2lmIGRvbHBoaW4gJ2tjb3JlYWRkb25zJykiCiBmaQoraWYgWyAiJFhCUFNfVEFS R0VUX0xJQkMiID0gIm11c2wiIF07IHRoZW4KKwkjcHJvdmlkZXMgYXJncCBsaWJyYXJ5CisJbWFr ZWRlcGVuZHMrPSIgYXJncC1zdGFuZGFsb25lIgorZmkKK2lmIFsgIiRYQlBTX1RBUkdFVF9NQUNI SU5FIiAhPSAiYXJtdjdsIiBdOyB0aGVuCisJI3RoZXNlIHBhY2thZ2VzIGFyZSBicm9rZW4gb24g dGhhdCBhcmNoaXRlY3R1cmUKKwlob3N0bWFrZWRlcGVuZHMrPSIgcXQ1LWRldmVsIHF0NS13ZWJl bmdpbmUtZGV2ZWwgcXQ1LXdlYnZpZXctZGV2ZWwiCitmaQorcHJlX3BhdGNoKCkgeworIwlpZiBb ICIkWEJQU19UQVJHRVRfTUFDSElORSIgIT0gIng4Nl82NCIgXSAmJiBbICIkWEJQU19UQVJHRVRf TUFDSElORSIgIT0gIng4Nl82NC1tdXNsIiBdICYmIFsgIiRYQlBTX1RBUkdFVF9NQUNISU5FIiAh PSAiaTY4NiIgXTsgdGhlbgorCQkjbW92ZSBwYXRjaCB0byBhIC5iYWsgc28gdGhhdCB0aGUgZG9f cGF0Y2goKSB3aWxsIG5vdCBwYXRjaCBpdCwgYXMgdGhpcyBpcyBub3QgbmVlZGVkIGluIG90aGVy IGFyY2hpdGVjdHVyZXMKKwkJI1RoZSBwYXRjaCBpcyBmb3IgcnVubmluZyB0aGUgdGVzdHMgc28g dGhhdCB0aGUgZG93bmxvYWQgdGVzdCBkb2VzIG5vdCBmYWlsIG9uIHRyYXZpcyBDTAorIwkJbXYg IiR7UEFUQ0hFU0RJUn0vdGVzdGRvd25sb2FkLWZpeC5wYXRjaCIgIiR7UEFUQ0hFU0RJUn0vdGVz dGRvd25sb2FkLWZpeC5wYXRjaC5iYWsiCisjCWZpCisJaWYgWyAiJFhCUFNfVEFSR0VUX01BQ0hJ TkUiICE9ICJpNjg2IiBdICYmIFsgIiRYQlBTX1RBUkdFVF9NQUNISU5FIiAhPSAiaTY4Ni1tdXNs IiBdOyB0aGVuCisJCSNyZW1vdmUgcGF0Y2ggZm9yIG90aGVyIGFyY2hpdGVjdHVyZXMgd2hlcmUg aXQgaXMgbm90IG5lZWRlZAorCQltdiAiJHtQQVRDSEVTRElSfS90ZXN0Y2h1bmtpbmduZy1pNjg2 LWZpeC5wYXRjaCIgIiR7UEFUQ0hFU0RJUn0vdGVzdGNodW5raW5nbmctaTY4Ni1maXgucGF0Y2gu YmFrIgorCWZpCit9Citwb3N0X3BhdGNoKCkgeworIwlpZiBbICIkWEJQU19UQVJHRVRfTUFDSElO RSIgIT0gIng4Nl82NCIgXSAmJiBbICIkWEJQU19UQVJHRVRfTUFDSElORSIgIT0gIng4Nl82NC1t dXNsIiBdICYmIFsgIiRYQlBTX1RBUkdFVF9NQUNISU5FIiAhPSAiaTY4NiIgXTsgdGhlbgorCQkj cGxhY2UgdGhlIHBhdGNoIGJhY2sKKyMJCW12ICIke1BBVENIRVNESVJ9L3Rlc3Rkb3dubG9hZC1m aXgucGF0Y2guYmFrIiAiJHtQQVRDSEVTRElSfS90ZXN0ZG93bmxvYWQtZml4LnBhdGNoIgorIwlm aQorCWlmIFsgIiRYQlBTX1RBUkdFVF9NQUNISU5FIiAhPSAiaTY4NiIgXSAmJiBbICIkWEJQU19U QVJHRVRfTUFDSElORSIgIT0gImk2ODYtbXVzbCIgXTsgdGhlbgorCQkjcGxhY2UgdGhlIHBhdGNo IGJhY2sKKwkJbXYgIiR7UEFUQ0hFU0RJUn0vdGVzdGNodW5raW5nbmctaTY4Ni1maXgucGF0Y2gu YmFrIiAiJHtQQVRDSEVTRElSfS90ZXN0Y2h1bmtpbmduZy1pNjg2LWZpeC5wYXRjaCIKKwlmaQor fQogCiBzdWJwYWNrYWdlcz0ibmV4dGNsb3VkLWNsaWVudC1rd2FsbGV0IG5leHRjbG91ZC1jbGll bnQtZGV2ZWwiCiBzdWJwYWNrYWdlcys9IiAkKHZvcHRfaWYgZG9scGhpbiAnbmV4dGNsb3VkLWNs aWVudC1kb2xwaGluJykiCg== --===============7854764067498277389==--