Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfmN8-005fPJ-38 for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 22:28:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfmN7-009Is1-30 for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 22:28:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfmN7-009Irs-1M for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 22:28:33 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfmN4-00000001XE4-0YN0 for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 22:28:32 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-c124c3c876aso132973666b.1 for ; Fri, 03 Jul 2026 15:28:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1783117707; x=1783722507; darn=lists.postgresql.org; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:content-type:from:to:cc:subject:date:message-id:reply-to :content-type; bh=snuHB4xXVJ1jO4RQZueh2hCIB9C18qTcePhuB9VR1ec=; b=M1moRcxxT9Eqm1BIcVe0s2Iyg052z5PwdPPVAPk3Lkjrwq41ndKMXlD6wuzWo6qzJu cmXoM05Mjpe9tqBcBywJDcBe3H+Ru8vejiNUBjDkNYlHQACV3maHy3CmNMR57PSv6Ayg MeZYLRyKdlMZCP+Yz7Hm31KpcFzz2swLSSR8dKWEoB19pI5f3BGeKRaUS8N0AiLQpB/y IKtx/Wg6eyhpL+I10v0dD6VWUd6JfEnq5tD3pH3Wx+9+qHaK97cu2PbcuQ8D97paMHQ4 EnzU1VQgv+GrSbv+8TxewmwRb7vJ65eqm/1FMdQ1tQ0s+6wEcr5sM1pz/0+OZw2uH6S6 n5/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783117707; x=1783722507; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:content-type:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=snuHB4xXVJ1jO4RQZueh2hCIB9C18qTcePhuB9VR1ec=; b=ltTS97f8vlFKQx8JXwDETY+8wzzZUEzjeY1ofJGNNrgeWqEoxJiyELvIhGZ9lBczG5 gIRjyeIzF0LKQjmPlWL6Ck71/qdVDHCvwW8MAhUqd3Zdyua3Wvc8tdhouHI9G12+0dwH W1DxwuIFtJ+XnyYzY75rJjKf2E0mC98Zd1dwTz3ZN32LEeBca4+kXFJOORJ5NvbpIpSy Mnlyz/tFZJE+ZLkVV+kP9st1UV28OCO3axKhwgGCTTvklghg5lAz4/zkTmpPe2cO4h5A trakM4MJaXG1YVDuCP/+QMMjIxwi8vQqy0rqRc/GBai76Y2VoIPi0+ZT/KspQw/ys5oc WoFg== X-Gm-Message-State: AOJu0YyouQDFDxFsKGlv57mhQwn8IIk2/AkFTZw3g9oQnDuu4PZcfN8d Uv8IKbBlY0fHLmF/xCjR3MWeCyRBx9P+JNXvtUwiVyvdWuF3g2wg4PTWVkYIBkBCywk= X-Gm-Gg: AfdE7ck4i+0qNWu6tHDXEbrfW3D/OeNcziMVByfjd7awQZVntcwLcLmTYV1ai22QGPH nZZp7LPzpS6PkmeW7YhBcufOl+k+3AmNJrI6BL20nTHFe9AYKpf/T5y2UMYIFMk8L5svNnr0lJx OvuC9xyg8ME0VuwTV3SDekftheku924FYbUp4xMTWhpgbzG70J4c+xn4s5JfOgqDBUn70QVz3Nn YEwipcErs2jlmHx9JNhu117hvxqOWZPNj/ntQdpqoa9M61K8J3XvthRlNrQ/A/2+9WuGnW9GffH 5nXuleVfq3QI/q+RiIBPoUddgLxlOkhl3LUi9Qsv9UkbtTofFvFHWgJ/GRBG2yaEhcyl+Kgvu84 RbmeoD2ZvN5Rh1ufvHE5LKdccFgbgDcXW8+x6z/KccCxsO93mLGE2oWL4J52X2aCOBNWvjCqq3j ObTXVC0fbbJnDXbdo7JfeJ6My6F3vTh0tEy/T6lg== X-Received: by 2002:a17:907:7b84:b0:c12:acd8:aad with SMTP id a640c23a62f3a-c12e6963175mr31510166b.3.1783117706170; Fri, 03 Jul 2026 15:28:26 -0700 (PDT) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c12b62c4b52sm334306466b.47.2026.07.03.15.28.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 Jul 2026 15:28:25 -0700 (PDT) Content-Type: multipart/mixed; boundary=f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Date: Sat, 04 Jul 2026 00:28:24 +0200 Message-Id: Cc: "PostgreSQL Hackers" , "Alvaro Herrera" , "Jacob Champion" Subject: Re: Don't use the deprecated and insecure PQcancel in our frontend tools anymore To: "Heikki Linnakangas" From: "Jelte Fennema-Nio" MIME-Version: 1.0 References: <88dfe280-ba29-4943-95b8-63abc9f3f771@iki.fi> <9d7ba3ac-d660-483e-8f68-9096a2464e90@iki.fi> In-Reply-To: X-TUID: WyFh9uo2tHDa List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Content-Type: multipart/alternative; boundary=9f3be25bd4f144dfb749a66f2884295c16f10558568752127dcfc7de8a3c --9f3be25bd4f144dfb749a66f2884295c16f10558568752127dcfc7de8a3c Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed Attached a v8 based on this feedback, and I think much better than the previous version. The first 2 commits are simplifications of the current logic that I think make sense to merge even without the rest of the patchset. On Tue, 7 Apr 2026 at 02:18, Heikki Linnakangas wrote: > True, it can get messy fast. Hmm, perhaps you could check > PQcancelStatus() and only cancel the cancellation if it hasn't sent the > CancelRequest packet yet. I kinda don't wanna make this logic even more complicated. > The more I look into the cancel handling in psql and other client > programs, the more I want to gouge my eyes out. Same here... > It was pretty messy > before this patch, too, and now also we have an extra thread to worry abo= ut. Most of the complexity of the extra thread was already there for Windows. Making Windows and Unix behave more similarly actually reduces the overall complexity, IMO. > Perhaps is should be documented that the callback is called first. Done > The cancel handling in wait_on_slots() in parallel_slot.c is surprising > in a different way. It already uses async libpq calls and has a select() > loop, but it still relies on the signal handler to do the cancellation. > And it arbitrarily PQcancel()s only one of the connections it waits on. Addressed this in 0002 > The comments you added in your patches help a lot, explaining the three > different ways that cancellation can be handled, thanks for that. Yeah, I think=20 > psql has a global variable, 'cancel_pressed', which is set in the signal > handler callback. Is it redundant with 'CancelRequested' that's also set > in the signal handler? I did some spelunking, and yes it is redundant. Fixed in 0001 > Some ideas on how to make this less confusing: > > - Change pg_dump to use threads on Unix too. I think that would be a good follow-up, but I don't think it makes sense as part of this patchset. The only thing that would make more aligned between OSes with respect to this patch is the worker process vs thread shutdown. > - Extract the cancel_pipe stuff into a helper function, and reuse it in > pg_dump and in wait_on_slots() This is what I did in the end and I think it improved the patchset a lot. > Another more radical idea: Could we move this functionality to libpq > itself? Imagine that we had a function like PQrequestCancel(PGconn > *conn) that just set a flag on the PGconn object to indicate that > cancellation has been requested. When that flag is set, all blocking > calls like PQexec() on the original connection drive the cancellation > connection and sending the cancel request I think it's an interesting idea (and I'm evaluating it a bit more in the background), but it's quite a big addition to libpq and I'm not sure it pulls its own weight. It also doesn't fit well with the pg_dump approach: "Fire off the cancel requests, then kill the process." By moving sending the cancel request to the blocking call, there's no way to bail out after the cancel is sent but before the blocking call returns (i.e. a query not responding to the cancel would then block the pg_dump shutdown). --9f3be25bd4f144dfb749a66f2884295c16f10558568752127dcfc7de8a3c-- --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0001-psql-Replace-cancel_pressed-with-CancelRequested.patch Content-Type: text/x-patch; charset=utf-8; name=v8-0001-psql-Replace-cancel_pressed-with-CancelRequested.patch RnJvbSA1MTM4MmNmNDQwN2Y5YjkyNGI2NDljOTdjOGU1OWIzMDI0YzA1OTI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBUdWUsIDcgQXByIDIwMjYgMTg6MjQ6MDEgKzAyMDAKU3ViamVjdDogW1BBVENIIHY4 IDEvNF0gcHNxbDogUmVwbGFjZSBjYW5jZWxfcHJlc3NlZCB3aXRoIENhbmNlbFJlcXVlc3RlZAoK SW4gYTRmZDNhYTcgc3JjL2ZlX3V0aWxzL2NhbmNlbC5jIHdhcyBpbnRyb2R1Y2VkIHdoaWNoIGFk ZGVkCnRoZSBDYW5jZWxSZXF1ZXN0ZWQgdmFyaWFibGUuIFRoaXMgbmV3IHZhcmlhYmxlIHdhcyB1 c2VkIGluIHBzcWwgdG8KcmVwbGFjZSB0aGUgY2FuY2VsX3ByZXNzZWQgdmFyaWFibGUsIGJ1dCB0 aGF0IHF1aWNrbHkgZ290IHJldmVydGVkIGluCjVkNDNjM2M1NC4gVGhlIHJlYXNvbiB3YXMgdGhh dCBjYW5jZWxfcHJlc3NlZCBoYWQgbm90IGZ1bGx5IHJlcGxhY2VkIGJ5CkNhbmNlbFJlcXVlc3Rl ZCBldmVyeXdoZXJlIGluIHRoZSBjb2RlLCBhbmQgdGhlIG1peGVkIHVzYWdlIGNhdXNlZAppc3N1 ZXMgKGUuZy4gd2l0aCBcd2F0Y2gpLgoKVGhpcyBub3cgZG9lcyB0aGF0IG9yaWdpbmFsIHJlZmFj dG9yIGNvcnJlY3RseSBieSB1c2luZyBDYW5jZWxSZXF1ZXN0ZWQKZXZlcnl3aGVyZSBhbmQgY29t cGxldGVseSBnZXR0aW5nIHJpZCBvZiBjYW5jZWxfcHJlc3NlZC4KCjVkNDNjM2M1NCBtZW50aW9u cyB0aGUgLS1zaW5nbGUtc3RlcCBmbGFnIGFzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVkCmZ1cnRo ZXIgYW5hbHlzaXMuIEkgdHJpZWQgLS1zaW5nbGUtc3RlcCB3aXRoIGFuZCB3aXRob3V0IHRoaXMg Y29tbWl0LAphbmQgQ3RybCtDIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aC4gSSBhbHNvIGNhbm5v dCB0aGluayBvZiBhIHJlYXNvbiB3aHkKaXQgd291bGQgYmVoYXZlIGFueSBkaWZmZXJlbnRseS4K ClRoZSBvbmx5IHNsaWdodCBiZWhhdmlvcmFsIGNoYW5nZSBJIGNvdWxkIHRoaW5rIG9mIHdhcyB0 aGF0CmNhbmNlbF9wcmVzc2VkIHdhcyBzZXQgYWZ0ZXIgcHNxbCdzIGxvbmdqdW1wLCBhbmQgQ2Fu Y2VsUmVxdWVzdGVkIGlzIHNldApiZWZvcmUuIEJ1dCBzaW5jZSBDYW5jZWxSZXF1ZXN0ZWQgaXMg bm93IHNldCB0byBmYWxzZSBhZnRlciB0aGUgbG9uZ2p1bXAKdGhlcmUncyBubyBwcmFjdGljYWwg ZGlmZmVyZW5jZSBjYXVzZWQgYnkgdGhhdC4KLS0tCiBzcmMvYmluL3BzcWwvY29tbWFuZC5jICAg ICAgIHwgIDEwICsrLS0KIHNyYy9iaW4vcHNxbC9jb21tb24uYyAgICAgICAgfCAgMjEgKysrKy0t LS0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgfCAgIDkgKystLQogc3JjL2Jpbi9wc3Fs L21haW5sb29wLmMgICAgICB8ICAgNyArLS0KIHNyYy9iaW4vcHNxbC92YXJpYWJsZXMuYyAgICAg fCAgIDMgKy0KIHNyYy9mZV91dGlscy9wcmludC5jICAgICAgICAgfCAxMDEgKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50LmggfCAg IDIgLQogNyBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbWFuZC5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1h bmQuYwppbmRleCAwMWI4ZjExYWFkZC4uODVhNjFkNTk5MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cHNxbC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtNDM5Miw3ICs0 MzkyLDcgQEAgd2FpdF91bnRpbF9jb25uZWN0ZWQoUEdjb25uICpjb25uKQogCQkgKiBPbiBldmVy eSBpdGVyYXRpb24gb2YgdGhlIGNvbm5lY3Rpb24gc2VxdWVuY2UsIGxldCdzIGNoZWNrIGlmIHRo ZQogCQkgKiB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBjYW5jZWxsYXRpb24uCiAJCSAqLwotCQlpZiAo Y2FuY2VsX3ByZXNzZWQpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAogCQkv KgpAQCAtNDQwNCw3ICs0NDA0LDcgQEAgd2FpdF91bnRpbF9jb25uZWN0ZWQoUEdjb25uICpjb25u KQogCQkJYnJlYWs7CiAKIAkJLyoKLQkJICogSWYgdGhlIHVzZXIgc2VuZHMgU0lHSU5UIGJldHdl ZW4gdGhlIGNhbmNlbF9wcmVzc2VkIGNoZWNrLCBhbmQKKwkJICogSWYgdGhlIHVzZXIgc2VuZHMg U0lHSU5UIGJldHdlZW4gdGhlIENhbmNlbFJlcXVlc3RlZCBjaGVjaywgYW5kCiAJCSAqIHBvbGxp bmcgb2YgdGhlIHNvY2tldCwgaXQgd2lsbCBub3QgYmUgcmVjb2duaXplZC4gSW5zdGVhZCwgd2Ug d2lsbAogCQkgKiBqdXN0IHdhaXQgdW50aWwgdGhlIG5leHQgc3RlcCBpbiB0aGUgY29ubmVjdGlv biBzZXF1ZW5jZSBvcgogCQkgKiBmb3JldmVyLCB3aGljaCBtaWdodCByZXF1aXJlIHVzZXJzIHRv IHNlbmQgU0lHVEVSTSBvciBTSUdRVUlULgpAQCAtNDQxNSw3ICs0NDE1LDcgQEAgd2FpdF91bnRp bF9jb25uZWN0ZWQoUEdjb25uICpjb25uKQogCQkgKiBUaGUgc2VsZi1waXBlIHRyaWNrIHJlcXVp cmVzIGEgYml0IG9mIGNvZGUgdG8gc2V0dXAuIHBzZWxlY3QoMikgYW5kCiAJCSAqIHBwb2xsKDIp IGFyZSBub3Qgb24gYWxsIHRoZSBwbGF0Zm9ybXMgd2Ugc3VwcG9ydC4gVGhlIHNpbXBsZXN0CiAJ CSAqIHNvbHV0aW9uIGhhcHBlbnMgdG8ganVzdCBiZSBhZGRpbmcgYSB0aW1lb3V0LCBzbyBsZXQn cyB3YWl0IGZvciAxCi0JCSAqIHNlY29uZCBhbmQgY2hlY2sgY2FuY2VsX3ByZXNzZWQgYWdhaW4u CisJCSAqIHNlY29uZCBhbmQgY2hlY2sgQ2FuY2VsUmVxdWVzdGVkIGFnYWluLgogCQkgKi8KIAkJ ZW5kX3RpbWUgPSBQUWdldEN1cnJlbnRUaW1lVVNlYygpICsgMTAwMDAwMDsKIAkJcmMgPSBQUXNv Y2tldFBvbGwoc29jaywgZm9yUmVhZCwgIWZvclJlYWQsIGVuZF90aW1lKTsKQEAgLTYwODIsNyAr NjA4Miw3IEBAIGRvX3dhdGNoKFBRRXhwQnVmZmVyIHF1ZXJ5X2J1ZiwgZG91YmxlIHNsZWVwLCBp bnQgaXRlciwgaW50IG1pbl9yb3dzKQogCQkJbG9uZwkJcyA9IE1pbihpLCAxMDAwTCk7CiAKIAkJ CXBnX3VzbGVlcChzICogMTAwMEwpOwotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENh bmNlbFJlcXVlc3RlZCkKIAkJCXsKIAkJCQlkb25lID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTYw OTIsNyArNjA5Miw3IEBAIGRvX3dhdGNoKFBRRXhwQnVmZmVyIHF1ZXJ5X2J1ZiwgZG91YmxlIHNs ZWVwLCBpbnQgaXRlciwgaW50IG1pbl9yb3dzKQogI2Vsc2UKIAkJLyogc2lnd2FpdCgpIHdpbGwg aGFuZGxlIFNJR0lOVC4gKi8KIAkJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2lnaW50LCBOVUxM KTsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJZG9u ZSA9IHRydWU7CiAKIAkJLyogV2FpdCBmb3IgU0lHSU5ULCBTSUdDSExEIG9yIFNJR0FMUk0uICov CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9u LmMKaW5kZXggMTAwNzhmMjQ1MzIuLjY2MGYxNDU1OWY1IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bz cWwvY29tbW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBAIC0yOTIsNyArMjkyLDcg QEAgTm90aWNlUHJvY2Vzc29yKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbWVzc2FnZSkKICAqCiAg KiBTSUdJTlQgaXMgc3VwcG9zZWQgdG8gYWJvcnQgYWxsIGxvbmctcnVubmluZyBwc3FsIG9wZXJh dGlvbnMsIG5vdCBvbmx5CiAgKiBkYXRhYmFzZSBxdWVyaWVzLiAgSW4gbW9zdCBwbGFjZXMsIHRo aXMgaXMgYWNjb21wbGlzaGVkIGJ5IGNoZWNraW5nCi0gKiBjYW5jZWxfcHJlc3NlZCBkdXJpbmcg bG9uZy1ydW5uaW5nIGxvb3BzLiAgSG93ZXZlciwgdGhhdCB3b24ndCB3b3JrIHdoZW4KKyAqIENh bmNlbFJlcXVlc3RlZCBkdXJpbmcgbG9uZy1ydW5uaW5nIGxvb3BzLiAgSG93ZXZlciwgdGhhdCB3 b24ndCB3b3JrIHdoZW4KICAqIGJsb2NrZWQgb24gdXNlciBpbnB1dCAoaW4gcmVhZGxpbmUoKSBv ciBmZ2V0cygpKS4gIEluIHRob3NlIHBsYWNlcywgd2UKICAqIHNldCBzaWdpbnRfaW50ZXJydXB0 X2VuYWJsZWQgdHJ1ZSB3aGlsZSBibG9ja2VkLCBpbnN0cnVjdGluZyB0aGUgc2lnbmFsCiAgKiBj YXRjaGVyIHRvIGxvbmdqbXAgdGhyb3VnaCBzaWdpbnRfaW50ZXJydXB0X2ptcC4gIFdlIGFzc3Vt ZSByZWFkbGluZSBhbmQKQEAgLTMxNiw5ICszMTYsNiBAQCBwc3FsX2NhbmNlbF9jYWxsYmFjayh2 b2lkKQogCQlzaWdsb25nam1wKHNpZ2ludF9pbnRlcnJ1cHRfam1wLCAxKTsKIAl9CiAjZW5kaWYK LQotCS8qIGVsc2UsIHNldCBjYW5jZWwgZmxhZyB0byBzdG9wIGFueSBsb25nLXJ1bm5pbmcgbG9v cHMgKi8KLQljYW5jZWxfcHJlc3NlZCA9IHRydWU7CiB9CiAKIHZvaWQKQEAgLTg4MSw4ICs4Nzgs OCBAQCBFeGVjUXVlcnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCkKIAkJCXsKIAkJCQlj b25zdCBjaGFyICpxdWVyeSA9IFBRZ2V0dmFsdWUocmVzdWx0LCByLCBjKTsKIAotCQkJCS8qIEFi YW5kb24gZXhlY3V0aW9uIGlmIGNhbmNlbF9wcmVzc2VkICovCi0JCQkJaWYgKGNhbmNlbF9wcmVz c2VkKQorCQkJCS8qIEFiYW5kb24gZXhlY3V0aW9uIGlmIENhbmNlbFJlcXVlc3RlZCAqLworCQkJ CWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJCWdvdG8gbG9vcF9leGl0OwogCiAJCQkJLyoKQEAg LTExNDYsNyArMTE0Myw3IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkKIAkJaWYgKGZn ZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSAhPSBOVUxMKQogCQkJaWYgKGJ1ZlswXSA9PSAn eCcpCiAJCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQor CQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJZ290byBzZW5kcXVlcnlfY2xlYW51cDsKIAl9CiAJ ZWxzZSBpZiAocHNldC5lY2hvID09IFBTUUxfRUNIT19RVUVSSUVTKQpAQCAtMTc2OCw3ICsxNzY1 LDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJICog Y29uc3VtZWQuICBUaGUgdXNlcidzIGludGVudGlvbiwgdGhvdWdoLCBpcyB0byBjYW5jZWwgdGhl IGVudGlyZSB3YXRjaAogCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNlbnQgY2FuY2VsbGF0aW9u IHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNlLgogCSAqLwotCWlmIChpc193YXRjaCAmJiBj YW5jZWxfcHJlc3NlZCkKKwlpZiAoaXNfd2F0Y2ggJiYgQ2FuY2VsUmVxdWVzdGVkKQogCXsKIAkJ Q2xlYXJPclNhdmVBbGxSZXN1bHRzKCk7CiAJCXJldHVybiAwOwpAQCAtMTk4Niw3ICsxOTgzLDcg QEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJCQkJICog dXNlIG9mIGNodW5raW5nIGZvciBhbGwgY2FzZXMgaW4gd2hpY2ggUHJpbnRRdWVyeVJlc3VsdAog CQkJCSAqIHdvdWxkIHNlbmQgdGhlIHJlc3VsdCB0byBzb21lcGxhY2Ugb3RoZXIgdGhhbiBwcmlu dFF1ZXJ5LgogCQkJCSAqLwotCQkJCWlmIChzdWNjZXNzICYmICFmbHVzaF9lcnJvciAmJiAhY2Fu Y2VsX3ByZXNzZWQpCisJCQkJaWYgKHN1Y2Nlc3MgJiYgIWZsdXNoX2Vycm9yICYmICFDYW5jZWxS ZXF1ZXN0ZWQpCiAJCQkJewogCQkJCQlwcmludFF1ZXJ5KHJlc3VsdCwgJm15X3BvcHQsIHR1cGxl c19mb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxlKTsKIAkJCQkJZmx1c2hfZXJyb3IgPSBmZmx1 c2godHVwbGVzX2ZvdXQpOwpAQCAtMjAxMyw3ICsyMDEwLDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJCQkJQXNzZXJ0KFBRbnR1cGxlcyhyZXN1bHQp ID09IDApOwogCiAJCQkJLyogRGlzcGxheSB0aGUgZm9vdGVyIHVzaW5nIHRoZSBlbXB0eSByZXN1 bHQgKi8KLQkJCQlpZiAoc3VjY2VzcyAmJiAhZmx1c2hfZXJyb3IgJiYgIWNhbmNlbF9wcmVzc2Vk KQorCQkJCWlmIChzdWNjZXNzICYmICFmbHVzaF9lcnJvciAmJiAhQ2FuY2VsUmVxdWVzdGVkKQog CQkJCXsKIAkJCQkJbXlfcG9wdC50b3B0LnN0b3BfdGFibGUgPSB0cnVlOwogCQkJCQlwcmludFF1 ZXJ5KHJlc3VsdCwgJm15X3BvcHQsIHR1cGxlc19mb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxl KTsKQEAgLTIxNzIsNyArMjE2OSw3IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0 IGNoYXIgKnF1ZXJ5LAogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCQlyZXN1bHQgPSBu ZXh0X3Jlc3VsdDsKIAotCQlpZiAoY2FuY2VsX3ByZXNzZWQgJiYgUFFwaXBlbGluZVN0YXR1cyhw c2V0LmRiKSA9PSBQUV9QSVBFTElORV9PRkYpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQgJiYgUFFw aXBlbGluZVN0YXR1cyhwc2V0LmRiKSA9PSBQUV9QSVBFTElORV9PRkYpCiAJCXsKIAkJCS8qCiAJ CQkgKiBPdXRzaWRlIG9mIGEgcGlwZWxpbmUsIGRyb3AgdGhlIG5leHQgcmVzdWx0LCBhcyB3ZWxs IGFzIGFueQpAQCAtMjIyOSw3ICsyMjI2LDcgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMo Y29uc3QgY2hhciAqcXVlcnksCiAJaWYgKCFDaGVja0Nvbm5lY3Rpb24oKSkKIAkJcmV0dXJuIC0x OwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkIHx8IHJldHVybl9lYXJseSkKKwlpZiAoQ2FuY2VsUmVx dWVzdGVkIHx8IHJldHVybl9lYXJseSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gc3VjY2VzcyA/ IDEgOiAtMTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggYWYzOTM1YjAwNzguLmJlNDYzMDY5MmI0IDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpA QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImNvbW1vbi9s b2dnaW5nLmgiCiAjaW5jbHVkZSAiZGVzY3JpYmUuaCIKKyNpbmNsdWRlICJmZV91dGlscy9jYW5j ZWwuaCIKICNpbmNsdWRlICJmZV91dGlscy9tYnByaW50LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMv cHJpbnQuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKQEAgLTE1NjYsNyAr MTU2Nyw3IEBAIGRlc2NyaWJlVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wg dmVyYm9zZSwgYm9vbCBzaG93U3lzdGVtKQogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZh bHNlOwogCQl9Ci0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVlc3RlZCkK IAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNTcwMSw3ICs1NzAy LDcgQEAgbGlzdFRTUGFyc2Vyc1ZlcmJvc2UoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXJldHVy biBmYWxzZTsKIAkJfQogCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVl c3RlZCkKIAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNjA5MSw3 ICs2MDkyLDcgQEAgbGlzdFRTQ29uZmlnc1ZlcmJvc2UoY29uc3QgY2hhciAqcGF0dGVybikKIAkJ CXJldHVybiBmYWxzZTsKIAkJfQogCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNl bFJlcXVlc3RlZCkKIAkJewogCQkJUFFjbGVhcihyZXMpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAt NjU3MCw3ICs2NTcxLDcgQEAgbGlzdEV4dGVuc2lvbkNvbnRlbnRzKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQlQUWNsZWFyKHJlcyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KLQkJaWYgKGNhbmNl bF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQl7CiAJCQlQUWNsZWFyKHJlcyk7 CiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvbWFpbmxvb3AuYyBi L3NyYy9iaW4vcHNxbC9tYWlubG9vcC5jCmluZGV4IGU5YWJkYTA3MTYxLi42ZjVjMGE3N2MwMyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL21haW5sb29wLmMKKysrIGIvc3JjL2Jpbi9wc3FsL21h aW5sb29wLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJjb21tYW5kLmgiCiAjaW5jbHVk ZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91 dGlscy9jYW5jZWwuaCIKICNpbmNsdWRlICJpbnB1dC5oIgogI2luY2x1ZGUgIm1haW5sb29wLmgi CiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKQEAgLTg1LDcgKzg2LDcgQEAgTWFpbkxvb3AoRklM RSAqc291cmNlKQogCQkvKgogCQkgKiBDbGVhbiB1cCBhZnRlciBhIHByZXZpb3VzIENvbnRyb2wt QwogCQkgKi8KLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQog CQl7CiAJCQlpZiAoIXBzZXQuY3VyX2NtZF9pbnRlcmFjdGl2ZSkKIAkJCXsKQEAgLTk2LDcgKzk3 LDcgQEAgTWFpbkxvb3AoRklMRSAqc291cmNlKQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQljYW5j ZWxfcHJlc3NlZCA9IGZhbHNlOworCQkJQ2FuY2VsUmVxdWVzdGVkID0gZmFsc2U7CiAJCX0KIAog CQkvKgpAQCAtMTE4LDcgKzExOSw3IEBAIE1haW5Mb29wKEZJTEUgKnNvdXJjZSkKIAkJCXByb21w dF9zdGF0dXMgPSBQUk9NUFRfUkVBRFk7CiAJCQluZWVkX3JlZGlzcGxheSA9IGZhbHNlOwogCQkJ cHNldC5zdG10X2xpbmVubyA9IDE7Ci0JCQljYW5jZWxfcHJlc3NlZCA9IGZhbHNlOworCQkJQ2Fu Y2VsUmVxdWVzdGVkID0gZmFsc2U7CiAKIAkJCWlmIChwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUp CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdmFyaWFibGVzLmMgYi9zcmMvYmluL3Bz cWwvdmFyaWFibGVzLmMKaW5kZXggODA2MGYyOTU5Y2MuLjcxZWVhZmQwMzlmIDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvdmFyaWFibGVzLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3ZhcmlhYmxlcy5j CkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb21t b24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgInZh cmlhYmxlcy5oIgogCiAvKgpAQCAtMjY1LDcgKzI2Niw3IEBAIFByaW50VmFyaWFibGVzKFZhcmlh YmxlU3BhY2Ugc3BhY2UpCiAJewogCQlpZiAocHRyLT52YWx1ZSkKIAkJCXByaW50ZigiJXMgPSAn JXMnXG4iLCBwdHItPm5hbWUsIHB0ci0+dmFsdWUpOwotCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJ CWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMv ZmVfdXRpbHMvcHJpbnQuYyBiL3NyYy9mZV91dGlscy9wcmludC5jCmluZGV4IGJmYmFmMDk0ZDdl Li5jOWY5ZjIzZjZmNSAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL3ByaW50LmMKKysrIGIvc3Jj L2ZlX3V0aWxzL3ByaW50LmMKQEAgLTQsNyArNCw3IEBACiAgKgogICogVGhpcyBmaWxlIHVzZWQg dG8gYmUgcGFydCBvZiBwc3FsLCBidXQgbm93IGl0J3Mgc2VwYXJhdGVkIG91dCB0byBhbGxvdwog ICogb3RoZXIgZnJvbnRlbmQgcHJvZ3JhbXMgdG8gdXNlIGl0LiAgQmVjYXVzZSB0aGUgcHJpbnRp bmcgY29kZSBuZWVkcwotICogYWNjZXNzIHRvIHRoZSBjYW5jZWxfcHJlc3NlZCBmbGFnIGFzIHdl bGwgYXMgU0lHUElQRSB0cmFwcGluZyBhbmQKKyAqIGFjY2VzcyB0byB0aGUgQ2FuY2VsUmVxdWVz dGVkIGZsYWcgYXMgd2VsbCBhcyBTSUdQSVBFIHRyYXBwaW5nIGFuZAogICogcGFnZXIgb3Blbi9j bG9zZSBmdW5jdGlvbnMsIGFsbCB0aGF0IHN0dWZmIGNhbWUgd2l0aCBpdC4KICAqCiAgKgpAQCAt MzAsNiArMzAsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGVfZC5oIgor I2luY2x1ZGUgImZlX3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgImZlX3V0aWxzL21icHJpbnQu aCIKICNpbmNsdWRlICJmZV91dGlscy9wcmludC5oIgogCkBAIC0zOSwxMyArNDAsOSBAQAogI2Vu ZGlmCiAKIC8qCi0gKiBJZiB0aGUgY2FsbGluZyBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhbnkgbWVj aGFuaXNtIGZvciBzZXR0aW5nCi0gKiBjYW5jZWxfcHJlc3NlZCwgaXQgd2lsbCBoYXZlIG5vIGVm ZmVjdC4KLSAqCi0gKiBOb3RlOiBwcmludC5jJ3MgZ2VuZXJhbCBzdHJhdGVneSBmb3Igd2hlbiB0 byBjaGVjayBjYW5jZWxfcHJlc3NlZCBpcyB0byBkbworICogTm90ZTogcHJpbnQuYydzIGdlbmVy YWwgc3RyYXRlZ3kgZm9yIHdoZW4gdG8gY2hlY2sgQ2FuY2VsUmVxdWVzdGVkIGlzIHRvIGRvCiAg KiBzbyBhdCBjb21wbGV0aW9uIG9mIGVhY2ggcm93IG9mIG91dHB1dC4KICAqLwotdm9sYXRpbGUg c2lnX2F0b21pY190IGNhbmNlbF9wcmVzc2VkID0gZmFsc2U7CiAKIHN0YXRpYyBib29sIGFsd2F5 c19pZ25vcmVfc2lncGlwZSA9IGZhbHNlOwogCkBAIC00NDIsNyArNDM5LDcgQEAgcHJpbnRfdW5h bGlnbmVkX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlib29sCQluZWVkX3JlY29yZHNlcCA9IGZhbHNlOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtNDc3LDcgKzQ3NCw3IEBAIHByaW50 X3VuYWxpZ25lZF90ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0 KQogCQl7CiAJCQlwcmludF9zZXBhcmF0b3IoY29udC0+b3B0LT5yZWNvcmRTZXAsIGZvdXQpOwog CQkJbmVlZF9yZWNvcmRzZXAgPSBmYWxzZTsKLQkJCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJCWlm IChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJZnB1dHMoKnB0ciwgZm91dCk7 CkBAIC00OTMsNyArNDkwLDcgQEAgcHJpbnRfdW5hbGlnbmVkX3RleHQoY29uc3QgcHJpbnRUYWJs ZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJewogCQlwcmludFRhYmxlRm9vdGVyICpmb290 ZXJzID0gZm9vdGVyc193aXRoX2RlZmF1bHQoY29udCk7CiAKLQkJaWYgKCFvcHRfdHVwbGVzX29u bHkgJiYgZm9vdGVycyAhPSBOVUxMICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKCFvcHRfdHVw bGVzX29ubHkgJiYgZm9vdGVycyAhPSBOVUxMICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJ CXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTUzMyw3ICs1MzAsNyBAQCBwcmludF91bmFsaWdu ZWRfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlib29sCQluZWVkX3JlY29yZHNlcCA9IGZhbHNlOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtNTU4LDcgKzU1NSw3IEBAIHByaW50 X3VuYWxpZ25lZF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAq Zm91dCkKIAkJCXByaW50X3NlcGFyYXRvcihjb250LT5vcHQtPnJlY29yZFNlcCwgZm91dCk7CiAJ CQlwcmludF9zZXBhcmF0b3IoY29udC0+b3B0LT5yZWNvcmRTZXAsIGZvdXQpOwogCQkJbmVlZF9y ZWNvcmRzZXAgPSBmYWxzZTsKLQkJCWlmIChjYW5jZWxfcHJlc3NlZCkKKwkJCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIApAQCAtNTc1LDcgKzU3Miw3IEBAIHByaW50X3Vu YWxpZ25lZF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91 dCkKIAlpZiAoY29udC0+b3B0LT5zdG9wX3RhYmxlKQogCXsKIAkJLyogcHJpbnQgZm9vdGVycyAq LwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYgIWNh bmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9 IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsK IApAQCAtNjgzLDcgKzY4MCw3IEBAIHByaW50X2FsaWduZWRfdGV4dChjb25zdCBwcmludFRhYmxl Q29udGVudCAqY29udCwgRklMRSAqZm91dCwgYm9vbCBpc19wYWdlcikKIAlpbnQJCQlvdXRwdXRf Y29sdW1ucyA9IDA7IC8qIFdpZHRoIG9mIGludGVyYWN0aXZlIGNvbnNvbGUgKi8KIAlib29sCQlp c19sb2NhbF9wYWdlciA9IGZhbHNlOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5j ZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChvcHRfYm9yZGVyID4gMikKQEAgLTEwMDQs NyArMTAwMSw3IEBAIHByaW50X2FsaWduZWRfdGV4dChjb25zdCBwcmludFRhYmxlQ29udGVudCAq Y29udCwgRklMRSAqZm91dCwgYm9vbCBpc19wYWdlcikKIAl7CiAJCWJvb2wJCW1vcmVfbGluZXM7 CiAKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJYnJl YWs7CiAKIAkJLyoKQEAgLTExNjAsMTIgKzExNTcsMTIgQEAgcHJpbnRfYWxpZ25lZF90ZXh0KGNv bnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0LCBib29sIGlzX3BhZ2VyKQog CXsKIAkJcHJpbnRUYWJsZUZvb3RlciAqZm9vdGVycyA9IGZvb3RlcnNfd2l0aF9kZWZhdWx0KGNv bnQpOwogCi0JCWlmIChvcHRfYm9yZGVyID09IDIgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAo b3B0X2JvcmRlciA9PSAyICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlfcHJpbnRfaG9yaXpvbnRh bF9saW5lKGNvbF9jb3VudCwgd2lkdGhfd3JhcCwgb3B0X2JvcmRlciwKIAkJCQkJCQkJICAgUFJJ TlRfUlVMRV9CT1RUT00sIGZvcm1hdCwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwot CQlpZiAoZm9vdGVycyAmJiAhb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJ aWYgKGZvb3RlcnMgJiYgIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVkKQogCQl7 CiAJCQlwcmludFRhYmxlRm9vdGVyICpmOwogCkBAIC0xMzI1LDcgKzEzMjIsNyBAQCBwcmludF9h bGlnbmVkX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LAogCQkJCWRtdWx0 aWxpbmUgPSBmYWxzZTsKIAlpbnQJCQlvdXRwdXRfY29sdW1ucyA9IDA7IC8qIFdpZHRoIG9mIGlu dGVyYWN0aXZlIGNvbnNvbGUgKi8KIAotCWlmIChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2Vs UmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAob3B0X2JvcmRlciA+IDIpCkBAIC0xMzQxLDcg KzEzMzgsNyBAQCBwcmludF9hbGlnbmVkX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50 ICpjb250LAogCXsKIAkJcHJpbnRUYWJsZUZvb3RlciAqZm9vdGVycyA9IGZvb3RlcnNfd2l0aF9k ZWZhdWx0KGNvbnQpOwogCi0JCWlmICghb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3Nl ZCAmJiBmb290ZXJzKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVk ICYmIGZvb3RlcnMpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTE1ODAsNyAr MTU3Nyw3IEBAIHByaW50X2FsaWduZWRfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQg KmNvbnQsCiAJCQkJCW9mZnNldCwKIAkJCQkJY2hhcnNfdG9fb3V0cHV0OwogCi0JCWlmIChjYW5j ZWxfcHJlc3NlZCkKKwkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCWJyZWFrOwogCiAJCWlmIChp ID09IDApCkBAIC0xNzg5LDEyICsxNzg2LDEyIEBAIHByaW50X2FsaWduZWRfdmVydGljYWwoY29u c3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsCiAKIAlpZiAoY29udC0+b3B0LT5zdG9wX3RhYmxl KQogCXsKLQkJaWYgKG9wdF9ib3JkZXIgPT0gMiAmJiAhY2FuY2VsX3ByZXNzZWQpCisJCWlmIChv cHRfYm9yZGVyID09IDIgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJCXByaW50X2FsaWduZWRfdmVy dGljYWxfbGluZShjb250LT5vcHQsIDAsIGh3aWR0aCwgZHdpZHRoLAogCQkJCQkJCQkJCW91dHB1 dF9jb2x1bW5zLCBQUklOVF9SVUxFX0JPVFRPTSwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVy cyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYg IWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMTg2OCw3ICsxODY1LDcgQEAgcHJpbnRfY3N2X3RleHQoY29uc3QgcHJpbnRUYWJs ZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAlp bnQJCQlpOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJ CXJldHVybjsKIAogCS8qCkBAIC0xOTExLDcgKzE5MDgsNyBAQCBwcmludF9jc3ZfdmVydGljYWwo Y29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJLyogcHJpbnQgcmVj b3JkcyAqLwogCWZvciAoaSA9IDAsIHB0ciA9IGNvbnQtPmNlbGxzOyAqcHRyOyBpKyssIHB0cisr KQogCXsKLQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJ cmV0dXJuOwogCiAJCS8qIHByaW50IG5hbWUgb2YgY29sdW1uICovCkBAIC0xOTg0LDcgKzE5ODEs NyBAQCBwcmludF9odG1sX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlm IChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlp ZiAoY29udC0+b3B0LT5zdGFydF90YWJsZSkKQEAgLTIwMjEsNyArMjAxOCw3IEBAIHByaW50X2h0 bWxfdGV4dChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAl7CiAJ CWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0gMCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2Vk KQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCQlicmVhazsKIAkJCWZwdXRzKCIgIDx0ciB2 YWxpZ249XCJ0b3BcIj5cbiIsIGZvdXQpOwogCQl9CkBAIC0yMDQ2LDcgKzIwNDMsNyBAQCBwcmlu dF9odG1sX3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJ CWZwdXRzKCI8L3RhYmxlPlxuIiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwotCQlp ZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5VTEwgJiYgIWNhbmNlbF9wcmVzc2Vk KQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5VTEwgJiYgIUNhbmNlbFJl cXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsKIApAQCAtMjA3NCw3ICsyMDcx LDcgQEAgcHJpbnRfaHRtbF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwg RklMRSAqZm91dCkKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCBjaGFyICpjb25zdCAqcHRyOwog Ci0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsK IAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAtMjA5OCw3ICsyMDk1LDcgQEAgcHJp bnRfaHRtbF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91 dCkKIAl7CiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0gMCkKIAkJewotCQkJaWYgKGNhbmNl bF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCQlicmVhazsKIAkJCWlmICgh b3B0X3R1cGxlc19vbmx5KQogCQkJCWZwcmludGYoZm91dCwKQEAgLTIxMjcsNyArMjEyNCw3IEBA IHByaW50X2h0bWxfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJCWZwdXRzKCI8L3RhYmxlPlxuIiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVy cyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJzICE9IE5VTEwgJiYg IWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBjb250LT5mb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMjE3Niw3ICsyMTczLDcgQEAgcHJpbnRfYXNjaWlkb2NfdGV4dChjb25zdCBwcmlu dFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25z dCBjaGFyICpjb25zdCAqcHRyOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChjb250LT5vcHQtPnN0YXJ0X3RhYmxlKQpAQCAt MjIzNSw3ICsyMjMyLDcgQEAgcHJpbnRfYXNjaWlkb2NfdGV4dChjb25zdCBwcmludFRhYmxlQ29u dGVudCAqY29udCwgRklMRSAqZm91dCkKIAl7CiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMgPT0g MCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3RlZCkK IAkJCQlicmVhazsKIAkJfQogCkBAIC0yMjYzLDcgKzIyNjAsNyBAQCBwcmludF9hc2NpaWRvY190 ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCQlwcmludFRh YmxlRm9vdGVyICpmb290ZXJzID0gZm9vdGVyc193aXRoX2RlZmF1bHQoY29udCk7CiAKIAkJLyog cHJpbnQgZm9vdGVycyAqLwotCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJzICE9IE5V TEwgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoIW9wdF90dXBsZXNfb25seSAmJiBmb290ZXJz ICE9IE5VTEwgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAq ZjsKIApAQCAtMjI4Nyw3ICsyMjg0LDcgQEAgcHJpbnRfYXNjaWlkb2NfdmVydGljYWwoY29uc3Qg cHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJ Y29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlmIChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2Fu Y2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAoY29udC0+b3B0LT5zdGFydF90YWJsZSkK QEAgLTIzMjYsNyArMjMyMyw3IEBAIHByaW50X2FzY2lpZG9jX3ZlcnRpY2FsKGNvbnN0IHByaW50 VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXsKIAkJaWYgKGkgJSBjb250LT5uY29s dW1ucyA9PSAwKQogCQl7Ci0JCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJCQlpZiAoQ2FuY2VsUmVx dWVzdGVkKQogCQkJCWJyZWFrOwogCQkJaWYgKCFvcHRfdHVwbGVzX29ubHkpCiAJCQkJZnByaW50 Zihmb3V0LApAQCAtMjM1Myw3ICsyMzUwLDcgQEAgcHJpbnRfYXNjaWlkb2NfdmVydGljYWwoY29u c3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJaWYgKGNvbnQtPm9wdC0+ c3RvcF90YWJsZSkKIAl7CiAJCS8qIHByaW50IGZvb3RlcnMgKi8KLQkJaWYgKCFvcHRfdHVwbGVz X29ubHkgJiYgY29udC0+Zm9vdGVycyAhPSBOVUxMICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYg KCFvcHRfdHVwbGVzX29ubHkgJiYgY29udC0+Zm9vdGVycyAhPSBOVUxMICYmICFDYW5jZWxSZXF1 ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTI0NDQsNyArMjQ0MSw3 IEBAIHByaW50X2xhdGV4X3RleHQoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUg KmZvdXQpCiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlm IChjYW5jZWxfcHJlc3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlp ZiAob3B0X2JvcmRlciA+IDMpCkBAIC0yNTA1LDcgKzI1MDIsNyBAQCBwcmludF9sYXRleF90ZXh0 KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCQkJZnB1dHMoIiBc XFxcXG4iLCBmb3V0KTsKIAkJCWlmIChvcHRfYm9yZGVyID09IDMpCiAJCQkJZnB1dHMoIlxcaGxp bmVcbiIsIGZvdXQpOwotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVl c3RlZCkKIAkJCQlicmVhazsKIAkJfQogCQllbHNlCkBAIC0yNTIyLDcgKzI1MTksNyBAQCBwcmlu dF9sYXRleF90ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQog CQlmcHV0cygiXFxlbmR7dGFidWxhcn1cblxuXFxub2luZGVudCAiLCBmb3V0KTsKIAogCQkvKiBw cmludCBmb290ZXJzICovCi0JCWlmIChmb290ZXJzICYmICFvcHRfdHVwbGVzX29ubHkgJiYgIWNh bmNlbF9wcmVzc2VkKQorCQlpZiAoZm9vdGVycyAmJiAhb3B0X3R1cGxlc19vbmx5ICYmICFDYW5j ZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIgKmY7CiAKQEAgLTI1NTQsNyAr MjU1MSw3IEBAIHByaW50X2xhdGV4X2xvbmd0YWJsZV90ZXh0KGNvbnN0IHByaW50VGFibGVDb250 ZW50ICpjb250LCBGSUxFICpmb3V0KQogCWNvbnN0IGNoYXIgKmxhc3Rfb3B0X3RhYmxlX2F0dHJf Y2hhciA9IE5VTEw7CiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsKIAotCWlmIChjYW5jZWxfcHJl c3NlZCkKKwlpZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQlyZXR1cm47CiAKIAlpZiAob3B0X2JvcmRl ciA+IDMpCkBAIC0yNjkwLDcgKzI2ODcsNyBAQCBwcmludF9sYXRleF9sb25ndGFibGVfdGV4dChj b25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJCWlmIChvcHRfYm9y ZGVyID09IDMpCiAJCQkJZnB1dHMoIiBcXGhsaW5lXG4iLCBmb3V0KTsKIAkJfQotCQlpZiAoY2Fu Y2VsX3ByZXNzZWQpCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAl9CiAKQEAg LTI3MDgsNyArMjcwNSw3IEBAIHByaW50X2xhdGV4X3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVD b250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXVuc2lnbmVkIGludCBpOwogCWNvbnN0IGNoYXIg KmNvbnN0ICpwdHI7CiAKLQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJaWYgKENhbmNlbFJlcXVlc3Rl ZCkKIAkJcmV0dXJuOwogCiAJaWYgKG9wdF9ib3JkZXIgPiAyKQpAQCAtMjc0MSw3ICsyNzM4LDcg QEAgcHJpbnRfbGF0ZXhfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQsIEZJ TEUgKmZvdXQpCiAJCS8qIG5ldyByZWNvcmQgKi8KIAkJaWYgKGkgJSBjb250LT5uY29sdW1ucyA9 PSAwKQogCQl7Ci0JCQlpZiAoY2FuY2VsX3ByZXNzZWQpCisJCQlpZiAoQ2FuY2VsUmVxdWVzdGVk KQogCQkJCWJyZWFrOwogCQkJaWYgKCFvcHRfdHVwbGVzX29ubHkpCiAJCQl7CkBAIC0yNzcxLDcg KzI3NjgsNyBAQCBwcmludF9sYXRleF92ZXJ0aWNhbChjb25zdCBwcmludFRhYmxlQ29udGVudCAq Y29udCwgRklMRSAqZm91dCkKIAkJZnB1dHMoIlxcZW5ke3RhYnVsYXJ9XG5cblxcbm9pbmRlbnQg IiwgZm91dCk7CiAKIAkJLyogcHJpbnQgZm9vdGVycyAqLwotCQlpZiAoY29udC0+Zm9vdGVycyAm JiAhb3B0X3R1cGxlc19vbmx5ICYmICFjYW5jZWxfcHJlc3NlZCkKKwkJaWYgKGNvbnQtPmZvb3Rl cnMgJiYgIW9wdF90dXBsZXNfb25seSAmJiAhQ2FuY2VsUmVxdWVzdGVkKQogCQl7CiAJCQlwcmlu dFRhYmxlRm9vdGVyICpmOwogCkBAIC0yODE3LDcgKzI4MTQsNyBAQCBwcmludF90cm9mZl9tc190 ZXh0KGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBGSUxFICpmb3V0KQogCXVuc2lnbmVk IGludCBpOwogCWNvbnN0IGNoYXIgKmNvbnN0ICpwdHI7CiAKLQlpZiAoY2FuY2VsX3ByZXNzZWQp CisJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJcmV0dXJuOwogCiAJaWYgKG9wdF9ib3JkZXIgPiAy KQpAQCAtMjg3MSw3ICsyODY4LDcgQEAgcHJpbnRfdHJvZmZfbXNfdGV4dChjb25zdCBwcmludFRh YmxlQ29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJaWYgKChpICsgMSkgJSBjb250LT5uY29s dW1ucyA9PSAwKQogCQl7CiAJCQlmcHV0YygnXG4nLCBmb3V0KTsKLQkJCWlmIChjYW5jZWxfcHJl c3NlZCkKKwkJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJZWxzZQpA QCAtMjg4NSw3ICsyODgyLDcgQEAgcHJpbnRfdHJvZmZfbXNfdGV4dChjb25zdCBwcmludFRhYmxl Q29udGVudCAqY29udCwgRklMRSAqZm91dCkKIAkJZnB1dHMoIi5URVxuLkRTIExcbiIsIGZvdXQp OwogCiAJCS8qIHByaW50IGZvb3RlcnMgKi8KLQkJaWYgKGZvb3RlcnMgJiYgIW9wdF90dXBsZXNf b25seSAmJiAhY2FuY2VsX3ByZXNzZWQpCisJCWlmIChmb290ZXJzICYmICFvcHRfdHVwbGVzX29u bHkgJiYgIUNhbmNlbFJlcXVlc3RlZCkKIAkJewogCQkJcHJpbnRUYWJsZUZvb3RlciAqZjsKIApA QCAtMjkxMSw3ICsyOTA4LDcgQEAgcHJpbnRfdHJvZmZfbXNfdmVydGljYWwoY29uc3QgcHJpbnRU YWJsZUNvbnRlbnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJY29uc3QgY2hhciAqY29uc3QgKnB0cjsK IAl1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2Zvcm1hdCA9IDA7CS8qIDA9bm9uZSwgMT1oZWFkZXIs IDI9Ym9keSAqLwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQp CiAJCXJldHVybjsKIAogCWlmIChvcHRfYm9yZGVyID4gMikKQEAgLTI5NDcsNyArMjk0NCw3IEBA IHByaW50X3Ryb2ZmX21zX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LCBG SUxFICpmb3V0KQogCQkvKiBuZXcgcmVjb3JkICovCiAJCWlmIChpICUgY29udC0+bmNvbHVtbnMg PT0gMCkKIAkJewotCQkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQkJaWYgKENhbmNlbFJlcXVlc3Rl ZCkKIAkJCQlicmVhazsKIAkJCWlmICghb3B0X3R1cGxlc19vbmx5KQogCQkJewpAQCAtMjk5Miw3 ICsyOTg5LDcgQEAgcHJpbnRfdHJvZmZfbXNfdmVydGljYWwoY29uc3QgcHJpbnRUYWJsZUNvbnRl bnQgKmNvbnQsIEZJTEUgKmZvdXQpCiAJCWZwdXRzKCIuVEVcbi5EUyBMXG4iLCBmb3V0KTsKIAog CQkvKiBwcmludCBmb290ZXJzICovCi0JCWlmIChjb250LT5mb290ZXJzICYmICFvcHRfdHVwbGVz X29ubHkgJiYgIWNhbmNlbF9wcmVzc2VkKQorCQlpZiAoY29udC0+Zm9vdGVycyAmJiAhb3B0X3R1 cGxlc19vbmx5ICYmICFDYW5jZWxSZXF1ZXN0ZWQpCiAJCXsKIAkJCXByaW50VGFibGVGb290ZXIg KmY7CiAKQEAgLTMxNzAsNyArMzE2Nyw3IEBAIENsb3NlUGFnZXIoRklMRSAqcGFnZXJwaXBlKQog CQkgKiBwYWdlciBxdWl0IGFzIGEgcmVzdWx0IG9mIHRoZSBTSUdJTlQsIHRoaXMgbWVzc2FnZSB3 b24ndCBnbwogCQkgKiBhbnl3aGVyZSAuLi4KIAkJICovCi0JCWlmIChjYW5jZWxfcHJlc3NlZCkK KwkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJCWZwcmludGYocGFnZXJwaXBlLCBfKCJJbnRlcnJ1 cHRlZFxuIikpOwogCiAJCXBjbG9zZShwYWdlcnBpcGUpOwpAQCAtMzYzOSw3ICszNjM2LDcgQEAg cHJpbnRUYWJsZShjb25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCwKIHsKIAlib29sCQlpc19s b2NhbF9wYWdlciA9IGZhbHNlOwogCi0JaWYgKGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxS ZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCWlmIChjb250LT5vcHQtPmZvcm1hdCA9PSBQUklOVF9O T1RISU5HKQpAQCAtMzc0OCw3ICszNzQ1LDcgQEAgcHJpbnRRdWVyeShjb25zdCBQR3Jlc3VsdCAq cmVzdWx0LCBjb25zdCBwcmludFF1ZXJ5T3B0ICpvcHQsCiAJCQkJciwKIAkJCQljOwogCi0JaWYg KGNhbmNlbF9wcmVzc2VkKQorCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCXJldHVybjsKIAogCXBy aW50VGFibGVJbml0KCZjb250LCAmb3B0LT50b3B0LCBvcHQtPnRpdGxlLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvZmVfdXRpbHMvcHJpbnQuaCBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50 LmgKaW5kZXggOTRmNmE1OTM2MTkuLjIzMDk3YmE4NTNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9mZV91dGlscy9wcmludC5oCisrKyBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3ByaW50LmgKQEAg LTE5NSw4ICsxOTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBwcmludFF1ZXJ5T3B0CiB9IHByaW50UXVl cnlPcHQ7CiAKIAotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBjYW5j ZWxfcHJlc3NlZDsKLQogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IHByaW50VGV4dEZvcm1hdCBw Z19hc2NpaWZvcm1hdDsKIGV4dGVybiBQR0RMTElNUE9SVCBjb25zdCBwcmludFRleHRGb3JtYXQg cGdfYXNjaWlmb3JtYXRfb2xkOwogZXh0ZXJuIFBHRExMSU1QT1JUIHByaW50VGV4dEZvcm1hdCBw Z191dGY4Zm9ybWF0OwkvKiBpZGVhbGx5IHdvdWxkIGJlIGNvbnN0LAoKYmFzZS1jb21taXQ6IGU0 MmQ0YTFmM2RjNTk0MjBiZTc5Njg4MzQwNDAyMGNiNDFkZGQwNWUKLS0gCjIuNTQuMAoK --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0002-fe_utils-Simplify-cancel-logic-in-wait_on_slots.patch Content-Type: text/x-patch; charset=utf-8; name=v8-0002-fe_utils-Simplify-cancel-logic-in-wait_on_slots.patch RnJvbSBlNmJiODJjMDdhYzc0ZThmN2E1MjhhNTdiOTZlN2NmZmVlNmQ2MTNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBUdWUsIDcgQXByIDIwMjYgMTk6NTQ6MTMgKzAyMDAKU3ViamVjdDogW1BBVENIIHY4 IDIvNF0gZmVfdXRpbHM6IFNpbXBsaWZ5IGNhbmNlbCBsb2dpYyBpbiB3YWl0X29uX3Nsb3RzCgpU aGlzIHJlbW92ZXMgdGhlIFNldENhbmNlbENvbm4gY2FsbCBpbiB3YWl0X29uX3Nsb3RzLiBUaGlz IGNhbGwgd2FzCmNvbmZ1c2luZyBiZWNhdXNlIGl0IHdhcyBvbmx5IGNhbGxlZCBmb3IgYSBzaW5n bGUgY29ubmVjdGlvbiBvZiBhbGwgdGhlCmNvbm5lY3Rpb25zIHRoYXQgdGhlIHNlbGVjdF9sb29w IHdvdWxkIHdhaXQgb24uIFR1cm5zIG91dCB0aGF0IGl0IGNhbiBiZQpiZSBtYWRlIGNvbXBsZXRl bHkgcmVkdW5kYW50IGJ5IG1vdmluZyB0aGUgY2hlY2sgZm9yIENhbmNlbFJlcXVlc3RlZApiZWZv cmUgdGhlIGNoZWNrIGZvciBFSU5UUi4KLS0tCiBzcmMvZmVfdXRpbHMvcGFyYWxsZWxfc2xvdC5j IHwgMTYgKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwg MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL3BhcmFsbGVsX3Nsb3Qu YyBiL3NyYy9mZV91dGlscy9wYXJhbGxlbF9zbG90LmMKaW5kZXggZmI5ZTZjYzRlYzEuLjk0ZDEz Y2M0OTlhIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvcGFyYWxsZWxfc2xvdC5jCisrKyBiL3Ny Yy9mZV91dGlscy9wYXJhbGxlbF9zbG90LmMKQEAgLTEwMyw2ICsxMDMsOSBAQCBzZWxlY3RfbG9v cChpbnQgbWF4RmQsIGZkX3NldCAqd29ya2Vyc2V0KQogCQkqd29ya2Vyc2V0ID0gc2F2ZVNldDsK IAkJaSA9IHNlbGVjdChtYXhGZCArIDEsIHdvcmtlcnNldCwgTlVMTCwgTlVMTCwgdHZwKTsKIAor CQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQorCQkJcmV0dXJuIC0xOworCiAjaWZkZWYgV0lOMzIKIAkJ aWYgKGkgPT0gU09DS0VUX0VSUk9SKQogCQl7CkBAIC0xMTUsNyArMTE4LDcgQEAgc2VsZWN0X2xv b3AoaW50IG1heEZkLCBmZF9zZXQgKndvcmtlcnNldCkKIAogCQlpZiAoaSA8IDAgJiYgZXJybm8g PT0gRUlOVFIpCiAJCQljb250aW51ZTsJCQkvKiBpZ25vcmUgdGhpcyAqLwotCQlpZiAoaSA8IDAg fHwgQ2FuY2VsUmVxdWVzdGVkKQorCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLTE7CQkJLyogYnV0 IG5vdCB0aGlzICovCiAJCWlmIChpID09IDApCiAJCQljb250aW51ZTsJCQkvKiB0aW1lb3V0IChX aW4zMiBvbmx5KSAqLwpAQCAtMTk3LDggKzIwMCw3IEBAIHdhaXRfb25fc2xvdHMoUGFyYWxsZWxT bG90QXJyYXkgKnNhKQogewogCWludAkJCWk7CiAJZmRfc2V0CQlzbG90c2V0OwotCWludAkJCW1h eEZkID0gMDsKLQlQR2Nvbm4JICAgKmNhbmNlbGNvbm4gPSBOVUxMOworCWludAkJCW1heEZkID0g LTE7CiAKIAkvKiBXZSBtdXN0IHJlY29uc3RydWN0IHRoZSBmZF9zZXQgZm9yIGVhY2ggY2FsbCB0 byBzZWxlY3RfbG9vcCAqLwogCUZEX1pFUk8oJnNsb3RzZXQpOwpAQCAtMjE5LDEwICsyMjEsNiBA QCB3YWl0X29uX3Nsb3RzKFBhcmFsbGVsU2xvdEFycmF5ICpzYSkKIAkJaWYgKHNvY2sgPCAwKQog CQkJY29udGludWU7CiAKLQkJLyogS2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgdmFsaWQgY29ubmVj dGlvbiB3ZSBzZWUuICovCi0JCWlmIChjYW5jZWxjb25uID09IE5VTEwpCi0JCQljYW5jZWxjb25u ID0gc2EtPnNsb3RzW2ldLmNvbm5lY3Rpb247Ci0KIAkJRkRfU0VUKHNvY2ssICZzbG90c2V0KTsK IAkJaWYgKHNvY2sgPiBtYXhGZCkKIAkJCW1heEZkID0gc29jazsKQEAgLTIzMiwxMiArMjMwLDEw IEBAIHdhaXRfb25fc2xvdHMoUGFyYWxsZWxTbG90QXJyYXkgKnNhKQogCSAqIElmIHdlIGdldCB0 aGlzIGZhciB3aXRoIG5vIHZhbGlkIGNvbm5lY3Rpb25zLCBwcm9jZXNzaW5nIGNhbm5vdAogCSAq IGNvbnRpbnVlLgogCSAqLwotCWlmIChjYW5jZWxjb25uID09IE5VTEwpCisJaWYgKG1heEZkIDwg MCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JU2V0Q2FuY2VsQ29ubihjYW5jZWxjb25uKTsKIAlpID0g c2VsZWN0X2xvb3AobWF4RmQsICZzbG90c2V0KTsKLQlSZXNldENhbmNlbENvbm4oKTsKIAogCS8q IGZhaWx1cmU/ICovCiAJaWYgKGkgPCAwKQotLSAKMi41NC4wCgo= --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0003-Move-Windows-pthread-compatibility-functions-to-s.patch Content-Type: text/x-patch; charset=utf-8; name=v8-0003-Move-Windows-pthread-compatibility-functions-to-s.patch RnJvbSAwYTVkMGM1NmM3MjYzN2M2YzIyMzgxMWE3NTJkYTNlMmIzODc3MjVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDE4OjE4OjEzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OCAzLzRdIE1vdmUgV2luZG93cyBwdGhyZWFkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIHRvCiBz cmMvcG9ydAoKVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhIGZvbGxvdy11cCBjb21taXQgd2hp Y2ggd2lsbCBzdGFydCB0byB1c2UKdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgcGxhY2VzIHRoYW4g anVzdCBsaWJwcS4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgMSAtCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgMiArLQogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDEgKwogc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyB8IDQg KystLQogNSBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBy ZW5hbWUgc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyAoOTQl KQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA2MWNlZTQy ZGFhNy4uMGNlMDM3ODI3MzMgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTE5NjEsNiArMTk2MSw3IEBAIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi OyB0aGVuCiAgIEFDX0xJQk9CSihkaXJtb2QpCiAgIEFDX0xJQk9CSihraWxsKQogICBBQ19MSUJP Qkoob3BlbikKKyAgQUNfTElCT0JKKHB0aHJlYWQtd2luMzIpCiAgIEFDX0xJQk9CSihzeXN0ZW0p CiAgIEFDX0xJQk9CSih3aW4zMmNvbW1vbikKICAgQUNfTElCT0JKKHdpbjMyZGxvcGVuKQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9NYWtlZmlsZQppbmRleCAwOTYzOTk1ZWVkNC4uZDZjZmIwMGQ2NTUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlCkBAIC03NSw3ICs3NSw2IEBAIGVuZGlmCiAKIGlmZXEgKCQoUE9SVE5BTUUpLCB3 aW4zMikKIE9CSlMgKz0gXAotCXB0aHJlYWQtd2luMzIubyBcCiAJd2luMzIubwogZW5kaWYKIApk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9tZXNvbi5idWlsZAppbmRleCBiMGFlNzIxNjdhMS4uYjk0OTc4MGI4NWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCkBAIC0yMCw3ICsyMCw3IEBAIGxpYnBxX3NvdXJjZXMg PSBmaWxlcygKIGxpYnBxX3NvX3NvdXJjZXMgPSBbXSAjIGZvciBzaGFyZWQgbGliLCBpbiBhZGRp dGlvbiB0byB0aGUgYWJvdmUKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCi0gIGxpYnBx X3NvdXJjZXMgKz0gZmlsZXMoJ3B0aHJlYWQtd2luMzIuYycsICd3aW4zMi5jJykKKyAgbGlicHFf c291cmNlcyArPSBmaWxlcygnd2luMzIuYycpCiAgIGxpYnBxX3NvX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCiAgICAgJy0tTkFNRScsICds aWJwcScsCiAgICAgJy0tRklMRURFU0MnLCAnUG9zdGdyZVNRTCBBY2Nlc3MgTGlicmFyeScsXSkK ZGlmZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQK aW5kZXggOTIyYjNmNjQ2NzYuLjEwODMzYjEzODQyIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNv bi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtMzMsNiArMzMsNyBAQCBpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKICAgICAnZGlybW9kLmMnLAogICAgICdraWxsLmMnLAog ICAgICdvcGVuLmMnLAorICAgICdwdGhyZWFkLXdpbjMyLmMnLAogICAgICdzeXN0ZW0uYycsCiAg ICAgJ3dpbjMyY29tbW9uLmMnLAogICAgICd3aW4zMmRsb3Blbi5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYyBiL3NyYy9wb3J0L3B0aHJlYWQtd2lu MzIuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBzcmMvaW50ZXJmYWNlcy9saWJw cS9wdGhyZWFkLXdpbjMyLmMKcmVuYW1lIHRvIHNyYy9wb3J0L3B0aHJlYWQtd2luMzIuYwppbmRl eCBjZjY2Mjg0ZjAwNy4uNDhkNjhiNjkzYTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3B0aHJlYWQtd2luMzIuYworKysgYi9zcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKQEAgLTUs MTIgKzUsMTIgQEAKICoKICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCiAqIElERU5USUZJQ0FUSU9OCi0qCXNyYy9pbnRlcmZhY2Vz L2xpYnBxL3B0aHJlYWQtd2luMzIuYworKglzcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKICoKICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAqLwogCi0jaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRl ICJjLmgiCiAKICNpbmNsdWRlICJwdGhyZWFkLXdpbjMyLmgiCiAKLS0gCjIuNTQuMAoK --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0004-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch Content-Type: text/x-patch; charset=utf-8; name=v8-0004-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch RnJvbSAxMTYyMTkzNGNhMTVhYjliNjI0MzAyZTdiZDg3YmMzZjFiZDM0M2IyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDEzOjA1OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OCA0LzRdIERvbid0IHVzZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZSBQUWNhbmNlbCBwc3FsIGFu ZAogb3RoZXIgdG9vbHMgYW55bW9yZQoKQWxsIG9mIG91ciBmcm9udGVuZCB0b29scyB0aGF0IHVz ZWQgb3VyIGZlX3V0aWxzIHRvIGNhbmNlbCBxdWVyaWVzLAppbmNsdWRpbmcgcHNxbCwgc3RpbGwg dXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGUKc2VydmVyLiBUaGF0 IGZ1bmN0aW9uIGlzIGluc2VjdXJlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHVzZSBlbmNyeXB0aW9u IHRvCnNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0LiBUaGlzIHN0YXJ0cyB1c2luZyB0aGUgbmV3IGNh bmNlbGxhdGlvbiBBUElzCihpbnRyb2R1Y2VkIGluIDYxNDYxYTMwMCkgZm9yIGFsbCB0aGVzZSBm cm9udGVuZCB0b29scy4gVGhlc2UgQVBJcyB1c2UKdGhlIHNhbWUgZW5jcnlwdGlvbiBzZXR0aW5n cyBhcyB0aGUgY29ubmVjdGlvbiB0aGF0J3MgYmVpbmcgY2FuY2VsbGVkLgpTaW5jZSB0aGVzZSBB UElzIGFyZSBub3Qgc2lnbmFsLXNhZmUgdGhpcyByZXF1aXJlZCBhIHJlZmFjdG9yIHRvIG5vdApz ZW5kIHRoZSBjYW5jZWwgcmVxdWVzdCBpbiBhIHNpZ25hbCBoYW5kbGVyIGFueW1vcmUsIGJ1dCBp bnN0ZWFkIHVzaW5nIGEKZGVkaWNhdGVkIHRocmVhZC4KClNpbWlsYXIgbG9naWMgd2FzIGFscmVh ZHkgdXNlZCBmb3IgV2luZG93cyBhbnl3YXksIHNvIHRoaXMgaGFzIHRoZQpiZW5lZml0IHRoYXQg aXQgbWFrZXMgdGhlIGNhbmNlbCBsb2dpYyBtb3JlIHVuaWZvcm0gYWNyb3NzIG91ciBzdXBwb3J0 ZWQKcGxhdGZvcm1zLiBJbiB0aGUgcGdfZHVtcCBjb2RlIHRoZXJlJ3Mgc3RpbGwgcXVpdGUgYSBi aXQgb2YgYmVoYXZpb3VyYWwKZGlmZmVyZW5jZSB0aG91Z2gsIGJlY2F1c2UgcGdfZHVtcCBpcyB1 c2luZyB0aHJlYWRzIGZvciBwYXJhbGxlbGlzbSBvbgpXaW5kb3dzLCBidXQgcHJvY2Vzc2VzIG9u IFVuaXhlcy4KLS0tCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iaW4vcGdfYW1jaGVjay9wZ19hbWNoZWNrLmMgICAgICB8ICAgMiArLQogc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMg ICAgICAgICAgIHwgMzQzICsrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuaCB8ICAgOCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jICAgICAgIHwg ICA3ICstCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcHNxbC9jb21tb24uYyAgICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2Jpbi9zY3Jp cHRzL2NsdXN0ZXJkYi5jICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3NjcmlwdHMvcmVpbmRl eGRiLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuYyAgICAg ICAgICB8ICAgMiArLQogc3JjL2ZlX3V0aWxzL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAy ICstCiBzcmMvZmVfdXRpbHMvY2FuY2VsLmMgICAgICAgICAgICAgICAgfCA0NjkgKysrKysrKysr KysrKysrKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9mZV91dGlscy9jYW5jZWwuaCAgICAgICAg fCAgMTUgKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDUyMCBpbnNlcnRpb25zKCspLCAzNTIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA1Njhl MGUxNTBiZi4uMGFjMDA1MWE5YjUgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29u LmJ1aWxkCkBAIC0zNjUwLDcgKzM2NTAsNyBAQCBmcm9udGVuZF9jb2RlID0gZGVjbGFyZV9kZXBl bmRlbmN5KAogICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcG9zdGdyZXNfaW5jXSwKICAgbGlua193 aXRoOiBbZmVfdXRpbHMsIGNvbW1vbl9zdGF0aWMsIHBncG9ydF9zdGF0aWNdLAogICBzb3VyY2Vz OiBnZW5lcmF0ZWRfaGVhZGVyc19zdGFtcCwKLSAgZGVwZW5kZW5jaWVzOiBbb3NfZGVwcywgbGli aW50bF0sCisgIGRlcGVuZGVuY2llczogW29zX2RlcHMsIGxpYmludGwsIHRocmVhZF9kZXBdLAog KQogCiBiYWNrZW5kX2JvdGhfZGVwcyArPSBbCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hl Y2svcGdfYW1jaGVjay5jIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3BnX2FtY2hlY2suYwppbmRleCAw OWJhMDU5NjQwMC4uMjcyOGJjZGIxYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYW1jaGVjay9w Z19hbWNoZWNrLmMKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3BnX2FtY2hlY2suYwpAQCAtNDc4 LDcgKzQ3OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljcGFyYW1zLmRibmFt ZSA9IE5VTEw7CiAJY3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOwogCi0Jc2V0dXBfY2Fu Y2VsX2hhbmRsZXIoTlVMTCk7CisJc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCwgTlVMTCk7CiAK IAkvKiBjaG9vc2UgdGhlIGRhdGFiYXNlIGZvciBvdXIgaW5pdGlhbCBjb25uZWN0aW9uICovCiAJ aWYgKG9wdHMuYWxsZGIpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9z cmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggNzkwNzNiMGEwZWEuLmY3NjM0NmM0ZjZjIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCkBAIC0yMSw3ICsyMSw3IEBAIGV4cG9ydCBMWjQKIGV4cG9ydCBaU1RECiBleHBv cnQgd2l0aF9pY3UKIAotb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChD UFBGTEFHUykKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3Bf c3JjZGlyKS9zcmMvcG9ydCAkKENQUEZMQUdTKQogTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9w X2J1aWxkZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiAKIE9C SlMgPSBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNzliZDUwMzY4NDEuLmViNTVkN2E1MGNmIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCkBAIC0yMiw2ICsyMiw4IEBAIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBm aWxlcygKIHBnX2R1bXBfY29tbW9uID0gc3RhdGljX2xpYnJhcnkoJ2xpYnBnZHVtcF9jb21tb24n LAogICBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzLAogICBjX3BjaDogcGNoX3Bvc3RncmVzX2ZlX2gs CisgICMgcG9ydCBuZWVkcyB0byBiZSBpbiBpbmNsdWRlIHBhdGggZHVlIHRvIHB0aHJlYWQtd2lu MzIuaAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbJy4uLy4uL3BvcnQnXSwKICAgZGVwZW5kZW5j aWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIGx6NCwgemxpYiwgenN0ZF0sCiAgIGt3YXJnczog aW50ZXJuYWxfbGliX2FyZ3MsCiApCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxs ZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDdlMmU5Zjk1OGVhLi4xZDc2 ZTkxZmM0OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTYwLDYgKzYwLDggQEAKICNpbmNsdWRlIDxmY250 bC5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImZl X3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2lu Y2x1ZGUgInBhcmFsbGVsLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCkBAIC0xNzQs MTAgKzE3Niw2IEBAIHR5cGVkZWYgc3RydWN0IER1bXBTaWduYWxJbmZvcm1hdGlvbgogCiBzdGF0 aWMgdm9sYXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25hbF9pbmZvOwogCi0jaWZkZWYg V0lOMzIKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIHNpZ25hbF9pbmZvX2xvY2s7Ci0jZW5kaWYK LQogLyoKICAqIFdyaXRlIGEgc2ltcGxlIHN0cmluZyB0byBzdGRlcnIgLS0tIG11c3QgYmUgc2Fm ZSBpbiBhIHNpZ25hbCBoYW5kbGVyLgogICogV2UgaWdub3JlIHRoZSB3cml0ZSgpIHJlc3VsdCBz aW5jZSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNvdWxkIGRvIGFib3V0IGl0LgpAQCAtMjA5LDYgKzIw Nyw3IEBAIHN0YXRpYyB2b2lkIFdhaXRGb3JUZXJtaW5hdGluZ1dvcmtlcnMoUGFyYWxsZWxTdGF0 ZSAqcHN0YXRlKTsKIHN0YXRpYyB2b2lkIHNldF9jYW5jZWxfaGFuZGxlcih2b2lkKTsKIHN0YXRp YyB2b2lkIHNldF9jYW5jZWxfcHN0YXRlKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMg dm9pZCBzZXRfY2FuY2VsX3Nsb3RfYXJjaGl2ZShQYXJhbGxlbFNsb3QgKnNsb3QsIEFyY2hpdmVI YW5kbGUgKkFIKTsKK3N0YXRpYyB2b2lkIFN0b3BXb3JrZXJzKHZvaWQpOwogc3RhdGljIHZvaWQg UnVuV29ya2VyKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFNsb3QgKnNsb3QpOwogc3RhdGlj IGludAlHZXRJZGxlV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgYm9vbCBI YXNFdmVyeVdvcmtlclRlcm1pbmF0ZWQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKQEAgLTQxMCwz MiArNDA5LDkgQEAgU2h1dGRvd25Xb3JrZXJzSGFyZChQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAJ LyoKIAkgKiBGb3JjZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiBhbnkgY29tbWFuZHMgY3VycmVudGx5 IGluIHByb2dyZXNzLgogCSAqLwotI2lmbmRlZiBXSU4zMgotCS8qIE9uIG5vbi1XaW5kb3dzLCBz ZW5kIFNJR1RFUk0gdG8gZWFjaCB3b3JrZXIgcHJvY2Vzcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwg cHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCi0JewotCQlwaWRfdAkJcGlkID0gcHN0YXRlLT5wYXJh bGxlbFNsb3RbaV0ucGlkOwotCi0JCWlmIChwaWQgIT0gMCkKLQkJCWtpbGwocGlkLCBTSUdURVJN KTsKLQl9Ci0jZWxzZQotCi0JLyoKLQkgKiBPbiBXaW5kb3dzLCBzZW5kIHF1ZXJ5IGNhbmNlbHMg ZGlyZWN0bHkgdG8gdGhlIHdvcmtlcnMnIGJhY2tlbmRzLiAgVXNlCi0JICogYSBjcml0aWNhbCBz ZWN0aW9uIHRvIGVuc3VyZSB3b3JrZXIgdGhyZWFkcyBkb24ndCBjaGFuZ2Ugc3RhdGUuCi0JICov Ci0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotCWZvciAoaSA9IDA7 IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQl7Ci0JCUFyY2hpdmVIYW5kbGUgKkFIID0g cHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uQUg7Ci0JCWNoYXIJCWVycmJ1ZlsxXTsKLQotCQlpZiAo QUggIT0gTlVMTCAmJiBBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2Vs KEFILT5jb25uQ2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKLQl9Ci0JTGVhdmVDcml0 aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCisJTG9ja0NhbmNlbFRocmVh ZCgpOworCVN0b3BXb3JrZXJzKCk7CisJVW5sb2NrQ2FuY2VsVGhyZWFkKCk7CiAKIAkvKiBOb3cg d2FpdCBmb3IgdGhlbSB0byB0ZXJtaW5hdGUuICovCiAJV2FpdEZvclRlcm1pbmF0aW5nV29ya2Vy cyhwc3RhdGUpOwpAQCAtNTE5LDc0ICs0OTUsODAgQEAgV2FpdEZvclRlcm1pbmF0aW5nV29ya2Vy cyhQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAgKiBjb3VsZCBsZWF2ZSBhIFNRTCBjb21tYW5kIChl LmcuLCBDUkVBVEUgSU5ERVggb24gYSBsYXJnZSB0YWJsZSkgcnVubmluZwogICogZm9yIGEgbG9u ZyB0aW1lLiAgSW5zdGVhZCwgd2UgdHJ5IHRvIHNlbmQgYSBjYW5jZWwgcmVxdWVzdCBhbmQgdGhl biBkaWUuCiAgKiBwZ19kdW1wIHByb2JhYmx5IGRvZXNuJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0 IHdlIG1pZ2h0IGFzIHdlbGwgdXNlIGl0Ci0gKiB0aGVyZSB0b28uICBOb3RlIHRoYXQgc2VuZGlu ZyB0aGUgY2FuY2VsIGRpcmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyCi0gKiBpcyBzYWZl IGJlY2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVuIHRvIG1ha2UgaXQgc28uCisgKiB0aGVyZSB0 b28uCiAgKgotICogSW4gcGFyYWxsZWwgb3BlcmF0aW9uIG9uIFVuaXgsIGVhY2ggcHJvY2VzcyBp cyByZXNwb25zaWJsZSBmb3IgY2FuY2VsaW5nCi0gKiBpdHMgb3duIGNvbm5lY3Rpb24gKHRoaXMg bXVzdCBiZSBzbyBiZWNhdXNlIG5vYm9keSBlbHNlIGhhcyBhY2Nlc3MgdG8gaXQpLgotICogRnVy dGhlcm1vcmUsIHRoZSBsZWFkZXIgcHJvY2VzcyBzaG91bGQgYXR0ZW1wdCB0byBmb3J3YXJkIGl0 cyBzaWduYWwgdG8KLSAqIGVhY2ggY2hpbGQuICBJbiBzaW1wbGUgbWFudWFsIHVzZSBvZiBwZ19k dW1wL3BnX3Jlc3RvcmUsIGZvcndhcmRpbmcgaXNuJ3QKLSAqIG5lZWRlZCBiZWNhdXNlIHR5cGlu ZyBjb250cm9sLUMgYXQgdGhlIGNvbnNvbGUgd291bGQgZGVsaXZlciBTSUdJTlQgdG8KLSAqIGV2 ZXJ5IG1lbWJlciBvZiB0aGUgdGVybWluYWwgcHJvY2VzcyBncm91cCAtLS0gYnV0IGluIG90aGVy IHNjZW5hcmlvcyBpdAotICogbWlnaHQgYmUgdGhhdCBvbmx5IHRoZSBsZWFkZXIgZ2V0cyBzaWdu YWxlZC4KKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwgaGFuZGxlciB3YWtlcyB1cCBhIGRlZGljYXRl ZCBjYW5jZWwgdGhyZWFkIHZpYSBhCisgKiBzZWxmLXBpcGUsIHdoaWNoIHRoZW4gc2VuZHMgdGhl IGNhbmNlbCBhbmQgY2FsbHMgX2V4aXQoKS4gIFRoaXMgdGhyZWFkIGFsc28KKyAqIGZvcndhcmRz IHRoZSBzaWduYWwgdG8gZWFjaCBjaGlsZCBzbyB0aGV5IGNhbiBhbHNvIGNhbmNlbCB0aGVpciBx dWVyaWVzLiBJbgorICogc2ltcGxlIG1hbnVhbCB1c2Ugb2YgcGdfZHVtcC9wZ19yZXN0b3JlLCBm b3J3YXJkaW5nIGlzbid0IG5lZWRlZCBiZWNhdXNlCisgKiB0eXBpbmcgY29udHJvbC1DIGF0IHRo ZSBjb25zb2xlIHdvdWxkIGRlbGl2ZXIgU0lHSU5UIHRvIGV2ZXJ5IG1lbWJlciBvZiB0aGUKKyAq IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgLS0tIGJ1dCBpbiBvdGhlciBzY2VuYXJpb3MgaXQgbWln aHQgYmUgdGhhdCBvbmx5IHRoZQorICogbGVhZGVyIGdldHMgc2lnbmFsZWQuCiAgKgogICogT24g V2luZG93cywgdGhlIGNhbmNlbCBoYW5kbGVyIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGJl Y2F1c2UgdGhhdCdzCi0gKiBob3cgU2V0Q29uc29sZUN0cmxIYW5kbGVyIHdvcmtzLiAgV2UgbWFr ZSBpdCBzdG9wIHdvcmtlciB0aHJlYWRzLCBzZW5kCi0gKiBjYW5jZWxzIG9uIGFsbCBhY3RpdmUg Y29ubmVjdGlvbnMsIGFuZCB0aGVuIHJldHVybiBGQUxTRSwgd2hpY2ggd2lsbCBhbGxvdwotICog dGhlIHByb2Nlc3MgdG8gZGllLiAgRm9yIHNhZmV0eSdzIHNha2UsIHdlIHVzZSBhIGNyaXRpY2Fs IHNlY3Rpb24gdG8KLSAqIHByb3RlY3QgdGhlIFBHY2FuY2VsIHN0cnVjdHVyZXMgYWdhaW5zdCBi ZWluZyBjaGFuZ2VkIHdoaWxlIHRoZSBzaWduYWwKLSAqIHRocmVhZCBydW5zLgorICogaG93IFNl dENvbnNvbGVDdHJsSGFuZGxlciB3b3Jrcy4gIFdlIG1ha2UgaXQgZm9yY2libHkgdGVybWluYXRl IHRoZSB3b3JrZXIKKyAqIHRocmVhZHMgKHNvIHRoZXkgY2FuJ3QgcmVwb3J0IHRoZSBxdWVyeSBj YW5jZWxsYXRpb25zIGFzIGVycm9ycyksIHNlbmQKKyAqIGNhbmNlbHMgb24gYWxsIGFjdGl2ZSBj b25uZWN0aW9ucywgYW5kIHRoZW4gY2FsbCBfZXhpdCgpIHRvIHRlcm1pbmF0ZSB0aGUKKyAqIHBy b2Nlc3MuICBBY2Nlc3MgdG8gdGhlIHNoYXJlZCBQR2NhbmNlbENvbm4gc3RydWN0dXJlcyBpcyBz ZXJpYWxpemVkIGFnYWluc3QKKyAqIHRoZSBtYWluIHRocmVhZCBieSB0aGUgY2FuY2VsIHRocmVh ZCBsb2NrIGhlbGQgYXJvdW5kIHRoZSBjYWxsYmFjay4KICAqLwogCi0jaWZuZGVmIFdJTjMyCi0K IC8qCi0gKiBTaWduYWwgaGFuZGxlciAoVW5peCBvbmx5KQorICogQ2FuY2VsIGFsbCBhY3RpdmUg cXVlcmllcywgcHJpbnQgYSB0ZXJtaW5hdGlvbiBtZXNzYWdlLCBhbmQgZXhpdC4KKyAqCisgKiBJ bnZva2VkIGZyb20gdGhlIGNhbmNlbCB0aHJlYWQgKFVuaXgpIG9yIHRoZSBXaW5kb3dzIGNvbnNv bGUgaGFuZGxlciB0aHJlYWQuCisgKiBJdCBuZXZlciByZXR1cm5zOiBhZnRlciBzZW5kaW5nIHRo ZSBjYW5jZWxzIGl0IGNhbGxzIF9leGl0KCkgc28gdGhhdCB0aGUKKyAqIHByb2Nlc3MgdGVybWlu YXRlcyBvbiBjYW5jZWwuICBXZSB1c2UgX2V4aXQoKSByYXRoZXIgdGhhbiBleGl0KCkgYmVjYXVz ZSB0aGUKKyAqIGxhdHRlciB3b3VsZCBpbnZva2UgYXRleGl0IGhhbmRsZXJzIHRoYXQgY2FuIGZh aWwgaWYgd2UgaW50ZXJydXB0ZWQgcmVsYXRlZAorICogY29kZS4KICAqLwotc3RhdGljIHZvaWQK LXNpZ1Rlcm1IYW5kbGVyKFNJR05BTF9BUkdTKQorcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQKK0Nh bmNlbEJhY2tlbmRzQW5kRXhpdCh2b2lkKQogeworI2lmZGVmIFdJTjMyCiAJaW50CQkJaTsKLQlj aGFyCQllcnJidWZbMV07CiAKIAkvKgotCSAqIFNvbWUgcGxhdGZvcm1zIGFsbG93IGRlbGl2ZXJ5 IG9mIG5ldyBzaWduYWxzIHRvIGludGVycnVwdCBhbiBhY3RpdmUKLQkgKiBzaWduYWwgaGFuZGxl ci4gIFRoYXQgY291bGQgbXVjayB1cCBvdXIgYXR0ZW1wdCB0byBzZW5kIFBRY2FuY2VsLCBzbwot CSAqIGRpc2FibGUgdGhlIHNpZ25hbHMgdGhhdCBzZXRfY2FuY2VsX2hhbmRsZXIgZW5hYmxlZC4K LQkgKi8KLQlwcXNpZ25hbChTSUdJTlQsIFBHX1NJR19JR04pOwotCXBxc2lnbmFsKFNJR1RFUk0s IFBHX1NJR19JR04pOwotCXBxc2lnbmFsKFNJR1FVSVQsIFBHX1NJR19JR04pOwotCi0JLyoKLQkg KiBJZiB3ZSdyZSBpbiB0aGUgbGVhZGVyLCBmb3J3YXJkIHNpZ25hbCB0byBhbGwgd29ya2Vycy4g IChJdCBzZWVtcyBiZXN0Ci0JICogdG8gZG8gdGhpcyBiZWZvcmUgUFFjYW5jZWw7IGtpbGxpbmcg dGhlIGxlYWRlciB0cmFuc2FjdGlvbiB3aWxsIHJlc3VsdAotCSAqIGluIGludmFsaWQtc25hcHNo b3QgZXJyb3JzIGZyb20gYWN0aXZlIHdvcmtlcnMsIHdoaWNoIG1heWJlIHdlIGNhbgotCSAqIHF1 aWV0IGJ5IGtpbGxpbmcgd29ya2VycyBmaXJzdC4pICBJZ25vcmUgYW55IGVycm9ycy4KKwkgKiBP biBXaW5kb3dzIHRoZSB3b3JrZXJzIGFyZSB0aHJlYWRzIHdpdGhpbiB0aGlzIHNhbWUgcHJvY2Vz cy4gIE9uY2Ugd2UKKwkgKiBjYW5jZWwgdGhlaXIgcXVlcmllcyBiZWxvdyB0aGV5IHdvdWxkIHJl Y2VpdmUgdGhlIGNhbmNlbGxhdGlvbiBhcyBhbgorCSAqIGVycm9yIGFuZCByZXBvcnQgaXQsIGNs dXR0ZXJpbmcgdGhlIHVzZXIncyBzY3JlZW4gaW4gdGhlIGJyaWVmIHdpbmRvdworCSAqIGJlZm9y ZSB0aGUgcHJvY2VzcyBleGl0cy4gIEZvcmNpYmx5IHRlcm1pbmF0ZSB0aGUgd29ya2VyIHRocmVh ZHMgZmlyc3QKKwkgKiBzbyB0aGV5IGNhbid0IGRvIHRoYXQuCisJICoKKwkgKiBUZXJtaW5hdGVU aHJlYWQgaXMgdW5zYWZlIGluIGdlbmVyYWwgKGl0IG1heSBsZWFrIHJlc291cmNlcyBvciBsZWF2 ZQorCSAqIHVzZXItc3BhY2UgbG9ja3MgaGVsZCBieSB0aGUga2lsbGVkIHRocmVhZCksIGJ1dCB0 aGF0J3MgYWNjZXB0YWJsZSBoZXJlCisJICogYmVjYXVzZSB3ZSdyZSBhYm91dCB0byBlbmQgdGhl IHdob2xlIHByb2Nlc3MgYW55d2F5LgogCSAqLwogCWlmIChzaWduYWxfaW5mby5wc3RhdGUgIT0g TlVMTCkKIAl7CiAJCWZvciAoaSA9IDA7IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtl cnM7IGkrKykKIAkJewotCQkJcGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxs ZWxTbG90W2ldLnBpZDsKKwkJCUhBTkRMRQkJaFRocmVhZCA9IChIQU5ETEUpIHNpZ25hbF9pbmZv LnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLmhUaHJlYWQ7CiAKLQkJCWlmIChwaWQgIT0gMCkKLQkJ CQlraWxsKHBpZCwgU0lHVEVSTSk7CisJCQlpZiAoaFRocmVhZCAhPSBJTlZBTElEX0hBTkRMRV9W QUxVRSkKKwkJCQlUZXJtaW5hdGVUaHJlYWQoaFRocmVhZCwgMCk7CiAJCX0KIAl9CisjZW5kaWYK IAogCS8qCi0JICogU2VuZCBRdWVyeUNhbmNlbCBpZiB3ZSBoYXZlIGEgY29ubmVjdGlvbiB0byBz ZW5kIHRvLiAgSWdub3JlIGVycm9ycywKLQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBh Ym91dCB0aGVtIGFueXdheS4KKwkgKiBTdG9wIHdvcmtlcnMgZmlyc3QgdG8gYXZvaWQgaW52YWxp ZC1zbmFwc2hvdCBlcnJvcnMgaWYgdGhlIGxlYWRlcgorCSAqIGNhbmNlbHMgYmVmb3JlIHdvcmtl cnMuCiAJICovCi0JaWYgKHNpZ25hbF9pbmZvLm15QUggIT0gTlVMTCAmJiBzaWduYWxfaW5mby5t eUFILT5jb25uQ2FuY2VsICE9IE5VTEwpCi0JCSh2b2lkKSBQUWNhbmNlbChzaWduYWxfaW5mby5t eUFILT5jb25uQ2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKKwlTdG9wV29ya2Vycygp OworCisJaWYgKHNpZ25hbF9pbmZvLm15QUggIT0gTlVMTCAmJiBzaWduYWxfaW5mby5teUFILT5j YW5jZWxDb25uICE9IE5VTEwpCisJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKHNpZ25hbF9pbmZv Lm15QUgtPmNhbmNlbENvbm4pOwogCiAJLyoKLQkgKiBSZXBvcnQgd2UncmUgcXVpdHRpbmcsIHVz aW5nIG5vdGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFuIHdyaXRlKDIpLgotCSAqIFdoZW4gaW4g cGFyYWxsZWwgb3BlcmF0aW9uLCBvbmx5IHRoZSBsZWFkZXIgcHJvY2VzcyBzaG91bGQgZG8gdGhp cy4KKwkgKiBQcmludCB0ZXJtaW5hdGlvbiBtZXNzYWdlLiBJbiBwYXJhbGxlbCBvcGVyYXRpb24s IG9ubHkgdGhlIGxlYWRlcgorCSAqIHNob3VsZCBwcmludCB0aGlzLiBPbiBXaW5kb3dzLCB3b3Jr ZXJzIGFyZSB0aHJlYWRzIGluIHRoZSBzYW1lIHByb2Nlc3MKKwkgKiBhbmQgdGhlIGNvbnNvbGUg aGFuZGxlciBvbmx5IHJ1bnMgaW4gdGhlIGxlYWRlciBjb250ZXh0LCBzbyB3ZSBjYW4KKwkgKiBh bHdheXMgcHJpbnQgaXQuCiAJICovCisjaWZuZGVmIFdJTjMyCiAJaWYgKCFzaWduYWxfaW5mby5h bV93b3JrZXIpCisjZW5kaWYKIAl7CiAJCWlmIChwcm9nbmFtZSkKIAkJewpAQCAtNTk2LDExMSAr NTc4LDQyIEBAIHNpZ1Rlcm1IYW5kbGVyKFNJR05BTF9BUkdTKQogCQl3cml0ZV9zdGRlcnIoInRl cm1pbmF0ZWQgYnkgdXNlclxuIik7CiAJfQogCi0JLyoKLQkgKiBBbmQgZGllLCB1c2luZyBfZXhp dCgpIG5vdCBleGl0KCkgYmVjYXVzZSB0aGUgbGF0dGVyIHdpbGwgaW52b2tlIGF0ZXhpdAotCSAq IGhhbmRsZXJzIHRoYXQgY2FuIGZhaWwgaWYgd2UgaW50ZXJydXB0ZWQgcmVsYXRlZCBjb2RlLgot CSAqLwogCV9leGl0KDEpOwogfQogCiAvKgotICogRW5hYmxlIGNhbmNlbCBpbnRlcnJ1cHQgaGFu ZGxlciwgaWYgbm90IGFscmVhZHkgZG9uZS4KLSAqLwotc3RhdGljIHZvaWQKLXNldF9jYW5jZWxf aGFuZGxlcih2b2lkKQotewotCS8qCi0JICogV2hlbiBmb3JraW5nLCBzaWduYWxfaW5mby5oYW5k bGVyX3NldCB3aWxsIHByb3BhZ2F0ZSBpbnRvIHRoZSBuZXcKLQkgKiBwcm9jZXNzLCBidXQgdGhh dCdzIGZpbmUgYmVjYXVzZSB0aGUgc2lnbmFsIGhhbmRsZXIgc3RhdGUgZG9lcyB0b28uCi0JICov Ci0JaWYgKCFzaWduYWxfaW5mby5oYW5kbGVyX3NldCkKLQl7Ci0JCXNpZ25hbF9pbmZvLmhhbmRs ZXJfc2V0ID0gdHJ1ZTsKLQotCQlwcXNpZ25hbChTSUdJTlQsIHNpZ1Rlcm1IYW5kbGVyKTsKLQkJ cHFzaWduYWwoU0lHVEVSTSwgc2lnVGVybUhhbmRsZXIpOwotCQlwcXNpZ25hbChTSUdRVUlULCBz aWdUZXJtSGFuZGxlcik7Ci0JfQotfQotCi0jZWxzZQkJCQkJCQkvKiBXSU4zMiAqLwotCi0vKgot ICogQ29uc29sZSBpbnRlcnJ1cHQgaGFuZGxlciAtLS0gcnVucyBpbiBhIG5ld2x5LXN0YXJ0ZWQg dGhyZWFkLgorICogU3RvcCBhbGwgd29ya2VyIHByb2Nlc3Nlcy90aHJlYWRzLgogICoKLSAqIEFm dGVyIHN0b3BwaW5nIG90aGVyIHRocmVhZHMgYW5kIHNlbmRpbmcgY2FuY2VsIHJlcXVlc3RzIG9u IGFsbCBvcGVuCi0gKiBjb25uZWN0aW9ucywgd2UgcmV0dXJuIEZBTFNFIHdoaWNoIHdpbGwgYWxs b3cgdGhlIGRlZmF1bHQgRXhpdFByb2Nlc3MoKQotICogYWN0aW9uIHRvIGJlIHRha2VuLgorICog T24gVW5peCwgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2VyIHByb2Nlc3M7IHRoZWlyIHNpZ25h bCBoYW5kbGVycyB3aWxsCisgKiBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGVpciBiYWNrZW5k cy4KKyAqCisgKiBPbiBXaW5kb3dzLCB3b3JrZXJzIGFyZSB0aHJlYWRzIGluIHRoZSBzYW1lIHBy b2Nlc3MsIHNvIHdlIHNlbmQgY2FuY2VsCisgKiByZXF1ZXN0cyBkaXJlY3RseSB0byB0aGVpciBi YWNrZW5kcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBjYW5jZWwgdGhyZWFkIGxvY2sg KHZpYSBMb2NrQ2FuY2VsVGhyZWFkKS4KICAqLwotc3RhdGljIEJPT0wgV0lOQVBJCi1jb25zb2xl SGFuZGxlcihEV09SRCBkd0N0cmxUeXBlKQorc3RhdGljIHZvaWQKK1N0b3BXb3JrZXJzKHZvaWQp CiB7CiAJaW50CQkJaTsKLQljaGFyCQllcnJidWZbMV07CiAKLQlpZiAoZHdDdHJsVHlwZSA9PSBD VFJMX0NfRVZFTlQgfHwKLQkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQotCXsKLQkJ LyogQ3JpdGljYWwgc2VjdGlvbiBwcmV2ZW50cyBjaGFuZ2luZyBkYXRhIHdlIGxvb2sgYXQgaGVy ZSAqLwotCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7Ci0KLQkJLyoK LQkJICogSWYgaW4gcGFyYWxsZWwgbW9kZSwgc3RvcCB3b3JrZXIgdGhyZWFkcyBhbmQgc2VuZCBR dWVyeUNhbmNlbCB0bwotCQkgKiB0aGVpciBjb25uZWN0ZWQgYmFja2VuZHMuICBUaGUgbWFpbiBw b2ludCBvZiBzdG9wcGluZyB0aGUgd29ya2VyCi0JCSAqIHRocmVhZHMgaXMgdG8ga2VlcCB0aGVt IGZyb20gcmVwb3J0aW5nIHRoZSBxdWVyeSBjYW5jZWxzIGFzIGVycm9ycywKLQkJICogd2hpY2gg d291bGQgY2x1dHRlciB0aGUgdXNlcidzIHNjcmVlbi4gIFdlIG5lZWRuJ3Qgc3RvcCB0aGUgbGVh ZGVyCi0JCSAqIHRocmVhZCBzaW5jZSBpdCB3b24ndCBiZSBkb2luZyBtdWNoIGFueXdheS4gIERv IHRoaXMgYmVmb3JlCi0JCSAqIGNhbmNlbGluZyB0aGUgbWFpbiB0cmFuc2FjdGlvbiwgZWxzZSB3 ZSBtaWdodCBnZXQgaW52YWxpZC1zbmFwc2hvdAotCQkgKiBlcnJvcnMgcmVwb3J0ZWQgYmVmb3Jl IHdlIGNhbiBzdG9wIHRoZSB3b3JrZXJzLiAgSWdub3JlIGVycm9ycywKLQkJICogdGhlcmUncyBu b3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhlbSBhbnl3YXkuCi0JCSAqLwotCQlpZiAoc2lnbmFs X2luZm8ucHN0YXRlICE9IE5VTEwpCi0JCXsKLQkJCWZvciAoaSA9IDA7IGkgPCBzaWduYWxfaW5m by5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQkJCXsKLQkJCQlQYXJhbGxlbFNsb3QgKnNsb3Qg PSAmKHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldKTsKLQkJCQlBcmNoaXZlSGFu ZGxlICpBSCA9IHNsb3QtPkFIOwotCQkJCUhBTkRMRQkJaFRocmVhZCA9IChIQU5ETEUpIHNsb3Qt PmhUaHJlYWQ7Ci0KLQkJCQkvKgotCQkJCSAqIFVzaW5nIFRlcm1pbmF0ZVRocmVhZCBoZXJlIG1h eSBsZWF2ZSBzb21lIHJlc291cmNlcyBsZWFrZWQsCi0JCQkJICogYnV0IGl0IGRvZXNuJ3QgbWF0 dGVyIHNpbmNlIHdlJ3JlIGFib3V0IHRvIGVuZCB0aGUgd2hvbGUKLQkJCQkgKiBwcm9jZXNzLgot CQkJCSAqLwotCQkJCWlmIChoVGhyZWFkICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQotCQkJCQlU ZXJtaW5hdGVUaHJlYWQoaFRocmVhZCwgMCk7Ci0KLQkJCQlpZiAoQUggIT0gTlVMTCAmJiBBSC0+ Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkJCQkodm9pZCkgUFFjYW5jZWwoQUgtPmNvbm5DYW5jZWws IGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOwotCQkJfQotCQl9CisJaWYgKHNpZ25hbF9pbmZvLnBz dGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQkJLyoKLQkJICogU2VuZCBRdWVyeUNhbmNlbCB0 byBsZWFkZXIgY29ubmVjdGlvbiwgaWYgZW5hYmxlZC4gIElnbm9yZSBlcnJvcnMsCi0JCSAqIHRo ZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0gYW55d2F5LgotCQkgKi8KLQkJaWYg KHNpZ25hbF9pbmZvLm15QUggIT0gTlVMTCAmJiBzaWduYWxfaW5mby5teUFILT5jb25uQ2FuY2Vs ICE9IE5VTEwpCi0JCQkodm9pZCkgUFFjYW5jZWwoc2lnbmFsX2luZm8ubXlBSC0+Y29ubkNhbmNl bCwKLQkJCQkJCQllcnJidWYsIHNpemVvZihlcnJidWYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2ln bmFsX2luZm8ucHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCisJeworI2lmbmRlZiBXSU4zMgorCQlw aWRfdAkJcGlkID0gc2lnbmFsX2luZm8ucHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ucGlkOwogCi0J CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKKwkJaWYgKHBpZCAhPSAw KQorCQkJa2lsbChwaWQsIFNJR1RFUk0pOworI2Vsc2UKKwkJQXJjaGl2ZUhhbmRsZSAqQUggPSBz aWduYWxfaW5mby5wc3RhdGUtPnBhcmFsbGVsU2xvdFtpXS5BSDsKIAotCQkvKgotCQkgKiBSZXBv cnQgd2UncmUgcXVpdHRpbmcsIHVzaW5nIG5vdGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFuCi0J CSAqIHdyaXRlKDIpLiAgKFdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCB1c2luZyBw Z19sb2dfKigpCi0JCSAqIGhlcmUsIGJ1dCBzaW5jZSB3ZSB0ZXJtaW5hdGVkIG90aGVyIHRocmVh ZHMgdW5jbGVhbmx5IGFib3ZlLCBpdAotCQkgKiBzZWVtcyBiZXR0ZXIgdG8gYXNzdW1lIGFzIGxp dHRsZSBhcyBwb3NzaWJsZS4pCi0JCSAqLwotCQlpZiAocHJvZ25hbWUpCi0JCXsKLQkJCXdyaXRl X3N0ZGVycihwcm9nbmFtZSk7Ci0JCQl3cml0ZV9zdGRlcnIoIjogIik7Ci0JCX0KLQkJd3JpdGVf c3RkZXJyKCJ0ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOworCQlpZiAoQUggIT0gTlVMTCAmJiBBSC0+ Y2FuY2VsQ29ubiAhPSBOVUxMKQorCQkJKHZvaWQpIFBRY2FuY2VsQmxvY2tpbmcoQUgtPmNhbmNl bENvbm4pOworI2VuZGlmCiAJfQotCi0JLyogQWx3YXlzIHJldHVybiBGQUxTRSB0byBhbGxvdyBz aWduYWwgaGFuZGxpbmcgdG8gY29udGludWUgKi8KLQlyZXR1cm4gRkFMU0U7CiB9CiAKIC8qCkBA IC03MDksNTggKzYyMiw1NSBAQCBjb25zb2xlSGFuZGxlcihEV09SRCBkd0N0cmxUeXBlKQogc3Rh dGljIHZvaWQKIHNldF9jYW5jZWxfaGFuZGxlcih2b2lkKQogewotCWlmICghc2lnbmFsX2luZm8u aGFuZGxlcl9zZXQpCi0JewotCQlzaWduYWxfaW5mby5oYW5kbGVyX3NldCA9IHRydWU7CisJaWYg KHNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0KQorCQlyZXR1cm47CiAKLQkJSW5pdGlhbGl6ZUNyaXRp Y2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQg PSB0cnVlOwogCi0JCVNldENvbnNvbGVDdHJsSGFuZGxlcihjb25zb2xlSGFuZGxlciwgVFJVRSk7 Ci0JfQotfQorCXNldHVwX2NhbmNlbF9oYW5kbGVyKE5VTEwsIENhbmNlbEJhY2tlbmRzQW5kRXhp dCk7CiAKLSNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLworI2lmbmRlZiBXSU4zMgorCXBxc2lnbmFs KFNJR1RFUk0sIENhbmNlbFNpZ25hbEhhbmRsZXIpOworCXBxc2lnbmFsKFNJR1FVSVQsIENhbmNl bFNpZ25hbEhhbmRsZXIpOworI2VuZGlmCit9CiAKIAogLyoKICAqIHNldF9hcmNoaXZlX2NhbmNl bF9pbmZvCiAgKgotICogRmlsbCBBSC0+Y29ubkNhbmNlbCB3aXRoIGNhbmNlbGxhdGlvbiBpbmZv IGZvciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlCisgKiBGaWxsIEFILT5jYW5jZWxDb25uIHdpdGgg Y2FuY2VsbGF0aW9uIGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UKICAqIGNvbm5lY3Rp b247IG9yIGNsZWFyIGl0IGlmIGNvbm4gaXMgTlVMTC4KICAqLwogdm9pZAogc2V0X2FyY2hpdmVf Y2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKIHsKLQlQR2NhbmNl bCAgICpvbGRDb25uQ2FuY2VsOworCVBHY2FuY2VsQ29ubiAqb2xkQ2FuY2VsQ29ubjsKIAogCS8q Ci0JICogQWN0aXZhdGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGlmIHdlIGRpZG4ndCB5ZXQgaW4g dGhpcyBwcm9jZXNzLiAgT24KLQkgKiBXaW5kb3dzLCB0aGlzIGFsc28gaW5pdGlhbGl6ZXMgc2ln bmFsX2luZm9fbG9jazsgdGhlcmVmb3JlIGl0J3MKKwkgKiBBY3RpdmF0ZSB0aGUgaW50ZXJydXB0 IGhhbmRsZXIgaWYgd2UgZGlkbid0IHlldCBpbiB0aGlzIHByb2Nlc3MuIEl0J3MKIAkgKiBpbXBv cnRhbnQgdGhhdCB0aGlzIGhhcHBlbiBhdCBsZWFzdCBvbmNlIGJlZm9yZSB3ZSBmb3JrIG9mZiBh bnkKIAkgKiB0aHJlYWRzLgogCSAqLwogCXNldF9jYW5jZWxfaGFuZGxlcigpOwogCiAJLyoKLQkg KiBPbiBVbml4LCB3ZSBhc3N1bWUgdGhhdCBzdG9yaW5nIGEgcG9pbnRlciB2YWx1ZSBpcyBhdG9t aWMgd2l0aCByZXNwZWN0Ci0JICogdG8gYW55IHBvc3NpYmxlIHNpZ25hbCBpbnRlcnJ1cHQuICBP biBXaW5kb3dzLCB1c2UgYSBjcml0aWNhbCBzZWN0aW9uLgorCSAqIFVzZSBtdXRleCB0byBwcmV2 ZW50IHRoZSBjYW5jZWwgaGFuZGxlciBmcm9tIHVzaW5nIHRoZSBwb2ludGVyIHdoaWxlCisJICog d2UncmUgY2hhbmdpbmcgaXQuCiAJICovCi0KLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxT ZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCUxvY2tDYW5jZWxUaHJlYWQoKTsK IAogCS8qIEZyZWUgdGhlIG9sZCBvbmUgaWYgd2UgaGF2ZSBvbmUgKi8KLQlvbGRDb25uQ2FuY2Vs ID0gQUgtPmNvbm5DYW5jZWw7CisJb2xkQ2FuY2VsQ29ubiA9IEFILT5jYW5jZWxDb25uOwogCS8q IGJlIHN1cmUgaW50ZXJydXB0IGhhbmRsZXIgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVl aW5nICovCi0JQUgtPmNvbm5DYW5jZWwgPSBOVUxMOworCUFILT5jYW5jZWxDb25uID0gTlVMTDsK IAotCWlmIChvbGRDb25uQ2FuY2VsICE9IE5VTEwpCi0JCVBRZnJlZUNhbmNlbChvbGRDb25uQ2Fu Y2VsKTsKKwlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQorCQlQUWNhbmNlbEZpbmlzaChvbGRD YW5jZWxDb25uKTsKIAogCS8qIFNldCB0aGUgbmV3IG9uZSBpZiBzcGVjaWZpZWQgKi8KIAlpZiAo Y29ubikKLQkJQUgtPmNvbm5DYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwkJQUgtPmNhbmNl bENvbm4gPSBQUWNhbmNlbENyZWF0ZShjb25uKTsKIAogCS8qCiAJICogT24gVW5peCwgdGhlcmUn cyBvbmx5IGV2ZXIgb25lIGFjdGl2ZSBBcmNoaXZlSGFuZGxlIHBlciBwcm9jZXNzLCBzbyB3ZQpA QCAtNzc2LDQ5ICs2ODYsMzUgQEAgc2V0X2FyY2hpdmVfY2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRs ZSAqQUgsIFBHY29ubiAqY29ubikKIAkJc2lnbmFsX2luZm8ubXlBSCA9IEFIOwogI2VuZGlmCiAK LSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsK LSNlbmRpZgorCVVubG9ja0NhbmNlbFRocmVhZCgpOwogfQogCiAvKgogICogc2V0X2NhbmNlbF9w c3RhdGUKICAqCiAgKiBTZXQgc2lnbmFsX2luZm8ucHN0YXRlIHRvIHBvaW50IHRvIHRoZSBzcGVj aWZpZWQgUGFyYWxsZWxTdGF0ZSwgaWYgYW55LgotICogV2UgbmVlZCB0aGlzIG1haW5seSB0byBo YXZlIGFuIGludGVybG9jayBhZ2FpbnN0IFdpbmRvd3Mgc2lnbmFsIHRocmVhZC4KKyAqIFdlIG5l ZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5zdCB0aGUgY2FuY2VsIGhh bmRsZXIgdGhyZWFkLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9wc3RhdGUoUGFyYWxs ZWxTdGF0ZSAqcHN0YXRlKQogewotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24o JnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCi0KKwlMb2NrQ2FuY2VsVGhyZWFkKCk7CiAJc2ln bmFsX2luZm8ucHN0YXRlID0gcHN0YXRlOwotCi0jaWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2Fs U2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7Ci0jZW5kaWYKKwlVbmxvY2tDYW5jZWxUaHJlYWQo KTsKIH0KIAogLyoKICAqIHNldF9jYW5jZWxfc2xvdF9hcmNoaXZlCiAgKgogICogU2V0IFBhcmFs bGVsU2xvdCdzIEFIIGZpZWxkIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZSwgaWYg YW55LgotICogV2UgbmVlZCB0aGlzIG1haW5seSB0byBoYXZlIGFuIGludGVybG9jayBhZ2FpbnN0 IFdpbmRvd3Mgc2lnbmFsIHRocmVhZC4KKyAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBh biBpbnRlcmxvY2sgYWdhaW5zdCB0aGUgY2FuY2VsIGhhbmRsZXIgdGhyZWFkLgogICovCiBzdGF0 aWMgdm9pZAogc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNo aXZlSGFuZGxlICpBSCkKIHsKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZz aWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgotCisJTG9ja0NhbmNlbFRocmVhZCgpOwogCXNsb3Qt PkFIID0gQUg7Ci0KLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxf aW5mb19sb2NrKTsKLSNlbmRpZgorCVVubG9ja0NhbmNlbFRocmVhZCgpOwogfQogCiAKQEAgLTkz Myw3ICs4MjksNyBAQCBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJ LyoKIAkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIHF1ZXJ5IGNhbmNlbGxhdGlvbiBvbiB0aGUgbGVh ZGVyIGNvbm5lY3Rpb24uICBUaGlzCi0JICogZW5zdXJlcyB0aGF0IGNoaWxkIHByb2Nlc3NlcyB3 b24ndCBpbmhlcml0IHZhbGlkIEFILT5jb25uQ2FuY2VsCisJICogZW5zdXJlcyB0aGF0IGNoaWxk IHByb2Nlc3NlcyB3b24ndCBpbmhlcml0IHZhbGlkIEFILT5jYW5jZWxDb25uCiAJICogc2V0dGlu Z3MgYW5kIHRodXMgd29uJ3QgdHJ5IHRvIGlzc3VlIGNhbmNlbHMgYWdhaW5zdCB0aGUgbGVhZGVy J3MKIAkgKiBjb25uZWN0aW9uLiAgTm8gaGFybSBpcyBkb25lIGlmIHdlIGZhaWwgd2hpbGUgaXQn cyBkaXNhYmxlZCwgYmVjYXVzZQogCSAqIHRoZSBsZWFkZXIgY29ubmVjdGlvbiBpcyBpZGxlIGF0 IHRoaXMgcG9pbnQgYW55d2F5LgpAQCAtOTUxLDYgKzg0Nyw3IEBAIFBhcmFsbGVsQmFja3VwU3Rh cnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXVpbnRwdHJfdAloYW5kbGU7CiAjZWxzZQogCQlwaWRf dAkJcGlkOworCQlzaWdzZXRfdAljYW5jZWxfc2V0OwogI2VuZGlmCiAJCVBhcmFsbGVsU2xvdCAq c2xvdCA9ICYocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0pOwogCQlpbnQJCQlwaXBlTVdbMl0sCkBA IC05NzksNiArODc2LDE4IEBAIFBhcmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCXNsb3QtPmhUaHJlYWQgPSBoYW5kbGU7CiAJCXNsb3QtPndvcmtlclN0YXR1cyA9IFdSS1Jf SURMRTsKICNlbHNlCQkJCQkJCS8qICFXSU4zMiAqLworCisJCS8qCisJCSAqIEJsb2NrIHNpZ25h bHMgYmVmb3JlIGZvcmsgc28gdGhhdCBubyBzaWduYWwgY2FuIGFycml2ZSBpbiB0aGUgY2hpbGQK KwkJICogYmVmb3JlIFJlc2V0Q2FuY2VsQWZ0ZXJGb3JrKCkgaGFzIGNsZWFuZWQgdXAgdGhlIGlu aGVyaXRlZCBjYW5jZWwKKwkJICogc3RhdGUgKHBpcGUgZmRzLCBzaWduYWwgaGFuZGxlcnMsIG11 dGV4KS4KKwkJICovCisJCXNpZ2VtcHR5c2V0KCZjYW5jZWxfc2V0KTsKKwkJc2lnYWRkc2V0KCZj YW5jZWxfc2V0LCBTSUdJTlQpOworCQlzaWdhZGRzZXQoJmNhbmNlbF9zZXQsIFNJR1RFUk0pOwor CQlzaWdhZGRzZXQoJmNhbmNlbF9zZXQsIFNJR1FVSVQpOworCQlzaWdwcm9jbWFzayhTSUdfQkxP Q0ssICZjYW5jZWxfc2V0LCBOVUxMKTsKKwogCQlwaWQgPSBmb3JrKCk7CiAJCWlmIChwaWQgPT0g MCkKIAkJewpAQCAtOTkxLDYgKzkwMCwxMiBAQCBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFyY2hpdmVI YW5kbGUgKkFIKQogCQkJLyogaW5zdHJ1Y3Qgc2lnbmFsIGhhbmRsZXIgdGhhdCB3ZSdyZSBpbiBh IHdvcmtlciBub3cgKi8KIAkJCXNpZ25hbF9pbmZvLmFtX3dvcmtlciA9IHRydWU7CiAKKwkJCXNp Z25hbF9pbmZvLmhhbmRsZXJfc2V0ID0gZmFsc2U7CisJCQlSZXNldENhbmNlbEFmdGVyRm9yaygp OworCQkJcHFzaWduYWwoU0lHVEVSTSwgUEdfU0lHX0RGTCk7CisJCQlwcXNpZ25hbChTSUdRVUlU LCBQR19TSUdfREZMKTsKKwkJCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmY2FuY2VsX3NldCwg TlVMTCk7CisKIAkJCS8qIGNsb3NlIHJlYWQgZW5kIG9mIFdvcmtlciAtPiBMZWFkZXIgKi8KIAkJ CWNsb3Nlc29ja2V0KHBpcGVXTVtQSVBFX1JFQURdKTsKIAkJCS8qIGNsb3NlIHdyaXRlIGVuZCBv ZiBMZWFkZXIgLT4gV29ya2VyICovCkBAIC0xMDE5LDYgKzkzNCw4IEBAIFBhcmFsbGVsQmFja3Vw U3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCX0KIAogCQkvKiBJbiBMZWFkZXIgYWZ0ZXIgc3Vj Y2Vzc2Z1bCBmb3JrICovCisJCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmY2FuY2VsX3NldCwg TlVMTCk7CisKIAkJc2xvdC0+cGlkID0gcGlkOwogCQlzbG90LT53b3JrZXJTdGF0dXMgPSBXUktS X0lETEU7CiAKQEAgLTE0MDcsOCArMTMyNCwxMiBAQCBMaXN0ZW5Ub1dvcmtlcnMoQXJjaGl2ZUhh bmRsZSAqQUgsIFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwgYm9vbCBkb193YWl0KQogCiAJaWYgKCFt c2cpCiAJewotCQkvKiBJZiBkb193YWl0IGlzIHRydWUsIHdlIG11c3QgaGF2ZSBkZXRlY3RlZCBF T0Ygb24gc29tZSBzb2NrZXQgKi8KLQkJaWYgKGRvX3dhaXQpCisJCS8qCisJCSAqIElmIGRvX3dh aXQgaXMgdHJ1ZSwgd2UgbXVzdCBoYXZlIGRldGVjdGVkIEVPRiBvbiBzb21lIHNvY2tldC4gSWYK KwkJICogaXQncyBkdWUgdG8gYSBjYW5jZWwgcmVxdWVzdCwgdGhhdCdzIGV4cGVjdGVkLCBvdGhl cndpc2UgaXQncyBhCisJCSAqIHByb2JsZW0uCisJCSAqLworCQlpZiAoZG9fd2FpdCAmJiAhQ2Fu Y2VsUmVxdWVzdGVkKQogCQkJcGdfZmF0YWwoImEgd29ya2VyIHByb2Nlc3MgZGllZCB1bmV4cGVj dGVkbHkiKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYwppbmRleCA0NmY0YzUxODM0Ny4uMThlYzkzMjAxNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMKQEAgLTUxOTYsNyArNTE5Niw3IEBAIENsb25lQXJjaGl2ZShBcmNoaXZl SGFuZGxlICpBSCkKIAogCS8qIFRoZSBjbG9uZSB3aWxsIGhhdmUgaXRzIG93biBjb25uZWN0aW9u LCBzbyBkaXNyZWdhcmQgY29ubmVjdGlvbiBzdGF0ZSAqLwogCWNsb25lLT5jb25uZWN0aW9uID0g TlVMTDsKLQljbG9uZS0+Y29ubkNhbmNlbCA9IE5VTEw7CisJY2xvbmUtPmNhbmNlbENvbm4gPSBO VUxMOwogCWNsb25lLT5jdXJyVXNlciA9IE5VTEw7CiAJY2xvbmUtPmN1cnJTY2hlbWEgPSBOVUxM OwogCWNsb25lLT5jdXJyVGFibGVBbSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmgKaW5kZXggYzE1MjhkNzg4NTMuLjI4ZmViYWMwYzQzIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCkBAIC0yODgsOCArMjg4LDEyIEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRs ZQogCWNoYXIJICAgKnNhdmVkUGFzc3dvcmQ7CS8qIHBhc3N3b3JkIGZvciByb3B0LT51c2VybmFt ZSwgaWYga25vd24gKi8KIAljaGFyCSAgICp1c2Vfcm9sZTsKIAlQR2Nvbm4JICAgKmNvbm5lY3Rp b247Ci0JLyogSWYgY29ubkNhbmNlbCBpc24ndCBOVUxMLCBTSUdJTlQgaGFuZGxlciB3aWxsIHNl bmQgYSBjYW5jZWwgKi8KLQlQR2NhbmNlbCAgICp2b2xhdGlsZSBjb25uQ2FuY2VsOworCisJLyoK KwkgKiBJZiBjYW5jZWxDb25uIGlzbid0IE5VTEwsIFNJR0lOVCBoYW5kbGVyIHdpbGwgdHJpZ2dl ciB0aGUgY2FuY2VsIHRocmVhZAorCSAqIHRvIHNlbmQgYSBjYW5jZWwuCisJICovCisJUEdjYW5j ZWxDb25uICpjYW5jZWxDb25uOwogCiAJaW50CQkJY29ubmVjdFRvREI7CS8qIEZsYWcgdG8gaW5k aWNhdGUgaWYgZGlyZWN0IERCIGNvbm5lY3Rpb24gaXMKIAkJCQkJCQkJICogcmVxdWlyZWQgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfZGIuYwppbmRleCA1YzM0OTI3OWJlYi4uMGNjMjlhOGFhNzAgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2RiLmMKQEAgLTg0LDcgKzg0LDcgQEAgUmVjb25uZWN0VG9TZXJ2ZXIoQXJj aGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFtZSkKIAogCS8qCiAJICogTm90ZTogd2Ug d2FudCB0byBlc3RhYmxpc2ggdGhlIG5ldyBjb25uZWN0aW9uLCBhbmQgaW4gcGFydGljdWxhciB1 cGRhdGUKLQkgKiBBcmNoaXZlSGFuZGxlJ3MgY29ubkNhbmNlbCwgYmVmb3JlIGNsb3Npbmcgb2xk IGNvbm5lY3Rpb24uICBPdGhlcndpc2UKKwkgKiBBcmNoaXZlSGFuZGxlJ3MgY2FuY2VsQ29ubiwg YmVmb3JlIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uICBPdGhlcndpc2UKIAkgKiBhbiBpbGwtdGlt ZWQgU0lHSU5UIGNvdWxkIHRyeSB0byBhY2Nlc3MgYSBkZWFkIGNvbm5lY3Rpb24uCiAJICovCiAJ QUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJLyogZG9kZ2UgZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERh dGFiYXNlQWh4ICovCkBAIC0xNjQsMTIgKzE2NCwxMSBAQCB2b2lkCiBEaXNjb25uZWN0RGF0YWJh c2UoQXJjaGl2ZSAqQUhYKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUg KikgQUhYOwotCWNoYXIJCWVycmJ1ZlsxXTsKIAogCWlmICghQUgtPmNvbm5lY3Rpb24pCiAJCXJl dHVybjsKIAotCWlmIChBSC0+Y29ubkNhbmNlbCkKKwlpZiAoQUgtPmNhbmNlbENvbm4pCiAJewog CQkvKgogCQkgKiBJZiB3ZSBoYXZlIGFuIGFjdGl2ZSBxdWVyeSwgc2VuZCBhIGNhbmNlbCBiZWZv cmUgY2xvc2luZywgaWdub3JpbmcKQEAgLTE3Nyw3ICsxNzYsNyBAQCBEaXNjb25uZWN0RGF0YWJh c2UoQXJjaGl2ZSAqQUhYKQogCQkgKiBoZWxwZnVsIGR1cmluZyBwZ19mYXRhbCgpLgogCQkgKi8K IAkJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMoQUgtPmNvbm5lY3Rpb24pID09IFBRVFJBTlNfQUNU SVZFKQotCQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25uQ2FuY2VsLCBlcnJidWYsIHNpemVvZihl cnJidWYpKTsKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKEFILT5jYW5jZWxDb25uKTsKIAog CQkvKgogCQkgKiBQcmV2ZW50IHNpZ25hbCBoYW5kbGVyIGZyb20gc2VuZGluZyBhIGNhbmNlbCBh ZnRlciB0aGlzLgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMGIyYmI5MzQwYjUuLjg1MTE2ZTY3NGY0IDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9w Z2JlbmNoLmMKQEAgLTUzMzYsNyArNTMzNiw3IEBAIHJ1bkluaXRTdGVwcyhjb25zdCBjaGFyICpp bml0aWFsaXplX3N0ZXBzKQogCWlmICgoY29uID0gZG9Db25uZWN0KCkpID09IE5VTEwpCiAJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGNvbm5lY3Rpb24gZm9yIGluaXRpYWxpemF0aW9uIik7 CiAKLQlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMKTsKKwlzZXR1cF9jYW5jZWxfaGFuZGxlcihO VUxMLCBOVUxMKTsKIAlTZXRDYW5jZWxDb25uKGNvbik7CiAKIAlmb3IgKHN0ZXAgPSBpbml0aWFs aXplX3N0ZXBzOyAqc3RlcCAhPSAnXDAnOyBzdGVwKyspCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMKaW5kZXggNjYwZjE0NTU5ZjUuLmZj M2UwMjBkNmU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMKKysrIGIvc3JjL2Jp bi9wc3FsL2NvbW1vbi5jCkBAIC0zMDUsMjMgKzMwNSwyNyBAQCB2b2xhdGlsZSBzaWdfYXRvbWlj X3Qgc2lnaW50X2ludGVycnVwdF9lbmFibGVkID0gZmFsc2U7CiAKIHNpZ2ptcF9idWYJc2lnaW50 X2ludGVycnVwdF9qbXA7CiAKKyNpZm5kZWYgV0lOMzIKIHN0YXRpYyB2b2lkCiBwc3FsX2NhbmNl bF9jYWxsYmFjayh2b2lkKQogewotI2lmbmRlZiBXSU4zMgogCS8qIGlmIHdlIGFyZSB3YWl0aW5n IGZvciBpbnB1dCwgbG9uZ2ptcCBvdXQgb2YgaXQgKi8KIAlpZiAoc2lnaW50X2ludGVycnVwdF9l bmFibGVkKQogCXsKIAkJc2lnaW50X2ludGVycnVwdF9lbmFibGVkID0gZmFsc2U7CiAJCXNpZ2xv bmdqbXAoc2lnaW50X2ludGVycnVwdF9qbXAsIDEpOwogCX0KLSNlbmRpZgogfQorI2VuZGlmCiAK IHZvaWQKIHBzcWxfc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCkKIHsKLQlzZXR1cF9jYW5jZWxf aGFuZGxlcihwc3FsX2NhbmNlbF9jYWxsYmFjayk7CisjaWZuZGVmIFdJTjMyCisJc2V0dXBfY2Fu Y2VsX2hhbmRsZXIocHNxbF9jYW5jZWxfY2FsbGJhY2ssIE5VTEwpOworI2Vsc2UKKwlzZXR1cF9j YW5jZWxfaGFuZGxlcihOVUxMLCBOVUxMKTsKKyNlbmRpZgogfQogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vc2NyaXB0cy9jbHVzdGVyZGIuYyBiL3NyYy9iaW4vc2NyaXB0cy9jbHVzdGVyZGIuYwpp bmRleCA1M2JiYjQyYzg4My4uZjI4MmE4OGM3NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vc2NyaXB0 cy9jbHVzdGVyZGIuYworKysgYi9zcmMvYmluL3NjcmlwdHMvY2x1c3RlcmRiLmMKQEAgLTE0MCw3 ICsxNDAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY3BhcmFtcy5wcm9tcHRf cGFzc3dvcmQgPSBwcm9tcHRfcGFzc3dvcmQ7CiAJY3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBO VUxMOwogCi0Jc2V0dXBfY2FuY2VsX2hhbmRsZXIoTlVMTCk7CisJc2V0dXBfY2FuY2VsX2hhbmRs ZXIoTlVMTCwgTlVMTCk7CiAKIAlpZiAoYWxsZGIpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9z Y3JpcHRzL3JlaW5kZXhkYi5jIGIvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jCmluZGV4IGQ3 ZmIxNmQzYzg1Li43NTYxM2I5OTVlZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3JlaW5k ZXhkYi5jCisrKyBiL3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYwpAQCAtMjExLDcgKzIxMSw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljcGFyYW1zLnByb21wdF9wYXNzd29y ZCA9IHByb21wdF9wYXNzd29yZDsKIAljcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CiAK LQlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMKTsKKwlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxM LCBOVUxMKTsKIAogCWlmIChjb25jdXJyZW50Q29ucyA+IDEgJiYgc3lzY2F0YWxvZykKIAkJcGdf ZmF0YWwoImNhbm5vdCB1c2UgbXVsdGlwbGUgam9icyB0byByZWluZGV4IHN5c3RlbSBjYXRhbG9n cyIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5jIGIvc3JjL2Jpbi9z Y3JpcHRzL3ZhY3V1bWluZy5jCmluZGV4IDY3YTc2NjVjNWQ3Li4xYjA4NDIzZjQyMiAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5jCisrKyBiL3NyYy9iaW4vc2NyaXB0cy92 YWN1dW1pbmcuYwpAQCAtNTgsNyArNTgsNyBAQCB2YWN1dW1pbmdfbWFpbihDb25uUGFyYW1zICpj cGFyYW1zLCBjb25zdCBjaGFyICpkYm5hbWUsCiAJCQkgICB1bnNpZ25lZCBpbnQgdGJsX2NvdW50 LCBpbnQgY29uY3VycmVudENvbnMsCiAJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSkKIHsKLQlz ZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMKTsKKwlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMLCBO VUxMKTsKIAogCS8qIEF2b2lkIG9wZW5pbmcgZXh0cmEgY29ubmVjdGlvbnMuICovCiAJaWYgKHRi bF9jb3VudCA+IDAgJiYgKGNvbmN1cnJlbnRDb25zID4gdGJsX2NvdW50KSkKZGlmZiAtLWdpdCBh L3NyYy9mZV91dGlscy9NYWtlZmlsZSBiL3NyYy9mZV91dGlscy9NYWtlZmlsZQppbmRleCBjYmZi ZjkzYWM2OS4uODA5YWIyMWNjMGMgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9NYWtlZmlsZQor KysgYi9zcmMvZmVfdXRpbHMvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAgc3ViZGlyID0gc3Jj L2ZlX3V0aWxzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAogCi1vdmVycmlkZSBDUFBGTEFHUyA6PSAtREZST05URU5EIC1J JChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6PSAtREZST05U RU5EIC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMvcG9ydCAkKENQUEZMQUdT KQogCiBPQkpTID0gXAogCWFyY2hpdmUubyBcCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvY2Fu Y2VsLmMgYi9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKaW5kZXggZTZiNzU0MzlmNTYuLmY0MGM0MjQy MTQ1IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKKysrIGIvc3JjL2ZlX3V0aWxz L2NhbmNlbC5jCkBAIC0yLDkgKzIsNTcgQEAKICAqCiAgKiBRdWVyeSBjYW5jZWxsYXRpb24gc3Vw cG9ydCBmb3IgZnJvbnRlbmQgY29kZQogICoKLSAqIEFzc29ydGVkIHV0aWxpdHkgZnVuY3Rpb25z IHRvIGNvbnRyb2wgcXVlcnkgY2FuY2VsbGF0aW9uIHdpdGggc2lnbmFsCi0gKiBoYW5kbGVyIGZv ciBTSUdJTlQuCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBTSUdJTlQvQ3RybC1DIGhhbmRsaW5n IGZvciBmcm9udGVuZCB0b29scyB0aGF0IG5lZWQKKyAqIHRvIGNhbmNlbCBxdWVyaWVzIG9yIGlu dGVycnVwdCBvdGhlciBvcGVyYXRpb25zLiBJdCBjb21iaW5lcyBmb3VyIGNvbXBsZXRlbHkKKyAq IGluZGVwZW5kZW50IG1lY2hhbmlzbXMsIGFueSBjb21iaW5hdGlvbiBvZiB3aGljaCBjYW4gYmUg dXNlZCBieSBhIGNhbGxlcjoKICAqCisgKiAxLiBTZXJ2ZXIgY2FuY2VsIHF1ZXJ5IHJlcXVlc3Qg LS0gT2Z0ZW4gd2hhdCBhcHBsaWNhdGlvbnMgbmVlZC4gV2hlbiBhIHF1ZXJ5CisgKiAgICBpcyBy dW5uaW5nLCBhbmQgdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSByZXN1bHQgb2Yg dGhhdCBxdWVyeQorICogICAgaW4gYSBibG9ja2luZyBtYW5uZXIsIHdlIHdhbnQgU0lHSU5UL0N0 cmwtQyB0byBjYW5jZWwgdGhhdCBxdWVyeS4gVGhpcworICogICAgY2FuIGJlIGRvbmUgYnkgaGF2 aW5nIHRoZSBhcHBsaWNhdGlvbiBjYWxsIFNldENhbmNlbENvbm4oKSB0byByZWdpc3RlcgorICog ICAgdGhlIGNvbm5lY3Rpb24gdGhhdCBpcyAob3Igd2lsbCBiZSkgcnVubmluZyB0aGUgcXVlcnks IHByaW9yIHRvIHdhaXRpbmcKKyAqICAgIGZvciB0aGUgcmVzdWx0LiBXaGVuIFNJR0lOVC9DdHJs LUMgaXMgcmVjZWl2ZWQgYSBjYW5jZWwgcmVxdWVzdCBmb3IgdGhpcworICogICAgY29ubmVjdGlv biB3aWxsIHRoZW4gYmUgc2VudCB0byB0aGUgc2VydmVyIGZyb20gYSBzZXBhcmF0ZSB0aHJlYWQu IFRoYXQKKyAqICAgIGluIHR1cm4gd2lsbCB0aGVuIChhc3N1bWluZyBhIGNvLW9wZXJhdGluZyBz ZXJ2ZXIpIGNhdXNlIHRoZSBzZXJ2ZXIgdG8KKyAqICAgIGNhbmNlbCB0aGUgcXVlcnkgYW5kIHNl bmQgYW4gZXJyb3IgdG8gdGhlIHdhaXRpbmcgY2xpZW50IG9uIHRoZSBtYWluCisgKiAgICB0aHJl YWQuIFRoZSBjYW5jZWwgY29ubmVjdGlvbiBpcyBhIHByb2Nlc3Mtd2lkZSBnbG9iYWwsIHNvIG9u bHkgb25lCisgKiAgICBjb25uZWN0aW9uIGNhbiBiZSB0aGUgY2FuY2VsIHRhcmdldCBhdCBhIHRp bWUuIFJlc2V0Q2FuY2VsQ29ubigpIGNhbiBiZQorICogICAgdXNlZCB0byB1bnJlZ2lzdGVyIHRo ZSBjb25uZWN0aW9uIGFnYWluLCBwcmV2ZW50aW5nIHNlbmRpbmcgYSBjYW5jZWwKKyAqICAgIHJl cXVlc3QgaWYgU0lHSU5UL0N0cmwtQyBpcyByZWNlaXZlZCBhZnRlciBibG9ja2luZyB3YWl0IGhh cyBhbHJlYWR5CisgKiAgICBjb21wbGV0ZWQuCisgKgorICogMi4gQ2FuY2VsUmVxdWVzdGVkIGZs YWcgLS0gQSBtb3JlIGludm9sdmVkIGJ1dCBhbHNvIG11Y2ggbW9yZSBmbGV4aWJsZSB3YXkKKyAq ICAgIG9mIGNhbmNlbGxpbmcgYW4gb3BlcmF0aW9uLiBBIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBD YW5jZWxSZXF1ZXN0ZWQgZmxhZworICogICAgaXMgc2V0IHRvIHRydWUgd2hlbmV2ZXIgU0lHSU5U IGlzIHJlY2VpdmVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgKiAgICBhcHBsaWNhdGlvbiBjb2Rl IGNhbiBmdWxseSBjb250cm9sIHdoYXQgaXQgZG9lcyB3aXRoIHRoaXMgZmxhZy4gVGhlCisgKiAg ICBwcmltYXJ5IHVzZWNhc2UgZm9yIHRoaXMgaXMgd2hlbiB0aGUgYXBwbGljYXRpb24gY29kZSBp cyBub3QgYmxvY2tlZAorICogICAgKGluZGVmaW5pdGVseSksIGJ1dCBuZWVkcyB0byB0YWtlIGFu IGFjdGlvbiB3aGVuIEN0cmwtQyBpcyBwcmVzc2VkLCBzdWNoCisgKiAgICBhcyBicmVhayBvdXQg b2YgYSBsb25nIHJ1bm5pbmcgbG9vcC4KKyAqCisgKiAzLiBUaHJlYWQgaGFuZGxlciBjYWxsYmFj ayAtLSBBbiBvcHRpb25hbCBmdW5jdGlvbiBwb2ludGVyIHJlZ2lzdGVyZWQgdmlhCisgKiAgICBz ZXR1cF9jYW5jZWxfaGFuZGxlcigpLiBJZiBzZXQsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZy b20gYSBzZXBhcmF0ZQorICogICAgdGhyZWFkIHdoZW4gYSBjYW5jZWwgc2lnbmFsIGlzIHJlY2Vp dmVkLiBJZiBtdWx0aXBsZSBzaWduYWxzIGFyZSByZWNlaXZlZAorICogICAgaW4gcXVpY2sgc3Vj Y2Vzc2lvbiwgdGhlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgb25seSBvbmNlLiBPbiBXaW5kb3dz LAorICogICAgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgY29uc29sZSBoYW5kbGVyIHRocmVhZC4g T24gVW5peCwgdGhpcyBpcyBjYWxsZWQKKyAqICAgIGZyb20gdGhlIGNhbmNlbCB0aHJlYWQgdGhh dCBpcyB3b2tlbiBieSB0aGUgc2lnbmFsIGhhbmRsZXIuIFRvIGVuc3VyZQorICogICAgc2FmZSBh Y2Nlc3MgdG8gc2hhcmVkIGRhdGEsIHRoZSBjYW5jZWwgdGhyZWFkIGhvbGRzIHRoZSBjYW5jZWwg dGhyZWFkCisgKiAgICBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGxiYWNrLCBzbyBh bnkgb3RoZXIgdGhyZWFkcyB0aGF0IG5lZWQKKyAqICAgIHRvIGFjY2VzcyB0aGUgc2FtZSBkYXRh IHNob3VsZCBhbHNvIGFjcXVpcmUgdGhhdCBsb2NrIHVzaW5nCisgKiAgICBMb2NrQ2FuY2VsVGhy ZWFkKCkvVW5sb2NrQ2FuY2VsVGhyZWFkKCkuCisgKgorICogNC4gU2lnbmFsIGhhbmRsZXIgY2Fs bGJhY2sgLS0gVGhlIG1vc3QgY29tcGxleCB3YXkgb2YgY2FuY2VsaW5nIGFuCisgKiAgICBvcGVy YXRpb24sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4gQW4gb3B0aW9uYWwgc2ln bmFsX2NhbGxiYWNrCisgKiAgICBmdW5jdGlvbiBwb2ludGVyIGNhbiBiZSByZWdpc3RlcmVkIHZp YSBzZXR1cF9jYW5jZWxfaGFuZGxlcigpLiAgSWYgc2V0LAorICogICAgaXQgaXMgY2FsbGVkIGRp cmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyLCBzbyBpdCBtdXN0IGJlCisgKiAgICBhc3lu Yy1zaWduYWwtc2FmZS4gV3JpdGluZyBhc3luYy1zaWduYWwtc2FmZSBjb2RlIGlzIG5vdCBlYXN5 LCBzbyB0aGlzIGlzCisgKiAgICBvbmx5IHJlY29tbWVuZGVkIGFzIGEgbGFzdCByZXNvcnQuIHBz cWwgdXNlcyB0aGlzIHRvIGxvbmdqbXAgYmFjayB0byB0aGUKKyAqICAgIG1haW4gbG9vcCB3aGVu IG5vIHF1ZXJ5IGlzIGFjdGl2ZS4gT24gV2luZG93cywgdGhpcyBmdW5jdGlvbiBpcyBuZXZlcgor ICogICAgY2FsbGVkLCBzaW5jZSB0aGUgY29uc29sZSBoYW5kbGVyIHJ1bnMgaW4gYSBzZXBhcmF0 ZSB0aHJlYWQsIG5vdCBhIHNpZ25hbAorICogICAgaGFuZGxlci4KKyAqICAgIE5PVEU6IFRoZSBz aWduYWwgaGFuZGxlciBjYWxsYmFjayBpcyBjYWxsZWQgQUZURVIgc2V0dGluZyBDYW5jZWxSZXF1 ZXN0ZWQKKyAqICAgIGJ1dCBCRUZPUkUgbm90aWZ5aW5nIHRoZSBjYW5jZWwgdGhyZWFkIHRvIHNl bmQgYSBjYW5jZWwgcmVxdWVzdCB0byB0aGUKKyAqICAgIHNlcnZlciAoaWYgYXJtZWQgYnkgU2V0 Q2FuY2VsQ29ubikuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgY2FsbGJhY2sgZXhpdHMKKyAqICAg IG9yIGxvbmdqbXBzIG5vIGNhbmNlbCByZXF1ZXN0IHdpbGwgYmUgc2VudCB0byB0aGUgc2VydmVy LgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTE2LDkgKzY0LDIxIEBA CiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5j bHVkZSA8dW5pc3RkLmg+CiAKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxmY250bC5oPgorI2Vu ZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgInB0aHJlYWQtd2luMzIuaCIKKyNlbHNlCisj aW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5o IgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvY2FuY2Vs LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAKQEAgLTM2LDExICs5Niwx OSBAQAogCQkodm9pZCkgcmNfOyBcCiAJfSB3aGlsZSAoMCkKIAorCiAvKgotICogQ29udGFpbnMg YWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY2FuY2VsIGEgcXVlcnkgaXNzdWVkIGZyb20K LSAqIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB0aGUgYmFja2VuZC4KKyAqIENhbmNlbCBjb25u ZWN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc2VuZCBjYW5jZWwgcmVxdWVzdHMuCiAgKi8K LXN0YXRpYyBQR2NhbmNlbCAqdm9sYXRpbGUgY2FuY2VsQ29ubiA9IE5VTEw7CitzdGF0aWMgUEdj YW5jZWxDb25uICpjYW5jZWxDb25uID0gTlVMTDsKKworLyoKKyAqIE11dGV4IGhlbGQgYnkgdGhl IGNhbmNlbCB0aHJlYWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FuY2VsIGNhbGxiYWNrLgor ICogU2V0Q2FuY2VsQ29ubigpL1Jlc2V0Q2FuY2VsQ29ubigpIG9uIHRoZSBtYWluIHRocmVhZCB0 YWtlIHRoaXMgbG9jayB0b28sCisgKiBzbyB0aGV5IHdpbGwgd2FpdCBmb3IgYW55IGluLWZsaWdo dCBjYW5jZWwgdG8gZmluaXNoIGJlZm9yZSByZXBsYWNpbmcgb3IKKyAqIGZyZWVpbmcgY2FuY2Vs Q29ubi4KKyAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjYW5jZWxfdGhyZWFkX2xvY2sgPSBQ VEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCiAvKgogICogUHJlZGV0ZXJtaW5lZCBsb2NhbGl6 ZWQgZXJyb3Igc3RyaW5ncyAtLS0gbmVlZGVkIHRvIGF2b2lkIHRyeWluZwpAQCAtNTgsMTY4ICsx MjYsMTgwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjYW5jZWxfbm90X3NlbnRfbXNnID0gTlVMTDsK ICAqLwogdm9sYXRpbGUgc2lnX2F0b21pY190IENhbmNlbFJlcXVlc3RlZCA9IGZhbHNlOwogCi0j aWZkZWYgV0lOMzIKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIGNhbmNlbENvbm5Mb2NrOwotI2Vu ZGlmCisvKgorICogU2lnbmFsIGhhbmRsZXIgY2FsbGJhY2ssIGNhbGxlZCBkaXJlY3RseSBmcm9t IHNpZ25hbCBoYW5kbGVyIGNvbnRleHQuCisgKiBNdXN0IGJlIGFzeW5jLXNpZ25hbC1zYWZlLgor ICovCitzdGF0aWMgdm9pZCAoKnNpZ25hbF9jYWxsYmFja19mbikgKHZvaWQpID0gTlVMTDsKKwor LyoKKyAqIENhbmNlbCB0aHJlYWQgY2FsbGJhY2ssIGNhbGxlZCBmcm9tIHRoZSBjYW5jZWwgdGhy ZWFkIChVbml4KSBvciBjb25zb2xlCisgKiBoYW5kbGVyIChXaW5kb3dzKSB3aGVuIGEgY2FuY2Vs IHNpZ25hbCBpcyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQgKCp0aHJlYWRfY2FsbGJhY2tf Zm4pICh2b2lkKSA9IE5VTEw7CiAKKyNpZm5kZWYgV0lOMzIKIC8qCi0gKiBBZGRpdGlvbmFsIGNh bGxiYWNrIGZvciBjYW5jZWxsYXRpb25zLgorICogT24gVW5peCwgdGhlIFNJR0lOVCBzaWduYWwg aGFuZGxlciBjYW5ub3QgY2FsbCBQUWNhbmNlbEJsb2NraW5nKCkgZGlyZWN0bHkKKyAqIGJlY2F1 c2UgaXQgaXMgbm90IGFzeW5jLXNpZ25hbC1zYWZlLiAgSW5zdGVhZCwgd2UgdXNlIGEgcGlwZSB0 byB3YWtlIGEKKyAqIGRlZGljYXRlZCBjYW5jZWwgdGhyZWFkOiB0aGUgc2lnbmFsIGhhbmRsZXIg d3JpdGVzIGEgYnl0ZSB0byB0aGUgcGlwZSwgYW5kCisgKiB0aGUgY2FuY2VsIHRocmVhZCdzIGJs b2NraW5nIHJlYWQoKSByZXR1cm5zLCB0cmlnZ2VyaW5nIHRoZSBhY3R1YWwgY2FuY2VsCisgKiBy ZXF1ZXN0LgogICovCi1zdGF0aWMgdm9pZCAoKmNhbmNlbF9jYWxsYmFjaykgKHZvaWQpID0gTlVM TDsKK3N0YXRpYyBpbnQJY2FuY2VsX3BpcGVbMl0gPSB7LTEsIC0xfTsKKyNlbmRpZgogCiAKIC8q Ci0gKiBTZXRDYW5jZWxDb25uCisgKiBTZW5kIGEgY2FuY2VsIHJlcXVlc3QgdG8gdGhlIGNvbm5l Y3Rpb24sIGlmIG9uZSBpcyBzZXQuCiAgKgotICogU2V0IGNhbmNlbENvbm4gdG8gcG9pbnQgdG8g dGhlIGN1cnJlbnQgZGF0YWJhc2UgY29ubmVjdGlvbi4KKyAqIENhbGxlZCBmcm9tIHRoZSBjYW5j ZWwgdGhyZWFkIChVbml4KSBvciB0aGUgY29uc29sZSBoYW5kbGVyIHRocmVhZAorICogKFdpbmRv d3MpLCBuZXZlciBmcm9tIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYuICBUaGUgY2FsbGVyIGlz CisgKiByZXNwb25zaWJsZSBmb3IgaG9sZGluZyBjYW5jZWxfdGhyZWFkX2xvY2suCiAgKi8KLXZv aWQKLVNldENhbmNlbENvbm4oUEdjb25uICpjb25uKQorc3RhdGljIHZvaWQKK1NlbmRDYW5jZWxS ZXF1ZXN0KHZvaWQpCiB7Ci0JUEdjYW5jZWwgICAqb2xkQ2FuY2VsQ29ubjsKLQotI2lmZGVmIFdJ TjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgotCi0J LyogRnJlZSB0aGUgb2xkIG9uZSBpZiB3ZSBoYXZlIG9uZSAqLwotCW9sZENhbmNlbENvbm4gPSBj YW5jZWxDb25uOworCVBHY2FuY2VsQ29ubiAqY2M7CiAKLQkvKiBiZSBzdXJlIGhhbmRsZV9zaWdp bnQgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICovCi0JY2FuY2VsQ29ubiA9IE5V TEw7CisJY2MgPSBjYW5jZWxDb25uOworCWlmIChjYyA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQlp ZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xkQ2FuY2VsQ29ubik7 CisJd3JpdGVfc3RkZXJyKGNhbmNlbF9zZW50X21zZyk7CiAKLQljYW5jZWxDb25uID0gUFFnZXRD YW5jZWwoY29ubik7CisJaWYgKCFQUWNhbmNlbEJsb2NraW5nKGNjKSkKKwl7CisJCWNoYXIJICAg KmVycm1zZyA9IFBRY2FuY2VsRXJyb3JNZXNzYWdlKGNjKTsKIAotI2lmZGVmIFdJTjMyCi0JTGVh dmVDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgorCQl3cml0ZV9zdGRl cnIoY2FuY2VsX25vdF9zZW50X21zZyk7CisJCWlmIChlcnJtc2cpCisJCQl3cml0ZV9zdGRlcnIo ZXJybXNnKTsKKwl9CisJLyogUmVzZXQgZm9yIHBvc3NpYmxlIHJldXNlICovCisJUFFjYW5jZWxS ZXNldChjYyk7CiB9CiAKKwogLyoKLSAqIFJlc2V0Q2FuY2VsQ29ubgorICogSGVscGVyIHRvIHJl cGxhY2UgY2FuY2VsQ29ubiB3aXRoIGEgbmV3IHZhbHVlLgogICoKLSAqIEZyZWUgdGhlIGN1cnJl bnQgY2FuY2VsIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldCB0byBOVUxMLgorICogVGFrZXMg Y2FuY2VsX3RocmVhZF9sb2NrLCB3aGljaCBhbHNvIHdhaXRzIGZvciBhbnkgaW4tZmxpZ2h0IGNh bmNlbAorICogY2FsbGJhY2sgdG8gZmluaXNoLCBzaW5jZSB0aGUgY2FuY2VsIHRocmVhZCBob2xk cyB0aGUgc2FtZSBsb2NrLgogICovCi12b2lkCi1SZXNldENhbmNlbENvbm4odm9pZCkKK3N0YXRp YyB2b2lkCitTZXRDYW5jZWxDb25uSW50ZXJuYWwoUEdjYW5jZWxDb25uICpuZXdDYW5jZWxDb25u KQogewotCVBHY2FuY2VsICAgKm9sZENhbmNlbENvbm47Ci0KLSNpZmRlZiBXSU4zMgotCUVudGVy Q3JpdGljYWxTZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKKwlQR2NhbmNlbENvbm4g Km9sZENhbmNlbENvbm47CiAKKwlMb2NrQ2FuY2VsVGhyZWFkKCk7CiAJb2xkQ2FuY2VsQ29ubiA9 IGNhbmNlbENvbm47Ci0KLQkvKiBiZSBzdXJlIGhhbmRsZV9zaWdpbnQgZG9lc24ndCB1c2UgcG9p bnRlciB3aGlsZSBmcmVlaW5nICovCi0JY2FuY2VsQ29ubiA9IE5VTEw7CisJY2FuY2VsQ29ubiA9 IG5ld0NhbmNlbENvbm47CisJVW5sb2NrQ2FuY2VsVGhyZWFkKCk7CiAKIAlpZiAob2xkQ2FuY2Vs Q29ubiAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xkQ2FuY2VsQ29ubik7Ci0KLSNpZmRlZiBX SU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKKwkJ UFFjYW5jZWxGaW5pc2gob2xkQ2FuY2VsQ29ubik7CiB9CiAKLQogLyoKLSAqIENvZGUgdG8gc3Vw cG9ydCBxdWVyeSBjYW5jZWxsYXRpb24KLSAqCi0gKiBOb3RlIHRoYXQgc2VuZGluZyB0aGUgY2Fu Y2VsIGRpcmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyIGlzIHNhZmUKLSAqIGJlY2F1c2Ug UFFjYW5jZWwoKSBpcyB3cml0dGVuIHRvIG1ha2UgaXQgc28uICBXZSB1c2Ugd3JpdGUoKSB0byBy ZXBvcnQKLSAqIHRvIHN0ZGVyciBiZWNhdXNlIGl0J3MgYmV0dGVyIHRvIHVzZSBzaW1wbGUgZmFj aWxpdGllcyBpbiBhIHNpZ25hbAotICogaGFuZGxlci4KKyAqIFNldENhbmNlbENvbm4KICAqCi0g KiBPbiBXaW5kb3dzLCB0aGUgc2lnbmFsIGNhbmNlbGluZyBoYXBwZW5zIG9uIGEgc2VwYXJhdGUg dGhyZWFkLCBiZWNhdXNlCi0gKiB0aGF0J3MgaG93IFNldENvbnNvbGVDdHJsSGFuZGxlciB3b3Jr cy4gIFRoZSBQUWNhbmNlbCBmdW5jdGlvbiBpcyBzYWZlCi0gKiBmb3IgdGhpcyAodW5saWtlIFBR cmVxdWVzdENhbmNlbCkuICBIb3dldmVyLCBhIENSSVRJQ0FMX1NFQ1RJT04gaXMgcmVxdWlyZWQK LSAqIHRvIHByb3RlY3QgdGhlIFBHY2FuY2VsIHN0cnVjdHVyZSBhZ2FpbnN0IGJlaW5nIGNoYW5n ZWQgd2hpbGUgdGhlIHNpZ25hbAotICogdGhyZWFkIGlzIHVzaW5nIGl0LgorICogU2V0IGNhbmNl bENvbm4gdG8gcG9pbnQgdG8gYSBjYW5jZWwgY29ubmVjdGlvbiBmb3IgdGhlIGdpdmVuIGRhdGFi YXNlCisgKiBjb25uZWN0aW9uLiBUaGlzIGNyZWF0ZXMgYSBuZXcgUEdjYW5jZWxDb25uIHRoYXQg Y2FuIGJlIHVzZWQgdG8gc2VuZAorICogY2FuY2VsIHJlcXVlc3RzLgogICovCi0KLSNpZm5kZWYg V0lOMzIKK3ZvaWQKK1NldENhbmNlbENvbm4oUEdjb25uICpjb25uKQoreworCVNldENhbmNlbENv bm5JbnRlcm5hbChQUWNhbmNlbENyZWF0ZShjb25uKSk7Cit9CiAKIC8qCi0gKiBoYW5kbGVfc2ln aW50CisgKiBSZXNldENhbmNlbENvbm4KICAqCi0gKiBIYW5kbGUgaW50ZXJydXB0IHNpZ25hbHMg YnkgY2FuY2VsaW5nIHRoZSBjdXJyZW50IGNvbW1hbmQsIGlmIGNhbmNlbENvbm4KLSAqIGlzIHNl dC4KKyAqIENsZWFyIGNhbmNlbENvbm4sIHByZXZlbnRpbmcgYW55IHBlbmRpbmcgY2FuY2VsIGZy b20gYmVpbmcgc2VudC4KKyAqIFdhaXRzIGZvciBhbnkgaW4tZmxpZ2h0IGNhbmNlbCByZXF1ZXN0 IHRvIGNvbXBsZXRlIGZpcnN0LgogICovCi1zdGF0aWMgdm9pZAotaGFuZGxlX3NpZ2ludChTSUdO QUxfQVJHUykKK3ZvaWQKK1Jlc2V0Q2FuY2VsQ29ubih2b2lkKQogewotCWNoYXIJCWVycmJ1Zlsy NTZdOworCVNldENhbmNlbENvbm5JbnRlcm5hbChOVUxMKTsKK30KIAotCUNhbmNlbFJlcXVlc3Rl ZCA9IHRydWU7CiAKLQlpZiAoY2FuY2VsX2NhbGxiYWNrICE9IE5VTEwpCi0JCWNhbmNlbF9jYWxs YmFjaygpOworLyoKKyAqIExvY2tDYW5jZWxUaHJlYWQgLyBVbmxvY2tDYW5jZWxUaHJlYWQKKyAq CisgKiBBY3F1aXJlIG9yIHJlbGVhc2UgY2FuY2VsX3RocmVhZF9sb2NrLiAgRXh0ZXJuYWwgY2Fs bGVycyAoZS5nLiBwZ19kdW1wKQorICogdXNlIHRoZXNlIHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEg dGhhdCB0aGUgY2FuY2VsLXRocmVhZCBjYWxsYmFjayBhbHNvCisgKiBhY2Nlc3Nlcywgd2l0aG91 dCBleHBvc2luZyB0aGUgbXV0ZXggZGlyZWN0bHkuCisgKi8KK3ZvaWQKK0xvY2tDYW5jZWxUaHJl YWQodm9pZCkKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJmNhbmNlbF90aHJlYWRfbG9jayk7Cit9 CiAKLQkvKiBTZW5kIFF1ZXJ5Q2FuY2VsIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgZGF0YWJhc2Ug cXVlcnkgKi8KLQlpZiAoY2FuY2VsQ29ubiAhPSBOVUxMKQotCXsKLQkJaWYgKFBRY2FuY2VsKGNh bmNlbENvbm4sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIo Y2FuY2VsX3NlbnRfbXNnKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdyaXRlX3N0ZGVycihjYW5j ZWxfbm90X3NlbnRfbXNnKTsKLQkJCXdyaXRlX3N0ZGVycihlcnJidWYpOwotCQl9Ci0JfQordm9p ZAorVW5sb2NrQ2FuY2VsVGhyZWFkKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNh bmNlbF90aHJlYWRfbG9jayk7CiB9CiAKKyNpZm5kZWYgV0lOMzIKIC8qCi0gKiBzZXR1cF9jYW5j ZWxfaGFuZGxlcgorICogUmVzZXRDYW5jZWxBZnRlckZvcmsKKyAqCisgKiBSZXNldCBjYW5jZWwg bW9kdWxlIHN0YXRlIGFmdGVyIGZvcmsoKS4gVGhyZWFkcyBkb24ndCBzdXJ2aXZlIGZvcmsoKSwg c28gdGhlCisgKiBjYW5jZWwgdGhyZWFkIGFuZCBpdHMgcGlwZSBhcmUgZ29uZS4gVGhlIG11dGV4 IG1heSBoYXZlIGJlZW4gaGVsZCBieSB0aGUKKyAqIGNhbmNlbCB0aHJlYWQgYXQgZm9yayB0aW1l LCBzbyB3ZSBtdXN0IHJlaW5pdGlhbGl6ZSBpdCByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAqIHVu bG9jayBpdC4gIGNhbmNlbENvbm4gaXMgTlVMTGVkIHdpdGhvdXQgZnJlZWluZyBiZWNhdXNlIHRo ZSBwYXJlbnQgcHJvY2VzcworICogb3ducyB0aGUgdW5kZXJseWluZyBvYmplY3QuICBUaGUgU0lH SU5UIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBzbyB0aGF0CisgKiBhIHNpZ25hbCBhcnJp dmluZyBiZWZvcmUgc2V0dXBfY2FuY2VsX2hhbmRsZXIoKSBpcyBjYWxsZWQgYWdhaW4gZG9lc24n dCB0cnkKKyAqIHRvIHdyaXRlIHRvIHRoZSBjbG9zZWQgcGlwZS4KICAqCi0gKiBSZWdpc3RlciBx dWVyeSBjYW5jZWxsYXRpb24gY2FsbGJhY2sgZm9yIFNJR0lOVC4KKyAqIFRoZSBjaGlsZCB3aWxs IHNldCB1cCBhIGZyZXNoIGNhbmNlbCB0aHJlYWQgd2hlbiBpdCBsYXRlciBjYWxscworICogc2V0 dXBfY2FuY2VsX2hhbmRsZXIoKS4KICAqLwogdm9pZAotc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9p ZCAoKnF1ZXJ5X2NhbmNlbF9jYWxsYmFjaykgKHZvaWQpKQorUmVzZXRDYW5jZWxBZnRlckZvcmso dm9pZCkKIHsKLQljYW5jZWxfY2FsbGJhY2sgPSBxdWVyeV9jYW5jZWxfY2FsbGJhY2s7Ci0JY2Fu Y2VsX3NlbnRfbXNnID0gXygiQ2FuY2VsIHJlcXVlc3Qgc2VudFxuIik7Ci0JY2FuY2VsX25vdF9z ZW50X21zZyA9IF8oIkNvdWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKKwljbG9zZShj YW5jZWxfcGlwZVswXSk7CisJY2xvc2UoY2FuY2VsX3BpcGVbMV0pOworCWNhbmNlbF9waXBlWzBd ID0gY2FuY2VsX3BpcGVbMV0gPSAtMTsKIAotCXBxc2lnbmFsKFNJR0lOVCwgaGFuZGxlX3NpZ2lu dCk7Ci19CisJcHRocmVhZF9tdXRleF9pbml0KCZjYW5jZWxfdGhyZWFkX2xvY2ssIE5VTEwpOwog Ci0jZWxzZQkJCQkJCQkvKiBXSU4zMiAqLworCWNhbmNlbENvbm4gPSBOVUxMOworCUNhbmNlbFJl cXVlc3RlZCA9IGZhbHNlOwogCisJcHFzaWduYWwoU0lHSU5ULCBQR19TSUdfREZMKTsKK30KKyNl bmRpZgorCisjaWZkZWYgV0lOMzIKKy8qCisgKiBDb25zb2xlIGNvbnRyb2wgaGFuZGxlciBmb3Ig V2luZG93cy4KKyAqCisgKiBUaGlzIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgY3JlYXRlZCBi eSB0aGUgT1MsIHNvIHdlIGNhbiBzYWZlbHkgY2FsbAorICogdGhlIGJsb2NraW5nIGNhbmNlbCBB UEkgZGlyZWN0bHkuCisgKi8KIHN0YXRpYyBCT09MIFdJTkFQSQogY29uc29sZUhhbmRsZXIoRFdP UkQgZHdDdHJsVHlwZSkKIHsKLQljaGFyCQllcnJidWZbMjU2XTsKLQogCWlmIChkd0N0cmxUeXBl ID09IENUUkxfQ19FVkVOVCB8fAogCQlkd0N0cmxUeXBlID09IENUUkxfQlJFQUtfRVZFTlQpCiAJ ewogCQlDYW5jZWxSZXF1ZXN0ZWQgPSB0cnVlOwogCi0JCWlmIChjYW5jZWxfY2FsbGJhY2sgIT0g TlVMTCkKLQkJCWNhbmNlbF9jYWxsYmFjaygpOworCQlMb2NrQ2FuY2VsVGhyZWFkKCk7CiAKLQkJ LyogU2VuZCBRdWVyeUNhbmNlbCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIGRhdGFiYXNlIHF1ZXJ5 ICovCi0JCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0JCWlmIChjYW5j ZWxDb25uICE9IE5VTEwpCi0JCXsKLQkJCWlmIChQUWNhbmNlbChjYW5jZWxDb25uLCBlcnJidWYs IHNpemVvZihlcnJidWYpKSkKLQkJCXsKLQkJCQl3cml0ZV9zdGRlcnIoY2FuY2VsX3NlbnRfbXNn KTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQl3cml0ZV9zdGRlcnIoY2FuY2VsX25vdF9zZW50 X21zZyk7Ci0JCQkJd3JpdGVfc3RkZXJyKGVycmJ1Zik7Ci0JCQl9Ci0JCX0KKwkJU2VuZENhbmNl bFJlcXVlc3QoKTsKKworCQlpZiAodGhyZWFkX2NhbGxiYWNrX2ZuICE9IE5VTEwpCisJCQl0aHJl YWRfY2FsbGJhY2tfZm4oKTsKIAotCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxv Y2spOworCQlVbmxvY2tDYW5jZWxUaHJlYWQoKTsKIAogCQlyZXR1cm4gVFJVRTsKIAl9CkBAIC0y MjgsMTYgKzMwOCwxNjkgQEAgY29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKIAkJcmV0 dXJuIEZBTFNFOwogfQogCisjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworLyoKKyAqIFNpZ25h bCBoYW5kbGVyIHRoYXQgc2V0dXBfY2FuY2VsX2hhbmRsZXIgY29uZmlndXJlcyBmb3IgU0lHSU5U LiBFeHBvc2VkIHNvCisgKiBvdGhlciBzaWduYWxzIHRoYW4gU0lHSU5UIGNhbiB1c2UgaXQgaWYg ZGVzaXJlZC4KKyAqLwogdm9pZAotc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCAoKmNhbGxiYWNr KSAodm9pZCkpCitDYW5jZWxTaWduYWxIYW5kbGVyKFNJR05BTF9BUkdTKQogewotCWNhbmNlbF9j YWxsYmFjayA9IGNhbGxiYWNrOwotCWNhbmNlbF9zZW50X21zZyA9IF8oIkNhbmNlbCByZXF1ZXN0 IHNlbnRcbiIpOwotCWNhbmNlbF9ub3Rfc2VudF9tc2cgPSBfKCJDb3VsZCBub3Qgc2VuZCBjYW5j ZWwgcmVxdWVzdDogIik7CisJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwogCi0JSW5pdGlhbGl6 ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2spOworCUNhbmNlbFJlcXVlc3RlZCA9IHRy dWU7CiAKLQlTZXRDb25zb2xlQ3RybEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIFRSVUUpOworCWlm IChzaWduYWxfY2FsbGJhY2tfZm4gIT0gTlVMTCkKKwkJc2lnbmFsX2NhbGxiYWNrX2ZuKCk7CisK KwkvKiBXYWtlIHVwIHRoZSBjYW5jZWwgdGhyZWFkICovCisJaWYgKGNhbmNlbF9waXBlWzFdID49 IDApCisJeworCQljaGFyCQljID0gMTsKKwkJaW50CQkJcmMgPSB3cml0ZShjYW5jZWxfcGlwZVsx XSwgJmMsIDEpOworCisJCSh2b2lkKSByYzsKKwl9CisKKwllcnJubyA9IHNhdmVfZXJybm87Cit9 CisKKy8qCisgKiBUaHJlYWQgbWFpbiBmdW5jdGlvbiBmb3IgY3JlYXRlX2NhbmNlbF90aHJlYWQu ICBXYWl0cyBmb3IgdGhlIHNpZ25hbAorICogaGFuZGxlciB0byB3cml0ZSBhIGJ5dGUgdG8gdGhl IHBpcGUsIHRoZW4gY2FsbHMgdGhlIGNhbmNlbCBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQg KgorY2FuY2VsX3RocmVhZF9sb29wKHZvaWQgKmFyZykKK3sKKwlmb3IgKDs7KQorCXsKKwkJY2hh cgkJYnVmWzE2XTsKKwkJc3NpemVfdAkJcmM7CisKKwkJcmMgPSByZWFkKGNhbmNlbF9waXBlWzBd LCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKHJjIDw9IDApCisJCXsKKwkJCWlmIChlcnJubyA9 PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCS8qIFBpcGUgY2xvc2VkIG9yIGVycm9yIC0gZXhp dCB0aHJlYWQgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJTG9ja0NhbmNlbFRocmVhZCgpOworCisJ CVNlbmRDYW5jZWxSZXF1ZXN0KCk7CisKKwkJaWYgKHRocmVhZF9jYWxsYmFja19mbiAhPSBOVUxM KQorCQkJdGhyZWFkX2NhbGxiYWNrX2ZuKCk7CisKKwkJLyoKKwkJICogRHJhaW4gYW55IHBlbmRp bmcgYnl0ZXMgZnJvbSB0aGUgY2FuY2VsIHBpcGUsIHNvIHRoYXQgc2lnbmFscworCQkgKiByZWNl aXZlZCB3aGlsZSB3ZSB3ZXJlIGFscmVhZHkgaGFuZGxpbmcgYSBjYW5jZWwgZG9uJ3QgY2F1c2Ug dXMgdG8KKwkJICogd2FrZSB1cCBhZ2FpbiBhbmQgY2FuY2VsIGEgc3Vic2VxdWVudCBxdWVyeS4K KwkJICovCisJCWZjbnRsKGNhbmNlbF9waXBlWzBdLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKKwkJ d2hpbGUgKHJlYWQoY2FuY2VsX3BpcGVbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKKwkJCTsJ CQkJCS8qIGxvb3AgdW50aWwgcGlwZSBpcyBmdWxseSBkcmFpbmVkICovCisJCWZjbnRsKGNhbmNl bF9waXBlWzBdLCBGX1NFVEZMLCAwKTsKKworCQlVbmxvY2tDYW5jZWxUaHJlYWQoKTsKKwl9CisK KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGNyZWF0ZV9jYW5jZWxfdGhyZWFkCisgKgorICog Q3JlYXRlIGEgZGVkaWNhdGVkIHRocmVhZCBhbmQgYXNzb2NpYXRlZCBwaXBlIGZvciBhc3luYy1z aWduYWwtc2FmZSBjYW5jZWwKKyAqIGhhbmRsaW5nLiAgVGhlIHBpcGUgYWxsb3dzIHNpZ25hbCBo YW5kbGVycyAod2hpY2ggY2Fubm90IHNhZmVseSBjYWxsIGNvbXBsZXgKKyAqIGZ1bmN0aW9ucykg dG8gd2FrZSB1cCB0aGUgdGhyZWFkIGJ5IHdyaXRpbmcgYSBieXRlLgorICoKKyAqIFRoZSB3cml0 ZSBlbmQgb2YgdGhlIHBpcGUgaXMgc2V0IG5vbi1ibG9ja2luZyBzbyBzaWduYWwgaGFuZGxlcnMg bmV2ZXIKKyAqIGJsb2NrLiAgVGhlIHRocmVhZCBpcyBjcmVhdGVkIHdpdGggYWxsIHNpZ25hbHMg YmxvY2tlZCBzbyB0aGF0IHNpZ25hbHMgYXJlCisgKiBhbHdheXMgZGVsaXZlcmVkIHRvIHRoZSBt YWluIHRocmVhZC4gIFRoZSB0aHJlYWQgcnVucyB1bnRpbCBwcm9jZXNzIGV4aXQuCisgKiBObyBo YW5kbGUgaXMgcmV0dXJuZWQgYmVjYXVzZSBjdXJyZW50bHkgbm8gY2FsbGVycyBuZWVkIHRvIGpv aW4gaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfY2FuY2VsX3RocmVhZCh2b2lkKQorewor CXNpZ3NldF90CXNhdmVfc2V0OworCXNpZ3NldF90CWJsb2NrX3NldDsKKwlwdGhyZWFkX3QJdGhy ZWFkOworCWludAkJCXJjOworCisJaWYgKHBpcGUoY2FuY2VsX3BpcGUpIDwgMCkKKwl7CisJCXBn X2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBwaXBlIGZvciBjYW5jZWw6ICVtIik7CisJCWV4 aXQoMSk7CisJfQorCisJLyoKKwkgKiBNYWtlIHRoZSB3cml0ZSBlbmQgbm9uLWJsb2NraW5nLCBz byB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3b24ndCBibG9jaworCSAqIGlmIHRoZSBwaXBlIGJ1 ZmZlciBpcyBmdWxsICh3aGljaCBpcyB2ZXJ5IHVubGlrZWx5IGluIHByYWN0aWNlIGJ1dAorCSAq IHBvc3NpYmxlIGluIHRoZW9yeSkuCisJICovCisJZmNudGwoY2FuY2VsX3BpcGVbMV0sIEZfU0VU RkwsIE9fTk9OQkxPQ0spOworCisJLyoKKwkgKiBCbG9jayBhbGwgc2lnbmFscyBiZWZvcmUgY3Jl YXRpbmcgdGhlIGNhbmNlbCB0aHJlYWQsIHNvIHRoYXQgaXQKKwkgKiBpbmhlcml0cyBhIHNpZ25h bCBtYXNrIHdpdGggYWxsIHNpZ25hbHMgYmxvY2tlZC4gIFRoaXMgZW5zdXJlcyBzaWduYWxzCisJ ICogYXJlIGFsd2F5cyBkZWxpdmVyZWQgdG8gdGhlIG1haW4gdGhyZWFkLCB3aGljaCBtYXR0ZXJz IGJlY2F1c2Ugc29tZQorCSAqIHNpZ25hbF9jYWxsYmFjayBmdW5jdGlvbnMgY2FsbCBzaWdsb25n am1wKCkgYmFjayB0byBhIHNpZ3NldGptcCgpIG9uCisJICogdGhlIG1haW4gdGhyZWFkJ3Mgc3Rh Y2ssIHNwZWNpZmljYWxseSB0aGUgcHNxbF9jYW5jZWxfY2FsbGJhY2sKKwkgKiBmdW5jdGlvbi4K KwkgKi8KKwlzaWdmaWxsc2V0KCZibG9ja19zZXQpOworCXB0aHJlYWRfc2lnbWFzayhTSUdfQkxP Q0ssICZibG9ja19zZXQsICZzYXZlX3NldCk7CisKKwlyYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJl YWQsIE5VTEwsIGNhbmNlbF90aHJlYWRfbG9vcCwgTlVMTCk7CisKKwlwdGhyZWFkX3NpZ21hc2so U0lHX1NFVE1BU0ssICZzYXZlX3NldCwgTlVMTCk7CisKKwlpZiAocmMgIT0gMCkKKwl7CisJCXBn X2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBjYW5jZWwgdGhyZWFkOiAlcyIsIHN0cmVycm9y KHJjKSk7CisJCWV4aXQoMSk7CisJfQorCisJcHRocmVhZF9kZXRhY2godGhyZWFkKTsKIH0KIAot I2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisjZW5kaWYJCQkJCQkJLyogIVdJTjMyICovCisKKwor LyoKKyAqIHNldHVwX2NhbmNlbF9oYW5kbGVyCisgKgorICogU2V0IHVwIHNpZ25hbCBoYW5kbGlu ZyBmb3IgU0lHSU5UIChVbml4KSBvciBjb25zb2xlIGV2ZW50cyAoV2luZG93cykgdG8KKyAqIHBl cmZvcm0gY2FuY2VsIGFjdGlvbnMuCisgKgorICogc2lnbmFsX2NhbGxiYWNrIGlzIGludm9rZWQg ZGlyZWN0bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIgY29udGV4dCBvbgorICogZXZlcnkgU0lH SU5UIChvbiBVbml4KSwgc28gaXQgbXVzdCBiZSBhc3luYy1zaWduYWwtc2FmZS4gIENhbiBiZSBO VUxMLgorICogT24gV2luZG93cywgc2lnbmFsIGhhbmRsZXJzIGRvbid0IGV4aXN0ICh0aGUgY29u c29sZSBoYW5kbGVyIHJ1bnMgaW4gYQorICogc2VwYXJhdGUgdGhyZWFkKSwgc28gc2lnbmFsX2Nh bGxiYWNrIG11c3QgYmUgTlVMTC4KKyAqCisgKiB0aHJlYWRfY2FsbGJhY2sgaXMgaW52b2tlZCBm cm9tIGEgZGVkaWNhdGVkIGNhbmNlbCB0aHJlYWQgKFVuaXgpIG9yIHRoZQorICogY29uc29sZSBo YW5kbGVyIHRocmVhZCAoV2luZG93cykgd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZC4gQ2FuIGJl IE5VTEwuCisgKi8KK3ZvaWQKK3NldHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQgKCpzaWduYWxfY2Fs bGJhY2spICh2b2lkKSwKKwkJCQkJIHZvaWQgKCp0aHJlYWRfY2FsbGJhY2spICh2b2lkKSkKK3sK KyNpZmRlZiBXSU4zMgorCUFzc2VydChzaWduYWxfY2FsbGJhY2sgPT0gTlVMTCk7CisjZW5kaWYK KworCXNpZ25hbF9jYWxsYmFja19mbiA9IHNpZ25hbF9jYWxsYmFjazsKKwl0aHJlYWRfY2FsbGJh Y2tfZm4gPSB0aHJlYWRfY2FsbGJhY2s7CisJY2FuY2VsX3NlbnRfbXNnID0gXygiU2VuZGluZyBj YW5jZWwgcmVxdWVzdFxuIik7CisJY2FuY2VsX25vdF9zZW50X21zZyA9IF8oIkNvdWxkIG5vdCBz ZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKKworI2lmZGVmIFdJTjMyCisJU2V0Q29uc29sZUN0cmxI YW5kbGVyKGNvbnNvbGVIYW5kbGVyLCBUUlVFKTsKKyNlbHNlCisJY3JlYXRlX2NhbmNlbF90aHJl YWQoKTsKKwlwcXNpZ25hbChTSUdJTlQsIENhbmNlbFNpZ25hbEhhbmRsZXIpOworI2VuZGlmCit9 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9mZV91dGlscy9jYW5jZWwuaCBiL3NyYy9pbmNsdWRl L2ZlX3V0aWxzL2NhbmNlbC5oCmluZGV4IGUxNzRmYjgzYjkyLi5mZWIxOTcwZDM3MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZmVfdXRpbHMvY2FuY2VsLmgKKysrIGIvc3JjL2luY2x1ZGUvZmVf dXRpbHMvY2FuY2VsLmgKQEAgLTIzLDEwICsyMywxNSBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9s YXRpbGUgc2lnX2F0b21pY190IENhbmNlbFJlcXVlc3RlZDsKIGV4dGVybiB2b2lkIFNldENhbmNl bENvbm4oUEdjb25uICpjb25uKTsKIGV4dGVybiB2b2lkIFJlc2V0Q2FuY2VsQ29ubih2b2lkKTsK IAotLyoKLSAqIEEgY2FsbGJhY2sgY2FuIGJlIG9wdGlvbmFsbHkgc2V0IHVwIHRvIGJlIGNhbGxl ZCBhdCBjYW5jZWxsYXRpb24KLSAqIHRpbWUuCi0gKi8KLWV4dGVybiB2b2lkIHNldHVwX2NhbmNl bF9oYW5kbGVyKHZvaWQgKCpxdWVyeV9jYW5jZWxfY2FsbGJhY2spICh2b2lkKSk7CitleHRlcm4g dm9pZCBzZXR1cF9jYW5jZWxfaGFuZGxlcih2b2lkICgqc2lnbmFsX2NhbGxiYWNrKSAodm9pZCks CisJCQkJCQkJCSB2b2lkICgqdGhyZWFkX2NhbGxiYWNrKSAodm9pZCkpOworCitleHRlcm4gdm9p ZCBMb2NrQ2FuY2VsVGhyZWFkKHZvaWQpOworZXh0ZXJuIHZvaWQgVW5sb2NrQ2FuY2VsVGhyZWFk KHZvaWQpOworCisjaWZuZGVmIFdJTjMyCitleHRlcm4gdm9pZCBSZXNldENhbmNlbEFmdGVyRm9y ayh2b2lkKTsKK2V4dGVybiB2b2lkIENhbmNlbFNpZ25hbEhhbmRsZXIoU0lHTkFMX0FSR1MpOwor I2VuZGlmCiAKICNlbmRpZgkJCQkJCQkvKiBDQU5DRUxfSCAqLwotLSAKMi41NC4wCgo= --f50c216c11fccb3ed762355eed0239139ab0c94c522ef5929008140d42a7--