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 24747 invoked from network); 24 Oct 2021 12:01:00 -0000 Received: from 4ess.inri.net (216.126.196.42) by inbox.vuxu.org with ESMTPUTF8; 24 Oct 2021 12:01:00 -0000 Received: from mail-ot1-f50.google.com ([209.85.210.50]) by 4ess; Sun Oct 24 07:52:20 -0400 2021 Received: by mail-ot1-f50.google.com with SMTP id p6-20020a9d7446000000b0054e6bb223f3so10867116otk.3 for <9front@9front.org>; Sun, 24 Oct 2021 04:52:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=fmz79BOyMMI8T1QyXHEUl6Ndfq6rJVMxoWvybpbb/DU=; b=ojeO4PZANtryexdsG975rgp0vnZLh8FPUhAjN0C4uyY7HLscfvB8kF2UJfdZxwLRHQ np0KU5Pn8fuoGYV4cKWPJrQ1nSy5jqIXh1bcwHfFfwzszrtq7Z4j6Ln4Wrp0e9j4CszC 67DBB2jAS2u+9lg4KIhfcp02hif78X8NHJStnandlVC0xqWzXBnY5eCEY18I7KIvjw/m yvNHEfL7yUk5TWQOICzubtKHc1hizwmKUXfN/Z810Vt74w3hJqOMEUTXNbTNiymjOedi Ugve4iExZlxlmT4wXPzoOcm+I/06jnG03JWHUNivBO3hHi1xKVkYCGlXpwYC6nb7t0fW lA7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=fmz79BOyMMI8T1QyXHEUl6Ndfq6rJVMxoWvybpbb/DU=; b=42NUVWifyN1GLoxPTNA6x2kIPTkyqs6WeyJdt1aL5LlnJQvVqfZYUxjxpdsHeKkDNx X9w1mqJ2VCG7Oao2sMQL/gJnFPbbwS3/G/5D2qBpBFxbWuE0TCWOGDSTqSrRLWEYldBu PVLVRcSTqlwZ6oUNjC8aap5+t3ebtwWl43ABX7rI4Yt8v2lt6BGHbBpQP6apL8YsJfNB JLPE+Ue4KCOSE2b8PeewN9epcb+hZWKz3Py+4yI+jsiJQoCeFYLHX/L8bBVrHzBjEv5s G5L0qOTW+tioycGvDTs7YLOctXOcxB0TM6RJm651gC/+3NgMGZf/k/Rr9VBARXGLGm0W fHng== X-Gm-Message-State: AOAM531E1e7cKzfgOB/qqjbsMeKY8If7Tb5W/6ZZ8ZkqXsuExyP8s2js LAkll98UcDg3xgUcPORwU8sXEkrLJw97bYU86EelXrO6eSo= X-Google-Smtp-Source: ABdhPJygvJB6Z11j3VYu6tKpnPFfmxqbTMEJdxvSqvOvtHLdy2dqzs5fgUfuyTdhrlCytwbbbrh0017V21gTZeXNZ3Q= X-Received: by 2002:a25:c846:: with SMTP id y67mr6910496ybf.109.1635075975655; Sun, 24 Oct 2021 04:46:15 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a05:7000:270a:0:0:0:0 with HTTP; Sun, 24 Oct 2021 04:46:14 -0700 (PDT) In-Reply-To: References: <3C4C4D2C08BED22ADA0AB655C658BECA@eigenstate.org> From: kemal Date: Sun, 24 Oct 2021 14:46:14 +0300 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="000000000000b66a4505cf17cab1" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: flexible ISO-certified strategy-oriented firewall grid-scale general-purpose solution Subject: Re: [9front] intent to delete: devssl, cpu, oexportfs, import Reply-To: 9front@9front.org Precedence: bulk --000000000000b66a4505cf17cab1 Content-Type: text/plain; charset="UTF-8" i am sending a new diff, again. i apologise for sending 4 different diffs for this, i definitely should have checked my diff better... > 1. don't reject protocol versions that is higher than 0x03ff. > this behavior is useless. it is if it's checking the clienthello/serverhello version, but not if we're checking the record layer version! it might accept non-TLS data if it doesn't check `major version == 0x03`. add that behavior back for devtls. also, 2 more problems i saw in version negotiation code: 1. when setVersion fails, code sends a "illegal_parameter" alert but "protocol_version" is more suitable and the standard way for this. send "protocol_version" instead. 2. tlsClient2 should abort if the server sends a version higher than `c->version`. fix up. the new (and last) diff is attached. --000000000000b66a4505cf17cab1 Content-Type: text/plain; charset="US-ASCII"; name="diff.txt" Content-Disposition: attachment; filename="diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 ZGlmZiA1YjVmNjk1MTNhZGNiOTkzOWU0ZWJkOTNiZjhhZGZiZmRjMDhmY2YxIHVuY29tbWl0dGVk Ci0tLSBhLy9zeXMvbWFuLzIvcHVzaHRscworKysgYi8vc3lzL21hbi8yL3B1c2h0bHMKQEAgLTEs NiArMSw2IEBACiAuVEggUFVTSFRMUyAyCiAuU0ggTkFNRQotcHVzaHRscywgdGxzQ2xpZW50LCB0 bHNTZXJ2ZXIsIGluaXRUaHVtYnByaW50cywgZnJlZVRodW1icHJpbnRzLCBva1RodW1icHJpbnQs IG9rQ2VydGlmaWNhdGUsIHJlYWRjZXJ0LCByZWFkY2VydGNoYWluIFwtIGF0dGFjaCBUTFMxIG9y IFNTTDMgZW5jcnlwdGlvbiB0byBhIGNvbW11bmljYXRpb24gY2hhbm5lbAorcHVzaHRscywgdGxz Q2xpZW50LCB0bHNTZXJ2ZXIsIGluaXRUaHVtYnByaW50cywgZnJlZVRodW1icHJpbnRzLCBva1Ro dW1icHJpbnQsIG9rQ2VydGlmaWNhdGUsIHJlYWRjZXJ0LCByZWFkY2VydGNoYWluIFwtIGF0dGFj aCBUTFMgZW5jcnlwdGlvbiB0byBhIGNvbW11bmljYXRpb24gY2hhbm5lbAogLlNIIFNZTk9QU0lT CiAuQiAjaW5jbHVkZSA8dS5oPgogLmJyCkBAIC00NSw4ICs0NSw2IEBACiBhbmQgYSBoYW5kc2hh a2UgcHJvdG9jb2wsCiBkb2luZyBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGFuZCBzZWNyZXQgY3Jl YXRpb24gYXQKIHVzZXIgbGV2ZWwgYW5kIHRoZW4gc3RhcnRpbmcgYSBkYXRhIGNoYW5uZWwgaW4g dGhlIHJlY29yZCBwcm90b2NvbC4KLVRMUyBpcyBuZWFybHkgdGhlIHNhbWUgYXMgU1NMIDMuMCwg YW5kIHRoZSBzb2Z0d2FyZSBzaG91bGQgaW50ZXJvcGVyYXRlCi13aXRoIGltcGxlbWVudGF0aW9u cyBvZiBlaXRoZXIgc3RhbmRhcmQuCiAuUFAKIFRvIHVzZSBqdXN0IHRoZSByZWNvcmQgbGF5ZXIs IGFzIGRlc2NyaWJlZCBpbgogLklSIHRscyAoMyksCi0tLSBhLy9zeXMvbWFuLzMvdGxzCisrKyBi Ly9zeXMvbWFuLzMvdGxzCkBAIC0xLDYgKzEsNiBAQAogLlRIIFRMUyAzIAogLlNIIE5BTUUKLXRs cyBcLSBUTFMgYW5kIFNTTDMgcmVjb3JkIGxheWVyCit0bHMgXC0gVExTIHJlY29yZCBsYXllcgog LlNIIFNZTk9QU0lTCiAubmYKIC5CIGJpbmQgLWEgI2EgL25ldApAQCAtMTYsMTAgKzE2LDkgQEAK IC5CSSAvbmV0L3Rscy8gbiAvc3RhdHVzCiAuZmkKIC5TSCBERVNDUklQVElPTgotVGhlIFRMUyBk ZXZpY2UgaW1wbGVtZW50cyB0aGUgcmVjb3JkIGxheWVyIHByb3RvY29scwotb2YgVHJhbnNwb3J0 IExheWVyIFNlY3VyaXR5IHZlcnNpb24gMS4wLTEuMiBhbmQgU2VjdXJlIFNvY2tldHMgTGF5ZXIg dmVyc2lvbiAzLjAuCi1JdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGhhbmRzaGFrZSBwcm90b2Nv bHMsIHdoaWNoIGFyZSByZXNwb25zaWJsZSBmb3IKLW11dHVhbCBhdXRoZW50aWNhdGlvbiBhbmQg a2V5IGV4Y2hhbmdlLgorVGhlIFRMUyBkZXZpY2UgaW1wbGVtZW50cyB0aGUgcmVjb3JkIGxheWVy IHByb3RvY29scyBvZiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkKK3ZlcnNpb24gMS4wLTEuMi4g SXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBoYW5kc2hha2UgcHJvdG9jb2xzLCB3aGljaCBhcmUg cmVzcG9uc2libGUKK2ZvciBtdXR1YWwgYXV0aGVudGljYXRpb24gYW5kIGtleSBleGNoYW5nZS4K IFRoZQogLkkgdGxzCiBkZXZpY2UgY2FuIGJlIHRob3VnaHQgb2YgYXMgZmlsdGVycyBwcm92aWRp bmcgb3B0aW9uYWwgZW5jcnlwdGlvbiBhbmQgYW50aS10YW1wZXJpbmcuCkBAIC01MywxMyArNTIs MTEgQEAKIC5JIHZlcnMKIGZvcm1hdCByZWNvcmRzLCBidXQgaW5jb21pbmcgbWVzc2FnZXMgb2Yg ZWl0aGVyIHZlcnNpb24gYXJlIGFjY2VwdGVkLgogVmFsaWQgdmVyc2lvbnMgYXJlCi0uQiAweDMw MAotZm9yIFNTTHYzLjAgYW5kCiAuQlIgMHgzMDEgLAogLkIgMHgzMDIKIGFuZAogLkIgMHgzMDMK LWZvciBUTFN2MS4wICh3aGljaCBjb3VsZCBiZSBrbm93biBhcyBTU0x2My4wMSksIFRMU3YxLjEg YW5kIFRMU3YxLjIuCitmb3IgVExTdjEuMCwgVExTdjEuMSBhbmQgVExTdjEuMi4KIFRoaXMgY29t bWFuZCBtdXN0IGJlIGlzc3VlZCBiZWZvcmUgYW55IG90aGVyIGNvbW1hbmQKIGFuZCBiZWZvcmUg cmVhZGluZyBvciB3cml0aW5nIGFueSBtZXNzYWdlczsKIGl0IG1heSBvbmx5IGJlIGV4ZWN1dGVk IG9uY2UuCkBAIC0xMjAsMTAgKzExNyw5IEBACiAuVFAKIC5CSSBhbGVydCBcIGFsZXJ0bm8KIFNl bmQgYW4gYWxlcnQgbWVzc2FnZS4KLS5JIEFsZXJ0bm8KLW1heSBiZSBhIHZhbGlkIGFsZXJ0IGNv ZGUgZm9yIGVpdGhlciBTU0x2My4wIG9yIFRMUywKLWFuZCBpcyBtYXBwZWQgdG8gYW4gYXBwcm9w cmlhdGUgY29kZSBmb3IgdGhlIHByb3RvY29sIGluIHVzZS4KLUlmIGl0IGlzIGEgZmF0YWwgYWxl cnQsIHRoZSBmaWx0ZXIgaXMgc2V0IGludG8gYW4gZXJyb3Igc3RhdGUuCitJZgorLkkgYWxlcnRu bworaXMgYSBmYXRhbCBhbGVydCwgdGhlIGZpbHRlciBpcyBzZXQgaW50byBhbiBlcnJvciBzdGF0 ZS4KIC5QUAogQXBwbGljYXRpb24gbWVzc2FnZXMgYW5kIGhhbmRzaGFrZSBtZXNzYWdlcyBhcmUg Y29tbXVuaWNhdGVkIHVzaW5nCiAuSSBkYXRhCi0tLSBhLy9zeXMvc3JjLzkvcG9ydC9kZXZ0bHMu YworKysgYi8vc3lzL3NyYy85L3BvcnQvZGV2dGxzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICog IGRldnRscyAtIHJlY29yZCBsYXllciBmb3IgdHJhbnNwb3J0IGxheWVyIHNlY3VyaXR5IDEuMiBh bmQgc2VjdXJlIHNvY2tldHMgbGF5ZXIgMy4wCisgKiAgZGV2dGxzIC0gcmVjb3JkIGxheWVyIGZv ciB0cmFuc3BvcnQgbGF5ZXIgc2VjdXJpdHkgMS4wLTEuMgogICovCiAjaW5jbHVkZQkidS5oIgog I2luY2x1ZGUJIi4uL3BvcnQvbGliLmgiCkBAIC0yNCwxMiArMjQsMTEgQEAKIAlNYXhNYWNMZW4J PSBTSEEyXzI1NmRsZW4sCiAKIAkvKiBwcm90b2NvbCB2ZXJzaW9ucyB3ZSBjYW4gYWNjZXB0ICov Ci0JU1NMM1ZlcnNpb24JPSAweDAzMDAsCiAJVExTMTBWZXJzaW9uCT0gMHgwMzAxLAogCVRMUzEx VmVyc2lvbgk9IDB4MDMwMiwKIAlUTFMxMlZlcnNpb24JPSAweDAzMDMsCi0JTWluUHJvdG9WZXJz aW9uCT0gMHgwMzAwLAkvKiBsaW1pdHMgb24gdmVyc2lvbiB3ZSBhY2NlcHQgKi8KLQlNYXhQcm90 b1ZlcnNpb24JPSAweDAzZmYsCisJTWluUHJvdG9WZXJzaW9uCT0gVExTMTBWZXJzaW9uLAkvKiBs aW1pdHMgb24gdmVyc2lvbiB3ZSBhY2NlcHQgKi8KKwlNYXhQcm90b1ZlcnNpb24JPSBUTFMxMlZl cnNpb24sCiAKIAkvKiBjb25uZWN0aW9uIHN0YXRlcyAqLwogCVNIYW5kc2hha2UJPSAxIDw8IDAs CS8qIGRvaW5nIGhhbmRzaGFrZSAqLwpAQCAtNTcsNyArNTYsNiBAQAogCUVSZWNvcmRPdmVyZmxv dyAJCT0gMjIsCiAJRURlY29tcHJlc3Npb25GYWlsdXJlIAk9IDMwLAogCUVIYW5kc2hha2VGYWls dXJlIAkJPSA0MCwKLQlFTm9DZXJ0aWZpY2F0ZSAJCQk9IDQxLAogCUVCYWRDZXJ0aWZpY2F0ZSAJ CT0gNDIsCiAJRVVuc3VwcG9ydGVkQ2VydGlmaWNhdGUgCT0gNDMsCiAJRUNlcnRpZmljYXRlUmV2 b2tlZCAJCT0gNDQsCkBAIC04OSw3ICs4Nyw2IEBACiAKIAlpbnQJCSgqZW5jKShTZWNyZXQqLCB1 Y2hhciosIGludCk7CiAJaW50CQkoKmRlYykoU2VjcmV0KiwgdWNoYXIqLCBpbnQpOwotCWludAkJ KCp1bnBhZCkodWNoYXIqLCBpbnQsIGludCk7CiAJRGlnZXN0U3RhdGUqCSgqbWFjKSh1Y2hhcios IHVsb25nLCB1Y2hhciosIHVsb25nLCB1Y2hhciosIERpZ2VzdFN0YXRlKik7CiAKIAlpbnQJCWJs b2NrOwkJLyogZW5jcnlwdGlvbiBibG9jayBsZW4sIDAgaWYgbm9uZSAqLwpAQCAtMTI1LDEyICsx MjIsNiBAQAogCWludAkJc3RhdGU7CiAJaW50CQlkZWJ1ZzsKIAotCS8qCi0JICogZnVuY3Rpb24g dG8gZ2VucmF0ZSBhdXRoZW50aWNhdGVkIGRhdGEgYmxvYiBmb3IgZGlmZmVyZW50Ci0JICogcHJv dG9jb2wgdmVyc2lvbnMKLQkgKi8KLQlpbnQJCSgqcGFja0FBRCkodTY0aW50LCB1Y2hhciosIHVj aGFyKik7Ci0KIAkvKiBpbnB1dCBzaWRlIC0tIHByb3RlY3RlZCBieSBpbi5pbyAqLwogCU9uZVdh eQkJaW47CiAJQmxvY2sJCSpwcm9jZXNzZWQ7CS8qIG5leHQgYnVuY2ggb2YgYXBwbGljYXRpb24g ZGF0YSAqLwpAQCAtMTUzLDM3ICsxNDQsMzQgQEAKIAogc3RydWN0IFRsc0VycnN7CiAJaW50CWVy cjsKLQlpbnQJc3NsZXJyOwotCWludAl0bHNlcnI7CiAJaW50CWZhdGFsOwogCWNoYXIJKm1zZzsK IH07CiAKIHN0YXRpYyBUbHNFcnJzIHRsc2VycnNbXSA9IHsKLQl7RUNsb3NlTm90aWZ5LAkJCUVD bG9zZU5vdGlmeSwJCQlFQ2xvc2VOb3RpZnksCQkJMCwgCSJjbG9zZSBub3RpZnkifSwKLQl7RVVu ZXhwZWN0ZWRNZXNzYWdlLAlFVW5leHBlY3RlZE1lc3NhZ2UsCUVVbmV4cGVjdGVkTWVzc2FnZSwg CTEsICJ1bmV4cGVjdGVkIG1lc3NhZ2UifSwKLQl7RUJhZFJlY29yZE1hYywJCUVCYWRSZWNvcmRN YWMsCQlFQmFkUmVjb3JkTWFjLCAJCTEsICJiYWQgcmVjb3JkIG1hYyJ9LAotCXtFRGVjcnlwdGlv bkZhaWxlZCwJCUVJbGxlZ2FsUGFyYW1ldGVyLAkJRURlY3J5cHRpb25GYWlsZWQsCQkxLCAiZGVj cnlwdGlvbiBmYWlsZWQifSwKLQl7RVJlY29yZE92ZXJmbG93LAkJRUlsbGVnYWxQYXJhbWV0ZXIs CQlFUmVjb3JkT3ZlcmZsb3csCQkxLCAicmVjb3JkIHRvbyBsb25nIn0sCi0Je0VEZWNvbXByZXNz aW9uRmFpbHVyZSwJRURlY29tcHJlc3Npb25GYWlsdXJlLAlFRGVjb21wcmVzc2lvbkZhaWx1cmUs CTEsICJkZWNvbXByZXNzaW9uIGZhaWxlZCJ9LAotCXtFSGFuZHNoYWtlRmFpbHVyZSwJCUVIYW5k c2hha2VGYWlsdXJlLAkJRUhhbmRzaGFrZUZhaWx1cmUsCQkxLCAiY291bGQgbm90IG5lZ290aWF0 ZSBhY2NlcHRhYmxlIHNlY3VyaXR5IHBhcmFtZXRlcnMifSwKLQl7RU5vQ2VydGlmaWNhdGUsCQlF Tm9DZXJ0aWZpY2F0ZSwJCQlFQ2VydGlmaWNhdGVVbmtub3duLAkxLCAibm8gYXBwcm9wcmlhdGUg Y2VydGlmaWNhdGUgYXZhaWxhYmxlIn0sCi0Je0VCYWRDZXJ0aWZpY2F0ZSwJCUVCYWRDZXJ0aWZp Y2F0ZSwJCUVCYWRDZXJ0aWZpY2F0ZSwJCTEsICJjb3JydXB0ZWQgb3IgaW52YWxpZCBjZXJ0aWZp Y2F0ZSJ9LAotCXtFVW5zdXBwb3J0ZWRDZXJ0aWZpY2F0ZSwJRVVuc3VwcG9ydGVkQ2VydGlmaWNh dGUsCUVVbnN1cHBvcnRlZENlcnRpZmljYXRlLAkxLCAidW5zdXBwb3J0ZWQgY2VydGlmaWNhdGUg dHlwZSJ9LAotCXtFQ2VydGlmaWNhdGVSZXZva2VkLAlFQ2VydGlmaWNhdGVSZXZva2VkLAkJRUNl cnRpZmljYXRlUmV2b2tlZCwJCTEsICJyZXZva2VkIGNlcnRpZmljYXRlIn0sCi0Je0VDZXJ0aWZp Y2F0ZUV4cGlyZWQsCQlFQ2VydGlmaWNhdGVFeHBpcmVkLAkJRUNlcnRpZmljYXRlRXhwaXJlZCwJ CTEsICJleHBpcmVkIGNlcnRpZmljYXRlIn0sCi0Je0VDZXJ0aWZpY2F0ZVVua25vd24sCUVDZXJ0 aWZpY2F0ZVVua25vd24sCUVDZXJ0aWZpY2F0ZVVua25vd24sCTEsICJ1bmFjY2VwdGFibGUgY2Vy dGlmaWNhdGUifSwKLQl7RUlsbGVnYWxQYXJhbWV0ZXIsCQlFSWxsZWdhbFBhcmFtZXRlciwJCUVJ bGxlZ2FsUGFyYW1ldGVyLAkJMSwgImlsbGVnYWwgcGFyYW1ldGVyIn0sCi0Je0VVbmtub3duQ2Es CQkJRUhhbmRzaGFrZUZhaWx1cmUsCQlFVW5rbm93bkNhLAkJCTEsICJ1bmtub3duIGNlcnRpZmlj YXRlIGF1dGhvcml0eSJ9LAotCXtFQWNjZXNzRGVuaWVkLAkJRUhhbmRzaGFrZUZhaWx1cmUsCQlF QWNjZXNzRGVuaWVkLAkJMSwgImFjY2VzcyBkZW5pZWQifSwKLQl7RURlY29kZUVycm9yLAkJCUVJ bGxlZ2FsUGFyYW1ldGVyLAkJRURlY29kZUVycm9yLAkJCTEsICJlcnJvciBkZWNvZGluZyBtZXNz YWdlIn0sCi0Je0VEZWNyeXB0RXJyb3IsCQkJRUlsbGVnYWxQYXJhbWV0ZXIsCQlFRGVjcnlwdEVy cm9yLAkJCTEsICJlcnJvciBkZWNyeXB0aW5nIG1lc3NhZ2UifSwKLQl7RUV4cG9ydFJlc3RyaWN0 aW9uLAkJRUhhbmRzaGFrZUZhaWx1cmUsCQlFRXhwb3J0UmVzdHJpY3Rpb24sCQkxLCAiZXhwb3J0 IHJlc3RyaWN0aW9uIHZpb2xhdGVkIn0sCi0Je0VQcm90b2NvbFZlcnNpb24sCQlFSWxsZWdhbFBh cmFtZXRlciwJCUVQcm90b2NvbFZlcnNpb24sCQkxLCAicHJvdG9jb2wgdmVyc2lvbiBub3Qgc3Vw cG9ydGVkIn0sCi0Je0VJbnN1ZmZpY2llbnRTZWN1cml0eSwJRUhhbmRzaGFrZUZhaWx1cmUsCQlF SW5zdWZmaWNpZW50U2VjdXJpdHksCTEsICJzdHJvbmdlciBzZWN1cml0eSByb3V0aW5lcyByZXF1 aXJlZCJ9LAotCXtFSW50ZXJuYWxFcnJvciwJCQlFSGFuZHNoYWtlRmFpbHVyZSwJCUVJbnRlcm5h bEVycm9yLAkJCTEsICJpbnRlcm5hbCBlcnJvciJ9LAotCXtFVXNlckNhbmNlbGVkLAkJRUNsb3Nl Tm90aWZ5LAkJCUVVc2VyQ2FuY2VsZWQsCQkJMCwgImhhbmRzaGFrZSBjYW5jZWxlZCBieSB1c2Vy In0sCi0Je0VOb1JlbmVnb3RpYXRpb24sCQlFVW5leHBlY3RlZE1lc3NhZ2UsCUVOb1JlbmVnb3Rp YXRpb24sCQkwLCAibm8gcmVuZWdvdGlhdGlvbiJ9LAorCXtFQ2xvc2VOb3RpZnksCQkJMCwgImNs b3NlIG5vdGlmeSJ9LAorCXtFVW5leHBlY3RlZE1lc3NhZ2UsCQkxLCAidW5leHBlY3RlZCBtZXNz YWdlIn0sCisJe0VCYWRSZWNvcmRNYWMsCQkJMSwgImJhZCByZWNvcmQgbWFjIn0sCisJe0VEZWNy eXB0aW9uRmFpbGVkLAkJMSwgImRlY3J5cHRpb24gZmFpbGVkIn0sCisJe0VSZWNvcmRPdmVyZmxv dywJCTEsICJyZWNvcmQgdG9vIGxvbmcifSwKKwl7RURlY29tcHJlc3Npb25GYWlsdXJlLAkJMSwg ImRlY29tcHJlc3Npb24gZmFpbGVkIn0sCisJe0VIYW5kc2hha2VGYWlsdXJlLAkJMSwgImNvdWxk IG5vdCBuZWdvdGlhdGUgYWNjZXB0YWJsZSBzZWN1cml0eSBwYXJhbWV0ZXJzIn0sCisJe0VCYWRD ZXJ0aWZpY2F0ZSwJCTEsICJjb3JydXB0ZWQgb3IgaW52YWxpZCBjZXJ0aWZpY2F0ZSJ9LAorCXtF VW5zdXBwb3J0ZWRDZXJ0aWZpY2F0ZSwJMSwgInVuc3VwcG9ydGVkIGNlcnRpZmljYXRlIHR5cGUi fSwKKwl7RUNlcnRpZmljYXRlUmV2b2tlZCwJCTEsICJyZXZva2VkIGNlcnRpZmljYXRlIn0sCisJ e0VDZXJ0aWZpY2F0ZUV4cGlyZWQsCQkxLCAiZXhwaXJlZCBjZXJ0aWZpY2F0ZSJ9LAorCXtFQ2Vy dGlmaWNhdGVVbmtub3duLAkJMSwgInVuYWNjZXB0YWJsZSBjZXJ0aWZpY2F0ZSJ9LAorCXtFSWxs ZWdhbFBhcmFtZXRlciwJCTEsICJpbGxlZ2FsIHBhcmFtZXRlciJ9LAorCXtFVW5rbm93bkNhLAkJ CTEsICJ1bmtub3duIGNlcnRpZmljYXRlIGF1dGhvcml0eSJ9LAorCXtFQWNjZXNzRGVuaWVkLAkJ CTEsICJhY2Nlc3MgZGVuaWVkIn0sCisJe0VEZWNvZGVFcnJvciwJCQkxLCAiZXJyb3IgZGVjb2Rp bmcgbWVzc2FnZSJ9LAorCXtFRGVjcnlwdEVycm9yLAkJCTEsICJlcnJvciBkZWNyeXB0aW5nIG1l c3NhZ2UifSwKKwl7RUV4cG9ydFJlc3RyaWN0aW9uLAkJMSwgImV4cG9ydCByZXN0cmljdGlvbiB2 aW9sYXRlZCJ9LAorCXtFUHJvdG9jb2xWZXJzaW9uLAkJMSwgInByb3RvY29sIHZlcnNpb24gbm90 IHN1cHBvcnRlZCJ9LAorCXtFSW5zdWZmaWNpZW50U2VjdXJpdHksCQkxLCAic3Ryb25nZXIgc2Vj dXJpdHkgcm91dGluZXMgcmVxdWlyZWQifSwKKwl7RUludGVybmFsRXJyb3IsCQkxLCAiaW50ZXJu YWwgZXJyb3IifSwKKwl7RVVzZXJDYW5jZWxlZCwJCQkwLCAiaGFuZHNoYWtlIGNhbmNlbGVkIGJ5 IHVzZXIifSwKKwl7RU5vUmVuZWdvdGlhdGlvbiwJCTAsICJubyByZW5lZ290aWF0aW9uIn0sCiB9 OwogCiBlbnVtCkBAIC0yMjcsMTEgKzIxNSw4IEBACiBzdGF0aWMgdm9pZAlhbGVydEhhbmQoVGxz UmVjKiwgY2hhciAqKTsKIHN0YXRpYyBUbHNSZWMJKm5ld3RscyhDaGFuICpjKTsKIHN0YXRpYyBU bHNSZWMJKm1rdGxzcmVjKHZvaWQpOwotc3RhdGljIERpZ2VzdFN0YXRlKnNzbG1hY19tZDUodWNo YXIgKnAsIHVsb25nIGxlbiwgdWNoYXIgKmtleSwgdWxvbmcga2xlbiwgdWNoYXIgKmRpZ2VzdCwg RGlnZXN0U3RhdGUgKnMpOwotc3RhdGljIERpZ2VzdFN0YXRlKnNzbG1hY19zaGExKHVjaGFyICpw LCB1bG9uZyBsZW4sIHVjaGFyICprZXksIHVsb25nIGtsZW4sIHVjaGFyICpkaWdlc3QsIERpZ2Vz dFN0YXRlICpzKTsKIHN0YXRpYyBEaWdlc3RTdGF0ZSpub21hYyh1Y2hhciAqcCwgdWxvbmcgbGVu LCB1Y2hhciAqa2V5LCB1bG9uZyBrbGVuLCB1Y2hhciAqZGlnZXN0LCBEaWdlc3RTdGF0ZSAqcyk7 Ci1zdGF0aWMgaW50CXNzbFBhY2tBQUQodTY0aW50LCB1Y2hhciosIHVjaGFyKik7Ci1zdGF0aWMg aW50CXRsc1BhY2tBQUQodTY0aW50LCB1Y2hhciosIHVjaGFyKik7CitzdGF0aWMgaW50CXBhY2tB QUQodTY0aW50LCB1Y2hhciosIHVjaGFyKik7CiBzdGF0aWMgdm9pZAlwYWNrTWFjKFNlY3JldCos IHVjaGFyKiwgaW50LCB1Y2hhciosIGludCwgdWNoYXIqKTsKIHN0YXRpYyB2b2lkCXB1dDY0KHVj aGFyICpwLCB1NjRpbnQpOwogc3RhdGljIHZvaWQJcHV0MzIodWNoYXIgKnAsIHUzMmludCk7CkBA IC0yNTIsOCArMjM3LDcgQEAKIHN0YXRpYyBpbnQJYWVzZ2NtX2FlYWRfZW5jKFNlY3JldCAqc2Vj LCB1Y2hhciAqYWFkLCBpbnQgYWFkbGVuLCB1Y2hhciAqcmVjaXYsIHVjaGFyICpkYXRhLCBpbnQg bGVuKTsKIHN0YXRpYyBpbnQJYWVzZ2NtX2FlYWRfZGVjKFNlY3JldCAqc2VjLCB1Y2hhciAqYWFk LCBpbnQgYWFkbGVuLCB1Y2hhciAqcmVjaXYsIHVjaGFyICpkYXRhLCBpbnQgbGVuKTsKIHN0YXRp YyBpbnQJbm9lbmMoU2VjcmV0ICpzZWMsIHVjaGFyICpidWYsIGludCBuKTsKLXN0YXRpYyBpbnQJ c3NsdW5wYWQodWNoYXIgKmJ1ZiwgaW50IG4sIGludCBibG9jayk7Ci1zdGF0aWMgaW50CXRsc3Vu cGFkKHVjaGFyICpidWYsIGludCBuLCBpbnQgYmxvY2spOworc3RhdGljIGludAl1bnBhZCh1Y2hh ciAqYnVmLCBpbnQgbiwgaW50IGJsb2NrKTsKIHN0YXRpYyB2b2lkCWZyZWVTZWMoU2VjcmV0ICpz ZWMpOwogc3RhdGljIGNoYXIJKnRsc3N0YXRlKGludCBzKTsKIHN0YXRpYyB2b2lkCXBkdW1wKGlu dCwgdm9pZCosIGNoYXIqKTsKQEAgLTc1MCw3ICs3MzQsNyBAQAogCW5jb25zdW1lZCA9IFJlY0hk ckxlbjsKIAogCWlmKCh0ci0+aGFuZGluID09IDApICYmIChoZWFkZXJbMF0gJiAweDgwKSl7Ci0J CS8qIENvcGUgd2l0aCBhbiBTU0wzIENsaWVudEhlbGxvIGV4cHJlc3NlZCBpbiBTU0wyIHJlY29y ZCBmb3JtYXQuCisJCS8qIENvcGUgd2l0aCBhIFRMUyBDbGllbnRIZWxsbyBleHByZXNzZWQgaW4g U1NMMiByZWNvcmQgZm9ybWF0LgogCQkJVGhpcyBpcyBzZW50IGJ5IHNvbWUgY2xpZW50cyB0aGF0 IHdlIG11c3QgaW50ZXJvcGVyYXRlCiAJCQl3aXRoLCBzdWNoIGFzIEphdmEncyBKU1NFIGFuZCBN aWNyb3NvZnQncyBJbnRlcm5ldCBFeHBsb3Jlci4gKi8KIAkJbGVuID0gKGdldDE2KGhlYWRlcikg JiB+MHg4MDAwKSAtIDM7CkBAIC03NTcsMTMgKzc0MSwxMyBAQAogCQl0eXBlID0gaGVhZGVyWzJd OwogCQl2ZXIgPSBnZXQxNihoZWFkZXIgKyAzKTsKIAkJaWYodHlwZSAhPSBTU0wyQ2xpZW50SGVs bG8gfHwgbGVuIDwgMjIpCi0JCQlyY3ZFcnJvcih0ciwgRVByb3RvY29sVmVyc2lvbiwgImludmFs aWQgaW5pdGlhbCBTU0wyLWxpa2UgbWVzc2FnZSIpOwotCX1lbHNleyAgLyogbm9ybWFsIFNTTDMg cmVjb3JkIGZvcm1hdCAqLworCQkJcmN2RXJyb3IodHIsIEVVbmV4cGVjdGVkTWVzc2FnZSwgImlu dmFsaWQgaW5pdGlhbCBTU0wyLWxpa2UgbWVzc2FnZSIpOworCX1lbHNleyAgLyogbm9ybWFsIFRM UyByZWNvcmQgZm9ybWF0ICovCiAJCXR5cGUgPSBoZWFkZXJbMF07CiAJCXZlciA9IGdldDE2KGhl YWRlcisxKTsKIAkJbGVuID0gZ2V0MTYoaGVhZGVyKzMpOwogCX0KLQlpZih2ZXIgIT0gdHItPnZl cnNpb24gJiYgKHRyLT52ZXJzZXQgfHwgdmVyIDwgTWluUHJvdG9WZXJzaW9uIHx8IHZlciA+IE1h eFByb3RvVmVyc2lvbikpCisJaWYodmVyICE9IHRyLT52ZXJzaW9uICYmICh0ci0+dmVyc2V0IHx8 IHZlcj4+OCAhPSAweDAzKSkKIAkJcmN2RXJyb3IodHIsIEVQcm90b2NvbFZlcnNpb24sICJkZXZ0 bHMgZXhwZWN0ZWQgdmVyPSV4JXMsIHNhdyAobGVuPSVkKSB0eXBlPSV4IHZlcj0leCAnJS4xMnMn IiwKIAkJCXRyLT52ZXJzaW9uLCB0ci0+dmVyc2V0PyIvc2V0IjoiIiwgbGVuLCB0eXBlLCB2ZXIs IChjaGFyKiloZWFkZXIpOwogCWlmKGxlbiA+IE1heENpcGhlclJlY0xlbiB8fCBsZW4gPCAwKQpA QCAtODIzLDcgKzgwNyw3IEBACiAKIAkJLyogdXBkYXRlIGxlbmd0aCAqLwogCQlwdXQxNihoZWFk ZXIrMywgbGVuKTsKLQkJYWFkbGVuID0gKCp0ci0+cGFja0FBRCkoaW4tPnNlcSsrLCBoZWFkZXIs IGFhZCk7CisJCWFhZGxlbiA9IHBhY2tBQUQoaW4tPnNlcSsrLCBoZWFkZXIsIGFhZCk7CiAJCWlm KHNlYy0+YWVhZF9kZWMgIT0gbmlsKSB7CiAJCQlsZW4gPSAoKnNlYy0+YWVhZF9kZWMpKHNlYywg YWFkLCBhYWRsZW4sIHAgLSBpdmxlbiwgcCwgdW5wYWRfbGVuKTsKIAkJCWlmKGxlbiA8IDApCkBA IC05MTYsNyArOTAwLDcgQEAKIAkJCWRlY2hhbmRxKHRyKTsKIAkJfWVsc2V7CiAJCQl1bmxvY2so JnRyLT5ocWxvY2spOwotCQkJaWYodHItPnZlcnNldCAmJiB0ci0+dmVyc2lvbiAhPSBTU0wzVmVy c2lvbiAmJiAhd2FzZXJyb3IoKSl7CisJCQlpZih0ci0+dmVyc2V0ICYmICF3YXNlcnJvcigpKXsK IAkJCQlzZW5kQWxlcnQodHIsIEVOb1JlbmVnb3RpYXRpb24pOwogCQkJCXBvcGVycm9yKCk7CiAJ CQl9CkBAIC05MzMsNyArOTE3LDcgQEAKIAkJCX0KIAkJCS8qIFBhc3MgdGhlIFNTTDIgZm9ybWF0 IGRhdGEsIHNvIHRoYXQgdGhlIGhhbmRzaGFrZSBjb2RlIGNhbiBjb21wdXRlCiAJCQkJdGhlIGNv cnJlY3QgY2hlY2tzdW1zLiAgSFNTTDJDbGllbnRIZWxsbyA9IEhhbmRzaGFrZVR5cGUgOSBpcwot CQkJCXVudXNlZCBpbiBSRkMyMjQ2LiAqLworCQkJCXVudXNlZCBpbiBSRkM1MjQ2LiAqLwogCQkJ YiA9IHBhZGJsb2NrKGIsIDgpOwogCQkJYi0+cnBbMF0gPSBSSGFuZHNoYWtlOwogCQkJYi0+cnBb MV0gPSBIU1NMMkNsaWVudEhlbGxvOwpAQCAtOTQ2LDcgKzkzMCw3IEBACiAJCQlkZWNoYW5kcSh0 cik7CiAJCX1lbHNlewogCQkJdW5sb2NrKCZ0ci0+aHFsb2NrKTsKLQkJCWlmKHRyLT52ZXJzZXQg JiYgdHItPnZlcnNpb24gIT0gU1NMM1ZlcnNpb24gJiYgIXdhc2Vycm9yKCkpeworCQkJaWYodHIt PnZlcnNldCAmJiAhd2FzZXJyb3IoKSl7CiAJCQkJc2VuZEFsZXJ0KHRyLCBFTm9SZW5lZ290aWF0 aW9uKTsKIAkJCQlwb3BlcnJvcigpOwogCQkJfQpAQCAtMTMxNCw3ICsxMjk4LDcgQEAKIAkJcHV0 MTYocCszLCBuKTsKIAogCQlpZihzZWMgIT0gbmlsKXsKLQkJCWFhZGxlbiA9ICgqdHItPnBhY2tB QUQpKG91dC0+c2VxKyssIHAsIGFhZCk7CisJCQlhYWRsZW4gPSBwYWNrQUFEKG91dC0+c2VxKyss IHAsIGFhZCk7CiAJCQlpZihzZWMtPmFlYWRfZW5jICE9IG5pbCkKIAkJCQluID0gKCpzZWMtPmFl YWRfZW5jKShzZWMsIGFhZCwgYWFkbGVuLCBwICsgUmVjSGRyTGVuLCBwICsgUmVjSGRyTGVuICsg aXZsZW4sIG4pICsgaXZsZW47CiAJCQllbHNlIHsKQEAgLTEzOTAsNDIgKzEzNzQsMzQgQEAKIHsK IAljaGFyCSpuYW1lOwogCWludAltYWNsZW47Ci0Jdm9pZAkoKmluaXRrZXkpKEhhc2hhbGcgKiwg aW50LCBTZWNyZXQgKiwgdWNoYXIqKTsKKwl2b2lkCSgqaW5pdGtleSkoSGFzaGFsZyAqLCBTZWNy ZXQgKiwgdWNoYXIqKTsKIH07CiAKIHN0YXRpYyB2b2lkCi1pbml0bWQ1a2V5KEhhc2hhbGcgKmhh LCBpbnQgdmVyc2lvbiwgU2VjcmV0ICpzLCB1Y2hhciAqcCkKK2luaXRtZDVrZXkoSGFzaGFsZyAq aGEsIFNlY3JldCAqcywgdWNoYXIgKnApCiB7CiAJcy0+bWFjbGVuID0gaGEtPm1hY2xlbjsKLQlp Zih2ZXJzaW9uID09IFNTTDNWZXJzaW9uKQotCQlzLT5tYWMgPSBzc2xtYWNfbWQ1OwotCWVsc2UK LQkJcy0+bWFjID0gaG1hY19tZDU7CisJcy0+bWFjID0gaG1hY19tZDU7CiAJbWVtbW92ZShzLT5t YWNrZXksIHAsIGhhLT5tYWNsZW4pOwogfQogCiBzdGF0aWMgdm9pZAotaW5pdGNsZWFybWFjKEhh c2hhbGcgKiwgaW50LCBTZWNyZXQgKnMsIHVjaGFyICopCitpbml0Y2xlYXJtYWMoSGFzaGFsZyAq LCBTZWNyZXQgKnMsIHVjaGFyICopCiB7CiAJcy0+bWFjID0gbm9tYWM7CiB9CiAKIHN0YXRpYyB2 b2lkCi1pbml0c2hhMWtleShIYXNoYWxnICpoYSwgaW50IHZlcnNpb24sIFNlY3JldCAqcywgdWNo YXIgKnApCitpbml0c2hhMWtleShIYXNoYWxnICpoYSwgU2VjcmV0ICpzLCB1Y2hhciAqcCkKIHsK IAlzLT5tYWNsZW4gPSBoYS0+bWFjbGVuOwotCWlmKHZlcnNpb24gPT0gU1NMM1ZlcnNpb24pCi0J CXMtPm1hYyA9IHNzbG1hY19zaGExOwotCWVsc2UKLQkJcy0+bWFjID0gaG1hY19zaGExOworCXMt Pm1hYyA9IGhtYWNfc2hhMTsKIAltZW1tb3ZlKHMtPm1hY2tleSwgcCwgaGEtPm1hY2xlbik7CiB9 CiAKIHN0YXRpYyB2b2lkCi1pbml0c2hhMl8yNTZrZXkoSGFzaGFsZyAqaGEsIGludCB2ZXJzaW9u LCBTZWNyZXQgKnMsIHVjaGFyICpwKQoraW5pdHNoYTJfMjU2a2V5KEhhc2hhbGcgKmhhLCBTZWNy ZXQgKnMsIHVjaGFyICpwKQogewotCWlmKHZlcnNpb24gPT0gU1NMM1ZlcnNpb24pCi0JCWVycm9y KCJzaGEyNTYgY2Fubm90IGJlIHVzZWQgd2l0aCBTU0wiKTsKIAlzLT5tYWNsZW4gPSBoYS0+bWFj bGVuOwogCXMtPm1hYyA9IGhtYWNfc2hhMl8yNTY7CiAJbWVtbW92ZShzLT5tYWNrZXksIHAsIGhh LT5tYWNsZW4pOwpAQCAtMTY0MSwxMCArMTYxNyw2IEBACiAJCW0gPSBzdHJ0b2woY2ItPmZbMV0s IG5pbCwgMCk7CiAJCWlmKG0gPCBNaW5Qcm90b1ZlcnNpb24gfHwgbSA+IE1heFByb3RvVmVyc2lv bikKIAkJCWVycm9yKCJ1bnN1cHBvcnRlZCB2ZXJzaW9uIik7Ci0JCWlmKG0gPT0gU1NMM1ZlcnNp b24pCi0JCQl0ci0+cGFja0FBRCA9IHNzbFBhY2tBQUQ7Ci0JCWVsc2UKLQkJCXRyLT5wYWNrQUFE ID0gdGxzUGFja0FBRDsKIAkJdHItPnZlcnNldCA9IDE7CiAJCXRyLT52ZXJzaW9uID0gbTsKIAl9 ZWxzZSBpZihzdHJjbXAoY2ItPmZbMF0sICJzZWNyZXQiKSA9PSAwKXsKQEAgLTE2ODUsOCArMTY1 Nyw4IEBACiAJCWlmKCFoYS0+aW5pdGtleSB8fCAhZWEtPmluaXRrZXkpCiAJCQllcnJvcigibWlz aW1wbGVtZW50ZWQgc2VjcmV0IGFsZ29yaXRobSIpOwogCi0JCSgqaGEtPmluaXRrZXkpKGhhLCB0 ci0+dmVyc2lvbiwgdG9zLCAmeFswXSk7Ci0JCSgqaGEtPmluaXRrZXkpKGhhLCB0ci0+dmVyc2lv biwgdG9jLCAmeFtoYS0+bWFjbGVuXSk7CisJCSgqaGEtPmluaXRrZXkpKGhhLCB0b3MsICZ4WzBd KTsKKwkJKCpoYS0+aW5pdGtleSkoaGEsIHRvYywgJnhbaGEtPm1hY2xlbl0pOwogCQkoKmVhLT5p bml0a2V5KShlYSwgdG9zLCAmeFsyICogaGEtPm1hY2xlbl0sICZ4WzIgKiBoYS0+bWFjbGVuICsg MiAqIGVhLT5rZXlsZW5dKTsKIAkJKCplYS0+aW5pdGtleSkoZWEsIHRvYywgJnhbMiAqIGhhLT5t YWNsZW4gKyBlYS0+a2V5bGVuXSwgJnhbMiAqIGhhLT5tYWNsZW4gKyAyICogZWEtPmtleWxlbiAr IGVhLT5pdmxlbl0pOwogCkBAIC0xNzAxLDEzICsxNjczLDYgQEAKIAkJCXRyLT5pbi5uZXcgPSB0 b2M7CiAJCQl0ci0+b3V0Lm5ldyA9IHRvczsKIAkJfQotCQlpZih0ci0+dmVyc2lvbiA9PSBTU0wz VmVyc2lvbil7Ci0JCQl0b2MtPnVucGFkID0gc3NsdW5wYWQ7Ci0JCQl0b3MtPnVucGFkID0gc3Ns dW5wYWQ7Ci0JCX1lbHNlewotCQkJdG9jLT51bnBhZCA9IHRsc3VucGFkOwotCQkJdG9zLT51bnBh ZCA9IHRsc3VucGFkOwotCQl9CiAJCXRvYy0+ZW5jYWxnID0gZWEtPm5hbWU7CiAJCXRvYy0+aGFz aGFsZyA9IGhhLT5uYW1lOwogCQl0b3MtPmVuY2FsZyA9IGVhLT5uYW1lOwpAQCAtMTg3OSwxNyAr MTg0NCwxMiBAQAogaWYodHItPmRlYnVnKXBwcmludCgic2VuZEFsZXJ0ICVkXG4iLCBlcnIpOwog CWZhdGFsID0gMTsKIAltc2cgPSAidGxzIHVua25vd24gYWxlcnQiOwotCWZvcihpPTA7IGkgPCBu ZWxlbSh0bHNlcnJzKTsgaSsrKSB7Ci0JCWlmKHRsc2VycnNbaV0uZXJyID09IGVycikgeworCWZv cihpPTA7IGkgPCBuZWxlbSh0bHNlcnJzKTsgaSsrKQorCQlpZih0bHNlcnJzW2ldLmVyciA9PSBl cnIpewogCQkJbXNnID0gdGxzZXJyc1tpXS5tc2c7Ci0JCQlpZih0ci0+dmVyc2lvbiA9PSBTU0wz VmVyc2lvbikKLQkJCQllcnIgPSB0bHNlcnJzW2ldLnNzbGVycjsKLQkJCWVsc2UKLQkJCQllcnIg PSB0bHNlcnJzW2ldLnRsc2VycjsKIAkJCWZhdGFsID0gdGxzZXJyc1tpXS5mYXRhbDsKIAkJCWJy ZWFrOwogCQl9Ci0JfQogCiAJaWYoIXdhc2Vycm9yKCkpewogCQliID0gYWxsb2NiKDIpOwpAQCAt MjA2MSw3ICsyMDIxLDcgQEAKIH0KIAogc3RhdGljIGludAotdGxzdW5wYWQodWNoYXIgKmJ1Ziwg aW50IG4sIGludCBibG9jaykKK3VucGFkKHVjaGFyICpidWYsIGludCBuLCBpbnQgYmxvY2spCiB7 CiAJaW50IHBhZCwgbm47CiAKQEAgLTIwNzYsMTggKzIwMzYsNiBAQAogfQogCiBzdGF0aWMgaW50 Ci1zc2x1bnBhZCh1Y2hhciAqYnVmLCBpbnQgbiwgaW50IGJsb2NrKQotewotCWludCBwYWQsIG5u OwotCi0JcGFkID0gYnVmW24gLSAxXTsKLQlubiA9IG4gLSAxIC0gcGFkOwotCWlmKG5uIDw9IDAg fHwgbiAlIGJsb2NrKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIG5uOwotfQotCi1zdGF0aWMgaW50 CiBibG9ja3BhZCh1Y2hhciAqYnVmLCBpbnQgbiwgaW50IGJsb2NrKQogewogCWludCBwYWQsIG5u OwpAQCAtMjExMiw3ICsyMDYwLDcgQEAKIGRlczNkZWMoU2VjcmV0ICpzZWMsIHVjaGFyICpidWYs IGludCBuKQogewogCWRlczNDQkNkZWNyeXB0KGJ1Ziwgbiwgc2VjLT5lbmNrZXkpOwotCXJldHVy biAoKnNlYy0+dW5wYWQpKGJ1ZiwgbiwgOCk7CisJcmV0dXJuIHVucGFkKGJ1ZiwgbiwgOCk7CiB9 CiAKIHN0YXRpYyBpbnQKQEAgLTIxMjcsNyArMjA3NSw3IEBACiBhZXNkZWMoU2VjcmV0ICpzZWMs IHVjaGFyICpidWYsIGludCBuKQogewogCWFlc0NCQ2RlY3J5cHQoYnVmLCBuLCBzZWMtPmVuY2tl eSk7Ci0JcmV0dXJuICgqc2VjLT51bnBhZCkoYnVmLCBuLCAxNik7CisJcmV0dXJuIHVucGFkKGJ1 ZiwgbiwgMTYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjIxMyw3MSArMjE2MSw4IEBACiAJcmV0 dXJuIG5pbDsKIH0KIAotLyoKLSAqIHNzbG1hYzogbWFjIGNhbGN1bGF0aW9ucyBmb3Igc3NsIDMu MCBvbmx5OyB0bHMgMS4wIHVzZXMgdGhlIHN0YW5kYXJkIGhtYWMuCi0gKi8KLXN0YXRpYyBEaWdl c3RTdGF0ZSoKLXNzbG1hY194KHVjaGFyICpwLCB1bG9uZyBsZW4sIHVjaGFyICprZXksIHVsb25n IGtsZW4sIHVjaGFyICpkaWdlc3QsIERpZ2VzdFN0YXRlICpzLAotCURpZ2VzdFN0YXRlKigqeCko dWNoYXIqLCB1bG9uZywgdWNoYXIqLCBEaWdlc3RTdGF0ZSopLCBpbnQgeGxlbiwgaW50IHBhZGxl bikKLXsKLQlpbnQgaTsKLQl1Y2hhciBwYWRbNDhdLCBpbm5lcmRpZ2VzdFsyMF07Ci0KLQlpZih4 bGVuID4gc2l6ZW9mKGlubmVyZGlnZXN0KQotCXx8IHBhZGxlbiA+IHNpemVvZihwYWQpKQotCQly ZXR1cm4gbmlsOwotCi0JaWYoa2xlbj42NCkKLQkJcmV0dXJuIG5pbDsKLQotCS8qIGZpcnN0IHRp bWUgdGhyb3VnaCAqLwotCWlmKHMgPT0gbmlsKXsKLQkJZm9yKGk9MDsgaTxwYWRsZW47IGkrKykK LQkJCXBhZFtpXSA9IDB4MzY7Ci0JCXMgPSAoKngpKGtleSwga2xlbiwgbmlsLCBuaWwpOwotCQlz ID0gKCp4KShwYWQsIHBhZGxlbiwgbmlsLCBzKTsKLQkJaWYocyA9PSBuaWwpCi0JCQlyZXR1cm4g bmlsOwotCX0KLQotCXMgPSAoKngpKHAsIGxlbiwgbmlsLCBzKTsKLQlpZihkaWdlc3QgPT0gbmls KQotCQlyZXR1cm4gczsKLQotCS8qIGxhc3QgdGltZSB0aHJvdWdoICovCi0JZm9yKGk9MDsgaTxw YWRsZW47IGkrKykKLQkJcGFkW2ldID0gMHg1YzsKLQkoKngpKG5pbCwgMCwgaW5uZXJkaWdlc3Qs IHMpOwotCXMgPSAoKngpKGtleSwga2xlbiwgbmlsLCBuaWwpOwotCXMgPSAoKngpKHBhZCwgcGFk bGVuLCBuaWwsIHMpOwotCSgqeCkoaW5uZXJkaWdlc3QsIHhsZW4sIGRpZ2VzdCwgcyk7Ci0JcmV0 dXJuIG5pbDsKLX0KLQotc3RhdGljIERpZ2VzdFN0YXRlKgotc3NsbWFjX3NoYTEodWNoYXIgKnAs IHVsb25nIGxlbiwgdWNoYXIgKmtleSwgdWxvbmcga2xlbiwgdWNoYXIgKmRpZ2VzdCwgRGlnZXN0 U3RhdGUgKnMpCi17Ci0JcmV0dXJuIHNzbG1hY194KHAsIGxlbiwga2V5LCBrbGVuLCBkaWdlc3Qs IHMsIHNoYTEsIFNIQTFkbGVuLCA0MCk7Ci19Ci0KLXN0YXRpYyBEaWdlc3RTdGF0ZSoKLXNzbG1h Y19tZDUodWNoYXIgKnAsIHVsb25nIGxlbiwgdWNoYXIgKmtleSwgdWxvbmcga2xlbiwgdWNoYXIg KmRpZ2VzdCwgRGlnZXN0U3RhdGUgKnMpCi17Ci0JcmV0dXJuIHNzbG1hY194KHAsIGxlbiwga2V5 LCBrbGVuLCBkaWdlc3QsIHMsIG1kNSwgTUQ1ZGxlbiwgNDgpOwotfQotCiBzdGF0aWMgaW50Ci1z c2xQYWNrQUFEKHU2NGludCBzZXEsIHVjaGFyICpoZHIsIHVjaGFyICphYWQpCi17Ci0JcHV0NjQo YWFkLCBzZXEpOwotCWFhZFs4XSA9IGhkclswXTsKLQlhYWRbOV0gPSBoZHJbM107Ci0JYWFkWzEw XSA9IGhkcls0XTsKLQlyZXR1cm4gMTE7Ci19Ci0KLXN0YXRpYyBpbnQKLXRsc1BhY2tBQUQodTY0 aW50IHNlcSwgdWNoYXIgKmhkciwgdWNoYXIgKmFhZCkKK3BhY2tBQUQodTY0aW50IHNlcSwgdWNo YXIgKmhkciwgdWNoYXIgKmFhZCkKIHsKIAlwdXQ2NChhYWQsIHNlcSk7CiAJYWFkWzhdID0gaGRy WzBdOwotLS0gYS8vc3lzL3NyYy9saWJzZWMvcG9ydC90bHNoYW5kLmMKKysrIGIvL3N5cy9zcmMv bGlic2VjL3BvcnQvdGxzaGFuZC5jCkBAIC04LDE0ICs4LDEzIEBACiAvLwkJY2xpZW50L3NlcnZl ciAtIG1haW4gaGFuZHNoYWtlIHByb3RvY29sIGRlZmluaXRpb24KIC8vCQltZXNzYWdlIGZ1bmN0 aW9ucyAtIGZvcm1hdGluZyBoYW5kc2hha2UgbWVzc2FnZXMKIC8vCQljaXBoZXIgY2hvaWNlcyAt IGNhdGFsb2cgb2YgZGlnZXN0IGFuZCBlbmNyeXB0IGFsZ29yaXRobXMKLS8vCQlzZWN1cml0eSBm dW5jdGlvbnMgLSBQS0NTIzEsIHNzbEhNQUMsIHNlc3Npb24ga2V5Z2VuCisvLwkJc2VjdXJpdHkg ZnVuY3Rpb25zIC0gUEtDUyMxLCBzZXNzaW9uIGtleWdlbgogLy8JCWdlbmVyYWwgdXRpbGl0eSBm dW5jdGlvbnMgLSBtYWxsb2MsIHNlcmlhbGl6YXRpb24KLS8vIFRoZSBoYW5kc2hha2UgcHJvdG9j b2wgYnVpbGRzIG9uIHRoZSBUTFMvU1NMMyByZWNvcmQgbGF5ZXIgcHJvdG9jb2wsCi0vLyB3aGlj aCBpcyBpbXBsZW1lbnRlZCBpbiBrZXJuZWwgZGV2aWNlICNhLiAgU2VlIGFsc28gL2xpYi9yZmMv cmZjMjI0Ni4KKy8vIFRoZSBoYW5kc2hha2UgcHJvdG9jb2wgYnVpbGRzIG9uIHRoZSBUTFMgcmVj b3JkIGxheWVyIHByb3RvY29sLAorLy8gd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4ga2VybmVsIGRl dmljZSAjYS4gIFNlZSBhbHNvIC9saWIvcmZjL3JmYzUyNDYuCiAKIGVudW0gewotCVRMU0Zpbmlz aGVkTGVuID0gMTIsCi0JU1NMM0ZpbmlzaGVkTGVuID0gTUQ1ZGxlbitTSEExZGxlbiwKKwlGaW5p c2hlZExlbiA9IDEyLAogCU1heEtleURhdGEgPSAxNjAsCS8vIGFtb3VudCBvZiBzZWNyZXQgd2Ug bWF5IG5lZWQKIAlNQVhkbGVuID0gU0hBMl81MTJkbGVuLAogCVJhbmRvbVNpemUgPSAzMiwKQEAg LTQ3LDExICs0Niw2IEBACiAJdm9pZCAoKmluaXQpKG1waW50ICpwLCBtcGludCAqYSwgbXBpbnQg KmIsIG1waW50ICp4LCBtcGludCAqeSwgbXBpbnQgKm4sIG1waW50ICpoKTsKIH0gTmFtZWRjdXJ2 ZTsKIAotdHlwZWRlZiBzdHJ1Y3QgRmluaXNoZWR7Ci0JdWNoYXIgdmVyaWZ5W1NTTDNGaW5pc2hl ZExlbl07Ci0JaW50IG47Ci19IEZpbmlzaGVkOwotCiB0eXBlZGVmIHN0cnVjdCBIYW5kc2hha2VI YXNoIHsKIAlNRDVzdGF0ZQltZDU7CiAJU0hBc3RhdGUJc2hhMTsKQEAgLTgxLDcgKzc1LDYgQEAK IAkvLyBieXRlIGdlbmVyYXRpb24gYW5kIGhhbmRzaGFrZSBjaGVja3N1bQogCXZvaWQgKCpwcmYp KHVjaGFyKiwgaW50LCB1Y2hhciosIGludCwgY2hhciosIHVjaGFyKiwgaW50KTsKIAl2b2lkICgq c2V0RmluaXNoZWQpKFRsc1NlYyosIEhhbmRzaGFrZUhhc2gsIHVjaGFyKiwgaW50KTsKLQlpbnQg bmZpbjsKIH07CiAKIHR5cGVkZWYgc3RydWN0IFRsc0Nvbm5lY3Rpb257CkBAIC05OSw3ICs5Miw3 IEBACiAKIAkvLyBmb3IgZmluaXNoZWQgbWVzc2FnZXMKIAlIYW5kc2hha2VIYXNoCWhhbmRoYXNo OwotCUZpbmlzaGVkCWZpbmlzaGVkOworCXVjaGFyCQlmaW5pc2hlZFtGaW5pc2hlZExlbl07CiAK IAl1Y2hhciAqc2VuZHA7CiAJdWNoYXIgYnVmWzE8PDE2XTsKQEAgLTE1MiwxOSArMTQ1LDE3IEBA CiAJCQlpbnQgc2lnYWxnOwogCQkJQnl0ZXMgKnNpZ25hdHVyZTsKIAkJfSBjZXJ0aWZpY2F0ZVZl cmlmeTsJCQotCQlGaW5pc2hlZCBmaW5pc2hlZDsKKwkJdWNoYXIgZmluaXNoZWRbRmluaXNoZWRM ZW5dOwogCX0gdTsKIH0gTXNnOwogCiAKIGVudW0gewotCVNTTDNWZXJzaW9uCT0gMHgwMzAwLAog CVRMUzEwVmVyc2lvbgk9IDB4MDMwMSwKIAlUTFMxMVZlcnNpb24JPSAweDAzMDIsCiAJVExTMTJW ZXJzaW9uCT0gMHgwMzAzLAogCVByb3RvY29sVmVyc2lvbgk9IFRMUzEyVmVyc2lvbiwJLy8gbWF4 aW11bSB2ZXJzaW9uIHdlIHNwZWFrCi0JTWluUHJvdG9WZXJzaW9uCT0gMHgwMzAwLAkvLyBsaW1p dHMgb24gdmVyc2lvbiB3ZSBhY2NlcHQKLQlNYXhQcm90b1ZlcnNpb24JPSAweDAzZmYsCisJTWlu UHJvdG9WZXJzaW9uCT0gVExTMTBWZXJzaW9uLAkvLyBsaW1pdHMgb24gdmVyc2lvbiB3ZSBhY2Nl cHQKIH07CiAKIC8vIGhhbmRzaGFrZSB0eXBlCkBAIC0xOTIsNyArMTgzLDYgQEAKIAlFUmVjb3Jk T3ZlcmZsb3cgPSAyMiwKIAlFRGVjb21wcmVzc2lvbkZhaWx1cmUgPSAzMCwKIAlFSGFuZHNoYWtl RmFpbHVyZSA9IDQwLAotCUVOb0NlcnRpZmljYXRlID0gNDEsCiAJRUJhZENlcnRpZmljYXRlID0g NDIsCiAJRVVuc3VwcG9ydGVkQ2VydGlmaWNhdGUgPSA0MywKIAlFQ2VydGlmaWNhdGVSZXZva2Vk ID0gNDQsCkBAIC0zNjUsOSArMzU1LDggQEAKIHN0YXRpYyBpbnQJbXNnU2VuZChUbHNDb25uZWN0 aW9uICpjLCBNc2cgKm0sIGludCBhY3QpOwogc3RhdGljIHZvaWQJdGxzRXJyb3IoVGxzQ29ubmVj dGlvbiAqYywgaW50IGVyciwgY2hhciAqbXNnLCAuLi4pOwogI3ByYWdtYQl2YXJhcmdjayBhcmdw b3MJdGxzRXJyb3IgMwotc3RhdGljIGludCBzZXRWZXJzaW9uKFRsc0Nvbm5lY3Rpb24gKmMsIGlu dCB2ZXJzaW9uKTsKK3N0YXRpYyBpbnQgc2V0VmVyc2lvbihUbHNDb25uZWN0aW9uICpjLCBpbnQg dmVyc2lvbiwgaW50IGNsaWVudCk7CiBzdGF0aWMgaW50IHNldFNlY3JldHMoVGxzQ29ubmVjdGlv biAqYywgaW50IGlzY2xpZW50KTsKLXN0YXRpYyBpbnQgZmluaXNoZWRNYXRjaChUbHNDb25uZWN0 aW9uICpjLCBGaW5pc2hlZCAqZik7CiBzdGF0aWMgdm9pZCB0bHNDb25uZWN0aW9uRnJlZShUbHND b25uZWN0aW9uICpjKTsKIAogc3RhdGljIGludCBpc0RIRShpbnQgdGxzaWQpOwpAQCAtMzk0LDcg KzM4Myw2IEBACiBzdGF0aWMgQnl0ZXMqCXRsc1NlY0RIRWMoVGxzU2VjICpzZWMsIEJ5dGVzICpw LCBCeXRlcyAqZywgQnl0ZXMgKllzKTsKIHN0YXRpYyBCeXRlcyoJdGxzU2VjRUNESEVjKFRsc1Nl YyAqc2VjLCBpbnQgY3VydmUsIEJ5dGVzICpZcyk7CiBzdGF0aWMgdm9pZAl0bHNTZWNWZXJzKFRs c1NlYyAqc2VjLCBpbnQgdik7Ci1zdGF0aWMgaW50CXRsc1NlY0ZpbmlzaGVkKFRsc1NlYyAqc2Vj LCBIYW5kc2hha2VIYXNoIGhzaCwgdWNoYXIgKmZpbiwgaW50IG5maW4sIGludCBpc2NsaWVudCk7 CiBzdGF0aWMgdm9pZAlzZXRNYXN0ZXJTZWNyZXQoVGxzU2VjICpzZWMsIEJ5dGVzICpwbSk7CiBz dGF0aWMgaW50CWRpZ2VzdERIcGFyYW1zKFRsc1NlYyAqc2VjLCBCeXRlcyAqcGFyLCB1Y2hhciBk aWdlc3RbTUFYZGxlbl0sIGludCBzaWdhbGcpOwogc3RhdGljIGNoYXIqCXZlcmlmeURIcGFyYW1z KFRsc1NlYyAqc2VjLCBCeXRlcyAqcGFyLCBCeXRlcyAqY2VydCwgQnl0ZXMgKnNpZywgaW50IHNp Z2FsZyk7CkBAIC00NTEsNyArNDM5LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlkYXRhID0gLTE7 Ci0JZnByaW50KGN0bCwgImZkICVkIDB4JXgiLCBmZCwgUHJvdG9jb2xWZXJzaW9uKTsKKwlmcHJp bnQoY3RsLCAiZmQgJWQgMHgleCIsIGZkLCBNaW5Qcm90b1ZlcnNpb24pOwogCXRscyA9IHRsc1Nl cnZlcjIoY3RsLCBoYW5kLAogCQljb25uLT5jZXJ0LCBjb25uLT5jZXJ0bGVuLAogCQljb25uLT5w c2tJRCwgY29ubi0+cHNrLCBjb25uLT5wc2tsZW4sCkBAIC01MTEsMjggKzQ5OSwyNiBAQAogCX0K IAogCS8vIEVsbGlwdGljIEN1cnZlcyAoYWxzbyBjYWxsZWQgU3VwcG9ydGVkIEdyb3VwcykKLQlp ZihQcm90b2NvbFZlcnNpb24gPj0gVExTMTBWZXJzaW9uKXsKLQkJbSA9IHAgLSBiOwotCQliID0g ZXJlYWxsb2MoYiwgbSArIDIrMisyK25lbGVtKG5hbWVkY3VydmVzKSoyICsgMisyKzErbmVsZW0o cG9pbnRmb3JtYXRzKSk7Ci0JCXAgPSBiICsgbTsKKwltID0gcCAtIGI7CisJYiA9IGVyZWFsbG9j KGIsIG0gKyAyKzIrMituZWxlbShuYW1lZGN1cnZlcykqMiArIDIrMisxK25lbGVtKHBvaW50Zm9y bWF0cykpOworCXAgPSBiICsgbTsKIAotCQluID0gbmVsZW0obmFtZWRjdXJ2ZXMpOwotCQlwdXQx NihwLCBFeHRlYyksIHAgKz0gMjsJLyogVHlwZTogZWxsaXB0aWNfY3VydmVzIC8gc3VwcG9ydGVk X2dyb3VwcyAqLwotCQlwdXQxNihwLCAobisxKSoyKSwgcCArPSAyOwkvKiBMZW5ndGggKi8KLQkJ cHV0MTYocCwgbioyKSwgcCArPSAyOwkJLyogRWxsaXB0aWMgQ3VydmVzIExlbmd0aCAqLwotCQlm b3IoaT0wOyBpIDwgbjsgaSsrKXsJCS8qIEVsbGlwdGljIEN1cnZlcyAqLwotCQkJcHV0MTYocCwg bmFtZWRjdXJ2ZXNbaV0udGxzaWQpOwotCQkJcCArPSAyOwotCQl9Ci0KLQkJbiA9IG5lbGVtKHBv aW50Zm9ybWF0cyk7Ci0JCXB1dDE2KHAsIEV4dGVjcCksIHAgKz0gMjsJLyogVHlwZTogZWNfcG9p bnRfZm9ybWF0cyAqLwotCQlwdXQxNihwLCBuKzEpLCBwICs9IDI7CQkvKiBMZW5ndGggKi8KLQkJ KnArKyA9IG47CQkJLyogRUMgcG9pbnQgZm9ybWF0cyBMZW5ndGggKi8KLQkJZm9yKGk9MDsgaSA8 IG47IGkrKykJCS8qIEVDIHBvaW50IGZvcm1hdHMgKi8KLQkJCSpwKysgPSBwb2ludGZvcm1hdHNb aV07CisJbiA9IG5lbGVtKG5hbWVkY3VydmVzKTsKKwlwdXQxNihwLCBFeHRlYyksIHAgKz0gMjsJ LyogVHlwZTogZWxsaXB0aWNfY3VydmVzIC8gc3VwcG9ydGVkX2dyb3VwcyAqLworCXB1dDE2KHAs IChuKzEpKjIpLCBwICs9IDI7CS8qIExlbmd0aCAqLworCXB1dDE2KHAsIG4qMiksIHAgKz0gMjsJ CS8qIEVsbGlwdGljIEN1cnZlcyBMZW5ndGggKi8KKwlmb3IoaT0wOyBpIDwgbjsgaSsrKXsJCS8q IEVsbGlwdGljIEN1cnZlcyAqLworCQlwdXQxNihwLCBuYW1lZGN1cnZlc1tpXS50bHNpZCk7CisJ CXAgKz0gMjsKIAl9CiAKKwluID0gbmVsZW0ocG9pbnRmb3JtYXRzKTsKKwlwdXQxNihwLCBFeHRl Y3ApLCBwICs9IDI7CS8qIFR5cGU6IGVjX3BvaW50X2Zvcm1hdHMgKi8KKwlwdXQxNihwLCBuKzEp LCBwICs9IDI7CQkvKiBMZW5ndGggKi8KKwkqcCsrID0gbjsJCQkvKiBFQyBwb2ludCBmb3JtYXRz IExlbmd0aCAqLworCWZvcihpPTA7IGkgPCBuOyBpKyspCQkvKiBFQyBwb2ludCBmb3JtYXRzICov CisJCSpwKysgPSBwb2ludGZvcm1hdHNbaV07CisKIAkvLyBzaWduYXR1cmUgYWxnb3JpdGhtcwog CWlmKFByb3RvY29sVmVyc2lvbiA+PSBUTFMxMlZlcnNpb24pewogCQluID0gbmVsZW0oc2lnYWxn cyk7CkBAIC01OTEsNyArNTc3LDcgQEAKIAkJY2xvc2UoY3RsKTsKIAkJcmV0dXJuIC0xOwogCX0K LQlmcHJpbnQoY3RsLCAiZmQgJWQgMHgleCIsIGZkLCBQcm90b2NvbFZlcnNpb24pOworCWZwcmlu dChjdGwsICJmZCAlZCAweCV4IiwgZmQsIE1pblByb3RvVmVyc2lvbik7CiAJZXh0ID0gdGxzQ2xp ZW50RXh0ZW5zaW9ucyhjb25uLCAmbik7CiAJdGxzID0gdGxzQ2xpZW50MihjdGwsIGhhbmQsCiAJ CWNvbm4tPmNlcnQsIGNvbm4tPmNlcnRsZW4sIApAQCAtNzEzLDggKzY5OSw4IEBACiAJfQogCWlm KHRyYWNlKQogCQl0cmFjZSgiQ2xpZW50SGVsbG8gdmVyc2lvbiAleFxuIiwgbS51LmNsaWVudEhl bGxvLnZlcnNpb24pOwotCWlmKHNldFZlcnNpb24oYywgbS51LmNsaWVudEhlbGxvLnZlcnNpb24p IDwgMCkgewotCQl0bHNFcnJvcihjLCBFSWxsZWdhbFBhcmFtZXRlciwgImluY29tcGF0aWJsZSB2 ZXJzaW9uIik7CisJaWYoc2V0VmVyc2lvbihjLCBtLnUuY2xpZW50SGVsbG8udmVyc2lvbiwgMCkg PCAwKXsKKwkJdGxzRXJyb3IoYywgRVByb3RvY29sVmVyc2lvbiwgImluY29tcGF0aWJsZSB2ZXJz aW9uIik7CiAJCWdvdG8gRXJyOwogCX0KIAlpZihjLT52ZXJzaW9uIDwgUHJvdG9jb2xWZXJzaW9u CkBAIC04NDksMTAgKzgzNSw3IEBACiAJfQogCiAJLyogbm8gQ2VydGlmaWNhdGVWZXJpZnk7IHNr aXAgdG8gRmluaXNoZWQgKi8KLQlpZih0bHNTZWNGaW5pc2hlZChjLT5zZWMsIGMtPmhhbmRoYXNo LCBjLT5maW5pc2hlZC52ZXJpZnksIGMtPmZpbmlzaGVkLm4sIDEpIDwgMCl7Ci0JCXRsc0Vycm9y KGMsIEVJbnRlcm5hbEVycm9yLCAiY2FuJ3Qgc2V0IGZpbmlzaGVkOiAlciIpOwotCQlnb3RvIEVy cjsKLQl9CisJYy0+c2VjLT5zZXRGaW5pc2hlZChjLT5zZWMsIGMtPmhhbmRoYXNoLCBjLT5maW5p c2hlZCwgMSk7CiAJaWYoIW1zZ1JlY3YoYywgJm0pKQogCQlnb3RvIEVycjsKIAlpZihtLnRhZyAh PSBIRmluaXNoZWQpIHsKQEAgLTg1OSw3ICs4NDIsNyBAQAogCQl0bHNFcnJvcihjLCBFVW5leHBl Y3RlZE1lc3NhZ2UsICJleHBlY3RlZCBhIGZpbmlzaGVkIik7CiAJCWdvdG8gRXJyOwogCX0KLQlp ZighZmluaXNoZWRNYXRjaChjLCAmbS51LmZpbmlzaGVkKSkgeworCWlmKHRzbWVtY21wKGMtPmZp bmlzaGVkLCBtLnUuZmluaXNoZWQsIEZpbmlzaGVkTGVuKSAhPSAwKSB7CiAJCXRsc0Vycm9yKGMs IEVIYW5kc2hha2VGYWlsdXJlLCAiZmluaXNoZWQgdmVyaWZpY2F0aW9uIGZhaWxlZCIpOwogCQln b3RvIEVycjsKIAl9CkBAIC04NzEsMTIgKzg1NCw5IEBACiAJCWdvdG8gRXJyOwogCX0KIAotCWlm KHRsc1NlY0ZpbmlzaGVkKGMtPnNlYywgYy0+aGFuZGhhc2gsIGMtPmZpbmlzaGVkLnZlcmlmeSwg Yy0+ZmluaXNoZWQubiwgMCkgPCAwKXsKLQkJdGxzRXJyb3IoYywgRUludGVybmFsRXJyb3IsICJj YW4ndCBzZXQgZmluaXNoZWQ6ICVyIik7Ci0JCWdvdG8gRXJyOwotCX0KKwljLT5zZWMtPnNldEZp bmlzaGVkKGMtPnNlYywgYy0+aGFuZGhhc2gsIGMtPmZpbmlzaGVkLCAwKTsKIAltLnRhZyA9IEhG aW5pc2hlZDsKLQltLnUuZmluaXNoZWQgPSBjLT5maW5pc2hlZDsKKwltZW1tb3ZlKG0udS5maW5p c2hlZCwgYy0+ZmluaXNoZWQsIEZpbmlzaGVkTGVuKTsKIAlpZighbXNnU2VuZChjLCAmbSwgQUZs dXNoKSkKIAkJZ290byBFcnI7CiAJaWYodHJhY2UpCkBAIC0xMDU2LDggKzEwMzYsOCBAQAogCQl0 bHNFcnJvcihjLCBFVW5leHBlY3RlZE1lc3NhZ2UsICJleHBlY3RlZCBhIHNlcnZlciBoZWxsbyIp OwogCQlnb3RvIEVycjsKIAl9Ci0JaWYoc2V0VmVyc2lvbihjLCBtLnUuc2VydmVySGVsbG8udmVy c2lvbikgPCAwKSB7Ci0JCXRsc0Vycm9yKGMsIEVJbGxlZ2FsUGFyYW1ldGVyLCAiaW5jb21wYXRp YmxlIHZlcnNpb246ICVyIik7CisJaWYoc2V0VmVyc2lvbihjLCBtLnUuc2VydmVySGVsbG8udmVy c2lvbiwgMSkgPCAwKXsKKwkJdGxzRXJyb3IoYywgRVByb3RvY29sVmVyc2lvbiwgImluY29tcGF0 aWJsZSB2ZXJzaW9uOiAlciIpOwogCQlnb3RvIEVycjsKIAl9CiAJdGxzU2VjVmVycyhjLT5zZWMs IGMtPnZlcnNpb24pOwpAQCAtMTIyMCwyMSArMTIwMCwxNSBAQAogCiAJLy8gQ2lwaGVyY2hhbmdl IG11c3Qgb2NjdXIgaW1tZWRpYXRlbHkgYmVmb3JlIEZpbmlzaGVkIHRvIGF2b2lkCiAJLy8gcG90 ZW50aWFsIGhvbGU7ICBzZWUgc2VjdGlvbiA0LjMgb2YgV2FnbmVyIFNjaG5laWVyIDE5OTYuCi0J aWYodGxzU2VjRmluaXNoZWQoYy0+c2VjLCBjLT5oYW5kaGFzaCwgYy0+ZmluaXNoZWQudmVyaWZ5 LCBjLT5maW5pc2hlZC5uLCAxKSA8IDApewotCQl0bHNFcnJvcihjLCBFSW50ZXJuYWxFcnJvciwg ImNhbid0IHNldCBmaW5pc2hlZCAxOiAlciIpOwotCQlnb3RvIEVycjsKLQl9CisJYy0+c2VjLT5z ZXRGaW5pc2hlZChjLT5zZWMsIGMtPmhhbmRoYXNoLCBjLT5maW5pc2hlZCwgMSk7CiAJbS50YWcg PSBIRmluaXNoZWQ7Ci0JbS51LmZpbmlzaGVkID0gYy0+ZmluaXNoZWQ7CisJbWVtbW92ZShtLnUu ZmluaXNoZWQsIGMtPmZpbmlzaGVkLCBGaW5pc2hlZExlbik7CiAJaWYoIW1zZ1NlbmQoYywgJm0s IEFGbHVzaCkpIHsKIAkJdGxzRXJyb3IoYywgRUludGVybmFsRXJyb3IsICJjYW4ndCBmbHVzaCBh ZnRlciBjbGllbnQgRmluaXNoZWQ6ICVyIik7CiAJCWdvdG8gRXJyOwogCX0KIAotCWlmKHRsc1Nl Y0ZpbmlzaGVkKGMtPnNlYywgYy0+aGFuZGhhc2gsIGMtPmZpbmlzaGVkLnZlcmlmeSwgYy0+Zmlu aXNoZWQubiwgMCkgPCAwKXsKLQkJdGxzRXJyb3IoYywgRUludGVybmFsRXJyb3IsICJjYW4ndCBz ZXQgZmluaXNoZWQgMDogJXIiKTsKLQkJZ290byBFcnI7Ci0JfQorCWMtPnNlYy0+c2V0RmluaXNo ZWQoYy0+c2VjLCBjLT5oYW5kaGFzaCwgYy0+ZmluaXNoZWQsIDApOwogCWlmKCFtc2dSZWN2KGMs ICZtKSkgewogCQl0bHNFcnJvcihjLCBFSW50ZXJuYWxFcnJvciwgImNhbid0IHJlYWQgc2VydmVy IEZpbmlzaGVkOiAlciIpOwogCQlnb3RvIEVycjsKQEAgLTEyNDQsNyArMTIxOCw3IEBACiAJCWdv dG8gRXJyOwogCX0KIAotCWlmKCFmaW5pc2hlZE1hdGNoKGMsICZtLnUuZmluaXNoZWQpKSB7CisJ aWYodHNtZW1jbXAoYy0+ZmluaXNoZWQsIG0udS5maW5pc2hlZCwgRmluaXNoZWRMZW4pICE9IDAp IHsKIAkJdGxzRXJyb3IoYywgRUhhbmRzaGFrZUZhaWx1cmUsICJmaW5pc2hlZCB2ZXJpZmljYXRp b24gZmFpbGVkIik7CiAJCWdvdG8gRXJyOwogCX0KQEAgLTE0MTgsMTYgKzEzOTIsMTYgQEAKIAkJ CWdvdG8gT3ZlcmZsb3c7CiAJCWlmKGlzRUNESEUoYy0+Y2lwaGVyKSkKIAkJCSpwKysgPSBuOwot CQllbHNlIGlmKGlzREhFKGMtPmNpcGhlcikgfHwgYy0+dmVyc2lvbiAhPSBTU0wzVmVyc2lvbikK KwkJZWxzZQogCQkJcHV0MTYocCwgbiksIHAgKz0gMjsKIAkJbWVtbW92ZShwLCBtLT51LmNsaWVu dEtleUV4Y2hhbmdlLmtleS0+ZGF0YSwgbik7CiAJCXAgKz0gbjsKIAkJYnJlYWs7CiAJY2FzZSBI RmluaXNoZWQ6Ci0JCWlmKHArbS0+dS5maW5pc2hlZC5uID4gZSkKKwkJaWYocCtGaW5pc2hlZExl biA+IGUpCiAJCQlnb3RvIE92ZXJmbG93OwotCQltZW1tb3ZlKHAsIG0tPnUuZmluaXNoZWQudmVy aWZ5LCBtLT51LmZpbmlzaGVkLm4pOwotCQlwICs9IG0tPnUuZmluaXNoZWQubjsKKwkJbWVtbW92 ZShwLCBtLT51LmZpbmlzaGVkLCBGaW5pc2hlZExlbik7CisJCXAgKz0gRmluaXNoZWRMZW47CiAJ CWJyZWFrOwogCX0KIApAQCAtMTQ5Niw3ICsxNDcwLDcgQEAKIAl9CiAKIAlpZih0eXBlID09IEhT U0wyQ2xpZW50SGVsbG8pewotCQkvKiBDb3BlIHdpdGggYW4gU1NMMyBDbGllbnRIZWxsbyBleHBy ZXNzZWQgaW4gU1NMMiByZWNvcmQgZm9ybWF0LgorCQkvKiBDb3BlIHdpdGggYSBUTFMgQ2xpZW50 SGVsbG8gZXhwcmVzc2VkIGluIFNTTDIgcmVjb3JkIGZvcm1hdC4KIAkJCVRoaXMgaXMgc2VudCBi eSBzb21lIGNsaWVudHMgdGhhdCB3ZSBtdXN0IGludGVyb3BlcmF0ZQogCQkJd2l0aCwgc3VjaCBh cyBKYXZhJ3MgSlNTRSBhbmQgTWljcm9zb2Z0J3MgSW50ZXJuZXQgRXhwbG9yZXIuICovCiAJCWlu dCBuc2lkLCBucmFuZG9tLCBuY2lwaDsKQEAgLTE1MTksNyArMTQ5Myw3IEBACiAJCWlmKG5zaWQg IT0gMCAJLyogbm8gc2lkJ3MsIHNpbmNlIHNob3VsZG4ndCByZXN0YXJ0IHVzaW5nIHNzbDIgaGVh ZGVyICovCiAJCXx8IG5yYW5kb20gPCAxNiB8fCBubiAlIDMgfHwgbiAtIG5yYW5kb20gPCBubikK IAkJCWdvdG8gRXJyOwotCQkvKiBpZ25vcmUgc3NsMiBjaXBoZXJzIGFuZCBsb29rIGZvciB7MHgw MCwgc3NsMyBjaXBoZXJ9ICovCisJCS8qIGlnbm9yZSBzc2wyIGNpcGhlcnMgYW5kIGxvb2sgZm9y IHsweDAwLCB0bHMgY2lwaGVyfSAqLwogCQluY2lwaCA9IDA7CiAJCWZvcihpID0gMDsgaSA8IG5u OyBpICs9IDMpCiAJCQlpZihwW2ldID09IDApCkBAIC0xNzkwLDEwICsxNzY0LDggQEAKIAkJCWdv dG8gU2hvcnQ7CiAJCWlmKGlzRUNESEUoYy0+Y2lwaGVyKSkKIAkJCW5uID0gKnArKywgbi0tOwot CQllbHNlIGlmKGlzREhFKGMtPmNpcGhlcikgfHwgYy0+dmVyc2lvbiAhPSBTU0wzVmVyc2lvbikK LQkJCW5uID0gZ2V0MTYocCksIHAgKz0gMiwgbiAtPSAyOwogCQllbHNlCi0JCQlubiA9IG47CisJ CQlubiA9IGdldDE2KHApLCBwICs9IDIsIG4gLT0gMjsKIAkJaWYobiA8IG5uKQogCQkJZ290byBT aG9ydDsKIAkJbS0+dS5jbGllbnRLZXlFeGNoYW5nZS5rZXkgPSBtYWtlYnl0ZXMocCwgbm4pOwpA QCAtMTgwMCwxMSArMTc3MiwxMCBAQAogCQluIC09IG5uOwogCQlicmVhazsKIAljYXNlIEhGaW5p c2hlZDoKLQkJbS0+dS5maW5pc2hlZC5uID0gYy0+ZmluaXNoZWQubjsKLQkJaWYobiA8IG0tPnUu ZmluaXNoZWQubikKKwkJaWYobiA8IEZpbmlzaGVkTGVuKQogCQkJZ290byBTaG9ydDsKLQkJbWVt bW92ZShtLT51LmZpbmlzaGVkLnZlcmlmeSwgcCwgbS0+dS5maW5pc2hlZC5uKTsKLQkJbiAtPSBt LT51LmZpbmlzaGVkLm47CisJCW1lbW1vdmUobS0+dS5maW5pc2hlZCwgcCwgRmluaXNoZWRMZW4p OworCQluIC09IEZpbmlzaGVkTGVuOwogCQlicmVhazsKIAl9CiAKQEAgLTIwMDAsOCArMTk3MSw4 IEBACiAJCWJyZWFrOwogCWNhc2UgSEZpbmlzaGVkOgogCQlicyA9IHNlcHJpbnQoYnMsIGJlLCAi SEZpbmlzaGVkXG4iKTsKLQkJZm9yKGk9MDsgaTxtLT51LmZpbmlzaGVkLm47IGkrKykKLQkJCWJz ID0gc2VwcmludChicywgYmUsICIlLjJ4IiwgbS0+dS5maW5pc2hlZC52ZXJpZnlbaV0pOworCQlm b3IoaT0wOyBpPEZpbmlzaGVkTGVuOyBpKyspCisJCQlicyA9IHNlcHJpbnQoYnMsIGJlLCAiJS4y eCIsIG0tPnUuZmluaXNoZWRbaV0pOwogCQlicyA9IHNlcHJpbnQoYnMsIGJlLCAiXG4iKTsKIAkJ YnJlYWs7CiAJfQpAQCAtMjAzMCwyOSArMjAwMSwyMCBAQAogCiAvLyBjb21taXQgdG8gc3BlY2lm aWMgdmVyc2lvbiBudW1iZXIKIHN0YXRpYyBpbnQKLXNldFZlcnNpb24oVGxzQ29ubmVjdGlvbiAq YywgaW50IHZlcnNpb24pCitzZXRWZXJzaW9uKFRsc0Nvbm5lY3Rpb24gKmMsIGludCB2ZXJzaW9u LCBpbnQgY2xpZW50KQogewotCWlmKHZlcnNpb24gPiBNYXhQcm90b1ZlcnNpb24gfHwgdmVyc2lv biA8IE1pblByb3RvVmVyc2lvbikKKwlpZih2ZXJzaW9uIDwgTWluUHJvdG9WZXJzaW9uKQogCQly ZXR1cm4gLTE7Ci0JaWYodmVyc2lvbiA+IGMtPnZlcnNpb24pCi0JCXZlcnNpb24gPSBjLT52ZXJz aW9uOwotCWlmKHZlcnNpb24gPT0gU1NMM1ZlcnNpb24pIHsKKwlpZih2ZXJzaW9uID4gYy0+dmVy c2lvbil7CisJCWlmKGNsaWVudCkKKwkJCXJldHVybiAtMTsKKwkJZWxzZQorCQkJdmVyc2lvbiA9 IGMtPnZlcnNpb247CisJfWVsc2UKIAkJYy0+dmVyc2lvbiA9IHZlcnNpb247Ci0JCWMtPmZpbmlz aGVkLm4gPSBTU0wzRmluaXNoZWRMZW47Ci0JfWVsc2UgewotCQljLT52ZXJzaW9uID0gdmVyc2lv bjsKLQkJYy0+ZmluaXNoZWQubiA9IFRMU0ZpbmlzaGVkTGVuOwotCX0KIAlyZXR1cm4gZnByaW50 KGMtPmN0bCwgInZlcnNpb24gMHgleCIsIHZlcnNpb24pOwogfQogCi0vLyBjb25maXJtIHRoYXQg cmVjZWl2ZWQgRmluaXNoZWQgbWVzc2FnZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB2YWx1ZQotc3Rh dGljIGludAotZmluaXNoZWRNYXRjaChUbHNDb25uZWN0aW9uICpjLCBGaW5pc2hlZCAqZikKLXsK LQlyZXR1cm4gdHNtZW1jbXAoZi0+dmVyaWZ5LCBjLT5maW5pc2hlZC52ZXJpZnksIGYtPm4pID09 IDA7Ci19Ci0KIC8vIGZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBUbHNDb25uZWN0aW9uIHN0 cnVjdAogLy8JCShidXQgZG9uJ3QgY2xvc2UgdGhlIFRMUyBjaGFubmVsIGl0c2VsZikKIHN0YXRp YyB2b2lkCkBAIC0yMzkwLDY4ICsyMzUyLDYgQEAKIAkJaG1hY19zaGEyXzI1NiwgU0hBMl8yNTZk bGVuKTsKIH0KIAotc3RhdGljIHZvaWQKLXNzbFBSRih1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNo YXIgKmtleSwgaW50IG5rZXksIGNoYXIgKmxhYmVsLCB1Y2hhciAqc2VlZCwgaW50IG5zZWVkKQot ewotCXVjaGFyIHNoYTFkaWdbU0hBMWRsZW5dLCBtZDVkaWdbTUQ1ZGxlbl0sIHRtcFsyNl07Ci0J RGlnZXN0U3RhdGUgKnM7Ci0JaW50IGksIG4sIGxlbjsKLQotCVVTRUQobGFiZWwpOwotCWxlbiA9 IDE7Ci0Jd2hpbGUobmJ1ZiA+IDApewotCQlpZihsZW4gPiAyNikKLQkJCXJldHVybjsKLQkJZm9y KGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQl0bXBbaV0gPSAnQScgLSAxICsgbGVuOwotCQlzID0g c2hhMSh0bXAsIGxlbiwgbmlsLCBuaWwpOwotCQlzID0gc2hhMShrZXksIG5rZXksIG5pbCwgcyk7 Ci0JCXNoYTEoc2VlZCwgbnNlZWQsIHNoYTFkaWcsIHMpOwotCQlzID0gbWQ1KGtleSwgbmtleSwg bmlsLCBuaWwpOwotCQltZDUoc2hhMWRpZywgU0hBMWRsZW4sIG1kNWRpZywgcyk7Ci0JCW4gPSBN RDVkbGVuOwotCQlpZihuID4gbmJ1ZikKLQkJCW4gPSBuYnVmOwotCQltZW1tb3ZlKGJ1ZiwgbWQ1 ZGlnLCBuKTsKLQkJYnVmICs9IG47Ci0JCW5idWYgLT0gbjsKLQkJbGVuKys7Ci0JfQotfQotCi1z dGF0aWMgdm9pZAotc3NsU2V0RmluaXNoZWQoVGxzU2VjICpzZWMsIEhhbmRzaGFrZUhhc2ggaHNo LCB1Y2hhciAqZmluaXNoZWQsIGludCBpc2NsaWVudCkKLXsKLQlEaWdlc3RTdGF0ZSAqczsKLQl1 Y2hhciBoMFtNRDVkbGVuXSwgaDFbU0hBMWRsZW5dLCBwYWRbNDhdOwotCWNoYXIgKmxhYmVsOwot Ci0JaWYoaXNjbGllbnQpCi0JCWxhYmVsID0gIkNMTlQiOwotCWVsc2UKLQkJbGFiZWwgPSAiU1JW UiI7Ci0KLQltZDUoKHVjaGFyKilsYWJlbCwgNCwgbmlsLCAmaHNoLm1kNSk7Ci0JbWQ1KHNlYy0+ c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCBuaWwsICZoc2gubWQ1KTsKLQltZW1zZXQocGFkLCAweDM2 LCA0OCk7Ci0JbWQ1KHBhZCwgNDgsIG5pbCwgJmhzaC5tZDUpOwotCW1kNShuaWwsIDAsIGgwLCAm aHNoLm1kNSk7Ci0JbWVtc2V0KHBhZCwgMHg1QywgNDgpOwotCXMgPSBtZDUoc2VjLT5zZWMsIE1h c3RlclNlY3JldFNpemUsIG5pbCwgbmlsKTsKLQlzID0gbWQ1KHBhZCwgNDgsIG5pbCwgcyk7Ci0J bWQ1KGgwLCBNRDVkbGVuLCBmaW5pc2hlZCwgcyk7Ci0KLQlzaGExKCh1Y2hhciopbGFiZWwsIDQs IG5pbCwgJmhzaC5zaGExKTsKLQlzaGExKHNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCBuaWws ICZoc2guc2hhMSk7Ci0JbWVtc2V0KHBhZCwgMHgzNiwgNDApOwotCXNoYTEocGFkLCA0MCwgbmls LCAmaHNoLnNoYTEpOwotCXNoYTEobmlsLCAwLCBoMSwgJmhzaC5zaGExKTsKLQltZW1zZXQocGFk LCAweDVDLCA0MCk7Ci0JcyA9IHNoYTEoc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsIG5pbCwg bmlsKTsKLQlzID0gc2hhMShwYWQsIDQwLCBuaWwsIHMpOwotCXNoYTEoaDEsIFNIQTFkbGVuLCBm aW5pc2hlZCArIE1ENWRsZW4sIHMpOwotfQotCiAvLyBmaWxsICJmaW5pc2hlZCIgYXJnIHdpdGgg bWQ1KGFyZ3MpXnNoYTEoYXJncykKIHN0YXRpYyB2b2lkCiB0bHMxMFNldEZpbmlzaGVkKFRsc1Nl YyAqc2VjLCBIYW5kc2hha2VIYXNoIGhzaCwgdWNoYXIgKmZpbmlzaGVkLCBpbnQgaXNjbGllbnQp CkBAIC0yNDYwLDYgKzIzNjAsOCBAQAogCWNoYXIgKmxhYmVsOwogCiAJLy8gZ2V0IGN1cnJlbnQg aGFzaCB2YWx1ZSwgYnV0IGFsbG93IGZ1cnRoZXIgbWVzc2FnZXMgdG8gYmUgaGFzaGVkIGluCisJ aHNoLm1kNS5tYWxsb2NlZCA9IDA7CisJaHNoLnNoYTEubWFsbG9jZWQgPSAwOwogCW1kNShuaWws IDAsIGgsICZoc2gubWQ1KTsKIAlzaGExKG5pbCwgMCwgaCtNRDVkbGVuLCAmaHNoLnNoYTEpOwog CkBAIC0yNDY3LDcgKzIzNjksNyBAQAogCQlsYWJlbCA9ICJjbGllbnQgZmluaXNoZWQiOwogCWVs c2UKIAkJbGFiZWwgPSAic2VydmVyIGZpbmlzaGVkIjsKLQl0bHMxMFBSRihmaW5pc2hlZCwgVExT RmluaXNoZWRMZW4sIHNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCBsYWJlbCwgaCwgc2l6ZW9m KGgpKTsKKwl0bHMxMFBSRihmaW5pc2hlZCwgRmluaXNoZWRMZW4sIHNlYy0+c2VjLCBNYXN0ZXJT ZWNyZXRTaXplLCBsYWJlbCwgaCwgc2l6ZW9mKGgpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI0 NzcsNiArMjM3OSw3IEBACiAJY2hhciAqbGFiZWw7CiAKIAkvLyBnZXQgY3VycmVudCBoYXNoIHZh bHVlLCBidXQgYWxsb3cgZnVydGhlciBtZXNzYWdlcyB0byBiZSBoYXNoZWQgaW4KKwloc2guc2hh Ml8yNTYubWFsbG9jZWQgPSAwOwogCXNoYTJfMjU2KG5pbCwgMCwgc2VlZCwgJmhzaC5zaGEyXzI1 Nik7CiAKIAlpZihpc2NsaWVudCkKQEAgLTI0ODMsNyArMjM4Niw3IEBACiAJCWxhYmVsID0gImNs aWVudCBmaW5pc2hlZCI7CiAJZWxzZQogCQlsYWJlbCA9ICJzZXJ2ZXIgZmluaXNoZWQiOwotCXRs czEyUFJGKGZpbmlzaGVkLCBUTFNGaW5pc2hlZExlbiwgc2VjLT5zZWMsIE1hc3RlclNlY3JldFNp emUsIGxhYmVsLCBzZWVkLCBTSEEyXzI1NmRsZW4pOworCXRsczEyUFJGKGZpbmlzaGVkLCBGaW5p c2hlZExlbiwgc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsIGxhYmVsLCBzZWVkLCBTSEEyXzI1 NmRsZW4pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjYzMCwzNCArMjUzMywxNCBAQAogCXJldHVy biBlcG07CiB9CiAKLXN0YXRpYyBpbnQKLXRsc1NlY0ZpbmlzaGVkKFRsc1NlYyAqc2VjLCBIYW5k c2hha2VIYXNoIGhzaCwgdWNoYXIgKmZpbiwgaW50IG5maW4sIGludCBpc2NsaWVudCkKLXsKLQlp ZihzZWMtPm5maW4gIT0gbmZpbil7Ci0JCXdlcnJzdHIoImludmFsaWQgZmluaXNoZWQgZXhjaGFu Z2UiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQloc2gubWQ1Lm1hbGxvY2VkID0gMDsKLQloc2guc2hh MS5tYWxsb2NlZCA9IDA7Ci0JaHNoLnNoYTJfMjU2Lm1hbGxvY2VkID0gMDsKLQkoKnNlYy0+c2V0 RmluaXNoZWQpKHNlYywgaHNoLCBmaW4sIGlzY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQogc3Rh dGljIHZvaWQKIHRsc1NlY1ZlcnMoVGxzU2VjICpzZWMsIGludCB2KQogewotCWlmKHYgPT0gU1NM M1ZlcnNpb24pewotCQlzZWMtPnNldEZpbmlzaGVkID0gc3NsU2V0RmluaXNoZWQ7Ci0JCXNlYy0+ bmZpbiA9IFNTTDNGaW5pc2hlZExlbjsKLQkJc2VjLT5wcmYgPSBzc2xQUkY7Ci0JfWVsc2UgaWYo diA8IFRMUzEyVmVyc2lvbikgeworCWlmKHYgPCBUTFMxMlZlcnNpb24pewogCQlzZWMtPnNldEZp bmlzaGVkID0gdGxzMTBTZXRGaW5pc2hlZDsKLQkJc2VjLT5uZmluID0gVExTRmluaXNoZWRMZW47 CiAJCXNlYy0+cHJmID0gdGxzMTBQUkY7Ci0JfWVsc2UgeworCX1lbHNlewogCQlzZWMtPnNldEZp bmlzaGVkID0gdGxzMTJTZXRGaW5pc2hlZDsKLQkJc2VjLT5uZmluID0gVExTRmluaXNoZWRMZW47 CiAJCXNlYy0+cHJmID0gdGxzMTJQUkY7CiAJfQogfQo= --000000000000b66a4505cf17cab1--