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.94.2) (envelope-from ) id 1u2Sxa-0010is-Fl for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Apr 2025 10:47:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u2SxY-00238E-Sv for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Apr 2025 10:47:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u2SxY-00237z-78 for pgsql-hackers@lists.postgresql.org; Wed, 09 Apr 2025 10:47:08 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u2SxV-003rCy-0A for pgsql-hackers@postgresql.org; Wed, 09 Apr 2025 10:47:07 +0000 Received: from [192.168.1.112] (iptv-hkibng21-58c090-167.dhcp.inet.fi [88.192.144.167]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4ZXflQ6Xznz49Pvf; Wed, 9 Apr 2025 13:46:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1744195619; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=uAOysJF5Je4mMVSur6K06exf3evXtFf4ioimDqBHqks=; b=FOrxmI54MdHsdJWcWfPTHNKU3p/hhBEDvvv/jZSHfRzr/fexSw9lmoSc1JpZFVLy9q6+pC 0Qapuc0dbC5f0Zsnhmj+b54ykISqrDXiR40eMQB6A9yRY33+d3hqu4L9Xio1vZNZKwJn5p DxfKuxbje3NUFAbjY6TzccvowJNCFKxcd/0SZSskDiIr0/03XyIOczQmNp5XNhErWlZgrO kz2T8avF4Rz6+ZtHIL+cNoQmJeGHCxmiWjh6+qAhiyuICp564WJIez8LRf4LTnftQ4q2vF +I1m15lE+w++/ZuXhNqJQEgiVFwnHy6Wd26199sZxkh7bf+VlHh5OVs4ZD6lNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1744195619; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=uAOysJF5Je4mMVSur6K06exf3evXtFf4ioimDqBHqks=; b=QpiFIBQBqOd6kJIB9ku6CVj7X4Bwl0jIv4tln9/73ODdKfEBuR1RxM08yR7v0kDx4Fz3Bi JlCoqsJuAiGx42GKTexXh1znx/+XcD9e1SU0bd+LR6nID0vjho7pFNYiwKVYUDG6lH70oF wxpjHiPnBLcc3oTJS5t1Rd7PUewvfHLV64uBZvsvcJ1eflQCP8jcLzYGSRgLFcDksYIj87 essWSfU61lDxTE+iSv0ccQuemo91NtKhyFGYuyxztegnH5TLUi+SiZuGp+AQ9GoSezdNOR 26sYYeRuXnPJevK83t5USCuh3HY7CBL9+03SzpaQWA2yTjZYWZOcLOkqNuEDhQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1744195619; a=rsa-sha256; cv=none; b=vSIL1GS5Gt4WBNFftyewFBmT32mVECmwK9l8Hnstdauf4h5jRkahss/BESIvgib/tBF4q1 Dhl0rubdUcqKPT98cRedqtanvKId6XSQ9q031Az0sKHgx+kMuodOb1M6LXQQK6mL9Qo7Pz mvYeVSVpeTun+yViJ0v79VhQBnzpmEq3Nh1o4CtHRUA3/vRlU8B04SAfnV2Gj2xQy/HQ3w c6TWiQ4I3PUjMGpc/M8yU2izbXc55oCzCnb6uyyFM25mfShtxh4YQDICgy0MoN1KX2dB/J E28OoyaSwXfNQ9WH0zRulHfHNWEcgbHyF95Qqb9bQOxyFK/YXR1ngkCNnPkqmQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------Anu4Xs9AbgB8J5z5YLIGTzTU" Message-ID: <9399dc5d-5575-483e-8e23-af6be79385c8@iki.fi> Date: Wed, 9 Apr 2025 13:46:57 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pgsql: Make cancel request keys longer From: Heikki Linnakangas To: Peter Eisentraut , "pgsql-hackers@postgresql.org" References: <61be9e31-7b7d-49d5-bc11-721800d89d64@eisentraut.org> <09323e6a-4743-4be2-9d7f-74b86e4dac64@iki.fi> <34d5d731-06cc-43af-88cd-b3a4c5c8d9df@iki.fi> <2afbd9c6-51b7-450f-9ae1-61e552368963@eisentraut.org> <4bd8421a-50ad-4169-a096-99247c2f563c@iki.fi> Content-Language: en-US In-Reply-To: <4bd8421a-50ad-4169-a096-99247c2f563c@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Anu4Xs9AbgB8J5z5YLIGTzTU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 09/04/2025 13:28, Heikki Linnakangas wrote: > On 09/04/2025 12:39, Peter Eisentraut wrote: >> On 09.04.25 10:53, Heikki Linnakangas wrote: >>> On 08/04/2025 22:41, Heikki Linnakangas wrote: >>>> On 08/04/2025 20:06, Peter Eisentraut wrote: >>>>> While I was looking at this, I suggest to make the first argument >>>>> void *.  This is consistent for passing binary data. >>>> >>>> Ok, sure. >>> >>> On second thoughts, -1 on that. 'void *' is appropriate for functions >>> like libc's read() or pq_sendbytes(), where the buffer can point to >>> anything. In other words, the caller is expected to have a pointer >>> like 'foobar *', and it gets cast to 'void *' when you call the >>> function. That's not the case with the cancellation key. The >>> cancellation key is just an array of bytes, the caller is expected to >>> pass an array of bytes, not a struct. >>> >>> The right precedent for that are e.g. SCRAM functions in scram- >>> common.h, for example. They use "const uint8 *" for the hashes. >>> >>> I'll switch to "const uint *" everywhere that deals with cancel keys. >>> There are a few more variables elsewhere in the backend and in libpq. >> >> I was having the same second thoughts overnight.  I agree with your >> conclusion. > > Here's a patch to change cancellation keys to "uint8 *". I did the same > for a few other places, namely the new scram_client_key_binary and > scram_server_key_binary fields in pg_conn, and a few libpq functions > that started to give compiler warnings after that. There probably would > be more code that could be changed to follow this convention, but I > didn't look hard. What do you think? > > I'm on the edge with the pg_b64_encode/decode functions, whether they > should work on "uint8 *" or "void *". On one hand, you do base64 > encoding on a byte array, which would support "uint8 *". But on the > other hand, you might use it for encoding things with more structure, > which would support "void *". I went with "void *", mostly out of > convenience as many of the SCRAM functions that currently use > pg_b64_encode/decode, use "char *" to represent byte arrays. But > arguably those should be changed to use "uint8 *" too. I went around looking a bit more anyway. Here's a patch to change more places to use 'uint8' for byte arrays, in SCRAM and MD5 salts and digests and such. It's a bit of code churn, but I think it improves readability. Especially the SCRAM code sometimes deals with base64-encoded string representations of digests and sometimes with decoded byte arrays, and it's helpful to use different datatypes for them. -- Heikki Linnakangas Neon (https://neon.tech) --------------Anu4Xs9AbgB8J5z5YLIGTzTU Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Use-void-for-arbitrary-buffers-uint8-for-byte-arr.patch" Content-Disposition: attachment; filename*0="v2-0001-Use-void-for-arbitrary-buffers-uint8-for-byte-arr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyY2FmMzMxY2Q0NDAyZDEwNDQwZWE3Y2ZhZDg4NzVjMTkyMjc3MjczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgOSBBcHIgMjAyNSAxMzozMjoyNCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjIgMS8yXSBVc2UgJ3ZvaWQgKicgZm9yIGFyYml0cmFyeSBidWZm ZXJzLCAndWludDggKicgZm9yIGJ5dGUKIGFycmF5cwoKQSAndm9pZCAqJyBhcmd1bWVudCBz dWdnZXN0cyB0aGF0IHRoZSBjYWxsZXIgbWlnaHQgcGFzcyBhbiBhcmJpdHJhcnkKc3RydWN0 LCB3aGljaCBpcyBhcHByb3ByaWF0ZSBmb3IgZnVuY3Rpb25zIGxpa2UgbGliYydzIHJlYWQv d3JpdGUsIG9yCnBxX3NlbmRieXRlcygpLiAndWludDggKicgaXMgbW9yZSBhcHByb3ByaWF0 ZSBmb3IgYnl0ZSBhcnJheXMgdGhhdApoYXZlIG5vIHN0cnVjdHVyZSwgbGlrZSB0aGUgY2Fu Y2VsbGF0aW9uIGtleXMgb3IgU0NSQU0gdG9rZW5zLiBDaGFuZ2UKYSBmZXcgcGxhY2VzIHRv IGZvbGxvdyB0aGF0IGNvbnZlbnRpb24uCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0 Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzYxYmU5ZTMxLTdiN2QtNDlkNS1iYzExLTcyMTgwMGQ4 OWQ2NEBlaXNlbnRyYXV0Lm9yZwotLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0u YyAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMg fCAgNiArKystLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICB8ICAy ICstCiBzcmMvY29tbW9uL2Jhc2U2NC5jICAgICAgICAgICAgICAgICAgfCAxNiArKysrKysr Ky0tLS0tLS0tCiBzcmMvY29tbW9uL3NjcmFtLWNvbW1vbi5jICAgICAgICAgICAgfCAxMCAr KysrKy0tLS0tCiBzcmMvaW5jbHVkZS9jb21tb24vYmFzZTY0LmggICAgICAgICAgfCAgNCAr Ky0tCiBzcmMvaW5jbHVkZS9jb21tb24vc2NyYW0tY29tbW9uLmggICAgfCAgNCArKy0tCiBz cmMvaW5jbHVkZS9saWJwcS9wcWNvbW0uaCAgICAgICAgICAgfCAgMiArLQogc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oICAgICB8ICA0ICsrLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtc2NyYW0uYyB8IDEyICsrKysrKy0tLS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtY2FuY2VsLmMgICAgIHwgIDIgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2Mu YyAgICAgICB8IDEwICsrKysrLS0tLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3Rv Y29sMy5jICB8ICA2ICsrKy0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50Lmgg ICAgIHwgMTIgKysrKysrLS0tLS0tCiAxNSBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25z KCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9h dXRoLXNjcmFtLmMgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMKaW5kZXggMjZk ZDI0MWVmYTkuLmY4MDMzM2JiNTMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9h dXRoLXNjcmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCkBAIC00 ODQsNyArNDg0LDcgQEAgcGdfYmVfc2NyYW1fYnVpbGRfc2VjcmV0KGNvbnN0IGNoYXIgKnBh c3N3b3JkKQogewogCWNoYXIJICAgKnByZXBfcGFzc3dvcmQ7CiAJcGdfc2FzbHByZXBfcmMg cmM7Ci0JY2hhcgkJc2FsdGJ1ZltTQ1JBTV9ERUZBVUxUX1NBTFRfTEVOXTsKKwl1aW50OAkJ c2FsdGJ1ZltTQ1JBTV9ERUZBVUxUX1NBTFRfTEVOXTsKIAljaGFyCSAgICpyZXN1bHQ7CiAJ Y29uc3QgY2hhciAqZXJyc3RyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y3NpZ25hbC5jCmluZGV4IGEzYzJjZDEyMjc3Li5mOWRhZmJjYWYyMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtNjQsNyArNjQsNyBAQCB0eXBlZGVmIHN0 cnVjdAogewogCXBnX2F0b21pY191aW50MzIgcHNzX3BpZDsKIAlpbnQJCQlwc3NfY2FuY2Vs X2tleV9sZW47IC8qIDAgbWVhbnMgbm8gY2FuY2VsbGF0aW9uIGlzIHBvc3NpYmxlICovCi0J Y2hhcgkJcHNzX2NhbmNlbF9rZXlbTUFYX0NBTkNFTF9LRVlfTEVOR1RIXTsKKwl1aW50OAkJ cHNzX2NhbmNlbF9rZXlbTUFYX0NBTkNFTF9LRVlfTEVOR1RIXTsKIAl2b2xhdGlsZSBzaWdf YXRvbWljX3QgcHNzX3NpZ25hbEZsYWdzW05VTV9QUk9DU0lHTkFMU107CiAJc2xvY2tfdAkJ cHNzX211dGV4OwkJLyogcHJvdGVjdHMgdGhlIGFib3ZlIGZpZWxkcyAqLwogCkBAIC0xNjIs NyArMTYyLDcgQEAgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKQogICoJCVJlZ2lzdGVyIHRo ZSBjdXJyZW50IHByb2Nlc3MgaW4gdGhlIFByb2NTaWduYWwgYXJyYXkKICAqLwogdm9pZAot UHJvY1NpZ25hbEluaXQoY2hhciAqY2FuY2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKQor UHJvY1NpZ25hbEluaXQoY29uc3QgdWludDggKmNhbmNlbF9rZXksIGludCBjYW5jZWxfa2V5 X2xlbikKIHsKIAlQcm9jU2lnbmFsU2xvdCAqc2xvdDsKIAl1aW50NjQJCWJhcnJpZXJfZ2Vu ZXJhdGlvbjsKQEAgLTcyOCw3ICs3MjgsNyBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxl cihTSUdOQUxfQVJHUykKICAqIGZpZWxkcyBpbiB0aGUgUHJvY1NpZ25hbCBzbG90cy4KICAq Lwogdm9pZAotU2VuZENhbmNlbFJlcXVlc3QoaW50IGJhY2tlbmRQSUQsIGNoYXIgKmNhbmNl bF9rZXksIGludCBjYW5jZWxfa2V5X2xlbikKK1NlbmRDYW5jZWxSZXF1ZXN0KGludCBiYWNr ZW5kUElELCBjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKQog ewogCUFzc2VydChiYWNrZW5kUElEICE9IDApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFs cy5jCmluZGV4IDE4NDdlN2M4NWQzLi45MmIwNDQ2YjgwYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMKQEAgLTUwLDcgKzUwLDcgQEAgcGdfdGltZV90CU15U3RhcnRUaW1lOwog VGltZXN0YW1wVHogTXlTdGFydFRpbWVzdGFtcDsKIHN0cnVjdCBDbGllbnRTb2NrZXQgKk15 Q2xpZW50U29ja2V0Owogc3RydWN0IFBvcnQgKk15UHJvY1BvcnQ7Ci1jaGFyCQlNeUNhbmNl bEtleVtNQVhfQ0FOQ0VMX0tFWV9MRU5HVEhdOwordWludDgJCU15Q2FuY2VsS2V5W01BWF9D QU5DRUxfS0VZX0xFTkdUSF07CiBpbnQJCQlNeUNhbmNlbEtleUxlbmd0aCA9IDA7CiBpbnQJ CQlNeVBNQ2hpbGRTbG90OwogCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2Jhc2U2NC5jIGIv c3JjL2NvbW1vbi9iYXNlNjQuYwppbmRleCA2MDI4ZjQxMzQ3Mi4uMjQwNDYxZmUxZTYgMTAw NjQ0Ci0tLSBhL3NyYy9jb21tb24vYmFzZTY0LmMKKysrIGIvc3JjL2NvbW1vbi9iYXNlNjQu YwpAQCAtNDEsMTUgKzQxLDE1IEBAIHN0YXRpYyBjb25zdCBpbnQ4IGI2NGxvb2t1cFsxMjhd ID0gewogLyoKICAqIHBnX2I2NF9lbmNvZGUKICAqCi0gKiBFbmNvZGUgaW50byBiYXNlNjQg dGhlIGdpdmVuIHN0cmluZy4gIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZAot ICogc3RyaW5nLCBhbmQgLTEgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIHdpdGggdGhlIHJl c3VsdCBidWZmZXIgemVyb2VkCi0gKiBmb3Igc2FmZXR5LgorICogRW5jb2RlIHRoZSAnc3Jj JyBieXRlIGFycmF5IGludG8gYmFzZTY0LiAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBl bmNvZGVkCisgKiBzdHJpbmcsIGFuZCAtMSBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igd2l0 aCB0aGUgcmVzdWx0IGJ1ZmZlciB6ZXJvZWQgZm9yCisgKiBzYWZldHkuCiAgKi8KIGludAot cGdfYjY0X2VuY29kZShjb25zdCBjaGFyICpzcmMsIGludCBsZW4sIGNoYXIgKmRzdCwgaW50 IGRzdGxlbikKK3BnX2I2NF9lbmNvZGUoY29uc3QgdWludDggKnNyYywgaW50IGxlbiwgY2hh ciAqZHN0LCBpbnQgZHN0bGVuKQogewogCWNoYXIJICAgKnA7Ci0JY29uc3QgY2hhciAqcywK Kwljb25zdCB1aW50OCAqcywKIAkJCSAgICplbmQgPSBzcmMgKyBsZW47CiAJaW50CQkJcG9z ID0gMjsKIAl1aW50MzIJCWJ1ZiA9IDA7CkBAIC01OSw3ICs1OSw3IEBAIHBnX2I2NF9lbmNv ZGUoY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLCBjaGFyICpkc3QsIGludCBkc3RsZW4pCiAK IAl3aGlsZSAocyA8IGVuZCkKIAl7Ci0JCWJ1ZiB8PSAodW5zaWduZWQgY2hhcikgKnMgPDwg KHBvcyA8PCAzKTsKKwkJYnVmIHw9ICpzIDw8IChwb3MgPDwgMyk7CiAJCXBvcy0tOwogCQlz Kys7CiAKQEAgLTExMywxMSArMTEzLDExIEBAIGVycm9yOgogICogYnVmZmVyIHplcm9lZCBm b3Igc2FmZXR5LgogICovCiBpbnQKLXBnX2I2NF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLCBp bnQgbGVuLCBjaGFyICpkc3QsIGludCBkc3RsZW4pCitwZ19iNjRfZGVjb2RlKGNvbnN0IGNo YXIgKnNyYywgaW50IGxlbiwgdWludDggKmRzdCwgaW50IGRzdGxlbikKIHsKIAljb25zdCBj aGFyICpzcmNlbmQgPSBzcmMgKyBsZW4sCiAJCQkgICAqcyA9IHNyYzsKLQljaGFyCSAgICpw ID0gZHN0OworCXVpbnQ4CSAgICpwID0gZHN0OwogCWNoYXIJCWM7CiAJaW50CQkJYiA9IDA7 CiAJdWludDMyCQlidWYgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9zY3JhbS1jb21t b24uYyBiL3NyYy9jb21tb24vc2NyYW0tY29tbW9uLmMKaW5kZXggYmZkMmEzNDAwMTYuLmU0 N2E2ZWJiYWFiIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3NjcmFtLWNvbW1vbi5jCisrKyBi L3NyYy9jb21tb24vc2NyYW0tY29tbW9uLmMKQEAgLTM3LDcgKzM3LDcgQEAKIGludAogc2Ny YW1fU2FsdGVkUGFzc3dvcmQoY29uc3QgY2hhciAqcGFzc3dvcmQsCiAJCQkJCSBwZ19jcnlw dG9oYXNoX3R5cGUgaGFzaF90eXBlLCBpbnQga2V5X2xlbmd0aCwKLQkJCQkJIGNvbnN0IGNo YXIgKnNhbHQsIGludCBzYWx0bGVuLCBpbnQgaXRlcmF0aW9ucywKKwkJCQkJIGNvbnN0IHVp bnQ4ICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXJhdGlvbnMsCiAJCQkJCSB1aW50OCAq cmVzdWx0LCBjb25zdCBjaGFyICoqZXJyc3RyKQogewogCWludAkJCXBhc3N3b3JkX2xlbiA9 IHN0cmxlbihwYXNzd29yZCk7CkBAIC02Miw3ICs2Miw3IEBAIHNjcmFtX1NhbHRlZFBhc3N3 b3JkKGNvbnN0IGNoYXIgKnBhc3N3b3JkLAogCiAJLyogRmlyc3QgaXRlcmF0aW9uICovCiAJ aWYgKHBnX2htYWNfaW5pdChobWFjX2N0eCwgKHVpbnQ4ICopIHBhc3N3b3JkLCBwYXNzd29y ZF9sZW4pIDwgMCB8fAotCQlwZ19obWFjX3VwZGF0ZShobWFjX2N0eCwgKHVpbnQ4ICopIHNh bHQsIHNhbHRsZW4pIDwgMCB8fAorCQlwZ19obWFjX3VwZGF0ZShobWFjX2N0eCwgc2FsdCwg c2FsdGxlbikgPCAwIHx8CiAJCXBnX2htYWNfdXBkYXRlKGhtYWNfY3R4LCAodWludDggKikg Jm9uZSwgc2l6ZW9mKHVpbnQzMikpIDwgMCB8fAogCQlwZ19obWFjX2ZpbmFsKGhtYWNfY3R4 LCBVaV9wcmV2LCBrZXlfbGVuZ3RoKSA8IDApCiAJewpAQCAtMjA3LDcgKzIwNyw3IEBAIHNj cmFtX1NlcnZlcktleShjb25zdCB1aW50OCAqc2FsdGVkX3Bhc3N3b3JkLAogICovCiBjaGFy ICoKIHNjcmFtX2J1aWxkX3NlY3JldChwZ19jcnlwdG9oYXNoX3R5cGUgaGFzaF90eXBlLCBp bnQga2V5X2xlbmd0aCwKLQkJCQkgICBjb25zdCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwg aW50IGl0ZXJhdGlvbnMsCisJCQkJICAgY29uc3QgdWludDggKnNhbHQsIGludCBzYWx0bGVu LCBpbnQgaXRlcmF0aW9ucywKIAkJCQkgICBjb25zdCBjaGFyICpwYXNzd29yZCwgY29uc3Qg Y2hhciAqKmVycnN0cikKIHsKIAl1aW50OAkJc2FsdGVkX3Bhc3N3b3JkW1NDUkFNX01BWF9L RVlfTEVOXTsKQEAgLTI5MCw3ICsyOTAsNyBAQCBzY3JhbV9idWlsZF9zZWNyZXQocGdfY3J5 cHRvaGFzaF90eXBlIGhhc2hfdHlwZSwgaW50IGtleV9sZW5ndGgsCiAJKihwKyspID0gJyQn OwogCiAJLyogc3RvcmVkIGtleSAqLwotCWVuY29kZWRfcmVzdWx0ID0gcGdfYjY0X2VuY29k ZSgoY2hhciAqKSBzdG9yZWRfa2V5LCBrZXlfbGVuZ3RoLCBwLAorCWVuY29kZWRfcmVzdWx0 ID0gcGdfYjY0X2VuY29kZShzdG9yZWRfa2V5LCBrZXlfbGVuZ3RoLCBwLAogCQkJCQkJCQkg ICBlbmNvZGVkX3N0b3JlZF9sZW4pOwogCWlmIChlbmNvZGVkX3Jlc3VsdCA8IDApCiAJewpA QCAtMzA3LDcgKzMwNyw3IEBAIHNjcmFtX2J1aWxkX3NlY3JldChwZ19jcnlwdG9oYXNoX3R5 cGUgaGFzaF90eXBlLCBpbnQga2V5X2xlbmd0aCwKIAkqKHArKykgPSAnOic7CiAKIAkvKiBz ZXJ2ZXIga2V5ICovCi0JZW5jb2RlZF9yZXN1bHQgPSBwZ19iNjRfZW5jb2RlKChjaGFyICop IHNlcnZlcl9rZXksIGtleV9sZW5ndGgsIHAsCisJZW5jb2RlZF9yZXN1bHQgPSBwZ19iNjRf ZW5jb2RlKHNlcnZlcl9rZXksIGtleV9sZW5ndGgsIHAsCiAJCQkJCQkJCSAgIGVuY29kZWRf c2VydmVyX2xlbik7CiAJaWYgKGVuY29kZWRfcmVzdWx0IDwgMCkKIAl7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jb21tb24vYmFzZTY0LmggYi9zcmMvaW5jbHVkZS9jb21tb24vYmFz ZTY0LmgKaW5kZXggM2Y3NGFhMzAxZjAuLjY2Y2I1N2IwMTdmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tb24vYmFzZTY0LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL2Jhc2U2 NC5oCkBAIC0xMSw4ICsxMSw4IEBACiAjZGVmaW5lIEJBU0U2NF9ICiAKIC8qIGJhc2UgNjQg Ki8KLXBnX25vZGlzY2FyZCBleHRlcm4gaW50IHBnX2I2NF9lbmNvZGUoY29uc3QgY2hhciAq c3JjLCBpbnQgbGVuLCBjaGFyICpkc3QsIGludCBkc3RsZW4pOwotcGdfbm9kaXNjYXJkIGV4 dGVybiBpbnQgcGdfYjY0X2RlY29kZShjb25zdCBjaGFyICpzcmMsIGludCBsZW4sIGNoYXIg KmRzdCwgaW50IGRzdGxlbik7CitwZ19ub2Rpc2NhcmQgZXh0ZXJuIGludCBwZ19iNjRfZW5j b2RlKGNvbnN0IHVpbnQ4ICpzcmMsIGludCBsZW4sIGNoYXIgKmRzdCwgaW50IGRzdGxlbik7 CitwZ19ub2Rpc2NhcmQgZXh0ZXJuIGludCBwZ19iNjRfZGVjb2RlKGNvbnN0IGNoYXIgKnNy YywgaW50IGxlbiwgdWludDggKmRzdCwgaW50IGRzdGxlbik7CiBleHRlcm4gaW50CXBnX2I2 NF9lbmNfbGVuKGludCBzcmNsZW4pOwogZXh0ZXJuIGludAlwZ19iNjRfZGVjX2xlbihpbnQg c3JjbGVuKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL3NjcmFtLWNvbW1v bi5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3NjcmFtLWNvbW1vbi5oCmluZGV4IDQ2ZGY5NGVm MWQ0Li41Y2UwNTVlMGUyNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3NjcmFt LWNvbW1vbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9zY3JhbS1jb21tb24uaApAQCAt NTEsNyArNTEsNyBAQAogCiBleHRlcm4gaW50CXNjcmFtX1NhbHRlZFBhc3N3b3JkKGNvbnN0 IGNoYXIgKnBhc3N3b3JkLAogCQkJCQkJCQkgcGdfY3J5cHRvaGFzaF90eXBlIGhhc2hfdHlw ZSwgaW50IGtleV9sZW5ndGgsCi0JCQkJCQkJCSBjb25zdCBjaGFyICpzYWx0LCBpbnQgc2Fs dGxlbiwgaW50IGl0ZXJhdGlvbnMsCisJCQkJCQkJCSBjb25zdCB1aW50OCAqc2FsdCwgaW50 IHNhbHRsZW4sIGludCBpdGVyYXRpb25zLAogCQkJCQkJCQkgdWludDggKnJlc3VsdCwgY29u c3QgY2hhciAqKmVycnN0cik7CiBleHRlcm4gaW50CXNjcmFtX0goY29uc3QgdWludDggKmlu cHV0LCBwZ19jcnlwdG9oYXNoX3R5cGUgaGFzaF90eXBlLAogCQkJCQlpbnQga2V5X2xlbmd0 aCwgdWludDggKnJlc3VsdCwKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJuIGludAlzY3JhbV9T ZXJ2ZXJLZXkoY29uc3QgdWludDggKnNhbHRlZF9wYXNzd29yZCwKIAkJCQkJCQl1aW50OCAq cmVzdWx0LCBjb25zdCBjaGFyICoqZXJyc3RyKTsKIAogZXh0ZXJuIGNoYXIgKnNjcmFtX2J1 aWxkX3NlY3JldChwZ19jcnlwdG9oYXNoX3R5cGUgaGFzaF90eXBlLCBpbnQga2V5X2xlbmd0 aCwKLQkJCQkJCQkJY29uc3QgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sIGludCBpdGVyYXRp b25zLAorCQkJCQkJCQljb25zdCB1aW50OCAqc2FsdCwgaW50IHNhbHRsZW4sIGludCBpdGVy YXRpb25zLAogCQkJCQkJCQljb25zdCBjaGFyICpwYXNzd29yZCwgY29uc3QgY2hhciAqKmVy cnN0cik7CiAKICNlbmRpZgkJCQkJCQkvKiBTQ1JBTV9DT01NT05fSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbGlicHEvcHFjb21tLmggYi9zcmMvaW5jbHVkZS9saWJwcS9wcWNv bW0uaAppbmRleCBkMTEwNjljZjhkYy4uZjA0Y2ExMzU2NTMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2xpYnBxL3BxY29tbS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL3BxY29tbS5o CkBAIC0xNDEsNyArMTQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FuY2VsUmVxdWVzdFBhY2tl dAogCS8qIE5vdGUgdGhhdCBlYWNoIGZpZWxkIGlzIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUg b3JkZXIhICovCiAJTXNnVHlwZQkJY2FuY2VsUmVxdWVzdENvZGU7CS8qIGNvZGUgdG8gaWRl bnRpZnkgYSBjYW5jZWwgcmVxdWVzdCAqLwogCXVpbnQzMgkJYmFja2VuZFBJRDsJCS8qIFBJ RCBvZiBjbGllbnQncyBiYWNrZW5kICovCi0JY2hhcgkJY2FuY2VsQXV0aENvZGVbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsJLyogc2VjcmV0IGtleSB0bworCXVpbnQ4CQljYW5jZWxBdXRo Q29kZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwkvKiBzZWNyZXQga2V5IHRvCiAJCQkJCQkJ CQkJCQkJCSAqIGF1dGhvcml6ZSBjYW5jZWwgKi8KIH0gQ2FuY2VsUmVxdWVzdFBhY2tldDsK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAppbmRleCA3MmY1NjU1ZmIzNC4uMjU4ZTU2MjRhZDAgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CkBAIC0xOTIsNyArMTkyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHBnX3RpbWVfdCBNeVN0 YXJ0VGltZTsKIGV4dGVybiBQR0RMTElNUE9SVCBUaW1lc3RhbXBUeiBNeVN0YXJ0VGltZXN0 YW1wOwogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBQb3J0ICpNeVByb2NQb3J0OwogZXh0 ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBMYXRjaCAqTXlMYXRjaDsKLWV4dGVybiBQR0RMTElN UE9SVCBjaGFyIE15Q2FuY2VsS2V5W107CitleHRlcm4gUEdETExJTVBPUlQgdWludDggTXlD YW5jZWxLZXlbXTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTXlDYW5jZWxLZXlMZW5ndGg7 CiBleHRlcm4gUEdETExJTVBPUlQgaW50IE15UE1DaGlsZFNsb3Q7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKaW5kZXggY2ZlMTQ2MzE0NDUuLjM0NWQ1YTBlY2IxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtNzMsMTAgKzczLDEwIEBAIHR5cGVkZWYgZW51 bQogZXh0ZXJuIFNpemUgUHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lk IFByb2NTaWduYWxTaG1lbUluaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIFByb2NTaWduYWxJ bml0KGNoYXIgKmNhbmNlbF9rZXksIGludCBjYW5jZWxfa2V5X2xlbik7CitleHRlcm4gdm9p ZCBQcm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNhbmNlbF9r ZXlfbGVuKTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWduYWwocGlkX3QgcGlkLCBQcm9jU2ln bmFsUmVhc29uIHJlYXNvbiwKIAkJCQkJCSAgIFByb2NOdW1iZXIgcHJvY051bWJlcik7Ci1l eHRlcm4gdm9pZCBTZW5kQ2FuY2VsUmVxdWVzdChpbnQgYmFja2VuZFBJRCwgY2hhciAqY2Fu Y2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKTsKK2V4dGVybiB2b2lkIFNlbmRDYW5jZWxS ZXF1ZXN0KGludCBiYWNrZW5kUElELCBjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNh bmNlbF9rZXlfbGVuKTsKIAogZXh0ZXJuIHVpbnQ2NCBFbWl0UHJvY1NpZ25hbEJhcnJpZXIo UHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGUpOwogZXh0ZXJuIHZvaWQgV2FpdEZvclByb2NT aWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtc2NyYW0uYwppbmRleCBmZTE4NjE1MTk3Zi4uM2JhYmJjOGQ1MjIgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYworKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKQEAgLTcwLDcgKzcwLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAogCS8qIFRoZXNlIGNvbWUgZnJvbSB0aGUgc2VydmVyLWZpcnN0IG1lc3Nh Z2UgKi8KIAljaGFyCSAgICpzZXJ2ZXJfZmlyc3RfbWVzc2FnZTsKLQljaGFyCSAgICpzYWx0 OworCXVpbnQ4CSAgICpzYWx0OwogCWludAkJCXNhbHRsZW47CiAJaW50CQkJaXRlcmF0aW9u czsKIAljaGFyCSAgICpub25jZTsKQEAgLTM1MCw3ICszNTAsNyBAQCBzdGF0aWMgY2hhciAq CiBidWlsZF9jbGllbnRfZmlyc3RfbWVzc2FnZShmZV9zY3JhbV9zdGF0ZSAqc3RhdGUpCiB7 CiAJUEdjb25uCSAgICpjb25uID0gc3RhdGUtPmNvbm47Ci0JY2hhcgkJcmF3X25vbmNlW1ND UkFNX1JBV19OT05DRV9MRU4gKyAxXTsKKwl1aW50OAkJcmF3X25vbmNlW1NDUkFNX1JBV19O T05DRV9MRU4gKyAxXTsKIAljaGFyCSAgICpyZXN1bHQ7CiAJaW50CQkJY2hhbm5lbF9pbmZv X2xlbjsKIAlpbnQJCQllbmNvZGVkX2xlbjsKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBidWlsZF9j bGllbnRfZmluYWxfbWVzc2FnZShmZV9zY3JhbV9zdGF0ZSAqc3RhdGUpCiAJCWNoYXIJICAg KmNiaW5kX2RhdGEgPSBOVUxMOwogCQlzaXplX3QJCWNiaW5kX2RhdGFfbGVuID0gMDsKIAkJ c2l6ZV90CQljYmluZF9oZWFkZXJfbGVuOwotCQljaGFyCSAgICpjYmluZF9pbnB1dDsKKwkJ dWludDgJICAgKmNiaW5kX2lucHV0OwogCQlzaXplX3QJCWNiaW5kX2lucHV0X2xlbjsKIAkJ aW50CQkJZW5jb2RlZF9jYmluZF9sZW47CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBidWlsZF9j bGllbnRfZmluYWxfbWVzc2FnZShmZV9zY3JhbV9zdGF0ZSAqc3RhdGUpCiAJZW5jb2RlZF9s ZW4gPSBwZ19iNjRfZW5jX2xlbihzdGF0ZS0+a2V5X2xlbmd0aCk7CiAJaWYgKCFlbmxhcmdl UFFFeHBCdWZmZXIoJmJ1ZiwgZW5jb2RlZF9sZW4pKQogCQlnb3RvIG9vbV9lcnJvcjsKLQll bmNvZGVkX2xlbiA9IHBnX2I2NF9lbmNvZGUoKGNoYXIgKikgY2xpZW50X3Byb29mLAorCWVu Y29kZWRfbGVuID0gcGdfYjY0X2VuY29kZShjbGllbnRfcHJvb2YsCiAJCQkJCQkJCXN0YXRl LT5rZXlfbGVuZ3RoLAogCQkJCQkJCQlidWYuZGF0YSArIGJ1Zi5sZW4sCiAJCQkJCQkJCWVu Y29kZWRfbGVuKTsKQEAgLTY5NCw3ICs2OTQsNyBAQCByZWFkX3NlcnZlcl9maW5hbF9tZXNz YWdlKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSwgY2hhciAqaW5wdXQpCiB7CiAJUEdjb25uCSAg ICpjb25uID0gc3RhdGUtPmNvbm47CiAJY2hhcgkgICAqZW5jb2RlZF9zZXJ2ZXJfc2lnbmF0 dXJlOwotCWNoYXIJICAgKmRlY29kZWRfc2VydmVyX3NpZ25hdHVyZTsKKwl1aW50OAkgICAq ZGVjb2RlZF9zZXJ2ZXJfc2lnbmF0dXJlOwogCWludAkJCXNlcnZlcl9zaWduYXR1cmVfbGVu OwogCiAJc3RhdGUtPnNlcnZlcl9maW5hbF9tZXNzYWdlID0gc3RyZHVwKGlucHV0KTsKQEAg LTkxNiw3ICs5MTYsNyBAQCBwZ19mZV9zY3JhbV9idWlsZF9zZWNyZXQoY29uc3QgY2hhciAq cGFzc3dvcmQsIGludCBpdGVyYXRpb25zLCBjb25zdCBjaGFyICoqZXJycwogewogCWNoYXIJ ICAgKnByZXBfcGFzc3dvcmQ7CiAJcGdfc2FzbHByZXBfcmMgcmM7Ci0JY2hhcgkJc2FsdGJ1 ZltTQ1JBTV9ERUZBVUxUX1NBTFRfTEVOXTsKKwl1aW50OAkJc2FsdGJ1ZltTQ1JBTV9ERUZB VUxUX1NBTFRfTEVOXTsKIAljaGFyCSAgICpyZXN1bHQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY2FuY2VsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jYW5jZWwuYwppbmRleCBlODRlNjRiZjJhNy4uZDUxYTJkMmY3MGEgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNhbmNlbC5jCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNhbmNlbC5jCkBAIC00NjMsNyArNDYzLDcgQEAgUFFzZW5kQ2FuY2Vs UmVxdWVzdChQR2Nvbm4gKmNhbmNlbENvbm4pCiAJbWVtc2V0KCZyZXEsIDAsIG9mZnNldG9m KENhbmNlbFJlcXVlc3RQYWNrZXQsIGNhbmNlbEF1dGhDb2RlKSk7CiAJcmVxLmNhbmNlbFJl cXVlc3RDb2RlID0gKE1zZ1R5cGUpIHBnX2h0b24zMihDQU5DRUxfUkVRVUVTVF9DT0RFKTsK IAlyZXEuYmFja2VuZFBJRCA9IHBnX2h0b24zMihjYW5jZWxDb25uLT5iZV9waWQpOwotCWlm IChwcVB1dG5jaGFyKChjaGFyICopICZyZXEsIG9mZnNldG9mKENhbmNlbFJlcXVlc3RQYWNr ZXQsIGNhbmNlbEF1dGhDb2RlKSwgY2FuY2VsQ29ubikpCisJaWYgKHBxUHV0bmNoYXIoJnJl cSwgb2Zmc2V0b2YoQ2FuY2VsUmVxdWVzdFBhY2tldCwgY2FuY2VsQXV0aENvZGUpLCBjYW5j ZWxDb25uKSkKIAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAlpZiAocHFQdXRuY2hhcihjYW5j ZWxDb25uLT5iZV9jYW5jZWxfa2V5LCBjYW5jZWxDb25uLT5iZV9jYW5jZWxfa2V5X2xlbiwg Y2FuY2VsQ29ubikpCiAJCXJldHVybiBTVEFUVVNfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1t aXNjLmMKaW5kZXggZDc4NDQ1YzcwYWYuLmM3NGZlNDA0YmJlIDEwMDY0NAotLS0gYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1taXNjLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtbWlzYy5jCkBAIC02Nyw3ICs2Nyw3IEBAIFBRbGliVmVyc2lvbih2b2lkKQogCiAKIC8q Ci0gKiBwcUdldGM6IGdldCAxIGNoYXJhY3RlciBmcm9tIHRoZSBjb25uZWN0aW9uCisgKiBw cUdldGM6IHJlYWQgMSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29ubmVjdGlvbgogICoKICAqCUFs bCB0aGVzZSByb3V0aW5lcyByZXR1cm4gMCBvbiBzdWNjZXNzLCBFT0Ygb24gZXJyb3IuCiAg KglOb3RlIHRoYXQgZm9yIHRoZSBHZXQgcm91dGluZXMsIEVPRiBvbmx5IG1lYW5zIHRoZXJl IGlzIG5vdCBlbm91Z2gKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcVB1dGMoY2hhciBjLCBQR2Nv bm4gKmNvbm4pCiAKIC8qCiAgKiBwcUdldHNbX2FwcGVuZF06Ci0gKiBnZXQgYSBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIGNvbm5lY3Rpb24sCisgKiByZWFkIGEgbnVsbC10 ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSBjb25uZWN0aW9uLAogICogYW5kIHN0b3JlIGl0 IGluIGFuIGV4cGFuc2libGUgUFFFeHBCdWZmZXIuCiAgKiBJZiB3ZSBydW4gb3V0IG9mIG1l bW9yeSwgYWxsIG9mIHRoZSBzdHJpbmcgaXMgc3RpbGwgcmVhZCwKICAqIGJ1dCB0aGUgZXhj ZXNzIGNoYXJhY3RlcnMgYXJlIHNpbGVudGx5IGRpc2NhcmRlZC4KQEAgLTE1OSwxMCArMTU5 LDEwIEBAIHBxUHV0cyhjb25zdCBjaGFyICpzLCBQR2Nvbm4gKmNvbm4pCiAKIC8qCiAgKiBw cUdldG5jaGFyOgotICoJZ2V0IGEgc3RyaW5nIG9mIGV4YWN0bHkgbGVuIGJ5dGVzIGluIGJ1 ZmZlciBzLCBubyBudWxsIHRlcm1pbmF0aW9uCisgKglyZWFkIGV4YWN0bHkgbGVuIGJ5dGVz IGluIGJ1ZmZlciBzLCBubyBudWxsIHRlcm1pbmF0aW9uCiAgKi8KIGludAotcHFHZXRuY2hh cihjaGFyICpzLCBzaXplX3QgbGVuLCBQR2Nvbm4gKmNvbm4pCitwcUdldG5jaGFyKHZvaWQg KnMsIHNpemVfdCBsZW4sIFBHY29ubiAqY29ubikKIHsKIAlpZiAobGVuID4gKHNpemVfdCkg KGNvbm4tPmluRW5kIC0gY29ubi0+aW5DdXJzb3IpKQogCQlyZXR1cm4gRU9GOwpAQCAtMTk5 LDcgKzE5OSw3IEBAIHBxU2tpcG5jaGFyKHNpemVfdCBsZW4sIFBHY29ubiAqY29ubikKICAq CXdyaXRlIGV4YWN0bHkgbGVuIGJ5dGVzIHRvIHRoZSBjdXJyZW50IG1lc3NhZ2UKICAqLwog aW50Ci1wcVB1dG5jaGFyKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIFBHY29ubiAqY29u bikKK3BxUHV0bmNoYXIoY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbiwgUEdjb25uICpjb25u KQogewogCWlmIChwcVB1dE1zZ0J5dGVzKHMsIGxlbiwgY29ubikpCiAJCXJldHVybiBFT0Y7 CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1wcm90b2NvbDMuYyBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jCmluZGV4IGQ4NTkxMGY0MWZjLi4y ODlkMWJlY2E3NSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9j b2wzLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMKQEAgLTE1 MzIsNyArMTUzMiw3IEBAIGdldFBhcmFtZXRlclN0YXR1cyhQR2Nvbm4gKmNvbm4pCiBzdGF0 aWMgaW50CiBnZXRCYWNrZW5kS2V5RGF0YShQR2Nvbm4gKmNvbm4sIGludCBtc2dMZW5ndGgp CiB7Ci0JdWludDgJCWNhbmNlbF9rZXlfbGVuOworCWludAkJCWNhbmNlbF9rZXlfbGVuOwog CiAJaWYgKGNvbm4tPmJlX2NhbmNlbF9rZXkpCiAJewpAQCAtMjEyMSw3ICsyMTIxLDcgQEAg cHFGdW5jdGlvbkNhbGwzKFBHY29ubiAqY29ubiwgT2lkIGZuaWQsCiAJCX0KIAkJZWxzZQog CQl7Ci0JCQlpZiAocHFQdXRuY2hhcigoY2hhciAqKSBhcmdzW2ldLnUucHRyLCBhcmdzW2ld LmxlbiwgY29ubikpCisJCQlpZiAocHFQdXRuY2hhcihhcmdzW2ldLnUucHRyLCBhcmdzW2ld LmxlbiwgY29ubikpCiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CkBAIC0yMjE1LDcgKzIy MTUsNyBAQCBwcUZ1bmN0aW9uQ2FsbDMoUEdjb25uICpjb25uLCBPaWQgZm5pZCwKIAkJCQkJ fQogCQkJCQllbHNlCiAJCQkJCXsKLQkJCQkJCWlmIChwcUdldG5jaGFyKChjaGFyICopIHJl c3VsdF9idWYsCisJCQkJCQlpZiAocHFHZXRuY2hhcihyZXN1bHRfYnVmLAogCQkJCQkJCQkJ ICAgKmFjdHVhbF9yZXN1bHRfbGVuLAogCQkJCQkJCQkJICAgY29ubikpCiAJCQkJCQkJY29u dGludWU7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCmluZGV4IDkzNjljMjE3ZmI1Li5h NmNmZDdmNWM5ZCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50 LmgKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKQEAgLTUzOSwxNiAr NTM5LDE2IEBAIHN0cnVjdCBwZ19jb25uCiAJCQkJCQkJCSAqIHRyaWVkIGhvc3QgKi8KIAli b29sCQlzZW5kX2FwcG5hbWU7CS8qIG9rYXkgdG8gc2VuZCBhcHBsaWNhdGlvbl9uYW1lPyAq LwogCXNpemVfdAkJc2NyYW1fY2xpZW50X2tleV9sZW47Ci0Jdm9pZAkgICAqc2NyYW1fY2xp ZW50X2tleV9iaW5hcnk7CS8qIGJpbmFyeSBTQ1JBTSBjbGllbnQga2V5ICovCisJdWludDgJ ICAgKnNjcmFtX2NsaWVudF9rZXlfYmluYXJ5OwkvKiBiaW5hcnkgU0NSQU0gY2xpZW50IGtl eSAqLwogCXNpemVfdAkJc2NyYW1fc2VydmVyX2tleV9sZW47Ci0Jdm9pZAkgICAqc2NyYW1f c2VydmVyX2tleV9iaW5hcnk7CS8qIGJpbmFyeSBTQ1JBTSBzZXJ2ZXIga2V5ICovCisJdWlu dDgJICAgKnNjcmFtX3NlcnZlcl9rZXlfYmluYXJ5OwkvKiBiaW5hcnkgU0NSQU0gc2VydmVy IGtleSAqLwogCVByb3RvY29sVmVyc2lvbiBtaW5fcHZlcnNpb247CS8qIHByb3RvY29sIHZl cnNpb24gdG8gcmVxdWVzdCAqLwogCVByb3RvY29sVmVyc2lvbiBtYXhfcHZlcnNpb247CS8q IHByb3RvY29sIHZlcnNpb24gdG8gcmVxdWVzdCAqLwogCiAJLyogTWlzY2VsbGFuZW91cyBz dHVmZiAqLwogCWludAkJCWJlX3BpZDsJCQkvKiBQSUQgb2YgYmFja2VuZCAtLS0gbmVlZGVk IGZvciBjYW5jZWxzICovCi0JY2hhcgkgICAqYmVfY2FuY2VsX2tleTsJLyogcXVlcnkgY2Fu Y2VsbGF0aW9uIGtleSBhbmQgaXRzIGxlbmd0aCAqLwotCXVpbnQxNgkJYmVfY2FuY2VsX2tl eV9sZW47CisJaW50CQkJYmVfY2FuY2VsX2tleV9sZW47CisJdWludDgJICAgKmJlX2NhbmNl bF9rZXk7CS8qIHF1ZXJ5IGNhbmNlbGxhdGlvbiBrZXkgKi8KIAlwZ1BhcmFtZXRlclN0YXR1 cyAqcHN0YXR1czsgLyogUGFyYW1ldGVyU3RhdHVzIGRhdGEgKi8KIAlpbnQJCQljbGllbnRf ZW5jb2Rpbmc7CS8qIGVuY29kaW5nIGlkICovCiAJYm9vbAkJc3RkX3N0cmluZ3M7CS8qIHN0 YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyAqLwpAQCAtNzg3LDkgKzc4Nyw5IEBAIGV4dGVy biBpbnQJcHFQdXRjKGNoYXIgYywgUEdjb25uICpjb25uKTsKIGV4dGVybiBpbnQJcHFHZXRz KFBRRXhwQnVmZmVyIGJ1ZiwgUEdjb25uICpjb25uKTsKIGV4dGVybiBpbnQJcHFHZXRzX2Fw cGVuZChQUUV4cEJ1ZmZlciBidWYsIFBHY29ubiAqY29ubik7CiBleHRlcm4gaW50CXBxUHV0 cyhjb25zdCBjaGFyICpzLCBQR2Nvbm4gKmNvbm4pOwotZXh0ZXJuIGludAlwcUdldG5jaGFy KGNoYXIgKnMsIHNpemVfdCBsZW4sIFBHY29ubiAqY29ubik7CitleHRlcm4gaW50CXBxR2V0 bmNoYXIodm9pZCAqcywgc2l6ZV90IGxlbiwgUEdjb25uICpjb25uKTsKIGV4dGVybiBpbnQJ cHFTa2lwbmNoYXIoc2l6ZV90IGxlbiwgUEdjb25uICpjb25uKTsKLWV4dGVybiBpbnQJcHFQ dXRuY2hhcihjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLCBQR2Nvbm4gKmNvbm4pOworZXh0 ZXJuIGludAlwcVB1dG5jaGFyKGNvbnN0IHZvaWQgKnMsIHNpemVfdCBsZW4sIFBHY29ubiAq Y29ubik7CiBleHRlcm4gaW50CXBxR2V0SW50KGludCAqcmVzdWx0LCBzaXplX3QgYnl0ZXMs IFBHY29ubiAqY29ubik7CiBleHRlcm4gaW50CXBxUHV0SW50KGludCB2YWx1ZSwgc2l6ZV90 IGJ5dGVzLCBQR2Nvbm4gKmNvbm4pOwogZXh0ZXJuIGludAlwcVB1dE1zZ1N0YXJ0KGNoYXIg bXNnX3R5cGUsIFBHY29ubiAqY29ubik7Ci0tIAoyLjM5LjUKCg== --------------Anu4Xs9AbgB8J5z5YLIGTzTU Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-WIP-use-uint8-in-more-places-for-byte-arrays.patch" Content-Disposition: attachment; filename*0="v2-0002-WIP-use-uint8-in-more-places-for-byte-arrays.patch" Content-Transfer-Encoding: base64 RnJvbSBlNTE4YjkzZTQ4ZmU5YTE0ZjUzMjhlNDIzZTEwZTQ0YjhjOTJiNjk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgOSBBcHIgMjAyNSAxMzo0NToxMCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjIgMi8yXSBXSVA6IHVzZSAndWludDggKicgaW4gbW9yZSBwbGFj ZXMgZm9yIGJ5dGUgYXJyYXlzCgotLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0u YyAgICAgICB8IDI2ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9s aWJwcS9hdXRoLmMgICAgICAgICAgICAgfCAgNCArKy0tCiBzcmMvYmFja2VuZC9saWJwcS9j cnlwdC5jICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9jb21tb24vbWQ1X2NvbW1vbi5j ICAgICAgICAgICAgICB8ICA0ICsrLS0KIHNyYy9pbmNsdWRlL2NvbW1vbi9tZDUuaCAgICAg ICAgICAgICB8ICA0ICsrLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2F1dGguaCAgICAgICAgICAg ICB8ICAyICstCiBzcmMvaW5jbHVkZS9saWJwcS9jcnlwdC5oICAgICAgICAgICAgfCAgMiAr LQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jIHwgIDIgKy0KIHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYyAgICAgICB8ICA4ICsrKystLS0tCiA5IGZpbGVz IGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2F1dGgtc2NyYW0uYwppbmRleCBmODAzMzNiYjUzMy4uNmJhODIxMjMyNmQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYworKysgYi9zcmMvYmFja2VuZC9s aWJwcS9hdXRoLXNjcmFtLmMKQEAgLTE1OCw3ICsxNTgsNyBAQCB0eXBlZGVmIHN0cnVjdAog CS8qIEZpZWxkcyBmcm9tIHRoZSBsYXN0IG1lc3NhZ2UgZnJvbSBjbGllbnQgKi8KIAljaGFy CSAgICpjbGllbnRfZmluYWxfbWVzc2FnZV93aXRob3V0X3Byb29mOwogCWNoYXIJICAgKmNs aWVudF9maW5hbF9ub25jZTsKLQljaGFyCQlDbGllbnRQcm9vZltTQ1JBTV9NQVhfS0VZX0xF Tl07CisJdWludDgJCUNsaWVudFByb29mW1NDUkFNX01BWF9LRVlfTEVOXTsKIAogCS8qIEZp ZWxkcyBnZW5lcmF0ZWQgaW4gdGhlIHNlcnZlciAqLwogCWNoYXIJICAgKnNlcnZlcl9maXJz dF9tZXNzYWdlOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0YXRpYyB2b2lkIG1vY2tfc2NyYW1f c2VjcmV0KGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBwZ19jcnlwdG9oYXNoX3R5cGUgKmhhc2hf dHlwCiBzdGF0aWMgYm9vbCBpc19zY3JhbV9wcmludGFibGUoY2hhciAqcCk7CiBzdGF0aWMg Y2hhciAqc2FuaXRpemVfY2hhcihjaGFyIGMpOwogc3RhdGljIGNoYXIgKnNhbml0aXplX3N0 cihjb25zdCBjaGFyICpzKTsKLXN0YXRpYyBjaGFyICpzY3JhbV9tb2NrX3NhbHQoY29uc3Qg Y2hhciAqdXNlcm5hbWUsCitzdGF0aWMgdWludDggKnNjcmFtX21vY2tfc2FsdChjb25zdCBj aGFyICp1c2VybmFtZSwKIAkJCQkJCQkgcGdfY3J5cHRvaGFzaF90eXBlIGhhc2hfdHlwZSwK IAkJCQkJCQkgaW50IGtleV9sZW5ndGgpOwogCkBAIC01MjQsNyArNTI0LDcgQEAgc2NyYW1f dmVyaWZ5X3BsYWluX3Bhc3N3b3JkKGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBjb25zdCBjaGFy ICpwYXNzd29yZCwKIAkJCQkJCQljb25zdCBjaGFyICpzZWNyZXQpCiB7CiAJY2hhcgkgICAq ZW5jb2RlZF9zYWx0OwotCWNoYXIJICAgKnNhbHQ7CisJdWludDgJICAgKnNhbHQ7CiAJaW50 CQkJc2FsdGxlbjsKIAlpbnQJCQlpdGVyYXRpb25zOwogCWludAkJCWtleV9sZW5ndGggPSAw OwpAQCAtNjA5LDkgKzYwOSw5IEBAIHBhcnNlX3NjcmFtX3NlY3JldChjb25zdCBjaGFyICpz ZWNyZXQsIGludCAqaXRlcmF0aW9ucywKIAljaGFyCSAgICpzdG9yZWRrZXlfc3RyOwogCWNo YXIJICAgKnNlcnZlcmtleV9zdHI7CiAJaW50CQkJZGVjb2RlZF9sZW47Ci0JY2hhcgkgICAq ZGVjb2RlZF9zYWx0X2J1ZjsKLQljaGFyCSAgICpkZWNvZGVkX3N0b3JlZF9idWY7Ci0JY2hh cgkgICAqZGVjb2RlZF9zZXJ2ZXJfYnVmOworCXVpbnQ4CSAgICpkZWNvZGVkX3NhbHRfYnVm OworCXVpbnQ4CSAgICpkZWNvZGVkX3N0b3JlZF9idWY7CisJdWludDgJICAgKmRlY29kZWRf c2VydmVyX2J1ZjsKIAogCS8qCiAJICogVGhlIHNlY3JldCBpcyBvZiBmb3JtOgpAQCAtNjk4 LDcgKzY5OCw3IEBAIG1vY2tfc2NyYW1fc2VjcmV0KGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBw Z19jcnlwdG9oYXNoX3R5cGUgKmhhc2hfdHlwZSwKIAkJCQkgIGludCAqaXRlcmF0aW9ucywg aW50ICprZXlfbGVuZ3RoLCBjaGFyICoqc2FsdCwKIAkJCQkgIHVpbnQ4ICpzdG9yZWRfa2V5 LCB1aW50OCAqc2VydmVyX2tleSkKIHsKLQljaGFyCSAgICpyYXdfc2FsdDsKKwl1aW50OAkg ICAqcmF3X3NhbHQ7CiAJY2hhcgkgICAqZW5jb2RlZF9zYWx0OwogCWludAkJCWVuY29kZWRf bGVuOwogCkBAIC0xMjMxLDcgKzEyMzEsNyBAQCBidWlsZF9zZXJ2ZXJfZmlyc3RfbWVzc2Fn ZShzY3JhbV9zdGF0ZSAqc3RhdGUpCiAJICogRm9yIGNvbnZlbmllbmNlLCBob3dldmVyLCB3 ZSBkb24ndCB1c2UgdGhlIHdob2xlIHJhbmdlIGF2YWlsYWJsZSwKIAkgKiByYXRoZXIsIHdl IGdlbmVyYXRlIHNvbWUgcmFuZG9tIGJ5dGVzLCBhbmQgYmFzZTY0IGVuY29kZSB0aGVtLgog CSAqLwotCWNoYXIJCXJhd19ub25jZVtTQ1JBTV9SQVdfTk9OQ0VfTEVOXTsKKwl1aW50OAkJ cmF3X25vbmNlW1NDUkFNX1JBV19OT05DRV9MRU5dOwogCWludAkJCWVuY29kZWRfbGVuOwog CiAJaWYgKCFwZ19zdHJvbmdfcmFuZG9tKHJhd19ub25jZSwgU0NSQU1fUkFXX05PTkNFX0xF TikpCkBAIC0xMjcxLDcgKzEyNzEsNyBAQCByZWFkX2NsaWVudF9maW5hbF9tZXNzYWdlKHNj cmFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqaW5wdXQpCiAJY2hhcgkgICAqYmVnaW4s CiAJCQkgICAqcHJvb2Y7CiAJY2hhcgkgICAqcDsKLQljaGFyCSAgICpjbGllbnRfcHJvb2Y7 CisJdWludDgJICAgKmNsaWVudF9wcm9vZjsKIAlpbnQJCQljbGllbnRfcHJvb2ZfbGVuOwog CiAJYmVnaW4gPSBwID0gcHN0cmR1cChpbnB1dCk7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBy ZWFkX2NsaWVudF9maW5hbF9tZXNzYWdlKHNjcmFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hh ciAqaW5wdXQpCiAJCWI2NF9tZXNzYWdlX2xlbiA9IHBnX2I2NF9lbmNfbGVuKGNiaW5kX2lu cHV0X2xlbik7CiAJCS8qIGRvbid0IGZvcmdldCB0aGUgemVyby10ZXJtaW5hdG9yICovCiAJ CWI2NF9tZXNzYWdlID0gcGFsbG9jKGI2NF9tZXNzYWdlX2xlbiArIDEpOwotCQliNjRfbWVz c2FnZV9sZW4gPSBwZ19iNjRfZW5jb2RlKGNiaW5kX2lucHV0LCBjYmluZF9pbnB1dF9sZW4s CisJCWI2NF9tZXNzYWdlX2xlbiA9IHBnX2I2NF9lbmNvZGUoKHVpbnQ4ICopIGNiaW5kX2lu cHV0LCBjYmluZF9pbnB1dF9sZW4sCiAJCQkJCQkJCQkJYjY0X21lc3NhZ2UsIGI2NF9tZXNz YWdlX2xlbik7CiAJCWlmIChiNjRfbWVzc2FnZV9sZW4gPCAwKQogCQkJZWxvZyhFUlJPUiwg ImNvdWxkIG5vdCBlbmNvZGUgY2hhbm5lbCBiaW5kaW5nIGRhdGEiKTsKQEAgLTE0NDAsNyAr MTQ0MCw3IEBAIGJ1aWxkX3NlcnZlcl9maW5hbF9tZXNzYWdlKHNjcmFtX3N0YXRlICpzdGF0 ZSkKIAlzaWdsZW4gPSBwZ19iNjRfZW5jX2xlbihzdGF0ZS0+a2V5X2xlbmd0aCk7CiAJLyog ZG9uJ3QgZm9yZ2V0IHRoZSB6ZXJvLXRlcm1pbmF0b3IgKi8KIAlzZXJ2ZXJfc2lnbmF0dXJl X2Jhc2U2NCA9IHBhbGxvYyhzaWdsZW4gKyAxKTsKLQlzaWdsZW4gPSBwZ19iNjRfZW5jb2Rl KChjb25zdCBjaGFyICopIFNlcnZlclNpZ25hdHVyZSwKKwlzaWdsZW4gPSBwZ19iNjRfZW5j b2RlKFNlcnZlclNpZ25hdHVyZSwKIAkJCQkJCSAgIHN0YXRlLT5rZXlfbGVuZ3RoLCBzZXJ2 ZXJfc2lnbmF0dXJlX2Jhc2U2NCwKIAkJCQkJCSAgIHNpZ2xlbik7CiAJaWYgKHNpZ2xlbiA8 IDApCkBAIC0xNDY3LDcgKzE0NjcsNyBAQCBidWlsZF9zZXJ2ZXJfZmluYWxfbWVzc2FnZShz Y3JhbV9zdGF0ZSAqc3RhdGUpCiAgKiBoYXNoIGJhc2VkIG9uIHRoZSB1c2VybmFtZSBhbmQg YSBjbHVzdGVyLWxldmVsIHNlY3JldCBrZXkuICBSZXR1cm5zIGEKICAqIHBvaW50ZXIgdG8g YSBzdGF0aWMgYnVmZmVyIG9mIHNpemUgU0NSQU1fREVGQVVMVF9TQUxUX0xFTiwgb3IgTlVM TC4KICAqLwotc3RhdGljIGNoYXIgKgorc3RhdGljIHVpbnQ4ICoKIHNjcmFtX21vY2tfc2Fs dChjb25zdCBjaGFyICp1c2VybmFtZSwgcGdfY3J5cHRvaGFzaF90eXBlIGhhc2hfdHlwZSwK IAkJCQlpbnQga2V5X2xlbmd0aCkKIHsKQEAgLTE1MDEsNSArMTUwMSw1IEBAIHNjcmFtX21v Y2tfc2FsdChjb25zdCBjaGFyICp1c2VybmFtZSwgcGdfY3J5cHRvaGFzaF90eXBlIGhhc2hf dHlwZSwKIAl9CiAJcGdfY3J5cHRvaGFzaF9mcmVlKGN0eCk7CiAKLQlyZXR1cm4gKGNoYXIg Kikgc2hhX2RpZ2VzdDsKKwlyZXR1cm4gc2hhX2RpZ2VzdDsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwppbmRl eCBlMTg2ODNjNDdlNy4uOWY0ZDA1ZmZiZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xp YnBxL2F1dGguYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMKQEAgLTY2Niw3ICs2 NjYsNyBAQCBDbGllbnRBdXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogICogU2VuZCBhbiBh dXRoZW50aWNhdGlvbiByZXF1ZXN0IHBhY2tldCB0byB0aGUgZnJvbnRlbmQuCiAgKi8KIHZv aWQKLXNlbmRBdXRoUmVxdWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxLCBjb25z dCBjaGFyICpleHRyYWRhdGEsIGludCBleHRyYWxlbikKK3NlbmRBdXRoUmVxdWVzdChQb3J0 ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxLCBjb25zdCB2b2lkICpleHRyYWRhdGEsIGludCBl eHRyYWxlbikKIHsKIAlTdHJpbmdJbmZvRGF0YSBidWY7CiAKQEAgLTg3NCw3ICs4NzQsNyBA QCBDaGVja1BXQ2hhbGxlbmdlQXV0aChQb3J0ICpwb3J0LCBjb25zdCBjaGFyICoqbG9nZGV0 YWlsKQogc3RhdGljIGludAogQ2hlY2tNRDVBdXRoKFBvcnQgKnBvcnQsIGNoYXIgKnNoYWRv d19wYXNzLCBjb25zdCBjaGFyICoqbG9nZGV0YWlsKQogewotCWNoYXIJCW1kNVNhbHRbNF07 CQkvKiBQYXNzd29yZCBzYWx0ICovCisJdWludDgJCW1kNVNhbHRbNF07CQkvKiBQYXNzd29y ZCBzYWx0ICovCiAJY2hhcgkgICAqcGFzc3dkOwogCWludAkJCXJlc3VsdDsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvY3J5cHQuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2Ny eXB0LmMKaW5kZXggY2JiODVhMjdjYzEuLmY2YjY0MWU3MjZlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9saWJwcS9jcnlwdC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2NyeXB0LmMK QEAgLTEzNiw3ICsxMzYsNyBAQCBlbmNyeXB0X3Bhc3N3b3JkKFBhc3N3b3JkVHlwZSB0YXJn ZXRfdHlwZSwgY29uc3QgY2hhciAqcm9sZSwKIAkJCWNhc2UgUEFTU1dPUkRfVFlQRV9NRDU6 CiAJCQkJZW5jcnlwdGVkX3Bhc3N3b3JkID0gcGFsbG9jKE1ENV9QQVNTV0RfTEVOICsgMSk7 CiAKLQkJCQlpZiAoIXBnX21kNV9lbmNyeXB0KHBhc3N3b3JkLCByb2xlLCBzdHJsZW4ocm9s ZSksCisJCQkJaWYgKCFwZ19tZDVfZW5jcnlwdChwYXNzd29yZCwgKHVpbnQ4ICopIHJvbGUs IHN0cmxlbihyb2xlKSwKIAkJCQkJCQkJCWVuY3J5cHRlZF9wYXNzd29yZCwgJmVycnN0cikp CiAJCQkJCWVsb2coRVJST1IsICJwYXNzd29yZCBlbmNyeXB0aW9uIGZhaWxlZDogJXMiLCBl cnJzdHIpOwogCQkJCWJyZWFrOwpAQCAtMjAxLDcgKzIwMSw3IEBAIGVuY3J5cHRfcGFzc3dv cmQoUGFzc3dvcmRUeXBlIHRhcmdldF90eXBlLCBjb25zdCBjaGFyICpyb2xlLAogaW50CiBt ZDVfY3J5cHRfdmVyaWZ5KGNvbnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIgKnNoYWRvd19w YXNzLAogCQkJCSBjb25zdCBjaGFyICpjbGllbnRfcGFzcywKLQkJCQkgY29uc3QgY2hhciAq bWQ1X3NhbHQsIGludCBtZDVfc2FsdF9sZW4sCisJCQkJIGNvbnN0IHVpbnQ4ICptZDVfc2Fs dCwgaW50IG1kNV9zYWx0X2xlbiwKIAkJCQkgY29uc3QgY2hhciAqKmxvZ2RldGFpbCkKIHsK IAlpbnQJCQlyZXR2YWw7CkBAIC0yODQsNyArMjg0LDcgQEAgcGxhaW5fY3J5cHRfdmVyaWZ5 KGNvbnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzLAogCiAJCWNhc2Ug UEFTU1dPUkRfVFlQRV9NRDU6CiAJCQlpZiAoIXBnX21kNV9lbmNyeXB0KGNsaWVudF9wYXNz LAotCQkJCQkJCQlyb2xlLAorCQkJCQkJCQkodWludDggKikgcm9sZSwKIAkJCQkJCQkJc3Ry bGVuKHJvbGUpLAogCQkJCQkJCQljcnlwdF9jbGllbnRfcGFzcywKIAkJCQkJCQkJJmVycnN0 cikpCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL21kNV9jb21tb24uYyBiL3NyYy9jb21tb24v bWQ1X2NvbW1vbi5jCmluZGV4IDYxZTM5NmIwYmJmLi4wNTdhZTdhNDQ5ZiAxMDA2NDQKLS0t IGEvc3JjL2NvbW1vbi9tZDVfY29tbW9uLmMKKysrIGIvc3JjL2NvbW1vbi9tZDVfY29tbW9u LmMKQEAgLTEwNSw3ICsxMDUsNyBAQCBwZ19tZDVfaGFzaChjb25zdCB2b2lkICpidWZmLCBz aXplX3QgbGVuLCBjaGFyICpoZXhzdW0sIGNvbnN0IGNoYXIgKiplcnJzdHIpCiAgKiAob2Yg c2l6ZSBNRDVfRElHRVNUX0xFTkdUSCkgcmF0aGVyIHRoYW4gYmVpbmcgY29udmVydGVkIHRv IEFTQ0lJIGhleC4KICAqLwogYm9vbAotcGdfbWQ1X2JpbmFyeShjb25zdCB2b2lkICpidWZm LCBzaXplX3QgbGVuLCB2b2lkICpvdXRidWYsIGNvbnN0IGNoYXIgKiplcnJzdHIpCitwZ19t ZDVfYmluYXJ5KGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBsZW4sIHVpbnQ4ICpvdXRidWYs IGNvbnN0IGNoYXIgKiplcnJzdHIpCiB7CiAJcGdfY3J5cHRvaGFzaF9jdHggKmN0eDsKIApA QCAtMTQyLDcgKzE0Miw3IEBAIHBnX21kNV9iaW5hcnkoY29uc3Qgdm9pZCAqYnVmZiwgc2l6 ZV90IGxlbiwgdm9pZCAqb3V0YnVmLCBjb25zdCBjaGFyICoqZXJyc3RyKQogICogZXJyb3Ig Y29udGV4dC4KICAqLwogYm9vbAotcGdfbWQ1X2VuY3J5cHQoY29uc3QgY2hhciAqcGFzc3dk LCBjb25zdCBjaGFyICpzYWx0LCBzaXplX3Qgc2FsdF9sZW4sCitwZ19tZDVfZW5jcnlwdChj b25zdCBjaGFyICpwYXNzd2QsIGNvbnN0IHVpbnQ4ICpzYWx0LCBzaXplX3Qgc2FsdF9sZW4s CiAJCQkgICBjaGFyICpidWYsIGNvbnN0IGNoYXIgKiplcnJzdHIpCiB7CiAJc2l6ZV90CQlw YXNzd2RfbGVuID0gc3RybGVuKHBhc3N3ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tb24vbWQ1LmggYi9zcmMvaW5jbHVkZS9jb21tb24vbWQ1LmgKaW5kZXggMThmZmQ5OTg0 NTMuLjBjOWFlNDg4OGYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vbWQ1LmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL21kNS5oCkBAIC0yOCw5ICsyOCw5IEBACiAvKiBV dGlsaXRpZXMgY29tbW9uIHRvIGFsbCB0aGUgTUQ1IGltcGxlbWVudGF0aW9ucywgYXMgb2Yg bWQ1X2NvbW1vbi5jICovCiBleHRlcm4gYm9vbCBwZ19tZDVfaGFzaChjb25zdCB2b2lkICpi dWZmLCBzaXplX3QgbGVuLCBjaGFyICpoZXhzdW0sCiAJCQkJCQljb25zdCBjaGFyICoqZXJy c3RyKTsKLWV4dGVybiBib29sIHBnX21kNV9iaW5hcnkoY29uc3Qgdm9pZCAqYnVmZiwgc2l6 ZV90IGxlbiwgdm9pZCAqb3V0YnVmLAorZXh0ZXJuIGJvb2wgcGdfbWQ1X2JpbmFyeShjb25z dCB2b2lkICpidWZmLCBzaXplX3QgbGVuLCB1aW50OCAqb3V0YnVmLAogCQkJCQkJICBjb25z dCBjaGFyICoqZXJyc3RyKTsKLWV4dGVybiBib29sIHBnX21kNV9lbmNyeXB0KGNvbnN0IGNo YXIgKnBhc3N3ZCwgY29uc3QgY2hhciAqc2FsdCwKK2V4dGVybiBib29sIHBnX21kNV9lbmNy eXB0KGNvbnN0IGNoYXIgKnBhc3N3ZCwgY29uc3QgdWludDggKnNhbHQsCiAJCQkJCQkgICBz aXplX3Qgc2FsdF9sZW4sIGNoYXIgKmJ1ZiwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKiplcnJz dHIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9hdXRoLmggYi9zcmMvaW5j bHVkZS9saWJwcS9hdXRoLmgKaW5kZXggMjViNTc0MjA2OGYuLmNjOTY0M2NjZTJmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9hdXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvbGli cHEvYXV0aC5oCkBAIC0zNyw3ICszNyw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHBn X2tyYl9jYXNlaW5zX3VzZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcGdfZ3NzX2Fj Y2VwdF9kZWxlZ2F0aW9uOwogCiBleHRlcm4gdm9pZCBDbGllbnRBdXRoZW50aWNhdGlvbihQ b3J0ICpwb3J0KTsKLWV4dGVybiB2b2lkIHNlbmRBdXRoUmVxdWVzdChQb3J0ICpwb3J0LCBB dXRoUmVxdWVzdCBhcmVxLCBjb25zdCBjaGFyICpleHRyYWRhdGEsCitleHRlcm4gdm9pZCBz ZW5kQXV0aFJlcXVlc3QoUG9ydCAqcG9ydCwgQXV0aFJlcXVlc3QgYXJlcSwgY29uc3Qgdm9p ZCAqZXh0cmFkYXRhLAogCQkJCQkJCWludCBleHRyYWxlbik7CiBleHRlcm4gdm9pZCBzZXRf YXV0aG5faWQoUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqaWQpOwogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9saWJwcS9jcnlwdC5oIGIvc3JjL2luY2x1ZGUvbGlicHEvY3J5cHQuaApp bmRleCBkZWU0Nzc0MjhlNC4uYTFiNGIzNjMxNDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2xpYnBxL2NyeXB0LmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvY3J5cHQuaApAQCAtNTEs NyArNTEsNyBAQCBleHRlcm4gY2hhciAqZW5jcnlwdF9wYXNzd29yZChQYXNzd29yZFR5cGUg dGFyZ2V0X3R5cGUsIGNvbnN0IGNoYXIgKnJvbGUsCiBleHRlcm4gY2hhciAqZ2V0X3JvbGVf cGFzc3dvcmQoY29uc3QgY2hhciAqcm9sZSwgY29uc3QgY2hhciAqKmxvZ2RldGFpbCk7CiAK IGV4dGVybiBpbnQJbWQ1X2NyeXB0X3ZlcmlmeShjb25zdCBjaGFyICpyb2xlLCBjb25zdCBj aGFyICpzaGFkb3dfcGFzcywKLQkJCQkJCQkgY29uc3QgY2hhciAqY2xpZW50X3Bhc3MsIGNv bnN0IGNoYXIgKm1kNV9zYWx0LAorCQkJCQkJCSBjb25zdCBjaGFyICpjbGllbnRfcGFzcywg Y29uc3QgdWludDggKm1kNV9zYWx0LAogCQkJCQkJCSBpbnQgbWQ1X3NhbHRfbGVuLCBjb25z dCBjaGFyICoqbG9nZGV0YWlsKTsKIGV4dGVybiBpbnQJcGxhaW5fY3J5cHRfdmVyaWZ5KGNv bnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIgKnNoYWRvd19wYXNzLAogCQkJCQkJCSAgIGNv bnN0IGNoYXIgKmNsaWVudF9wYXNzLApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtYXV0aC1zY3JhbS5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3Jh bS5jCmluZGV4IDNiYWJiYzhkNTIyLi44MDdlZTFmNWQwZCAxMDA2NDQKLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtc2NyYW0uYwpAQCAtNzcsNyArNzcsNyBAQCB0eXBlZGVmIHN0cnVjdAog CiAJLyogVGhlc2UgY29tZSBmcm9tIHRoZSBzZXJ2ZXItZmluYWwgbWVzc2FnZSAqLwogCWNo YXIJICAgKnNlcnZlcl9maW5hbF9tZXNzYWdlOwotCWNoYXIJCVNlcnZlclNpZ25hdHVyZVtT Q1JBTV9NQVhfS0VZX0xFTl07CisJdWludDgJCVNlcnZlclNpZ25hdHVyZVtTQ1JBTV9NQVhf S0VZX0xFTl07CiB9IGZlX3NjcmFtX3N0YXRlOwogCiBzdGF0aWMgYm9vbCByZWFkX3NlcnZl cl9maXJzdF9tZXNzYWdlKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSwgY2hhciAqaW5wdXQpOwpk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtYXV0aC5jCmluZGV4IGVjN2E5MjM2MDQ0Li44NGEwNDIyNjlkZSAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jCisrKyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGguYwpAQCAtNzk4LDcgKzc5OCw3IEBAIHBnX3Bhc3N3 b3JkX3NlbmRhdXRoKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGFzc3dvcmQsIEF1dGhS ZXF1ZXN0IGFyZXEpCiAJaW50CQkJcmV0OwogCWNoYXIJICAgKmNyeXB0X3B3ZCA9IE5VTEw7 CiAJY29uc3QgY2hhciAqcHdkX3RvX3NlbmQ7Ci0JY2hhcgkJbWQ1U2FsdFs0XTsKKwl1aW50 OAkJbWQ1U2FsdFs0XTsKIAogCS8qIFJlYWQgdGhlIHNhbHQgZnJvbSB0aGUgQXV0aGVudGlj YXRpb25NRDVQYXNzd29yZCBtZXNzYWdlLiAqLwogCWlmIChhcmVxID09IEFVVEhfUkVRX01E NSkKQEAgLTgyOSw3ICs4MjksNyBAQCBwZ19wYXNzd29yZF9zZW5kYXV0aChQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBBdXRoUmVxdWVzdCBhcmVxKQogCQkJCX0KIAog CQkJCWNyeXB0X3B3ZDIgPSBjcnlwdF9wd2QgKyBNRDVfUEFTU1dEX0xFTiArIDE7Ci0JCQkJ aWYgKCFwZ19tZDVfZW5jcnlwdChwYXNzd29yZCwgY29ubi0+cGd1c2VyLAorCQkJCWlmICgh cGdfbWQ1X2VuY3J5cHQocGFzc3dvcmQsICh1aW50OCAqKSBjb25uLT5wZ3VzZXIsCiAJCQkJ CQkJCQlzdHJsZW4oY29ubi0+cGd1c2VyKSwgY3J5cHRfcHdkMiwKIAkJCQkJCQkJCSZlcnJz dHIpKQogCQkJCXsKQEAgLTEzNjksNyArMTM2OSw3IEBAIFBRZW5jcnlwdFBhc3N3b3JkKGNv bnN0IGNoYXIgKnBhc3N3ZCwgY29uc3QgY2hhciAqdXNlcikKIAlpZiAoIWNyeXB0X3B3ZCkK IAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIXBnX21kNV9lbmNyeXB0KHBhc3N3ZCwgdXNlciwg c3RybGVuKHVzZXIpLCBjcnlwdF9wd2QsICZlcnJzdHIpKQorCWlmICghcGdfbWQ1X2VuY3J5 cHQocGFzc3dkLCAodWludDggKikgdXNlciwgc3RybGVuKHVzZXIpLCBjcnlwdF9wd2QsICZl cnJzdHIpKQogCXsKIAkJZnJlZShjcnlwdF9wd2QpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE0 ODIsNyArMTQ4Miw3IEBAIFBRZW5jcnlwdFBhc3N3b3JkQ29ubihQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnBhc3N3ZCwgY29uc3QgY2hhciAqdXNlciwKIAkJewogCQkJY29uc3QgY2hh ciAqZXJyc3RyID0gTlVMTDsKIAotCQkJaWYgKCFwZ19tZDVfZW5jcnlwdChwYXNzd2QsIHVz ZXIsIHN0cmxlbih1c2VyKSwgY3J5cHRfcHdkLCAmZXJyc3RyKSkKKwkJCWlmICghcGdfbWQ1 X2VuY3J5cHQocGFzc3dkLCAodWludDggKikgdXNlciwgc3RybGVuKHVzZXIpLCBjcnlwdF9w d2QsICZlcnJzdHIpKQogCQkJewogCQkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4s ICJjb3VsZCBub3QgZW5jcnlwdCBwYXNzd29yZDogJXMiLCBlcnJzdHIpOwogCQkJCWZyZWUo Y3J5cHRfcHdkKTsKLS0gCjIuMzkuNQoK --------------Anu4Xs9AbgB8J5z5YLIGTzTU--