Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YcXJU-0004zL-HU for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2015 10:53:01 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YcXJT-00031P-V5 for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2015 10:53:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YcXJQ-00031G-HS for pgsql-hackers@postgresql.org; Mon, 30 Mar 2015 10:52:56 +0000 Received: from mail-wi0-x22a.google.com ([2a00:1450:400c:c05::22a]) by magus.postgresql.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YcXJL-0001pJ-JG for pgsql-hackers@postgresql.org; Mon, 30 Mar 2015 10:52:55 +0000 Received: by wiaa2 with SMTP id a2so123394663wia.0 for ; Mon, 30 Mar 2015 03:52:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:reply-to:user-agent:mime-version:to :subject:content-type; bh=NA6O76hFB/LKaHabPGPgm/B+JnqVqwPNe4ZtbI+CR1k=; b=hjZa1V31/Rx0jVdT53vf00/guEO9dmAbcCOCLj4lkIwhmPxJ2UcVwA346Q1i8OstIr BYpMBhY3m1oR8mOfJ2+Dz/SEWVQacQTWLsdCxzd2LoaLchkElsqkUGjoV6Gr1KDg3Or8 jqeaGn3pPfSEZvFY8jov5h1XwXyoZRvZlvwQTd236v37BGa+MSUv2u4ahEt3Mj+VC2fR td308rjIVOiDrGCmio5en422AmTaxqH5L3RKHxGDr41U3YPoKzIZJQOKc4GNeEpsmpp5 Q4UDM8hNEYJ86y/3gkfM9kTljGjm6iwU9q/otdpvQ5eBa0eNQ9buqx7qhcEAIq6SK44h KT8g== X-Received: by 10.180.187.171 with SMTP id ft11mr21844386wic.0.1427712769630; Mon, 30 Mar 2015 03:52:49 -0700 (PDT) Received: from [192.168.1.99] (dsl-hkibrasgw1-58c38f-82.dhcp.inet.fi. [88.195.143.82]) by mx.google.com with ESMTPSA id ch6sm15212770wjc.3.2015.03.30.03.52.47 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Mar 2015 03:52:48 -0700 (PDT) Message-ID: <55192AFE.6080106@iki.fi> Date: Mon, 30 Mar 2015 13:52:46 +0300 From: Heikki Linnakangas Reply-To: hlinnaka@iki.fi User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.5.0 MIME-Version: 1.0 To: pgsql-hackers Subject: WIP: SCRAM authentication Content-Type: multipart/mixed; boundary="------------040108050703030703070702" X-Pg-Spam-Score: -2.3 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------040108050703030703070702 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit There have been numerous threads on replacing our MD5 authentication method, so I started hacking on that to see what it might look like. Just to be clear, this is 9.6 material. Attached is a WIP patch series that adds support for SCRAM. There's no need to look at the details yet, but it demonstrates what the protocol changes and the code structure would be like. I'm not wedded to SCRAM - SRP or JPAKE or something else might be better. But replacing the algorithm, or adding more of them, should be straightforward with this. There is no negotiation of the authentication mechanism. SCRAM is just added as a new one, alongside all the existing ones. If the server requests SCRAM authentication, but the client doesn't support it, the attempt will fail. We might want to do something about that, to make the transition easier, but it's an orthogonal feature and not absolutely required. There are four patches in the series. The first two are just refactoring: moving the SHA-1 implementation from pgcrypto to src/common, and some refactoring in src/backend/auth.c that IMHO would make sense anyway. Patches three and four are the interesting ones: 3. Allow storing multiple verifiers in pg_authid ------------------------------------------------ Replace the pg_authid.rolpassword text field with an array, and rename it to 'rolverifiers'. This allows storing multiple password hashes: an MD5 hash for MD5 authentication, and a SCRAM salt and stored key for SCRAM authentication, etc. Each element in the array is a string that begins with the method's name. For example "md5:", or "password:". For dump/reload, and for clients that wish to create the hashes in the client-side, there is a new option to CREATE/ALTER USER commands: PASSWORD VERIFIERS '{ ... }', that allows replacing the array. The old "ENCRYPTED/UNENCRYPTED PASSWORD 'foo'" options are still supported for backwards-compatibility, but it's not clear what it should mean now. TODO: * Password-checking hook needs to be redesigned, to allow for more kinds of hashes. * With "CREATE USER PASSWORD 'foo'", which hashes/verifiers should be generated by default? We currently have a boolean password_encryption setting for that. Needs to be a list. 4. Implement SCRAM ------------------ The protocol and the code is structured so that it would be fairly easy to add more built-in SASL mechanisms, or to use a SASL library to provide more. But for now I'm focusing on adding exactly one new built-in mechanism, to replace MD5 in the long term. In the protocol, there is a new AuthenticationSASL message, alongside the existing AuthenticationMD5, AuthenticationSSPI etc. The AuthenticationSASL message contains the name of the SASL mechanism used ("SCRAM-SHA-1"). Just like in the GSSAPI/SSPI authentication, a number of PasswordMessage and AuthenticationSASLContinue messages are exchanged after that, carrying the data specified by the SCRAM spec, until the authentication succeeds (or not). TODO: * Per the SCRAM specification, the client sends the username in the handshake. But in the FE/BE protocol, we've already sent it in the startup packet. In the patch, libpq always sends an empty username in the SCRAM exchange, and the username from the startup packet is what matters. We could also require it to be the same, but in SCRAM the username to be UTF-8 encoded, while in PostgreSQL the username can be in any encoding. That is a source of annoyance in itself, as it's not well-defined in PostgreSQL which encoding to use when sending a username to the server. But I don't want to try fixing that in this patch, so it seems easiest to just require the username to be empty. * Need a source of randomness in client, to generate random nonces used in the handshake. The SCRAM specification is not explicit about it, but I believe it doesn't need to be unpredictable, as long as a different nonce is used for each authentication. * The client does not authenticate the server, even though the SCRAM protocol allows that. The client does verify the proof the server sends, but nothing stops a malicious server that's impersonating the real server from not requesting SCRAM authentication in the first place. It could just send AuthenticationOK without any authentication at all. To take advantage of the server authentication, we'll need to add something similar to the "sslmode=verify-ca" option in the client. In that mode, the client should refuse the connection if the server doesn't request SCRAM authentication (or some other future authentication mechanism that authenticates the server to the client). * Channel binding is not implemented. Not essential, but would be nice to have. Together with the new client option mentioned in the previous point, it would allow the client to know that there is no man-in-the-middle, without having to verify the server's SSL certificate. - Heikki --------------040108050703030703070702 Content-Type: application/x-patch; name="0001-Move-sha1.c-to-src-common.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Move-sha1.c-to-src-common.patch" RnJvbSAxMTVhYjU5YWJhOWM3YjQyNzgzNDkwN2RlYTg1ZWYwMjZmZDA2YzEz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFr YW5nYXMgPGhlaWtraS5saW5uYWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwg NSBNYXIgMjAxNSAyMDozNzozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS80 XSBNb3ZlIHNoYTEuYyB0byBzcmMvY29tbW9uCgotLS0KIGNvbnRyaWIvcGdj cnlwdG8vTWFrZWZpbGUgICB8ICAgNCArLQogY29udHJpYi9wZ2NyeXB0by9p bnRlcm5hbC5jIHwgICAyICstCiBjb250cmliL3BnY3J5cHRvL3NoYTEuYyAg ICAgfCAzNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIGNvbnRyaWIvcGdjcnlwdG8vc2hhMS5oICAgICB8ICA3NSAt LS0tLS0tLS0tCiBzcmMvY29tbW9uL01ha2VmaWxlICAgICAgICAgfCAgIDIg Ky0KIHNyYy9jb21tb24vc2hhMS5jICAgICAgICAgICB8IDM0MSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2lu Y2x1ZGUvY29tbW9uL3NoYTEuaCAgIHwgIDc1ICsrKysrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgNDIwIGluc2VydGlvbnMoKyksIDQyMCBkZWxldGlvbnMo LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnY3J5cHRvL3NoYTEu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdjcnlwdG8vc2hhMS5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvbW1vbi9zaGExLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vc2hhMS5oCgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ2NyeXB0by9NYWtlZmlsZSBiL2NvbnRyaWIv cGdjcnlwdG8vTWFrZWZpbGUKaW5kZXggMThiYWQxYS4uYmI1MTE4ZSAxMDA2 NDQKLS0tIGEvY29udHJpYi9wZ2NyeXB0by9NYWtlZmlsZQorKysgYi9jb250 cmliL3BnY3J5cHRvL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIyBjb250 cmliL3BnY3J5cHRvL01ha2VmaWxlCiAKLUlOVF9TUkNTID0gbWQ1LmMgc2hh MS5jIHNoYTIuYyBpbnRlcm5hbC5jIGludGVybmFsLXNoYTIuYyBibGYuYyBy aWpuZGFlbC5jIFwKK0lOVF9TUkNTID0gbWQ1LmMgc2hhMi5jIGludGVybmFs LmMgaW50ZXJuYWwtc2hhMi5jIGJsZi5jIHJpam5kYWVsLmMgXAogCQlmb3J0 dW5hLmMgcmFuZG9tLmMgcGdwLW1waS1pbnRlcm5hbC5jIGltYXRoLmMKIElO VF9URVNUUyA9IHNoYTIKIApAQCAtMzAsNyArMzAsNyBAQCBEQVRBID0gcGdj cnlwdG8tLTEuMi5zcWwgcGdjcnlwdG8tLTEuMS0tMS4yLnNxbCBwZ2NyeXB0 by0tMS4wLS0xLjEuc3FsIFwKIAlwZ2NyeXB0by0tdW5wYWNrYWdlZC0tMS4w LnNxbAogUEdGSUxFREVTQyA9ICJwZ2NyeXB0byAtIGNyeXB0b2dyYXBoaWMg ZnVuY3Rpb25zIgogCi1SRUdSRVNTID0gaW5pdCBtZDUgc2hhMSBobWFjLW1k NSBobWFjLXNoYTEgYmxvd2Zpc2ggcmlqbmRhZWwgXAorUkVHUkVTUyA9IGlu aXQgbWQ1IGhtYWMtbWQ1IGhtYWMtc2hhMSBibG93ZmlzaCByaWpuZGFlbCBc CiAJJChDRl9URVNUUykgXAogCWNyeXB0LWRlcyBjcnlwdC1tZDUgY3J5cHQt Ymxvd2Zpc2ggY3J5cHQteGRlcyBcCiAJcGdwLWFybW9yIHBncC1kZWNyeXB0 IHBncC1lbmNyeXB0ICQoQ0ZfUEdQX1RFU1RTKSBcCmRpZmYgLS1naXQgYS9j b250cmliL3BnY3J5cHRvL2ludGVybmFsLmMgYi9jb250cmliL3BnY3J5cHRv L2ludGVybmFsLmMKaW5kZXggY2I4YmEyNi4uOWY0Mjk1NSAxMDA2NDQKLS0t IGEvY29udHJpYi9wZ2NyeXB0by9pbnRlcm5hbC5jCisrKyBiL2NvbnRyaWIv cGdjcnlwdG8vaW50ZXJuYWwuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5j bHVkZSAicHguaCIKICNpbmNsdWRlICJtZDUuaCIKLSNpbmNsdWRlICJzaGEx LmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYTEuaCIKICNpbmNsdWRlICJibGYu aCIKICNpbmNsdWRlICJyaWpuZGFlbC5oIgogI2luY2x1ZGUgImZvcnR1bmEu aCIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdjcnlwdG8vc2hhMS5jIGIvY29u dHJpYi9wZ2NyeXB0by9zaGExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDBlNzUzY2UuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9wZ2NyeXB0 by9zaGExLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotLyoJ ICAgJEtBTUU6IHNoYTEuYyx2IDEuMyAyMDAwLzAyLzIyIDE0OjAxOjE4IGl0 b2p1biBFeHAgJCAgICAqLwotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk1 LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCi0gKiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqCSAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqCSAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQotICoJICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog My4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5h bWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqCSAgbWF5IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlCi0gKgkgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICog Y29udHJpYi9wZ2NyeXB0by9zaGExLmMKLSAqLwotLyoKLSAqIEZJUFMgcHVi IDE4MC0xOiBTZWN1cmUgSGFzaCBBbGdvcml0aG0gKFNIQS0xKQotICogYmFz ZWQgb246IGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2ZpcHNwdWJzL2ZpcDE4 MC0xLmh0bQotICogaW1wbGVtZW50ZWQgYnkgSnVuLWljaGlybyBpdG9qdW4g SXRvaCA8aXRvanVuQGl0b2p1bi5vcmc+Ci0gKi8KLQotI2luY2x1ZGUgInBv c3RncmVzLmgiCi0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLQotI2luY2x1 ZGUgInNoYTEuaCIKLQotLyogY29uc3RhbnQgdGFibGUgKi8KLXN0YXRpYyB1 aW50MzIgX0tbXSA9IHsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJi Y2RjLCAweGNhNjJjMWQ2fTsKLQotI2RlZmluZSBLKHQpCV9LWyh0KSAvIDIw XQotCi0jZGVmaW5lIEYwKGIsIGMsIGQpICgoKGIpICYgKGMpKSB8ICgofihi KSkgJiAoZCkpKQotI2RlZmluZSBGMShiLCBjLCBkKSAoKChiKSBeIChjKSkg XiAoZCkpCi0jZGVmaW5lIEYyKGIsIGMsIGQpICgoKGIpICYgKGMpKSB8ICgo YikgJiAoZCkpIHwgKChjKSAmIChkKSkpCi0jZGVmaW5lIEYzKGIsIGMsIGQp ICgoKGIpIF4gKGMpKSBeIChkKSkKLQotI2RlZmluZSBTKG4sIHgpCQkoKCh4 KSA8PCAobikpIHwgKCh4KSA+PiAoMzIgLSAobikpKSkKLQotI2RlZmluZSBI KG4pCShjdHh0LT5oLmIzMlsobildKQotI2RlZmluZSBDT1VOVAkoY3R4dC0+ Y291bnQpCi0jZGVmaW5lIEJDT1VOVAkoY3R4dC0+Yy5iNjRbMF0gLyA4KQot I2RlZmluZSBXKG4pCShjdHh0LT5tLmIzMlsobildKQotCi0jZGVmaW5lIFBV VEJZVEUoeCkgXAotZG8geyBcCi0JY3R4dC0+bS5iOFsoQ09VTlQgJSA2NCld ID0gKHgpOwkJXAotCUNPVU5UKys7CQkJCVwKLQlDT1VOVCAlPSA2NDsJCQkJ XAotCWN0eHQtPmMuYjY0WzBdICs9IDg7CQkJXAotCWlmIChDT1VOVCAlIDY0 ID09IDApCQkJXAotCQlzaGExX3N0ZXAoY3R4dCk7CQlcCi19IHdoaWxlICgw KQotCi0jZGVmaW5lIFBVVFBBRCh4KSBcCi1kbyB7IFwKLQljdHh0LT5tLmI4 WyhDT1VOVCAlIDY0KV0gPSAoeCk7CQlcCi0JQ09VTlQrKzsJCQkJXAotCUNP VU5UICU9IDY0OwkJCQlcCi0JaWYgKENPVU5UICUgNjQgPT0gMCkJCQlcCi0J CXNoYTFfc3RlcChjdHh0KTsJCVwKLX0gd2hpbGUgKDApCi0KLXN0YXRpYyB2 b2lkIHNoYTFfc3RlcChzdHJ1Y3Qgc2hhMV9jdHh0ICopOwotCi1zdGF0aWMg dm9pZAotc2hhMV9zdGVwKHN0cnVjdCBzaGExX2N0eHQgKiBjdHh0KQotewot CXVpbnQzMgkJYSwKLQkJCQliLAotCQkJCWMsCi0JCQkJZCwKLQkJCQllOwot CXNpemVfdAkJdCwKLQkJCQlzOwotCXVpbnQzMgkJdG1wOwotCi0jaWZuZGVm IFdPUkRTX0JJR0VORElBTgotCXN0cnVjdCBzaGExX2N0eHQgdGN0eHQ7Ci0K LQltZW1tb3ZlKCZ0Y3R4dC5tLmI4WzBdLCAmY3R4dC0+bS5iOFswXSwgNjQp OwotCWN0eHQtPm0uYjhbMF0gPSB0Y3R4dC5tLmI4WzNdOwotCWN0eHQtPm0u YjhbMV0gPSB0Y3R4dC5tLmI4WzJdOwotCWN0eHQtPm0uYjhbMl0gPSB0Y3R4 dC5tLmI4WzFdOwotCWN0eHQtPm0uYjhbM10gPSB0Y3R4dC5tLmI4WzBdOwot CWN0eHQtPm0uYjhbNF0gPSB0Y3R4dC5tLmI4WzddOwotCWN0eHQtPm0uYjhb NV0gPSB0Y3R4dC5tLmI4WzZdOwotCWN0eHQtPm0uYjhbNl0gPSB0Y3R4dC5t LmI4WzVdOwotCWN0eHQtPm0uYjhbN10gPSB0Y3R4dC5tLmI4WzRdOwotCWN0 eHQtPm0uYjhbOF0gPSB0Y3R4dC5tLmI4WzExXTsKLQljdHh0LT5tLmI4Wzld ID0gdGN0eHQubS5iOFsxMF07Ci0JY3R4dC0+bS5iOFsxMF0gPSB0Y3R4dC5t LmI4WzldOwotCWN0eHQtPm0uYjhbMTFdID0gdGN0eHQubS5iOFs4XTsKLQlj dHh0LT5tLmI4WzEyXSA9IHRjdHh0Lm0uYjhbMTVdOwotCWN0eHQtPm0uYjhb MTNdID0gdGN0eHQubS5iOFsxNF07Ci0JY3R4dC0+bS5iOFsxNF0gPSB0Y3R4 dC5tLmI4WzEzXTsKLQljdHh0LT5tLmI4WzE1XSA9IHRjdHh0Lm0uYjhbMTJd OwotCWN0eHQtPm0uYjhbMTZdID0gdGN0eHQubS5iOFsxOV07Ci0JY3R4dC0+ bS5iOFsxN10gPSB0Y3R4dC5tLmI4WzE4XTsKLQljdHh0LT5tLmI4WzE4XSA9 IHRjdHh0Lm0uYjhbMTddOwotCWN0eHQtPm0uYjhbMTldID0gdGN0eHQubS5i OFsxNl07Ci0JY3R4dC0+bS5iOFsyMF0gPSB0Y3R4dC5tLmI4WzIzXTsKLQlj dHh0LT5tLmI4WzIxXSA9IHRjdHh0Lm0uYjhbMjJdOwotCWN0eHQtPm0uYjhb MjJdID0gdGN0eHQubS5iOFsyMV07Ci0JY3R4dC0+bS5iOFsyM10gPSB0Y3R4 dC5tLmI4WzIwXTsKLQljdHh0LT5tLmI4WzI0XSA9IHRjdHh0Lm0uYjhbMjdd OwotCWN0eHQtPm0uYjhbMjVdID0gdGN0eHQubS5iOFsyNl07Ci0JY3R4dC0+ bS5iOFsyNl0gPSB0Y3R4dC5tLmI4WzI1XTsKLQljdHh0LT5tLmI4WzI3XSA9 IHRjdHh0Lm0uYjhbMjRdOwotCWN0eHQtPm0uYjhbMjhdID0gdGN0eHQubS5i OFszMV07Ci0JY3R4dC0+bS5iOFsyOV0gPSB0Y3R4dC5tLmI4WzMwXTsKLQlj dHh0LT5tLmI4WzMwXSA9IHRjdHh0Lm0uYjhbMjldOwotCWN0eHQtPm0uYjhb MzFdID0gdGN0eHQubS5iOFsyOF07Ci0JY3R4dC0+bS5iOFszMl0gPSB0Y3R4 dC5tLmI4WzM1XTsKLQljdHh0LT5tLmI4WzMzXSA9IHRjdHh0Lm0uYjhbMzRd OwotCWN0eHQtPm0uYjhbMzRdID0gdGN0eHQubS5iOFszM107Ci0JY3R4dC0+ bS5iOFszNV0gPSB0Y3R4dC5tLmI4WzMyXTsKLQljdHh0LT5tLmI4WzM2XSA9 IHRjdHh0Lm0uYjhbMzldOwotCWN0eHQtPm0uYjhbMzddID0gdGN0eHQubS5i OFszOF07Ci0JY3R4dC0+bS5iOFszOF0gPSB0Y3R4dC5tLmI4WzM3XTsKLQlj dHh0LT5tLmI4WzM5XSA9IHRjdHh0Lm0uYjhbMzZdOwotCWN0eHQtPm0uYjhb NDBdID0gdGN0eHQubS5iOFs0M107Ci0JY3R4dC0+bS5iOFs0MV0gPSB0Y3R4 dC5tLmI4WzQyXTsKLQljdHh0LT5tLmI4WzQyXSA9IHRjdHh0Lm0uYjhbNDFd OwotCWN0eHQtPm0uYjhbNDNdID0gdGN0eHQubS5iOFs0MF07Ci0JY3R4dC0+ bS5iOFs0NF0gPSB0Y3R4dC5tLmI4WzQ3XTsKLQljdHh0LT5tLmI4WzQ1XSA9 IHRjdHh0Lm0uYjhbNDZdOwotCWN0eHQtPm0uYjhbNDZdID0gdGN0eHQubS5i OFs0NV07Ci0JY3R4dC0+bS5iOFs0N10gPSB0Y3R4dC5tLmI4WzQ0XTsKLQlj dHh0LT5tLmI4WzQ4XSA9IHRjdHh0Lm0uYjhbNTFdOwotCWN0eHQtPm0uYjhb NDldID0gdGN0eHQubS5iOFs1MF07Ci0JY3R4dC0+bS5iOFs1MF0gPSB0Y3R4 dC5tLmI4WzQ5XTsKLQljdHh0LT5tLmI4WzUxXSA9IHRjdHh0Lm0uYjhbNDhd OwotCWN0eHQtPm0uYjhbNTJdID0gdGN0eHQubS5iOFs1NV07Ci0JY3R4dC0+ bS5iOFs1M10gPSB0Y3R4dC5tLmI4WzU0XTsKLQljdHh0LT5tLmI4WzU0XSA9 IHRjdHh0Lm0uYjhbNTNdOwotCWN0eHQtPm0uYjhbNTVdID0gdGN0eHQubS5i OFs1Ml07Ci0JY3R4dC0+bS5iOFs1Nl0gPSB0Y3R4dC5tLmI4WzU5XTsKLQlj dHh0LT5tLmI4WzU3XSA9IHRjdHh0Lm0uYjhbNThdOwotCWN0eHQtPm0uYjhb NThdID0gdGN0eHQubS5iOFs1N107Ci0JY3R4dC0+bS5iOFs1OV0gPSB0Y3R4 dC5tLmI4WzU2XTsKLQljdHh0LT5tLmI4WzYwXSA9IHRjdHh0Lm0uYjhbNjNd OwotCWN0eHQtPm0uYjhbNjFdID0gdGN0eHQubS5iOFs2Ml07Ci0JY3R4dC0+ bS5iOFs2Ml0gPSB0Y3R4dC5tLmI4WzYxXTsKLQljdHh0LT5tLmI4WzYzXSA9 IHRjdHh0Lm0uYjhbNjBdOwotI2VuZGlmCi0KLQlhID0gSCgwKTsKLQliID0g SCgxKTsKLQljID0gSCgyKTsKLQlkID0gSCgzKTsKLQllID0gSCg0KTsKLQot CWZvciAodCA9IDA7IHQgPCAyMDsgdCsrKQotCXsKLQkJcyA9IHQgJiAweDBm OwotCQlpZiAodCA+PSAxNikKLQkJCVcocykgPSBTKDEsIFcoKHMgKyAxMykg JiAweDBmKSBeIFcoKHMgKyA4KSAmIDB4MGYpIF4gVygocyArIDIpICYgMHgw ZikgXiBXKHMpKTsKLQkJdG1wID0gUyg1LCBhKSArIEYwKGIsIGMsIGQpICsg ZSArIFcocykgKyBLKHQpOwotCQllID0gZDsKLQkJZCA9IGM7Ci0JCWMgPSBT KDMwLCBiKTsKLQkJYiA9IGE7Ci0JCWEgPSB0bXA7Ci0JfQotCWZvciAodCA9 IDIwOyB0IDwgNDA7IHQrKykKLQl7Ci0JCXMgPSB0ICYgMHgwZjsKLQkJVyhz KSA9IFMoMSwgVygocyArIDEzKSAmIDB4MGYpIF4gVygocyArIDgpICYgMHgw ZikgXiBXKChzICsgMikgJiAweDBmKSBeIFcocykpOwotCQl0bXAgPSBTKDUs IGEpICsgRjEoYiwgYywgZCkgKyBlICsgVyhzKSArIEsodCk7Ci0JCWUgPSBk OwotCQlkID0gYzsKLQkJYyA9IFMoMzAsIGIpOwotCQliID0gYTsKLQkJYSA9 IHRtcDsKLQl9Ci0JZm9yICh0ID0gNDA7IHQgPCA2MDsgdCsrKQotCXsKLQkJ cyA9IHQgJiAweDBmOwotCQlXKHMpID0gUygxLCBXKChzICsgMTMpICYgMHgw ZikgXiBXKChzICsgOCkgJiAweDBmKSBeIFcoKHMgKyAyKSAmIDB4MGYpIF4g VyhzKSk7Ci0JCXRtcCA9IFMoNSwgYSkgKyBGMihiLCBjLCBkKSArIGUgKyBX KHMpICsgSyh0KTsKLQkJZSA9IGQ7Ci0JCWQgPSBjOwotCQljID0gUygzMCwg Yik7Ci0JCWIgPSBhOwotCQlhID0gdG1wOwotCX0KLQlmb3IgKHQgPSA2MDsg dCA8IDgwOyB0KyspCi0JewotCQlzID0gdCAmIDB4MGY7Ci0JCVcocykgPSBT KDEsIFcoKHMgKyAxMykgJiAweDBmKSBeIFcoKHMgKyA4KSAmIDB4MGYpIF4g VygocyArIDIpICYgMHgwZikgXiBXKHMpKTsKLQkJdG1wID0gUyg1LCBhKSAr IEYzKGIsIGMsIGQpICsgZSArIFcocykgKyBLKHQpOwotCQllID0gZDsKLQkJ ZCA9IGM7Ci0JCWMgPSBTKDMwLCBiKTsKLQkJYiA9IGE7Ci0JCWEgPSB0bXA7 Ci0JfQotCi0JSCgwKSA9IEgoMCkgKyBhOwotCUgoMSkgPSBIKDEpICsgYjsK LQlIKDIpID0gSCgyKSArIGM7Ci0JSCgzKSA9IEgoMykgKyBkOwotCUgoNCkg PSBIKDQpICsgZTsKLQotCW1lbXNldCgmY3R4dC0+bS5iOFswXSwgMCwgNjQp OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQKLXNoYTFfaW5p dChzdHJ1Y3Qgc2hhMV9jdHh0ICogY3R4dCkKLXsKLQltZW1zZXQoY3R4dCwg MCwgc2l6ZW9mKHN0cnVjdCBzaGExX2N0eHQpKTsKLQlIKDApID0gMHg2NzQ1 MjMwMTsKLQlIKDEpID0gMHhlZmNkYWI4OTsKLQlIKDIpID0gMHg5OGJhZGNm ZTsKLQlIKDMpID0gMHgxMDMyNTQ3NjsKLQlIKDQpID0gMHhjM2QyZTFmMDsK LX0KLQotdm9pZAotc2hhMV9wYWQoc3RydWN0IHNoYTFfY3R4dCAqIGN0eHQp Ci17Ci0Jc2l6ZV90CQlwYWRsZW47CQkJLyogcGFkIGxlbmd0aCBpbiBieXRl cyAqLwotCXNpemVfdAkJcGFkc3RhcnQ7Ci0KLQlQVVRQQUQoMHg4MCk7Ci0K LQlwYWRzdGFydCA9IENPVU5UICUgNjQ7Ci0JcGFkbGVuID0gNjQgLSBwYWRz dGFydDsKLQlpZiAocGFkbGVuIDwgOCkKLQl7Ci0JCW1lbXNldCgmY3R4dC0+ bS5iOFtwYWRzdGFydF0sIDAsIHBhZGxlbik7Ci0JCUNPVU5UICs9IHBhZGxl bjsKLQkJQ09VTlQgJT0gNjQ7Ci0JCXNoYTFfc3RlcChjdHh0KTsKLQkJcGFk c3RhcnQgPSBDT1VOVCAlIDY0OwkvKiBzaG91bGQgYmUgMCAqLwotCQlwYWRs ZW4gPSA2NCAtIHBhZHN0YXJ0OyAvKiBzaG91bGQgYmUgNjQgKi8KLQl9Ci0J bWVtc2V0KCZjdHh0LT5tLmI4W3BhZHN0YXJ0XSwgMCwgcGFkbGVuIC0gOCk7 Ci0JQ09VTlQgKz0gKHBhZGxlbiAtIDgpOwotCUNPVU5UICU9IDY0OwotI2lm ZGVmIFdPUkRTX0JJR0VORElBTgotCVBVVFBBRChjdHh0LT5jLmI4WzBdKTsK LQlQVVRQQUQoY3R4dC0+Yy5iOFsxXSk7Ci0JUFVUUEFEKGN0eHQtPmMuYjhb Ml0pOwotCVBVVFBBRChjdHh0LT5jLmI4WzNdKTsKLQlQVVRQQUQoY3R4dC0+ Yy5iOFs0XSk7Ci0JUFVUUEFEKGN0eHQtPmMuYjhbNV0pOwotCVBVVFBBRChj dHh0LT5jLmI4WzZdKTsKLQlQVVRQQUQoY3R4dC0+Yy5iOFs3XSk7Ci0jZWxz ZQotCVBVVFBBRChjdHh0LT5jLmI4WzddKTsKLQlQVVRQQUQoY3R4dC0+Yy5i OFs2XSk7Ci0JUFVUUEFEKGN0eHQtPmMuYjhbNV0pOwotCVBVVFBBRChjdHh0 LT5jLmI4WzRdKTsKLQlQVVRQQUQoY3R4dC0+Yy5iOFszXSk7Ci0JUFVUUEFE KGN0eHQtPmMuYjhbMl0pOwotCVBVVFBBRChjdHh0LT5jLmI4WzFdKTsKLQlQ VVRQQUQoY3R4dC0+Yy5iOFswXSk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2hh MV9sb29wKHN0cnVjdCBzaGExX2N0eHQgKiBjdHh0LCBjb25zdCB1aW50OCAq aW5wdXQwLCBzaXplX3QgbGVuKQotewotCWNvbnN0IHVpbnQ4ICppbnB1dDsK LQlzaXplX3QJCWdhcGxlbjsKLQlzaXplX3QJCWdhcHN0YXJ0OwotCXNpemVf dAkJb2ZmOwotCXNpemVfdAkJY29weXNpejsKLQotCWlucHV0ID0gKGNvbnN0 IHVpbnQ4ICopIGlucHV0MDsKLQlvZmYgPSAwOwotCi0Jd2hpbGUgKG9mZiA8 IGxlbikKLQl7Ci0JCWdhcHN0YXJ0ID0gQ09VTlQgJSA2NDsKLQkJZ2FwbGVu ID0gNjQgLSBnYXBzdGFydDsKLQotCQljb3B5c2l6ID0gKGdhcGxlbiA8IGxl biAtIG9mZikgPyBnYXBsZW4gOiBsZW4gLSBvZmY7Ci0JCW1lbW1vdmUoJmN0 eHQtPm0uYjhbZ2Fwc3RhcnRdLCAmaW5wdXRbb2ZmXSwgY29weXNpeik7Ci0J CUNPVU5UICs9IGNvcHlzaXo7Ci0JCUNPVU5UICU9IDY0OwotCQljdHh0LT5j LmI2NFswXSArPSBjb3B5c2l6ICogODsKLQkJaWYgKENPVU5UICUgNjQgPT0g MCkKLQkJCXNoYTFfc3RlcChjdHh0KTsKLQkJb2ZmICs9IGNvcHlzaXo7Ci0J fQotfQotCi12b2lkCi1zaGExX3Jlc3VsdChzdHJ1Y3Qgc2hhMV9jdHh0ICog Y3R4dCwgdWludDggKmRpZ2VzdDApCi17Ci0JdWludDgJICAgKmRpZ2VzdDsK LQotCWRpZ2VzdCA9ICh1aW50OCAqKSBkaWdlc3QwOwotCXNoYTFfcGFkKGN0 eHQpOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotCW1lbW1vdmUoZGlnZXN0 LCAmY3R4dC0+aC5iOFswXSwgMjApOwotI2Vsc2UKLQlkaWdlc3RbMF0gPSBj dHh0LT5oLmI4WzNdOwotCWRpZ2VzdFsxXSA9IGN0eHQtPmguYjhbMl07Ci0J ZGlnZXN0WzJdID0gY3R4dC0+aC5iOFsxXTsKLQlkaWdlc3RbM10gPSBjdHh0 LT5oLmI4WzBdOwotCWRpZ2VzdFs0XSA9IGN0eHQtPmguYjhbN107Ci0JZGln ZXN0WzVdID0gY3R4dC0+aC5iOFs2XTsKLQlkaWdlc3RbNl0gPSBjdHh0LT5o LmI4WzVdOwotCWRpZ2VzdFs3XSA9IGN0eHQtPmguYjhbNF07Ci0JZGlnZXN0 WzhdID0gY3R4dC0+aC5iOFsxMV07Ci0JZGlnZXN0WzldID0gY3R4dC0+aC5i OFsxMF07Ci0JZGlnZXN0WzEwXSA9IGN0eHQtPmguYjhbOV07Ci0JZGlnZXN0 WzExXSA9IGN0eHQtPmguYjhbOF07Ci0JZGlnZXN0WzEyXSA9IGN0eHQtPmgu YjhbMTVdOwotCWRpZ2VzdFsxM10gPSBjdHh0LT5oLmI4WzE0XTsKLQlkaWdl c3RbMTRdID0gY3R4dC0+aC5iOFsxM107Ci0JZGlnZXN0WzE1XSA9IGN0eHQt PmguYjhbMTJdOwotCWRpZ2VzdFsxNl0gPSBjdHh0LT5oLmI4WzE5XTsKLQlk aWdlc3RbMTddID0gY3R4dC0+aC5iOFsxOF07Ci0JZGlnZXN0WzE4XSA9IGN0 eHQtPmguYjhbMTddOwotCWRpZ2VzdFsxOV0gPSBjdHh0LT5oLmI4WzE2XTsK LSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ2NyeXB0by9zaGEx LmggYi9jb250cmliL3BnY3J5cHRvL3NoYTEuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNTUzMmNhMS4uMDAwMDAwMAotLS0gYS9jb250cmli L3BnY3J5cHRvL3NoYTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAg QEAKLS8qCWNvbnRyaWIvcGdjcnlwdG8vc2hhMS5oICovCi0vKgkgICAkS0FN RTogc2hhMS5oLHYgMS40IDIwMDAvMDIvMjIgMTQ6MDE6MTggaXRvanVuIEV4 cCAkICAgICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYs IDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotICoJICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotICoJICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCi0gKgkgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0 aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2Yg aXRzIGNvbnRyaWJ1dG9ycwotICoJICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUKLSAqCSAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotLyoKLSAqIEZJ UFMgcHViIDE4MC0xOiBTZWN1cmUgSGFzaCBBbGdvcml0aG0gKFNIQS0xKQot ICogYmFzZWQgb246IGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2ZpcHNwdWJz L2ZpcDE4MC0xLmh0bQotICogaW1wbGVtZW50ZWQgYnkgSnVuLWljaGlybyBp dG9qdW4gSXRvaCA8aXRvanVuQGl0b2p1bi5vcmc+Ci0gKi8KLQotI2lmbmRl ZiBfTkVUSU5FVDZfU0hBMV9IXwotI2RlZmluZSBfTkVUSU5FVDZfU0hBMV9I XwotCi1zdHJ1Y3Qgc2hhMV9jdHh0Ci17Ci0JdW5pb24KLQl7Ci0JCXVpbnQ4 CQliOFsyMF07Ci0JCXVpbnQzMgkJYjMyWzVdOwotCX0JCQloOwotCXVuaW9u Ci0JewotCQl1aW50OAkJYjhbOF07Ci0JCXVpbnQ2NAkJYjY0WzFdOwotCX0J CQljOwotCXVuaW9uCi0JewotCQl1aW50OAkJYjhbNjRdOwotCQl1aW50MzIJ CWIzMlsxNl07Ci0JfQkJCW07Ci0JdWludDgJCWNvdW50OwotfTsKLQotZXh0 ZXJuIHZvaWQgc2hhMV9pbml0KHN0cnVjdCBzaGExX2N0eHQgKik7Ci1leHRl cm4gdm9pZCBzaGExX3BhZChzdHJ1Y3Qgc2hhMV9jdHh0ICopOwotZXh0ZXJu IHZvaWQgc2hhMV9sb29wKHN0cnVjdCBzaGExX2N0eHQgKiwgY29uc3QgdWlu dDggKiwgc2l6ZV90KTsKLWV4dGVybiB2b2lkIHNoYTFfcmVzdWx0KHN0cnVj dCBzaGExX2N0eHQgKiwgdWludDggKik7Ci0KLS8qIGNvbXBhdGliaWx0eSB3 aXRoIG90aGVyIFNIQTEgc291cmNlIGNvZGVzICovCi10eXBlZGVmIHN0cnVj dCBzaGExX2N0eHQgU0hBMV9DVFg7Ci0KLSNkZWZpbmUgU0hBMUluaXQoeCkJ CXNoYTFfaW5pdCgoeCkpCi0jZGVmaW5lIFNIQTFVcGRhdGUoeCwgeSwgeikg c2hhMV9sb29wKCh4KSwgKHkpLCAoeikpCi0jZGVmaW5lIFNIQTFGaW5hbCh4 LCB5KQkJc2hhMV9yZXN1bHQoKHkpLCAoeCkpCi0KLSNkZWZpbmUgU0hBMV9S RVNVTFRMRU4JKDE2MC84KQotCi0jZW5kaWYgICAvKiBfTkVUSU5FVDZfU0hB MV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3Ny Yy9jb21tb24vTWFrZWZpbGUKaW5kZXggYzcxNDE1ZS4uZjUyNmI0MiAxMDA2 NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmlsZQorKysgYi9zcmMvY29tbW9u L01ha2VmaWxlCkBAIC0yNCw3ICsyNCw3IEBAIG92ZXJyaWRlIENQUEZMQUdT IDo9IC1ERlJPTlRFTkQgJChDUFBGTEFHUykKIExJQlMgKz0gJChQVEhSRUFE X0xJQlMpCiAKIE9CSlNfQ09NTU9OID0gZXhlYy5vIHBnX2NyYy5vIHBnX2x6 Y29tcHJlc3MubyBwZ2ZuYW1lcy5vIHBzcHJpbnRmLm8gcmVscGF0aC5vIFwK LQlybXRyZWUubyBzdHJpbmcubyB1c2VybmFtZS5vIHdhaXRfZXJyb3Iubwor CXJtdHJlZS5vIHNoYTEubyBzdHJpbmcubyB1c2VybmFtZS5vIHdhaXRfZXJy b3IubwogCiBPQkpTX0ZST05URU5EID0gJChPQkpTX0NPTU1PTikgZmVfbWVt dXRpbHMubwogCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3NoYTEuYyBiL3Ny Yy9jb21tb24vc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjRkOWEzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tbW9u L3NoYTEuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoJICAgJEtBTUU6IHNoYTEu Yyx2IDEuMyAyMDAwLzAyLzIyIDE0OjAxOjE4IGl0b2p1biBFeHAgJCAgICAq LworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBh bmQgMTk5OCBXSURFIFByb2plY3QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqCSAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqCSAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICoJ ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg bmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqCSAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKgkg IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pF Q1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogc3JjL2NvbW1vbi9zaGEx LmMKKyAqLworLyoKKyAqIEZJUFMgcHViIDE4MC0xOiBTZWN1cmUgSGFzaCBB bGdvcml0aG0gKFNIQS0xKQorICogYmFzZWQgb246IGh0dHA6Ly93d3cuaXRs Lm5pc3QuZ292L2ZpcHNwdWJzL2ZpcDE4MC0xLmh0bQorICogaW1wbGVtZW50 ZWQgYnkgSnVuLWljaGlybyBpdG9qdW4gSXRvaCA8aXRvanVuQGl0b2p1bi5v cmc+CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl IDxzeXMvcGFyYW0uaD4KKworI2luY2x1ZGUgImNvbW1vbi9zaGExLmgiCisK Ky8qIGNvbnN0YW50IHRhYmxlICovCitzdGF0aWMgdWludDMyIF9LW10gPSB7 MHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFk Nn07CisKKyNkZWZpbmUgSyh0KQlfS1sodCkgLyAyMF0KKworI2RlZmluZSBG MChiLCBjLCBkKSAoKChiKSAmIChjKSkgfCAoKH4oYikpICYgKGQpKSkKKyNk ZWZpbmUgRjEoYiwgYywgZCkgKCgoYikgXiAoYykpIF4gKGQpKQorI2RlZmlu ZSBGMihiLCBjLCBkKSAoKChiKSAmIChjKSkgfCAoKGIpICYgKGQpKSB8ICgo YykgJiAoZCkpKQorI2RlZmluZSBGMyhiLCBjLCBkKSAoKChiKSBeIChjKSkg XiAoZCkpCisKKyNkZWZpbmUgUyhuLCB4KQkJKCgoeCkgPDwgKG4pKSB8ICgo eCkgPj4gKDMyIC0gKG4pKSkpCisKKyNkZWZpbmUgSChuKQkoY3R4dC0+aC5i MzJbKG4pXSkKKyNkZWZpbmUgQ09VTlQJKGN0eHQtPmNvdW50KQorI2RlZmlu ZSBCQ09VTlQJKGN0eHQtPmMuYjY0WzBdIC8gOCkKKyNkZWZpbmUgVyhuKQko Y3R4dC0+bS5iMzJbKG4pXSkKKworI2RlZmluZSBQVVRCWVRFKHgpIFwKK2Rv IHsgXAorCWN0eHQtPm0uYjhbKENPVU5UICUgNjQpXSA9ICh4KTsJCVwKKwlD T1VOVCsrOwkJCQlcCisJQ09VTlQgJT0gNjQ7CQkJCVwKKwljdHh0LT5jLmI2 NFswXSArPSA4OwkJCVwKKwlpZiAoQ09VTlQgJSA2NCA9PSAwKQkJCVwKKwkJ c2hhMV9zdGVwKGN0eHQpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQ VVRQQUQoeCkgXAorZG8geyBcCisJY3R4dC0+bS5iOFsoQ09VTlQgJSA2NCld ID0gKHgpOwkJXAorCUNPVU5UKys7CQkJCVwKKwlDT1VOVCAlPSA2NDsJCQkJ XAorCWlmIChDT1VOVCAlIDY0ID09IDApCQkJXAorCQlzaGExX3N0ZXAoY3R4 dCk7CQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBzaGExX3N0ZXAo c3RydWN0IHNoYTFfY3R4dCAqKTsKKworc3RhdGljIHZvaWQKK3NoYTFfc3Rl cChzdHJ1Y3Qgc2hhMV9jdHh0ICogY3R4dCkKK3sKKwl1aW50MzIJCWEsCisJ CQkJYiwKKwkJCQljLAorCQkJCWQsCisJCQkJZTsKKwlzaXplX3QJCXQsCisJ CQkJczsKKwl1aW50MzIJCXRtcDsKKworI2lmbmRlZiBXT1JEU19CSUdFTkRJ QU4KKwlzdHJ1Y3Qgc2hhMV9jdHh0IHRjdHh0OworCisJbWVtbW92ZSgmdGN0 eHQubS5iOFswXSwgJmN0eHQtPm0uYjhbMF0sIDY0KTsKKwljdHh0LT5tLmI4 WzBdID0gdGN0eHQubS5iOFszXTsKKwljdHh0LT5tLmI4WzFdID0gdGN0eHQu bS5iOFsyXTsKKwljdHh0LT5tLmI4WzJdID0gdGN0eHQubS5iOFsxXTsKKwlj dHh0LT5tLmI4WzNdID0gdGN0eHQubS5iOFswXTsKKwljdHh0LT5tLmI4WzRd ID0gdGN0eHQubS5iOFs3XTsKKwljdHh0LT5tLmI4WzVdID0gdGN0eHQubS5i OFs2XTsKKwljdHh0LT5tLmI4WzZdID0gdGN0eHQubS5iOFs1XTsKKwljdHh0 LT5tLmI4WzddID0gdGN0eHQubS5iOFs0XTsKKwljdHh0LT5tLmI4WzhdID0g dGN0eHQubS5iOFsxMV07CisJY3R4dC0+bS5iOFs5XSA9IHRjdHh0Lm0uYjhb MTBdOworCWN0eHQtPm0uYjhbMTBdID0gdGN0eHQubS5iOFs5XTsKKwljdHh0 LT5tLmI4WzExXSA9IHRjdHh0Lm0uYjhbOF07CisJY3R4dC0+bS5iOFsxMl0g PSB0Y3R4dC5tLmI4WzE1XTsKKwljdHh0LT5tLmI4WzEzXSA9IHRjdHh0Lm0u YjhbMTRdOworCWN0eHQtPm0uYjhbMTRdID0gdGN0eHQubS5iOFsxM107CisJ Y3R4dC0+bS5iOFsxNV0gPSB0Y3R4dC5tLmI4WzEyXTsKKwljdHh0LT5tLmI4 WzE2XSA9IHRjdHh0Lm0uYjhbMTldOworCWN0eHQtPm0uYjhbMTddID0gdGN0 eHQubS5iOFsxOF07CisJY3R4dC0+bS5iOFsxOF0gPSB0Y3R4dC5tLmI4WzE3 XTsKKwljdHh0LT5tLmI4WzE5XSA9IHRjdHh0Lm0uYjhbMTZdOworCWN0eHQt Pm0uYjhbMjBdID0gdGN0eHQubS5iOFsyM107CisJY3R4dC0+bS5iOFsyMV0g PSB0Y3R4dC5tLmI4WzIyXTsKKwljdHh0LT5tLmI4WzIyXSA9IHRjdHh0Lm0u YjhbMjFdOworCWN0eHQtPm0uYjhbMjNdID0gdGN0eHQubS5iOFsyMF07CisJ Y3R4dC0+bS5iOFsyNF0gPSB0Y3R4dC5tLmI4WzI3XTsKKwljdHh0LT5tLmI4 WzI1XSA9IHRjdHh0Lm0uYjhbMjZdOworCWN0eHQtPm0uYjhbMjZdID0gdGN0 eHQubS5iOFsyNV07CisJY3R4dC0+bS5iOFsyN10gPSB0Y3R4dC5tLmI4WzI0 XTsKKwljdHh0LT5tLmI4WzI4XSA9IHRjdHh0Lm0uYjhbMzFdOworCWN0eHQt Pm0uYjhbMjldID0gdGN0eHQubS5iOFszMF07CisJY3R4dC0+bS5iOFszMF0g PSB0Y3R4dC5tLmI4WzI5XTsKKwljdHh0LT5tLmI4WzMxXSA9IHRjdHh0Lm0u YjhbMjhdOworCWN0eHQtPm0uYjhbMzJdID0gdGN0eHQubS5iOFszNV07CisJ Y3R4dC0+bS5iOFszM10gPSB0Y3R4dC5tLmI4WzM0XTsKKwljdHh0LT5tLmI4 WzM0XSA9IHRjdHh0Lm0uYjhbMzNdOworCWN0eHQtPm0uYjhbMzVdID0gdGN0 eHQubS5iOFszMl07CisJY3R4dC0+bS5iOFszNl0gPSB0Y3R4dC5tLmI4WzM5 XTsKKwljdHh0LT5tLmI4WzM3XSA9IHRjdHh0Lm0uYjhbMzhdOworCWN0eHQt Pm0uYjhbMzhdID0gdGN0eHQubS5iOFszN107CisJY3R4dC0+bS5iOFszOV0g PSB0Y3R4dC5tLmI4WzM2XTsKKwljdHh0LT5tLmI4WzQwXSA9IHRjdHh0Lm0u YjhbNDNdOworCWN0eHQtPm0uYjhbNDFdID0gdGN0eHQubS5iOFs0Ml07CisJ Y3R4dC0+bS5iOFs0Ml0gPSB0Y3R4dC5tLmI4WzQxXTsKKwljdHh0LT5tLmI4 WzQzXSA9IHRjdHh0Lm0uYjhbNDBdOworCWN0eHQtPm0uYjhbNDRdID0gdGN0 eHQubS5iOFs0N107CisJY3R4dC0+bS5iOFs0NV0gPSB0Y3R4dC5tLmI4WzQ2 XTsKKwljdHh0LT5tLmI4WzQ2XSA9IHRjdHh0Lm0uYjhbNDVdOworCWN0eHQt Pm0uYjhbNDddID0gdGN0eHQubS5iOFs0NF07CisJY3R4dC0+bS5iOFs0OF0g PSB0Y3R4dC5tLmI4WzUxXTsKKwljdHh0LT5tLmI4WzQ5XSA9IHRjdHh0Lm0u YjhbNTBdOworCWN0eHQtPm0uYjhbNTBdID0gdGN0eHQubS5iOFs0OV07CisJ Y3R4dC0+bS5iOFs1MV0gPSB0Y3R4dC5tLmI4WzQ4XTsKKwljdHh0LT5tLmI4 WzUyXSA9IHRjdHh0Lm0uYjhbNTVdOworCWN0eHQtPm0uYjhbNTNdID0gdGN0 eHQubS5iOFs1NF07CisJY3R4dC0+bS5iOFs1NF0gPSB0Y3R4dC5tLmI4WzUz XTsKKwljdHh0LT5tLmI4WzU1XSA9IHRjdHh0Lm0uYjhbNTJdOworCWN0eHQt Pm0uYjhbNTZdID0gdGN0eHQubS5iOFs1OV07CisJY3R4dC0+bS5iOFs1N10g PSB0Y3R4dC5tLmI4WzU4XTsKKwljdHh0LT5tLmI4WzU4XSA9IHRjdHh0Lm0u YjhbNTddOworCWN0eHQtPm0uYjhbNTldID0gdGN0eHQubS5iOFs1Nl07CisJ Y3R4dC0+bS5iOFs2MF0gPSB0Y3R4dC5tLmI4WzYzXTsKKwljdHh0LT5tLmI4 WzYxXSA9IHRjdHh0Lm0uYjhbNjJdOworCWN0eHQtPm0uYjhbNjJdID0gdGN0 eHQubS5iOFs2MV07CisJY3R4dC0+bS5iOFs2M10gPSB0Y3R4dC5tLmI4WzYw XTsKKyNlbmRpZgorCisJYSA9IEgoMCk7CisJYiA9IEgoMSk7CisJYyA9IEgo Mik7CisJZCA9IEgoMyk7CisJZSA9IEgoNCk7CisKKwlmb3IgKHQgPSAwOyB0 IDwgMjA7IHQrKykKKwl7CisJCXMgPSB0ICYgMHgwZjsKKwkJaWYgKHQgPj0g MTYpCisJCQlXKHMpID0gUygxLCBXKChzICsgMTMpICYgMHgwZikgXiBXKChz ICsgOCkgJiAweDBmKSBeIFcoKHMgKyAyKSAmIDB4MGYpIF4gVyhzKSk7CisJ CXRtcCA9IFMoNSwgYSkgKyBGMChiLCBjLCBkKSArIGUgKyBXKHMpICsgSyh0 KTsKKwkJZSA9IGQ7CisJCWQgPSBjOworCQljID0gUygzMCwgYik7CisJCWIg PSBhOworCQlhID0gdG1wOworCX0KKwlmb3IgKHQgPSAyMDsgdCA8IDQwOyB0 KyspCisJeworCQlzID0gdCAmIDB4MGY7CisJCVcocykgPSBTKDEsIFcoKHMg KyAxMykgJiAweDBmKSBeIFcoKHMgKyA4KSAmIDB4MGYpIF4gVygocyArIDIp ICYgMHgwZikgXiBXKHMpKTsKKwkJdG1wID0gUyg1LCBhKSArIEYxKGIsIGMs IGQpICsgZSArIFcocykgKyBLKHQpOworCQllID0gZDsKKwkJZCA9IGM7CisJ CWMgPSBTKDMwLCBiKTsKKwkJYiA9IGE7CisJCWEgPSB0bXA7CisJfQorCWZv ciAodCA9IDQwOyB0IDwgNjA7IHQrKykKKwl7CisJCXMgPSB0ICYgMHgwZjsK KwkJVyhzKSA9IFMoMSwgVygocyArIDEzKSAmIDB4MGYpIF4gVygocyArIDgp ICYgMHgwZikgXiBXKChzICsgMikgJiAweDBmKSBeIFcocykpOworCQl0bXAg PSBTKDUsIGEpICsgRjIoYiwgYywgZCkgKyBlICsgVyhzKSArIEsodCk7CisJ CWUgPSBkOworCQlkID0gYzsKKwkJYyA9IFMoMzAsIGIpOworCQliID0gYTsK KwkJYSA9IHRtcDsKKwl9CisJZm9yICh0ID0gNjA7IHQgPCA4MDsgdCsrKQor CXsKKwkJcyA9IHQgJiAweDBmOworCQlXKHMpID0gUygxLCBXKChzICsgMTMp ICYgMHgwZikgXiBXKChzICsgOCkgJiAweDBmKSBeIFcoKHMgKyAyKSAmIDB4 MGYpIF4gVyhzKSk7CisJCXRtcCA9IFMoNSwgYSkgKyBGMyhiLCBjLCBkKSAr IGUgKyBXKHMpICsgSyh0KTsKKwkJZSA9IGQ7CisJCWQgPSBjOworCQljID0g UygzMCwgYik7CisJCWIgPSBhOworCQlhID0gdG1wOworCX0KKworCUgoMCkg PSBIKDApICsgYTsKKwlIKDEpID0gSCgxKSArIGI7CisJSCgyKSA9IEgoMikg KyBjOworCUgoMykgPSBIKDMpICsgZDsKKwlIKDQpID0gSCg0KSArIGU7CisK KwltZW1zZXQoJmN0eHQtPm0uYjhbMF0sIDAsIDY0KTsKK30KKworLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworCit2b2lkCitzaGExX2luaXQoc3RydWN0IHNoYTFf Y3R4dCAqIGN0eHQpCit7CisJbWVtc2V0KGN0eHQsIDAsIHNpemVvZihzdHJ1 Y3Qgc2hhMV9jdHh0KSk7CisJSCgwKSA9IDB4Njc0NTIzMDE7CisJSCgxKSA9 IDB4ZWZjZGFiODk7CisJSCgyKSA9IDB4OThiYWRjZmU7CisJSCgzKSA9IDB4 MTAzMjU0NzY7CisJSCg0KSA9IDB4YzNkMmUxZjA7Cit9CisKK3ZvaWQKK3No YTFfcGFkKHN0cnVjdCBzaGExX2N0eHQgKiBjdHh0KQoreworCXNpemVfdAkJ cGFkbGVuOwkJCS8qIHBhZCBsZW5ndGggaW4gYnl0ZXMgKi8KKwlzaXplX3QJ CXBhZHN0YXJ0OworCisJUFVUUEFEKDB4ODApOworCisJcGFkc3RhcnQgPSBD T1VOVCAlIDY0OworCXBhZGxlbiA9IDY0IC0gcGFkc3RhcnQ7CisJaWYgKHBh ZGxlbiA8IDgpCisJeworCQltZW1zZXQoJmN0eHQtPm0uYjhbcGFkc3RhcnRd LCAwLCBwYWRsZW4pOworCQlDT1VOVCArPSBwYWRsZW47CisJCUNPVU5UICU9 IDY0OworCQlzaGExX3N0ZXAoY3R4dCk7CisJCXBhZHN0YXJ0ID0gQ09VTlQg JSA2NDsJLyogc2hvdWxkIGJlIDAgKi8KKwkJcGFkbGVuID0gNjQgLSBwYWRz dGFydDsgLyogc2hvdWxkIGJlIDY0ICovCisJfQorCW1lbXNldCgmY3R4dC0+ bS5iOFtwYWRzdGFydF0sIDAsIHBhZGxlbiAtIDgpOworCUNPVU5UICs9IChw YWRsZW4gLSA4KTsKKwlDT1VOVCAlPSA2NDsKKyNpZmRlZiBXT1JEU19CSUdF TkRJQU4KKwlQVVRQQUQoY3R4dC0+Yy5iOFswXSk7CisJUFVUUEFEKGN0eHQt PmMuYjhbMV0pOworCVBVVFBBRChjdHh0LT5jLmI4WzJdKTsKKwlQVVRQQUQo Y3R4dC0+Yy5iOFszXSk7CisJUFVUUEFEKGN0eHQtPmMuYjhbNF0pOworCVBV VFBBRChjdHh0LT5jLmI4WzVdKTsKKwlQVVRQQUQoY3R4dC0+Yy5iOFs2XSk7 CisJUFVUUEFEKGN0eHQtPmMuYjhbN10pOworI2Vsc2UKKwlQVVRQQUQoY3R4 dC0+Yy5iOFs3XSk7CisJUFVUUEFEKGN0eHQtPmMuYjhbNl0pOworCVBVVFBB RChjdHh0LT5jLmI4WzVdKTsKKwlQVVRQQUQoY3R4dC0+Yy5iOFs0XSk7CisJ UFVUUEFEKGN0eHQtPmMuYjhbM10pOworCVBVVFBBRChjdHh0LT5jLmI4WzJd KTsKKwlQVVRQQUQoY3R4dC0+Yy5iOFsxXSk7CisJUFVUUEFEKGN0eHQtPmMu YjhbMF0pOworI2VuZGlmCit9CisKK3ZvaWQKK3NoYTFfbG9vcChzdHJ1Y3Qg c2hhMV9jdHh0ICogY3R4dCwgY29uc3QgdWludDggKmlucHV0MCwgc2l6ZV90 IGxlbikKK3sKKwljb25zdCB1aW50OCAqaW5wdXQ7CisJc2l6ZV90CQlnYXBs ZW47CisJc2l6ZV90CQlnYXBzdGFydDsKKwlzaXplX3QJCW9mZjsKKwlzaXpl X3QJCWNvcHlzaXo7CisKKwlpbnB1dCA9IChjb25zdCB1aW50OCAqKSBpbnB1 dDA7CisJb2ZmID0gMDsKKworCXdoaWxlIChvZmYgPCBsZW4pCisJeworCQln YXBzdGFydCA9IENPVU5UICUgNjQ7CisJCWdhcGxlbiA9IDY0IC0gZ2Fwc3Rh cnQ7CisKKwkJY29weXNpeiA9IChnYXBsZW4gPCBsZW4gLSBvZmYpID8gZ2Fw bGVuIDogbGVuIC0gb2ZmOworCQltZW1tb3ZlKCZjdHh0LT5tLmI4W2dhcHN0 YXJ0XSwgJmlucHV0W29mZl0sIGNvcHlzaXopOworCQlDT1VOVCArPSBjb3B5 c2l6OworCQlDT1VOVCAlPSA2NDsKKwkJY3R4dC0+Yy5iNjRbMF0gKz0gY29w eXNpeiAqIDg7CisJCWlmIChDT1VOVCAlIDY0ID09IDApCisJCQlzaGExX3N0 ZXAoY3R4dCk7CisJCW9mZiArPSBjb3B5c2l6OworCX0KK30KKwordm9pZAor c2hhMV9yZXN1bHQoc3RydWN0IHNoYTFfY3R4dCAqIGN0eHQsIHVpbnQ4ICpk aWdlc3QwKQoreworCXVpbnQ4CSAgICpkaWdlc3Q7CisKKwlkaWdlc3QgPSAo dWludDggKikgZGlnZXN0MDsKKwlzaGExX3BhZChjdHh0KTsKKyNpZmRlZiBX T1JEU19CSUdFTkRJQU4KKwltZW1tb3ZlKGRpZ2VzdCwgJmN0eHQtPmguYjhb MF0sIDIwKTsKKyNlbHNlCisJZGlnZXN0WzBdID0gY3R4dC0+aC5iOFszXTsK KwlkaWdlc3RbMV0gPSBjdHh0LT5oLmI4WzJdOworCWRpZ2VzdFsyXSA9IGN0 eHQtPmguYjhbMV07CisJZGlnZXN0WzNdID0gY3R4dC0+aC5iOFswXTsKKwlk aWdlc3RbNF0gPSBjdHh0LT5oLmI4WzddOworCWRpZ2VzdFs1XSA9IGN0eHQt PmguYjhbNl07CisJZGlnZXN0WzZdID0gY3R4dC0+aC5iOFs1XTsKKwlkaWdl c3RbN10gPSBjdHh0LT5oLmI4WzRdOworCWRpZ2VzdFs4XSA9IGN0eHQtPmgu YjhbMTFdOworCWRpZ2VzdFs5XSA9IGN0eHQtPmguYjhbMTBdOworCWRpZ2Vz dFsxMF0gPSBjdHh0LT5oLmI4WzldOworCWRpZ2VzdFsxMV0gPSBjdHh0LT5o LmI4WzhdOworCWRpZ2VzdFsxMl0gPSBjdHh0LT5oLmI4WzE1XTsKKwlkaWdl c3RbMTNdID0gY3R4dC0+aC5iOFsxNF07CisJZGlnZXN0WzE0XSA9IGN0eHQt PmguYjhbMTNdOworCWRpZ2VzdFsxNV0gPSBjdHh0LT5oLmI4WzEyXTsKKwlk aWdlc3RbMTZdID0gY3R4dC0+aC5iOFsxOV07CisJZGlnZXN0WzE3XSA9IGN0 eHQtPmguYjhbMThdOworCWRpZ2VzdFsxOF0gPSBjdHh0LT5oLmI4WzE3XTsK KwlkaWdlc3RbMTldID0gY3R4dC0+aC5iOFsxNl07CisjZW5kaWYKK30KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9zaGExLmggYi9zcmMvaW5j bHVkZS9jb21tb24vc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmQ1ZmYyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS9jb21tb24vc2hhMS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCXNyYy9p bmNsdWRlL2NvbW1vbi9zaGExLmggKi8KKy8qCSAgICRLQU1FOiBzaGExLmgs diAxLjQgMjAwMC8wMi8yMiAxNDowMToxOCBpdG9qdW4gRXhwICQgICAgKi8K KworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgYW5k IDE5OTggV0lERSBQcm9qZWN0LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisgKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqCSAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h bWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp YnV0b3JzCisgKgkgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICoJICB3 aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNU IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKgorICogRklQUyBwdWIgMTgw LTE6IFNlY3VyZSBIYXNoIEFsZ29yaXRobSAoU0hBLTEpCisgKiBiYXNlZCBv bjogaHR0cDovL3d3dy5pdGwubmlzdC5nb3YvZmlwc3B1YnMvZmlwMTgwLTEu aHRtCisgKiBpbXBsZW1lbnRlZCBieSBKdW4taWNoaXJvIGl0b2p1biBJdG9o IDxpdG9qdW5AaXRvanVuLm9yZz4KKyAqLworCisjaWZuZGVmIF9ORVRJTkVU Nl9TSEExX0hfCisjZGVmaW5lIF9ORVRJTkVUNl9TSEExX0hfCisKK3N0cnVj dCBzaGExX2N0eHQKK3sKKwl1bmlvbgorCXsKKwkJdWludDgJCWI4WzIwXTsK KwkJdWludDMyCQliMzJbNV07CisJfQkJCWg7CisJdW5pb24KKwl7CisJCXVp bnQ4CQliOFs4XTsKKwkJdWludDY0CQliNjRbMV07CisJfQkJCWM7CisJdW5p b24KKwl7CisJCXVpbnQ4CQliOFs2NF07CisJCXVpbnQzMgkJYjMyWzE2XTsK Kwl9CQkJbTsKKwl1aW50OAkJY291bnQ7Cit9OworCitleHRlcm4gdm9pZCBz aGExX2luaXQoc3RydWN0IHNoYTFfY3R4dCAqKTsKK2V4dGVybiB2b2lkIHNo YTFfcGFkKHN0cnVjdCBzaGExX2N0eHQgKik7CitleHRlcm4gdm9pZCBzaGEx X2xvb3Aoc3RydWN0IHNoYTFfY3R4dCAqLCBjb25zdCB1aW50OCAqLCBzaXpl X3QpOworZXh0ZXJuIHZvaWQgc2hhMV9yZXN1bHQoc3RydWN0IHNoYTFfY3R4 dCAqLCB1aW50OCAqKTsKKworLyogY29tcGF0aWJpbHR5IHdpdGggb3RoZXIg U0hBMSBzb3VyY2UgY29kZXMgKi8KK3R5cGVkZWYgc3RydWN0IHNoYTFfY3R4 dCBTSEExX0NUWDsKKworI2RlZmluZSBTSEExSW5pdCh4KQkJc2hhMV9pbml0 KCh4KSkKKyNkZWZpbmUgU0hBMVVwZGF0ZSh4LCB5LCB6KSBzaGExX2xvb3Ao KHgpLCAoeSksICh6KSkKKyNkZWZpbmUgU0hBMUZpbmFsKHgsIHkpCQlzaGEx X3Jlc3VsdCgoeSksICh4KSkKKworI2RlZmluZSBTSEExX1JFU1VMVExFTgko MTYwLzgpCisKKyNlbmRpZiAgIC8qIF9ORVRJTkVUNl9TSEExX0hfICovCi0t IAoyLjEuNAoK --------------040108050703030703070702 Content-Type: application/x-patch; name="0002-Refactor-sendAuthRequest.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Refactor-sendAuthRequest.patch" RnJvbSBiMjEyMDJiOGZiNzQwZjI3ZWFmMDlhY2IzNjI4MjcyN2I5MjNlNmIz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFr YW5nYXMgPGhlaWtraS5saW5uYWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwg MTEgRmViIDIwMTUgMjM6MDI6MzAgKzAyMDAKU3ViamVjdDogW1BBVENIIDIv NF0gUmVmYWN0b3Igc2VuZEF1dGhSZXF1ZXN0CgotLS0KIHNyYy9iYWNrZW5k L2xpYnBxL2F1dGguYyB8IDY1ICsrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMyIGlu c2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2xpYnBxL2F1dGguYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1 dGguYwppbmRleCAyOGIwNTBhLi44MTIyNmMyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9saWJwcS9hdXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC5jCkBAIC0zNiw3ICszNiw4IEBACiAgKiBHbG9iYWwgYXV0aGVudGlj YXRpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwot c3RhdGljIHZvaWQgc2VuZEF1dGhSZXF1ZXN0KFBvcnQgKnBvcnQsIEF1dGhS ZXF1ZXN0IGFyZXEpOworc3RhdGljIHZvaWQgc2VuZEF1dGhSZXF1ZXN0KFBv cnQgKnBvcnQsIEF1dGhSZXF1ZXN0IGFyZXEsIGNoYXIgKmV4dHJhZGF0YSwK KwkJCQlpbnQgZXh0cmFsZW4pOwogc3RhdGljIHZvaWQgYXV0aF9mYWlsZWQo UG9ydCAqcG9ydCwgaW50IHN0YXR1cywgY2hhciAqbG9nZGV0YWlsKTsKIHN0 YXRpYyBjaGFyICpyZWN2X3Bhc3N3b3JkX3BhY2tldChQb3J0ICpwb3J0KTsK IHN0YXRpYyBpbnQJcmVjdl9hbmRfY2hlY2tfcGFzc3dvcmRfcGFja2V0KFBv cnQgKnBvcnQsIGNoYXIgKipsb2dkZXRhaWwpOwpAQCAtNDc5LDcgKzQ4MCw3 IEBAIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQgKnBvcnQpCiAKIAkJY2Fz ZSB1YUdTUzoKICNpZmRlZiBFTkFCTEVfR1NTCi0JCQlzZW5kQXV0aFJlcXVl c3QocG9ydCwgQVVUSF9SRVFfR1NTKTsKKwkJCXNlbmRBdXRoUmVxdWVzdChw b3J0LCBBVVRIX1JFUV9HU1MsIE5VTEwsIDApOwogCQkJc3RhdHVzID0gcGdf R1NTX3JlY3ZhdXRoKHBvcnQpOwogI2Vsc2UKIAkJCUFzc2VydChmYWxzZSk7 CkBAIC00ODgsNyArNDg5LDcgQEAgQ2xpZW50QXV0aGVudGljYXRpb24oUG9y dCAqcG9ydCkKIAogCQljYXNlIHVhU1NQSToKICNpZmRlZiBFTkFCTEVfU1NQ SQotCQkJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVRX1NTUEkpOwor CQkJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVRX1NTUEksIE5VTEws IDApOwogCQkJc3RhdHVzID0gcGdfU1NQSV9yZWN2YXV0aChwb3J0KTsKICNl bHNlCiAJCQlBc3NlcnQoZmFsc2UpOwpAQCAtNTEyLDEyICs1MTMsMTMgQEAg Q2xpZW50QXV0aGVudGljYXRpb24oUG9ydCAqcG9ydCkKIAkJCQllcmVwb3J0 KEZBVEFMLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0FVVEhP UklaQVRJT05fU1BFQ0lGSUNBVElPTiksCiAJCQkJCQkgZXJybXNnKCJNRDUg YXV0aGVudGljYXRpb24gaXMgbm90IHN1cHBvcnRlZCB3aGVuIFwiZGJfdXNl cl9uYW1lc3BhY2VcIiBpcyBlbmFibGVkIikpKTsKLQkJCXNlbmRBdXRoUmVx dWVzdChwb3J0LCBBVVRIX1JFUV9NRDUpOworCQkJLyogQWRkIHRoZSBzYWx0 IGZvciBlbmNyeXB0ZWQgcGFzc3dvcmRzLiAqLworCQkJc2VuZEF1dGhSZXF1 ZXN0KHBvcnQsIEFVVEhfUkVRX01ENSwgcG9ydC0+bWQ1U2FsdCwgNCk7CiAJ CQlzdGF0dXMgPSByZWN2X2FuZF9jaGVja19wYXNzd29yZF9wYWNrZXQocG9y dCwgJmxvZ2RldGFpbCk7CiAJCQlicmVhazsKIAogCQljYXNlIHVhUGFzc3dv cmQ6Ci0JCQlzZW5kQXV0aFJlcXVlc3QocG9ydCwgQVVUSF9SRVFfUEFTU1dP UkQpOworCQkJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVRX1BBU1NX T1JELCBOVUxMLCAwKTsKIAkJCXN0YXR1cyA9IHJlY3ZfYW5kX2NoZWNrX3Bh c3N3b3JkX3BhY2tldChwb3J0LCAmbG9nZGV0YWlsKTsKIAkJCWJyZWFrOwog CkBAIC01NTYsNyArNTU4LDcgQEAgQ2xpZW50QXV0aGVudGljYXRpb24oUG9y dCAqcG9ydCkKIAkJKCpDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rKSAocG9y dCwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgPT0gU1RBVFVTX09LKQotCQlz ZW5kQXV0aFJlcXVlc3QocG9ydCwgQVVUSF9SRVFfT0spOworCQlzZW5kQXV0 aFJlcXVlc3QocG9ydCwgQVVUSF9SRVFfT0ssIE5VTEwsIDApOwogCWVsc2UK IAkJYXV0aF9mYWlsZWQocG9ydCwgc3RhdHVzLCBsb2dkZXRhaWwpOwogfQpA QCAtNTY2LDcgKzU2OCw3IEBAIENsaWVudEF1dGhlbnRpY2F0aW9uKFBvcnQg KnBvcnQpCiAgKiBTZW5kIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFj a2V0IHRvIHRoZSBmcm9udGVuZC4KICAqLwogc3RhdGljIHZvaWQKLXNlbmRB dXRoUmVxdWVzdChQb3J0ICpwb3J0LCBBdXRoUmVxdWVzdCBhcmVxKQorc2Vu ZEF1dGhSZXF1ZXN0KFBvcnQgKnBvcnQsIEF1dGhSZXF1ZXN0IGFyZXEsIGNo YXIgKmV4dHJhZGF0YSwgaW50IGV4dHJhbGVuKQogewogCVN0cmluZ0luZm9E YXRhIGJ1ZjsKIApAQCAtNTc1LDI3ICs1NzcsOCBAQCBzZW5kQXV0aFJlcXVl c3QoUG9ydCAqcG9ydCwgQXV0aFJlcXVlc3QgYXJlcSkKIAlwcV9iZWdpbm1l c3NhZ2UoJmJ1ZiwgJ1InKTsKIAlwcV9zZW5kaW50KCZidWYsIChpbnQzMikg YXJlcSwgc2l6ZW9mKGludDMyKSk7CiAKLQkvKiBBZGQgdGhlIHNhbHQgZm9y IGVuY3J5cHRlZCBwYXNzd29yZHMuICovCi0JaWYgKGFyZXEgPT0gQVVUSF9S RVFfTUQ1KQotCQlwcV9zZW5kYnl0ZXMoJmJ1ZiwgcG9ydC0+bWQ1U2FsdCwg NCk7Ci0KLSNpZiBkZWZpbmVkKEVOQUJMRV9HU1MpIHx8IGRlZmluZWQoRU5B QkxFX1NTUEkpCi0KLQkvKgotCSAqIEFkZCB0aGUgYXV0aGVudGljYXRpb24g ZGF0YSBmb3IgdGhlIG5leHQgc3RlcCBvZiB0aGUgR1NTQVBJIG9yIFNTUEkK LQkgKiBuZWdvdGlhdGlvbi4KLQkgKi8KLQllbHNlIGlmIChhcmVxID09IEFV VEhfUkVRX0dTU19DT05UKQotCXsKLQkJaWYgKHBvcnQtPmdzcy0+b3V0YnVm Lmxlbmd0aCA+IDApCi0JCXsKLQkJCWVsb2coREVCVUc0LCAic2VuZGluZyBH U1MgdG9rZW4gb2YgbGVuZ3RoICV1IiwKLQkJCQkgKHVuc2lnbmVkIGludCkg cG9ydC0+Z3NzLT5vdXRidWYubGVuZ3RoKTsKLQotCQkJcHFfc2VuZGJ5dGVz KCZidWYsIHBvcnQtPmdzcy0+b3V0YnVmLnZhbHVlLCBwb3J0LT5nc3MtPm91 dGJ1Zi5sZW5ndGgpOwotCQl9Ci0JfQotI2VuZGlmCisJaWYgKGV4dHJhbGVu ID4gMCkKKwkJcHFfc2VuZGJ5dGVzKCZidWYsIGV4dHJhZGF0YSwgZXh0cmFs ZW4pOwogCiAJcHFfZW5kbWVzc2FnZSgmYnVmKTsKIApAQCAtOTA3LDcgKzg5 MCwxNSBAQCBwZ19HU1NfcmVjdmF1dGgoUG9ydCAqcG9ydCkKIAkJCWVsb2co REVCVUc0LCAic2VuZGluZyBHU1MgcmVzcG9uc2UgdG9rZW4gb2YgbGVuZ3Ro ICV1IiwKIAkJCQkgKHVuc2lnbmVkIGludCkgcG9ydC0+Z3NzLT5vdXRidWYu bGVuZ3RoKTsKIAotCQkJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVR X0dTU19DT05UKTsKKwkJCS8qCisJCQkgKiBBZGQgdGhlIGF1dGhlbnRpY2F0 aW9uIGRhdGEgZm9yIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIEdTU0FQSSBvcgor CQkJICogU1NQSSBuZWdvdGlhdGlvbi4KKwkJCSAqLworCQkJZWxvZyhERUJV RzQsICJzZW5kaW5nIEdTUyB0b2tlbiBvZiBsZW5ndGggJXUiLAorCQkJCSAo dW5zaWduZWQgaW50KSBwb3J0LT5nc3MtPm91dGJ1Zi5sZW5ndGgpOworCisJ CQlzZW5kQXV0aFJlcXVlc3QocG9ydCwgQVVUSF9SRVFfR1NTX0NPTlQsCisJ CQkJCQkJcG9ydC0+Z3NzLT5vdXRidWYudmFsdWUsIHBvcnQtPmdzcy0+b3V0 YnVmLmxlbmd0aCk7CiAKIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbl9z LCAmcG9ydC0+Z3NzLT5vdXRidWYpOwogCQl9CkBAIC0xMTUwLDcgKzExNDEs MTUgQEAgcGdfU1NQSV9yZWN2YXV0aChQb3J0ICpwb3J0KQogCQkJcG9ydC0+ Z3NzLT5vdXRidWYubGVuZ3RoID0gb3V0YnVmLnBCdWZmZXJzWzBdLmNiQnVm ZmVyOwogCQkJcG9ydC0+Z3NzLT5vdXRidWYudmFsdWUgPSBvdXRidWYucEJ1 ZmZlcnNbMF0ucHZCdWZmZXI7CiAKLQkJCXNlbmRBdXRoUmVxdWVzdChwb3J0 LCBBVVRIX1JFUV9HU1NfQ09OVCk7CisJCQkvKgorCQkJICogQWRkIHRoZSBh dXRoZW50aWNhdGlvbiBkYXRhIGZvciB0aGUgbmV4dCBzdGVwIG9mIHRoZSBH U1NBUEkgb3IKKwkJCSAqIFNTUEkgbmVnb3RpYXRpb24uCisJCQkgKi8KKwkJ CWVsb2coREVCVUc0LCAic2VuZGluZyBHU1MgdG9rZW4gb2YgbGVuZ3RoICV1 IiwKKwkJCQkgKHVuc2lnbmVkIGludCkgcG9ydC0+Z3NzLT5vdXRidWYubGVu Z3RoKTsKKworCQkJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVRX0dT U19DT05ULAorCQkJCQkJCXBvcnQtPmdzcy0+b3V0YnVmLnZhbHVlLCBwb3J0 LT5nc3MtPm91dGJ1Zi5sZW5ndGgpOwogCiAJCQlGcmVlQ29udGV4dEJ1ZmZl cihvdXRidWYucEJ1ZmZlcnNbMF0ucHZCdWZmZXIpOwogCQl9CkBAIC0xNjcx LDcgKzE2NzAsNyBAQCBwYW1fcGFzc3dkX2NvbnZfcHJvYyhpbnQgbnVtX21z ZywgY29uc3Qgc3RydWN0IHBhbV9tZXNzYWdlICoqIG1zZywKIAkJCQkJICog bGV0J3MgZ28gYXNrIHRoZSBjbGllbnQgdG8gc2VuZCBhIHBhc3N3b3JkLCB3 aGljaCB3ZQogCQkJCQkgKiB0aGVuIHN0dWZmIGludG8gUEFNLgogCQkJCQkg Ki8KLQkJCQkJc2VuZEF1dGhSZXF1ZXN0KHBhbV9wb3J0X2NsdWRnZSwgQVVU SF9SRVFfUEFTU1dPUkQpOworCQkJCQlzZW5kQXV0aFJlcXVlc3QocGFtX3Bv cnRfY2x1ZGdlLCBBVVRIX1JFUV9QQVNTV09SRCwgTlVMTCwgMCk7CiAJCQkJ CXBhc3N3ZCA9IHJlY3ZfcGFzc3dvcmRfcGFja2V0KHBhbV9wb3J0X2NsdWRn ZSk7CiAJCQkJCWlmIChwYXNzd2QgPT0gTlVMTCkKIAkJCQkJewpAQCAtMTk0 Niw3ICsxOTQ1LDcgQEAgQ2hlY2tMREFQQXV0aChQb3J0ICpwb3J0KQogCWlm IChwb3J0LT5oYmEtPmxkYXBwb3J0ID09IDApCiAJCXBvcnQtPmhiYS0+bGRh cHBvcnQgPSBMREFQX1BPUlQ7CiAKLQlzZW5kQXV0aFJlcXVlc3QocG9ydCwg QVVUSF9SRVFfUEFTU1dPUkQpOworCXNlbmRBdXRoUmVxdWVzdChwb3J0LCBB VVRIX1JFUV9QQVNTV09SRCwgTlVMTCwgMCk7CiAKIAlwYXNzd2QgPSByZWN2 X3Bhc3N3b3JkX3BhY2tldChwb3J0KTsKIAlpZiAocGFzc3dkID09IE5VTEwp CkBAIC0yMzAyLDcgKzIzMDEsNyBAQCBDaGVja1JBRElVU0F1dGgoUG9ydCAq cG9ydCkKIAkJaWRlbnRpZmllciA9IHBvcnQtPmhiYS0+cmFkaXVzaWRlbnRp ZmllcjsKIAogCS8qIFNlbmQgcmVndWxhciBwYXNzd29yZCByZXF1ZXN0IHRv IGNsaWVudCwgYW5kIGdldCB0aGUgcmVzcG9uc2UgKi8KLQlzZW5kQXV0aFJl cXVlc3QocG9ydCwgQVVUSF9SRVFfUEFTU1dPUkQpOworCXNlbmRBdXRoUmVx dWVzdChwb3J0LCBBVVRIX1JFUV9QQVNTV09SRCwgTlVMTCwgMCk7CiAKIAlw YXNzd2QgPSByZWN2X3Bhc3N3b3JkX3BhY2tldChwb3J0KTsKIAlpZiAocGFz c3dkID09IE5VTEwpCi0tIAoyLjEuNAoK --------------040108050703030703070702 Content-Type: application/x-patch; name="0003-Add-support-for-multiple-verifiers.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-Add-support-for-multiple-verifiers.patch" RnJvbSA0ODhiMWQ1NDdjYmYxMzJiZDM5ODA5NzFlOTFiYmY4YjhjNmU0NDJj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFr YW5nYXMgPGhlaWtraS5saW5uYWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwg MyBNYXIgMjAxNSAyMDoxMDoxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy80 XSBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgdmVyaWZpZXJzLgoKcGdfYXV0 aGlkLnJvbHBhc3N3b3JkIGZpZWxkIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgg YW4gYXJyYXkuCgpBZGQgQ1JFQVRFL0FMVEVSIFJPTEUgc3VwcG9ydCBmb3Ig cGFzc3dvcmQgdmVyaWZpZXJzLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX3ZpZXdzLnNxbCB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvdXNlci5jICAgICAgICAgIHwgMTk1ICsrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9saWJwcS9jcnlwdC5jICAg ICAgICAgICAgfCAxMTcgKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8ICAyOCArKysrLQog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hdXRoaWQuaCAgICAgIHwgICA0ICst CiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgIHwgICAy ICstCiA4IGZpbGVzIGNoYW5nZWQsIDI4MSBpbnNlcnRpb25zKCspLCA3NiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9n L3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3Rl bV92aWV3cy5zcWwKaW5kZXggMjgwMGY3My4uY2Q3ODA2MSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMzIs NyArMzIsNyBAQCBDUkVBVEUgVklFVyBwZ19zaGFkb3cgQVMKICAgICAgICAg cm9sc3VwZXIgQVMgdXNlc3VwZXIsCiAgICAgICAgIHJvbHJlcGxpY2F0aW9u IEFTIHVzZXJlcGwsCiAgICAgICAgIHJvbGJ5cGFzc3JscyBBUyB1c2VieXBh c3NybHMsCi0gICAgICAgIHJvbHBhc3N3b3JkIEFTIHBhc3N3ZCwKKyAgICAg ICAgcm9sdmVyaWZpZXJzIEFTIHZlcmlmaWVycywKICAgICAgICAgcm9sdmFs aWR1bnRpbDo6YWJzdGltZSBBUyB2YWx1bnRpbCwKICAgICAgICAgc2V0Y29u ZmlnIEFTIHVzZWNvbmZpZwogICAgIEZST00gcGdfYXV0aGlkIExFRlQgSk9J TiBwZ19kYl9yb2xlX3NldHRpbmcgcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdXNlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdXNl ci5jCmluZGV4IDc1ZjFiM2MuLjQyZTQ3M2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3VzZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy91c2VyLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJh c2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RiX3JvbGVfc2V0dGluZy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNv bW1hbmRzL2NvbW1lbnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1h bmRzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvc2VjbGFiZWwuaCIKQEAgLTU1 LDYgKzU2LDkgQEAgc3RhdGljIHZvaWQgRGVsUm9sZU1lbXMoY29uc3QgY2hh ciAqcm9sZW5hbWUsIE9pZCByb2xlaWQsCiAJCQlMaXN0ICptZW1iZXJTcGVj cywgTGlzdCAqbWVtYmVySWRzLAogCQkJYm9vbCBhZG1pbl9vcHQpOwogCitz dGF0aWMgRGF0dW0gYnVpbGRQYXNzd29yZFZlcmlmaWVycyhjaGFyICpyb2xu YW1lLCBjaGFyICpwYXNzd29yZCwKKwkJCQkJCQkJCWJvb2wgc3RvcmVfZW5j cnlwdGVkLAorCQkJCQkgICBjaGFyICp2ZXJpZmllcnMsIGJvb2wgKmlzbnVs bCk7CiAKIC8qIENoZWNrIGlmIGN1cnJlbnQgdXNlciBoYXMgY3JlYXRlcm9s ZSBwcml2aWxlZ2VzICovCiBzdGF0aWMgYm9vbApAQCAtODAsNyArODQsNyBA QCBDcmVhdGVSb2xlKENyZWF0ZVJvbGVTdG10ICpzdG10KQogCUxpc3RDZWxs ICAgKm9wdGlvbjsKIAljaGFyCSAgICpwYXNzd29yZCA9IE5VTEw7CS8qIHVz ZXIgcGFzc3dvcmQgKi8KIAlib29sCQllbmNyeXB0X3Bhc3N3b3JkID0gUGFz c3dvcmRfZW5jcnlwdGlvbjsgLyogZW5jcnlwdCBwYXNzd29yZD8gKi8KLQlj aGFyCQllbmNyeXB0ZWRfcGFzc3dvcmRbTUQ1X1BBU1NXRF9MRU4gKyAxXTsK KwljaGFyCSAgICpwYXNzd29yZFZlcmlmaWVycyA9IE5VTEw7CiAJYm9vbAkJ aXNzdXBlciA9IGZhbHNlOwkvKiBNYWtlIHRoZSB1c2VyIGEgc3VwZXJ1c2Vy PyAqLwogCWJvb2wJCWluaGVyaXQgPSB0cnVlOyAvKiBBdXRvIGluaGVyaXQg cHJpdmlsZWdlcz8gKi8KIAlib29sCQljcmVhdGVyb2xlID0gZmFsc2U7CQkv KiBDYW4gdGhpcyB1c2VyIGNyZWF0ZSByb2xlcz8gKi8KQEAgLTk2LDYgKzEw MCw3IEBAIENyZWF0ZVJvbGUoQ3JlYXRlUm9sZVN0bXQgKnN0bXQpCiAJRGF0 dW0JCXZhbGlkVW50aWxfZGF0dW07CQkvKiBzYW1lLCBhcyB0aW1lc3RhbXB0 eiBEYXR1bSAqLwogCWJvb2wJCXZhbGlkVW50aWxfbnVsbDsKIAlEZWZFbGVt ICAgICpkcGFzc3dvcmQgPSBOVUxMOworCURlZkVsZW0gICAgKmRwYXNzd29y ZHZlcmlmaWVycyA9IE5VTEw7CiAJRGVmRWxlbSAgICAqZGlzc3VwZXIgPSBO VUxMOwogCURlZkVsZW0gICAgKmRpbmhlcml0ID0gTlVMTDsKIAlEZWZFbGVt ICAgICpkY3JlYXRlcm9sZSA9IE5VTEw7CkBAIC0xNDEsNiArMTQ2LDE0IEBA IENyZWF0ZVJvbGUoQ3JlYXRlUm9sZVN0bXQgKnN0bXQpCiAJCQllbHNlIGlm IChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ1bmVuY3J5cHRlZFBhc3N3b3Jk IikgPT0gMCkKIAkJCQllbmNyeXB0X3Bhc3N3b3JkID0gZmFsc2U7CiAJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicGFzc3dvcmRW ZXJpZmllcnMiKSA9PSAwKQorCQl7CisJCQlpZiAoZHBhc3N3b3JkIHx8IGRw YXNzd29yZHZlcmlmaWVycykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1z ZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOworCQkJ ZHBhc3N3b3JkdmVyaWZpZXJzID0gZGVmZWw7CisJCX0KIAkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3lzaWQiKSA9PSAwKQogCQl7CiAJ CQllcmVwb3J0KE5PVElDRSwKQEAgLTI0OSw2ICsyNjIsOCBAQCBDcmVhdGVS b2xlKENyZWF0ZVJvbGVTdG10ICpzdG10KQogCiAJaWYgKGRwYXNzd29yZCAm JiBkcGFzc3dvcmQtPmFyZykKIAkJcGFzc3dvcmQgPSBzdHJWYWwoZHBhc3N3 b3JkLT5hcmcpOworCWlmIChkcGFzc3dvcmR2ZXJpZmllcnMgJiYgZHBhc3N3 b3JkdmVyaWZpZXJzLT5hcmcpCisJCXBhc3N3b3JkVmVyaWZpZXJzID0gc3Ry VmFsKGRwYXNzd29yZHZlcmlmaWVycy0+YXJnKTsKIAlpZiAoZGlzc3VwZXIp CiAJCWlzc3VwZXIgPSBpbnRWYWwoZGlzc3VwZXItPmFyZykgIT0gMDsKIAlp ZiAoZGluaGVyaXQpCkBAIC0zNDYsNyArMzYxLDEwIEBAIENyZWF0ZVJvbGUo Q3JlYXRlUm9sZVN0bXQgKnN0bXQpCiAJfQogCiAJLyoKLQkgKiBDYWxsIHRo ZSBwYXNzd29yZCBjaGVja2luZyBob29rIGlmIHRoZXJlIGlzIG9uZSBkZWZp bmVkCisJICogQ2FsbCB0aGUgcGFzc3dvcmQgY2hlY2tpbmcgaG9vayBpZiB0 aGVyZSBpcyBvbmUgZGVmaW5lZC4gUGFzcyB0aGUKKwkgKiBwbGFpbnRleHQg cGFzc3dvcmQgdG8gaXQgaWYgd2UgaGF2ZSBpdCwgb3RoZXJ3aXNlIGp1c3Qg dGhlIE1ENSBoYXNoLgorCSAqCisJICogWFhYOiB3aGF0IHRvIGRvIHdpdGgg b3RoZXIgdmVyaWZpZXJzPyBOZWVkIHRvIGNoYW5nZSB0aGUgaG9vayBBUEku Li4KIAkgKi8KIAlpZiAoY2hlY2tfcGFzc3dvcmRfaG9vayAmJiBwYXNzd29y ZCkKIAkJKCpjaGVja19wYXNzd29yZF9ob29rKSAoc3RtdC0+cm9sZSwKQEAg LTM3MSwyNCArMzg5LDEwIEBAIENyZWF0ZVJvbGUoQ3JlYXRlUm9sZVN0bXQg KnN0bXQpCiAJbmV3X3JlY29yZFtBbnVtX3BnX2F1dGhpZF9yb2xjYW5sb2dp biAtIDFdID0gQm9vbEdldERhdHVtKGNhbmxvZ2luKTsKIAluZXdfcmVjb3Jk W0FudW1fcGdfYXV0aGlkX3JvbHJlcGxpY2F0aW9uIC0gMV0gPSBCb29sR2V0 RGF0dW0oaXNyZXBsaWNhdGlvbik7CiAJbmV3X3JlY29yZFtBbnVtX3BnX2F1 dGhpZF9yb2xjb25ubGltaXQgLSAxXSA9IEludDMyR2V0RGF0dW0oY29ubmxp bWl0KTsKLQotCWlmIChwYXNzd29yZCkKLQl7Ci0JCWlmICghZW5jcnlwdF9w YXNzd29yZCB8fCBpc01ENShwYXNzd29yZCkpCi0JCQluZXdfcmVjb3JkW0Fu dW1fcGdfYXV0aGlkX3JvbHBhc3N3b3JkIC0gMV0gPQotCQkJCUNTdHJpbmdH ZXRUZXh0RGF0dW0ocGFzc3dvcmQpOwotCQllbHNlCi0JCXsKLQkJCWlmICgh cGdfbWQ1X2VuY3J5cHQocGFzc3dvcmQsIHN0bXQtPnJvbGUsIHN0cmxlbihz dG10LT5yb2xlKSwKLQkJCQkJCQkJZW5jcnlwdGVkX3Bhc3N3b3JkKSkKLQkJ CQllbG9nKEVSUk9SLCAicGFzc3dvcmQgZW5jcnlwdGlvbiBmYWlsZWQiKTsK LQkJCW5ld19yZWNvcmRbQW51bV9wZ19hdXRoaWRfcm9scGFzc3dvcmQgLSAx XSA9Ci0JCQkJQ1N0cmluZ0dldFRleHREYXR1bShlbmNyeXB0ZWRfcGFzc3dv cmQpOwotCQl9Ci0JfQotCWVsc2UKLQkJbmV3X3JlY29yZF9udWxsc1tBbnVt X3BnX2F1dGhpZF9yb2xwYXNzd29yZCAtIDFdID0gdHJ1ZTsKLQorCW5ld19y ZWNvcmRbQW51bV9wZ19hdXRoaWRfcm9sdmVyaWZpZXJzIC0gMV0gPQorCQli dWlsZFBhc3N3b3JkVmVyaWZpZXJzKHN0bXQtPnJvbGUsIHBhc3N3b3JkLCBl bmNyeXB0X3Bhc3N3b3JkLAorCQkJCQkJCSAgIHBhc3N3b3JkVmVyaWZpZXJz LAorCQkJCQkJCSAgICZuZXdfcmVjb3JkX251bGxzW0FudW1fcGdfYXV0aGlk X3JvbHZlcmlmaWVycyAtIDFdKTsKIAluZXdfcmVjb3JkW0FudW1fcGdfYXV0 aGlkX3JvbHZhbGlkdW50aWwgLSAxXSA9IHZhbGlkVW50aWxfZGF0dW07CiAJ bmV3X3JlY29yZF9udWxsc1tBbnVtX3BnX2F1dGhpZF9yb2x2YWxpZHVudGls IC0gMV0gPSB2YWxpZFVudGlsX251bGw7CiAKQEAgLTQ4Nyw3ICs0OTEsNyBA QCBBbHRlclJvbGUoQWx0ZXJSb2xlU3RtdCAqc3RtdCkKIAljaGFyCSAgICpy b2xlbmFtZSA9IE5VTEw7CiAJY2hhcgkgICAqcGFzc3dvcmQgPSBOVUxMOwkv KiB1c2VyIHBhc3N3b3JkICovCiAJYm9vbAkJZW5jcnlwdF9wYXNzd29yZCA9 IFBhc3N3b3JkX2VuY3J5cHRpb247IC8qIGVuY3J5cHQgcGFzc3dvcmQ/ICov Ci0JY2hhcgkJZW5jcnlwdGVkX3Bhc3N3b3JkW01ENV9QQVNTV0RfTEVOICsg MV07CisJY2hhcgkgICAqcGFzc3dvcmRWZXJpZmllcnMgPSBOVUxMOwogCWlu dAkJCWlzc3VwZXIgPSAtMTsJLyogTWFrZSB0aGUgdXNlciBhIHN1cGVydXNl cj8gKi8KIAlpbnQJCQlpbmhlcml0ID0gLTE7CS8qIEF1dG8gaW5oZXJpdCBw cml2aWxlZ2VzPyAqLwogCWludAkJCWNyZWF0ZXJvbGUgPSAtMTsJLyogQ2Fu IHRoaXMgdXNlciBjcmVhdGUgcm9sZXM/ICovCkBAIC01MDEsNiArNTA1LDcg QEAgQWx0ZXJSb2xlKEFsdGVyUm9sZVN0bXQgKnN0bXQpCiAJYm9vbAkJdmFs aWRVbnRpbF9udWxsOwogCWJvb2wJCWJ5cGFzc3JscyA9IC0xOwogCURlZkVs ZW0gICAgKmRwYXNzd29yZCA9IE5VTEw7CisJRGVmRWxlbSAgICAqZHBhc3N3 b3JkdmVyaWZpZXJzID0gTlVMTDsKIAlEZWZFbGVtICAgICpkaXNzdXBlciA9 IE5VTEw7CiAJRGVmRWxlbSAgICAqZGluaGVyaXQgPSBOVUxMOwogCURlZkVs ZW0gICAgKmRjcmVhdGVyb2xlID0gTlVMTDsKQEAgLTUxOSwxMCArNTI0LDEw IEBAIEFsdGVyUm9sZShBbHRlclJvbGVTdG10ICpzdG10KQogCQlEZWZFbGVt ICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChvcHRpb24pOwogCiAJ CWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXNzd29yZCIpID09IDAg fHwKLQkJCXN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImVuY3J5cHRlZFBhc3N3 b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidW5l bmNyeXB0ZWRQYXNzd29yZCIpID09IDApCisJCQkJIHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgImVuY3J5cHRlZFBhc3N3b3JkIikgPT0gMCB8fAorCQkJCSBz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ1bmVuY3J5cHRlZFBhc3N3b3JkIikg PT0gMCkKIAkJewotCQkJaWYgKGRwYXNzd29yZCkKKwkJCWlmIChkcGFzc3dv cmQgfHwgZHBhc3N3b3JkdmVyaWZpZXJzKQogCQkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJ CQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucyIp KSk7CkBAIC01MzIsNiArNTM3LDE0IEBAIEFsdGVyUm9sZShBbHRlclJvbGVT dG10ICpzdG10KQogCQkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAidW5lbmNyeXB0ZWRQYXNzd29yZCIpID09IDApCiAJCQkJZW5jcnlwdF9w YXNzd29yZCA9IGZhbHNlOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInBhc3N3b3JkVmVyaWZpZXJzIikgPT0gMCkKKwkJewor CQkJaWYgKGRwYXNzd29yZCB8fCBkcGFzc3dvcmR2ZXJpZmllcnMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVu ZGFudCBvcHRpb25zIikpKTsKKwkJCWRwYXNzd29yZHZlcmlmaWVycyA9IGRl ZmVsOworCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InN1cGVydXNlciIpID09IDApCiAJCXsKIAkJCWlmIChkaXNzdXBlcikKQEAg LTYyMCw2ICs2MzMsOCBAQCBBbHRlclJvbGUoQWx0ZXJSb2xlU3RtdCAqc3Rt dCkKIAogCWlmIChkcGFzc3dvcmQgJiYgZHBhc3N3b3JkLT5hcmcpCiAJCXBh c3N3b3JkID0gc3RyVmFsKGRwYXNzd29yZC0+YXJnKTsKKwlpZiAoZHBhc3N3 b3JkdmVyaWZpZXJzICYmIGRwYXNzd29yZHZlcmlmaWVycy0+YXJnKQorCQlw YXNzd29yZFZlcmlmaWVycyA9IHN0clZhbChkcGFzc3dvcmR2ZXJpZmllcnMt PmFyZyk7CiAJaWYgKGRpc3N1cGVyKQogCQlpc3N1cGVyID0gaW50VmFsKGRp c3N1cGVyLT5hcmcpOwogCWlmIChkaW5oZXJpdCkKQEAgLTcxOCw3ICs3MzMs MTAgQEAgQWx0ZXJSb2xlKEFsdGVyUm9sZVN0bXQgKnN0bXQpCiAJfQogCiAJ LyoKLQkgKiBDYWxsIHRoZSBwYXNzd29yZCBjaGVja2luZyBob29rIGlmIHRo ZXJlIGlzIG9uZSBkZWZpbmVkCisJICogQ2FsbCB0aGUgcGFzc3dvcmQgY2hl Y2tpbmcgaG9vayBpZiB0aGVyZSBpcyBvbmUgZGVmaW5lZC4gUGFzcyB0aGUK KwkgKiBwbGFpbnRleHQgcGFzc3dvcmQgdG8gaXQgaWYgd2UgaGF2ZSBpdCwg b3RoZXJ3aXNlIGp1c3QgdGhlIE1ENSBoYXNoLgorCSAqCisJICogWFhYOiB3 aGF0IHRvIGRvIHdpdGggb3RoZXIgdmVyaWZpZXJzPyBOZWVkIHRvIGNoYW5n ZSB0aGUgaG9vayBBUEkuLi4KIAkgKi8KIAlpZiAoY2hlY2tfcGFzc3dvcmRf aG9vayAmJiBwYXNzd29yZCkKIAkJKCpjaGVja19wYXNzd29yZF9ob29rKShy b2xlbmFtZSAsCkBAIC03NzksMjggKzc5NywxNCBAQCBBbHRlclJvbGUoQWx0 ZXJSb2xlU3RtdCAqc3RtdCkKIAkJbmV3X3JlY29yZF9yZXBsW0FudW1fcGdf YXV0aGlkX3JvbGNvbm5saW1pdCAtIDFdID0gdHJ1ZTsKIAl9CiAKLQkvKiBw YXNzd29yZCAqLwotCWlmIChwYXNzd29yZCkKKwkvKiBzZXQgb3IgdW5zZXQg cGFzc3dvcmQgKi8KKwlpZiAoZHBhc3N3b3JkKQogCXsKLQkJaWYgKCFlbmNy eXB0X3Bhc3N3b3JkIHx8IGlzTUQ1KHBhc3N3b3JkKSkKLQkJCW5ld19yZWNv cmRbQW51bV9wZ19hdXRoaWRfcm9scGFzc3dvcmQgLSAxXSA9Ci0JCQkJQ1N0 cmluZ0dldFRleHREYXR1bShwYXNzd29yZCk7Ci0JCWVsc2UKLQkJewotCQkJ aWYgKCFwZ19tZDVfZW5jcnlwdChwYXNzd29yZCwgcm9sZW5hbWUsIHN0cmxl bihyb2xlbmFtZSksCi0JCQkJCQkJCWVuY3J5cHRlZF9wYXNzd29yZCkpCi0J CQkJZWxvZyhFUlJPUiwgInBhc3N3b3JkIGVuY3J5cHRpb24gZmFpbGVkIik7 Ci0JCQluZXdfcmVjb3JkW0FudW1fcGdfYXV0aGlkX3JvbHBhc3N3b3JkIC0g MV0gPQotCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oZW5jcnlwdGVkX3Bhc3N3 b3JkKTsKLQkJfQotCQluZXdfcmVjb3JkX3JlcGxbQW51bV9wZ19hdXRoaWRf cm9scGFzc3dvcmQgLSAxXSA9IHRydWU7Ci0JfQotCi0JLyogdW5zZXQgcGFz c3dvcmQgKi8KLQlpZiAoZHBhc3N3b3JkICYmIGRwYXNzd29yZC0+YXJnID09 IE5VTEwpCi0JewotCQluZXdfcmVjb3JkX3JlcGxbQW51bV9wZ19hdXRoaWRf cm9scGFzc3dvcmQgLSAxXSA9IHRydWU7Ci0JCW5ld19yZWNvcmRfbnVsbHNb QW51bV9wZ19hdXRoaWRfcm9scGFzc3dvcmQgLSAxXSA9IHRydWU7CisJCW5l d19yZWNvcmRfcmVwbFtBbnVtX3BnX2F1dGhpZF9yb2x2ZXJpZmllcnMgLSAx XSA9IHRydWU7CisJCW5ld19yZWNvcmRbQW51bV9wZ19hdXRoaWRfcm9sdmVy aWZpZXJzIC0gMV0gPQorCQkJYnVpbGRQYXNzd29yZFZlcmlmaWVycyhyb2xl bmFtZSwgcGFzc3dvcmQsIGVuY3J5cHRfcGFzc3dvcmQsCisJCQkJCQkJCSAg IHBhc3N3b3JkVmVyaWZpZXJzLAorCQkJCQkJCQkgICAmbmV3X3JlY29yZF9u dWxsc1tBbnVtX3BnX2F1dGhpZF9yb2x2ZXJpZmllcnMgLSAxXSk7CiAJfQog CiAJLyogdmFsaWQgdW50aWwgKi8KQEAgLTExOTIsMTYgKzExOTYsNDMgQEAg UmVuYW1lUm9sZShjb25zdCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpu ZXduYW1lKQogCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldERhdHVtKG5ld25h bWUpKTsKIAlyZXBsX251bGxbQW51bV9wZ19hdXRoaWRfcm9sbmFtZSAtIDFd ID0gZmFsc2U7CiAKLQlkYXR1bSA9IGhlYXBfZ2V0YXR0cihvbGR0dXBsZSwg QW51bV9wZ19hdXRoaWRfcm9scGFzc3dvcmQsIGRzYywgJmlzbnVsbCk7CisJ ZGF0dW0gPSBoZWFwX2dldGF0dHIob2xkdHVwbGUsIEFudW1fcGdfYXV0aGlk X3JvbHZlcmlmaWVycywgZHNjLCAmaXNudWxsKTsKIAotCWlmICghaXNudWxs ICYmIGlzTUQ1KFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSkKKwlpZiAo IWlzbnVsbCkKIAl7Ci0JCS8qIE1ENSB1c2VzIHRoZSB1c2VybmFtZSBhcyBz YWx0LCBzbyBqdXN0IGNsZWFyIGl0IG9uIGEgcmVuYW1lICovCi0JCXJlcGxf cmVwbFtBbnVtX3BnX2F1dGhpZF9yb2xwYXNzd29yZCAtIDFdID0gdHJ1ZTsK LQkJcmVwbF9udWxsW0FudW1fcGdfYXV0aGlkX3JvbHBhc3N3b3JkIC0gMV0g PSB0cnVlOworCQlEYXR1bQkgICAqdmVyaWZpZXJzOworCQlpbnQJCQludmVy aWZpZXJzOworCQlib29sCQltb2RpZmllZCA9IGZhbHNlOwogCi0JCWVyZXBv cnQoTk9USUNFLAotCQkJCShlcnJtc2coIk1ENSBwYXNzd29yZCBjbGVhcmVk IGJlY2F1c2Ugb2Ygcm9sZSByZW5hbWUiKSkpOworCQlkZWNvbnN0cnVjdF9h cnJheShEYXR1bUdldEFycmF5VHlwZVAoZGF0dW0pLCBURVhUT0lELCAtMSwg ZmFsc2UsICdpJywKKwkJCQkJCSAgJnZlcmlmaWVycywgTlVMTCwgJm52ZXJp ZmllcnMpOworCQlmb3IgKGkgPSAwOyBpIDwgbnZlcmlmaWVyczspCisJCXsK KwkJCWNoYXIgKnZlcmlmaWVyID0gVGV4dERhdHVtR2V0Q1N0cmluZyh2ZXJp ZmllcnNbaV0pOworCQkJaWYgKHN0cm5jbXAodmVyaWZpZXIsICJtZDU6Iiwg NCkgPT0gMCkKKwkJCXsKKwkJCQkvKiBNRDUgdXNlcyB0aGUgdXNlcm5hbWUg YXMgc2FsdCwgc28gY2xlYXIgaXQgb24gYSByZW5hbWUgKi8KKwkJCQludmVy aWZpZXJzLS07CisJCQkJbWVtbW92ZSgmdmVyaWZpZXJzW2ldLCAmdmVyaWZp ZXJzW2kgKyAxXSwgbnZlcmlmaWVycyAtIGkpOworCQkJCW1vZGlmaWVkID0g dHJ1ZTsKKwkJCQllcmVwb3J0KE5PVElDRSwKKwkJCQkJCShlcnJtc2coIk1E NSBwYXNzd29yZCBjbGVhcmVkIGJlY2F1c2Ugb2Ygcm9sZSByZW5hbWUiKSkp OworCQkJfQorCQkJZWxzZQorCQkJCWkrKzsKKwkJfQorCQlpZiAobW9kaWZp ZWQpCisJCXsKKwkJCXJlcGxfcmVwbFtBbnVtX3BnX2F1dGhpZF9yb2x2ZXJp ZmllcnMgLSAxXSA9IHRydWU7CisJCQlpZiAobnZlcmlmaWVycyA9PSAwKQor CQkJCXJlcGxfbnVsbFtBbnVtX3BnX2F1dGhpZF9yb2x2ZXJpZmllcnMgLSAx XSA9IHRydWU7CisJCQllbHNlCisJCQl7CisJCQkJcmVwbF92YWxbQW51bV9w Z19hdXRoaWRfcm9sdmVyaWZpZXJzIC0gMV0gPQorCQkJCQlQb2ludGVyR2V0 RGF0dW0oY29uc3RydWN0X2FycmF5KHZlcmlmaWVycywgbnZlcmlmaWVycywg VEVYVE9JRCwgLTEsIGZhbHNlLCAnaScpKTsKKwkJCQlyZXBsX251bGxbQW51 bV9wZ19hdXRoaWRfcm9sdmVyaWZpZXJzIC0gMV0gPSBmYWxzZTsKKwkJCX0K KwkJfQogCX0KIAogCW5ld3R1cGxlID0gaGVhcF9tb2RpZnlfdHVwbGUob2xk dHVwbGUsIGRzYywgcmVwbF92YWwsIHJlcGxfbnVsbCwgcmVwbF9yZXBsKTsK QEAgLTE2MjQsMyArMTY1NSw2MSBAQCBEZWxSb2xlTWVtcyhjb25zdCBjaGFy ICpyb2xlbmFtZSwgT2lkIHJvbGVpZCwKIAkgKi8KIAloZWFwX2Nsb3NlKHBn X2F1dGhtZW1fcmVsLCBOb0xvY2spOwogfQorCitzdGF0aWMgRGF0dW0KK2J1 aWxkUGFzc3dvcmRWZXJpZmllcnMoY2hhciAqcm9sbmFtZSwgY2hhciAqcGFz c3dvcmQsIGJvb2wgc3RvcmVfZW5jcnlwdGVkLAorCQkJCQkgICBjaGFyICp2 ZXJpZmllcnMsIGJvb2wgKmlzbnVsbCkKK3sKKwlEYXR1bQkJZGF0dW1zWzJd OworCWludAkJCW52ZXJpZmllcnMgPSAwOworCURhdHVtCQlyZXN1bHQ7CisJ Y2hhcgkgICAqdmVyaWZpZXIgPSBOVUxMOworCisJLyogSWYgYSB2ZXJpZmll ciBpcyBnaXZlbiwgdXNlIGl0IGFzIGlzICovCisJaWYgKHZlcmlmaWVycykK Kwl7CisJCXJlc3VsdCA9IE9pZElucHV0RnVuY3Rpb25DYWxsKEZfQVJSQVlf SU4sIHZlcmlmaWVycywgVEVYVE9JRCwgLTEpOworCQkqaXNudWxsID0gZmFs c2U7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogSWYgRU5DUllQVEVE IG9yIFVORU5DUllQVEVEIFBBU1NXT1JEIGlzIGdpdmVuLCBzdG9yZSBpdCAq LworCWlmIChwYXNzd29yZCkKKwl7CisJCS8qCisJCSAqIENoZWNrIGlmIHRo ZSBwYXNzd29yZCBpcyBhY3R1YWxseSBhbHJlYWR5IGFuIE1ENSBoYXNoLgor CQkgKi8KKwkJaWYgKGlzTUQ1KHBhc3N3b3JkKSkKKwkJeworCQkJdmVyaWZp ZXIgPSBwc3ByaW50ZigibWQ1OiVzIiwgcGFzc3dvcmQpOworCQkJZGF0dW1z W252ZXJpZmllcnMrK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHZlcmlmaWVy KTsKKwkJfQorCQllbHNlIGlmICghc3RvcmVfZW5jcnlwdGVkKQorCQl7CisJ CQl2ZXJpZmllciA9IHBzcHJpbnRmKCJwYXNzd29yZDolcyIsIHBhc3N3b3Jk KTsKKwkJCWRhdHVtc1tudmVyaWZpZXJzKytdID0gQ1N0cmluZ0dldFRleHRE YXR1bSh2ZXJpZmllcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQljaGFyCQll bmNyeXB0ZWRfcGFzc3dvcmRbTUQ1X1BBU1NXRF9MRU4gKyAxXTsKKworCQkJ aWYgKCFwZ19tZDVfZW5jcnlwdChwYXNzd29yZCwgcm9sbmFtZSwgc3RybGVu KHJvbG5hbWUpLAorCQkJCQkJCQllbmNyeXB0ZWRfcGFzc3dvcmQpKQorCQkJ CWVsb2coRVJST1IsICJwYXNzd29yZCBlbmNyeXB0aW9uIGZhaWxlZCIpOwor CQkJdmVyaWZpZXIgPSBwc3ByaW50ZigibWQ1OiVzIiwgZW5jcnlwdGVkX3Bh c3N3b3JkKTsKKwkJCWRhdHVtc1tudmVyaWZpZXJzKytdID0gQ1N0cmluZ0dl dFRleHREYXR1bSh2ZXJpZmllcik7CisJCX0KKwl9CisKKwlpZiAobnZlcmlm aWVycyA9PSAwKQorCXsKKwkJcmVzdWx0ID0gKERhdHVtKSAwOworCQkqaXNu dWxsID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJcmVzdWx0ID0gUG9pbnRl ckdldERhdHVtKGNvbnN0cnVjdF9hcnJheShkYXR1bXMsIG52ZXJpZmllcnMs IFRFWFRPSUQsIC0xLCBmYWxzZSwgJ2knKSk7CisJCSppc251bGwgPSBmYWxz ZTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2xpYnBxL2NyeXB0LmMgYi9zcmMvYmFja2VuZC9saWJwcS9jcnlw dC5jCmluZGV4IDk3YmU5NDQuLjRjOTRkNjMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2xpYnBxL2NyeXB0LmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEv Y3J5cHQuYwpAQCAtMjEsMTMgKzIxLDkzIEBACiAjZW5kaWYKIAogI2luY2x1 ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAibGlicHEvY3J5cHQuaCIKICNpbmNsdWRl ICJsaWJwcS9tZDUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy90aW1lc3RhbXAuaCIKIAorLyoKKyAqIEdldCB2ZXJpZmllciBzdG9y ZWQgaW4gcGdfcm9sZWlkIHR1cGxlLCBmb3IgZ2l2ZW4gYXV0aGVudGljYXRp b24gbWV0aG9kLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcm9sZV92ZXJp Zmllcl9mcm9tX3R1cChIZWFwVHVwbGUgcm9sZVR1cCwgY29uc3QgY2hhciAq bWV0aG9kKQoreworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJ RGF0dW0JICAgKmVsZW1zOworCWludAkJCW5lbGVtczsKKwljaGFyCSAgICp2 ZXJpZmllciA9IE5VTEw7CisJaW50CQkJaTsKKworCWRhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKEFVVEhOQU1FLCByb2xlVHVwLAorCQkJCQkJCUFudW1fcGdf YXV0aGlkX3JvbHZlcmlmaWVycywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBQYXJzZSB0aGUgc3RvcmVkIHZhbHVl ICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGRh dHVtKSwgVEVYVE9JRCwgLTEsIGZhbHNlLCAnaScsCisJCQkJCSAgJmVsZW1z LCBOVUxMLCAmbmVsZW1zKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBp ICsrKQorCXsKKwkJY2hhcgkJKnMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGVs ZW1zW2ldKTsKKwkJY2hhcgkgICAgKmNvbG9uOworCisJCWNvbG9uID0gc3Ry Y2hyKHMsICc6Jyk7CisJCWlmIChjb2xvbiA9PSBOVUxMKQorCQkJY29udGlu dWU7IC8qIHNob3VsZG4ndCBoYXBwZW4sIGludmFsaWQgdmVyaWZpZXIgKi8K KworCQkqY29sb24gPSAnXDAnOworCQl2ZXJpZmllciA9IGNvbG9uICsgMTsK KworCQlpZiAoc3RyY21wKHMsIG1ldGhvZCkgPT0gMCkKKwkJeworCQkJdmVy aWZpZXIgPSBwc3RyZHVwKGNvbG9uICsgMSk7CisJCQlwZnJlZShzKTsKKwkJ CWJyZWFrOworCQl9CisJCXBmcmVlKHMpOworCX0KKworCXJldHVybiB2ZXJp ZmllcjsKK30KKworY2hhciAqCitnZXRfcm9sZV92ZXJpZmllcihjb25zdCBj aGFyICpyb2xlLCBjb25zdCBjaGFyICptZXRob2QsIGNoYXIgKipsb2dkZXRh aWwpCit7CisJY2hhcgkgICAqdmVyaWZpZXI7CisJSGVhcFR1cGxlCXJvbGVU dXA7CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKworCS8qIEdl dCByb2xlIGluZm8gZnJvbSBwZ19hdXRoaWQgKi8KKwlyb2xlVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKEFVVEhOQU1FLCBQb2ludGVyR2V0RGF0dW0ocm9sZSkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2xlVHVwKSkKKwkJcmV0dXJu IE5VTEw7CS8qIG5vIHN1Y2ggdXNlciAqLworCisJZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoQVVUSE5BTUUsIHJvbGVUdXAsCisJCQkJCQkJQW51bV9wZ19h dXRoaWRfcm9sdmFsaWR1bnRpbCwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwp CisJeworCQlUaW1lc3RhbXBUeiB2dW50aWwgPSBEYXR1bUdldFRpbWVzdGFt cFR6KGRhdHVtKTsKKwkJaWYgKHZ1bnRpbCA8IEdldEN1cnJlbnRUaW1lc3Rh bXAoKSkKKwkJeworCQkJKmxvZ2RldGFpbCA9IHBzcHJpbnRmKF8oIlVzZXIg XCIlc1wiIGhhcyBhbiBleHBpcmVkIHBhc3N3b3JkLiIpLAorCQkJCQkJCQkg IHJvbGUpOworCQkJUmVsZWFzZVN5c0NhY2hlKHJvbGVUdXApOworCQkJcmV0 dXJuIE5VTEw7CisJCX0KKwl9CisKKwl2ZXJpZmllciA9IGdldF9yb2xlX3Zl cmlmaWVyX2Zyb21fdHVwKHJvbGVUdXAsIG1ldGhvZCk7CisKKwlSZWxlYXNl U3lzQ2FjaGUocm9sZVR1cCk7CisKKwlyZXR1cm4gdmVyaWZpZXI7Cit9CiAK IC8qCiAgKiBDaGVjayBnaXZlbiBwYXNzd29yZCBmb3IgZ2l2ZW4gdXNlciwg YW5kIHJldHVybiBTVEFUVVNfT0sgb3IgU1RBVFVTX0VSUk9SLgpAQCAtMzks OSArMTE5LDEwIEBAIG1kNV9jcnlwdF92ZXJpZnkoY29uc3QgUG9ydCAqcG9y dCwgY29uc3QgY2hhciAqcm9sZSwgY2hhciAqY2xpZW50X3Bhc3MsCiAJCQkJ IGNoYXIgKipsb2dkZXRhaWwpCiB7CiAJaW50CQkJcmV0dmFsID0gU1RBVFVT X0VSUk9SOwotCWNoYXIJICAgKnNoYWRvd19wYXNzLAorCWNoYXIJICAgKnZl cmlmaWVyLAogCQkJICAgKmNyeXB0X3B3ZDsKIAlUaW1lc3RhbXBUeiB2dW50 aWwgPSAwOworCWJvb2wJCXZlcmlmaWVyX2lzX21kNTsKIAljaGFyCSAgICpj cnlwdF9jbGllbnRfcGFzcyA9IGNsaWVudF9wYXNzOwogCUhlYXBUdXBsZQly b2xlVHVwOwogCURhdHVtCQlkYXR1bTsKQEAgLTUyLDE2ICsxMzMsMjIgQEAg bWQ1X2NyeXB0X3ZlcmlmeShjb25zdCBQb3J0ICpwb3J0LCBjb25zdCBjaGFy ICpyb2xlLCBjaGFyICpjbGllbnRfcGFzcywKIAlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocm9sZVR1cCkpCiAJCXJldHVybiBTVEFUVVNfRVJST1I7CS8qIG5v IHN1Y2ggdXNlciAqLwogCi0JZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQVVU SE5BTUUsIHJvbGVUdXAsCi0JCQkJCQkJQW51bV9wZ19hdXRoaWRfcm9scGFz c3dvcmQsICZpc251bGwpOwotCWlmIChpc251bGwpCisJdmVyaWZpZXJfaXNf bWQ1ID0gdHJ1ZTsKKwl2ZXJpZmllciA9IGdldF9yb2xlX3ZlcmlmaWVyX2Zy b21fdHVwKHJvbGVUdXAsICJtZDUiKTsKKwlpZiAodmVyaWZpZXIgPT0gTlVM TCkKIAl7Ci0JCVJlbGVhc2VTeXNDYWNoZShyb2xlVHVwKTsKLQkJKmxvZ2Rl dGFpbCA9IHBzcHJpbnRmKF8oIlVzZXIgXCIlc1wiIGhhcyBubyBwYXNzd29y ZCBhc3NpZ25lZC4iKSwKLQkJCQkJCQkgIHJvbGUpOwotCQlyZXR1cm4gU1RB VFVTX0VSUk9SOwkvKiB1c2VyIGhhcyBubyBwYXNzd29yZCAqLworCQkvKiB3 ZSBjYW4gYWxzbyB1c2UgYSBwbGFpbnRleHQgcGFzc3dvcmQsIGJ5IGNyZWF0 aW5nIHRoZSBoYXNoIGZyb20gaXQgKi8KKwkJdmVyaWZpZXJfaXNfbWQ1ID0g ZmFsc2U7CisJCXZlcmlmaWVyID0gZ2V0X3JvbGVfdmVyaWZpZXJfZnJvbV90 dXAocm9sZVR1cCwgInBhc3N3b3JkIik7CisKKwkJaWYgKHZlcmlmaWVyID09 IE5VTEwpCisJCXsKKwkJCSpsb2dkZXRhaWwgPSBwc3ByaW50ZihfKCJVc2Vy IFwiJXNcIiBoYXMgbm8gcGFzc3dvcmQgYXNzaWduZWQgZm9yIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZCBcIiVzXCIuIiksCisJCQkJCQkJCSAgcm9sZSwgIm1k NSIpOworCQkJUmVsZWFzZVN5c0NhY2hlKHJvbGVUdXApOworCQkJcmV0dXJu IFNUQVRVU19FUlJPUjsKKwkJfQogCX0KLQlzaGFkb3dfcGFzcyA9IFRleHRE YXR1bUdldENTdHJpbmcoZGF0dW0pOwogCiAJZGF0dW0gPSBTeXNDYWNoZUdl dEF0dHIoQVVUSE5BTUUsIHJvbGVUdXAsCiAJCQkJCQkJQW51bV9wZ19hdXRo aWRfcm9sdmFsaWR1bnRpbCwgJmlzbnVsbCk7CkBAIC03MCw3ICsxNTcsNyBA QCBtZDVfY3J5cHRfdmVyaWZ5KGNvbnN0IFBvcnQgKnBvcnQsIGNvbnN0IGNo YXIgKnJvbGUsIGNoYXIgKmNsaWVudF9wYXNzLAogCiAJUmVsZWFzZVN5c0Nh Y2hlKHJvbGVUdXApOwogCi0JaWYgKCpzaGFkb3dfcGFzcyA9PSAnXDAnKQor CWlmICgqdmVyaWZpZXIgPT0gJ1wwJykKIAkJcmV0dXJuIFNUQVRVU19FUlJP UjsJLyogZW1wdHkgcGFzc3dvcmQgKi8KIAogCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CkBAIC04MywxMCArMTcwLDEwIEBAIG1kNV9jcnlwdF92ZXJpZnko Y29uc3QgUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqcm9sZSwgY2hhciAqY2xp ZW50X3Bhc3MsCiAJewogCQljYXNlIHVhTUQ1OgogCQkJY3J5cHRfcHdkID0g cGFsbG9jKE1ENV9QQVNTV0RfTEVOICsgMSk7Ci0JCQlpZiAoaXNNRDUoc2hh ZG93X3Bhc3MpKQorCQkJaWYgKHZlcmlmaWVyX2lzX21kNSkKIAkJCXsKIAkJ CQkvKiBzdG9yZWQgcGFzc3dvcmQgYWxyZWFkeSBlbmNyeXB0ZWQsIG9ubHkg ZG8gc2FsdCAqLwotCQkJCWlmICghcGdfbWQ1X2VuY3J5cHQoc2hhZG93X3Bh c3MgKyBzdHJsZW4oIm1kNSIpLAorCQkJCWlmICghcGdfbWQ1X2VuY3J5cHQo dmVyaWZpZXIgKyBzdHJsZW4oIm1kNSIpLAogCQkJCQkJCQkJcG9ydC0+bWQ1 U2FsdCwKIAkJCQkJCQkJCXNpemVvZihwb3J0LT5tZDVTYWx0KSwgY3J5cHRf cHdkKSkKIAkJCQl7CkBAIC05OSw3ICsxODYsNyBAQCBtZDVfY3J5cHRfdmVy aWZ5KGNvbnN0IFBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKnJvbGUsIGNoYXIg KmNsaWVudF9wYXNzLAogCQkJCS8qIHN0b3JlZCBwYXNzd29yZCBpcyBwbGFp biwgZG91YmxlLWVuY3J5cHQgKi8KIAkJCQljaGFyCSAgICpjcnlwdF9wd2Qy ID0gcGFsbG9jKE1ENV9QQVNTV0RfTEVOICsgMSk7CiAKLQkJCQlpZiAoIXBn X21kNV9lbmNyeXB0KHNoYWRvd19wYXNzLAorCQkJCWlmICghcGdfbWQ1X2Vu Y3J5cHQodmVyaWZpZXIsCiAJCQkJCQkJCQlwb3J0LT51c2VyX25hbWUsCiAJ CQkJCQkJCQlzdHJsZW4ocG9ydC0+dXNlcl9uYW1lKSwKIAkJCQkJCQkJCWNy eXB0X3B3ZDIpKQpAQCAtMTIxLDcgKzIwOCw3IEBAIG1kNV9jcnlwdF92ZXJp ZnkoY29uc3QgUG9ydCAqcG9ydCwgY29uc3QgY2hhciAqcm9sZSwgY2hhciAq Y2xpZW50X3Bhc3MsCiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJ CWlmIChpc01ENShzaGFkb3dfcGFzcykpCisJCQlpZiAodmVyaWZpZXJfaXNf bWQ1KQogCQkJewogCQkJCS8qIEVuY3J5cHQgdXNlci1zdXBwbGllZCBwYXNz d29yZCB0byBtYXRjaCBzdG9yZWQgTUQ1ICovCiAJCQkJY3J5cHRfY2xpZW50 X3Bhc3MgPSBwYWxsb2MoTUQ1X1BBU1NXRF9MRU4gKyAxKTsKQEAgLTEzNCw3 ICsyMjEsNyBAQCBtZDVfY3J5cHRfdmVyaWZ5KGNvbnN0IFBvcnQgKnBvcnQs IGNvbnN0IGNoYXIgKnJvbGUsIGNoYXIgKmNsaWVudF9wYXNzLAogCQkJCQly ZXR1cm4gU1RBVFVTX0VSUk9SOwogCQkJCX0KIAkJCX0KLQkJCWNyeXB0X3B3 ZCA9IHNoYWRvd19wYXNzOworCQkJY3J5cHRfcHdkID0gdmVyaWZpZXI7CiAJ CQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDNh YTllNDIuLmQ2OGU2MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAt NjIzLDcgKzYyMyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAJVU5USUwgVVBEQVRFIFVTRVIgVVNJTkcKIAogCVZBQ1VVTSBW QUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMgVkFSQ0hB UiBWQVJJQURJQyBWQVJZSU5HCi0JVkVSQk9TRSBWRVJTSU9OX1AgVklFVyBW SUVXUyBWT0xBVElMRQorCVZFUkJPU0UgVkVSSUZJRVJTIFZFUlNJT05fUCBW SUVXIFZJRVdTIFZPTEFUSUxFCiAKIAlXSEVOIFdIRVJFIFdISVRFU1BBQ0Vf UCBXSU5ET1cgV0lUSCBXSVRISU4gV0lUSE9VVCBXT1JLIFdSQVBQRVIgV1JJ VEUKIApAQCAtOTE2LDYgKzkxNiwxMSBAQCBBbHRlck9wdFJvbGVFbGVtOgog CQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJ1bmVuY3J5cHRlZFBhc3N3b3JkIiwK IAkJCQkJCQkJCSAoTm9kZSAqKW1ha2VTdHJpbmcoJDMpKTsKIAkJCQl9CisJ CQl8IFBBU1NXT1JEIFZFUklGSUVSUyBTY29uc3QKKwkJCQl7CisJCQkJCSQk ID0gbWFrZURlZkVsZW0oInBhc3N3b3JkVmVyaWZpZXJzIiwKKwkJCQkJCQkJ CSAoTm9kZSAqKW1ha2VTdHJpbmcoJDMpKTsKKwkJCQl9CiAJCQl8IElOSEVS SVQKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0oImluaGVyaXQiLCAo Tm9kZSAqKW1ha2VJbnRlZ2VyKFRSVUUpKTsKQEAgLTEzNTA0LDYgKzEzNTA5 LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBWQUxJREFUT1IKIAkJ CXwgVkFMVUVfUAogCQkJfCBWQVJZSU5HCisJCQl8IFZFUklGSUVSUwogCQkJ fCBWRVJTSU9OX1AKIAkJCXwgVklFVwogCQkJfCBWSUVXUwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggNmE3YTY0MS4uMzJkNzEwYyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC02NjAsNyArNjYwLDgg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQlpX3JvbGNyZWF0ZWRi LAogCQkJCWlfcm9sY2FubG9naW4sCiAJCQkJaV9yb2xjb25ubGltaXQsCi0J CQkJaV9yb2xwYXNzd29yZCwKKwkJCQlpX3JvbHZlcmlmaWVycyA9IC0xLAor CQkJCWlfcm9scGFzc3dvcmQgPSAtMSwKIAkJCQlpX3JvbHZhbGlkdW50aWws CiAJCQkJaV9yb2xyZXBsaWNhdGlvbiwKIAkJCQlpX3JvbGJ5cGFzc3JscywK QEAgLTY2OSwxMCArNjcwLDIxIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4p CiAJaW50CQkJaTsKIAogCS8qIG5vdGU6IHJvbGNvbmZpZyBpcyBkdW1wZWQg bGF0ZXIgKi8KKwkvKiBGSVhNRTogYnVtcCB0aGlzIHdoZW4gd2UgYnJhbmNo IG9mZiAqLwogCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSA5MDUwMCkKIAkJcHJp bnRmUFFFeHBCdWZmZXIoYnVmLAogCQkJCQkJICAiU0VMRUNUIG9pZCwgcm9s bmFtZSwgcm9sc3VwZXIsIHJvbGluaGVyaXQsICIKIAkJCQkJCSAgInJvbGNy ZWF0ZXJvbGUsIHJvbGNyZWF0ZWRiLCAiCisJCQkJCQkgICJyb2xjYW5sb2dp biwgcm9sY29ubmxpbWl0LCByb2x2ZXJpZmllcnMsICIKKwkJCQkJCSAgInJv bHZhbGlkdW50aWwsIHJvbHJlcGxpY2F0aW9uLCByb2xieXBhc3NybHMsICIK KwkJCSAicGdfY2F0YWxvZy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ19h dXRoaWQnKSBhcyByb2xjb21tZW50LCAiCisJCQkJCQkgICJyb2xuYW1lID0g Y3VycmVudF91c2VyIEFTIGlzX2N1cnJlbnRfdXNlciAiCisJCQkJCQkgICJG Uk9NIHBnX2F1dGhpZCAiCisJCQkJCQkgICJPUkRFUiBCWSAyIik7CisJZWxz ZSBpZiAoc2VydmVyX3ZlcnNpb24gPj0gOTA1MDApCisJCXByaW50ZlBRRXhw QnVmZmVyKGJ1ZiwKKwkJCQkJCSAgIlNFTEVDVCBvaWQsIHJvbG5hbWUsIHJv bHN1cGVyLCByb2xpbmhlcml0LCAiCisJCQkJCQkgICJyb2xjcmVhdGVyb2xl LCByb2xjcmVhdGVkYiwgIgogCQkJCQkJICAicm9sY2FubG9naW4sIHJvbGNv bm5saW1pdCwgcm9scGFzc3dvcmQsICIKIAkJCQkJCSAgInJvbHZhbGlkdW50 aWwsIHJvbHJlcGxpY2F0aW9uLCByb2xieXBhc3NybHMsICIKIAkJCSAicGdf Y2F0YWxvZy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ19hdXRoaWQnKSBh cyByb2xjb21tZW50LCAiCkBAIC03NTcsNyArNzY5LDExIEBAIGR1bXBSb2xl cyhQR2Nvbm4gKmNvbm4pCiAJaV9yb2xjcmVhdGVkYiA9IFBRZm51bWJlcihy ZXMsICJyb2xjcmVhdGVkYiIpOwogCWlfcm9sY2FubG9naW4gPSBQUWZudW1i ZXIocmVzLCAicm9sY2FubG9naW4iKTsKIAlpX3JvbGNvbm5saW1pdCA9IFBR Zm51bWJlcihyZXMsICJyb2xjb25ubGltaXQiKTsKLQlpX3JvbHBhc3N3b3Jk ID0gUFFmbnVtYmVyKHJlcywgInJvbHBhc3N3b3JkIik7CisJLyogRklYTUU6 IHZlcnNpb24gYWdhaW4gKi8KKwlpZiAoc2VydmVyX3ZlcnNpb24gPj0gOTA1 MDApCisJCWlfcm9sdmVyaWZpZXJzID0gUFFmbnVtYmVyKHJlcywgInJvbHZl cmlmaWVycyIpOworCWVsc2UKKwkJaV9yb2xwYXNzd29yZCA9IFBRZm51bWJl cihyZXMsICJyb2xwYXNzd29yZCIpOwogCWlfcm9sdmFsaWR1bnRpbCA9IFBR Zm51bWJlcihyZXMsICJyb2x2YWxpZHVudGlsIik7CiAJaV9yb2xyZXBsaWNh dGlvbiA9IFBRZm51bWJlcihyZXMsICJyb2xyZXBsaWNhdGlvbiIpOwogCWlf cm9sYnlwYXNzcmxzID0gUFFmbnVtYmVyKHJlcywgInJvbGJ5cGFzc3JscyIp OwpAQCAtODM3LDEyICs4NTMsMTggQEAgZHVtcFJvbGVzKFBHY29ubiAqY29u bikKIAkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiBDT05ORUNUSU9OIExJ TUlUICVzIiwKIAkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNv bm5saW1pdCkpOwogCi0JCWlmICghUFFnZXRpc251bGwocmVzLCBpLCBpX3Jv bHBhc3N3b3JkKSkKKwkJaWYgKGlfcm9scGFzc3dvcmQgIT0gLTEgJiYgIVBR Z2V0aXNudWxsKHJlcywgaSwgaV9yb2xwYXNzd29yZCkpCiAJCXsKIAkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKGJ1ZiwgIiBQQVNTV09SRCAiKTsKIAkJCWFw cGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1ZiwgUFFnZXR2YWx1ZShyZXMsIGks IGlfcm9scGFzc3dvcmQpLCBjb25uKTsKIAkJfQogCisJCWlmIChpX3JvbHZl cmlmaWVycyAhPSAtMSAmJiAhUFFnZXRpc251bGwocmVzLCBpLCBpX3JvbHZl cmlmaWVycykpCisJCXsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGJ1Ziwg IiBQQVNTV09SRCBWRVJJRklFUlMgIik7CisJCQlhcHBlbmRTdHJpbmdMaXRl cmFsQ29ubihidWYsIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbHZlcmlmaWVy cyksIGNvbm4pOworCQl9CisKIAkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGks IGlfcm9sdmFsaWR1bnRpbCkpCiAJCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYs ICIgVkFMSUQgVU5USUwgJyVzJyIsCiAJCQkJCQkJICBQUWdldHZhbHVlKHJl cywgaSwgaV9yb2x2YWxpZHVudGlsKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2F1dGhpZC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19hdXRoaWQuaAppbmRleCBkNWYxOWQ2Li40OThjMThiIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2F1dGhpZC5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfYXV0aGlkLmgKQEAgLTU2LDcgKzU2LDcg QEAgQ0FUQUxPRyhwZ19hdXRoaWQsMTI2MCkgQktJX1NIQVJFRF9SRUxBVElP TiBCS0lfUk9XVFlQRV9PSUQoMjg0MikgQktJX1NDSEVNQV9NQUMKIAogCS8q IHJlbWFpbmluZyBmaWVsZHMgbWF5IGJlIG51bGw7IHVzZSBoZWFwX2dldGF0 dHIgdG8gcmVhZCB0aGVtISAqLwogI2lmZGVmIENBVEFMT0dfVkFSTEVOCQkJ LyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJlICovCi0JdGV4 dAkJcm9scGFzc3dvcmQ7CS8qIHBhc3N3b3JkLCBpZiBhbnkgKi8KKwl0ZXh0 CQlyb2x2ZXJpZmllcnNbXTsJLyogcGFzc3dvcmQgaGFzaGVzLCBpZiBhbnkg Ki8KIAl0aW1lc3RhbXB0eiByb2x2YWxpZHVudGlsOwkvKiBwYXNzd29yZCBl eHBpcmF0aW9uIHRpbWUsIGlmIGFueSAqLwogI2VuZGlmCiB9IEZvcm1EYXRh X3BnX2F1dGhpZDsKQEAgLTg1LDcgKzg1LDcgQEAgdHlwZWRlZiBGb3JtRGF0 YV9wZ19hdXRoaWQgKkZvcm1fcGdfYXV0aGlkOwogI2RlZmluZSBBbnVtX3Bn X2F1dGhpZF9yb2xyZXBsaWNhdGlvbgk3CiAjZGVmaW5lIEFudW1fcGdfYXV0 aGlkX3JvbGJ5cGFzc3JscwkJOAogI2RlZmluZSBBbnVtX3BnX2F1dGhpZF9y b2xjb25ubGltaXQJCTkKLSNkZWZpbmUgQW51bV9wZ19hdXRoaWRfcm9scGFz c3dvcmQJCTEwCisjZGVmaW5lIEFudW1fcGdfYXV0aGlkX3JvbHZlcmlmaWVy cwkJMTAKICNkZWZpbmUgQW51bV9wZ19hdXRoaWRfcm9sdmFsaWR1bnRpbAkx MQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3ds aXN0LmgKaW5kZXggN2MyNDNlYy4uMDY3MTEyZiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bh cnNlci9rd2xpc3QuaApAQCAtNDA3LDYgKzQwNyw3IEBAIFBHX0tFWVdPUkQo InZhcmNoYXIiLCBWQVJDSEFSLCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZ V09SRCgidmFyaWFkaWMiLCBWQVJJQURJQywgUkVTRVJWRURfS0VZV09SRCkK IFBHX0tFWVdPUkQoInZhcnlpbmciLCBWQVJZSU5HLCBVTlJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJ2ZXJib3NlIiwgVkVSQk9TRSwgVFlQRV9G VU5DX05BTUVfS0VZV09SRCkKK1BHX0tFWVdPUkQoInZlcmlmaWVycyIsIFZF UklGSUVSUywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmVy c2lvbiIsIFZFUlNJT05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZ V09SRCgidmlldyIsIFZJRVcsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tF WVdPUkQoInZpZXdzIiwgVklFV1MsIFVOUkVTRVJWRURfS0VZV09SRCkKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXgg MTc4ODI3MC4uMDUyYzRiNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE2MDgsNyArMTYwOCw3IEBAIHBnX3No YWRvd3wgU0VMRUNUIHBnX2F1dGhpZC5yb2xuYW1lIEFTIHVzZW5hbWUsCiAg ICAgcGdfYXV0aGlkLnJvbHN1cGVyIEFTIHVzZXN1cGVyLAogICAgIHBnX2F1 dGhpZC5yb2xyZXBsaWNhdGlvbiBBUyB1c2VyZXBsLAogICAgIHBnX2F1dGhp ZC5yb2xieXBhc3NybHMgQVMgdXNlYnlwYXNzcmxzLAotICAgIHBnX2F1dGhp ZC5yb2xwYXNzd29yZCBBUyBwYXNzd2QsCisgICAgcGdfYXV0aGlkLnJvbHZl cmlmaWVycyBBUyB2ZXJpZmllcnMsCiAgICAgKHBnX2F1dGhpZC5yb2x2YWxp ZHVudGlsKTo6YWJzdGltZSBBUyB2YWx1bnRpbCwKICAgICBzLnNldGNvbmZp ZyBBUyB1c2Vjb25maWcKICAgIEZST00gKHBnX2F1dGhpZAotLSAKMi4xLjQK Cg== --------------040108050703030703070702 Content-Type: application/x-patch; name="0004-WIP-Implement-SCRAM-authentication.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0004-WIP-Implement-SCRAM-authentication.patch" RnJvbSAzYjM4ZWM1ZmQ3YTJkNGZlNWYzZjg5YzJmN2NiNmVhMjBiOWZhMGU1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFr YW5nYXMgPGhlaWtraS5saW5uYWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwg NSBNYXIgMjAxNSAwOTo1MDo1MiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNC80 XSBXSVA6IEltcGxlbWVudCBTQ1JBTSBhdXRoZW50aWNhdGlvbi4KCi0tLQog ZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgICAgICAgICAgIHwgMTQ4ICsr KysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdXNlci5jICAgICAgICAg IHwgICA2ICsKIHNyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlICAgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jICAg ICAgIHwgNjIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgfCAxMTAg KysrKysrLQogc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMgICAgICAgICAgICAg IHwgIDE0ICsKIHNyYy9iYWNrZW5kL2xpYnBxL3BnX2hiYS5jb25mLnNhbXBs ZSB8ICAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2VuY29kZS5jICAg ICAgIHwgICA4ICstCiBzcmMvY29tbW9uL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9jb21tb24vc2NyYW0tY29tbW9uLmMgICAg ICAgICAgICB8IDE2MSArKysrKysrKysKIHNyYy9pbmNsdWRlL2NvbW1vbi9z Y3JhbS1jb21tb24uaCAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvbGlicHEv YXV0aC5oICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL2xpYnBx L2NyeXB0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9saWJw cS9oYmEuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbGli cHEvcHFjb21tLmggICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2xp YnBxL3NjcmFtLmggICAgICAgICAgICB8ICAyMyArKwogc3JjL2luY2x1ZGUv dXRpbHMvYnVpbHRpbnMuaCAgICAgICAgIHwgICA0ICsKIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlICAgICAgICB8ICAgOCArLQogc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtYXV0aC1zY3JhbS5jIHwgNDc2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC5jICAgICAgIHwgIDk1ICsrKysrKwogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC5oICAgICAgIHwgICA4ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWNvbm5lY3QuYyAgICB8ICA0OSArKysKIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2xpYnBxLWludC5oICAgICB8ICAgNSArCiAyMyBmaWxlcyBjaGFuZ2Vk LCAxNzY5IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21tb24vc2NyYW0tY29tbW9uLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vc2NyYW0t Y29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWJw cS9zY3JhbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC1zY3JhbS5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dt bAppbmRleCAzYTc1M2EwLi5hZWMwZTA1IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcHJvdG9jb2wuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcHJvdG9j b2wuc2dtbApAQCAtMjI4LDExICsyMjgsMTEgQEAKICAgICBUaGUgc2VydmVy IHRoZW4gc2VuZHMgYW4gYXBwcm9wcmlhdGUgYXV0aGVudGljYXRpb24gcmVx dWVzdCBtZXNzYWdlLAogICAgIHRvIHdoaWNoIHRoZSBmcm9udGVuZCBtdXN0 IHJlcGx5IHdpdGggYW4gYXBwcm9wcmlhdGUgYXV0aGVudGljYXRpb24KICAg ICByZXNwb25zZSBtZXNzYWdlIChzdWNoIGFzIGEgcGFzc3dvcmQpLgotICAg IEZvciBhbGwgYXV0aGVudGljYXRpb24gbWV0aG9kcyBleGNlcHQgR1NTQVBJ IGFuZCBTU1BJLCB0aGVyZSBpcyBhdCBtb3N0Ci0gICAgb25lIHJlcXVlc3Qg YW5kIG9uZSByZXNwb25zZS4gSW4gc29tZSBtZXRob2RzLCBubyByZXNwb25z ZQorICAgIEZvciBhbGwgYXV0aGVudGljYXRpb24gbWV0aG9kcyBleGNlcHQg R1NTQVBJLCBTU1BJIGFuZCBTQVNMLCB0aGVyZSBpcyBhdAorICAgIG1vc3Qg b25lIHJlcXVlc3QgYW5kIG9uZSByZXNwb25zZS4gSW4gc29tZSBtZXRob2Rz LCBubyByZXNwb25zZQogICAgIGF0IGFsbCBpcyBuZWVkZWQgZnJvbSB0aGUg ZnJvbnRlbmQsIGFuZCBzbyBubyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0Ci0g ICAgb2NjdXJzLiBGb3IgR1NTQVBJIGFuZCBTU1BJLCBtdWx0aXBsZSBleGNo YW5nZXMgb2YgcGFja2V0cyBtYXkgYmUgbmVlZGVkCi0gICAgdG8gY29tcGxl dGUgdGhlIGF1dGhlbnRpY2F0aW9uLgorICAgIG9jY3Vycy4gRm9yIEdTU0FQ SSwgU1NQSSBhbmQgU0FTTCwgbXVsdGlwbGUgZXhjaGFuZ2VzIG9mIHBhY2tl dHMgbWF5IGJlCisgICAgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBhdXRoZW50 aWNhdGlvbi4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CkBAIC0zNjYsNiAr MzY2LDM1IEBACiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3Rl bnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+QXV0 aGVudGljYXRpb25TQVNMPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBUaGUgZnJvbnRlbmQgbXVzdCBub3cgaW5p dGlhdGUgYSBTQVNMIG5lZ290aWF0aW9uLCB1c2luZyB0aGUgU0FTTAorICAg ICAgICBtZWNoYW5pc20gc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlLiBUaGUg ZnJvbnRlbmQgd2lsbCBzZW5kIGEKKyAgICAgICAgUGFzc3dvcmRNZXNzYWdl IHdpdGggdGhlIGZpcnN0IHBhcnQgb2YgdGhlIFNBU0wgZGF0YSBzdHJlYW0g aW4KKyAgICAgICAgcmVzcG9uc2UgdG8gdGhpcy4gSWYgZnVydGhlciBtZXNz YWdlcyBhcmUgbmVlZGVkLCB0aGUgc2VydmVyIHdpbGwKKyAgICAgICAgcmVz cG9uZCB3aXRoIEF1dGhlbnRpY2F0aW9uU0FTTENvbnRpbnVlLgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPC92YXJsaXN0 ZW50cnk+CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT5BdXRo ZW50aWNhdGlvblNBU0xDb250aW51ZTwvdGVybT4KKyAgICAgIDxsaXN0aXRl bT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBtZXNzYWdlIGNvbnRh aW5zIHRoZSByZXNwb25zZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIHN0ZXAK KyAgICAgICAgb2YgU0FTTCBuZWdvdGlhdGlvbiAoQXV0aGVudGljYXRpb25T QVNMLCBvciBhIHByZXZpb3VzCisgICAgICAgIEF1dGhlbnRpY2F0aW9uU0FT TENvbnRpbnVlKS4gSWYgdGhlIFNBU0wgZGF0YSBpbiB0aGlzIG1lc3NhZ2UK KyAgICAgICAgaW5kaWNhdGVzIG1vcmUgZGF0YSBpcyBuZWVkZWQgdG8gY29t cGxldGUgdGhlIGF1dGhlbnRpY2F0aW9uLAorICAgICAgICB0aGUgZnJvbnRl bmQgbXVzdCBzZW5kIHRoYXQgZGF0YSBhcyBhbm90aGVyIFBhc3N3b3JkTWVz c2FnZS4gSWYKKyAgICAgICAgU0FTTCBhdXRoZW50aWNhdGlvbiBpcyBjb21w bGV0ZWQgYnkgdGhpcyBtZXNzYWdlLCB0aGUgc2VydmVyCisgICAgICAgIHdp bGwgbmV4dCBzZW5kIEF1dGhlbnRpY2F0aW9uT2sgdG8gaW5kaWNhdGUgc3Vj Y2Vzc2Z1bCBhdXRoZW50aWNhdGlvbgorICAgICAgICBvciBFcnJvclJlc3Bv bnNlIHRvIGluZGljYXRlIGZhaWx1cmUuCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICA8 L3ZhcmlhYmxlbGlzdD4KICAgIDwvcGFyYT4KIApAQCAtMjU1OSw2ICsyNTg4 LDExNSBAQCBBdXRoZW50aWNhdGlvbkdTU0NvbnRpbnVlIChCKQogPC9saXN0 aXRlbT4KIDwvdmFybGlzdGVudHJ5PgogCis8dmFybGlzdGVudHJ5PgorPHRl cm0+CitBdXRoZW50aWNhdGlvblNBU0wgKEIpCis8L3Rlcm0+Cis8bGlzdGl0 ZW0+Cis8cGFyYT4KKworPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+ Cis8dGVybT4KKyAgICAgICAgQnl0ZTEoJ1InKQorPC90ZXJtPgorPGxpc3Rp dGVtPgorPHBhcmE+CisgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB0aGUg bWVzc2FnZSBhcyBhbiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgorPC9wYXJh PgorPC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRy eT4KKzx0ZXJtPgorICAgICAgICBJbnQzMgorPC90ZXJtPgorPGxpc3RpdGVt PgorPHBhcmE+CisgICAgICAgICAgICAgICAgTGVuZ3RoIG9mIG1lc3NhZ2Ug Y29udGVudHMgaW4gYnl0ZXMsIGluY2x1ZGluZyBzZWxmLgorPC9wYXJhPgor PC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT4K Kzx0ZXJtPgorICAgICAgICBJbnQzMigxMCkKKzwvdGVybT4KKzxsaXN0aXRl bT4KKzxwYXJhPgorICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGF0IFNB U0wgYXV0aGVudGljYXRpb24gaXMgc3RhcnRlZC4KKzwvcGFyYT4KKzwvbGlz dGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+Cis8dGVy bT4KKyAgICAgICAgU3RyaW5nCis8L3Rlcm0+Cis8bGlzdGl0ZW0+Cis8cGFy YT4KKyAgICAgICAgICAgICAgICBOYW1lIG9mIGEgU0FTTCBhdXRoZW50aWNh dGlvbiBtZWNoYW5pc20uCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPC92YXJs aXN0ZW50cnk+Cis8L3ZhcmlhYmxlbGlzdD4KKworPC9wYXJhPgorPC9saXN0 aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorPHRl cm0+CitBdXRoZW50aWNhdGlvblNBU0xDb250aW51ZSAoQikKKzwvdGVybT4K KzxsaXN0aXRlbT4KKzxwYXJhPgorCis8dmFyaWFibGVsaXN0PgorPHZhcmxp c3RlbnRyeT4KKzx0ZXJtPgorICAgICAgICBCeXRlMSgnUicpCis8L3Rlcm0+ Cis8bGlzdGl0ZW0+Cis8cGFyYT4KKyAgICAgICAgICAgICAgICBJZGVudGlm aWVzIHRoZSBtZXNzYWdlIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qu Cis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+Cis8dmFy bGlzdGVudHJ5PgorPHRlcm0+CisgICAgICAgIEludDMyCis8L3Rlcm0+Cis8 bGlzdGl0ZW0+Cis8cGFyYT4KKyAgICAgICAgICAgICAgICBMZW5ndGggb2Yg bWVzc2FnZSBjb250ZW50cyBpbiBieXRlcywgaW5jbHVkaW5nIHNlbGYuCis8 L3BhcmE+Cis8L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+Cis8dmFybGlz dGVudHJ5PgorPHRlcm0+CisgICAgICAgIEludDMyKDExKQorPC90ZXJtPgor PGxpc3RpdGVtPgorPHBhcmE+CisgICAgICAgICAgICAgICAgU3BlY2lmaWVz IHRoYXQgdGhpcyBtZXNzYWdlIGNvbnRhaW5zIFNBU0wtbWVjaGFuaXNtIHNw ZWNpZmljCisgICAgICAgICAgICAgICAgZGF0YS4KKzwvcGFyYT4KKzwvbGlz dGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+Cis8dGVy bT4KKyAgICAgICAgQnl0ZTxyZXBsYWNlYWJsZT5uPC9yZXBsYWNlYWJsZT4K KzwvdGVybT4KKzxsaXN0aXRlbT4KKzxwYXJhPgorICAgICAgICAgICAgICAg IFNBU0wgZGF0YSwgc3BlY2lmaWMgdG8gdGhlIFNBU0wgbWVjaGFuaXNtIGJl aW5nIHVzZWQuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50 cnk+Cis8L3ZhcmlhYmxlbGlzdD4KKworPC9wYXJhPgorPC9saXN0aXRlbT4K KzwvdmFybGlzdGVudHJ5PgorCiAKIDx2YXJsaXN0ZW50cnk+CiA8dGVybT4K QEAgLTQzMjEsNyArNDQ1OSw3IEBAIFBhc3N3b3JkTWVzc2FnZSAoRikKIDxs aXN0aXRlbT4KIDxwYXJhPgogICAgICAgICAgICAgICAgIElkZW50aWZpZXMg dGhlIG1lc3NhZ2UgYXMgYSBwYXNzd29yZCByZXNwb25zZS4gTm90ZSB0aGF0 Ci0gICAgICAgICAgICAgICAgdGhpcyBpcyBhbHNvIHVzZWQgZm9yIEdTU0FQ SSBhbmQgU1NQSSByZXNwb25zZSBtZXNzYWdlcworICAgICAgICAgICAgICAg IHRoaXMgaXMgYWxzbyB1c2VkIGZvciBHU1NBUEksIFNTUEkgYW5kIFNBU0wg cmVzcG9uc2UgbWVzc2FnZXMKICAgICAgICAgICAgICAgICAod2hpY2ggaXMg cmVhbGx5IGEgZGVzaWduIGVycm9yLCBzaW5jZSB0aGUgY29udGFpbmVkIGRh dGEKICAgICAgICAgICAgICAgICBpcyBub3QgYSBudWxsLXRlcm1pbmF0ZWQg c3RyaW5nIGluIHRoYXQgY2FzZSwgYnV0IGNhbiBiZQogICAgICAgICAgICAg ICAgIGFyYml0cmFyeSBiaW5hcnkgZGF0YSkuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy91c2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy91c2VyLmMKaW5kZXggNDJlNDczZC4uNDM0NzM5OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdXNlci5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3VzZXIuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg ImNvbW1hbmRzL3NlY2xhYmVsLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdXNl ci5oIgogI2luY2x1ZGUgImxpYnBxL21kNS5oIgorI2luY2x1ZGUgImxpYnBx L3NjcmFtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCkBAIC0x Njk4LDYgKzE2OTksMTEgQEAgYnVpbGRQYXNzd29yZFZlcmlmaWVycyhjaGFy ICpyb2xuYW1lLCBjaGFyICpwYXNzd29yZCwgYm9vbCBzdG9yZV9lbmNyeXB0 ZWQsCiAJCQkJZWxvZyhFUlJPUiwgInBhc3N3b3JkIGVuY3J5cHRpb24gZmFp bGVkIik7CiAJCQl2ZXJpZmllciA9IHBzcHJpbnRmKCJtZDU6JXMiLCBlbmNy eXB0ZWRfcGFzc3dvcmQpOwogCQkJZGF0dW1zW252ZXJpZmllcnMrK10gPSBD U3RyaW5nR2V0VGV4dERhdHVtKHZlcmlmaWVyKTsKKworCQkJLyogQWxzbyBj cmVhdGUgYSBTQ1JBTSB2ZXJpZmllciAqLworCQkJdmVyaWZpZXIgPSBzY3Jh bV9idWlsZF92ZXJpZmllcihyb2xuYW1lLCBwYXNzd29yZCwgMCk7CisJCQl2 ZXJpZmllciA9IHBzcHJpbnRmKCJzY3JhbTolcyIsIHZlcmlmaWVyKTsKKwkJ CWRhdHVtc1tudmVyaWZpZXJzKytdID0gQ1N0cmluZ0dldFRleHREYXR1bSh2 ZXJpZmllcik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2xpYnBxL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbGlicHEvTWFrZWZpbGUK aW5kZXggMDk0MTBjNC4uM2RkNjBlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvbGlicHEvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvTWFr ZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogIyBiZS1mc3N0dWJzIGlzIGhlcmUg Zm9yIGhpc3RvcmljYWwgcmVhc29ucywgcHJvYmFibHkgYmVsb25ncyBlbHNl d2hlcmUKIAogT0JKUyA9IGJlLWZzc3R1YnMubyBiZS1zZWN1cmUubyBhdXRo Lm8gY3J5cHQubyBoYmEubyBpcC5vIG1kNS5vIHBxY29tbS5vIFwKLSAgICAg ICBwcWZvcm1hdC5vIHBxbXEubyBwcXNpZ25hbC5vCisgICAgICAgcHFmb3Jt YXQubyBwcW1xLm8gcHFzaWduYWwubyBhdXRoLXNjcmFtLm8KIAogaWZlcSAo JCh3aXRoX29wZW5zc2wpLHllcykKIE9CSlMgKz0gYmUtc2VjdXJlLW9wZW5z c2wubwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3Jh bS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDE5M2IKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMKQEAg LTAsMCArMSw2MjEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGF1dGgtc2NyYW0uYworICoJICBTZXJ2ZXItc2lkZSBpbXBs ZW1lbnRhdGlvbiBvZiB0aGUgU0FTTCBTQ1JBTSBtZWNoYW5pc20uCisgKgor ICogU2VlIFJGQyA1ODAyLiBTb21lIGRpZmZlcmVuY2VzOgorICoKKyAqIC0g VXNlcm5hbWUgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gZXhjaGFuZ2UgaXMg bm90IHVzZWQuIFRoZSBjbGllbnQKKyAqICAgc2hvdWxkIHNlbmQgYW4gZW1w dHkgc3RyaW5nIGFzIHRoZSB1c2VybmFtZS4KKyAqCisgKiAtIFBhc3N3b3Jk IGlzIG5vdCBwcm9jZXNzZWQgd2l0aCB0aGUgU0FTTHByZXAgYWxnb3JpdGht LgorICoKKyAqIC0gQ2hhbm5lbCBiaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQu CisgKgorICogVGhlIHZlcmlmaWVyIHN0b3JlZCBpbiBwZ19hdXRoaWQgY29u c2lzdHMgb2YgdGhlIHNhbHQsIGl0ZXJhdGlvbiBjb3VudCwKKyAqIFN0b3Jl ZEtleSwgYW5kIFNlcnZlcktleS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog c3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNvbW1vbi9zY3JhbS1jb21t b24uaCIKKyNpbmNsdWRlICJjb21tb24vc2hhMS5oIgorI2luY2x1ZGUgImxp YnBxL2F1dGguaCIKKyNpbmNsdWRlICJsaWJwcS9jcnlwdC5oIgorI2luY2x1 ZGUgImxpYnBxL3NjcmFtLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKworI2RlZmluZSBTQUxUX0xF TgkJMTAJCS8qIGxlbmd0aCBvZiBzYWx0IHdoZW4gZ2VuZXJhdGluZyBuZXcK KwkJCQkJCQkJICogdmVyaWZpZXJzICovCisjZGVmaW5lIE5PTkNFX0xFTgkJ MTAJCS8qIGxlbmd0aCBvZiByYW5kb20gbm9uY2UgZ2VuZXJhdGVkIGluIHRo ZQorCQkJCQkJCQkgKiBhdXRoZW50aWNhdGlvbiBleGNoYW5nZSAqLworCit0 eXBlZGVmIHN0cnVjdAoreworCWVudW0KKwl7CisJCUlOSVQsCisJCVNBTFRf U0VOVCwKKwkJRklOSVNIRUQKKwl9IHN0YXRlOworCisJY29uc3QgY2hhciAq dXNlcm5hbWU7CS8qIHVzZXJuYW1lIGZyb20gc3RhcnR1cCBwYWNrZXQgKi8K KwljaGFyCSAgICpzYWx0OwkJLyogYmFzZTY0LWVuY29kZWQgKi8KKwlpbnQJ CQlpdGVyYXRpb25zOworCXVpbnQ4CQlTdG9yZWRLZXlbU0NSQU1fS0VZX0xF Tl07CisJdWludDgJCVNlcnZlcktleVtTQ1JBTV9LRVlfTEVOXTsKKworCS8q IFRoZXNlIGNvbWUgZnJvbSB0aGUgY2xpZW50LWZpcnN0IG1lc3NhZ2UgKi8K KwljaGFyCSAgICpjbGllbnRfZmlyc3RfbWVzc2FnZV9iYXJlOworCWNoYXIJ ICAgKmNsaWVudF91c2VybmFtZTsJLyogdXNlcm5hbWUgZnJvbSBjbGllbnQt Zmlyc3QgbWVzc2FnZSAqLworCWNoYXIJICAgKmNsaWVudF9hdXRoemlkOwor CWNoYXIJICAgKmNsaWVudF9ub25jZTsKKworCS8qIFRoZXNlIGNvbWUgZnJv bSB0aGUgY2xpZW50LWZpbmFsIG1lc3NhZ2UgKi8KKwljaGFyCSAgICpjbGll bnRfZmluYWxfbWVzc2FnZV93aXRob3V0X3Byb29mOworCWNoYXIJICAgKmNs aWVudF9maW5hbF9ub25jZTsKKwljaGFyCQlDbGllbnRQcm9vZltTQ1JBTV9L RVlfTEVOXTsKKworCWNoYXIJICAgKnNlcnZlcl9maXJzdF9tZXNzYWdlOwor CWNoYXIJICAgKnNlcnZlcl9ub25jZTsJCS8qIGJhc2U2NC1lbmNvZGVkICov CisJY2hhcgkgICAqc2VydmVyX3NpZ25hdHVyZTsKKworfSBzY3JhbV9zdGF0 ZTsKKworc3RhdGljIHZvaWQgcmVhZF9jbGllbnRfZmlyc3RfbWVzc2FnZShz Y3JhbV9zdGF0ZSAqc3RhdGUsIGNoYXIgKmlucHV0KTsKK3N0YXRpYyB2b2lk IHJlYWRfY2xpZW50X2ZpbmFsX21lc3NhZ2Uoc2NyYW1fc3RhdGUgKnN0YXRl LCBjaGFyICppbnB1dCk7CitzdGF0aWMgY2hhciAqYnVpbGRfc2VydmVyX2Zp cnN0X21lc3NhZ2Uoc2NyYW1fc3RhdGUgKnN0YXRlKTsKK3N0YXRpYyBjaGFy ICpidWlsZF9zZXJ2ZXJfZmluYWxfbWVzc2FnZShzY3JhbV9zdGF0ZSAqc3Rh dGUpOworc3RhdGljIGJvb2wgdmVyaWZ5X2NsaWVudF9wcm9vZihzY3JhbV9z dGF0ZSAqc3RhdGUpOworc3RhdGljIGJvb2wgdmVyaWZ5X2ZpbmFsX25vbmNl KHNjcmFtX3N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRl X25vbmNlKGNoYXIgKm91dCwgaW50IGxlbik7CisKKy8qCisgKiBJbml0aWFs aXplIGEgbmV3IFNDUkFNIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlLCB3aXRo IGdpdmVuIHVzZXJuYW1lIGFuZAorICogaXRzIHN0b3JlZCB2ZXJpZmllci4K KyAqLwordm9pZCAqCitzY3JhbV9pbml0KGNvbnN0IGNoYXIgKnVzZXJuYW1l LCBjb25zdCBjaGFyICp2ZXJpZmllcikKK3sKKwlzY3JhbV9zdGF0ZSAqc3Rh dGU7CisJY2hhcgkgICAqdjsKKwljaGFyCSAgICpwOworCisJc3RhdGUgPSAo c2NyYW1fc3RhdGUgKikgcGFsbG9jMChzaXplb2Yoc2NyYW1fc3RhdGUpKTsK KwlzdGF0ZS0+c3RhdGUgPSBJTklUOworCXN0YXRlLT51c2VybmFtZSA9IHVz ZXJuYW1lOworCisJLyoKKwkgKiBUaGUgdmVyaWZpZXIgaXMgb2YgZm9ybToK KwkgKgorCSAqIHNhbHQ6aXRlcmF0aW9uczpzdG9yZWRrZXk6c2VydmVya2V5 CisJICovCisJdiA9IHBzdHJkdXAodmVyaWZpZXIpOworCisJLyogc2FsdCAq LworCWlmICgocCA9IHN0cnRvayh2LCAiOiIpKSA9PSBOVUxMKQorCQlnb3Rv IGludmFsaWRfdmVyaWZpZXI7CisJc3RhdGUtPnNhbHQgPSBwc3RyZHVwKHAp OworCisJLyogaXRlcmF0aW9ucyAqLworCWlmICgocCA9IHN0cnRvayhOVUxM LCAiOiIpKSA9PSBOVUxMKQorCQlnb3RvIGludmFsaWRfdmVyaWZpZXI7CisJ ZXJybm8gPSAwOworCXN0YXRlLT5pdGVyYXRpb25zID0gc3RydG9sKHAsICZw LCAxMCk7CisJaWYgKCpwIHx8IGVycm5vICE9IDApCisJCWdvdG8gaW52YWxp ZF92ZXJpZmllcjsKKworCS8qIHN0b3JlZGtleSAqLworCWlmICgocCA9IHN0 cnRvayhOVUxMLCAiOiIpKSA9PSBOVUxMKQorCQlnb3RvIGludmFsaWRfdmVy aWZpZXI7CisJaWYgKHN0cmxlbihwKSAhPSBTQ1JBTV9LRVlfTEVOICogMikK KwkJZ290byBpbnZhbGlkX3ZlcmlmaWVyOworCWhleF9kZWNvZGUocCwgU0NS QU1fS0VZX0xFTioyLCAoY2hhciAqKSBzdGF0ZS0+U3RvcmVkS2V5KTsKKwor CS8qIHNlcnZlcmtleSAqLworCWlmICgocCA9IHN0cnRvayhOVUxMLCAiOiIp KSA9PSBOVUxMKQorCQlnb3RvIGludmFsaWRfdmVyaWZpZXI7CisJaWYgKHN0 cmxlbihwKSAhPSBTQ1JBTV9LRVlfTEVOICogMikKKwkJZ290byBpbnZhbGlk X3ZlcmlmaWVyOworCWhleF9kZWNvZGUocCwgU0NSQU1fS0VZX0xFTioyLCAo Y2hhciAqKSBzdGF0ZS0+U2VydmVyS2V5KTsKKworCXBmcmVlKHYpOworCisJ cmV0dXJuIHN0YXRlOworCitpbnZhbGlkX3ZlcmlmaWVyOgorCS8qIEZJWE1F OiBzaG91bGQgd2Uga2VlcCB0aGlzIHNlY3JldCBmcm9tIHRoZSB1bmF1dGhl bnRpY2F0ZWQgdXNlcj8gKi8KKwllbG9nKEVSUk9SLCAiaW52YWxpZCBTQ1JB TSB2ZXJpZmllcjogJXMiLCB2ZXJpZmllcik7CisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qCisgKiBDb250aW51ZSBhIFNDUkFNIGF1dGhlbnRpY2F0aW9uIGV4 Y2hhbmdlLgorICovCitpbnQKK3NjcmFtX2V4Y2hhbmdlKHZvaWQgKm9wYXEs IGNoYXIgKmlucHV0LCBpbnQgaW5wdXRsZW4sCisJCQkgICBjaGFyICoqb3V0 cHV0LCBpbnQgKm91dHB1dGxlbikKK3sKKwlzY3JhbV9zdGF0ZSAqc3RhdGUg PSAoc2NyYW1fc3RhdGUgKikgb3BhcTsKKwlpbnQJCQlyZXN1bHQ7CisKKwkq b3V0cHV0ID0gTlVMTDsKKwkqb3V0cHV0bGVuID0gMDsKKworCWlmIChpbnB1 dGxlbiA+IDApCisJCWVsb2coTE9HLCAiZ290IFNDUkFNIG1lc3NhZ2U6ICVz IiwgaW5wdXQpOworCisJc3dpdGNoIChzdGF0ZS0+c3RhdGUpCisJeworCQlj YXNlIElOSVQ6CisJCQkvKiByZWNlaXZlIHVzZXJuYW1lIGFuZCBjbGllbnQg bm9uY2UsIHNlbmQgY2hhbGxlbmdlICovCisJCQlyZWFkX2NsaWVudF9maXJz dF9tZXNzYWdlKHN0YXRlLCBpbnB1dCk7CisJCQkqb3V0cHV0ID0gYnVpbGRf c2VydmVyX2ZpcnN0X21lc3NhZ2Uoc3RhdGUpOworCQkJKm91dHB1dGxlbiA9 IHN0cmxlbigqb3V0cHV0KTsKKwkJCXJlc3VsdCA9IFNBU0xfRVhDSEFOR0Vf Q09OVElOVUU7CisJCQlzdGF0ZS0+c3RhdGUgPSBTQUxUX1NFTlQ7CisJCQli cmVhazsKKworCQljYXNlIFNBTFRfU0VOVDoKKwkJCS8qIHJlY2VpdmUgcmVz cG9uc2UgdG8gY2hhbGxlbmdlIGFuZCB2ZXJpZnkgaXQgKi8KKwkJCXJlYWRf Y2xpZW50X2ZpbmFsX21lc3NhZ2Uoc3RhdGUsIGlucHV0KTsKKwkJCWlmICh2 ZXJpZnlfZmluYWxfbm9uY2Uoc3RhdGUpICYmIHZlcmlmeV9jbGllbnRfcHJv b2Yoc3RhdGUpKQorCQkJeworCQkJCSpvdXRwdXQgPSBidWlsZF9zZXJ2ZXJf ZmluYWxfbWVzc2FnZShzdGF0ZSk7CisJCQkJKm91dHB1dGxlbiA9IHN0cmxl bigqb3V0cHV0KTsKKwkJCQlyZXN1bHQgPSBTQVNMX0VYQ0hBTkdFX1NVQ0NF U1M7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcmVzdWx0ID0gU0FTTF9F WENIQU5HRV9GQUlMVVJFOworCQkJfQorCQkJc3RhdGUtPnN0YXRlID0gRklO SVNIRUQ7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgU0NSQU0gZXhjaGFuZ2Ugc3RhdGUiKTsKKwkJCXJlc3Vs dCA9IDA7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENv bnN0cnVjdCBhIHZlcmlmaWVyIHN0cmluZyBmb3IgU0NSQU0sIHN0b3JlZCBp biBwZ19hdXRoaWQucm9sdmVyaWZpZXJzLgorICoKKyAqIElmIHNhbHQgaXMg TlVMTCwgYSByYW5kb20gc2FsdCBpcyBnZW5lcmF0ZWQuIElmIGl0ZXJhdGlv bnMgaXMgMCwgZGVmYXVsdAorICogbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMg dXNlZDsKKyAqLworY2hhciAqCitzY3JhbV9idWlsZF92ZXJpZmllcihjaGFy ICp1c2VybmFtZSwgY2hhciAqcGFzc3dvcmQsIGludCBpdGVyYXRpb25zKQor eworCXVpbnQ4CQlrZXlidWZbU0NSQU1fS0VZX0xFTiArIDFdOworCWNoYXIJ CXN0b3JlZGtleV9oZXhbU0NSQU1fS0VZX0xFTiAqIDIgKyAxXTsKKwljaGFy CQlzZXJ2ZXJrZXlfaGV4W1NDUkFNX0tFWV9MRU4gKiAyICsgMV07CisJY2hh cgkJc2FsdFtTQUxUX0xFTl07CisJY2hhcgkgICAqZW5jb2RlZF9zYWx0Owor CWludAkJCWVuY29kZWRfbGVuOworCisJaWYgKGl0ZXJhdGlvbnMgPD0gMCkK KwkJaXRlcmF0aW9ucyA9IDQwOTY7CisKKwlnZW5lcmF0ZV9ub25jZShzYWx0 LCBTQUxUX0xFTik7CisKKwllbmNvZGVkX3NhbHQgPSBwYWxsb2MoYjY0X2Vu Y19sZW4oc2FsdCwgU0FMVF9MRU4pICsgMSk7CisJZW5jb2RlZF9sZW4gPSBi NjRfZW5jb2RlKHNhbHQsIFNBTFRfTEVOLCBlbmNvZGVkX3NhbHQpOworCWVu Y29kZWRfc2FsdFtlbmNvZGVkX2xlbl0gPSAnXDAnOworCisJLyogQ2FsY3Vs YXRlIFN0b3JlZEtleSwgYW5kIGVuY29kZSBpdCBpbiBoZXggKi8KKwlzY3Jh bV9DbGllbnRPclNlcnZlcktleShwYXNzd29yZCwgc2FsdCwgU0FMVF9MRU4s IGl0ZXJhdGlvbnMsICJDbGllbnQgS2V5Iiwga2V5YnVmKTsKKwlzY3JhbV9I KGtleWJ1ZiwgU0NSQU1fS0VZX0xFTiwga2V5YnVmKTsgLyogU3RvcmVkS2V5 ICovCisJKHZvaWQpIGhleF9lbmNvZGUoKGNvbnN0IGNoYXIgKikga2V5YnVm LCBTQ1JBTV9LRVlfTEVOLCBzdG9yZWRrZXlfaGV4KTsKKwlzdG9yZWRrZXlf aGV4W1NDUkFNX0tFWV9MRU4gKiAyXSA9ICdcMCc7CisKKwkvKiBBbmQgc2Ft ZSBmb3IgU2VydmVyS2V5ICovCisJc2NyYW1fQ2xpZW50T3JTZXJ2ZXJLZXko cGFzc3dvcmQsIHNhbHQsIFNBTFRfTEVOLCBpdGVyYXRpb25zLCAiU2VydmVy IEtleSIsIGtleWJ1Zik7CisJKHZvaWQpIGhleF9lbmNvZGUoKGNvbnN0IGNo YXIgKikga2V5YnVmLCBTQ1JBTV9LRVlfTEVOLCBzZXJ2ZXJrZXlfaGV4KTsK KwlzZXJ2ZXJrZXlfaGV4W1NDUkFNX0tFWV9MRU4gKiAyXSA9ICdcMCc7CisK KwlyZXR1cm4gcHNwcmludGYoIiVzOiVkOiVzOiVzIiwgZW5jb2RlZF9zYWx0 LCBpdGVyYXRpb25zLCBzdG9yZWRrZXlfaGV4LCBzZXJ2ZXJrZXlfaGV4KTsK K30KKworCitzdGF0aWMgY2hhciAqCityZWFkX2F0dHJfdmFsdWUoY2hhciAq KmlucHV0LCBjaGFyIGF0dHIpCit7CisJY2hhcgkJKmJlZ2luID0gKmlucHV0 OworCWNoYXIJCSplbmQ7CisKKwlpZiAoKmJlZ2luICE9IGF0dHIpCisJCWVs b2coRVJST1IsICJtYWxmb3JtZWQgU0NSQU0gbWVzc2FnZSAoJWMgZXhwZWN0 ZWQpIiwgYXR0cik7CisJYmVnaW4rKzsKKworCWlmICgqYmVnaW4gIT0gJz0n KQorCQllbG9nKEVSUk9SLCAibWFsZm9ybWVkIFNDUkFNIG1lc3NhZ2UgKGV4 cGVjdGVkID0gaW4gYXR0ciAlYykiLCBhdHRyKTsKKwliZWdpbisrOworCisJ ZW5kID0gYmVnaW47CisJd2hpbGUgKCplbmQgJiYgKmVuZCAhPSAnLCcpCisJ CWVuZCsrOworCisJaWYgKCplbmQpCisJeworCQkqZW5kID0gJ1wwJzsKKwkJ KmlucHV0ID0gZW5kICsgMTsKKwl9CisJZWxzZQorCQkqaW5wdXQgPSBlbmQ7 CisKKwlyZXR1cm4gYmVnaW47Cit9CisKK3N0YXRpYyBjaGFyICoKK3JlYWRf YW55X2F0dHIoY2hhciAqKmlucHV0LCBjaGFyICphdHRyX3ApCit7CisJY2hh ciAqYmVnaW4gPSAqaW5wdXQ7CisJY2hhciAqZW5kOworCWNoYXIgYXR0ciA9 ICpiZWdpbjsKKworCWlmICghKChhdHRyID49ICdBJyAmJiBhdHRyIDw9ICda JykgfHwKKwkJICAoYXR0ciA+PSAnYScgJiYgYXR0ciA8PSAneicpKSkKKwkJ ZWxvZyhFUlJPUiwgIm1hbGZvcm1lZCBTQ1JBTSBtZXNzYWdlIChpbnZhbGlk IGF0dHJpYnV0ZSBjaGFyKSIpOworCWlmIChhdHRyX3ApCisJCSphdHRyX3Ag PSBhdHRyOworCWJlZ2luKys7CisKKwlpZiAoKmJlZ2luICE9ICc9JykKKwkJ ZWxvZyhFUlJPUiwgIm1hbGZvcm1lZCBTQ1JBTSBtZXNzYWdlIChleHBlY3Rl ZCA9IGluIGF0dHIgJWMpIiwgYXR0cik7CisJYmVnaW4rKzsKKworCWVuZCA9 IGJlZ2luOworCXdoaWxlICgqZW5kICYmICplbmQgIT0gJywnKQorCQllbmQr KzsKKworCWlmICgqZW5kKQorCXsKKwkJKmVuZCA9ICdcMCc7CisJCSppbnB1 dCA9IGVuZCArIDE7CisJfQorCWVsc2UKKwkJKmlucHV0ID0gZW5kOworCisJ cmV0dXJuIGJlZ2luOworfQorCitzdGF0aWMgdm9pZAorcmVhZF9jbGllbnRf Zmlyc3RfbWVzc2FnZShzY3JhbV9zdGF0ZSAqc3RhdGUsIGNoYXIgKmlucHV0 KQoreworCWlucHV0ID0gcHN0cmR1cChpbnB1dCk7CisKKwkvKgorCSAqIHNh c2xuYW1lICAgICAgICA9IDEqKHZhbHVlLXNhZmUtY2hhciAvICI9MkMiIC8g Ij0zRCIpCisJICogICAgICAgICAgICAgIDs7IENvbmZvcm1zIHRvIDx2YWx1 ZT4uCisJICoKKwkgKiBhdXRoemlkICAgICAgICAgPSAiYT0iIHNhc2xuYW1l CisJICogICAgICAgICAgICAgIDs7IFByb3RvY29sIHNwZWNpZmljLgorCSAq CisJICogdXNlcm5hbWUgICAgICAgID0gIm49IiBzYXNsbmFtZQorCSAqICAg ICAgICAgICAgICAgOzsgVXNlcm5hbWVzIGFyZSBwcmVwYXJlZCB1c2luZyBT QVNMcHJlcC4KKwkgKgorCSAqIGdzMi1jYmluZC1mbGFnICA9ICgicD0iIGNi LW5hbWUpIC8gIm4iIC8gInkiCisJICogICAgICAgICAgICAgICA7OyAibiIg LT4gY2xpZW50IGRvZXNuJ3Qgc3VwcG9ydCBjaGFubmVsIGJpbmRpbmcuCisJ ICogICAgICAgICAgICAgICA7OyAieSIgLT4gY2xpZW50IGRvZXMgc3VwcG9y dCBjaGFubmVsIGJpbmRpbmcKKwkgKiAgICAgICAgICAgICAgIDs7ICAgICAg ICBidXQgdGhpbmtzIHRoZSBzZXJ2ZXIgZG9lcyBub3QuCisJICogICAgICAg ICAgICAgICA7OyAicCIgLT4gY2xpZW50IHJlcXVpcmVzIGNoYW5uZWwgYmlu ZGluZy4KKwkgKiAgICAgICAgICAgICAgIDs7IFRoZSBzZWxlY3RlZCBjaGFu bmVsIGJpbmRpbmcgZm9sbG93cyAicD0iLgorCSAqCisJICogZ3MyLWhlYWRl ciAgICAgID0gZ3MyLWNiaW5kLWZsYWcgIiwiIFsgYXV0aHppZCBdICIsIgor CSAqICAgICAgICAgICAgICAgOzsgR1MyIGhlYWRlciBmb3IgU0NSQU0KKwkg KiAgICAgICAgICAgICAgIDs7ICh0aGUgYWN0dWFsIEdTMiBoZWFkZXIgaW5j bHVkZXMgYW4gb3B0aW9uYWwKKwkgKiAgICAgICAgICAgICAgIDs7IGZsYWcg dG8gaW5kaWNhdGUgdGhhdCB0aGUgR1NTIG1lY2hhbmlzbSBpcyBub3QKKwkg KiAgICAgICAgICAgICAgIDs7ICJzdGFuZGFyZCIsIGJ1dCBzaW5jZSBTQ1JB TSBpcyAic3RhbmRhcmQiLCB3ZQorCSAqICAgICAgICAgICAgICAgOzsgZG9u J3QgaW5jbHVkZSB0aGF0IGZsYWcpLgorCSAqCisJICogICBjbGllbnQtZmly c3QtbWVzc2FnZS1iYXJlID0KKwkgKiAgICAgICAgICAgICAgIFtyZXNlcnZl ZC1tZXh0ICIsIl0KKwkgKiAgICAgICAgICAgICAgIHVzZXJuYW1lICIsIiBu b25jZSBbIiwiIGV4dGVuc2lvbnNdCisJICoKKwkgKiAgIGNsaWVudC1maXJz dC1tZXNzYWdlID0KKwkgKiAgICAgICAgICAgICAgICBnczItaGVhZGVyIGNs aWVudC1maXJzdC1tZXNzYWdlLWJhcmUKKwkgKgorCSAqCisJICogRm9yIGV4 YW1wbGU6CisJICogbiwsbj11c2VyLHI9ZnlrbytkMmxiYkZnT05Sdjlxa3hk YXdMCisJICovCisKKwkvKiByZWFkIGdzMi1jYmluZC1mbGFnICovCisJc3dp dGNoICgqaW5wdXQpCisJeworCQljYXNlICduJzoKKwkJCS8qIGNsaWVudCBk b2VzIG5vdCBzdXBwb3J0IGNoYW5uZWwgYmluZGluZyAqLworCQkJaW5wdXQr KzsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCS8qIGNsaWVudCBzdXBw b3J0cyBjaGFubmVsIGJpbmRpbmcsIGJ1dCB3ZSdyZSBub3QgZG9pbmcgaXQg dG9kYXkgKi8KKwkJCWlucHV0Kys7CisJCQlicmVhazsKKwkJY2FzZSAncCc6 CisJCQkvKiBjbGllbnQgcmVxdWlyZXMgY2hhbm5lbCBiaW5kaW5nLiBXZSBk b24ndCBzdXBwb3J0IGl0ICovCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJ CSBlcnJtc2coImNoYW5uZWwgYmluZGluZyBub3Qgc3VwcG9ydGVkIikpKTsK Kwl9CisKKwkvKiBhbnkgbWFuZGF0b3J5IGV4dGVuc2lvbnMgd291bGQgZ28g aGVyZS4gKi8KKwlpZiAoKmlucHV0ICE9ICcsJykKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkJIGVycm1zZygibWFuZGF0b3J5IGV4dGVuc2lvbiAlYyBu b3Qgc3VwcG9ydGVkIiwgKmlucHV0KSkpOworCWlucHV0Kys7CisKKwkvKiBy ZWFkIG9wdGlvbmFsIGF1dGh6aWQgKGF1dGhvcml6YXRpb24gaWRlbnRpdHkp ICovCisJaWYgKCppbnB1dCAhPSAnLCcpCisJCXN0YXRlLT5jbGllbnRfYXV0 aHppZCA9IHJlYWRfYXR0cl92YWx1ZSgmaW5wdXQsICdhJyk7CisJZWxzZQor CQlpbnB1dCsrOworCisJc3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2Jh cmUgPSBwc3RyZHVwKGlucHV0KTsKKworCS8qIHJlYWQgdXNlcm5hbWUgKEZJ WE1FOiB1bmVzY2FwZSkgKi8KKwlzdGF0ZS0+Y2xpZW50X3VzZXJuYW1lID0g cmVhZF9hdHRyX3ZhbHVlKCZpbnB1dCwgJ24nKTsKKworCS8qIHJlYWQgbm9u Y2UgKi8KKwlzdGF0ZS0+Y2xpZW50X25vbmNlID0gcmVhZF9hdHRyX3ZhbHVl KCZpbnB1dCwgJ3InKTsKKworCS8qCisJICogVGhlcmUgY2FuIGJlIGFueSBu dW1iZXIgb2Ygb3B0aW9uYWwgZXh0ZW5zaW9ucyBhZnRlciB0aGlzLiBXZSBk b24ndAorCSAqIHN1cHBvcnQgYW55IGV4dGVuc2lvbnMsIHNvIGlnbm9yZSB0 aGVtLgorCSAqLworCXdoaWxlICgqaW5wdXQgIT0gJ1wwJykKKwkJcmVhZF9h bnlfYXR0cigmaW5wdXQsIE5VTEwpOworCisJLyogc3VjY2VzcyEgKi8KK30K Kworc3RhdGljIGJvb2wKK3ZlcmlmeV9maW5hbF9ub25jZShzY3JhbV9zdGF0 ZSAqc3RhdGUpCit7CisJaW50CQkJY2xpZW50X25vbmNlX2xlbiA9IHN0cmxl bihzdGF0ZS0+Y2xpZW50X25vbmNlKTsKKwlpbnQJCQlzZXJ2ZXJfbm9uY2Vf bGVuID0gc3RybGVuKHN0YXRlLT5zZXJ2ZXJfbm9uY2UpOworCWludAkJCWZp bmFsX25vbmNlX2xlbiA9IHN0cmxlbihzdGF0ZS0+Y2xpZW50X2ZpbmFsX25v bmNlKTsKKworCWlmIChmaW5hbF9ub25jZV9sZW4gIT0gY2xpZW50X25vbmNl X2xlbiArIHNlcnZlcl9ub25jZV9sZW4pCisJCXJldHVybiBmYWxzZTsKKwlp ZiAobWVtY21wKHN0YXRlLT5jbGllbnRfZmluYWxfbm9uY2UsIHN0YXRlLT5j bGllbnRfbm9uY2UsIGNsaWVudF9ub25jZV9sZW4pICE9IDApCisJCXJldHVy biBmYWxzZTsKKwlpZiAobWVtY21wKHN0YXRlLT5jbGllbnRfZmluYWxfbm9u Y2UgKyBjbGllbnRfbm9uY2VfbGVuLCBzdGF0ZS0+c2VydmVyX25vbmNlLCBz ZXJ2ZXJfbm9uY2VfbGVuKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3ZlcmlmeV9jbGllbnRf cHJvb2Yoc2NyYW1fc3RhdGUgKnN0YXRlKQoreworCXVpbnQ4CQlDbGllbnRT aWduYXR1cmVbU0NSQU1fS0VZX0xFTl07CisJdWludDgJCUNsaWVudEtleVtT Q1JBTV9LRVlfTEVOXTsKKwl1aW50OAkJY2xpZW50X1N0b3JlZEtleVtTQ1JB TV9LRVlfTEVOXTsKKwlzY3JhbV9ITUFDX2N0eCBjdHg7CisJaW50CQkJaTsK KworCS8qIGNhbGN1bGF0ZSBDbGllbnRTaWduYXR1cmUgKi8KKwlzY3JhbV9I TUFDX2luaXQoJmN0eCwgc3RhdGUtPlN0b3JlZEtleSwgMjApOworCXNjcmFt X0hNQUNfdXBkYXRlKCZjdHgsCisJCQkJCSAgc3RhdGUtPmNsaWVudF9maXJz dF9tZXNzYWdlX2JhcmUsCisJCQkJCSAgc3RybGVuKHN0YXRlLT5jbGllbnRf Zmlyc3RfbWVzc2FnZV9iYXJlKSk7CisJc2NyYW1fSE1BQ191cGRhdGUoJmN0 eCwgIiwiLCAxKTsKKwlzY3JhbV9ITUFDX3VwZGF0ZSgmY3R4LAorCQkJCQkg IHN0YXRlLT5zZXJ2ZXJfZmlyc3RfbWVzc2FnZSwKKwkJCQkJICBzdHJsZW4o c3RhdGUtPnNlcnZlcl9maXJzdF9tZXNzYWdlKSk7CisJc2NyYW1fSE1BQ191 cGRhdGUoJmN0eCwgIiwiLCAxKTsKKwlzY3JhbV9ITUFDX3VwZGF0ZSgmY3R4 LAorCQkJCQkgIHN0YXRlLT5jbGllbnRfZmluYWxfbWVzc2FnZV93aXRob3V0 X3Byb29mLAorCQkJCQkgIHN0cmxlbihzdGF0ZS0+Y2xpZW50X2ZpbmFsX21l c3NhZ2Vfd2l0aG91dF9wcm9vZikpOworCXNjcmFtX0hNQUNfZmluYWwoQ2xp ZW50U2lnbmF0dXJlLCAmY3R4KTsKKwllbG9nKExPRywgIkNsaWVudFNpZ25h dHVyZTogJTAyWCUwMlgiLCBDbGllbnRTaWduYXR1cmVbMF0sIENsaWVudFNp Z25hdHVyZVsxXSk7CisJZWxvZyhMT0csICJBdXRoTWVzc2FnZTogJXMsJXMs JXMiLCBzdGF0ZS0+Y2xpZW50X2ZpcnN0X21lc3NhZ2VfYmFyZSwKKwkJIHN0 YXRlLT5zZXJ2ZXJfZmlyc3RfbWVzc2FnZSwgc3RhdGUtPmNsaWVudF9maW5h bF9tZXNzYWdlX3dpdGhvdXRfcHJvb2YpOworCisJLyogRXh0cmFjdCB0aGUg Q2xpZW50S2V5IHRoYXQgdGhlIGNsaWVudCBjYWxjdWxhdGVkIGZyb20gdGhl IHByb29mICovCisJZm9yIChpID0gMDsgaSA8IFNDUkFNX0tFWV9MRU47IGkr KykKKwkJQ2xpZW50S2V5W2ldID0gc3RhdGUtPkNsaWVudFByb29mW2ldIF4g Q2xpZW50U2lnbmF0dXJlW2ldOworCisJLyogSGFzaCBpdCBvbmUgbW9yZSB0 aW1lLCBhbmQgY29tcGFyZSB3aXRoIFN0b3JlZEtleSAqLworCXNjcmFtX0go Q2xpZW50S2V5LCBTQ1JBTV9LRVlfTEVOLCBjbGllbnRfU3RvcmVkS2V5KTsK KwllbG9nKExPRywgImNsaWVudCdzIENsaWVudEtleTogJTAyWCUwMlgiLCBD bGllbnRLZXlbMF0sIENsaWVudEtleVsxXSk7CisJZWxvZyhMT0csICJjbGll bnQncyBTdG9yZWRLZXk6ICUwMlglMDJYIiwgY2xpZW50X1N0b3JlZEtleVsw XSwgY2xpZW50X1N0b3JlZEtleVsxXSk7CisJZWxvZyhMT0csICJTdG9yZWRL ZXk6ICUwMlglMDJYIiwgc3RhdGUtPlN0b3JlZEtleVswXSwgc3RhdGUtPlN0 b3JlZEtleVsxXSk7CisKKwlpZiAobWVtY21wKGNsaWVudF9TdG9yZWRLZXks IHN0YXRlLT5TdG9yZWRLZXksIFNDUkFNX0tFWV9MRU4pICE9IDApCisJCXJl dHVybiBmYWxzZTsKKworCS8qIEFsc28gdmVyaWZ5IHRoZSBub25jZSAqLwor CisJcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIGNoYXIgKgorYnVpbGRf c2VydmVyX2ZpcnN0X21lc3NhZ2Uoc2NyYW1fc3RhdGUgKnN0YXRlKQorewor CWNoYXIJCW5vbmNlW05PTkNFX0xFTl07CisJaW50CQkJZW5jb2RlZF9sZW47 CisKKwkvKgorCSAqIHNlcnZlci1maXJzdC1tZXNzYWdlID0KKwkgKiAgICAg ICAgICAgICAgICAgICBbcmVzZXJ2ZWQtbWV4dCAiLCJdIG5vbmNlICIsIiBz YWx0ICIsIgorCSAqICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbi1jb3Vu dCBbIiwiIGV4dGVuc2lvbnNdCisJICoKKwkgKiAgIG5vbmNlICAgICAgICAg ICA9ICJyPSIgYy1ub25jZSBbcy1ub25jZV0KKwkgKiAgICAgICAgICAgICAg IDs7IFNlY29uZCBwYXJ0IHByb3ZpZGVkIGJ5IHNlcnZlci4KKwkgKgorCSAq IGMtbm9uY2UgICAgICAgICA9IHByaW50YWJsZQorCSAqCisJICogcy1ub25j ZSAgICAgICAgID0gcHJpbnRhYmxlCisJICoKKwkgKiBzYWx0ICAgICAgICAg ICAgPSAicz0iIGJhc2U2NAorCSAqCisJICogaXRlcmF0aW9uLWNvdW50ID0g Imk9IiBwb3NpdC1udW1iZXIKKwkgKiAgICAgICAgICAgICAgOzsgQSBwb3Np dGl2ZSBudW1iZXIuCisJICoKKwkgKiBFeGFtcGxlOgorCSAqCisJICogcj1m eWtvK2QybGJiRmdPTlJ2OXFreGRhd0wzcmZjTkhZSlkxWlZ2V1ZzN2oscz1R U1hDUitRNnNlazhiZjkyLGk9NDA5NgorCSAqLworCWdlbmVyYXRlX25vbmNl KG5vbmNlLCBOT05DRV9MRU4pOworCisJc3RhdGUtPnNlcnZlcl9ub25jZSA9 IHBhbGxvYyhiNjRfZW5jX2xlbihub25jZSwgTk9OQ0VfTEVOKSArIDEpOwor CWVuY29kZWRfbGVuID0gYjY0X2VuY29kZShub25jZSwgTk9OQ0VfTEVOLCBz dGF0ZS0+c2VydmVyX25vbmNlKTsKKworCXN0YXRlLT5zZXJ2ZXJfbm9uY2Vb ZW5jb2RlZF9sZW5dID0gJ1wwJzsKKwlzdGF0ZS0+c2VydmVyX2ZpcnN0X21l c3NhZ2UgPQorCQlwc3ByaW50Zigicj0lcyVzLHM9JXMsaT0ldSIsCisJCQkJ IHN0YXRlLT5jbGllbnRfbm9uY2UsIHN0YXRlLT5zZXJ2ZXJfbm9uY2UsCisJ CQkJIHN0YXRlLT5zYWx0LCBzdGF0ZS0+aXRlcmF0aW9ucyk7CisKKwlyZXR1 cm4gc3RhdGUtPnNlcnZlcl9maXJzdF9tZXNzYWdlOworfQorCitzdGF0aWMg dm9pZAorcmVhZF9jbGllbnRfZmluYWxfbWVzc2FnZShzY3JhbV9zdGF0ZSAq c3RhdGUsIGNoYXIgKmlucHV0KQoreworCWNoYXIJCWF0dHI7CisJY2hhcgkg ICAqY2hhbm5lbF9iaW5kaW5nOworCWNoYXIJICAgKnZhbHVlOworCWNoYXIJ ICAgKmJlZ2luLCAqcHJvb2Y7CisJY2hhcgkgICAqcDsKKwljaGFyCSAgICpj bGllbnRfcHJvb2Y7CisKKwliZWdpbiA9IHAgPSBwc3RyZHVwKGlucHV0KTsK KworCS8qCisJICoKKwkgKiBjYmluZC1pbnB1dCAgID0gZ3MyLWhlYWRlciBb IGNiaW5kLWRhdGEgXQorCSAqICAgICAgICAgICAgICAgOzsgY2JpbmQtZGF0 YSBNVVNUIGJlIHByZXNlbnQgZm9yCisJICogICAgICAgICAgICAgICA7OyBn czItY2JpbmQtZmxhZyBvZiAicCIgYW5kIE1VU1QgYmUgYWJzZW50CisJICog ICAgICAgICAgICAgICA7OyBmb3IgInkiIG9yICJuIi4KKwkgKgorCSAqIGNo YW5uZWwtYmluZGluZyA9ICJjPSIgYmFzZTY0CisJICogICAgICAgICAgICAg ICA7OyBiYXNlNjQgZW5jb2Rpbmcgb2YgY2JpbmQtaW5wdXQuCisJICoKKwkg KiBwcm9vZiAgICAgICAgICAgPSAicD0iIGJhc2U2NAorCSAqCisJICogY2xp ZW50LWZpbmFsLW1lc3NhZ2Utd2l0aG91dC1wcm9vZiA9CisJICogICAgICAg ICAgICAgICBjaGFubmVsLWJpbmRpbmcgIiwiIG5vbmNlIFsiLCIgZXh0ZW5z aW9uc10KKwkgKgorCSAqIGNsaWVudC1maW5hbC1tZXNzYWdlID0KKwkgKiAg ICAgICAgICAgICAgY2xpZW50LWZpbmFsLW1lc3NhZ2Utd2l0aG91dC1wcm9v ZiAiLCIgcHJvb2YKKwkgKi8KKwljaGFubmVsX2JpbmRpbmcgPSByZWFkX2F0 dHJfdmFsdWUoJnAsICdjJyk7CisJaWYgKHN0cmNtcChjaGFubmVsX2JpbmRp bmcsICJiaXdzIikgIT0gMCkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgY2hh bm5lbCBiaW5kaW5nIGlucHV0Iik7CisJc3RhdGUtPmNsaWVudF9maW5hbF9u b25jZSA9IHJlYWRfYXR0cl92YWx1ZSgmcCwgJ3InKTsKKworCS8qIGlnbm9y ZSBvcHRpb25hbCBleHRlbnNpb25zICovCisJZG8KKwl7CisJCXByb29mID0g cCAtIDE7CisJCXZhbHVlID0gcmVhZF9hbnlfYXR0cigmcCwgJmF0dHIpOwor CX0gd2hpbGUgKGF0dHIgIT0gJ3AnKTsKKworCWNsaWVudF9wcm9vZiA9IHBh bGxvYyhiNjRfZGVjX2xlbih2YWx1ZSwgc3RybGVuKHZhbHVlKSkpOworCWlm IChiNjRfZGVjb2RlKHZhbHVlLCBzdHJsZW4odmFsdWUpLCBjbGllbnRfcHJv b2YpICE9IFNDUkFNX0tFWV9MRU4pCisJCWVsb2coRVJST1IsICJpbnZhbGlk IENsaWVudFByb29mIik7CisJbWVtY3B5KHN0YXRlLT5DbGllbnRQcm9vZiwg Y2xpZW50X3Byb29mLCBTQ1JBTV9LRVlfTEVOKTsKKwlwZnJlZShjbGllbnRf cHJvb2YpOworCisJaWYgKCpwICE9ICdcMCcpCisJCWVsb2coRVJST1IsICJt YWxmb3JtZWQgU0NSQU0gbWVzc2FnZSAoZ2FyYmFnZSBhdCBlbmQgb2YgbWVz c2FnZSAlYykiLCBhdHRyKTsKKworCXN0YXRlLT5jbGllbnRfZmluYWxfbWVz c2FnZV93aXRob3V0X3Byb29mID0gcGFsbG9jKHByb29mIC0gYmVnaW4gKyAx KTsKKwltZW1jcHkoc3RhdGUtPmNsaWVudF9maW5hbF9tZXNzYWdlX3dpdGhv dXRfcHJvb2YsIGlucHV0LCBwcm9vZiAtIGJlZ2luKTsKKwlzdGF0ZS0+Y2xp ZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9vZltwcm9vZiAtIGJlZ2lu XSA9ICdcMCc7CisKKwkvKiBGSVhNRTogY2hlY2sgY2hhbm5lbF9iaW5kaW5n IGZpZWxkICovCit9CisKKworc3RhdGljIGNoYXIgKgorYnVpbGRfc2VydmVy X2ZpbmFsX21lc3NhZ2Uoc2NyYW1fc3RhdGUgKnN0YXRlKQoreworCXVpbnQ4 CQlTZXJ2ZXJTaWduYXR1cmVbU0NSQU1fS0VZX0xFTl07CisJY2hhcgkgICAq c2VydmVyX3NpZ25hdHVyZV9iYXNlNjQ7CisJaW50CQkJc2lnbGVuOworCXNj cmFtX0hNQUNfY3R4IGN0eDsKKworCS8qIGNhbGN1bGF0ZSBTZXJ2ZXJTaWdu YXR1cmUgKi8KKwlzY3JhbV9ITUFDX2luaXQoJmN0eCwgc3RhdGUtPlNlcnZl cktleSwgMjApOworCXNjcmFtX0hNQUNfdXBkYXRlKCZjdHgsCisJCQkJCSAg c3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2JhcmUsCisJCQkJCSAgc3Ry bGVuKHN0YXRlLT5jbGllbnRfZmlyc3RfbWVzc2FnZV9iYXJlKSk7CisJc2Ny YW1fSE1BQ191cGRhdGUoJmN0eCwgIiwiLCAxKTsKKwlzY3JhbV9ITUFDX3Vw ZGF0ZSgmY3R4LAorCQkJCQkgIHN0YXRlLT5zZXJ2ZXJfZmlyc3RfbWVzc2Fn ZSwKKwkJCQkJICBzdHJsZW4oc3RhdGUtPnNlcnZlcl9maXJzdF9tZXNzYWdl KSk7CisJc2NyYW1fSE1BQ191cGRhdGUoJmN0eCwgIiwiLCAxKTsKKwlzY3Jh bV9ITUFDX3VwZGF0ZSgmY3R4LAorCQkJCQkgIHN0YXRlLT5jbGllbnRfZmlu YWxfbWVzc2FnZV93aXRob3V0X3Byb29mLAorCQkJCQkgIHN0cmxlbihzdGF0 ZS0+Y2xpZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9vZikpOworCXNj cmFtX0hNQUNfZmluYWwoU2VydmVyU2lnbmF0dXJlLCAmY3R4KTsKKworCXNl cnZlcl9zaWduYXR1cmVfYmFzZTY0ID0gcGFsbG9jKGI2NF9lbmNfbGVuKChj b25zdCBjaGFyICopIFNlcnZlclNpZ25hdHVyZSwgU0NSQU1fS0VZX0xFTikg KyAxKTsKKwlzaWdsZW4gPSBiNjRfZW5jb2RlKChjb25zdCBjaGFyICopIFNl cnZlclNpZ25hdHVyZSwgU0NSQU1fS0VZX0xFTiwgc2VydmVyX3NpZ25hdHVy ZV9iYXNlNjQpOworCXNlcnZlcl9zaWduYXR1cmVfYmFzZTY0W3NpZ2xlbl0g PSAnXDAnOworCisJLyoKKwkgKgorCSAqIHNlcnZlci1lcnJvciA9ICJlPSIg c2VydmVyLWVycm9yLXZhbHVlCisJICoKKwkgKiBzZXJ2ZXItZXJyb3ItdmFs dWUgPSAiaW52YWxpZC1lbmNvZGluZyIgLworCSAqICAgICAgICAgICAiZXh0 ZW5zaW9ucy1ub3Qtc3VwcG9ydGVkIiAvICA7IHVucmVjb2duaXplZCAnbScg dmFsdWUKKwkgKiAgICAgICAgICAgICJpbnZhbGlkLXByb29mIiAvCisJICog ICAgICAgICAgICAiY2hhbm5lbC1iaW5kaW5ncy1kb250LW1hdGNoIiAvCisJ ICogICAgICAgICAgICAic2VydmVyLWRvZXMtc3VwcG9ydC1jaGFubmVsLWJp bmRpbmciIC8KKwkgKiAgICAgICAgICAgICAgOyBzZXJ2ZXIgZG9lcyBub3Qg c3VwcG9ydCBjaGFubmVsIGJpbmRpbmcKKwkgKiAgICAgICAgICAgICJjaGFu bmVsLWJpbmRpbmctbm90LXN1cHBvcnRlZCIgLworCSAqICAgICAgICAgICAg InVuc3VwcG9ydGVkLWNoYW5uZWwtYmluZGluZy10eXBlIiAvCisJICogICAg ICAgICAgICAidW5rbm93bi11c2VyIiAvCisJICogICAgICAgICAgICAiaW52 YWxpZC11c2VybmFtZS1lbmNvZGluZyIgLworCSAqICAgICAgICAgICAgICA7 IGludmFsaWQgdXNlcm5hbWUgZW5jb2RpbmcgKGludmFsaWQgVVRGLTggb3IK KwkgKiAgICAgICAgICAgICAgOyBTQVNMcHJlcCBmYWlsZWQpCisJICogICAg ICAgICAgICAibm8tcmVzb3VyY2VzIiAvCisJICogICAgICAgICAgICAib3Ro ZXItZXJyb3IiIC8KKwkgKiAgICAgICAgICAgIHNlcnZlci1lcnJvci12YWx1 ZS1leHQKKwkgKiAgICAgOyBVbnJlY29nbml6ZWQgZXJyb3JzIHNob3VsZCBi ZSB0cmVhdGVkIGFzICJvdGhlci1lcnJvciIuCisJICogICAgIDsgSW4gb3Jk ZXIgdG8gcHJldmVudCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCB0aGUgc2Vy dmVyCisJICogICAgIDsgbWF5IHN1YnN0aXR1dGUgdGhlIHJlYWwgcmVhc29u IHdpdGggIm90aGVyLWVycm9yIi4KKwkgKgorCSAqIHNlcnZlci1lcnJvci12 YWx1ZS1leHQgPSB2YWx1ZQorCSAqICAgICA7IEFkZGl0aW9uYWwgZXJyb3Ig cmVhc29ucyBhZGRlZCBieSBleHRlbnNpb25zCisJICogICAgIDsgdG8gdGhp cyBkb2N1bWVudC4KKwkgKgorCSAqIHZlcmlmaWVyICAgICAgICA9ICJ2PSIg YmFzZTY0CisJICogICAgICAgICAgICAgICA7OyBiYXNlLTY0IGVuY29kZWQg U2VydmVyU2lnbmF0dXJlLgorCSAqCisJICogc2VydmVyLWZpbmFsLW1lc3Nh Z2UgPSAoc2VydmVyLWVycm9yIC8gdmVyaWZpZXIpCisJICogICAgICAgICAg ICAgICAgWyIsIiBleHRlbnNpb25zXQorCSAqLworCXJldHVybiBwc3ByaW50 Zigidj0lcyIsIHNlcnZlcl9zaWduYXR1cmVfYmFzZTY0KTsKK30KKworc3Rh dGljIHZvaWQKK2dlbmVyYXRlX25vbmNlKGNoYXIgKnJlc3VsdCwgaW50IGxl bikKK3sKKwkvKgorCSAqIFRPRE86IFdlIHJldXNlIHRoZSBzYWx0IGdlbmVy YXRlZCBmb3IgTUQ1IGF1dGhlbnRpY2F0aW9uLiBJdCdzIG9ubHkKKwkgKiBm b3VyIGJ5dGVzIC0gd2UnZCByZWFsbHkgd2FudCB0byB1c2UgYSBtdWNoIGxv bmdlciBzYWx0LgorCSAqLworCW1lbXNldChyZXN1bHQsIDAsIGxlbik7CisJ bWVtY3B5KHJlc3VsdCwgTXlQcm9jUG9ydC0+bWQ1U2FsdCwgTWluKHNpemVv ZihNeVByb2NQb3J0LT5tZDVTYWx0KSwgbGVuKSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9saWJwcS9hdXRoLmMgYi9zcmMvYmFja2VuZC9saWJw cS9hdXRoLmMKaW5kZXggODEyMjZjMi4uNTQxNTFjYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xp YnBxL2F1dGguYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImxpYnBx L2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNs dWRlICJsaWJwcS9tZDUuaCIKKyNpbmNsdWRlICJsaWJwcS9zY3JhbS5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dhbHNlbmRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCkBAIC0x ODUsNiArMTg2LDEyIEBAIHN0YXRpYyBpbnQJQ2hlY2tSQURJVVNBdXRoKFBv cnQgKnBvcnQpOwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0FT TCBhdXRoZW50aWNhdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K K3N0YXRpYyBpbnQgQ2hlY2tTQVNMQXV0aChQb3J0ICpwb3J0LCBjaGFyICoq bG9nZGV0YWlsKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBHbG9i YWwgYXV0aGVudGljYXRpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqLwpAQCAtMjQ2LDYgKzI1Myw3IEBAIGF1dGhfZmFpbGVkKFBv cnQgKnBvcnQsIGludCBzdGF0dXMsIGNoYXIgKmxvZ2RldGFpbCkKIAkJCWJy ZWFrOwogCQljYXNlIHVhUGFzc3dvcmQ6CiAJCWNhc2UgdWFNRDU6CisJCWNh c2UgdWFTQVNMOgogCQkJZXJyc3RyID0gZ2V0dGV4dF9ub29wKCJwYXNzd29y ZCBhdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIgXCIlc1wiIik7CiAJ CQkvKiBXZSB1c2UgaXQgdG8gaW5kaWNhdGUgaWYgYSAucGdwYXNzIHBhc3N3 b3JkIGZhaWxlZC4gKi8KIAkJCWVycmNvZGVfcmV0dXJuID0gRVJSQ09ERV9J TlZBTElEX1BBU1NXT1JEOwpAQCAtNTIzLDYgKzUzMSwxMCBAQCBDbGllbnRB dXRoZW50aWNhdGlvbihQb3J0ICpwb3J0KQogCQkJc3RhdHVzID0gcmVjdl9h bmRfY2hlY2tfcGFzc3dvcmRfcGFja2V0KHBvcnQsICZsb2dkZXRhaWwpOwog CQkJYnJlYWs7CiAKKwkJY2FzZSB1YVNBU0w6CisJCQlzdGF0dXMgPSBDaGVj a1NBU0xBdXRoKHBvcnQsICZsb2dkZXRhaWwpOworCQkJYnJlYWs7CisKIAkJ Y2FzZSB1YVBBTToKICNpZmRlZiBVU0VfUEFNCiAJCQlzdGF0dXMgPSBDaGVj a1BBTUF1dGgocG9ydCwgcG9ydC0+dXNlcl9uYW1lLCAiIik7CkBAIC02OTEs NiArNzAzLDk2IEBAIHJlY3ZfYW5kX2NoZWNrX3Bhc3N3b3JkX3BhY2tldChQ b3J0ICpwb3J0LCBjaGFyICoqbG9nZGV0YWlsKQogCXJldHVybiByZXN1bHQ7 CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0FTTCBhdXRoZW50 aWNhdGlvbiBzeXN0ZW0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitz dGF0aWMgaW50CitDaGVja1NBU0xBdXRoKFBvcnQgKnBvcnQsIGNoYXIgKips b2dkZXRhaWwpCit7CisJaW50CQkJbXR5cGU7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCXZvaWQJICAgKnNjcmFtX29wYXE7CisJY2hhcgkgICAqdmVyaWZp ZXI7CisJY2hhcgkgICAqb3V0cHV0ID0gTlVMTDsKKwlpbnQJCQlvdXRwdXRs ZW4gPSAwOworCWludAkJCXJlc3VsdDsKKworCS8qCisJICogU0FTTCBhdXRo IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3RvY29sIHZlcnNpb25zIGJlZm9y ZSAzLCBiZWNhdXNlIGl0CisJICogcmVsaWVzIG9uIHRoZSBvdmVyYWxsIG1l c3NhZ2UgbGVuZ3RoIHdvcmQgdG8gZGV0ZXJtaW5lIHRoZSBTQVNMIHBheWxv YWQKKwkgKiBzaXplIGluIEF1dGhlbnRpY2F0aW9uU0FTTENvbnRpbnVlIGFu ZCBQYXNzd29yZE1lc3NhZ2UgbWVzc2FnZXMuIChXZQorCSAqIHVzZWQgdG8g aGF2ZSBhIGhhcmQgcnVsZSB0aGF0IHByb3RvY29sIG1lc3NhZ2VzIG11c3Qg YmUgcGFyc2FibGUKKwkgKiB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGxlbmd0 aCB3b3JkLCBidXQgd2UgaGFyZGx5IGNhcmUgYWJvdXQgcHJvdG9jb2wKKwkg KiB2ZXJzaW9uIG9yIG9sZGVyIGFueW1vcmUuKQorCSAqCisJICogRklYTUU6 IHRoZSBGRS9CRSBkb2NzIG5lZWQgdG8gdXBkYXRlZC4KKwkgKi8KKwlpZiAo UEdfUFJPVE9DT0xfTUFKT1IoRnJvbnRlbmRQcm90b2NvbCkgPCAzKQorCQll cmVwb3J0KEZBVEFMLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJTQVNMIGF1dGhlbnRpY2F0 aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvdG9jb2wgdmVyc2lvbiAyIikp KTsKKworCS8qIGxvb2t1cCB2ZXJpZmllciAqLworCXZlcmlmaWVyID0gZ2V0 X3JvbGVfdmVyaWZpZXIocG9ydC0+dXNlcl9uYW1lLCAic2NyYW0iLCBsb2dk ZXRhaWwpOworCWlmICh2ZXJpZmllciA9PSBOVUxMKQorCQlyZXR1cm4gU1RB VFVTX0VSUk9SOworCisJc2VuZEF1dGhSZXF1ZXN0KHBvcnQsIEFVVEhfUkVR X1NBU0wsICJTQ1JBTS1TSEEtMSIsIHN0cmxlbigiU0NSQU0tU0hBLTEiKSAr IDEpOworCisJc2NyYW1fb3BhcSA9IHNjcmFtX2luaXQocG9ydC0+dXNlcl9u YW1lLCB2ZXJpZmllcik7CisKKwkvKgorCSAqIExvb3AgdGhyb3VnaCBTQVNM IG1lc3NhZ2UgZXhjaGFuZ2UuIFRoaXMgZXhjaGFuZ2UgY2FuIGNvbnNpc3Qg b2YKKwkgKiBtdWx0aXBsZSBtZXNzYWdzIHNlbnQgaW4gYm90aCBkaXJlY3Rp b25zLiBGaXJzdCBtZXNzYWdlIGlzIGFsd2F5cyBmcm9tCisJICogdGhlIGNs aWVudC4gQWxsIG1lc3NhZ2VzIGZyb20gY2xpZW50IHRvIHNlcnZlciBhcmUg cGFzc3dvcmQgcGFja2V0cworCSAqICh0eXBlICdwJykuCisJICovCisJZG8K Kwl7CisJCXBxX3N0YXJ0bXNncmVhZCgpOworCQltdHlwZSA9IHBxX2dldGJ5 dGUoKTsKKwkJaWYgKG10eXBlICE9ICdwJykKKwkJeworCQkJLyogT25seSBs b2cgZXJyb3IgaWYgY2xpZW50IGRpZG4ndCBkaXNjb25uZWN0LiAqLworCQkJ aWYgKG10eXBlICE9IEVPRikKKwkJCQllcmVwb3J0KENPTU1FUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJ CQkJCSBlcnJtc2coImV4cGVjdGVkIFNBU0wgcmVzcG9uc2UsIGdvdCBtZXNz YWdlIHR5cGUgJWQiLAorCQkJCQkJCQltdHlwZSkpKTsKKwkJCXJldHVybiBT VEFUVVNfRVJST1I7CisJCX0KKworCQkvKiBHZXQgdGhlIGFjdHVhbCBTQVNM IHRva2VuICovCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlpZiAocHFf Z2V0bWVzc2FnZSgmYnVmLCBQR19NQVhfQVVUSF9UT0tFTl9MRU5HVEgpKQor CQl7CisJCQkvKiBFT0YgLSBwcV9nZXRtZXNzYWdlIGFscmVhZHkgbG9nZ2Vk IGVycm9yICovCisJCQlwZnJlZShidWYuZGF0YSk7CisJCQlyZXR1cm4gU1RB VFVTX0VSUk9SOworCQl9CisKKwkJZWxvZyhERUJVRzQsICJQcm9jZXNzaW5n IHJlY2VpdmVkIFNBU0wgdG9rZW4gb2YgbGVuZ3RoICVkIiwgYnVmLmxlbik7 CisKKwkJcmVzdWx0ID0gc2NyYW1fZXhjaGFuZ2Uoc2NyYW1fb3BhcSwgYnVm LmRhdGEsIGJ1Zi5sZW4sCisJCQkJCQkJCSZvdXRwdXQsICZvdXRwdXRsZW4p OworCisJCS8qIGlucHV0IGJ1ZmZlciBubyBsb25nZXIgdXNlZCAqLworCQlw ZnJlZShidWYuZGF0YSk7CisKKwkJaWYgKG91dHB1dGxlbiA+IDApCisJCXsK KwkJCS8qCisJCQkgKiBOZWdvdGlhdGlvbiBnZW5lcmF0ZWQgZGF0YSB0byBi ZSBzZW50IHRvIHRoZSBjbGllbnQuCisJCQkgKi8KKwkJCWVsb2coREVCVUc0 LCAic2VuZGluZyBTQVNMIHJlc3BvbnNlIHRva2VuIG9mIGxlbmd0aCAldSIs IG91dHB1dGxlbik7CisKKwkJCXNlbmRBdXRoUmVxdWVzdChwb3J0LCBBVVRI X1JFUV9TQVNMX0NPTlQsIG91dHB1dCwgb3V0cHV0bGVuKTsKKwkJfQorCX0g d2hpbGUgKHJlc3VsdCA9PSBTQVNMX0VYQ0hBTkdFX0NPTlRJTlVFKTsKKwor CXJldHVybiAocmVzdWx0ID09IFNBU0xfRVhDSEFOR0VfU1VDQ0VTUykgPyBT VEFUVVNfT0sgOiBTVEFUVVNfRVJST1I7Cit9CiAKIAogLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC04OTEsOCArOTkzLDggQEAgcGdfR1NTX3JlY3ZhdXRo KFBvcnQgKnBvcnQpCiAJCQkJICh1bnNpZ25lZCBpbnQpIHBvcnQtPmdzcy0+ b3V0YnVmLmxlbmd0aCk7CiAKIAkJCS8qCi0JCQkgKiBBZGQgdGhlIGF1dGhl bnRpY2F0aW9uIGRhdGEgZm9yIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIEdTU0FQ SSBvcgotCQkJICogU1NQSSBuZWdvdGlhdGlvbi4KKwkJCSAqIEFkZCB0aGUg YXV0aGVudGljYXRpb24gZGF0YSBmb3IgdGhlIG5leHQgc3RlcCBvZiB0aGUg R1NTQVBJCisJCQkgKiBuZWdvdGlhdGlvbi4KIAkJCSAqLwogCQkJZWxvZyhE RUJVRzQsICJzZW5kaW5nIEdTUyB0b2tlbiBvZiBsZW5ndGggJXUiLAogCQkJ CSAodW5zaWduZWQgaW50KSBwb3J0LT5nc3MtPm91dGJ1Zi5sZW5ndGgpOwpA QCAtMTE0Miw4ICsxMjQ0LDggQEAgcGdfU1NQSV9yZWN2YXV0aChQb3J0ICpw b3J0KQogCQkJcG9ydC0+Z3NzLT5vdXRidWYudmFsdWUgPSBvdXRidWYucEJ1 ZmZlcnNbMF0ucHZCdWZmZXI7CiAKIAkJCS8qCi0JCQkgKiBBZGQgdGhlIGF1 dGhlbnRpY2F0aW9uIGRhdGEgZm9yIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIEdT U0FQSSBvcgotCQkJICogU1NQSSBuZWdvdGlhdGlvbi4KKwkJCSAqIEFkZCB0 aGUgYXV0aGVudGljYXRpb24gZGF0YSBmb3IgdGhlIG5leHQgc3RlcCBvZiB0 aGUgU1NQSQorCQkJICogbmVnb3RpYXRpb24uCiAJCQkgKi8KIAkJCWVsb2co REVCVUc0LCAic2VuZGluZyBHU1MgdG9rZW4gb2YgbGVuZ3RoICV1IiwKIAkJ CQkgKHVuc2lnbmVkIGludCkgcG9ydC0+Z3NzLT5vdXRidWYubGVuZ3RoKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jIGIvc3JjL2Jh Y2tlbmQvbGlicHEvaGJhLmMKaW5kZXggYTBmNTM5Ni4uMzFiZDc4ZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvaGJhLmMKKysrIGIvc3JjL2Jh Y2tlbmQvbGlicHEvaGJhLmMKQEAgLTExODQsNiArMTE4NCwyMCBAQCBwYXJz ZV9oYmFfbGluZShMaXN0ICpsaW5lLCBpbnQgbGluZV9udW0sIGNoYXIgKnJh d19saW5lKQogCQl9CiAJCXBhcnNlZGxpbmUtPmF1dGhfbWV0aG9kID0gdWFN RDU7CiAJfQorCWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5nLCAic2Ny YW0iKSA9PSAwKQorCXsKKwkJLyogRklYTUU6IGNvdWxkIHdlIHN1cHBvcnQg RGJfdXNlcl9uYW1lc3BhY2Ugd2l0aCBTQ1JBTT8gKi8KKwkJaWYgKERiX3Vz ZXJfbmFtZXNwYWNlKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCisJCQkJCSBlcnJt c2coIlNDUkFNIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hl biBcImRiX3VzZXJfbmFtZXNwYWNlXCIgaXMgZW5hYmxlZCIpLAorCQkJCQkg ZXJyY29udGV4dCgibGluZSAlZCBvZiBjb25maWd1cmF0aW9uIGZpbGUgXCIl c1wiIiwKKwkJCQkJCQkJbGluZV9udW0sIEhiYUZpbGVOYW1lKSkpOworCQkJ cmV0dXJuIE5VTEw7CisJCX0KKwkJcGFyc2VkbGluZS0+YXV0aF9tZXRob2Qg PSB1YVNBU0w7CisJfQogCWVsc2UgaWYgKHN0cmNtcCh0b2tlbi0+c3RyaW5n LCAicGFtIikgPT0gMCkKICNpZmRlZiBVU0VfUEFNCiAJCXBhcnNlZGxpbmUt PmF1dGhfbWV0aG9kID0gdWFQQU07CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9saWJwcS9wZ19oYmEuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC9saWJw cS9wZ19oYmEuY29uZi5zYW1wbGUKaW5kZXggODZhODllZC4uZGMzY2UyZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcGdfaGJhLmNvbmYuc2Ft cGxlCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BnX2hiYS5jb25mLnNhbXBs ZQpAQCAtNDIsNyArNDIsNyBAQAogIyBvciAic2FtZW5ldCIgdG8gbWF0Y2gg YW55IGFkZHJlc3MgaW4gYW55IHN1Ym5ldCB0aGF0IHRoZSBzZXJ2ZXIgaXMK ICMgZGlyZWN0bHkgY29ubmVjdGVkIHRvLgogIwotIyBNRVRIT0QgY2FuIGJl ICJ0cnVzdCIsICJyZWplY3QiLCAibWQ1IiwgInBhc3N3b3JkIiwgImdzcyIs ICJzc3BpIiwKKyMgTUVUSE9EIGNhbiBiZSAidHJ1c3QiLCAicmVqZWN0Iiwg Im1kNSIsICJwYXNzd29yZCIsICJzY3JhbSIsICJnc3MiLCAic3NwaSIsCiAj ICJpZGVudCIsICJwZWVyIiwgInBhbSIsICJsZGFwIiwgInJhZGl1cyIgb3Ig ImNlcnQiLiAgTm90ZSB0aGF0CiAjICJwYXNzd29yZCIgc2VuZHMgcGFzc3dv cmRzIGluIGNsZWFyIHRleHQ7ICJtZDUiIGlzIHByZWZlcnJlZCBzaW5jZQog IyBpdCBzZW5kcyBlbmNyeXB0ZWQgcGFzc3dvcmRzLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2VuY29kZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2VuY29kZS5jCmluZGV4IDRiMzJiNmMuLmM0MTRlODYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvZW5jb2RlLmMKQEAgLTIxNCw3ICsy MTQsNyBAQCBzdGF0aWMgY29uc3QgaW50OCBiNjRsb29rdXBbMTI4XSA9IHsK IAk0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZAor dW5zaWduZWQKIGI2NF9lbmNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25l ZCBsZW4sIGNoYXIgKmRzdCkKIHsKIAljaGFyCSAgICpwLApAQCAtMjYxLDcg KzI2MSw3IEBAIGI2NF9lbmNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25l ZCBsZW4sIGNoYXIgKmRzdCkKIAlyZXR1cm4gcCAtIGRzdDsKIH0KIAotc3Rh dGljIHVuc2lnbmVkCit1bnNpZ25lZAogYjY0X2RlY29kZShjb25zdCBjaGFy ICpzcmMsIHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KQogewogCWNvbnN0IGNo YXIgKnNyY2VuZCA9IHNyYyArIGxlbiwKQEAgLTMzMSwxNCArMzMxLDE0IEBA IGI2NF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNo YXIgKmRzdCkKIH0KIAogCi1zdGF0aWMgdW5zaWduZWQKK3Vuc2lnbmVkCiBi NjRfZW5jX2xlbihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIHNyY2xlbikK IHsKIAkvKiAzIGJ5dGVzIHdpbGwgYmUgY29udmVydGVkIHRvIDQsIGxpbmVm ZWVkIGFmdGVyIDc2IGNoYXJzICovCiAJcmV0dXJuIChzcmNsZW4gKyAyKSAq IDQgLyAzICsgc3JjbGVuIC8gKDc2ICogMyAvIDQpOwogfQogCi1zdGF0aWMg dW5zaWduZWQKK3Vuc2lnbmVkCiBiNjRfZGVjX2xlbihjb25zdCBjaGFyICpz cmMsIHVuc2lnbmVkIHNyY2xlbikKIHsKIAlyZXR1cm4gKHNyY2xlbiAqIDMp ID4+IDI7CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL01ha2VmaWxlIGIvc3Jj L2NvbW1vbi9NYWtlZmlsZQppbmRleCBmNTI2YjQyLi41YjFiOGFjIDEwMDY0 NAotLS0gYS9zcmMvY29tbW9uL01ha2VmaWxlCisrKyBiL3NyYy9jb21tb24v TWFrZWZpbGUKQEAgLTI0LDcgKzI0LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1Mg Oj0gLURGUk9OVEVORCAkKENQUEZMQUdTKQogTElCUyArPSAkKFBUSFJFQURf TElCUykKIAogT0JKU19DT01NT04gPSBleGVjLm8gcGdfY3JjLm8gcGdfbHpj b21wcmVzcy5vIHBnZm5hbWVzLm8gcHNwcmludGYubyByZWxwYXRoLm8gXAot CXJtdHJlZS5vIHNoYTEubyBzdHJpbmcubyB1c2VybmFtZS5vIHdhaXRfZXJy b3IubworCXJtdHJlZS5vIHNjcmFtLWNvbW1vbi5vIHNoYTEubyBzdHJpbmcu byB1c2VybmFtZS5vIHdhaXRfZXJyb3IubwogCiBPQkpTX0ZST05URU5EID0g JChPQkpTX0NPTU1PTikgZmVfbWVtdXRpbHMubwogCmRpZmYgLS1naXQgYS9z cmMvY29tbW9uL3NjcmFtLWNvbW1vbi5jIGIvc3JjL2NvbW1vbi9zY3JhbS1j b21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43 MTRmZDMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbW1vbi9zY3JhbS1j b21tb24uYwpAQCAtMCwwICsxLDE2MSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBzY3JhbS1jb21tb24uYworICoJCVNoYXJlZCBm cm9udGVuZC9iYWNrZW5kIGNvZGUgZm9yIFNDUkFNIGF1dGhlbnRpY2F0aW9u CisgKgorICogVGhpcyBjb250YWlucyB0aGUgY29tbW9uIGxvdy1sZXZlbCBm dW5jdGlvbnMgbmVlZGVkIGluIGJvdGggZnJvbnRlbmQgYW5kCisgKiBiYWNr ZW5kLCBmb3IgaW1wbGVtZW50IHRoZSBTYWx0ZWQgQ2hhbGxlbmdlIFJlc3Bv bnNlIEF1dGhlbnRpY2F0aW9uCisgKiBNZWNoYW5zaW0gKFNDUkFNKSwgcGVy IElFVEYncyBSRkMgNTgwMi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2NvbW1vbi9zY3Jh bS1jb21tb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKyNlbHNlCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNlbmRpZgor CisjaW5jbHVkZSAiY29tbW9uL3NjcmFtLWNvbW1vbi5oIgorCisvKgorICog Q2FsY3VsYXRlIEhNQUMgcGVyIFJGQzIxMDQuCisgKgorICogVGhlIGhhc2gg ZnVuY3Rpb24gdXNlZCBpcyBTSEEtMS4KKyAqLwordm9pZAorc2NyYW1fSE1B Q19pbml0KHNjcmFtX0hNQUNfY3R4ICpjdHgsIGNvbnN0IHVpbnQ4ICprZXks IGludCBrZXlsZW4pCit7CisJdWludDgJCWtfaXBhZFtTSEExX0hNQUNfQl07 CisJaW50CQkJaTsKKwl1aW50OAkJa2V5YnVmW1NIQTFfUkVTVUxUTEVOXTsK KworCS8qCisJICogSWYgdGhlIGtleSBpcyBsb25nZXIgdGhhbiB0aGUgYmxv Y2sgc2l6ZSAoNjQgYnl0ZXMgZm9yIFNIQS0xKSwKKwkgKiBwYXNzIGl0IHRo cm91Z2ggU0hBLTEgb25jZSB0byBzaHJpbmsgaXQgZG93bgorCSAqLworCWlm IChrZXlsZW4gPiBTSEExX0hNQUNfQikKKwl7CisJCVNIQTFfQ1RYCXNoYTFf Y3R4OworCisJCVNIQTFJbml0KCZzaGExX2N0eCk7CisJCVNIQTFVcGRhdGUo JnNoYTFfY3R4LCBrZXksIGtleWxlbik7CisJCVNIQTFGaW5hbChrZXlidWYs ICZzaGExX2N0eCk7CisJCWtleSA9IGtleWJ1ZjsKKwkJa2V5bGVuID0gU0hB MV9SRVNVTFRMRU47CisJfQorCisJbWVtc2V0KGtfaXBhZCwgMHgzNiwgU0hB MV9ITUFDX0IpOworCW1lbXNldChjdHgtPmtfb3BhZCwgMHg1QywgU0hBMV9I TUFDX0IpOworCWZvciAoaSA9IDA7IGkgPCBrZXlsZW47IGkrKykKKwl7CisJ CWtfaXBhZFtpXSBePSBrZXlbaV07CisJCWN0eC0+a19vcGFkW2ldIF49IGtl eVtpXTsKKwl9CisKKwkvKiB0bXAgPSBIKEsgWE9SIGlwYWQsIHRleHQpICov CisJU0hBMUluaXQoJmN0eC0+c2hhMWN0eCk7CisJU0hBMVVwZGF0ZSgmY3R4 LT5zaGExY3R4LCBrX2lwYWQsIFNIQTFfSE1BQ19CKTsKK30KKwordm9pZAor c2NyYW1fSE1BQ191cGRhdGUoc2NyYW1fSE1BQ19jdHggKmN0eCwgY29uc3Qg Y29uc3QgY2hhciAqc3RyLCBpbnQgc2xlbikKK3sKKwlTSEExVXBkYXRlKCZj dHgtPnNoYTFjdHgsIChjb25zdCB1aW50OCAqKSBzdHIsIHNsZW4pOworfQor Cit2b2lkCitzY3JhbV9ITUFDX2ZpbmFsKHVpbnQ4ICpyZXN1bHQsIHNjcmFt X0hNQUNfY3R4ICpjdHgpCit7CisJdWludDgJCWhbU0hBMV9SRVNVTFRMRU5d OworCisJU0hBMUZpbmFsKGgsICZjdHgtPnNoYTFjdHgpOworCisJLyogSChL IFhPUiBvcGFkLCB0bXApICovCisJU0hBMUluaXQoJmN0eC0+c2hhMWN0eCk7 CisJU0hBMVVwZGF0ZSgmY3R4LT5zaGExY3R4LCBjdHgtPmtfb3BhZCwgU0hB MV9ITUFDX0IpOworCVNIQTFVcGRhdGUoJmN0eC0+c2hhMWN0eCwgaCwgU0hB MV9SRVNVTFRMRU4pOworCVNIQTFGaW5hbChyZXN1bHQsICZjdHgtPnNoYTFj dHgpOworfQorCitzdGF0aWMgdm9pZAorc2NyYW1fSGkoY29uc3QgY2hhciAq c3RyLCBjb25zdCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXJh dGlvbnMsIHVpbnQ4ICpyZXN1bHQpCit7CisJaW50CQkJc3RyX2xlbiA9IHN0 cmxlbihzdHIpOworCXVpbnQzMgkJb25lID0gaHRvbmwoMSk7CisJaW50CQkJ aSwgajsKKwl1aW50OAkJVWlbU0NSQU1fS0VZX0xFTl07CisJdWludDgJCVVp X3ByZXZbU0NSQU1fS0VZX0xFTl07CisJc2NyYW1fSE1BQ19jdHggaG1hY19j dHg7CisKKwkvKiBGaXJzdCBpdGVyYXRpb24gKi8KKwlzY3JhbV9ITUFDX2lu aXQoJmhtYWNfY3R4LCAodWludDggKikgc3RyLCBzdHJfbGVuKTsKKwlzY3Jh bV9ITUFDX3VwZGF0ZSgmaG1hY19jdHgsIHNhbHQsIHNhbHRsZW4pOworCXNj cmFtX0hNQUNfdXBkYXRlKCZobWFjX2N0eCwgKGNoYXIgKikgJm9uZSwgc2l6 ZW9mKHVpbnQzMikpOworCXNjcmFtX0hNQUNfZmluYWwoVWlfcHJldiwgJmht YWNfY3R4KTsKKwltZW1jcHkocmVzdWx0LCBVaV9wcmV2LCBTQ1JBTV9LRVlf TEVOKTsKKworCS8qIFN1YnNlcXVlbnQgaXRlcmF0aW9ucyAqLworCWZvciAo aSA9IDI7IGkgPD0gaXRlcmF0aW9uczsgaSsrKQorCXsKKwkJc2NyYW1fSE1B Q19pbml0KCZobWFjX2N0eCwgKHVpbnQ4ICopIHN0ciwgc3RyX2xlbik7CisJ CXNjcmFtX0hNQUNfdXBkYXRlKCZobWFjX2N0eCwgKGNvbnN0IGNoYXIgKikg VWlfcHJldiwgU0NSQU1fS0VZX0xFTik7CisJCXNjcmFtX0hNQUNfZmluYWwo VWksICZobWFjX2N0eCk7CisJCWZvciAoaiA9IDA7IGogPCBTQ1JBTV9LRVlf TEVOOyBqKyspCisJCQlyZXN1bHRbal0gXj0gVWlbal07CisJCW1lbWNweShV aV9wcmV2LCBVaSwgU0NSQU1fS0VZX0xFTik7CisJfQorfQorCisKKy8qCisg KiBDYWxjdWxhdGUgU0hBLTEgaGFzaCBmb3IgYSBOVUxMLXRlcm1pbmF0ZWQg c3RyaW5nLiAoVGhlIE5VTEwgdGVybWluYXRvciBpcworICogbm90IGluY2x1 ZGVkIGluIHRoZSBoYXNoKS4KKyAqLwordm9pZAorc2NyYW1fSChjb25zdCB1 aW50OCAqaW5wdXQsIGludCBsZW4sIHVpbnQ4ICpyZXN1bHQpCit7CisJU0hB MV9DVFgJY3R4OworCisJU0hBMUluaXQoJmN0eCk7CisJU0hBMVVwZGF0ZSgm Y3R4LCBpbnB1dCwgbGVuKTsKKwlTSEExRmluYWwocmVzdWx0LCAmY3R4KTsK K30KKworc3RhdGljIHZvaWQKK3NjcmFtX05vcm1hbGl6ZShjb25zdCBjaGFy ICpwYXNzd29yZCwgY2hhciAqcmVzdWx0KQoreworCS8qIFRPRE8gKi8KKwlz dHJsY3B5KHJlc3VsdCwgcGFzc3dvcmQsIDIwKTsKK30KKworc3RhdGljIHZv aWQKK3NjcmFtX1NhbHRlZFBhc3N3b3JkKGNvbnN0IGNoYXIgKnBhc3N3b3Jk LCBjb25zdCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwgaW50IGl0ZXJhdGlv bnMsCisJCQkJCSB1aW50OCAqcmVzdWx0KQoreworCS8qIEZJWE1FOiBwd2J1 ZiBuZWVkcyB0byBiZSBzaXplZCBwcm9wZXJseSAqLworCWNoYXIJCXB3YnVm WzIwXTsKKworCXNjcmFtX05vcm1hbGl6ZShwYXNzd29yZCwgcHdidWYpOwor CXNjcmFtX0hpKHB3YnVmLCBzYWx0LCBzYWx0bGVuLCBpdGVyYXRpb25zLCBy ZXN1bHQpOworfQorCisvKgorICogQ2FsY3VsYXRlIENsaWVudEtleSBvciBT ZXJ2ZXJLZXkuCisgKi8KK3ZvaWQKK3NjcmFtX0NsaWVudE9yU2VydmVyS2V5 KGNvbnN0IGNoYXIgKnBhc3N3b3JkLAorCQkJCQkJY29uc3QgY2hhciAqc2Fs dCwgaW50IHNhbHRsZW4sIGludCBpdGVyYXRpb25zLAorCQkJCQkJY29uc3Qg Y2hhciAqa2V5c3RyLCB1aW50OCAqcmVzdWx0KQoreworCXVpbnQ4CQlrZXli dWZbU0NSQU1fS0VZX0xFTl07CisJc2NyYW1fSE1BQ19jdHggY3R4OworCisJ c2NyYW1fU2FsdGVkUGFzc3dvcmQocGFzc3dvcmQsIHNhbHQsIHNhbHRsZW4s IGl0ZXJhdGlvbnMsIGtleWJ1Zik7CisJc2NyYW1fSE1BQ19pbml0KCZjdHgs IGtleWJ1ZiwgMjApOworCXNjcmFtX0hNQUNfdXBkYXRlKCZjdHgsIGtleXN0 ciwgc3RybGVuKGtleXN0cikpOworCXNjcmFtX0hNQUNfZmluYWwocmVzdWx0 LCAmY3R4KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9z Y3JhbS1jb21tb24uaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi9zY3JhbS1jb21t b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2U5 MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3Nj cmFtLWNvbW1vbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHNjcmFtLWNvbW1vbi5oCisgKgkJ RGVjbGFyYXRpb25zIGZvciBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIFND UkFNIGF1dGhlbnRpY2F0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNy Yy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmgKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBTQ1JBTV9DT01NT05f SAorI2RlZmluZSBTQ1JBTV9DT01NT05fSAorCisjaW5jbHVkZSAiY29tbW9u L3NoYTEuaCIKKworI2RlZmluZSBTQ1JBTV9LRVlfTEVOCVNIQTFfUkVTVUxU TEVOCisKKyNkZWZpbmUgU0hBMV9ITUFDX0IJCTY0CisKK3R5cGVkZWYgc3Ry dWN0Cit7CisJU0hBMV9DVFgJc2hhMWN0eDsKKwl1aW50OAkJa19vcGFkW1NI QTFfSE1BQ19CXTsKK30gc2NyYW1fSE1BQ19jdHg7CisKK2V4dGVybiB2b2lk IHNjcmFtX0hNQUNfaW5pdChzY3JhbV9ITUFDX2N0eCAqY3R4LCBjb25zdCB1 aW50OCAqa2V5LCBpbnQga2V5bGVuKTsKK2V4dGVybiB2b2lkIHNjcmFtX0hN QUNfdXBkYXRlKHNjcmFtX0hNQUNfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0 ciwgaW50IHNsZW4pOworZXh0ZXJuIHZvaWQgc2NyYW1fSE1BQ19maW5hbCh1 aW50OCAqcmVzdWx0LCBzY3JhbV9ITUFDX2N0eCAqY3R4KTsKKworZXh0ZXJu IHZvaWQgc2NyYW1fSChjb25zdCB1aW50OCAqc3RyLCBpbnQgbGVuLCB1aW50 OCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHNjcmFtX0NsaWVudE9yU2VydmVy S2V5KGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBjb25zdCBjaGFyICpzYWx0LCBp bnQgc2FsdGxlbiwgaW50IGl0ZXJhdGlvbnMsIGNvbnN0IGNoYXIgKmtleXN0 ciwgdWludDggKnJlc3VsdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvYXV0aC5oIGIvc3JjL2luY2x1ZGUvbGlicHEvYXV0 aC5oCmluZGV4IDgwZjI2YTguLjQ0Njk1NjUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2xpYnBxL2F1dGguaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9h dXRoLmgKQEAgLTIyLDYgKzIyLDExIEBAIGV4dGVybiBjaGFyICpwZ19rcmJf cmVhbG07CiAKIGV4dGVybiB2b2lkIENsaWVudEF1dGhlbnRpY2F0aW9uKFBv cnQgKnBvcnQpOwogCisvKiBSZXR1cm4gY29kZXMgZm9yIFNBU0wgYXV0aGVu dGljYXRpb24gZnVuY3Rpb25zICovCisjZGVmaW5lCVNBU0xfRVhDSEFOR0Vf Q09OVElOVUUJCTAKKyNkZWZpbmUJU0FTTF9FWENIQU5HRV9TVUNDRVNTCQkx CisjZGVmaW5lCVNBU0xfRVhDSEFOR0VfRkFJTFVSRQkJMgorCiAvKiBIb29r IGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIENsaWVudEF1dGhlbnRp Y2F0aW9uKCkgKi8KIHR5cGVkZWYgdm9pZCAoKkNsaWVudEF1dGhlbnRpY2F0 aW9uX2hvb2tfdHlwZSkgKFBvcnQgKiwgaW50KTsKIGV4dGVybiBQR0RMTElN UE9SVCBDbGllbnRBdXRoZW50aWNhdGlvbl9ob29rX3R5cGUgQ2xpZW50QXV0 aGVudGljYXRpb25faG9vazsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp YnBxL2NyeXB0LmggYi9zcmMvaW5jbHVkZS9saWJwcS9jcnlwdC5oCmluZGV4 IGRmYWI4ZjMuLjc3YTM4OGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xp YnBxL2NyeXB0LmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvY3J5cHQuaApA QCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAibGlicHEvbGlicHEtYmUu aCIKIAorZXh0ZXJuIGNoYXIgKmdldF9yb2xlX3ZlcmlmaWVyKGNvbnN0IGNo YXIgKnJvbG5hbWUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgY2hhciAqKmxvZ2Rl dGFpbCk7CiBleHRlcm4gaW50IG1kNV9jcnlwdF92ZXJpZnkoY29uc3QgUG9y dCAqcG9ydCwgY29uc3QgY2hhciAqcm9sZSwKIAkJCQkgY2hhciAqY2xpZW50 X3Bhc3MsIGNoYXIgKipsb2dkZXRhaWwpOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9saWJwcS9oYmEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5o CmluZGV4IDY4YTk1M2EuLmE3M2QyZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2xpYnBxL2hiYS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2hiYS5o CkBAIC0yNCw2ICsyNCw3IEBAIHR5cGVkZWYgZW51bSBVc2VyQXV0aAogCXVh SWRlbnQsCiAJdWFQYXNzd29yZCwKIAl1YU1ENSwKKwl1YVNBU0wsCiAJdWFH U1MsCiAJdWFTU1BJLAogCXVhUEFNLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbGlicHEvcHFjb21tLmggYi9zcmMvaW5jbHVkZS9saWJwcS9wcWNvbW0u aAppbmRleCA2MzliZjcyLi40NjJhNWRkIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9saWJwcS9wcWNvbW0uaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9w cWNvbW0uaApAQCAtMTcyLDYgKzE3Miw4IEBAIGV4dGVybiBib29sIERiX3Vz ZXJfbmFtZXNwYWNlOwogI2RlZmluZSBBVVRIX1JFUV9HU1MJCTcJLyogR1NT QVBJIHdpdGhvdXQgd3JhcCgpICovCiAjZGVmaW5lIEFVVEhfUkVRX0dTU19D T05UCTgJLyogQ29udGludWUgR1NTIGV4Y2hhbmdlcyAqLwogI2RlZmluZSBB VVRIX1JFUV9TU1BJCQk5CS8qIFNTUEkgbmVnb3RpYXRlIHdpdGhvdXQgd3Jh cCgpICovCisjZGVmaW5lIEFVVEhfUkVRX1NBU0wJICAgMTAJLyogU0FTTCAq LworI2RlZmluZSBBVVRIX1JFUV9TQVNMX0NPTlQgMTEJLyogY29udGludWUg U0FTTCBleGNoYW5nZSAqLwogCiB0eXBlZGVmIHVpbnQzMiBBdXRoUmVxdWVz dDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvc2NyYW0uaCBi L3NyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZjI3MzM5MgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL2xpYnBxL3NjcmFtLmgKQEAgLTAsMCArMSwyMyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc2NyYW0u aAorICoJICBJbnRlcmZhY2UgdG8gbGlicHEvc2NyYW0uYworICoKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvbGlicHEvc2NyYW0uaAor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZu ZGVmIFBHX1NDUkFNX0gKKyNkZWZpbmUgUEdfU0NSQU1fSAorCitleHRlcm4g dm9pZCAqc2NyYW1faW5pdChjb25zdCBjaGFyICp1c2VybmFtZSwgY29uc3Qg Y2hhciAqdmVyaWZpZXIpOworZXh0ZXJuIGludCBzY3JhbV9leGNoYW5nZSh2 b2lkICpvcGFxLCBjaGFyICppbnB1dCwgaW50IGlucHV0bGVuLAorCQkJICAg Y2hhciAqKm91dHB1dCwgaW50ICpvdXRwdXRsZW4pOworZXh0ZXJuIGNoYXIg KnNjcmFtX2J1aWxkX3ZlcmlmaWVyKGNoYXIgKnVzZXJuYW1lLCBjaGFyICpw YXNzd29yZCwKKwkJCQkJIGludCBpdGVyYXRpb25zKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCA2MzEwNjQxLi5jYWQ5 ODUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTE1Nyw2 ICsxNTcsMTAgQEAgZXh0ZXJuIERhdHVtIGJpbmFyeV9lbmNvZGUoUEdfRlVO Q1RJT05fQVJHUyk7CiBleHRlcm4gRGF0dW0gYmluYXJ5X2RlY29kZShQR19G VU5DVElPTl9BUkdTKTsKIGV4dGVybiB1bnNpZ25lZCBoZXhfZW5jb2RlKGNv bnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBjaGFyICpkc3QpOwogZXh0 ZXJuIHVuc2lnbmVkIGhleF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLCB1bnNp Z25lZCBsZW4sIGNoYXIgKmRzdCk7CitleHRlcm4gdW5zaWduZWQgYjY0X2Vu Y29kZShjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0 KTsKK2V4dGVybiB1bnNpZ25lZCBiNjRfZGVjb2RlKGNvbnN0IGNoYXIgKnNy YywgdW5zaWduZWQgbGVuLCBjaGFyICpkc3QpOworZXh0ZXJuIHVuc2lnbmVk IGI2NF9lbmNfbGVuKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgc3JjbGVu KTsKK2V4dGVybiB1bnNpZ25lZCBiNjRfZGVjX2xlbihjb25zdCBjaGFyICpz cmMsIHVuc2lnbmVkIHNyY2xlbik7CiAKIC8qIGVudW0uYyAqLwogZXh0ZXJu IERhdHVtIGVudW1faW4oUEdfRlVOQ1RJT05fQVJHUyk7CmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlCmluZGV4IDY5NzNhMjAuLjRlYWUzMjYgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCkBAIC0zMSw3ICszMSw3 IEBAIExJQlMgOj0gJChMSUJTOi1scGdwb3J0PSkKIAogIyBXZSBjYW4ndCB1 c2UgTWFrZWZpbGUgdmFyaWFibGVzIGhlcmUgYmVjYXVzZSB0aGUgTVNWQyBi dWlsZCBzeXN0ZW0gc2NyYXBlcwogIyBPQkpTIGZyb20gdGhpcyBmaWxlLgot T0JKUz0JZmUtYXV0aC5vIGZlLWNvbm5lY3QubyBmZS1leGVjLm8gZmUtbWlz Yy5vIGZlLXByaW50Lm8gZmUtbG9iai5vIFwKK09CSlM9CWZlLWF1dGgubyBm ZS1hdXRoLXNjcmFtLm8gZmUtY29ubmVjdC5vIGZlLWV4ZWMubyBmZS1taXNj Lm8gZmUtcHJpbnQubyBmZS1sb2JqLm8gXAogCWZlLXByb3RvY29sMi5vIGZl LXByb3RvY29sMy5vIHBxZXhwYnVmZmVyLm8gZmUtc2VjdXJlLm8gXAogCWxp YnBxLWV2ZW50cy5vCiAjIGxpYnBncG9ydCBDIGZpbGVzIHdlIGFsd2F5cyB1 c2UKQEAgLTQzLDYgKzQzLDkgQEAgT0JKUyArPSAkKGZpbHRlciBjcnlwdC5v IGdldGFkZHJpbmZvLm8gZ2V0cGVlcmVpZC5vIGluZXRfYXRvbi5vIG9wZW4u byBzeXN0ZW0ubwogT0JKUyArPSBpcC5vIG1kNS5vCiAjIHV0aWxzL21iCiBP QkpTICs9IGVuY25hbWVzLm8gd2NoYXIubworIyBjb21tb24vCisjIEZJWE1F OiBhbnkgcmVhc29uIG5vdCB0byBsaW5rIHdpdGggbGlicGdjb21tb24/CitP QkpTICs9IHNjcmFtLWNvbW1vbi5vIHNoYTEubwogCiBpZmVxICgkKHdpdGhf b3BlbnNzbCkseWVzKQogT0JKUyArPSBmZS1zZWN1cmUtb3BlbnNzbC5vCkBA IC0xMDIsNiArMTA1LDkgQEAgaXAuYyBtZDUuYzogJSA6ICQoYmFja2VuZF9z cmMpL2xpYnBxLyUKIGVuY25hbWVzLmMgd2NoYXIuYzogJSA6ICQoYmFja2Vu ZF9zcmMpL3V0aWxzL21iLyUKIAlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4K IAorc2NyYW0tY29tbW9uLmMgc2hhMS5jOiAlIDogJCh0b3Bfc3JjZGlyKS9z cmMvY29tbW9uLyUKKwlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4KKwogCiBk aXN0cHJlcDogbGlicHEtZGlzdC5yYwogCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uOTE2NWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtc2NyYW0uYwpAQCAtMCwwICsx LDQ3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogZmUtYXV0aC1zY3JhbS5jCisgKgkgICBUaGUgZnJvbnQtZW5kIChjbGll bnQpIGltcGxlbWVudGF0aW9uIG9mIFNDUkFNIGF1dGhlbnRpY2F0aW9uLgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBz cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAi cG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zY3JhbS1jb21t b24uaCIKKyNpbmNsdWRlICJmZS1hdXRoLmgiCisKK3R5cGVkZWYgc3RydWN0 Cit7CisJZW51bQorCXsKKwkJSU5JVCwKKwkJTk9OQ0VfU0VOVCwKKwkJUFJP T0ZfU0VOVCwKKwkJRklOSVNIRUQKKwl9IHN0YXRlOworCisJY29uc3QgY2hh ciAqdXNlcm5hbWU7CisJY29uc3QgY2hhciAqcGFzc3dvcmQ7CisKKwljaGFy CSAgICpjbGllbnRfZmlyc3RfbWVzc2FnZV9iYXJlOworCisJLyogVGhlc2Ug Y29tZSBmcm9tIHRoZSBzZXJ2ZXItZmlyc3QgbWVzc2FnZSAqLworCWNoYXIJ ICAgKnNlcnZlcl9maXJzdF9tZXNzYWdlOworCWNoYXIJICAgKnNhbHQ7CisJ aW50CQkJc2FsdGxlbjsKKwlpbnQJCQlpdGVyYXRpb25zOworCWNoYXIJICAg KnNlcnZlcl9ub25jZTsKKworCS8qIFRoZXNlIGNvbWUgZnJvbSB0aGUgc2Vy dmVyLWZpbmFsIG1lc3NhZ2UgKi8KKwljaGFyCSAgICpzZXJ2ZXJfcHJvb2Y7 Cit9IGZlX3NjcmFtX3N0YXRlOworCitzdGF0aWMgYm9vbCByZWFkX3NlcnZl cl9maXJzdF9tZXNzYWdlKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSwgY2hhciAq aW5wdXQsIFBRRXhwQnVmZmVyIGVycm9ybWVzc2FnZSk7CitzdGF0aWMgYm9v bCByZWFkX3NlcnZlcl9maW5hbF9tZXNzYWdlKGZlX3NjcmFtX3N0YXRlICpz dGF0ZSwgY2hhciAqaW5wdXQpOworc3RhdGljIGNoYXIgKmJ1aWxkX2NsaWVu dF9maXJzdF9tZXNzYWdlKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSk7CitzdGF0 aWMgY2hhciAqYnVpbGRfY2xpZW50X2ZpbmFsX21lc3NhZ2UoZmVfc2NyYW1f c3RhdGUgKnN0YXRlKTsKK3N0YXRpYyBib29sIHZlcmlmeV9zZXJ2ZXJfcHJv b2YoZmVfc2NyYW1fc3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIGdlbmVy YXRlX25vbmNlKGNoYXIgKmJ1ZiwgaW50IGxlbik7CitzdGF0aWMgdm9pZCBj YWxjdWxhdGVfY2xpZW50X3Byb29mKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSwg Y29uc3QgY2hhciAqY2xpZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9v ZiwgdWludDggKnJlc3VsdCk7CisKK3N0YXRpYyB1bnNpZ25lZCBiNjRfZGVj b2RlKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBjaGFyICpkc3Qp Oworc3RhdGljIHVuc2lnbmVkIGI2NF9lbmNvZGUoY29uc3QgY2hhciAqc3Jj LCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRzdCk7CitzdGF0aWMgdW5zaWduZWQg YjY0X2VuY19sZW4oY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBzcmNsZW4p Oworc3RhdGljIHVuc2lnbmVkIGI2NF9kZWNfbGVuKGNvbnN0IGNoYXIgKnNy YywgdW5zaWduZWQgc3JjbGVuKTsKKwordm9pZCAqCitwZ19mZV9zY3JhbV9p bml0KGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBjb25zdCBjaGFyICpwYXNzd29y ZCkKK3sKKwlmZV9zY3JhbV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IChm ZV9zY3JhbV9zdGF0ZSAqKSBtYWxsb2Moc2l6ZW9mKGZlX3NjcmFtX3N0YXRl KSk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHN0 YXRlLCAwLCBzaXplb2YoZmVfc2NyYW1fc3RhdGUpKTsKKwlzdGF0ZS0+c3Rh dGUgPSBJTklUOworCXN0YXRlLT51c2VybmFtZSA9IHVzZXJuYW1lOworCXN0 YXRlLT5wYXNzd29yZCA9IHBhc3N3b3JkOworCisJcmV0dXJuIHN0YXRlOwor fQorCit2b2lkCitwZ19mZV9zY3JhbV9mcmVlKHZvaWQgKm9wYXEpCit7CisJ ZmVfc2NyYW1fc3RhdGUgKnN0YXRlID0gKGZlX3NjcmFtX3N0YXRlICopIG9w YXE7CisKKwlpZiAoc3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2JhcmUp CisJCWZyZWUoc3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2JhcmUpOwor CisJaWYgKHN0YXRlLT5zZXJ2ZXJfZmlyc3RfbWVzc2FnZSkKKwkJZnJlZShz dGF0ZS0+c2VydmVyX2ZpcnN0X21lc3NhZ2UpOworCWlmIChzdGF0ZS0+c2Fs dCkKKwkJZnJlZShzdGF0ZS0+c2FsdCk7CisJaWYgKHN0YXRlLT5zZXJ2ZXJf bm9uY2UpCisJCWZyZWUoc3RhdGUtPnNlcnZlcl9ub25jZSk7CisJaWYgKHN0 YXRlLT5zZXJ2ZXJfcHJvb2YpCisJCWZyZWUoc3RhdGUtPnNlcnZlcl9wcm9v Zik7CisKKwlmcmVlKHN0YXRlKTsKK30KKworLyoKKyAqIFRPRE86IEV2ZW4g dGhvdWdoIFNDUkFNIHdpbGwgYXV0aGVudGljYXRlIHRoZSBzZXJ2ZXIsIGJ5 IHZlcmlmeWluZyB0aGUKKyAqIHNlcnZlci1wcm9vZiwgd2UgZG9uJ3QgY3Vy cmVudGx5IHN0b3JlIHRoYXQgaW5mb3JtYXRpb24gYW55d2hlcmUuIE5vdGhp bmcKKyAqIHN0b3BzIHRoZSBzZXJ2ZXIgZnJvbSBsZWF2aW5nIHRoZSBTQVNM IGV4Y2hhbmdlIHVuZmluaXNoZWQsIGFuZCBqdXN0IHNlbmQgYW4KKyAqIEF1 dGhlbnRpY2F0aW9uT0sgbWVzc2FnZSwgbGVhdmluZyB0aGUgY2xpZW50IHVu c3VyZSBvZiB0aGUgc2VydmVyJ3MKKyAqIGlkZW50aXR5LgorICovCit2b2lk CitwZ19mZV9zY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBjaGFyICppbnB1 dCwgaW50IGlucHV0bGVuLAorCQkJCQkgY2hhciAqKm91dHB1dCwgaW50ICpv dXRwdXRsZW4sCisJCQkJCSBib29sICpkb25lLCBib29sICpzdWNjZXNzLCBQ UUV4cEJ1ZmZlciBlcnJvck1lc3NhZ2UpCit7CisJZmVfc2NyYW1fc3RhdGUg KnN0YXRlID0gKGZlX3NjcmFtX3N0YXRlICopIG9wYXE7CisKKwkqZG9uZSA9 IGZhbHNlOworCSpzdWNjZXNzID0gZmFsc2U7CisJKm91dHB1dCA9IE5VTEw7 CisJKm91dHB1dGxlbiA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5zdGF0ZSkK Kwl7CisJCWNhc2UgSU5JVDoKKwkJCS8qIHNlbmQgY2xpZW50IG5vbmNlICov CisJCQkqb3V0cHV0ID0gYnVpbGRfY2xpZW50X2ZpcnN0X21lc3NhZ2Uoc3Rh dGUpOworCQkJKm91dHB1dGxlbiA9IHN0cmxlbigqb3V0cHV0KTsKKwkJCSpk b25lID0gZmFsc2U7CisJCQlzdGF0ZS0+c3RhdGUgPSBOT05DRV9TRU5UOwor CQkJYnJlYWs7CisKKwkJY2FzZSBOT05DRV9TRU5UOgorCQkJLyogcmVjZWl2 ZSBzYWx0IGFuZCBzZXJ2ZXIgbm9uY2UsIHNlbmQgcmVzcG9uc2UgKi8KKwkJ CXJlYWRfc2VydmVyX2ZpcnN0X21lc3NhZ2Uoc3RhdGUsIGlucHV0LCBlcnJv ck1lc3NhZ2UpOworCQkJKm91dHB1dCA9IGJ1aWxkX2NsaWVudF9maW5hbF9t ZXNzYWdlKHN0YXRlKTsKKwkJCSpvdXRwdXRsZW4gPSBzdHJsZW4oKm91dHB1 dCk7CisJCQkqZG9uZSA9IGZhbHNlOworCQkJc3RhdGUtPnN0YXRlID0gUFJP T0ZfU0VOVDsKKwkJCWJyZWFrOworCisJCWNhc2UgUFJPT0ZfU0VOVDoKKwkJ CS8qIHJlY2VpdmUgc2VydmVyIHByb29mLCBhbmQgdmVyaWZ5IGl0ICovCisJ CQlyZWFkX3NlcnZlcl9maW5hbF9tZXNzYWdlKHN0YXRlLCBpbnB1dCk7CisJ CQkqc3VjY2VzcyA9IHZlcmlmeV9zZXJ2ZXJfcHJvb2Yoc3RhdGUpOworCQkJ KmRvbmUgPSB0cnVlOworCQkJc3RhdGUtPnN0YXRlID0gRklOSVNIRUQ7CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogc2hvdWxkbid0IGhhcHBl biAqLworCQkJKmRvbmUgPSB0cnVlOworCQkJKnN1Y2Nlc3MgPSBmYWxzZTsK KwkJCXByaW50ZlBRRXhwQnVmZmVyKGVycm9yTWVzc2FnZSwgImludmFsaWQg U0NSQU0gZXhjaGFuZ2Ugc3RhdGUiKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFy ICoKK3JlYWRfYXR0cl92YWx1ZShjaGFyICoqaW5wdXQsIGNoYXIgYXR0ciwg UFFFeHBCdWZmZXIgZXJyb3JNZXNzYWdlKQoreworCWNoYXIJCSpiZWdpbiA9 ICppbnB1dDsKKwljaGFyCQkqZW5kOworCisJaWYgKCpiZWdpbiAhPSBhdHRy KQorCQlwcmludGZQUUV4cEJ1ZmZlcihlcnJvck1lc3NhZ2UsICJtYWxmb3Jt ZWQgU0NSQU0gbWVzc2FnZSAoJWMgZXhwZWN0ZWQpIiwgYXR0cik7CisJYmVn aW4rKzsKKworCWlmICgqYmVnaW4gIT0gJz0nKQorCQlwcmludGZQUUV4cEJ1 ZmZlcihlcnJvck1lc3NhZ2UsICJtYWxmb3JtZWQgU0NSQU0gbWVzc2FnZSAo ZXhwZWN0ZWQgPSBpbiBhdHRyICVjKSIsIGF0dHIpOworCWJlZ2luKys7CisK KwllbmQgPSBiZWdpbjsKKwl3aGlsZSAoKmVuZCAmJiAqZW5kICE9ICcsJykK KwkJZW5kKys7CisKKwlpZiAoKmVuZCkKKwl7CisJCSplbmQgPSAnXDAnOwor CQkqaW5wdXQgPSBlbmQgKyAxOworCX0KKwllbHNlCisJCSppbnB1dCA9IGVu ZDsKKworCXJldHVybiBiZWdpbjsKK30KKworc3RhdGljIGNoYXIgKgorYnVp bGRfY2xpZW50X2ZpcnN0X21lc3NhZ2UoZmVfc2NyYW1fc3RhdGUgKnN0YXRl KQoreworCWNoYXIJCW5vbmNlWzEwICsgMV07CisJY2hhcgkgICAqYnVmOwor CWNoYXIJCW1zZ2xlbjsKKworCWdlbmVyYXRlX25vbmNlKG5vbmNlLCAxMCk7 CisKKwltc2dsZW4gPSA1ICsgc3RybGVuKHN0YXRlLT51c2VybmFtZSkgKyAz ICsgc3RybGVuKG5vbmNlKTsKKworCWJ1ZiA9IG1hbGxvYyhtc2dsZW4gKyAx KTsKKwlzbnByaW50ZihidWYsIG1zZ2xlbiArIDEsICJuLCxuPSVzLHI9JXMi LCBzdGF0ZS0+dXNlcm5hbWUsIG5vbmNlKTsKKworCXN0YXRlLT5jbGllbnRf Zmlyc3RfbWVzc2FnZV9iYXJlID0gc3RyZHVwKGJ1ZiArIDMpOworCWlmICgh c3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2JhcmUpCisJCXJldHVybiBO VUxMOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGJvb2wKK3JlYWRf c2VydmVyX2ZpcnN0X21lc3NhZ2UoZmVfc2NyYW1fc3RhdGUgKnN0YXRlLCBj aGFyICppbnB1dCwgUFFFeHBCdWZmZXIgZXJyb3JtZXNzYWdlKQoreworCWNo YXIJICAgKml0ZXJhdGlvbnNfc3RyOworCWNoYXIJICAgKmVuZHB0cjsKKwlj aGFyCSAgICplbmNvZGVkX3NhbHQ7CisKKwlzdGF0ZS0+c2VydmVyX2ZpcnN0 X21lc3NhZ2UgPSBzdHJkdXAoaW5wdXQpOworCWlmICghc3RhdGUtPnNlcnZl cl9maXJzdF9tZXNzYWdlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBwYXJz ZSB0aGUgbWVzc2FnZSAqLworCXN0YXRlLT5zZXJ2ZXJfbm9uY2UgPSBzdHJk dXAocmVhZF9hdHRyX3ZhbHVlKCZpbnB1dCwgJ3InLCBlcnJvcm1lc3NhZ2Up KTsKKwlpZiAoc3RhdGUtPnNlcnZlcl9ub25jZSA9PSBOVUxMKQorCQlyZXR1 cm4gZmFsc2U7CisKKwllbmNvZGVkX3NhbHQgPSByZWFkX2F0dHJfdmFsdWUo JmlucHV0LCAncycsIGVycm9ybWVzc2FnZSk7CisJaWYgKGVuY29kZWRfc2Fs dCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJc3RhdGUtPnNhbHQgPSBt YWxsb2MoYjY0X2RlY19sZW4oZW5jb2RlZF9zYWx0LCBzdHJsZW4oZW5jb2Rl ZF9zYWx0KSkpOworCWlmIChzdGF0ZS0+c2FsdCA9PSBOVUxMKQorCQlyZXR1 cm4gZmFsc2U7CisJc3RhdGUtPnNhbHRsZW4gPSBiNjRfZGVjb2RlKGVuY29k ZWRfc2FsdCwgc3RybGVuKGVuY29kZWRfc2FsdCksIHN0YXRlLT5zYWx0KTsK KwlpZiAoc3RhdGUtPnNhbHRsZW4gPD0gMCkKKwkJcmV0dXJuIGZhbHNlOwor CisJaXRlcmF0aW9uc19zdHIgPSByZWFkX2F0dHJfdmFsdWUoJmlucHV0LCAn aScsIGVycm9ybWVzc2FnZSk7CisJaWYgKGl0ZXJhdGlvbnNfc3RyID09IE5V TEwpCisJCXJldHVybiBmYWxzZTsKKwlzdGF0ZS0+aXRlcmF0aW9ucyA9IHN0 cnRvbChpdGVyYXRpb25zX3N0ciwgJmVuZHB0ciwgMTApOworCWlmICgqZW5k cHRyICE9ICdcMCcpCisJCXJldHVybiBmYWxzZTsKKworCWlmICgqaW5wdXQg IT0gJ1wwJykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBib29sCityZWFkX3NlcnZlcl9maW5hbF9tZXNzYWdlKGZl X3NjcmFtX3N0YXRlICpzdGF0ZSwgY2hhciAqaW5wdXQpCit7CisJLyogVE9E TzogdmVyaWZ5IFNlcnZlclNpZ25hdHVyZSAqLworCXJldHVybiB0cnVlOwor fQorCitzdGF0aWMgY2hhciAqCitidWlsZF9jbGllbnRfZmluYWxfbWVzc2Fn ZShmZV9zY3JhbV9zdGF0ZSAqc3RhdGUpCit7CisJY2hhcgkJY2xpZW50X2Zp bmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9vZlsyMDBdOworCXVpbnQ4CQljbGll bnRfcHJvb2ZbU0NSQU1fS0VZX0xFTl07CisJY2hhcgkJY2xpZW50X3Byb29m X2Jhc2U2NFtTQ1JBTV9LRVlfTEVOICogMiArIDFdOworCWludAkJCWNsaWVu dF9wcm9vZl9sZW47CisJY2hhcgkJYnVmWzMwMF07CisKKwlzbnByaW50Zihj bGllbnRfZmluYWxfbWVzc2FnZV93aXRob3V0X3Byb29mLCBzaXplb2YoY2xp ZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9vZiksCisJCQkgImM9Yml3 cyxyPSVzIiwgc3RhdGUtPnNlcnZlcl9ub25jZSk7CisKKwljYWxjdWxhdGVf Y2xpZW50X3Byb29mKHN0YXRlLCBjbGllbnRfZmluYWxfbWVzc2FnZV93aXRo b3V0X3Byb29mLCBjbGllbnRfcHJvb2YpOworCWlmIChiNjRfZW5jX2xlbigo Y2hhciAqKSBjbGllbnRfcHJvb2YsIFNDUkFNX0tFWV9MRU4pID4gc2l6ZW9m KGNsaWVudF9wcm9vZl9iYXNlNjQpKQorCQlyZXR1cm4gTlVMTDsKKworCWNs aWVudF9wcm9vZl9sZW4gPSBiNjRfZW5jb2RlKChjaGFyICopIGNsaWVudF9w cm9vZiwgU0NSQU1fS0VZX0xFTiwgY2xpZW50X3Byb29mX2Jhc2U2NCk7CisJ Y2xpZW50X3Byb29mX2Jhc2U2NFtjbGllbnRfcHJvb2ZfbGVuXSA9ICdcMCc7 CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMscD0lcyIsIGNs aWVudF9maW5hbF9tZXNzYWdlX3dpdGhvdXRfcHJvb2YsIGNsaWVudF9wcm9v Zl9iYXNlNjQpOworCWZwcmludGYoc3RkZXJyLCAiZmluYWxfbXNnOiAlcyIs IGJ1Zik7CisKKwlyZXR1cm4gc3RyZHVwKGJ1Zik7Cit9CisKK3N0YXRpYyB2 b2lkCitjYWxjdWxhdGVfY2xpZW50X3Byb29mKGZlX3NjcmFtX3N0YXRlICpz dGF0ZSwgY29uc3QgY2hhciAqY2xpZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91 dF9wcm9vZiwgdWludDggKnJlc3VsdCkKK3sKKwl1aW50OAkJU3RvcmVkS2V5 W1NDUkFNX0tFWV9MRU5dOworCXVpbnQ4CQlDbGllbnRLZXlbU0NSQU1fS0VZ X0xFTl07CisJdWludDgJCUNsaWVudFNpZ25hdHVyZVtTQ1JBTV9LRVlfTEVO XTsKKwlpbnQJCQlpOworCXNjcmFtX0hNQUNfY3R4IGN0eDsKKworCXNjcmFt X0NsaWVudE9yU2VydmVyS2V5KHN0YXRlLT5wYXNzd29yZCwgc3RhdGUtPnNh bHQsIHN0YXRlLT5zYWx0bGVuLAorCQkJCQkJCXN0YXRlLT5pdGVyYXRpb25z LCAiQ2xpZW50IEtleSIsIENsaWVudEtleSk7CisJc2NyYW1fSChDbGllbnRL ZXksIFNDUkFNX0tFWV9MRU4sIFN0b3JlZEtleSk7CisKKwlzY3JhbV9ITUFD X2luaXQoJmN0eCwgU3RvcmVkS2V5LCAyMCk7CisJc2NyYW1fSE1BQ191cGRh dGUoJmN0eCwgc3RhdGUtPmNsaWVudF9maXJzdF9tZXNzYWdlX2JhcmUsIHN0 cmxlbihzdGF0ZS0+Y2xpZW50X2ZpcnN0X21lc3NhZ2VfYmFyZSkpOworCXNj cmFtX0hNQUNfdXBkYXRlKCZjdHgsICIsIiwgMSk7CisJc2NyYW1fSE1BQ191 cGRhdGUoJmN0eCwgc3RhdGUtPnNlcnZlcl9maXJzdF9tZXNzYWdlLCBzdHJs ZW4oc3RhdGUtPnNlcnZlcl9maXJzdF9tZXNzYWdlKSk7CisJc2NyYW1fSE1B Q191cGRhdGUoJmN0eCwgIiwiLCAxKTsKKwlzY3JhbV9ITUFDX3VwZGF0ZSgm Y3R4LCBjbGllbnRfZmluYWxfbWVzc2FnZV93aXRob3V0X3Byb29mLCBzdHJs ZW4oY2xpZW50X2ZpbmFsX21lc3NhZ2Vfd2l0aG91dF9wcm9vZikpOworCXNj cmFtX0hNQUNfZmluYWwoQ2xpZW50U2lnbmF0dXJlLCAmY3R4KTsKKworCWZw cmludGYoc3RkZXJyLCAiQ2xpZW50U2lnbmF0dXJlOiAlMDJYJTAyWFxuIiwg Q2xpZW50U2lnbmF0dXJlWzBdLCBDbGllbnRTaWduYXR1cmVbMV0pOworCisJ Zm9yIChpID0gMDsgaSA8IFNDUkFNX0tFWV9MRU47IGkrKykKKwkJcmVzdWx0 W2ldID0gQ2xpZW50S2V5W2ldIF4gQ2xpZW50U2lnbmF0dXJlW2ldOworfQor CitzdGF0aWMgYm9vbAordmVyaWZ5X3NlcnZlcl9wcm9vZihmZV9zY3JhbV9z dGF0ZSAqc3RhdGUpCit7CisJLyogVE9ETyAqLworCXJldHVybiB0cnVlOwor fQorCisKKy8qCisgKiBUT0RPOiBXZSBuZWVkIGEgc291cmNlIG9mIHJhbmRv bW5lc3MuIGxpYnBxIGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgb25lLgorICov CitzdGF0aWMgdm9pZAorZ2VuZXJhdGVfbm9uY2UoY2hhciAqYnVmLCBpbnQg bGVuKQoreworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisJeworCQlidWZbaV0gPSAneCc7CisJfQorCWJ1ZltpXSA9ICdcMCc7 Cit9CisKKworLyoKKyAqIEJBU0U2NAorICovCisKK3N0YXRpYyBjb25zdCBj aGFyIF9iYXNlNjRbXSA9CisiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVph YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CisKK3N0 YXRpYyBjb25zdCBpbnQ4IGI2NGxvb2t1cFsxMjhdID0geworCS0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjIsIC0xLCAtMSwg LTEsIDYzLAorCTUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAs IDYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAwLCAxLCAyLCAz LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJMTUs IDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAtMSwg LTEsIC0xLCAtMSwgLTEsCisJLTEsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEs IDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsCisJNDEsIDQy LCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCAtMSwgLTEs IC0xLCAtMSwgLTEsCit9OworCitzdGF0aWMgdW5zaWduZWQKK2I2NF9lbmNv ZGUoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGNoYXIgKmRzdCkK K3sKKwljaGFyCSAgICpwLAorCQkJICAgKmxlbmQgPSBkc3QgKyA3NjsKKwlj b25zdCBjaGFyICpzLAorCQkJICAgKmVuZCA9IHNyYyArIGxlbjsKKwlpbnQJ CQlwb3MgPSAyOworCXVpbnQzMgkJYnVmID0gMDsKKworCXMgPSBzcmM7CisJ cCA9IGRzdDsKKworCXdoaWxlIChzIDwgZW5kKQorCXsKKwkJYnVmIHw9ICh1 bnNpZ25lZCBjaGFyKSAqcyA8PCAocG9zIDw8IDMpOworCQlwb3MtLTsKKwkJ cysrOworCisJCS8qIHdyaXRlIGl0IG91dCAqLworCQlpZiAocG9zIDwgMCkK KwkJeworCQkJKnArKyA9IF9iYXNlNjRbKGJ1ZiA+PiAxOCkgJiAweDNmXTsK KwkJCSpwKysgPSBfYmFzZTY0WyhidWYgPj4gMTIpICYgMHgzZl07CisJCQkq cCsrID0gX2Jhc2U2NFsoYnVmID4+IDYpICYgMHgzZl07CisJCQkqcCsrID0g X2Jhc2U2NFtidWYgJiAweDNmXTsKKworCQkJcG9zID0gMjsKKwkJCWJ1ZiA9 IDA7CisJCX0KKwkJaWYgKHAgPj0gbGVuZCkKKwkJeworCQkJKnArKyA9ICdc bic7CisJCQlsZW5kID0gcCArIDc2OworCQl9CisJfQorCWlmIChwb3MgIT0g MikKKwl7CisJCSpwKysgPSBfYmFzZTY0WyhidWYgPj4gMTgpICYgMHgzZl07 CisJCSpwKysgPSBfYmFzZTY0WyhidWYgPj4gMTIpICYgMHgzZl07CisJCSpw KysgPSAocG9zID09IDApID8gX2Jhc2U2NFsoYnVmID4+IDYpICYgMHgzZl0g OiAnPSc7CisJCSpwKysgPSAnPSc7CisJfQorCisJcmV0dXJuIHAgLSBkc3Q7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorYjY0X2RlY29kZShjb25zdCBjaGFy ICpzcmMsIHVuc2lnbmVkIGxlbiwgY2hhciAqZHN0KQoreworCWNvbnN0IGNo YXIgKnNyY2VuZCA9IHNyYyArIGxlbiwKKwkJCSAgICpzID0gc3JjOworCWNo YXIJICAgKnAgPSBkc3Q7CisJY2hhcgkJYzsKKwlpbnQJCQliID0gMDsKKwl1 aW50MzIJCWJ1ZiA9IDA7CisJaW50CQkJcG9zID0gMCwKKwkJCQllbmQgPSAw OworCisJd2hpbGUgKHMgPCBzcmNlbmQpCisJeworCQljID0gKnMrKzsKKwor CQlpZiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBj ID09ICdccicpCisJCQljb250aW51ZTsKKworCQlpZiAoYyA9PSAnPScpCisJ CXsKKwkJCS8qIGVuZCBzZXF1ZW5jZSAqLworCQkJaWYgKCFlbmQpCisJCQl7 CisJCQkJaWYgKHBvcyA9PSAyKQorCQkJCQllbmQgPSAxOworCQkJCWVsc2Ug aWYgKHBvcyA9PSAzKQorCQkJCQllbmQgPSAyOworCQkJCWVsc2UKKwkJCQl7 CisJCQkJCXJldHVybiAwOworCQkJCQkvL2VyZXBvcnQoRVJST1IsCisJCQkJ CS8vCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJLy8JCSBlcnJtc2coInVuZXhwZWN0ZWQgXCI9XCIgd2hpbGUg ZGVjb2RpbmcgYmFzZTY0IHNlcXVlbmNlIikpKTsKKwkJCQl9CisJCQl9CisJ CQliID0gMDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWIgPSAtMTsKKwkJCWlm IChjID4gMCAmJiBjIDwgMTI3KQorCQkJCWIgPSBiNjRsb29rdXBbKHVuc2ln bmVkIGNoYXIpIGNdOworCQkJaWYgKGIgPCAwKQorCQkJeworCQkJCS8vZXJl cG9ydChFUlJPUiwKKwkJCQkvLwkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJLy8JCSBlcnJtc2coImludmFsaWQg c3ltYm9sICclYycgd2hpbGUgZGVjb2RpbmcgYmFzZTY0IHNlcXVlbmNlIiwg KGludCkgYykpKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQkvKiBh ZGQgaXQgdG8gYnVmZmVyICovCisJCWJ1ZiA9IChidWYgPDwgNikgKyBiOwor CQlwb3MrKzsKKwkJaWYgKHBvcyA9PSA0KQorCQl7CisJCQkqcCsrID0gKGJ1 ZiA+PiAxNikgJiAyNTU7CisJCQlpZiAoZW5kID09IDAgfHwgZW5kID4gMSkK KwkJCQkqcCsrID0gKGJ1ZiA+PiA4KSAmIDI1NTsKKwkJCWlmIChlbmQgPT0g MCB8fCBlbmQgPiAyKQorCQkJCSpwKysgPSBidWYgJiAyNTU7CisJCQlidWYg PSAwOworCQkJcG9zID0gMDsKKwkJfQorCX0KKworCWlmIChwb3MgIT0gMCkK Kwl7CisJCS8vZXJlcG9ydChFUlJPUiwKKwkJLy8JCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkvLwkJIGVycm1zZygi aW52YWxpZCBiYXNlNjQgZW5kIHNlcXVlbmNlIiksCisJCS8vCQkgZXJyaGlu dCgiSW5wdXQgZGF0YSBpcyBtaXNzaW5nIHBhZGRpbmcsIHRydW5jYXRlZCwg b3Igb3RoZXJ3aXNlIGNvcnJ1cHRlZC4iKSkpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlyZXR1cm4gcCAtIGRzdDsKK30KKworCitzdGF0aWMgdW5zaWduZWQK K2I2NF9lbmNfbGVuKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgc3JjbGVu KQoreworCS8qIDMgYnl0ZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gNCwgbGlu ZWZlZWQgYWZ0ZXIgNzYgY2hhcnMgKi8KKwlyZXR1cm4gKHNyY2xlbiArIDIp ICogNCAvIDMgKyBzcmNsZW4gLyAoNzYgKiAzIC8gNCk7Cit9CisKK3N0YXRp YyB1bnNpZ25lZAorYjY0X2RlY19sZW4oY29uc3QgY2hhciAqc3JjLCB1bnNp Z25lZCBzcmNsZW4pCit7CisJcmV0dXJuIChzcmNsZW4gKiAzKSA+PiAyOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5j IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC5jCmluZGV4IDg5Mjdk ZjQuLjI0YzhkNGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGguYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRo LmMKQEAgLTQyOCw2ICs0MjgsNzQgQEAgcGdfU1NQSV9zdGFydHVwKFBHY29u biAqY29ubiwgaW50IHVzZV9uZWdvdGlhdGUpCiB9CiAjZW5kaWYgICAvKiBF TkFCTEVfU1NQSSAqLwogCitzdGF0aWMgYm9vbAorcGdfU0FTTF9pbml0KFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqYXV0aF9tZWNoYW5pc20pCit7CisJ LyoKKwkgKiBDaGVjayB0aGUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIChv bmx5IFNDUkFNLVNIQS0xIGlzIHN1cHBvcnRlZCBhdAorCSAqIHRoZSBtb21l bnQuKQorCSAqLworCWlmIChzdHJjbXAoY29ubi0+YXV0aF9yZXFfaW5idWYs ICJTQ1JBTS1TSEEtMSIpID09IDApCisJeworCQljb25uLT5wYXNzd29yZF9u ZWVkZWQgPSB0cnVlOworCQlpZiAoY29ubi0+cGdwYXNzID09IE5VTEwgfHwg Y29ubi0+cGdwYXNzWzBdID09ICdcMCcpCisJCXsKKwkJCXByaW50ZlBRRXhw QnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJICBQUW5vUGFz c3dvcmRTdXBwbGllZCk7CisJCQlyZXR1cm4gU1RBVFVTX0VSUk9SOworCQl9 CisJCWNvbm4tPnNhc2xfc3RhdGUgPSBwZ19mZV9zY3JhbV9pbml0KGNvbm4t PnBndXNlciwgY29ubi0+cGdwYXNzKTsKKwkJaWYgKCFjb25uLT5zYXNsX3N0 YXRlKQorCQl7CisJCQlwcmludGZQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JN ZXNzYWdlLAorCQkJCQkJCSAgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9y eVxuIikpOworCQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKKwkJfQorCQllbHNl CisJCQlyZXR1cm4gU1RBVFVTX09LOworCX0KKwllbHNlCisJeworCQlwcmlu dGZQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJICBs aWJwcV9nZXR0ZXh0KCJTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSAl cyBub3Qgc3VwcG9ydGVkXG4iKSwKKwkJCQkJCSAgKGNoYXIgKikgY29ubi0+ YXV0aF9yZXFfaW5idWYpOworCQlyZXR1cm4gU1RBVFVTX0VSUk9SOworCX0K K30KKworc3RhdGljIGludAorcGdfU0FTTF9leGNoYW5nZShQR2Nvbm4gKmNv bm4pCit7CisJY2hhcgkgICAqb3V0cHV0OworCWludAkJCW91dHB1dGxlbjsK Kwlib29sCQlkb25lOworCWJvb2wJCXN1Y2Nlc3M7CisJaW50CQkJcmVzOwor CisJcGdfZmVfc2NyYW1fZXhjaGFuZ2UoY29ubi0+c2FzbF9zdGF0ZSwKKwkJ CQkJCSBjb25uLT5hdXRoX3JlcV9pbmJ1ZiwgY29ubi0+YXV0aF9yZXFfaW5s ZW4sCisJCQkJCQkgJm91dHB1dCwgJm91dHB1dGxlbiwKKwkJCQkJCSAmZG9u ZSwgJnN1Y2Nlc3MsICZjb25uLT5lcnJvck1lc3NhZ2UpOworCWlmIChvdXRw dXRsZW4gIT0gMCkKKwl7CisJCS8qCisJCSAqIFNlbmQgdGhlIFNBU0wgcmVz cG9uc2UgdG8gdGhlIHNlcnZlci4gV2UgZG9uJ3QgY2FyZSBpZiBpdCdzIHRo ZQorCQkgKiBmaXJzdCBvciBzdWJzZXF1ZW50IHBhY2tldCwganVzdCBzZW5k IHRoZSBzYW1lIGtpbmQgb2YgcGFzc3dvcmQKKwkJICogcGFja2V0LgorCQkg Ki8KKwkJcmVzID0gcHFQYWNrZXRTZW5kKGNvbm4sICdwJywgb3V0cHV0LCBv dXRwdXRsZW4pOworCQlmcmVlKG91dHB1dCk7CisKKwkJaWYgKHJlcyAhPSBT VEFUVVNfT0spCisJCQlyZXR1cm4gU1RBVFVTX0VSUk9SOworCX0KKworCWlm IChkb25lICYmICFzdWNjZXNzKQorCQlyZXR1cm4gU1RBVFVTX0VSUk9SOwor CisJcmV0dXJuIFNUQVRVU19PSzsKK30KKwogLyoKICAqIFJlc3BvbmQgdG8g QVVUSF9SRVFfU0NNX0NSRURTIGNoYWxsZW5nZS4KICAqCkBAIC02OTYsNiAr NzY0LDMzIEBAIHBnX2ZlX3NlbmRhdXRoKEF1dGhSZXF1ZXN0IGFyZXEsIFBH Y29ubiAqY29ubikKIAkJCX0KIAkJCWJyZWFrOwogCisJCWNhc2UgQVVUSF9S RVFfU0FTTDoKKwkJCS8qCisJCQkgKiBUaGUgcmVxdWVzdCBjb250YWlucyB0 aGUgbmFtZSAoYXMgYXNzaWduZWQgYnkgSUFOQSkgb2YgdGhlCisJCQkgKiBh dXRoZW50aWNhdGlvbiBtZWNoYW5pc20uCisJCQkgKi8KKwkJCWlmIChwZ19T QVNMX2luaXQoY29ubiwgY29ubi0+YXV0aF9yZXFfaW5idWYpICE9IFNUQVRV U19PSykKKwkJCXsKKwkJCQkvKiBwZ19TQVNMX2luaXQgYWxyZWFkeSBzZXQg dGhlIGVycm9yIG1lc3NhZ2UgKi8KKwkJCQlyZXR1cm4gU1RBVFVTX0VSUk9S OworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJY2FzZSBBVVRI X1JFUV9TQVNMX0NPTlQ6CisJCQlpZiAoY29ubi0+c2FzbF9zdGF0ZSA9PSBO VUxMKQorCQkJeworCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZjb25uLT5lcnJv ck1lc3NhZ2UsCisJCQkJCSAiZmVfc2VuZGF1dGg6IGludmFsaWQgYXV0aGVu dGljYXRpb24gcmVxdWVzdCBmcm9tIHNlcnZlcjogQVVUSF9SRVFfU0FTTF9D T05UIHdpdGhvdXQgQVVUSF9SRVFfU0FTTFxuIik7CisJCQkJcmV0dXJuIFNU QVRVU19FUlJPUjsKKwkJCX0KKwkJCWlmIChwZ19TQVNMX2V4Y2hhbmdlKGNv bm4pICE9IFNUQVRVU19PSykKKwkJCXsKKwkJCQlwcmludGZQUUV4cEJ1ZmZl cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkgImZlX3NlbmRhdXRoOiBl cnJvciBzZW5kaW5nIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uXG4iKTsKKwkJ CQlyZXR1cm4gU1RBVFVTX0VSUk9SOworCQkJfQorCQkJYnJlYWs7CisKIAkJ Y2FzZSBBVVRIX1JFUV9TQ01fQ1JFRFM6CiAJCQlpZiAocGdfbG9jYWxfc2Vu ZGF1dGgoY29ubikgIT0gU1RBVFVTX09LKQogCQkJCXJldHVybiBTVEFUVVNf RVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1h dXRoLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLmgKaW5kZXgg OGQzNTc2Ny4uYjFiMDI5NCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtYXV0aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGguaApAQCAtMTgsNyArMTgsMTUgQEAKICNpbmNsdWRlICJsaWJwcS1p bnQuaCIKIAogCisvKiBQcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gZmUt YXV0aC5jICovCiBleHRlcm4gaW50CXBnX2ZlX3NlbmRhdXRoKEF1dGhSZXF1 ZXN0IGFyZXEsIFBHY29ubiAqY29ubik7CiBleHRlcm4gY2hhciAqcGdfZmVf Z2V0YXV0aG5hbWUoUFFFeHBCdWZmZXIgZXJyb3JNZXNzYWdlKTsKIAorLyog UHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIGZlLWF1dGgtc2NyYW0uYyAq LworZXh0ZXJuIHZvaWQgKnBnX2ZlX3NjcmFtX2luaXQoY29uc3QgY2hhciAq dXNlcm5hbWUsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTsKK2V4dGVybiB2b2lk IHBnX2ZlX3NjcmFtX2ZyZWUodm9pZCAqb3BhcSk7CitleHRlcm4gdm9pZCBw Z19mZV9zY3JhbV9leGNoYW5nZSh2b2lkICpvcGFxLCBjaGFyICppbnB1dCwg aW50IGlucHV0bGVuLAorCQkJCQkgY2hhciAqKm91dHB1dCwgaW50ICpvdXRw dXRsZW4sCisJCQkJCSBib29sICpkb25lLCBib29sICpzdWNjZXNzLCBQUUV4 cEJ1ZmZlciBlcnJvck1lc3NhZ2UpOworCiAjZW5kaWYgICAvKiBGRV9BVVRI X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNv bm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwpp bmRleCBlMmEwNmIzLi5jMTRmZTczIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY29ubmVjdC5jCkBAIC0yNDc5LDYgKzI0NzksNDYgQEAga2Vl cF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVu dGlsIHRoZXJlIGlzCiAJCQkJCX0KIAkJCQl9CiAjZW5kaWYKKwkJCQkvKiBH ZXQgYWRkaXRpb25hbCBwYXlsb2FkLCBpZiBhbnkgKi8KKwkJCQlpZiAobXNn TGVuZ3RoID4gNCkKKwkJCQl7CisJCQkJCWludAkJCWxsZW4gPSBtc2dMZW5n dGggLSA0OworCisJCQkJCS8qCisJCQkJCSAqIFdlIGNhbiBiZSBjYWxsZWQg cmVwZWF0ZWRseSBmb3IgdGhlIHNhbWUgYnVmZmVyLiBBdm9pZAorCQkJCQkg KiByZS1hbGxvY2F0aW5nIHRoZSBidWZmZXIgaW4gdGhpcyBjYXNlIC0ganVz dCByZS11c2UgdGhlCisJCQkJCSAqIG9sZCBidWZmZXIuCisJCQkJCSAqLwor CQkJCQlpZiAobGxlbiAhPSBjb25uLT5hdXRoX3JlcV9pbmxlbikKKwkJCQkJ eworCQkJCQkJaWYgKGNvbm4tPmF1dGhfcmVxX2luYnVmKQorCQkJCQkJewor CQkJCQkJCWZyZWUoY29ubi0+YXV0aF9yZXFfaW5idWYpOworCQkJCQkJCWNv bm4tPmF1dGhfcmVxX2luYnVmID0gTlVMTDsKKwkJCQkJCX0KKworCQkJCQkJ Y29ubi0+YXV0aF9yZXFfaW5sZW4gPSBsbGVuOworCQkJCQkJY29ubi0+YXV0 aF9yZXFfaW5idWYgPSBtYWxsb2MobGxlbiArIDEpOworCQkJCQkJaWYgKCFj b25uLT5hdXRoX3JlcV9pbmJ1ZikKKwkJCQkJCXsKKwkJCQkJCQlwcmludGZQ UUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJCQkJCQkg IGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBHU1NB UEkgYnVmZmVyICglZCkiKSwKKwkJCQkJCQkJCQkJICBsbGVuKTsKKwkJCQkJ CQlnb3RvIGVycm9yX3JldHVybjsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJ CWlmIChwcUdldG5jaGFyKGNvbm4tPmF1dGhfcmVxX2luYnVmLCBsbGVuLCBj b25uKSkKKwkJCQkJeworCQkJCQkJLyogV2UnbGwgY29tZSBiYWNrIHdoZW4g dGhlcmUgaXMgbW9yZSBkYXRhLiAqLworCQkJCQkJcmV0dXJuIFBHUkVTX1BP TExJTkdfUkVBRElORzsKKwkJCQkJfQorCQkJCQkvKgorCQkJCQkgKiBGb3Ig c2FmZXR5IGFuZCBjb252ZW5pZW5jZSwgYWx3YXlzIGVuc3VyZSB0aGUgaW4t YnVmZmVyCisJCQkJCSAqIGlzIE5VTEwtdGVybWluYXRlZC4KKwkJCQkJICov CisJCQkJCWNvbm4tPmF1dGhfcmVxX2luYnVmW2xsZW5dID0gJ1wwJzsKKwkJ CQl9CiAKIAkJCQkvKgogCQkJCSAqIE9LLCB3ZSBzdWNjZXNzZnVsbHkgcmVh ZCB0aGUgbWVzc2FnZTsgbWFyayBkYXRhIGNvbnN1bWVkCkBAIC0zMDM1LDYg KzMwNzUsMTUgQEAgY2xvc2VQR2Nvbm4oUEdjb25uICpjb25uKQogCQljb25u LT5zc3BpY3R4ID0gTlVMTDsKIAl9CiAjZW5kaWYKKwlpZiAoY29ubi0+c2Fz bF9zdGF0ZSkKKwl7CisJCS8qCisJCSAqIFhYWDogaWYgd2UgYWRkIHN1cHBv cnQgZm9yIG1vcmUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcywgdGhpcwor CQkgKiBuZWVkcyB0byBjYWxsIHRoZSByaWdodCAnZnJlZScgZnVuY3Rpb24u CisJCSAqLworCQlwZ19mZV9zY3JhbV9mcmVlKGNvbm4tPnNhc2xfc3RhdGUp OworCQljb25uLT5zYXNsX3N0YXRlID0gTlVMTDsKKwl9CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCmluZGV4IDIxNzU5 NTcuLjM5MTE5MmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBx LWludC5oCkBAIC00MjEsNyArNDIxLDEyIEBAIHN0cnVjdCBwZ19jb25uCiAJ UEdyZXN1bHQgICAqcmVzdWx0OwkJCS8qIHJlc3VsdCBiZWluZyBjb25zdHJ1 Y3RlZCAqLwogCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0OwkvKiBuZXh0IHJl c3VsdCAodXNlZCBpbiBzaW5nbGUtcm93IG1vZGUpICovCiAKKwkvKiBCdWZm ZXIgdG8gaG9sZCBpbmNvbWluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGRh dGEgKi8KKwljaGFyCSAgICphdXRoX3JlcV9pbmJ1ZjsKKwlpbnQJCQlhdXRo X3JlcV9pbmxlbjsKKwogCS8qIEFzc29ydGVkIHN0YXRlIGZvciBTU0wsIEdT UywgZXRjICovCisJdm9pZAkgICAqc2FzbF9zdGF0ZTsKIAogI2lmZGVmIFVT RV9TU0wKIAlib29sCQlhbGxvd19zc2xfdHJ5OwkvKiBBbGxvd2VkIHRvIHRy eSBTU0wgbmVnb3RpYXRpb24gKi8KLS0gCjIuMS40Cgo= --------------040108050703030703070702 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------040108050703030703070702--