From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 24063 invoked from network); 12 Jun 2021 19:59:31 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 12 Jun 2021 19:59:31 -0000 Received: from mail-oi1-f173.google.com ([209.85.167.173]) by 1ess; Sat Jun 12 15:54:40 -0400 2021 Received: by mail-oi1-f173.google.com with SMTP id h9so9792399oih.4 for <9front@9front.org>; Sat, 12 Jun 2021 12:54:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=OiKQk56NINxRX9PuhMLN3f48HhWvObSdaePImZG17Bs=; b=R2wrNJm8hwm9vn2dYTFb3teLH+lbMrbqzlr58rjksn4oXlgCgCYUsAdELFP4k7hCdB GUBImG7/TLnaTatlZqNIg56Pqd7OTNDTBTy4vV+Yaz+70BdIgRoNSF0yqL6CUYvNOZFE v0MSG86l1R6/xvGAXeviOnTjs17FVw8739ccDVRDpyIS4X2cldRx1do7v34YIgJC4Lak h7B+hBK8qCVJVRPN68GpCXApQCwWdPhzIU9NYZ8EX2U99mthcy4Yb65orVNDjidtCIaa JLBxzpcD6PgwJjBZeqrE6uq7Ov/tVhmDKC+IvoXXFUEafjBd3Fj0AUFCR3hvfRPkEt8x /t0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=OiKQk56NINxRX9PuhMLN3f48HhWvObSdaePImZG17Bs=; b=CVVCbanq5Zi+xXOwfffU46A+D+ucI46dRWVrVO+k6WK7VlzMdHvbztZFGsoK31h1Yv DqhRi8GYrM4J+sadKolp2ObG4RN3rd4ErqqIM42KNfnOu+uZ2ltCpuK6TLZiL862CLcv E/5InLH+Zm+LliOdq0IsDaxrDYrDF9DR2A5Af1zd+zFvZR1+bF1QpP+JRjew0ej49xxr zeGQ5PYuJBxYtMS6hHcI2PZISzVCwmZE5q8fCADCdXS/9PwUESesv3D6bsHM7tfugitZ Ey+yvBkAGrfEMeV7slsYKF6VFmwpL8RnwbM1v0lXddH3BsfVmwMeUM36rZOyvflyvg7Z v7Uw== X-Gm-Message-State: AOAM5337FfZdWD92Q+UVi79UKTvRbQBbXLfV0vWo8UT4e7gfbiRzwnDO MHL8qI47YbIqonM7xnOlcS0KshLcQzdC500NExrt9KI0 X-Google-Smtp-Source: ABdhPJxJy4g1VZaSJj+rfW9eiugwTTZCsW1AmTzm/fjosOl3OpecGY/XRSD6gj2Xmcp+9v4ORzSwC+XeJ3TjeMdXzwM= X-Received: by 2002:aca:b406:: with SMTP id d6mr6257793oif.71.1623527672750; Sat, 12 Jun 2021 12:54:32 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ac9:410a:0:0:0:0:0 with HTTP; Sat, 12 Jun 2021 12:54:31 -0700 (PDT) In-Reply-To: <867EF01C41DA1F5C5F16C87137F0B4D8@felloff.net> References: <867EF01C41DA1F5C5F16C87137F0B4D8@felloff.net> From: kemal Date: Sat, 12 Jun 2021 19:54:31 +0000 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="00000000000037e6ab05c496fe69" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: virtual compliant NoSQL configuration YAML full-stack map/reduce locator Subject: Re: [9front] libsec: various tls changes Reply-To: 9front@9front.org Precedence: bulk --00000000000037e6ab05c496fe69 Content-Type: text/plain; charset="UTF-8" > i think theres a problem with the curve negotiation. > > the new tlsServerExtensions() function can leave c->sec->nc unset. > > and later, tlsServer2() has this change: > > - Namedcurve *nc = &namedcurves[0]; /* secp256r1 */ > - > m.tag = HServerKeyExchange; > - m.u.serverKeyExchange.curve = nc->tlsid; > - m.u.serverKeyExchange.dh_parameters = tlsSecECDHEs1(c->sec, nc); > + m.u.serverKeyExchange.curve = c->sec->nc->tlsid; > + m.u.serverKeyExchange.dh_parameters = tlsSecECDHEs1(c->sec); > > maybe we can make the code more explicit about this? it is hard to > see that it is supposed to modify. ok, tlsServer2 now will fallback to secp256r1 if for some reason tlsServerExtensions left it unset. in addition now comments mention that curve is chosen by tlsServerExtensions. --00000000000037e6ab05c496fe69 Content-Type: text/plain; charset="US-ASCII"; name="patchset.txt" Content-Disposition: attachment; filename="patchset.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSA0YTBmNDQ2NjA4NDNhOWMzZjg5MTFiMTU5NTgxYjJhZDQzZjIxYjY3CkZyb206IGtlbWFs IDxrZW1hbGluYW5jOEBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTIgSnVuIDIwMjEgMTk6NDI6MTYg KzAwMDAKU3ViamVjdDogW1BBVENIXSBsaWJzZWM6IHZhcmlvdXMgY2hhbmdlcyB0byB0bHMKCgox LiBhZGQgdGhlIGN1cnZlIHgyNTUxOSB0byB0bHMsIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuCml0 J3MgbW9yZSBmYXN0ZXIsIGltbXVuZSB0byB0aW1pbmcgYXR0YWNrcyBieSBkZXNpZ24sCmRvZXMg bm90IHJlcXVpcmUgdmVyaWZ5aW5nIGlmIHRoZSBwdWJsaWMga2V5IGlzIHZhbGlkLApldGMgZXRj LiBzZXJ2ZXItc2lkZSBoYXMgdG8gY2hlY2sgaWYgdGhlIGNsaWVudCBzdXBwb3J0cwp0aGUgY3Vy dmUsIHNvIGEgbmV3IGZ1bmN0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gcGFyc2UKdGhlIGNs aWVudCdzIGV4dGVuc2lvbnMuCgoyLiByZWplY3Qgd2VhayBkaGUgcHJpbWVzIHRoYXQgY2FuIGJl IGVhc2lseSBjcmFja2VkIHdpdGgKdGhlIG51bWJlciBmaWVsZCBzaWV2ZSBhbGdvcml0aG0uIHRo aXMgYXZvaWRzIGF0dGFja3MgbGlrZQpsb2dqYW0uCgozLiBzdG9wIHB1dHRpbmcgdW5peCB0aW1l IHRvIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIGNsaWVudC8Kc2VydmVyIHJhbmRvbS4gaXQgY2FuIGFs bG93IGZpbmdlcnByaW50aW5nLCB0bHMgMS4zIGRvZXNuJ3QKcmVjb21tZW5kIGl0IGFueSBtb3Jl IGFuZCB0aGVyZSB3YXMgYSBkcmFmdCB0byBkZXByZWNhdGUKdGhpcyBiZWhhdmlvdXIgZWFybGll ci5bMV0KCjQuIHNpbXBseSBwcmYgY29kZSwgcmVtb3ZlIHVzZWxlc3MgY2lwaGVyIGVudW1zLgoK WzFdIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtbWF0aGV3c29u LW5vLWdtdHVuaXh0aW1lLTAwCi0tLQpkaWZmIDQ2NTE5OWZjNjUxNTFmNTEzZmM4MmQyMjkxOWNm YzY3ZGI5ZTBkOTggNGEwZjQ0NjYwODQzYTljM2Y4OTExYjE1OTU4MWIyYWQ0M2YyMWI2NwotLS0g YS9zeXMvc3JjL2xpYnNlYy9wb3J0L3Rsc2hhbmQuYwlUdWUgSnVuICA4IDIzOjEzOjU3IDIwMjEK KysrIGIvc3lzL3NyYy9saWJzZWMvcG9ydC90bHNoYW5kLmMJU2F0IEp1biAxMiAyMjo0MjoxNiAy MDIxCkBAIC02NiwxOCArNjYsMjAgQEAKIAlpbnQgcHNrbGVuOwogCWludCBjbGllbnRWZXJzOwkJ CS8vIHZlcnNpb24gaW4gQ2xpZW50SGVsbG8KIAl1Y2hhciBzZWNbTWFzdGVyU2VjcmV0U2l6ZV07 CS8vIG1hc3RlciBzZWNyZXQKLQl1Y2hhciBjcmFuZG9tW1JhbmRvbVNpemVdOwkvLyBjbGllbnQg cmFuZG9tCiAJdWNoYXIgc3JhbmRvbVtSYW5kb21TaXplXTsJLy8gc2VydmVyIHJhbmRvbQorCXVj aGFyIGNyYW5kb21bUmFuZG9tU2l6ZV07CS8vIGNsaWVudCByYW5kb20KIAorCU5hbWVkY3VydmUg Km5jOyAvLyBzZWxlY3RlZCBjdXJ2ZSBmb3IgRUNESEUKIAkvLyBkaWZmaWUgaGVsbG1hbiBzdGF0 ZQogCURIc3RhdGUgZGg7CiAJc3RydWN0IHsKIAkJRUNkb21haW4gZG9tOwogCQlFQ3ByaXYgUTsK IAl9IGVjOworCXVjaGFyIFhbMzJdOwogCiAJLy8gYnl0ZSBnZW5lcmF0aW9uIGFuZCBoYW5kc2hh a2UgY2hlY2tzdW0KLQl2b2lkICgqcHJmKSh1Y2hhciosIGludCwgdWNoYXIqLCBpbnQsIGNoYXIq LCB1Y2hhciosIGludCwgdWNoYXIqLCBpbnQpOworCXZvaWQgKCpwcmYpKHVjaGFyKiwgaW50LCB1 Y2hhciosIGludCwgY2hhciosIHVjaGFyKiwgaW50KTsKIAl2b2lkICgqc2V0RmluaXNoZWQpKFRs c1NlYyosIEhhbmRzaGFrZUhhc2gsIHVjaGFyKiwgaW50KTsKIAlpbnQgbmZpbjsKIH07CkBAIC0x MDcsNyArMTA5LDcgQEAKIAlpbnQgdGFnOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCWludCB2 ZXJzaW9uOworCQkJaW50CXZlcnNpb247CiAJCQl1Y2hhciAJcmFuZG9tW1JhbmRvbVNpemVdOwog CQkJQnl0ZXMqCXNpZDsKIAkJCUludHMqCWNpcGhlcnM7CkBAIC0xMTUsNyArMTE3LDcgQEAKIAkJ CUJ5dGVzKglleHRlbnNpb25zOwogCQl9IGNsaWVudEhlbGxvOwogCQlzdHJ1Y3QgewotCQkJaW50 IHZlcnNpb247CisJCQlpbnQJdmVyc2lvbjsKIAkJCXVjaGFyCXJhbmRvbVtSYW5kb21TaXplXTsK IAkJCUJ5dGVzKglzaWQ7CiAJCQlpbnQJY2lwaGVyOwpAQCAtMjE0LDc5ICsyMTYsMzYgQEAKIAog Ly8gY2lwaGVyIHN1aXRlcwogZW51bSB7Ci0JVExTX05VTExfV0lUSF9OVUxMX05VTEwJCQk9IDB4 MDAwMCwKLQlUTFNfUlNBX1dJVEhfTlVMTF9NRDUJCQk9IDB4MDAwMSwKLQlUTFNfUlNBX1dJVEhf TlVMTF9TSEEJCQk9IDB4MDAwMiwKLQlUTFNfUlNBX0VYUE9SVF9XSVRIX1JDNF80MF9NRDUJCT0g MHgwMDAzLAotCVRMU19SU0FfV0lUSF9SQzRfMTI4X01ENQkJPSAweDAwMDQsCi0JVExTX1JTQV9X SVRIX1JDNF8xMjhfU0hBCQk9IDB4MDAwNSwKLQlUTFNfUlNBX0VYUE9SVF9XSVRIX1JDMl9DQkNf NDBfTUQ1CT0gMFgwMDA2LAotCVRMU19SU0FfV0lUSF9JREVBX0NCQ19TSEEJCT0gMFgwMDA3LAot CVRMU19SU0FfRVhQT1JUX1dJVEhfREVTNDBfQ0JDX1NIQQk9IDBYMDAwOCwKLQlUTFNfUlNBX1dJ VEhfREVTX0NCQ19TSEEJCT0gMFgwMDA5LAogCVRMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hB CQk9IDBYMDAwQSwKLQlUTFNfREhfRFNTX0VYUE9SVF9XSVRIX0RFUzQwX0NCQ19TSEEJPSAwWDAw MEIsCi0JVExTX0RIX0RTU19XSVRIX0RFU19DQkNfU0hBCQk9IDBYMDAwQywKLQlUTFNfREhfRFNT X1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAwRCwKLQlUTFNfREhfUlNBX0VYUE9SVF9XSVRI X0RFUzQwX0NCQ19TSEEJPSAwWDAwMEUsCi0JVExTX0RIX1JTQV9XSVRIX0RFU19DQkNfU0hBCQk9 IDBYMDAwRiwKLQlUTFNfREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAxMCwKLQlU TFNfREhFX0RTU19FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgwMDExLAotCVRMU19ESEVf RFNTX1dJVEhfREVTX0NCQ19TSEEJCT0gMFgwMDEyLAotCVRMU19ESEVfRFNTX1dJVEhfM0RFU19F REVfQ0JDX1NIQQk9IDBYMDAxMywJLy8gWlpaIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIHRsczEu MCBjb21wbGlhbmNlCi0JVExTX0RIRV9SU0FfRVhQT1JUX1dJVEhfREVTNDBfQ0JDX1NIQQk9IDBY MDAxNCwKLQlUTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCQk9IDBYMDAxNSwKIAlUTFNfREhF X1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEJPSAwWDAwMTYsCi0JVExTX0RIX2Fub25fRVhQT1JU X1dJVEhfUkM0XzQwX01ENQk9IDB4MDAxNywKLQlUTFNfREhfYW5vbl9XSVRIX1JDNF8xMjhfTUQ1 CQk9IDB4MDAxOCwKLQlUTFNfREhfYW5vbl9FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgw MDE5LAotCVRMU19ESF9hbm9uX1dJVEhfREVTX0NCQ19TSEEJCT0gMFgwMDFBLAotCVRMU19ESF9h bm9uX1dJVEhfM0RFU19FREVfQ0JDX1NIQQk9IDBYMDAxQiwKLQlUTFNfUlNBX1dJVEhfQUVTXzEy OF9DQkNfU0hBCQk9IDBYMDAyRiwJLy8gYWVzLCBha2EgcmlqbmRhZWwgd2l0aCAxMjggYml0IGJs b2NrcwotCVRMU19ESF9EU1NfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCT0gMFgwMDMwLAotCVRMU19E SF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCT0gMFgwMDMxLAotCVRMU19ESEVfRFNTX1dJVEhf QUVTXzEyOF9DQkNfU0hBCT0gMFgwMDMyLAorCisJVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QQkJPSAwWDAwMkYsCiAJVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJPSAwWDAwMzMs Ci0JVExTX0RIX2Fub25fV0lUSF9BRVNfMTI4X0NCQ19TSEEJPSAwWDAwMzQsCiAJVExTX1JTQV9X SVRIX0FFU18yNTZfQ0JDX1NIQQkJPSAwWDAwMzUsCi0JVExTX0RIX0RTU19XSVRIX0FFU18yNTZf Q0JDX1NIQQkJPSAwWDAwMzYsCi0JVExTX0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQkJPSAw WDAwMzcsCi0JVExTX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwMzgsCiAJVExT X0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwMzksCi0JVExTX0RIX2Fub25fV0lU SF9BRVNfMjU2X0NCQ19TSEEJPSAwWDAwM0EsCiAJVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QTI1NgkJPSAwWDAwM0MsCiAJVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgkJPSAwWDAw M0QsCiAJVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJPSAwWDAwNjcsCiAKIAlU TFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQk9IDB4MDA5QywKLQlUTFNfUlNBX1dJVEhf QUVTXzI1Nl9HQ01fU0hBMzg0CQk9IDB4MDA5RCwKIAlUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhf R0NNX1NIQTI1Ngk9IDB4MDA5RSwKLQlUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4 NAk9IDB4MDA5RiwKLQlUTFNfREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CT0gMHgwMEEw LAotCVRMU19ESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJPSAweDAwQTEsCi0JVExTX0RI RV9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweDAwQTIsCi0JVExTX0RIRV9EU1NfV0lU SF9BRVNfMjU2X0dDTV9TSEEzODQJPSAweDAwQTMsCi0JVExTX0RIX0RTU19XSVRIX0FFU18xMjhf R0NNX1NIQTI1Ngk9IDB4MDBBNCwKLQlUTFNfREhfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0 CT0gMHgwMEE1LAotCVRMU19ESF9hbm9uX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CT0gMHgwMEE2 LAotCVRMU19ESF9hbm9uX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CT0gMHgwMEE3LAotCi0JVExT X0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ID0gMHhDMDJCLAotCVRMU19FQ0RI RV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweEMwMkYsCiAKIAlUTFNfRUNESEVfUlNB X1dJVEhfQUVTXzEyOF9DQkNfU0hBCT0gMHhDMDEzLAogCVRMU19FQ0RIRV9SU0FfV0lUSF9BRVNf MjU2X0NCQ19TSEEJPSAweEMwMTQsCi0JVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QTI1Ngk9IDB4QzAyNywKIAlUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJ PSAweEMwMjMsCisJVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1Ngk9IDB4QzAy NywKIAotCVRMU19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NBOCwKLQlU TFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NBOSwKLQlUTFNfREhF X1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CT0gMHhDQ0FBLAorCVRMU19FQ0RIRV9FQ0RTQV9X SVRIX0FFU18xMjhfR0NNX1NIQTI1NiA9IDB4QzAyQiwKKwlUTFNfRUNESEVfUlNBX1dJVEhfQUVT XzEyOF9HQ01fU0hBMjU2CT0gMHhDMDJGLAogCiAJR09PR0xFX0VDREhFX1JTQV9XSVRIX0NIQUNI QTIwX1BPTFkxMzA1CQk9IDB4Q0MxMywKIAlHT09HTEVfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEy MF9QT0xZMTMwNQk9IDB4Q0MxNCwKIAlHT09HTEVfREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkx MzA1CQk9IDB4Q0MxNSwKIAorCVRMU19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9 IDB4Q0NBOCwKKwlUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NB OSwKKwlUTFNfREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CT0gMHhDQ0FBLAorCiAJVExT X1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CQk9IDB4Q0NBQiwKIAlUTFNfUFNLX1dJVEhfQUVT XzEyOF9DQkNfU0hBMjU2CQk9IDB4MDBBRSwKIAlUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hB CQk9IDB4MDA4QywKQEAgLTMwMCw2ICsyNTksMjAgQEAKIAlDb21wcmVzc2lvbk1heAogfTsKIAor CisvLyBjdXJ2ZXMKK2VudW0geworCVgyNTUxOSA9IDB4MDAxZCwKK307CisKKy8vIGV4dGVuc2lv bnMKK2VudW0geworCUV4dHNuaSA9IDB4MDAwMCwKKwlFeHRlYyA9IDB4MDAwYSwKKwlFeHRlY3Ag PSAweDAwMGIsCisJRXh0c2lnYWxncyA9IDB4MDAwZCwKK307CisKIHN0YXRpYyBBbGdzIGNpcGhl ckFsZ3NbXSA9IHsKIAkvLyBFQ0RIRS1FQ0RTQQogCXsiY2Nwb2x5OTZfYWVhZCIsICJjbGVhciIs IDIqKDMyKzEyKSwgVExTX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDV9LApAQCAt MzQzLDYgKzMxNiw3IEBACiB9OwogCiBzdGF0aWMgTmFtZWRjdXJ2ZSBuYW1lZGN1cnZlc1tdID0g eworCVgyNTUxOSwgbmlsLAogCTB4MDAxNywgc2VjcDI1NnIxLAogCTB4MDAxOCwgc2VjcDM4NHIx LAogfTsKQEAgLTQxMyw3ICszODcsNyBAQAogCiBzdGF0aWMgdm9pZAl0bHNTZWNJbml0cyhUbHNT ZWMgKnNlYywgaW50IGN2ZXJzLCB1Y2hhciAqY3JhbmRvbSk7CiBzdGF0aWMgaW50CXRsc1NlY1JT QXMoVGxzU2VjICpzZWMsIEJ5dGVzICplcG0pOwotc3RhdGljIEJ5dGVzKgl0bHNTZWNFQ0RIRXMx KFRsc1NlYyAqc2VjLCBOYW1lZGN1cnZlICpuYyk7CitzdGF0aWMgQnl0ZXMqCXRsc1NlY0VDREhF czEoVGxzU2VjICpzZWMpOwogc3RhdGljIGludAl0bHNTZWNFQ0RIRXMyKFRsc1NlYyAqc2VjLCBC eXRlcyAqWWMpOwogc3RhdGljIHZvaWQJdGxzU2VjSW5pdGMoVGxzU2VjICpzZWMsIGludCBjdmVy cyk7CiBzdGF0aWMgQnl0ZXMqCXRsc1NlY1JTQWMoVGxzU2VjICpzZWMsIHVjaGFyICpjZXJ0LCBp bnQgbmNlcnQpOwpAQCAtNDU0LDYgKzQyOCw3IEBACiB7CiAJY2hhciBidWZbOF07CiAJY2hhciBk bmFtZVs2NF07CisJdWNoYXIgc2VlZFsyKlJhbmRvbVNpemVdOwogCWludCBuLCBkYXRhLCBjdGws IGhhbmQ7CiAJVGxzQ29ubmVjdGlvbiAqdGxzOwogCkBAIC00OTgsMTMgKzQ3MywxNSBAQAogCWNv bm4tPnNlc3Npb25JRCA9IG5pbDsKIAlpZihjb25uLT5zZXNzaW9uS2V5ICE9IG5pbAogCSYmIGNv bm4tPnNlc3Npb25UeXBlICE9IG5pbAotCSYmIHN0cmNtcChjb25uLT5zZXNzaW9uVHlwZSwgInR0 bHMiKSA9PSAwKQorCSYmIHN0cmNtcChjb25uLT5zZXNzaW9uVHlwZSwgInR0bHMiKSA9PSAwKXsK KwkJbWVtbW92ZShzZWVkLCB0bHMtPnNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCW1lbW1v dmUoc2VlZCtSYW5kb21TaXplLCB0bHMtPnNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAJCXRs cy0+c2VjLT5wcmYoCiAJCQljb25uLT5zZXNzaW9uS2V5LCBjb25uLT5zZXNzaW9uS2V5bGVuLAog CQkJdGxzLT5zZWMtPnNlYywgTWFzdGVyU2VjcmV0U2l6ZSwKIAkJCWNvbm4tPnNlc3Npb25Db25z dCwgCi0JCQl0bHMtPnNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSwKLQkJCXRscy0+c2VjLT5zcmFu ZG9tLCBSYW5kb21TaXplKTsKKwkJCXNlZWQsIHNpemVvZihzZWVkKSk7CisJfQogCXRsc0Nvbm5l Y3Rpb25GcmVlKHRscyk7CiAJY2xvc2UoZmQpOwogCXJldHVybiBkYXRhOwpAQCAtNTI2LDcgKzUw Myw3IEBACiAJCWIgPSBlcmVhbGxvYyhiLCBtICsgMisyKzIrMSsyK24pOwogCQlwID0gYiArIG07 CiAKLQkJcHV0MTYocCwgMCksIHAgKz0gMjsJCS8qIFR5cGU6IHNlcnZlcl9uYW1lICovCisJCXB1 dDE2KHAsIEV4dHNuaSksIHAgKz0gMjsJLyogVHlwZTogc2VydmVyX25hbWUgKi8KIAkJcHV0MTYo cCwgMisxKzIrbiksIHAgKz0gMjsJLyogTGVuZ3RoICovCiAJCXB1dDE2KHAsIDErMituKSwgcCAr PSAyOwkvKiBTZXJ2ZXIgTmFtZSBsaXN0IGxlbmd0aCAqLwogCQkqcCsrID0gMDsJCQkvKiBTZXJ2 ZXIgTmFtZSBUeXBlOiBob3N0X25hbWUgKi8KQEAgLTUzNSwyNiArNTEyLDI2IEBACiAJCXAgKz0g bjsKIAl9CiAKLQkvLyBFQ0RIRQorCS8vIEVsbGlwdGljIEN1cnZlcyAoYWxzbyBjYWxsZWQgU3Vw cG9ydGVkIEdyb3VwcykKIAlpZihQcm90b2NvbFZlcnNpb24gPj0gVExTMTBWZXJzaW9uKXsKIAkJ bSA9IHAgLSBiOwogCQliID0gZXJlYWxsb2MoYiwgbSArIDIrMisyK25lbGVtKG5hbWVkY3VydmVz KSoyICsgMisyKzErbmVsZW0ocG9pbnRmb3JtYXRzKSk7CiAJCXAgPSBiICsgbTsKIAogCQluID0g bmVsZW0obmFtZWRjdXJ2ZXMpOwotCQlwdXQxNihwLCAweDAwMGEpLCBwICs9IDI7CS8qIFR5cGU6 IGVsbGlwdGljX2N1cnZlcyAqLworCQlwdXQxNihwLCBFeHRlYyksIHAgKz0gMjsJLyogVHlwZTog ZWxsaXB0aWNfY3VydmVzIC8gc3VwcG9ydGVkX2dyb3VwcyAqLwogCQlwdXQxNihwLCAobisxKSoy KSwgcCArPSAyOwkvKiBMZW5ndGggKi8KIAkJcHV0MTYocCwgbioyKSwgcCArPSAyOwkJLyogRWxs aXB0aWMgQ3VydmVzIExlbmd0aCAqLwotCQlmb3IoaT0wOyBpIDwgbjsgaSsrKXsJCS8qIEVsbGlw dGljIGN1cnZlcyAqLworCQlmb3IoaT0wOyBpIDwgbjsgaSsrKXsJCS8qIEVsbGlwdGljIEN1cnZl cyAqLwogCQkJcHV0MTYocCwgbmFtZWRjdXJ2ZXNbaV0udGxzaWQpOwogCQkJcCArPSAyOwogCQl9 CiAKIAkJbiA9IG5lbGVtKHBvaW50Zm9ybWF0cyk7Ci0JCXB1dDE2KHAsIDB4MDAwYiksIHAgKz0g MjsJLyogVHlwZTogZWNfcG9pbnRfZm9ybWF0cyAqLworCQlwdXQxNihwLCBFeHRlY3ApLCBwICs9 IDI7CS8qIFR5cGU6IGVjX3BvaW50X2Zvcm1hdHMgKi8KIAkJcHV0MTYocCwgbisxKSwgcCArPSAy OwkJLyogTGVuZ3RoICovCiAJCSpwKysgPSBuOwkJCS8qIEVDIHBvaW50IGZvcm1hdHMgTGVuZ3Ro ICovCi0JCWZvcihpPTA7IGkgPCBuOyBpKyspCQkvKiBFbGxpcHRpYyBjdXJ2ZXMgcG9pbnQgZm9y bWF0cyAqLworCQlmb3IoaT0wOyBpIDwgbjsgaSsrKQkJLyogRUMgcG9pbnQgZm9ybWF0cyAqLwog CQkJKnArKyA9IHBvaW50Zm9ybWF0c1tpXTsKIAl9CiAKQEAgLTU2Niw3ICs1NDMsNyBAQAogCQli ID0gZXJlYWxsb2MoYiwgbSArIDIrMisyK24qMik7CiAJCXAgPSBiICsgbTsKIAotCQlwdXQxNihw LCAweDAwMGQpLCBwICs9IDI7CisJCXB1dDE2KHAsIEV4dHNpZ2FsZ3MpLCBwICs9IDI7CiAJCXB1 dDE2KHAsIG4qMiArIDIpLCBwICs9IDI7CiAJCXB1dDE2KHAsIG4qMiksIHAgKz0gMjsKIAkJZm9y KGk9MDsgaSA8IG47IGkrKyl7CkBAIC01ODYsNiArNTYzLDcgQEAKIHsKIAljaGFyIGJ1Zls4XTsK IAljaGFyIGRuYW1lWzY0XTsKKwl1Y2hhciBzZWVkWzIqUmFuZG9tU2l6ZV07CiAJaW50IG4sIGRh dGEsIGN0bCwgaGFuZDsKIAlUbHNDb25uZWN0aW9uICp0bHM7CiAJdWNoYXIgKmV4dDsKQEAgLTY0 MSwxMyArNjE5LDE1IEBACiAJY29ubi0+c2Vzc2lvbklEID0gbmlsOwogCWlmKGNvbm4tPnNlc3Np b25LZXkgIT0gbmlsCiAJJiYgY29ubi0+c2Vzc2lvblR5cGUgIT0gbmlsCi0JJiYgc3RyY21wKGNv bm4tPnNlc3Npb25UeXBlLCAidHRscyIpID09IDApCisJJiYgc3RyY21wKGNvbm4tPnNlc3Npb25U eXBlLCAidHRscyIpID09IDApeworCQltZW1tb3ZlKHNlZWQsIHRscy0+c2VjLT5jcmFuZG9tLCBS YW5kb21TaXplKTsKKwkJbWVtbW92ZShzZWVkK1JhbmRvbVNpemUsIHRscy0+c2VjLT5zcmFuZG9t LCBSYW5kb21TaXplKTsKIAkJdGxzLT5zZWMtPnByZigKIAkJCWNvbm4tPnNlc3Npb25LZXksIGNv bm4tPnNlc3Npb25LZXlsZW4sCiAJCQl0bHMtPnNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLAog CQkJY29ubi0+c2Vzc2lvbkNvbnN0LCAKLQkJCXRscy0+c2VjLT5jcmFuZG9tLCBSYW5kb21TaXpl LAotCQkJdGxzLT5zZWMtPnNyYW5kb20sIFJhbmRvbVNpemUpOworCQkJc2VlZCwgc2l6ZW9mKHNl ZWQpKTsKKwl9CiAJdGxzQ29ubmVjdGlvbkZyZWUodGxzKTsKIAljbG9zZShmZCk7CiAJcmV0dXJu IGRhdGE7CkBAIC02NjUsNiArNjQ1LDUzIEBACiAJcmV0dXJuIGk7CiB9CiAKK3N0YXRpYyBCeXRl cyAqCit0bHNTZXJ2ZXJFeHRlbnNpb25zKFRsc0Nvbm5lY3Rpb24gKmMsIEJ5dGVzICpleHQpCit7 CisJdWNoYXIgKnAsICplOworCWludCBpLCBqLCBuOworCisJcCA9IGV4dC0+ZGF0YTsKKwllID0g cCtleHQtPmxlbjsKKwl3aGlsZShwIDwgZSl7CisJCWlmKGUtcCA8IDIpCisJCQlnb3RvIFNob3J0 OworCQlzd2l0Y2goZ2V0MTYocCkpeworCQljYXNlIEV4dGVjOgkKKwkJCXAgKz0gMjsKKwkJCW4g PSBnZXQxNihwKTsKKwkJCWlmKGUtcCA8IG4gfHwgbiA8IDIpCisJCQkJZ290byBTaG9ydDsKKwkJ CXAgKz0gMjsKKwkJCW4gPSBnZXQxNihwKTsKKwkJCXAgKz0gMjsKKwkJCWlmKGUtcCA8IG4gfHwg biAmIDEgfHwgbiA9PSAwKQorCQkJCWdvdG8gU2hvcnQ7CisJCQlmb3IoaSA9IDA7IGkgPCBuZWxl bShuYW1lZGN1cnZlcykgJiYgYy0+c2VjLT5uYyA9PSBuaWw7IGkrKykKKwkJCQlmb3IoaiA9IDA7 IGogPCBuOyBqICs9IDIpCisJCQkJCWlmKG5hbWVkY3VydmVzW2ldLnRsc2lkID09IGdldDE2KHAr aikpeworCQkJCQkJYy0+c2VjLT5uYyA9ICZuYW1lZGN1cnZlc1tpXTsKKwkJCQkJCWJyZWFrOwor CQkJCQl9CisJCQlwICs9IG47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXAgKz0gMjsKKwkJ CW4gPSBnZXQxNihwKTsKKwkJCXAgKz0gMjsKKwkJCWlmKGUtcCA8IG4pCisJCQkJZ290byBTaG9y dDsKKwkJCXAgKz0gbjsKKwkJCWJyZWFrOworCQl9CisJfQorCS8vIHdlIGRvIG5vdCBzZW5kIGFu eSBleHRlbnNpb25zIHlldAorCXJldHVybiBuaWw7CitTaG9ydDoKKwl0bHNFcnJvcihjLCBFRGVj b2RlRXJyb3IsICJjbGllbnRoZWxsbyBleHRlbnNpb25zIGhhcyBpbnZhbGlkIGxlbmd0aCIpOwor CXJldHVybiBuaWw7IAorfSAKKwogc3RhdGljIFRsc0Nvbm5lY3Rpb24gKgogdGxzU2VydmVyMihp bnQgY3RsLCBpbnQgaGFuZCwKIAl1Y2hhciAqY2VydCwgaW50IGNlcnRsZW4sCkBAIC02NzQsNiAr NzAxLDcgQEAKIAlpbnQgY2lwaGVyLCBjb21wcmVzc29yLCBudW1jZXJ0cywgaTsKIAlUbHNDb25u ZWN0aW9uICpjOwogCU1zZyBtOworCUJ5dGVzICpleHQ7CiAKIAlpZih0cmFjZSkKIAkJdHJhY2Uo InRsc1NlcnZlcjJcbiIpOwpAQCAtNzQwLDYgKzc2OCw5IEBACiAJCQlnb3RvIEVycjsKIAkJfQog CX0KKwlleHQgPSB0bHNTZXJ2ZXJFeHRlbnNpb25zKGMsIG0udS5jbGllbnRIZWxsby5leHRlbnNp b25zKTsKKwlpZihjLT5lcnJlZCkKKwkJZ290byBFcnI7CiAJbXNnQ2xlYXIoJm0pOwogCiAJbS50 YWcgPSBIU2VydmVySGVsbG87CkBAIC03NDgsNiArNzc5LDcgQEAKIAltLnUuc2VydmVySGVsbG8u Y2lwaGVyID0gY2lwaGVyOwogCW0udS5zZXJ2ZXJIZWxsby5jb21wcmVzc29yID0gY29tcHJlc3Nv cjsKIAltLnUuc2VydmVySGVsbG8uc2lkID0gbWFrZWJ5dGVzKG5pbCwgMCk7CisJbS51LnNlcnZl ckhlbGxvLmV4dGVuc2lvbnMgPSBleHQ7CiAJaWYoIW1zZ1NlbmQoYywgJm0sIEFRdWV1ZSkpCiAJ CWdvdG8gRXJyOwogCkBAIC03NjQsMTEgKzc5NiwxNCBAQAogCX0KIAogCWlmKGlzRUNESEUoY2lw aGVyKSl7Ci0JCU5hbWVkY3VydmUgKm5jID0gJm5hbWVkY3VydmVzWzBdOwkvKiBzZWNwMjU2cjEg Ki8KKwkJLy8gY3VydmUgaXMgY2hvc2VuIGJ5IHRsc1NlcnZlckV4dGVuc2lvbnMoKS4KKwkJLy8g aWYgaXQgZmFpbGVkIHRvIGNob29zZSBhIGN1cnZlLCBmYWxsYmFjayB0byBzZWNwMjU2cjEuCisJ CWlmKGMtPnNlYy0+bmMgPT0gbmlsKQorCQkJYy0+c2VjLT5uYyA9ICZuYW1lZGN1cnZlc1sxXTsK IAogCQltLnRhZyA9IEhTZXJ2ZXJLZXlFeGNoYW5nZTsKLQkJbS51LnNlcnZlcktleUV4Y2hhbmdl LmN1cnZlID0gbmMtPnRsc2lkOwotCQltLnUuc2VydmVyS2V5RXhjaGFuZ2UuZGhfcGFyYW1ldGVy cyA9IHRsc1NlY0VDREhFczEoYy0+c2VjLCBuYyk7CisJCW0udS5zZXJ2ZXJLZXlFeGNoYW5nZS5j dXJ2ZSA9IGMtPnNlYy0+bmMtPnRsc2lkOworCQltLnUuc2VydmVyS2V5RXhjaGFuZ2UuZGhfcGFy YW1ldGVycyA9IHRsc1NlY0VDREhFczEoYy0+c2VjKTsKIAkJaWYobS51LnNlcnZlcktleUV4Y2hh bmdlLmRoX3BhcmFtZXRlcnMgPT0gbmlsKXsKIAkJCXRsc0Vycm9yKGMsIEVJbnRlcm5hbEVycm9y LCAiY2FuJ3Qgc2V0IERIIHBhcmFtZXRlcnMiKTsKIAkJCWdvdG8gRXJyOwpAQCAtODg5LDcgKzky NCw5IEBACiAKIAlpZihwID09IG5pbCB8fCBnID09IG5pbCB8fCBZcyA9PSBuaWwpCiAJCXJldHVy biBuaWw7Ci0KKwkvLyByZWplY3QgZGggcHJpbWVzIHRoYXQgaXMgc3VzY2VwdGlibGUgdG8gbG9n amFtCisJaWYocC0+bGVuIDw9IDEwMjQvOCkKKwkJcmV0dXJuIG5pbDsKIAlZYyA9IG5pbDsKIAlQ ID0gYnl0ZXN0b21wKHApOwogCUcgPSBieXRlc3RvbXAoZyk7CkBAIC05MjIsNDcgKzk1OSw1NSBA QAogewogCUVDZG9tYWluICpkb20gPSAmc2VjLT5lYy5kb207CiAJRUNwcml2ICpRID0gJnNlYy0+ ZWMuUTsKLQlOYW1lZGN1cnZlICpuYzsKIAlFQ3B1YiAqcHViOwogCUVDcG9pbnQgSzsKKwlOYW1l ZGN1cnZlICpuYzsKIAlCeXRlcyAqWWM7CisJQnl0ZXMgKlo7CiAJaW50IG47CiAKIAlpZihZcyA9 PSBuaWwpCiAJCXJldHVybiBuaWw7Ci0JZm9yKG5jID0gbmFtZWRjdXJ2ZXM7IG5jICE9ICZuYW1l ZGN1cnZlc1tuZWxlbShuYW1lZGN1cnZlcyldOyBuYysrKQotCQlpZihuYy0+dGxzaWQgPT0gY3Vy dmUpCi0JCQlnb3RvIEZvdW5kOwotCXJldHVybiBuaWw7CiAKLUZvdW5kOgotCWVjZG9taW5pdChk b20sIG5jLT5pbml0KTsKLQlwdWIgPSBlY2RlY29kZXB1Yihkb20sIFlzLT5kYXRhLCBZcy0+bGVu KTsKLQlpZihwdWIgPT0gbmlsKQotCQlyZXR1cm4gbmlsOwotCi0JbWVtc2V0KFEsIDAsIHNpemVv ZigqUSkpOwotCVEtPnggPSBtcG5ldygwKTsKLQlRLT55ID0gbXBuZXcoMCk7Ci0JUS0+ZCA9IG1w bmV3KDApOwotCi0JbWVtc2V0KCZLLCAwLCBzaXplb2YoSykpOwotCUsueCA9IG1wbmV3KDApOwot CUsueSA9IG1wbmV3KDApOwotCi0JZWNnZW4oZG9tLCBRKTsKLQllY211bChkb20sIHB1YiwgUS0+ ZCwgJkspOwotCi0JbiA9IChtcHNpZ25pZihkb20tPnApKzcpLzg7Ci0Jc2V0TWFzdGVyU2VjcmV0 KHNlYywgbXB0b2J5dGVzKEsueCwgbikpOwotCVljID0gbmV3Ynl0ZXMoMSArIDIqbik7Ci0JWWMt PmxlbiA9IGVjZW5jb2RlcHViKGRvbSwgUSwgWWMtPmRhdGEsIFljLT5sZW4pOworCWlmKGN1cnZl ID09IFgyNTUxOSl7CisJCWlmKFlzLT5sZW4gIT0gMzIpCisJCQlyZXR1cm4gbmlsOworCQlZYyA9 IG5ld2J5dGVzKDMyKTsKKwkJY3VydmUyNTUxOV9kaF9uZXcoc2VjLT5YLCBZYy0+ZGF0YSk7CisJ CVogPSBuZXdieXRlcygzMik7CisJCWN1cnZlMjU1MTlfZGhfZmluaXNoKHNlYy0+WCwgWXMtPmRh dGEsIFotPmRhdGEpOworCQlzZXRNYXN0ZXJTZWNyZXQoc2VjLCBaKTsKKwl9ZWxzZXsKKwkJZm9y KG5jID0gbmFtZWRjdXJ2ZXM7IG5jLT50bHNpZCAhPSBjdXJ2ZTsgbmMrKykKKwkJCWlmKG5jID09 ICZuYW1lZGN1cnZlc1tuZWxlbShuYW1lZGN1cnZlcyldKQorCQkJCXJldHVybiBuaWw7CisJCWVj ZG9taW5pdChkb20sIG5jLT5pbml0KTsKKwkJcHViID0gZWNkZWNvZGVwdWIoZG9tLCBZcy0+ZGF0 YSwgWXMtPmxlbik7CisJCWlmKHB1YiA9PSBuaWwpCisJCQlyZXR1cm4gbmlsOwogCi0JbXBmcmVl KEsueCk7Ci0JbXBmcmVlKEsueSk7CisJCW1lbXNldChRLCAwLCBzaXplb2YoKlEpKTsKKwkJUS0+ eCA9IG1wbmV3KDApOworCQlRLT55ID0gbXBuZXcoMCk7CisJCVEtPmQgPSBtcG5ldygwKTsKKwor CQltZW1zZXQoJkssIDAsIHNpemVvZihLKSk7CisJCUsueCA9IG1wbmV3KDApOworCQlLLnkgPSBt cG5ldygwKTsKKworCQllY2dlbihkb20sIFEpOworCQllY211bChkb20sIHB1YiwgUS0+ZCwgJksp OworCisJCW4gPSAobXBzaWduaWYoZG9tLT5wKSs3KS84OworCQlzZXRNYXN0ZXJTZWNyZXQoc2Vj LCBtcHRvYnl0ZXMoSy54LCBuKSk7CisJCVljID0gbmV3Ynl0ZXMoMSArIDIqbik7CisJCVljLT5s ZW4gPSBlY2VuY29kZXB1Yihkb20sIFEsIFljLT5kYXRhLCBZYy0+bGVuKTsKIAotCWVjcHViZnJl ZShwdWIpOworCQltcGZyZWUoSy54KTsKKwkJbXBmcmVlKEsueSk7CiAKKwkJZWNwdWJmcmVlKHB1 Yik7CisJfQogCXJldHVybiBZYzsKIH0KIApAQCAtMTA0NSw3ICsxMDkwLDYgQEAKIAkJdGxzRXJy b3IoYywgRUlsbGVnYWxQYXJhbWV0ZXIsICJpbnZhbGlkIGNvbXByZXNzaW9uIik7CiAJCWdvdG8g RXJyOwogCX0KLQogCWRoeCA9IGlzREhFKGNpcGhlcikgfHwgaXNFQ0RIRShjaXBoZXIpOwogCWlm KCFtc2dSZWN2KGMsICZtKSkKIAkJZ290byBFcnI7CkBAIC0yMzEzLDExNCArMjM1Nyw1NSBAQAog fQogCiBzdGF0aWMgdm9pZAotdGxzUG1kNSh1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtl eSwgaW50IG5rZXksIHVjaGFyICpsYWJlbCwgaW50IG5sYWJlbCwgdWNoYXIgKnNlZWQwLCBpbnQg bnNlZWQwLCB1Y2hhciAqc2VlZDEsIGludCBuc2VlZDEpCi17Ci0JdWNoYXIgYWlbTUQ1ZGxlbl0s IHRtcFtNRDVkbGVuXTsKLQlpbnQgaSwgbjsKLQlNRDVzdGF0ZSAqczsKLQotCS8vIGdlbmVyYXRl IGExCi0JcyA9IGhtYWNfbWQ1KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBuaWwpOwot CXMgPSBobWFjX21kNShzZWVkMCwgbnNlZWQwLCBrZXksIG5rZXksIG5pbCwgcyk7Ci0JaG1hY19t ZDUoc2VlZDEsIG5zZWVkMSwga2V5LCBua2V5LCBhaSwgcyk7Ci0KLQl3aGlsZShuYnVmID4gMCkg ewotCQlzID0gaG1hY19tZDUoYWksIE1ENWRsZW4sIGtleSwgbmtleSwgbmlsLCBuaWwpOwotCQlz ID0gaG1hY19tZDUobGFiZWwsIG5sYWJlbCwga2V5LCBua2V5LCBuaWwsIHMpOwotCQlzID0gaG1h Y19tZDUoc2VlZDAsIG5zZWVkMCwga2V5LCBua2V5LCBuaWwsIHMpOwotCQlobWFjX21kNShzZWVk MSwgbnNlZWQxLCBrZXksIG5rZXksIHRtcCwgcyk7Ci0JCW4gPSBNRDVkbGVuOwotCQlpZihuID4g bmJ1ZikKLQkJCW4gPSBuYnVmOwotCQlmb3IoaSA9IDA7IGkgPCBuOyBpKyspCi0JCQlidWZbaV0g Xj0gdG1wW2ldOwotCQlidWYgKz0gbjsKLQkJbmJ1ZiAtPSBuOwotCQlobWFjX21kNShhaSwgTUQ1 ZGxlbiwga2V5LCBua2V5LCB0bXAsIG5pbCk7Ci0JCW1lbW1vdmUoYWksIHRtcCwgTUQ1ZGxlbik7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotdGxzUHNoYTEodWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVj aGFyICprZXksIGludCBua2V5LCB1Y2hhciAqbGFiZWwsIGludCBubGFiZWwsIHVjaGFyICpzZWVk MCwgaW50IG5zZWVkMCwgdWNoYXIgKnNlZWQxLCBpbnQgbnNlZWQxKQotewotCXVjaGFyIGFpW1NI QTFkbGVuXSwgdG1wW1NIQTFkbGVuXTsKLQlpbnQgaSwgbjsKLQlTSEFzdGF0ZSAqczsKLQotCS8v IGdlbmVyYXRlIGExCi0JcyA9IGhtYWNfc2hhMShsYWJlbCwgbmxhYmVsLCBrZXksIG5rZXksIG5p bCwgbmlsKTsKLQlzID0gaG1hY19zaGExKHNlZWQwLCBuc2VlZDAsIGtleSwgbmtleSwgbmlsLCBz KTsKLQlobWFjX3NoYTEoc2VlZDEsIG5zZWVkMSwga2V5LCBua2V5LCBhaSwgcyk7Ci0KLQl3aGls ZShuYnVmID4gMCkgewotCQlzID0gaG1hY19zaGExKGFpLCBTSEExZGxlbiwga2V5LCBua2V5LCBu aWwsIG5pbCk7Ci0JCXMgPSBobWFjX3NoYTEobGFiZWwsIG5sYWJlbCwga2V5LCBua2V5LCBuaWws IHMpOwotCQlzID0gaG1hY19zaGExKHNlZWQwLCBuc2VlZDAsIGtleSwgbmtleSwgbmlsLCBzKTsK LQkJaG1hY19zaGExKHNlZWQxLCBuc2VlZDEsIGtleSwgbmtleSwgdG1wLCBzKTsKLQkJbiA9IFNI QTFkbGVuOwotCQlpZihuID4gbmJ1ZikKLQkJCW4gPSBuYnVmOwotCQlmb3IoaSA9IDA7IGkgPCBu OyBpKyspCi0JCQlidWZbaV0gXj0gdG1wW2ldOwotCQlidWYgKz0gbjsKLQkJbmJ1ZiAtPSBuOwot CQlobWFjX3NoYTEoYWksIFNIQTFkbGVuLCBrZXksIG5rZXksIHRtcCwgbmlsKTsKLQkJbWVtbW92 ZShhaSwgdG1wLCBTSEExZGxlbik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcF9zaGEyNTYodWNo YXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCB1Y2hhciAqbGFiZWwsIGlu dCBubGFiZWwsIHVjaGFyICpzZWVkLCBpbnQgbnNlZWQpCit0bHNQKHVjaGFyICpidWYsIGludCBu YnVmLCB1Y2hhciAqa2V5LCBpbnQgbmtleSwgdWNoYXIgKmxhYmVsLCBpbnQgbmxhYmVsLCB1Y2hh ciAqc2VlZCwgaW50IG5zZWVkLAorCURpZ2VzdFN0YXRlKiAoKngpKHVjaGFyKiwgdWxvbmcsIHVj aGFyKiwgdWxvbmcsIHVjaGFyKiwgRGlnZXN0U3RhdGUqKSwgaW50IHhsZW4pCiB7CiAJdWNoYXIg YWlbU0hBMl8yNTZkbGVuXSwgdG1wW1NIQTJfMjU2ZGxlbl07Ci0JU0hBc3RhdGUgKnM7CisJRGln ZXN0U3RhdGUgKnM7CiAJaW50IG47CiAKKwlhc3NlcnQoc2l6ZW9mKGFpKSA8PSB4bGVuICYmIHNp emVvZih0bXApIDw9IHhsZW4pOwogCS8vIGdlbmVyYXRlIGExCi0JcyA9IGhtYWNfc2hhMl8yNTYo bGFiZWwsIG5sYWJlbCwga2V5LCBua2V5LCBuaWwsIG5pbCk7Ci0JaG1hY19zaGEyXzI1NihzZWVk LCBuc2VlZCwga2V5LCBua2V5LCBhaSwgcyk7CisJcyA9IHgobGFiZWwsIG5sYWJlbCwga2V5LCBu a2V5LCBuaWwsIG5pbCk7CisJeChzZWVkLCBuc2VlZCwga2V5LCBua2V5LCBhaSwgcyk7CiAKIAl3 aGlsZShuYnVmID4gMCkgewotCQlzID0gaG1hY19zaGEyXzI1NihhaSwgU0hBMl8yNTZkbGVuLCBr ZXksIG5rZXksIG5pbCwgbmlsKTsKLQkJcyA9IGhtYWNfc2hhMl8yNTYobGFiZWwsIG5sYWJlbCwg a2V5LCBua2V5LCBuaWwsIHMpOwotCQlobWFjX3NoYTJfMjU2KHNlZWQsIG5zZWVkLCBrZXksIG5r ZXksIHRtcCwgcyk7Ci0JCW4gPSBTSEEyXzI1NmRsZW47CisJCXMgPSB4KGFpLCB4bGVuLCBrZXks IG5rZXksIG5pbCwgbmlsKTsKKwkJcyA9IHgobGFiZWwsIG5sYWJlbCwga2V5LCBua2V5LCBuaWws IHMpOworCQl4KHNlZWQsIG5zZWVkLCBrZXksIG5rZXksIHRtcCwgcyk7CisJCW4gPSB4bGVuOwog CQlpZihuID4gbmJ1ZikKIAkJCW4gPSBuYnVmOwogCQltZW1tb3ZlKGJ1ZiwgdG1wLCBuKTsKIAkJ YnVmICs9IG47CiAJCW5idWYgLT0gbjsKLQkJaG1hY19zaGEyXzI1NihhaSwgU0hBMl8yNTZkbGVu LCBrZXksIG5rZXksIHRtcCwgbmlsKTsKLQkJbWVtbW92ZShhaSwgdG1wLCBTSEEyXzI1NmRsZW4p OworCQl4KGFpLCB4bGVuLCBrZXksIG5rZXksIHRtcCwgbmlsKTsKKwkJbWVtbW92ZShhaSwgdG1w LCB4bGVuKTsKIAl9CiB9CiAKIC8vIGZpbGwgYnVmIHdpdGggbWQ1KGFyZ3MpXnNoYTEoYXJncykK IHN0YXRpYyB2b2lkCi10bHMxMFBSRih1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwg aW50IG5rZXksIGNoYXIgKmxhYmVsLCB1Y2hhciAqc2VlZDAsIGludCBuc2VlZDAsIHVjaGFyICpz ZWVkMSwgaW50IG5zZWVkMSkKK3RsczEwUFJGKHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAq a2V5LCBpbnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkLCBpbnQgbnNlZWQpCiB7CiAJ aW50IG5sYWJlbCA9IHN0cmxlbihsYWJlbCk7CiAJaW50IG4gPSAobmtleSArIDEpID4+IDE7CiAK LQltZW1zZXQoYnVmLCAwLCBuYnVmKTsKLQl0bHNQbWQ1KGJ1ZiwgbmJ1Ziwga2V5LCBuLCAodWNo YXIqKWxhYmVsLCBubGFiZWwsIHNlZWQwLCBuc2VlZDAsIHNlZWQxLCBuc2VlZDEpOwotCXRsc1Bz aGExKGJ1ZiwgbmJ1Ziwga2V5K25rZXktbiwgbiwgKHVjaGFyKilsYWJlbCwgbmxhYmVsLCBzZWVk MCwgbnNlZWQwLCBzZWVkMSwgbnNlZWQxKTsKKwl0bHNQKGJ1ZiwgbmJ1Ziwga2V5LCBuLCAodWNo YXIqKWxhYmVsLCBubGFiZWwsIHNlZWQsIG5zZWVkLAorCQlobWFjX21kNSwgTUQ1ZGxlbik7CisJ dGxzUChidWYsIG5idWYsIGtleStua2V5LW4sIG4sICh1Y2hhciopbGFiZWwsIG5sYWJlbCwgc2Vl ZCwgbnNlZWQsCisJCWhtYWNfc2hhMSwgU0hBMWRsZW4pOwogfQogCiBzdGF0aWMgdm9pZAotdGxz MTJQUkYodWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICps YWJlbCwgdWNoYXIgKnNlZWQwLCBpbnQgbnNlZWQwLCB1Y2hhciAqc2VlZDEsIGludCBuc2VlZDEp Cit0bHMxMlBSRih1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwgaW50IG5rZXksIGNo YXIgKmxhYmVsLCB1Y2hhciAqc2VlZCwgaW50IG5zZWVkKQogewotCXVjaGFyIHNlZWRbMipSYW5k b21TaXplXTsKLQotCWFzc2VydChuc2VlZDArbnNlZWQxIDw9IHNpemVvZihzZWVkKSk7Ci0JbWVt bW92ZShzZWVkLCBzZWVkMCwgbnNlZWQwKTsKLQltZW1tb3ZlKHNlZWQrbnNlZWQwLCBzZWVkMSwg bnNlZWQxKTsKLQlwX3NoYTI1NihidWYsIG5idWYsIGtleSwgbmtleSwgKHVjaGFyKilsYWJlbCwg c3RybGVuKGxhYmVsKSwgc2VlZCwgbnNlZWQwK25zZWVkMSk7CisJdGxzUChidWYsIG5idWYsIGtl eSwgbmtleSwgKHVjaGFyKilsYWJlbCwgc3RybGVuKGxhYmVsKSwgc2VlZCwgbnNlZWQsCisJCWht YWNfc2hhMl8yNTYsIFNIQTJfMjU2ZGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkCi1zc2xQUkYodWNo YXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJlbCwgdWNo YXIgKnNlZWQwLCBpbnQgbnNlZWQwLCB1Y2hhciAqc2VlZDEsIGludCBuc2VlZDEpCitzc2xQUkYo dWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJlbCwg dWNoYXIgKnNlZWQsIGludCBuc2VlZCkKIHsKIAl1Y2hhciBzaGExZGlnW1NIQTFkbGVuXSwgbWQ1 ZGlnW01ENWRsZW5dLCB0bXBbMjZdOwogCURpZ2VzdFN0YXRlICpzOwpAQCAtMjQzNSw4ICsyNDIw LDcgQEAKIAkJCXRtcFtpXSA9ICdBJyAtIDEgKyBsZW47CiAJCXMgPSBzaGExKHRtcCwgbGVuLCBu aWwsIG5pbCk7CiAJCXMgPSBzaGExKGtleSwgbmtleSwgbmlsLCBzKTsKLQkJcyA9IHNoYTEoc2Vl ZDAsIG5zZWVkMCwgbmlsLCBzKTsKLQkJc2hhMShzZWVkMSwgbnNlZWQxLCBzaGExZGlnLCBzKTsK KwkJc2hhMShzZWVkLCBuc2VlZCwgc2hhMWRpZywgcyk7CiAJCXMgPSBtZDUoa2V5LCBua2V5LCBu aWwsIG5pbCk7CiAJCW1kNShzaGExZGlnLCBTSEExZGxlbiwgbWQ1ZGlnLCBzKTsKIAkJbiA9IE1E NWRsZW47CkBAIC0yNDg2LDE4ICsyNDcwLDE4IEBACiBzdGF0aWMgdm9pZAogdGxzMTBTZXRGaW5p c2hlZChUbHNTZWMgKnNlYywgSGFuZHNoYWtlSGFzaCBoc2gsIHVjaGFyICpmaW5pc2hlZCwgaW50 IGlzY2xpZW50KQogewotCXVjaGFyIGgwW01ENWRsZW5dLCBoMVtTSEExZGxlbl07CisJdWNoYXIg aFtNRDVkbGVuK1NIQTFkbGVuXTsKIAljaGFyICpsYWJlbDsKIAogCS8vIGdldCBjdXJyZW50IGhh c2ggdmFsdWUsIGJ1dCBhbGxvdyBmdXJ0aGVyIG1lc3NhZ2VzIHRvIGJlIGhhc2hlZCBpbgotCW1k NShuaWwsIDAsIGgwLCAmaHNoLm1kNSk7Ci0Jc2hhMShuaWwsIDAsIGgxLCAmaHNoLnNoYTEpOwor CW1kNShuaWwsIDAsIGgsICZoc2gubWQ1KTsKKwlzaGExKG5pbCwgMCwgaCtNRDVkbGVuLCAmaHNo LnNoYTEpOwogCiAJaWYoaXNjbGllbnQpCiAJCWxhYmVsID0gImNsaWVudCBmaW5pc2hlZCI7CiAJ ZWxzZQogCQlsYWJlbCA9ICJzZXJ2ZXIgZmluaXNoZWQiOwotCXRsczEwUFJGKGZpbmlzaGVkLCBU TFNGaW5pc2hlZExlbiwgc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsIGxhYmVsLCBoMCwgTUQ1 ZGxlbiwgaDEsIFNIQTFkbGVuKTsKKwl0bHMxMFBSRihmaW5pc2hlZCwgVExTRmluaXNoZWRMZW4s IHNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCBsYWJlbCwgaCwgc2l6ZW9mKGgpKTsKIH0KIAog c3RhdGljIHZvaWQKQEAgLTI1MTMsNyArMjQ5Nyw3IEBACiAJCWxhYmVsID0gImNsaWVudCBmaW5p c2hlZCI7CiAJZWxzZQogCQlsYWJlbCA9ICJzZXJ2ZXIgZmluaXNoZWQiOwotCXBfc2hhMjU2KGZp bmlzaGVkLCBUTFNGaW5pc2hlZExlbiwgc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsICh1Y2hh ciopbGFiZWwsIHN0cmxlbihsYWJlbCksIHNlZWQsIFNIQTJfMjU2ZGxlbik7CisJdGxzMTJQUkYo ZmluaXNoZWQsIFRMU0ZpbmlzaGVkTGVuLCBzZWMtPnNlYywgTWFzdGVyU2VjcmV0U2l6ZSwgbGFi ZWwsIHNlZWQsIFNIQTJfMjU2ZGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNTIzLDggKzI1 MDcsOSBAQAogCXNlYy0+Y2xpZW50VmVycyA9IGN2ZXJzOwogCW1lbW1vdmUoc2VjLT5jcmFuZG9t LCBjcmFuZG9tLCBSYW5kb21TaXplKTsKIAotCXB1dDMyKHNlYy0+c3JhbmRvbSwgdGltZShuaWwp KTsKLQlnZW5yYW5kb20oc2VjLT5zcmFuZG9tKzQsIFJhbmRvbVNpemUtNCk7CisJLy8gcHV0dGlu ZyB0aW1lKCkncyBvdXRwdXQgdG8gdGhlIGZpcnN0IDQgYnl0ZXMgaXMgbm8KKwkvLyBsb25nZXIg cmVjb21tZW5kZWQgYW5kIGlzIG5vdCB1c2VmdWwKKwlnZW5yYW5kb20oc2VjLT5zcmFuZG9tLCBS YW5kb21TaXplKTsKIH0KIAogc3RhdGljIGludApAQCAtMjU0OSwyNyArMjUzNCwzNCBAQAogfQog CiBzdGF0aWMgQnl0ZXMqCi10bHNTZWNFQ0RIRXMxKFRsc1NlYyAqc2VjLCBOYW1lZGN1cnZlICpu YykKK3Rsc1NlY0VDREhFczEoVGxzU2VjICpzZWMpCiB7CiAJRUNkb21haW4gKmRvbSA9ICZzZWMt PmVjLmRvbTsKIAlFQ3ByaXYgKlEgPSAmc2VjLT5lYy5ROwogCUJ5dGVzICpwYXI7CiAJaW50IG47 CiAKLQllY2RvbWluaXQoZG9tLCBuYy0+aW5pdCk7Ci0JbWVtc2V0KFEsIDAsIHNpemVvZigqUSkp OwotCVEtPnggPSBtcG5ldygwKTsKLQlRLT55ID0gbXBuZXcoMCk7Ci0JUS0+ZCA9IG1wbmV3KDAp OwotCWVjZ2VuKGRvbSwgUSk7Ci0JbiA9IDEgKyAyKigobXBzaWduaWYoZG9tLT5wKSs3KS84KTsK LQlwYXIgPSBuZXdieXRlcygxKzIrMStuKTsKLQlwYXItPmRhdGFbMF0gPSAzOwotCXB1dDE2KHBh ci0+ZGF0YSsxLCBuYy0+dGxzaWQpOwotCW4gPSBlY2VuY29kZXB1Yihkb20sIFEsIHBhci0+ZGF0 YSs0LCBwYXItPmxlbi00KTsKLQlwYXItPmRhdGFbM10gPSBuOwotCXBhci0+bGVuID0gMSsyKzEr bjsKLQorCWlmKHNlYy0+bmMtPnRsc2lkID09IFgyNTUxOSl7CisJCXBhciA9IG5ld2J5dGVzKDEr MisxKzMyKTsKKwkJcGFyLT5kYXRhWzBdID0gMzsKKwkJcHV0MTYocGFyLT5kYXRhKzEsIFgyNTUx OSk7CisJCXBhci0+ZGF0YVszXSA9IDMyOworCQljdXJ2ZTI1NTE5X2RoX25ldyhzZWMtPlgsIHBh ci0+ZGF0YSs0KTsKKwl9ZWxzZXsKKwkJZWNkb21pbml0KGRvbSwgc2VjLT5uYy0+aW5pdCk7CisJ CW1lbXNldChRLCAwLCBzaXplb2YoKlEpKTsKKwkJUS0+eCA9IG1wbmV3KDApOworCQlRLT55ID0g bXBuZXcoMCk7CisJCVEtPmQgPSBtcG5ldygwKTsKKwkJZWNnZW4oZG9tLCBRKTsKKwkJbiA9IDEg KyAyKigobXBzaWduaWYoZG9tLT5wKSs3KS84KTsKKwkJcGFyID0gbmV3Ynl0ZXMoMSsyKzErbik7 CisJCXBhci0+ZGF0YVswXSA9IDM7CisJCXB1dDE2KHBhci0+ZGF0YSsxLCBzZWMtPm5jLT50bHNp ZCk7CisJCW4gPSBlY2VuY29kZXB1Yihkb20sIFEsIHBhci0+ZGF0YSs0LCBwYXItPmxlbi00KTsK KwkJcGFyLT5kYXRhWzNdID0gbjsKKwkJcGFyLT5sZW4gPSAxKzIrMStuOworCX0KIAlyZXR1cm4g cGFyOwogfQogCkBAIC0yNTgwLDMwICsyNTcyLDQwIEBACiAJRUNwcml2ICpRID0gJnNlYy0+ZWMu UTsKIAlFQ3BvaW50IEs7CiAJRUNwdWIgKlk7CisJQnl0ZXMgKlo7CiAKIAlpZihZYyA9PSBuaWwp ewogCQl3ZXJyc3RyKCJubyBwdWJsaWMga2V5Iik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZigo WSA9IGVjZGVjb2RlcHViKGRvbSwgWWMtPmRhdGEsIFljLT5sZW4pKSA9PSBuaWwpewotCQl3ZXJy c3RyKCJiYWQgcHVibGljIGtleSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbWVtc2V0KCZLLCAw LCBzaXplb2YoSykpOwotCUsueCA9IG1wbmV3KDApOwotCUsueSA9IG1wbmV3KDApOworCWlmKHNl Yy0+bmMtPnRsc2lkID09IFgyNTUxOSl7CisJCWlmKFljLT5sZW4gIT0gMzIpeworCQkJd2VycnN0 cigiYmFkIHB1YmxpYyBrZXkiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlaID0gbmV3Ynl0ZXMo MzIpOworCQljdXJ2ZTI1NTE5X2RoX2ZpbmlzaChzZWMtPlgsIFljLT5kYXRhLCBaLT5kYXRhKTsK KwkJc2V0TWFzdGVyU2VjcmV0KHNlYywgWik7CisJfWVsc2V7CisJCWlmKChZID0gZWNkZWNvZGVw dWIoZG9tLCBZYy0+ZGF0YSwgWWMtPmxlbikpID09IG5pbCl7CisJCQl3ZXJyc3RyKCJiYWQgcHVi bGljIGtleSIpOworCQkJcmV0dXJuIC0xOworCQl9CiAKLQllY211bChkb20sIFksIFEtPmQsICZL KTsKKwkJbWVtc2V0KCZLLCAwLCBzaXplb2YoSykpOworCQlLLnggPSBtcG5ldygwKTsKKwkJSy55 ID0gbXBuZXcoMCk7CiAKLQlzZXRNYXN0ZXJTZWNyZXQoc2VjLCBtcHRvYnl0ZXMoSy54LCAobXBz aWduaWYoZG9tLT5wKSs3KS84KSk7CisJCWVjbXVsKGRvbSwgWSwgUS0+ZCwgJkspOwogCi0JbXBm cmVlKEsueCk7Ci0JbXBmcmVlKEsueSk7CisJCXNldE1hc3RlclNlY3JldChzZWMsIG1wdG9ieXRl cyhLLngsIChtcHNpZ25pZihkb20tPnApKzcpLzgpKTsKIAotCWVjcHViZnJlZShZKTsKKwkJbXBm cmVlKEsueCk7CisJCW1wZnJlZShLLnkpOwogCisJCWVjcHViZnJlZShZKTsKKwl9CiAJcmV0dXJu IDA7CiB9CiAKQEAgLTI2MTIsOCArMjYxNCw4IEBACiB7CiAJbWVtc2V0KHNlYywgMCwgc2l6ZW9m KCpzZWMpKTsKIAlzZWMtPmNsaWVudFZlcnMgPSBjdmVyczsKLQlwdXQzMihzZWMtPmNyYW5kb20s IHRpbWUobmlsKSk7Ci0JZ2VucmFuZG9tKHNlYy0+Y3JhbmRvbSs0LCBSYW5kb21TaXplLTQpOwor CS8vIHNlZSB0aGUgY29tbWVudCBvbiB0bHNTZWNJbml0cworCWdlbnJhbmRvbShzZWMtPmNyYW5k b20sIFJhbmRvbVNpemUpOwogfQogCiBzdGF0aWMgQnl0ZXMqCkBAIC0yNjcxLDEzICsyNjczLDE1 IEBACiBzdGF0aWMgaW50CiBzZXRTZWNyZXRzKFRsc0Nvbm5lY3Rpb24gKmMsIGludCBpc2NsaWVu dCkKIHsKLQl1Y2hhciBrZFtNYXhLZXlEYXRhXTsKKwl1Y2hhciBrZFtNYXhLZXlEYXRhXSwgc2Vl ZFsyKlJhbmRvbVNpemVdOwogCWNoYXIgKnNlY3JldHM7CiAJaW50IHJ2OwogCiAJYXNzZXJ0KGMt Pm5zZWNyZXQgPD0gc2l6ZW9mKGtkKSk7CiAJc2VjcmV0cyA9IGVtYWxsb2MoMipjLT5uc2VjcmV0 KTsKIAorCW1lbW1vdmUoc2VlZCwgYy0+c2VjLT5zcmFuZG9tLCBSYW5kb21TaXplKTsKKwltZW1t b3ZlKHNlZWQrUmFuZG9tU2l6ZSwgYy0+c2VjLT5jcmFuZG9tLCBSYW5kb21TaXplKTsKIAkvKgog CSAqIGdlbmVyYXRlIHNlY3JldCBrZXlzIGZyb20gdGhlIG1hc3RlciBzZWNyZXQuCiAJICoKQEAg LTI2ODYsNyArMjY5MCw3IEBACiAJICogYnV0IGl0J3MgYWxsIGdlbmVyYXRlZCB1c2luZyB0aGUg c2FtZSBmdW5jdGlvbi4KIAkgKi8KIAkoKmMtPnNlYy0+cHJmKShrZCwgYy0+bnNlY3JldCwgYy0+ c2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsICJrZXkgZXhwYW5zaW9uIiwKLQkJCWMtPnNlYy0+ c3JhbmRvbSwgUmFuZG9tU2l6ZSwgYy0+c2VjLT5jcmFuZG9tLCBSYW5kb21TaXplKTsKKwkJCXNl ZWQsIHNpemVvZihzZWVkKSk7CiAKIAllbmM2NChzZWNyZXRzLCAyKmMtPm5zZWNyZXQsIGtkLCBj LT5uc2VjcmV0KTsKIAltZW1zZXQoa2QsIDAsIGMtPm5zZWNyZXQpOwpAQCAtMjcwNSw2ICsyNzA5 LDggQEAKIHN0YXRpYyB2b2lkCiBzZXRNYXN0ZXJTZWNyZXQoVGxzU2VjICpzZWMsIEJ5dGVzICpw bSkKIHsKKwl1Y2hhciBzZWVkWzIqUmFuZG9tU2l6ZV07CisKIAlpZihzZWMtPnBza2xlbiA+IDAp ewogCQlCeXRlcyAqb3BtID0gcG07CiAJCXVjaGFyICpwOwpAQCAtMjcyMSw4ICsyNzI3LDEwIEBA CiAJCWZyZWVieXRlcyhvcG0pOwogCX0KIAorCW1lbW1vdmUoc2VlZCwgc2VjLT5jcmFuZG9tLCBS YW5kb21TaXplKTsKKwltZW1tb3ZlKHNlZWQrUmFuZG9tU2l6ZSwgc2VjLT5zcmFuZG9tLCBSYW5k b21TaXplKTsKIAkoKnNlYy0+cHJmKShzZWMtPnNlYywgTWFzdGVyU2VjcmV0U2l6ZSwgcG0tPmRh dGEsIHBtLT5sZW4sICJtYXN0ZXIgc2VjcmV0IiwKLQkJCXNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6 ZSwgc2VjLT5zcmFuZG9tLCBSYW5kb21TaXplKTsKKwkJCXNlZWQsIHNpemVvZihzZWVkKSk7CiAK IAltZW1zZXQocG0tPmRhdGEsIDAsIHBtLT5sZW4pOwkKIAlmcmVlYnl0ZXMocG0pOwo= --00000000000037e6ab05c496fe69--