Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s3gvG-00EwYA-39 for pgsql-hackers@arkaria.postgresql.org; Sun, 05 May 2024 18:49:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1s3gvD-008BYB-Kp for pgsql-hackers@arkaria.postgresql.org; Sun, 05 May 2024 18:49:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s3gvC-008BY2-OL for pgsql-hackers@lists.postgresql.org; Sun, 05 May 2024 18:49:16 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s3gv5-001bKX-5w for pgsql-hackers@lists.postgresql.org; Sun, 05 May 2024 18:49:13 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-a59c04839caso134364066b.2 for ; Sun, 05 May 2024 11:49:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1714934945; x=1715539745; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=odA31twXm9h5XTwaMPYzCS1aBQCi+LArKnz/md2v3sU=; b=Xqgep9qd0omdfsBRnioYtL7J89lRGjnc1PdlSrUn142DHPQpLE9y3HgKu2fte3FlhP 69E1/VkciqVTbt6FY/vgsgC1Y2oEBa5+mhH5b8sNYtQoDa2zbzzP6xjg0hXkbcgjmDYf LSa7d6pJsP4T1OTRjixGeU8wc63/B6hB3tLn5y6dbulmfAp58b2c/1CMkYY6Q5LCel+2 lENmU83s1g7V8amuLQM5rIl25AaOiv3Cz66lKmlyYsfFkuVM1KjMT4D+ShTkokBXrX6T LXeUkRBCSClrPKS7tLExDGpVvOj+GVlvXkmd+qGzO++gZw3VwfepkMQlh8neLcm3VZHi 1SsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714934945; x=1715539745; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=odA31twXm9h5XTwaMPYzCS1aBQCi+LArKnz/md2v3sU=; b=QRKqxQ+6AGQzUEEZCSQjdg2Jjje/xROZWw7RAd6AINJzcO/zeHi3t7m99uPZfzEMy2 FlNK1SxZrPDBj7Wbo4yqOO3cHo/VryjpAEkT9tc/GLk7zX51dVzmEraZJZAI6l3+21bw JxzcpnUt4DXAM/FvjO8WGMCGbFezhn/vmyI1kRsc1GDNmrogfJ+kvVyzUcE2KOkbqaZQ jEf85YmHN2RLMmdGWNMkNRR5+dREWRqUs7wAy/mU33mYjak/Hgcgc2vjSqPBExqbq3y3 pS2OJzm23sdiu+qXVfhuOhX7MijrHZkFIJopF7u/n97LAw2RmwN1dDpDqmOjCQwZLF67 B7Vw== X-Gm-Message-State: AOJu0YznEtTDluZ4tRJZ7CvJWmUwXdy7Om9LYId/3rMfoDMW7D1GNsga F/8RTi2mjkOIwjROSvtNTutRLiWYl0X/KzC7D9OATchLqyhOh6kiYFYD1j776w== X-Google-Smtp-Source: AGHT+IFcnT+L9K3k5vihoZHTeOgSkpdvuw1hFI60ePxOfkPZ+AmRVHeXYq+dPwfLLp8Cbq/hprFW6w== X-Received: by 2002:a17:906:474e:b0:a59:bfc8:aa2a with SMTP id j14-20020a170906474e00b00a59bfc8aa2amr1249316ejs.25.1714934945118; Sun, 05 May 2024 11:49:05 -0700 (PDT) Received: from [10.137.0.18] (ip-86-49-229-30.bb.vodafone.cz. [86.49.229.30]) by smtp.gmail.com with ESMTPSA id wp1-20020a170907060100b00a59a70d748dsm2176012ejb.56.2024.05.05.11.49.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 May 2024 11:49:04 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------QSG8B2GJOHGCxDMrFSwGSI5X" Message-ID: Date: Sun, 5 May 2024 20:49:03 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Parallel CREATE INDEX for GIN indexes From: Tomas Vondra To: Matthias van de Meent Cc: PostgreSQL Hackers References: <6ab4003f-a8b8-4d75-a67f-f25ad98582dc@enterprisedb.com> <5b5a059d-0699-4cc2-b9a0-32053ea19a65@enterprisedb.com> Content-Language: en-US In-Reply-To: <5b5a059d-0699-4cc2-b9a0-32053ea19a65@enterprisedb.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a slightly improved version, fixing a couple bugs in handling byval/byref values, causing issues on 32-bit machines (but not only). And also a couple compiler warnings about string formatting. Other than that, no changes. -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0001-Allow-parallel-create-for-GIN-indexes.patch" Content-Disposition: attachment; filename*0="v20240505-0001-Allow-parallel-create-for-GIN-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA1MTBhZjAwODAyYzA0YjhkNmQzOTgyMDY5Yzk2MDgyNTcyYTc2YzcyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjI2ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgMS84XSBBbGxvdyBwYXJhbGxlbCBjcmVhdGUgZm9yIEdJ TiBpbmRleGVzCgpBZGQgc3VwcG9ydCBmb3IgcGFyYWxsZWwgY3JlYXRlIG9mIEdJTiBpbmRl eGVzLCB1c2luZyBhbiBhcHByb2FjaCBhbmQKY29kZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9u ZSB1c2VkIGJ5IEJSSU4gaW5kZXhlcy4KCkVhY2ggd29ya2VyIHJlYWRzIGEgc3Vic2V0IG9m IHRoZSB0YWJsZSAoZnJvbSBhIHBhcmFsbGVsIHNjYW4pLCBhbmQKYWNjdW11bGF0ZWQgaW5k ZXggZW50cmllcyBpbiBtZW1vcnkuIEJ1dCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIHJlc3Vs dHMKaW50byB0aGUgaW5kZXggKGFmdGVyIGhpdHRpbmcgdGhlIG1lbW9yeSBsaW1pdCksIHRo ZSBkYXRhIGFyZSB3cml0dGVuCnRvIGEgc2hhcmVkIHR1cGxlc29ydCAoYW5kIHNvcnRlZCBi eSBpbmRleCBrZXkpLgoKVGhlIGxlYWRlciB0aGVuIHJlYWRzIGRhdGEgZnJvbSB0aGUgdHVw bGVzb3J0LCBhbmQgY29tYmluZXMgdGhlbSBpbnRvCmVudHJpZXMgdGhhdCBnZXQgaW5zZXJ0 ZWQgaW50byB0aGUgaW5kZXguCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5idWxr LmMgICAgICAgICAgIHwgICAgNyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2Vy dC5jICAgICAgICAgfCAxMzQwICsrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3V0 aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyB8ICAxNTQgKysrCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvZ2luLmggICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9naW5fdHVwbGUuaCAgICAgICAgICAgICB8ICAgMjkgKwogc3JjL2luY2x1ZGUvdXRp bHMvdHVwbGVzb3J0LmggICAgICAgICAgICAgIHwgICAgNiArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgfCAgICA0ICsKIDkgZmlsZXMgY2hhbmdlZCwg MTUzNCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2luX3R1cGxlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbmJ1bGsuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu YnVsay5jCmluZGV4IGE1MjI4MDFjMmY3Li4xMmVlZmYwNGE2YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW5idWxrLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW5idWxrLmMKQEAgLTE1Myw2ICsxNTMsMTMgQEAgZ2luSW5zZXJ0QkFFbnRyeShC dWlsZEFjY3VtdWxhdG9yICphY2N1bSwKIAlHaW5FbnRyeUFjY3VtdWxhdG9yICplYTsKIAli b29sCQlpc05ldzsKIAorCS8qCisJICogRklYTUUgcHJldmVudHMgd3JpdGVzIG9mIHVuaW5p dGlhbGl6ZWQgYnl0ZXMgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQgaW4KKwkgKiB3cml0ZXR1cCAo bGlrZWx5IHRoYXQgYnVpbGRfZ2luX3R1cGxlIGNvcGllcyBzb21lIGZpZWxkcyB0aGF0IGFy ZSBvbmx5CisJICogaW5pdGlhbGl6ZWQgZm9yIGEgY2VydGFpbiBjYXRlZ29yeSwgb3Igc29t ZXRoaW5nIHNpbWlsYXIpCisJICovCisJbWVtc2V0KCZlYXRtcCwgMCwgc2l6ZW9mKEdpbkVu dHJ5QWNjdW11bGF0b3IpKTsKKwogCS8qCiAJICogRm9yIHRoZSBtb21lbnQsIGZpbGwgb25s eSB0aGUgZmllbGRzIG9mIGVhdG1wIHRoYXQgd2lsbCBiZSBsb29rZWQgYXQgYnkKIAkgKiBj bXBFbnRyeUFjY3VtdWxhdG9yIG9yIGdpbkNvbWJpbmVEYXRhLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luaW5zZXJ0LmMKaW5kZXggNzFmMzhiZTkwYzMuLmIzNTNlMTU1ZmM2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKQEAgLTE1LDE0ICsxNSwxMjQgQEAKICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2dpbl9wcml2YXRlLmgiCisj aW5jbHVkZSAiYWNjZXNzL2dpbl90dXBsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dp bnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMv ZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInRj b3AvdGNvcHByb3QuaCIJCS8qIHBncm1pbmNsdWRlIGlnbm9yZSAqLworI2luY2x1ZGUgInV0 aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorCisKKy8qIE1hZ2lj IG51bWJlcnMgZm9yIHBhcmFsbGVsIHN0YXRlIHNoYXJpbmcgKi8KKyNkZWZpbmUgUEFSQUxM RUxfS0VZX0dJTl9TSEFSRUQJCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDEpCisj ZGVmaW5lIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQJCQlVSU5UNjRDT05TVCgweEIwMDAwMDAw MDAwMDAwMDIpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQkJVUlOVDY0Q09O U1QoMHhCMDAwMDAwMDAwMDAwMDAzKQorI2RlZmluZSBQQVJBTExFTF9LRVlfV0FMX1VTQUdF CQkJVUlOVDY0Q09OU1QoMHhCMDAwMDAwMDAwMDAwMDA0KQorI2RlZmluZSBQQVJBTExFTF9L RVlfQlVGRkVSX1VTQUdFCQlVSU5UNjRDT05TVCgweEIwMDAwMDAwMDAwMDAwMDUpCisKKy8q CisgKiBTdGF0dXMgZm9yIGluZGV4IGJ1aWxkcyBwZXJmb3JtZWQgaW4gcGFyYWxsZWwuICBU aGlzIGlzIGFsbG9jYXRlZCBpbiBhCisgKiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVu dC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgR2luU2hhcmVkCit7CisJLyoKKwkgKiBUaGVzZSBm aWVsZHMgYXJlIG5vdCBtb2RpZmllZCBkdXJpbmcgdGhlIGJ1aWxkLiAgVGhleSBwcmltYXJp bHkgZXhpc3QKKwkgKiBmb3IgdGhlIGJlbmVmaXQgb2Ygd29ya2VyIHByb2Nlc3NlcyB0aGF0 IG5lZWQgdG8gY3JlYXRlIHN0YXRlCisJICogY29ycmVzcG9uZGluZyB0byB0aGF0IHVzZWQg YnkgdGhlIGxlYWRlci4KKwkgKi8KKwlPaWQJCQloZWFwcmVsaWQ7CisJT2lkCQkJaW5kZXhy ZWxpZDsKKwlib29sCQlpc2NvbmN1cnJlbnQ7CisJaW50CQkJc2NhbnR1cGxlc29ydHN0YXRl czsKKworCS8qCisJICogd29ya2Vyc2RvbmVjdiBpcyB1c2VkIHRvIG1vbml0b3IgdGhlIHBy b2dyZXNzIG9mIHdvcmtlcnMuICBBbGwgcGFyYWxsZWwKKwkgKiBwYXJ0aWNpcGFudHMgbXVz dCBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIGRvbmUgYmVmb3JlIGxlYWRlciBjYW4gdXNlCisJ ICogcmVzdWx0cyBidWlsdCBieSB0aGUgd29ya2VycyAoYW5kIGJlZm9yZSBsZWFkZXIgY2Fu IHdyaXRlIHRoZSBkYXRhIGludG8KKwkgKiB0aGUgaW5kZXgpLgorCSAqLworCUNvbmRpdGlv blZhcmlhYmxlIHdvcmtlcnNkb25lY3Y7CisKKwkvKgorCSAqIG11dGV4IHByb3RlY3RzIGFs bCBmaWVsZHMgYmVmb3JlIGhlYXBkZXNjLgorCSAqCisJICogVGhlc2UgZmllbGRzIGNvbnRh aW4gc3RhdHVzIGluZm9ybWF0aW9uIG9mIGludGVyZXN0IHRvIEdJTiBpbmRleCBidWlsZHMK KwkgKiB0aGF0IG11c3Qgd29yayBqdXN0IHRoZSBzYW1lIHdoZW4gYW4gaW5kZXggaXMgYnVp bHQgaW4gcGFyYWxsZWwuCisJICovCisJc2xvY2tfdAkJbXV0ZXg7CisKKwkvKgorCSAqIE11 dGFibGUgc3RhdGUgdGhhdCBpcyBtYWludGFpbmVkIGJ5IHdvcmtlcnMsIGFuZCByZXBvcnRl ZCBiYWNrIHRvCisJICogbGVhZGVyIGF0IGVuZCBvZiB0aGUgc2NhbnMuCisJICoKKwkgKiBu cGFydGljaXBhbnRzZG9uZSBpcyBudW1iZXIgb2Ygd29ya2VyIHByb2Nlc3NlcyBmaW5pc2hl ZC4KKwkgKgorCSAqIHJlbHR1cGxlcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IGhl YXAgdHVwbGVzLgorCSAqCisJICogaW5kdHVwbGVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Yg dHVwbGVzIHRoYXQgbWFkZSBpdCBpbnRvIHRoZSBpbmRleC4KKwkgKi8KKwlpbnQJCQlucGFy dGljaXBhbnRzZG9uZTsKKwlkb3VibGUJCXJlbHR1cGxlczsKKwlkb3VibGUJCWluZHR1cGxl czsKKworCS8qCisJICogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YSBkYXRhIGZvbGxvd3Mu IENhbid0IGRpcmVjdGx5IGVtYmVkIGhlcmUsIGFzCisJICogaW1wbGVtZW50YXRpb25zIG9m IHRoZSBwYXJhbGxlbCB0YWJsZSBzY2FuIGRlc2MgaW50ZXJmYWNlIG1pZ2h0IG5lZWQKKwkg KiBzdHJvbmdlciBhbGlnbm1lbnQuCisJICovCit9IEdpblNoYXJlZDsKKworLyoKKyAqIFJl dHVybiBwb2ludGVyIHRvIGEgR2luU2hhcmVkJ3MgcGFyYWxsZWwgdGFibGUgc2Nhbi4KKyAq CisgKiBjLmYuIHNobV90b2NfYWxsb2NhdGUgYXMgdG8gd2h5IEJVRkZFUkFMSUdOIGlzIHVz ZWQsIHJhdGhlciB0aGFuIGp1c3QKKyAqIE1BWEFMSUdOLgorICovCisjZGVmaW5lIFBhcmFs bGVsVGFibGVTY2FuRnJvbUdpblNoYXJlZChzaGFyZWQpIFwKKwkoUGFyYWxsZWxUYWJsZVNj YW5EZXNjKSAoKGNoYXIgKikgKHNoYXJlZCkgKyBCVUZGRVJBTElHTihzaXplb2YoR2luU2hh cmVkKSkpCisKKy8qCisgKiBTdGF0dXMgZm9yIGxlYWRlciBpbiBwYXJhbGxlbCBpbmRleCBi dWlsZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgR2luTGVhZGVyCit7CisJLyogcGFyYWxsZWwg Y29udGV4dCBpdHNlbGYgKi8KKwlQYXJhbGxlbENvbnRleHQgKnBjeHQ7CisKKwkvKgorCSAq IG5wYXJ0aWNpcGFudHR1cGxlc29ydHMgaXMgdGhlIGV4YWN0IG51bWJlciBvZiB3b3JrZXIg cHJvY2Vzc2VzCisJICogc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBwbHVzIG9uZSBsZWFkZXIg cHJvY2VzcyBpZiBpdCBwYXJ0aWNpcGF0ZXMgYXMgYQorCSAqIHdvcmtlciAob25seSBESVNB QkxFX0xFQURFUl9QQVJUSUNJUEFUSU9OIGJ1aWxkcyBhdm9pZCBsZWFkZXIKKwkgKiBwYXJ0 aWNpcGF0aW5nIGFzIGEgd29ya2VyKS4KKwkgKi8KKwlpbnQJCQlucGFydGljaXBhbnR0dXBs ZXNvcnRzOworCisJLyoKKwkgKiBMZWFkZXIgcHJvY2VzcyBjb252ZW5pZW5jZSBwb2ludGVy cyB0byBzaGFyZWQgc3RhdGUgKGxlYWRlciBhdm9pZHMgVE9DCisJICogbG9va3VwcykuCisJ ICoKKwkgKiBHaW5TaGFyZWQgaXMgdGhlIHNoYXJlZCBzdGF0ZSBmb3IgZW50aXJlIGJ1aWxk LiAgc2hhcmVkc29ydCBpcyB0aGUKKwkgKiBzaGFyZWQsIHR1cGxlc29ydC1tYW5hZ2VkIHN0 YXRlIHBhc3NlZCB0byBlYWNoIHByb2Nlc3MgdHVwbGVzb3J0LgorCSAqIHNuYXBzaG90IGlz IHRoZSBzbmFwc2hvdCB1c2VkIGJ5IHRoZSBzY2FuIGlmZiBhbiBNVkNDIHNuYXBzaG90IGlz CisJICogcmVxdWlyZWQuCisJICovCisJR2luU2hhcmVkICAqZ2luc2hhcmVkOworCVNoYXJl ZHNvcnQgKnNoYXJlZHNvcnQ7CisJU25hcHNob3QJc25hcHNob3Q7CisJV2FsVXNhZ2UgICAq d2FsdXNhZ2U7CisJQnVmZmVyVXNhZ2UgKmJ1ZmZlcnVzYWdlOworfSBHaW5MZWFkZXI7CiAK IHR5cGVkZWYgc3RydWN0CiB7CkBAIC0zMiw5ICsxNDIsNDkgQEAgdHlwZWRlZiBzdHJ1Y3QK IAlNZW1vcnlDb250ZXh0IHRtcEN0eDsKIAlNZW1vcnlDb250ZXh0IGZ1bmNDdHg7CiAJQnVp bGRBY2N1bXVsYXRvciBhY2N1bTsKKworCS8qIEZJWE1FIGxpa2VseSBkdXBsaWNhdGUgd2l0 aCBpbmR0dXBsZXMgKi8KKwlkb3VibGUJCWJzX251bXR1cGxlczsKKwlkb3VibGUJCWJzX3Jl bHR1cGxlczsKKworCS8qCisJICogYnNfbGVhZGVyIGlzIG9ubHkgcHJlc2VudCB3aGVuIGEg cGFyYWxsZWwgaW5kZXggYnVpbGQgaXMgcGVyZm9ybWVkLCBhbmQKKwkgKiBvbmx5IGluIHRo ZSBsZWFkZXIgcHJvY2Vzcy4gKEFjdHVhbGx5LCBvbmx5IHRoZSBsZWFkZXIgcHJvY2VzcyBo YXMgYQorCSAqIEdpbkJ1aWxkU3RhdGUuKQorCSAqLworCUdpbkxlYWRlciAgKmJzX2xlYWRl cjsKKwlpbnQJCQlic193b3JrZXJfaWQ7CisKKwkvKgorCSAqIFRoZSBzb3J0c3RhdGUgaXMg dXNlZCBieSB3b3JrZXJzIChpbmNsdWRpbmcgdGhlIGxlYWRlcikuIEl0IGhhcyB0byBiZQor CSAqIHBhcnQgb2YgdGhlIGJ1aWxkIHN0YXRlLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSB0 aGluZyBwYXNzZWQgdG8gdGhlCisJICogYnVpbGQgY2FsbGJhY2sgZXRjLgorCSAqLworCVR1 cGxlc29ydHN0YXRlICpic19zb3J0c3RhdGU7CiB9IEdpbkJ1aWxkU3RhdGU7CiAKIAorLyog cGFyYWxsZWwgaW5kZXggYnVpbGRzICovCitzdGF0aWMgdm9pZCBfZ2luX2JlZ2luX3BhcmFs bGVsKEdpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9u IGluZGV4LAorCQkJCQkJCQlib29sIGlzY29uY3VycmVudCwgaW50IHJlcXVlc3QpOworc3Rh dGljIHZvaWQgX2dpbl9lbmRfcGFyYWxsZWwoR2luTGVhZGVyICpnaW5sZWFkZXIsIEdpbkJ1 aWxkU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyBTaXplIF9naW5fcGFyYWxsZWxfZXN0aW1hdGVf c2hhcmVkKFJlbGF0aW9uIGhlYXAsIFNuYXBzaG90IHNuYXBzaG90KTsKK3N0YXRpYyBkb3Vi bGUgX2dpbl9wYXJhbGxlbF9oZWFwc2NhbihHaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlKTsK K3N0YXRpYyBkb3VibGUgX2dpbl9wYXJhbGxlbF9tZXJnZShHaW5CdWlsZFN0YXRlICpidWls ZHN0YXRlKTsKK3N0YXRpYyB2b2lkIF9naW5fbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtl cihHaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlLAorCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGhl YXAsIFJlbGF0aW9uIGluZGV4KTsKK3N0YXRpYyB2b2lkIF9naW5fcGFyYWxsZWxfc2Nhbl9h bmRfYnVpbGQoR2luQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwKKwkJCQkJCQkJCQkgR2luU2hh cmVkICpnaW5zaGFyZWQsCisJCQkJCQkJCQkJIFNoYXJlZHNvcnQgKnNoYXJlZHNvcnQsCisJ CQkJCQkJCQkJIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJCQkJCSBp bnQgc29ydG1lbSwgYm9vbCBwcm9ncmVzcyk7CisKK3N0YXRpYyBEYXR1bSBfZ2luX3BhcnNl X3R1cGxlKEdpblR1cGxlICphLCBJdGVtUG9pbnRlckRhdGEgKippdGVtcyk7CitzdGF0aWMg R2luVHVwbGUgKl9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0TnVtYmVyIGF0dHJudW0sIHVuc2ln bmVkIGNoYXIgY2F0ZWdvcnksCisJCQkJCQkJCSAgRGF0dW0ga2V5LCBpbnQxNiB0eXBsZW4s IGJvb2wgdHlwYnl2YWwsCisJCQkJCQkJCSAgSXRlbVBvaW50ZXJEYXRhICppdGVtcywgdWlu dDMyIG5pdGVtcywKKwkJCQkJCQkJICBTaXplICpsZW4pOworCiAvKgogICogQWRkcyBhcnJh eSBvZiBpdGVtIHBvaW50ZXJzIHRvIHR1cGxlJ3MgcG9zdGluZyBsaXN0LCBvcgogICogY3Jl YXRlcyBwb3N0aW5nIHRyZWUgYW5kIHR1cGxlIHBvaW50aW5nIHRvIHRyZWUgaW4gY2FzZQpA QCAtMzEzLDEyICs0NjMsOTUgQEAgZ2luQnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwg SXRlbVBvaW50ZXIgdGlkLCBEYXR1bSAqdmFsdWVzLAogCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRDdHgpOwogfQogCitzdGF0aWMgdm9pZAorZ2luQnVpbGRDYWxsYmFja1BhcmFsbGVs KFJlbGF0aW9uIGluZGV4LCBJdGVtUG9pbnRlciB0aWQsIERhdHVtICp2YWx1ZXMsCisJCQkJ CQkgYm9vbCAqaXNudWxsLCBib29sIHR1cGxlSXNBbGl2ZSwgdm9pZCAqc3RhdGUpCit7CisJ R2luQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSA9IChHaW5CdWlsZFN0YXRlICopIHN0YXRlOwor CU1lbW9yeUNvbnRleHQgb2xkQ3R4OworCWludAkJCWk7CisKKwlvbGRDdHggPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oYnVpbGRzdGF0ZS0+dG1wQ3R4KTsKKworCWZvciAoaSA9IDA7IGkg PCBidWlsZHN0YXRlLT5naW5zdGF0ZS5vcmlnVHVwZGVzYy0+bmF0dHM7IGkrKykKKwkJZ2lu SGVhcFR1cGxlQnVsa0luc2VydChidWlsZHN0YXRlLCAoT2Zmc2V0TnVtYmVyKSAoaSArIDEp LAorCQkJCQkJCSAgIHZhbHVlc1tpXSwgaXNudWxsW2ldLCB0aWQpOworCisJLyoKKwkgKiBY WFggaWRlYSAtIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgZW50cmllcyBkaXJlY3RseSBpbnRv IHRoZSBzaGFyZWQKKwkgKiB0dXBsZXNvcnQsIHdyaXRlIGl0IGludG8gYSBsb2NhbCBvbmUs IGRvIHRoZSBzb3J0IGluIHRoZSB3b3JrZXIsIGFuZAorCSAqIGNvbWJpbmUgdGhlIHJlc3Vs dHMuIEZvciBsYXJnZSB0YWJsZXMgd2l0aCBtYW55IGRpZmZlcmVudCBrZXlzIHRoYXQncwor CSAqIGdvaW5nIHRvIHdvcmsgYmV0dGVyIHRoYW4gdGhlIGN1cnJlbnQgYXBwcm9hY2ggd2hl cmUgd2UgZG9uJ3QgZ2V0IG1hbnkKKwkgKiBtYXRjaGVzIGluIHdvcmtfbWVtIChtYXliZSB0 aGlzIHNob3VsZCB1c2UgMzJNQiwgd2hpY2ggaXMgd2hhdCB3ZSB1c2UKKwkgKiB3aGVuIHBs YW5uaW5nLCBidXQgZXZlbiB0aGF0IG1heSBub3QgYmUgZ3JlYXQpLiBXaGljaCBtZWFucyB3 ZSBhcmUKKwkgKiBsaWtlbHkgdG8gaGF2ZSBtYW55IGVudHJpZXMgd2l0aCBhIHNpbmdsZSBU SUQsIGZvcmNpbmcgdGhlIGxlYWRlciB0byBkbworCSAqIGEgcXNvcnQoKSB3aGVuIG1lcmdp bmcgdGhlIGRhdGEsIG9mdGVuIGFtb3VudGluZyB0byB+NTAlIG9mIHRoZSBzZXJpYWwKKwkg KiBwYXJ0LiBCeSBkb2luZyB0aGUgcXNvcnQoKSBpbiBhIHdvcmtlciwgbGVhZGVyIHRoZW4g Y2FuIGRvIGEgbWVyZ2Vzb3J0CisJICogKGxpa2VseSBjaGVhcGVyKS4gQWxzbywgaXQgbWVh bnMgdGhlIGFtb3VudCBvZiBkYXRhIHdvcmtlci0+bGVhZGVyIGlzCisJICogZ29pbmcgdG8g YmUgbG93ZXIgdGhhbmtzIHRvIGRlZHVwbGljYXRpb24uCisJICoKKwkgKiBEaXNhZHZhbnRh Z2U6IEl0IG5lZWRzIG1vcmUgZGlzayBzcGFjZSwgcG9zc2libHkgdXAgdG8gMngsIGJlY2F1 c2UgZWFjaAorCSAqIHdvcmtlciBjcmVhdGVzIGEgdHVwbGVzdG9yZSwgdGhlbiAidHJhbnNm b3JtcyBpdCIgaW50byB0aGUgc2hhcmVkCisJICogdHVwbGVzdG9yZSAoaG9wZWZ1bGx5IGxl c3MgZGF0YSwgYnV0IG5vdCBndWFyYW50ZWVkKS4KKwkgKgorCSAqIEl0J3MgaG93ZXZlciBw b3NzaWJsZSB0byBwYXJ0aXRpb24gdGhlIGRhdGEgaW50byBtdWx0aXBsZSB0dXBsZXNvcnRz CisJICogcGVyIHdvcmtlciAoYnkgaGFzaGluZykuIFdlIGRvbid0IG5lZWQgcGVyZmVjdCBz b3J0aW5nLCBhbmQgd2UgY2FuIGV2ZW4KKwkgKiBsaXZlIHdpdGggImVxdWFsIiBrZXlzIGhh dmluZyBtdWx0aXBsZSBoYXNoZXMgKGlmIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAqIGJpbmFy eSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHZhbHVlKS4KKwkgKi8KKworCS8qCisJICogSWYg d2UndmUgbWF4ZWQgb3V0IG91ciBhdmFpbGFibGUgbWVtb3J5LCBkdW1wIGV2ZXJ5dGhpbmcg dG8gdGhlCisJICogdHVwbGVzb3J0CisJICoKKwkgKiBYWFggcHJvYmFibHkgc2hvdWxkIHVz ZSAzMk1CLCBub3Qgd29ya19tZW0sIGFzIHVzZWQgZHVyaW5nIHBsYW5uaW5nPworCSAqLwor CWlmIChidWlsZHN0YXRlLT5hY2N1bS5hbGxvY2F0ZWRNZW1vcnkgPj0gKFNpemUpIHdvcmtf bWVtICogMTAyNEwpCisJeworCQlJdGVtUG9pbnRlckRhdGEgKmxpc3Q7CisJCURhdHVtCQlr ZXk7CisJCUdpbk51bGxDYXRlZ29yeSBjYXRlZ29yeTsKKwkJdWludDMyCQlubGlzdDsKKwkJ T2Zmc2V0TnVtYmVyIGF0dG51bTsKKwkJVHVwbGVEZXNjCXRkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihpbmRleCk7CisKKwkJZ2luQmVnaW5CQVNjYW4oJmJ1aWxkc3RhdGUtPmFjY3VtKTsK KwkJd2hpbGUgKChsaXN0ID0gZ2luR2V0QkFFbnRyeSgmYnVpbGRzdGF0ZS0+YWNjdW0sCisJ CQkJCQkJCQkgJmF0dG51bSwgJmtleSwgJmNhdGVnb3J5LCAmbmxpc3QpKSAhPSBOVUxMKQor CQl7CisJCQkvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUga2V5ICovCisJCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0ZGVzYywgKGF0dG51bSAtIDEpKTsKKwor CQkJLyogR0lOIHR1cGxlIGFuZCB0dXBsZSBsZW5ndGggKi8KKwkJCUdpblR1cGxlICAgKnR1 cDsKKwkJCVNpemUJCXR1cGxlbjsKKworCQkJLyogdGhlcmUgY291bGQgYmUgbWFueSBlbnRy aWVzLCBzbyBiZSB3aWxsaW5nIHRvIGFib3J0IGhlcmUgKi8KKwkJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisKKwkJCXR1cCA9IF9naW5fYnVpbGRfdHVwbGUoYXR0bnVtLCBjYXRlZ29y eSwKKwkJCQkJCQkJICAga2V5LCBhdHRyLT5hdHRsZW4sIGF0dHItPmF0dGJ5dmFsLAorCQkJ CQkJCQkgICBsaXN0LCBubGlzdCwgJnR1cGxlbik7CisKKwkJCXR1cGxlc29ydF9wdXRnaW50 dXBsZShidWlsZHN0YXRlLT5ic19zb3J0c3RhdGUsIHR1cCwgdHVwbGVuKTsKKworCQkJcGZy ZWUodHVwKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHRSZXNldChidWlsZHN0YXRlLT50bXBD dHgpOworCQlnaW5Jbml0QkEoJmJ1aWxkc3RhdGUtPmFjY3VtKTsKKwl9CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKK30KKwogSW5kZXhCdWlsZFJlc3VsdCAqCiBnaW5i dWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleElu Zm8pCiB7CiAJSW5kZXhCdWlsZFJlc3VsdCAqcmVzdWx0OwogCWRvdWJsZQkJcmVsdHVwbGVz OwogCUdpbkJ1aWxkU3RhdGUgYnVpbGRzdGF0ZTsKKwlHaW5CdWlsZFN0YXRlICpzdGF0ZSA9 ICZidWlsZHN0YXRlOwogCUJ1ZmZlcgkJUm9vdEJ1ZmZlciwKIAkJCQlNZXRhQnVmZmVyOwog CUl0ZW1Qb2ludGVyRGF0YSAqbGlzdDsKQEAgLTMzNiw2ICs1NjksMTQgQEAgZ2luYnVpbGQo UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQog CWJ1aWxkc3RhdGUuaW5kdHVwbGVzID0gMDsKIAltZW1zZXQoJmJ1aWxkc3RhdGUuYnVpbGRT dGF0cywgMCwgc2l6ZW9mKEdpblN0YXRzRGF0YSkpOwogCisJLyoKKwkgKiBYWFggTWFrZSBz dXJlIHRvIGluaXRpYWxpemUgYSBidW5jaCBvZiBmaWVsZHMsIG5vdCB0byB0cmlwIHZhbGdy aW5kLgorCSAqIE1heWJlIHRoZXJlIHNob3VsZCBiZSBhbiAiaW5pdCIgZnVuY3Rpb24gZm9y IGJ1aWxkIHN0YXRlPworCSAqLworCWJ1aWxkc3RhdGUuYnNfbnVtdHVwbGVzID0gMDsKKwli dWlsZHN0YXRlLmJzX3JlbHR1cGxlcyA9IDA7CisJYnVpbGRzdGF0ZS5ic19sZWFkZXIgPSBO VUxMOworCiAJLyogaW5pdGlhbGl6ZSB0aGUgbWV0YSBwYWdlICovCiAJTWV0YUJ1ZmZlciA9 IEdpbk5ld0J1ZmZlcihpbmRleCk7CiAKQEAgLTM3NiwyNSArNjE3LDkxIEBAIGdpbmJ1aWxk KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykK IAlnaW5Jbml0QkEoJmJ1aWxkc3RhdGUuYWNjdW0pOwogCiAJLyoKLQkgKiBEbyB0aGUgaGVh cCBzY2FuLiAgV2UgZGlzYWxsb3cgc3luYyBzY2FuIGhlcmUgYmVjYXVzZSBkYXRhUGxhY2VU b1BhZ2UKLQkgKiBwcmVmZXJzIHRvIHJlY2VpdmUgdHVwbGVzIGluIFRJRCBvcmRlci4KKwkg KiBBdHRlbXB0IHRvIGxhdW5jaCBwYXJhbGxlbCB3b3JrZXIgc2NhbiB3aGVuIHJlcXVpcmVk CisJICoKKwkgKiBYWFggcGxhbl9jcmVhdGVfaW5kZXhfd29ya2VycyBtYWtlcyB0aGUgbnVt YmVyIG9mIHdvcmtlcnMgZGVwZW5kZW50IG9uCisJICogbWFpbnRlbmFuY2Vfd29ya19tZW0s IHJlcXVpcmluZyAzMk1CIGZvciBlYWNoIHdvcmtlci4gVGhhdCBtYWtlcyBzZW5zZQorCSAq IGZvciBidHJlZSwgYnV0IG5vdCBmb3IgR0lOLCB3aGljaCBjYW4gZG8gd2l0aCBtdWNoIGxl c3MgbWVtb3J5LiBTbworCSAqIG1heWJlIG1ha2UgdGhhdCBzb21laG93IGxlc3Mgc3RyaWN0 LCBvcHRpb25hbGx5PworCSAqLworCWlmIChpbmRleEluZm8tPmlpX1BhcmFsbGVsV29ya2Vy cyA+IDApCisJCV9naW5fYmVnaW5fcGFyYWxsZWwoc3RhdGUsIGhlYXAsIGluZGV4LCBpbmRl eEluZm8tPmlpX0NvbmN1cnJlbnQsCisJCQkJCQkJaW5kZXhJbmZvLT5paV9QYXJhbGxlbFdv cmtlcnMpOworCisKKwkvKgorCSAqIElmIHBhcmFsbGVsIGJ1aWxkIHJlcXVlc3RlZCBhbmQg YXQgbGVhc3Qgb25lIHdvcmtlciBwcm9jZXNzIHdhcworCSAqIHN1Y2Nlc3NmdWxseSBsYXVu Y2hlZCwgc2V0IHVwIGNvb3JkaW5hdGlvbiBzdGF0ZSwgd2FpdCBmb3Igd29ya2VycyB0bwor CSAqIGNvbXBsZXRlLiBUaGVuIHJlYWQgYWxsIHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVw bGVzb3J0IGFuZCBpbnNlcnQKKwkgKiB0aGVtIGludG8gdGhlIGluZGV4LgorCSAqCisJICog SW4gc2VyaWFsIG1vZGUsIHNpbXBseSBzY2FuIHRoZSB0YWJsZSBhbmQgYnVpbGQgdGhlIGlu ZGV4IG9uZSBpbmRleAorCSAqIHR1cGxlIGF0IGEgdGltZS4KIAkgKi8KLQlyZWx0dXBsZXMg PSB0YWJsZV9pbmRleF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIGZhbHNl LCB0cnVlLAotCQkJCQkJCQkJICAgZ2luQnVpbGRDYWxsYmFjaywgKHZvaWQgKikgJmJ1aWxk c3RhdGUsCi0JCQkJCQkJCQkgICBOVUxMKTsKKwlpZiAoc3RhdGUtPmJzX2xlYWRlcikKKwl7 CisJCVNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGU7CisKKwkJY29vcmRpbmF0ZSA9IChTb3J0 Q29vcmRpbmF0ZSkgcGFsbG9jMChzaXplb2YoU29ydENvb3JkaW5hdGVEYXRhKSk7CisJCWNv b3JkaW5hdGUtPmlzV29ya2VyID0gZmFsc2U7CisJCWNvb3JkaW5hdGUtPm5QYXJ0aWNpcGFu dHMgPQorCQkJc3RhdGUtPmJzX2xlYWRlci0+bnBhcnRpY2lwYW50dHVwbGVzb3J0czsKKwkJ Y29vcmRpbmF0ZS0+c2hhcmVkc29ydCA9IHN0YXRlLT5ic19sZWFkZXItPnNoYXJlZHNvcnQ7 CisKKwkJLyoKKwkJICogQmVnaW4gbGVhZGVyIHR1cGxlc29ydC4KKwkJICoKKwkJICogSW4g Y2FzZXMgd2hlcmUgcGFyYWxsZWxpc20gaXMgaW52b2x2ZWQsIHRoZSBsZWFkZXIgcmVjZWl2 ZXMgdGhlCisJCSAqIHNhbWUgc2hhcmUgb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gYXMgYSBz ZXJpYWwgc29ydCAoaXQgaXMKKwkJICogZ2VuZXJhbGx5IHRyZWF0ZWQgaW4gdGhlIHNhbWUg d2F5IGFzIGEgc2VyaWFsIHNvcnQgb25jZSB3ZSByZXR1cm4pLgorCQkgKiBQYXJhbGxlbCB3 b3JrZXIgVHVwbGVzb3J0c3RhdGVzIHdpbGwgaGF2ZSByZWNlaXZlZCBvbmx5IGEgZnJhY3Rp b24KKwkJICogb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0sIHRob3VnaC4KKwkJICoKKwkJICog V2UgcmVseSBvbiB0aGUgbGlmZXRpbWUgb2YgdGhlIExlYWRlciBUdXBsZXNvcnRzdGF0ZSBh bG1vc3Qgbm90CisJCSAqIG92ZXJsYXBwaW5nIHdpdGggYW55IHdvcmtlciBUdXBsZXNvcnRz dGF0ZSdzIGxpZmV0aW1lLiAgVGhlcmUgbWF5CisJCSAqIGJlIHNvbWUgc21hbGwgb3Zlcmxh cCwgYnV0IHRoYXQncyBva2F5IGJlY2F1c2Ugd2UgcmVseSBvbiBsZWFkZXIKKwkJICogVHVw bGVzb3J0c3RhdGUgb25seSBhbGxvY2F0aW5nIGEgc21hbGwsIGZpeGVkIGFtb3VudCBvZiBt ZW1vcnkKKwkJICogaGVyZS4gV2hlbiBpdHMgdHVwbGVzb3J0X3BlcmZvcm1zb3J0KCkgaXMg Y2FsbGVkIChieSBvdXIgY2FsbGVyKSwKKwkJICogYW5kIHNpZ25pZmljYW50IGFtb3VudHMg b2YgbWVtb3J5IGFyZSBsaWtlbHkgdG8gYmUgdXNlZCwgYWxsCisJCSAqIHdvcmtlcnMgbXVz dCBoYXZlIGFscmVhZHkgZnJlZWQgYWxtb3N0IGFsbCBtZW1vcnkgaGVsZCBieSB0aGVpcgor CQkgKiBUdXBsZXNvcnRzdGF0ZXMgKHRoZXkgYXJlIGFib3V0IHRvIGdvIGF3YXkgY29tcGxl dGVseSwgdG9vKS4gIFRoZQorCQkgKiBvdmVyYWxsIGVmZmVjdCBpcyB0aGF0IG1haW50ZW5h bmNlX3dvcmtfbWVtIGFsd2F5cyByZXByZXNlbnRzIGFuCisJCSAqIGFic29sdXRlIGhpZ2gg d2F0ZXJtYXJrIG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgYSBDUkVBVEUKKwkJ ICogSU5ERVggb3BlcmF0aW9uLCByZWdhcmRsZXNzIG9mIHRoZSB1c2Ugb2YgcGFyYWxsZWxp c20gb3IgYW55IG90aGVyCisJCSAqIGZhY3Rvci4KKwkJICovCisJCXN0YXRlLT5ic19zb3J0 c3RhdGUgPQorCQkJdHVwbGVzb3J0X2JlZ2luX2luZGV4X2dpbihtYWludGVuYW5jZV93b3Jr X21lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCSAgVFVQTEVTT1JUX05PTkUpOwogCi0JLyog ZHVtcCByZW1haW5pbmcgZW50cmllcyB0byB0aGUgaW5kZXggKi8KLQlvbGRDdHggPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oYnVpbGRzdGF0ZS50bXBDdHgpOwotCWdpbkJlZ2luQkFTY2Fu KCZidWlsZHN0YXRlLmFjY3VtKTsKLQl3aGlsZSAoKGxpc3QgPSBnaW5HZXRCQUVudHJ5KCZi dWlsZHN0YXRlLmFjY3VtLAotCQkJCQkJCQkgJmF0dG51bSwgJmtleSwgJmNhdGVnb3J5LCAm bmxpc3QpKSAhPSBOVUxMKQorCQkvKiBzY2FuIHRoZSByZWxhdGlvbiBhbmQgbWVyZ2UgcGVy LXdvcmtlciByZXN1bHRzICovCisJCXJlbHR1cGxlcyA9IF9naW5fcGFyYWxsZWxfbWVyZ2Uo c3RhdGUpOworCisJCV9naW5fZW5kX3BhcmFsbGVsKHN0YXRlLT5ic19sZWFkZXIsIHN0YXRl KTsKKwl9CisJZWxzZQkJCQkJCS8qIG5vIHBhcmFsbGVsIGluZGV4IGJ1aWxkICovCiAJewot CQkvKiB0aGVyZSBjb3VsZCBiZSBtYW55IGVudHJpZXMsIHNvIGJlIHdpbGxpbmcgdG8gYWJv cnQgaGVyZSAqLwotCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQlnaW5FbnRyeUluc2Vy dCgmYnVpbGRzdGF0ZS5naW5zdGF0ZSwgYXR0bnVtLCBrZXksIGNhdGVnb3J5LAotCQkJCQkg ICBsaXN0LCBubGlzdCwgJmJ1aWxkc3RhdGUuYnVpbGRTdGF0cyk7CisJCS8qCisJCSAqIERv IHRoZSBoZWFwIHNjYW4uICBXZSBkaXNhbGxvdyBzeW5jIHNjYW4gaGVyZSBiZWNhdXNlCisJ CSAqIGRhdGFQbGFjZVRvUGFnZSBwcmVmZXJzIHRvIHJlY2VpdmUgdHVwbGVzIGluIFRJRCBv cmRlci4KKwkJICovCisJCXJlbHR1cGxlcyA9IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVh cCwgaW5kZXgsIGluZGV4SW5mbywgZmFsc2UsIHRydWUsCisJCQkJCQkJCQkJICAgZ2luQnVp bGRDYWxsYmFjaywgKHZvaWQgKikgJmJ1aWxkc3RhdGUsCisJCQkJCQkJCQkJICAgTlVMTCk7 CisKKwkJLyogZHVtcCByZW1haW5pbmcgZW50cmllcyB0byB0aGUgaW5kZXggKi8KKwkJb2xk Q3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGJ1aWxkc3RhdGUudG1wQ3R4KTsKKwkJZ2lu QmVnaW5CQVNjYW4oJmJ1aWxkc3RhdGUuYWNjdW0pOworCQl3aGlsZSAoKGxpc3QgPSBnaW5H ZXRCQUVudHJ5KCZidWlsZHN0YXRlLmFjY3VtLAorCQkJCQkJCQkJICZhdHRudW0sICZrZXks ICZjYXRlZ29yeSwgJm5saXN0KSkgIT0gTlVMTCkKKwkJeworCQkJLyogdGhlcmUgY291bGQg YmUgbWFueSBlbnRyaWVzLCBzbyBiZSB3aWxsaW5nIHRvIGFib3J0IGhlcmUgKi8KKwkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCQlnaW5FbnRyeUluc2VydCgmYnVpbGRzdGF0ZS5n aW5zdGF0ZSwgYXR0bnVtLCBrZXksIGNhdGVnb3J5LAorCQkJCQkJICAgbGlzdCwgbmxpc3Qs ICZidWlsZHN0YXRlLmJ1aWxkU3RhdHMpOworCQl9CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRDdHgpOwogCX0KLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKIAogCU1l bW9yeUNvbnRleHREZWxldGUoYnVpbGRzdGF0ZS5mdW5jQ3R4KTsKIAlNZW1vcnlDb250ZXh0 RGVsZXRlKGJ1aWxkc3RhdGUudG1wQ3R4KTsKQEAgLTUzNCwzICs4NDEsMTAwNiBAQCBnaW5p bnNlcnQoUmVsYXRpb24gaW5kZXgsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAog CXJldHVybiBmYWxzZTsKIH0KKworLyoKKyAqIENyZWF0ZSBwYXJhbGxlbCBjb250ZXh0LCBh bmQgbGF1bmNoIHdvcmtlcnMgZm9yIGxlYWRlci4KKyAqCisgKiBidWlsZHN0YXRlIGFyZ3Vt ZW50IHNob3VsZCBiZSBpbml0aWFsaXplZCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZQor ICogdHVwbGVzb3J0IHN0YXRlcywgd2hpY2ggbWF5IGxhdGVyIGJlIGNyZWF0ZWQgYmFzZWQg b24gc2hhcmVkCisgKiBzdGF0ZSBpbml0aWFsbHkgc2V0IHVwIGhlcmUpLgorICoKKyAqIGlz Y29uY3VycmVudCBpbmRpY2F0ZXMgaWYgb3BlcmF0aW9uIGlzIENSRUFURSBJTkRFWCBDT05D VVJSRU5UTFkuCisgKgorICogcmVxdWVzdCBpcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBwYXJh bGxlbCB3b3JrZXIgcHJvY2Vzc2VzIHRvIGxhdW5jaC4KKyAqCisgKiBTZXRzIGJ1aWxkc3Rh dGUncyBHaW5MZWFkZXIsIHdoaWNoIGNhbGxlciBtdXN0IHVzZSB0byBzaHV0IGRvd24gcGFy YWxsZWwKKyAqIG1vZGUgYnkgcGFzc2luZyBpdCB0byBfZ2luX2VuZF9wYXJhbGxlbCgpIGF0 IHRoZSB2ZXJ5IGVuZCBvZiBpdHMgaW5kZXgKKyAqIGJ1aWxkLiAgSWYgbm90IGV2ZW4gYSBz aW5nbGUgd29ya2VyIHByb2Nlc3MgY2FuIGJlIGxhdW5jaGVkLCB0aGlzIGlzCisgKiBuZXZl ciBzZXQsIGFuZCBjYWxsZXIgc2hvdWxkIHByb2NlZWQgd2l0aCBhIHNlcmlhbCBpbmRleCBi dWlsZC4KKyAqLworc3RhdGljIHZvaWQKK19naW5fYmVnaW5fcGFyYWxsZWwoR2luQnVpbGRT dGF0ZSAqYnVpbGRzdGF0ZSwgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCisJCQkJ CWJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkKK3sKKwlQYXJhbGxlbENvbnRleHQg KnBjeHQ7CisJaW50CQkJc2NhbnR1cGxlc29ydHN0YXRlczsKKwlTbmFwc2hvdAlzbmFwc2hv dDsKKwlTaXplCQllc3RnaW5zaGFyZWQ7CisJU2l6ZQkJZXN0c29ydDsKKwlHaW5TaGFyZWQg ICpnaW5zaGFyZWQ7CisJU2hhcmVkc29ydCAqc2hhcmVkc29ydDsKKwlHaW5MZWFkZXIgICpn aW5sZWFkZXIgPSAoR2luTGVhZGVyICopIHBhbGxvYzAoc2l6ZW9mKEdpbkxlYWRlcikpOwor CVdhbFVzYWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsKKwli b29sCQlsZWFkZXJwYXJ0aWNpcGF0ZXMgPSB0cnVlOworCWludAkJCXF1ZXJ5bGVuOworCisj aWZkZWYgRElTQUJMRV9MRUFERVJfUEFSVElDSVBBVElPTgorCWxlYWRlcnBhcnRpY2lwYXRl cyA9IGZhbHNlOworI2VuZGlmCisKKwkvKgorCSAqIEVudGVyIHBhcmFsbGVsIG1vZGUsIGFu ZCBjcmVhdGUgY29udGV4dCBmb3IgcGFyYWxsZWwgYnVpbGQgb2YgZ2luIGluZGV4CisJICov CisJRW50ZXJQYXJhbGxlbE1vZGUoKTsKKwlBc3NlcnQocmVxdWVzdCA+IDApOworCXBjeHQg PSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVzIiwgIl9naW5fcGFyYWxsZWxfYnVp bGRfbWFpbiIsCisJCQkJCQkJCSByZXF1ZXN0KTsKKworCXNjYW50dXBsZXNvcnRzdGF0ZXMg PSBsZWFkZXJwYXJ0aWNpcGF0ZXMgPyByZXF1ZXN0ICsgMSA6IHJlcXVlc3Q7CisKKwkvKgor CSAqIFByZXBhcmUgZm9yIHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBJbiBhIG5vcm1h bCBpbmRleCBidWlsZCwgd2UgdXNlCisJICogU25hcHNob3RBbnkgYmVjYXVzZSB3ZSBtdXN0 IHJldHJpZXZlIGFsbCB0dXBsZXMgYW5kIGRvIG91ciBvd24gdGltZQorCSAqIHF1YWwgY2hl Y2tzIChiZWNhdXNlIHdlIGhhdmUgdG8gaW5kZXggUkVDRU5UTFlfREVBRCB0dXBsZXMpLiAg SW4gYQorCSAqIGNvbmN1cnJlbnQgYnVpbGQsIHdlIHRha2UgYSByZWd1bGFyIE1WQ0Mgc25h cHNob3QgYW5kIGluZGV4IHdoYXRldmVyJ3MKKwkgKiBsaXZlIGFjY29yZGluZyB0byB0aGF0 LgorCSAqLworCWlmICghaXNjb25jdXJyZW50KQorCQlzbmFwc2hvdCA9IFNuYXBzaG90QW55 OworCWVsc2UKKwkJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CisKKwkvKgorCSAqIEVzdGltYXRlIHNpemUgZm9yIG91ciBvd24gUEFS QUxMRUxfS0VZX0dJTl9TSEFSRUQgd29ya3NwYWNlLgorCSAqLworCWVzdGdpbnNoYXJlZCA9 IF9naW5fcGFyYWxsZWxfZXN0aW1hdGVfc2hhcmVkKGhlYXAsIHNuYXBzaG90KTsKKwlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGVzdGdpbnNoYXJlZCk7CisJ ZXN0c29ydCA9IHR1cGxlc29ydF9lc3RpbWF0ZV9zaGFyZWQoc2NhbnR1cGxlc29ydHN0YXRl cyk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBlc3Rzb3J0 KTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAyKTsKKwor CS8qCisJICogRXN0aW1hdGUgc3BhY2UgZm9yIFdhbFVzYWdlIGFuZCBCdWZmZXJVc2FnZSAt LSBQQVJBTExFTF9LRVlfV0FMX1VTQUdFCisJICogYW5kIFBBUkFMTEVMX0tFWV9CVUZGRVJf VVNBR0UuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gZXh0ZW5zaW9ucyBsb2FkZWQgdGhh dCBjYXJlLCB3ZSBjb3VsZCBza2lwIHRoaXMuICBXZQorCSAqIGhhdmUgbm8gd2F5IG9mIGtu b3dpbmcgd2hldGhlciBhbnlvbmUncyBsb29raW5nIGF0IHBnV2FsVXNhZ2Ugb3IKKwkgKiBw Z0J1ZmZlclVzYWdlLCBzbyBkbyBpdCB1bmNvbmRpdGlvbmFsbHkuCisJICovCisJc2htX3Rv Y19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUo c2l6ZW9mKFdhbFVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRl X2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygm cGN4dC0+ZXN0aW1hdG9yLAorCQkJCQkJICAgbXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclVzYWdl KSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVz dGltYXRvciwgMSk7CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQQVJBTExFTF9LRVlfUVVF UllfVEVYVCBzcGFjZSAqLworCWlmIChkZWJ1Z19xdWVyeV9zdHJpbmcpCisJeworCQlxdWVy eWxlbiA9IHN0cmxlbihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCQlzaG1fdG9jX2VzdGltYXRl X2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHF1ZXJ5bGVuICsgMSk7CisJCXNobV90b2NfZXN0 aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwl9CisJZWxzZQorCQlxdWVyeWxl biA9IDA7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCisJLyogRXZlcnlvbmUncyBo YWQgYSBjaGFuY2UgdG8gYXNrIGZvciBzcGFjZSwgc28gbm93IGNyZWF0ZSB0aGUgRFNNICov CisJSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHBjeHQpOworCisJLyogSWYgbm8gRFNNIHNlZ21l bnQgd2FzIGF2YWlsYWJsZSwgYmFjayBvdXQgKGRvIHNlcmlhbCBidWlsZCkgKi8KKwlpZiAo cGN4dC0+c2VnID09IE5VTEwpCisJeworCQlpZiAoSXNNVkNDU25hcHNob3Qoc25hcHNob3Qp KQorCQkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJRGVzdHJveVBhcmFsbGVs Q29udGV4dChwY3h0KTsKKwkJRXhpdFBhcmFsbGVsTW9kZSgpOworCQlyZXR1cm47CisJfQor CisJLyogU3RvcmUgc2hhcmVkIGJ1aWxkIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQg c3BhY2UgKi8KKwlnaW5zaGFyZWQgPSAoR2luU2hhcmVkICopIHNobV90b2NfYWxsb2NhdGUo cGN4dC0+dG9jLCBlc3RnaW5zaGFyZWQpOworCS8qIEluaXRpYWxpemUgaW1tdXRhYmxlIHN0 YXRlICovCisJZ2luc2hhcmVkLT5oZWFwcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKGhlYXAp OworCWdpbnNoYXJlZC0+aW5kZXhyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQoaW5kZXgpOwor CWdpbnNoYXJlZC0+aXNjb25jdXJyZW50ID0gaXNjb25jdXJyZW50OworCWdpbnNoYXJlZC0+ c2NhbnR1cGxlc29ydHN0YXRlcyA9IHNjYW50dXBsZXNvcnRzdGF0ZXM7CisKKwlDb25kaXRp b25WYXJpYWJsZUluaXQoJmdpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisJU3BpbkxvY2tJ bml0KCZnaW5zaGFyZWQtPm11dGV4KTsKKworCS8qIEluaXRpYWxpemUgbXV0YWJsZSBzdGF0 ZSAqLworCWdpbnNoYXJlZC0+bnBhcnRpY2lwYW50c2RvbmUgPSAwOworCWdpbnNoYXJlZC0+ cmVsdHVwbGVzID0gMC4wOworCWdpbnNoYXJlZC0+aW5kdHVwbGVzID0gMC4wOworCisJdGFi bGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoaGVhcCwKKwkJCQkJCQkJICBQYXJhbGxlbFRh YmxlU2NhbkZyb21HaW5TaGFyZWQoZ2luc2hhcmVkKSwKKwkJCQkJCQkJICBzbmFwc2hvdCk7 CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9y IHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgorCSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVl IHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0aW5lLgorCSAqLworCXNoYXJlZHNvcnQgPSAo U2hhcmVkc29ydCAqKSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0c29ydCk7CisJ dHVwbGVzb3J0X2luaXRpYWxpemVfc2hhcmVkKHNoYXJlZHNvcnQsIHNjYW50dXBsZXNvcnRz dGF0ZXMsCisJCQkJCQkJCXBjeHQtPnNlZyk7CisKKwkvKgorCSAqIFN0b3JlIHNoYXJlZCB0 dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgor CSAqIFRoZW4sIGluaXRpYWxpemUgb3BhcXVlIHN0YXRlIHVzaW5nIHR1cGxlc29ydCByb3V0 aW5lLgorCSAqLworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0dJ Tl9TSEFSRUQsIGdpbnNoYXJlZCk7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJB TExFTF9LRVlfVFVQTEVTT1JULCBzaGFyZWRzb3J0KTsKKworCS8qIFN0b3JlIHF1ZXJ5IHN0 cmluZyBmb3Igd29ya2VycyAqLworCWlmIChkZWJ1Z19xdWVyeV9zdHJpbmcpCisJeworCQlj aGFyCSAgICpzaGFyZWRxdWVyeTsKKworCQlzaGFyZWRxdWVyeSA9IChjaGFyICopIHNobV90 b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBxdWVyeWxlbiArIDEpOworCQltZW1jcHkoc2hhcmVk cXVlcnksIGRlYnVnX3F1ZXJ5X3N0cmluZywgcXVlcnlsZW4gKyAxKTsKKwkJc2htX3RvY19p bnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCwgc2hhcmVkcXVlcnkp OworCX0KKworCS8qCisJICogQWxsb2NhdGUgc3BhY2UgZm9yIGVhY2ggd29ya2VyJ3MgV2Fs VXNhZ2UgYW5kIEJ1ZmZlclVzYWdlOyBubyBuZWVkIHRvCisJICogaW5pdGlhbGl6ZS4KKwkg Ki8KKwl3YWx1c2FnZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLAorCQkJCQkJCQlt dWxfc2l6ZShzaXplb2YoV2FsVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOworCXNobV90b2Nf aW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRSwgd2FsdXNhZ2UpOwor CWJ1ZmZlcnVzYWdlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsCisJCQkJCQkJCSAg IG11bF9zaXplKHNpemVvZihCdWZmZXJVc2FnZSksIHBjeHQtPm53b3JrZXJzKSk7CisJc2ht X3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFLCBidWZm ZXJ1c2FnZSk7CisKKwkvKiBMYXVuY2ggd29ya2Vycywgc2F2aW5nIHN0YXR1cyBmb3IgbGVh ZGVyL2NhbGxlciAqLworCUxhdW5jaFBhcmFsbGVsV29ya2VycyhwY3h0KTsKKwlnaW5sZWFk ZXItPnBjeHQgPSBwY3h0OworCWdpbmxlYWRlci0+bnBhcnRpY2lwYW50dHVwbGVzb3J0cyA9 IHBjeHQtPm53b3JrZXJzX2xhdW5jaGVkOworCWlmIChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJ CWdpbmxlYWRlci0+bnBhcnRpY2lwYW50dHVwbGVzb3J0cysrOworCWdpbmxlYWRlci0+Z2lu c2hhcmVkID0gZ2luc2hhcmVkOworCWdpbmxlYWRlci0+c2hhcmVkc29ydCA9IHNoYXJlZHNv cnQ7CisJZ2lubGVhZGVyLT5zbmFwc2hvdCA9IHNuYXBzaG90OworCWdpbmxlYWRlci0+d2Fs dXNhZ2UgPSB3YWx1c2FnZTsKKwlnaW5sZWFkZXItPmJ1ZmZlcnVzYWdlID0gYnVmZmVydXNh Z2U7CisKKwkvKiBJZiBubyB3b3JrZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBi YWNrIG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLworCWlmIChwY3h0LT5ud29ya2Vyc19sYXVu Y2hlZCA9PSAwKQorCXsKKwkJX2dpbl9lbmRfcGFyYWxsZWwoZ2lubGVhZGVyLCBOVUxMKTsK KwkJcmV0dXJuOworCX0KKworCS8qIFNhdmUgbGVhZGVyIHN0YXRlIG5vdyB0aGF0IGl0J3Mg Y2xlYXIgYnVpbGQgd2lsbCBiZSBwYXJhbGxlbCAqLworCWJ1aWxkc3RhdGUtPmJzX2xlYWRl ciA9IGdpbmxlYWRlcjsKKworCS8qIEpvaW4gaGVhcCBzY2FuIG91cnNlbHZlcyAqLworCWlm IChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJCV9naW5fbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dv cmtlcihidWlsZHN0YXRlLCBoZWFwLCBpbmRleCk7CisKKwkvKgorCSAqIENhbGxlciBuZWVk cyB0byB3YWl0IGZvciBhbGwgbGF1bmNoZWQgd29ya2VycyB3aGVuIHdlIHJldHVybi4gIE1h a2UKKwkgKiBzdXJlIHRoYXQgdGhlIGZhaWx1cmUtdG8tc3RhcnQgY2FzZSB3aWxsIG5vdCBo YW5nIGZvcmV2ZXIuCisJICovCisJV2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvQXR0YWNoKHBj eHQpOworfQorCisvKgorICogU2h1dCBkb3duIHdvcmtlcnMsIGRlc3Ryb3kgcGFyYWxsZWwg Y29udGV4dCwgYW5kIGVuZCBwYXJhbGxlbCBtb2RlLgorICovCitzdGF0aWMgdm9pZAorX2dp bl9lbmRfcGFyYWxsZWwoR2luTGVhZGVyICpnaW5sZWFkZXIsIEdpbkJ1aWxkU3RhdGUgKnN0 YXRlKQoreworCWludAkJCWk7CisKKwkvKiBTaHV0ZG93biB3b3JrZXIgcHJvY2Vzc2VzICov CisJV2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKGdpbmxlYWRlci0+cGN4dCk7CisK KwkvKgorCSAqIE5leHQsIGFjY3VtdWxhdGUgV0FMIHVzYWdlLiAgKFRoaXMgbXVzdCB3YWl0 IGZvciB0aGUgd29ya2VycyB0byBmaW5pc2gsCisJICogb3Igd2UgbWlnaHQgZ2V0IGluY29t cGxldGUgZGF0YS4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdpbmxlYWRlci0+cGN4dC0+ bndvcmtlcnNfbGF1bmNoZWQ7IGkrKykKKwkJSW5zdHJBY2N1bVBhcmFsbGVsUXVlcnkoJmdp bmxlYWRlci0+YnVmZmVydXNhZ2VbaV0sICZnaW5sZWFkZXItPndhbHVzYWdlW2ldKTsKKwor CS8qIEZyZWUgbGFzdCByZWZlcmVuY2UgdG8gTVZDQyBzbmFwc2hvdCwgaWYgb25lIHdhcyB1 c2VkICovCisJaWYgKElzTVZDQ1NuYXBzaG90KGdpbmxlYWRlci0+c25hcHNob3QpKQorCQlV bnJlZ2lzdGVyU25hcHNob3QoZ2lubGVhZGVyLT5zbmFwc2hvdCk7CisJRGVzdHJveVBhcmFs bGVsQ29udGV4dChnaW5sZWFkZXItPnBjeHQpOworCUV4aXRQYXJhbGxlbE1vZGUoKTsKK30K KworLyoKKyAqIFdpdGhpbiBsZWFkZXIsIHdhaXQgZm9yIGVuZCBvZiBoZWFwIHNjYW4uCisg KgorICogV2hlbiBjYWxsZWQsIHBhcmFsbGVsIGhlYXAgc2NhbiBzdGFydGVkIGJ5IF9naW5f YmVnaW5fcGFyYWxsZWwoKSB3aWxsCisgKiBhbHJlYWR5IGJlIHVuZGVyd2F5IHdpdGhpbiB3 b3JrZXIgcHJvY2Vzc2VzICh3aGVuIGxlYWRlciBwYXJ0aWNpcGF0ZXMKKyAqIGFzIGEgd29y a2VyLCB3ZSBzaG91bGQgZW5kIHVwIGhlcmUganVzdCBhcyB3b3JrZXJzIGFyZSBmaW5pc2hp bmcpLgorICoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBoZWFwIHR1cGxlcyBz Y2FubmVkLgorICovCitzdGF0aWMgZG91YmxlCitfZ2luX3BhcmFsbGVsX2hlYXBzY2FuKEdp bkJ1aWxkU3RhdGUgKnN0YXRlKQoreworCUdpblNoYXJlZCAgKmdpbnNoYXJlZCA9IHN0YXRl LT5ic19sZWFkZXItPmdpbnNoYXJlZDsKKwlpbnQJCQlucGFydGljaXBhbnR0dXBsZXNvcnRz OworCisJbnBhcnRpY2lwYW50dHVwbGVzb3J0cyA9IHN0YXRlLT5ic19sZWFkZXItPm5wYXJ0 aWNpcGFudHR1cGxlc29ydHM7CisJZm9yICg7OykKKwl7CisJCVNwaW5Mb2NrQWNxdWlyZSgm Z2luc2hhcmVkLT5tdXRleCk7CisJCWlmIChnaW5zaGFyZWQtPm5wYXJ0aWNpcGFudHNkb25l ID09IG5wYXJ0aWNpcGFudHR1cGxlc29ydHMpCisJCXsKKwkJCS8qIGNvcHkgdGhlIGRhdGEg aW50byBsZWFkZXIgc3RhdGUgKi8KKwkJCXN0YXRlLT5ic19yZWx0dXBsZXMgPSBnaW5zaGFy ZWQtPnJlbHR1cGxlczsKKwkJCXN0YXRlLT5ic19udW10dXBsZXMgPSBnaW5zaGFyZWQtPmlu ZHR1cGxlczsKKworCQkJU3BpbkxvY2tSZWxlYXNlKCZnaW5zaGFyZWQtPm11dGV4KTsKKwkJ CWJyZWFrOworCQl9CisJCVNwaW5Mb2NrUmVsZWFzZSgmZ2luc2hhcmVkLT5tdXRleCk7CisK KwkJQ29uZGl0aW9uVmFyaWFibGVTbGVlcCgmZ2luc2hhcmVkLT53b3JrZXJzZG9uZWN2LAor CQkJCQkJCSAgIFdBSVRfRVZFTlRfUEFSQUxMRUxfQ1JFQVRFX0lOREVYX1NDQU4pOworCX0K KworCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKKworCXJldHVybiBzdGF0ZS0+ YnNfcmVsdHVwbGVzOworfQorCitzdGF0aWMgaW50Cit0aWRfY21wKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIEl0ZW1Qb2ludGVyQ29tcGFyZSgoSXRlbVBv aW50ZXIpIGEsIChJdGVtUG9pbnRlcikgYik7Cit9CisKKy8qCisgKiBTdGF0ZSB1c2VkIHRv IGNvbWJpbmUgYWNjdW11bGF0ZSBUSURzIGZyb20gbXVsdGlwbGUgR2luVHVwbGVzIGZvciB0 aGUgc2FtZQorICoga2V5IHZhbHVlLgorICoKKyAqIFhYWCBTaW1pbGFyIHB1cnBvc2UgdG8g QnVpbGRBY2N1bXVsYXRvciwgYnV0IG11Y2ggc2ltcGxlci4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgR2luQnVmZmVyCit7CisJT2Zmc2V0TnVtYmVyIGF0dG51bTsKKwlHaW5OdWxsQ2F0ZWdv cnkgY2F0ZWdvcnk7CisJRGF0dW0JCWtleTsJCQkvKiAwIGlmIG5vIGtleSAoYW5kIGtleWxl biA9PSAwKSAqLworCVNpemUJCWtleWxlbjsJCQkvKiBudW1iZXIgb2YgYnl0ZXMgKG5vdCB0 eXBsZW4pICovCisKKwkvKiB0eXBlIGluZm8gKi8KKwlpbnQxNgkJdHlwbGVuOworCWJvb2wJ CXR5cGJ5dmFsOworCisJLyogYXJyYXkgb2YgVElEIHZhbHVlcyAqLworCWludAkJCW5pdGVt czsKKwlpbnQJCQltYXhpdGVtczsKKwlJdGVtUG9pbnRlckRhdGEgKml0ZW1zOworfSBHaW5C dWZmZXI7CisKKy8qIFhYWCBzaG91bGQgZG8gbW9yZSBjaGVja3MgKi8KK3N0YXRpYyB2b2lk CitBc3NlcnRDaGVja0dpbkJ1ZmZlcihHaW5CdWZmZXIgKmJ1ZmZlcikKK3sKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJQXNzZXJ0KGJ1ZmZlci0+bml0ZW1zIDw9IGJ1ZmZlci0+ bWF4aXRlbXMpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0l0ZW1Q b2ludGVycyhJdGVtUG9pbnRlckRhdGEgKml0ZW1zLCBpbnQgbml0ZW1zLCBib29sIHNvcnRl ZCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJZm9yIChpbnQgaSA9IDA7IGkg PCBuaXRlbXM7IGkrKykKKwl7CisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJml0ZW1z W2ldKSk7CisKKwkJaWYgKChpID09IDApIHx8ICFzb3J0ZWQpCisJCQljb250aW51ZTsKKwor CQlBc3NlcnQoSXRlbVBvaW50ZXJDb21wYXJlKCZpdGVtc1tpIC0gMV0sICZpdGVtc1tpXSkg PCAwKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIEdpbkJ1ZmZlciAqCitHaW5CdWZmZXJJ bml0KHZvaWQpCit7CisJcmV0dXJuIHBhbGxvYzAoc2l6ZW9mKEdpbkJ1ZmZlcikpOworfQor CitzdGF0aWMgYm9vbAorR2luQnVmZmVySXNFbXB0eShHaW5CdWZmZXIgKmJ1ZmZlcikKK3sK KwlyZXR1cm4gKGJ1ZmZlci0+bml0ZW1zID09IDApOworfQorCisvKgorICogQ29tcGFyZSBp ZiB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgYWxyZWFkeSBhY2N1bXVsYXRlZCBkYXRhLiBDb21w YXJlCisgKiBzY2FsYXIgZmllbGRzIGZpcnN0LCBiZWZvcmUgdGhlIGFjdHVhbCBrZXkuCisg KgorICogWFhYIFRoZSBrZXkgaXMgY29tcGFyZWQgdXNpbmcgbWVtY21wLCB3aGljaCBtZWFu cyB0aGF0IGlmIGEga2V5IGhhcworICogbXVsdGlwbGUgYmluYXJ5IHJlcHJlc2VudGF0aW9u cywgd2UgbWF5IGVuZCB1cCB0cmVhdGluZyB0aGVtIGFzCisgKiBkaWZmZXJlbnQgaGVyZS4g QnV0IHRoYXQncyBPSywgdGhlIGluZGV4IHdpbGwgbWVyZ2UgdGhlbSBhbnl3YXkuCisgKi8K K3N0YXRpYyBib29sCitHaW5CdWZmZXJLZXlFcXVhbHMoR2luQnVmZmVyICpidWZmZXIsIEdp blR1cGxlICp0dXApCit7CisJQXNzZXJ0Q2hlY2tHaW5CdWZmZXIoYnVmZmVyKTsKKworCWlm ICh0dXAtPmF0dHJudW0gIT0gYnVmZmVyLT5hdHRudW0pCisJCXJldHVybiBmYWxzZTsKKwor CS8qIHNhbWUgYXR0cmlidXRlIHNob3VsZCBoYXZlIHRoZSBzYW1lIHR5cGUgaW5mbyAqLwor CUFzc2VydCh0dXAtPnR5cGJ5dmFsID09IGJ1ZmZlci0+dHlwYnl2YWwpOworCUFzc2VydCh0 dXAtPnR5cGxlbiA9PSBidWZmZXItPnR5cGxlbik7CisKKwlpZiAodHVwLT5jYXRlZ29yeSAh PSBidWZmZXItPmNhdGVnb3J5KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodHVwLT5rZXls ZW4gIT0gYnVmZmVyLT5rZXlsZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRm9y IE5VTEwvZW1wdHkga2V5cywgdGhpcyBtZWFucyBlcXVhbGl0eSwgZm9yIG5vcm1hbCBrZXlz IHdlIG5lZWQgdG8KKwkgKiBjb21wYXJlIHRoZSBhY3R1YWwga2V5IHZhbHVlLgorCSAqLwor CWlmIChidWZmZXItPmNhdGVnb3J5ICE9IEdJTl9DQVRfTk9STV9LRVkpCisJCXJldHVybiB0 cnVlOworCisJLyoKKwkgKiBDb21wYXJlIHRoZSBrZXkgdmFsdWUsIGRlcGVuZGluZyBvbiB0 aGUgdHlwZSBpbmZvcm1hdGlvbi4KKwkgKgorCSAqIFhYWCBOb3Qgc3VyZSB0aGlzIHdvcmtz IGNvcnJlY3RseSBmb3IgYnl2YWwgdHlwZXMgdGhhdCBkb24ndCBuZWVkIHRoZQorCSAqIHdo b2xlIERhdHVtLiBXaGF0IGlmIHRoZXJlIGlzIGdhcmJhZ2UgaW4gdGhlIHBhZGRpbmcgYnl0 ZXM/CisJICovCisJaWYgKGJ1ZmZlci0+dHlwYnl2YWwpCisJCXJldHVybiAoYnVmZmVyLT5r ZXkgPT0gKihEYXR1bSAqKSB0dXAtPmRhdGEpOworCisJLyogYnlyZWYgdmFsdWVzIHNpbXBs eSB1c2VzIG1lbWNtcCBmb3IgY29tcGFyaXNvbiAqLworCXJldHVybiAobWVtY21wKHR1cC0+ ZGF0YSwgRGF0dW1HZXRQb2ludGVyKGJ1ZmZlci0+a2V5KSwgYnVmZmVyLT5rZXlsZW4pID09 IDApOworfQorCitzdGF0aWMgdm9pZAorR2luQnVmZmVyU3RvcmVUdXBsZShHaW5CdWZmZXIg KmJ1ZmZlciwgR2luVHVwbGUgKnR1cCkKK3sKKwlJdGVtUG9pbnRlckRhdGEgKml0ZW1zOwor CURhdHVtCQlrZXk7CisKKwlBc3NlcnRDaGVja0dpbkJ1ZmZlcihidWZmZXIpOworCisJa2V5 ID0gX2dpbl9wYXJzZV90dXBsZSh0dXAsICZpdGVtcyk7CisKKwkvKiBpZiB0aGUgYnVmZmVy IGlzIGVtcHR5LCBzZXQgdGhlIGZpZWxkcyAoYW5kIGNvcHkgdGhlIGtleSkgKi8KKwlpZiAo R2luQnVmZmVySXNFbXB0eShidWZmZXIpKQorCXsKKwkJYnVmZmVyLT5jYXRlZ29yeSA9IHR1 cC0+Y2F0ZWdvcnk7CisJCWJ1ZmZlci0+a2V5bGVuID0gdHVwLT5rZXlsZW47CisJCWJ1ZmZl ci0+YXR0bnVtID0gdHVwLT5hdHRybnVtOworCisJCWJ1ZmZlci0+dHlwbGVuID0gdHVwLT50 eXBsZW47CisJCWJ1ZmZlci0+dHlwYnl2YWwgPSB0dXAtPnR5cGJ5dmFsOworCisJCWlmICh0 dXAtPmNhdGVnb3J5ID09IEdJTl9DQVRfTk9STV9LRVkpCisJCQlidWZmZXItPmtleSA9IGRh dHVtQ29weShrZXksIGJ1ZmZlci0+dHlwYnl2YWwsIGJ1ZmZlci0+dHlwbGVuKTsKKwkJZWxz ZQorCQkJYnVmZmVyLT5rZXkgPSAoRGF0dW0pIDA7CisJfQorCisJLyogZW5sYXJnZSB0aGUg VElEIGJ1ZmZlciwgaWYgbmVlZGVkICovCisJaWYgKGJ1ZmZlci0+bml0ZW1zICsgdHVwLT5u aXRlbXMgPiBidWZmZXItPm1heGl0ZW1zKQorCXsKKwkJLyogNjQgc2VlbXMgbGlrZSBhIGdv b2QgaW5pdCB2YWx1ZSAqLworCQlidWZmZXItPm1heGl0ZW1zID0gTWF4KGJ1ZmZlci0+bWF4 aXRlbXMsIDY0KTsKKworCQl3aGlsZSAoYnVmZmVyLT5uaXRlbXMgKyB0dXAtPm5pdGVtcyA+ IGJ1ZmZlci0+bWF4aXRlbXMpCisJCQlidWZmZXItPm1heGl0ZW1zICo9IDI7CisKKwkJaWYg KGJ1ZmZlci0+aXRlbXMgPT0gTlVMTCkKKwkJCWJ1ZmZlci0+aXRlbXMgPSBwYWxsb2MoYnVm ZmVyLT5tYXhpdGVtcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwkJZWxzZQorCQkJ YnVmZmVyLT5pdGVtcyA9IHJlcGFsbG9jKGJ1ZmZlci0+aXRlbXMsCisJCQkJCQkJCQkgYnVm ZmVyLT5tYXhpdGVtcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwl9CisKKwkvKiBu b3cgd2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGFs bCB0aGUgVElEcyAqLworCUFzc2VydChidWZmZXItPm5pdGVtcyArIHR1cC0+bml0ZW1zIDw9 IGJ1ZmZlci0+bWF4aXRlbXMpOworCisJLyogY29weSB0aGUgbmV3IFRJRHMgaW50byB0aGUg YnVmZmVyICovCisJbWVtY3B5KCZidWZmZXItPml0ZW1zW2J1ZmZlci0+bml0ZW1zXSwgaXRl bXMsIHNpemVvZihJdGVtUG9pbnRlckRhdGEpICogdHVwLT5uaXRlbXMpOworCWJ1ZmZlci0+ bml0ZW1zICs9IHR1cC0+bml0ZW1zOworCisJQXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoYnVm ZmVyLT5pdGVtcywgYnVmZmVyLT5uaXRlbXMsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQK K0dpbkJ1ZmZlclNvcnRJdGVtcyhHaW5CdWZmZXIgKmJ1ZmZlcikKK3sKKwkvKiB3ZSBzaG91 bGQgbm90IGhhdmUgYSBidWZmZXIgd2l0aCBubyBUSURzIHRvIHNvcnQgKi8KKwlBc3NlcnQo YnVmZmVyLT5pdGVtcyAhPSBOVUxMKTsKKwlBc3NlcnQoYnVmZmVyLT5uaXRlbXMgPiAwKTsK KworCXBnX3Fzb3J0KGJ1ZmZlci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCBzaXplb2YoSXRl bVBvaW50ZXJEYXRhKSwgdGlkX2NtcCk7CisKKwlBc3NlcnRDaGVja0l0ZW1Qb2ludGVycyhi dWZmZXItPml0ZW1zLCBidWZmZXItPm5pdGVtcywgdHJ1ZSk7Cit9CisKKy8qIFhYWCBwcm9i YWJseSB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIG1lbW9yeSBjb250ZXh0IGZvciB0aGUg YnVmZmVyICovCitzdGF0aWMgdm9pZAorR2luQnVmZmVyUmVzZXQoR2luQnVmZmVyICpidWZm ZXIpCit7CisJQXNzZXJ0KCFHaW5CdWZmZXJJc0VtcHR5KGJ1ZmZlcikpOworCisJLyogcmVs ZWFzZSBieXJlZiB2YWx1ZXMsIGRvIG5vdGhpbmcgZm9yIGJ5LXZhbCBvbmVzICovCisJaWYg KChidWZmZXItPmNhdGVnb3J5ID09IEdJTl9DQVRfTk9STV9LRVkpICYmICFidWZmZXItPnR5 cGJ5dmFsKQorCQlwZnJlZShEYXR1bUdldFBvaW50ZXIoYnVmZmVyLT5rZXkpKTsKKworCS8q IFhYWCBub3QgcmVhbGx5IG5lZWRlZCwgYnV0IGVhc2llciB0byB0cmlnZ2VyIE5VTEwgZGVy ZWYgZXRjLiAqLworCWJ1ZmZlci0+a2V5ID0gKERhdHVtKSAwOworCisJYnVmZmVyLT5hdHRu dW0gPSAwOworCWJ1ZmZlci0+Y2F0ZWdvcnkgPSAwOworCWJ1ZmZlci0+a2V5bGVuID0gMDsK KwlidWZmZXItPm5pdGVtcyA9IDA7CisKKwlidWZmZXItPnR5cGxlbiA9IDA7CisJYnVmZmVy LT50eXBieXZhbCA9IDA7CisKKwkvKiBYWFggc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4 dHJlbWVseSBsYXJnZSBhcnJheSBvZiBpdGVtcz8gKi8KK30KKworLyoKKyAqIFhYWCBNYXli ZSBjaGVjayBzaXplIG9mIHRoZSBUSUQgYXJyYXlzLCBhbmQgcmV0dXJuIGZhbHNlIGlmIGl0 J3MgdG9vCisgKiBsYXJnZSAobW9yZSB0aGFudCBtYWludGVuYW5jZV93b3JrX21lbSBvciBz b21ldGhpbmc/KS4KKyAqLworc3RhdGljIGJvb2wKK0dpbkJ1ZmZlckNhbkFkZEtleShHaW5C dWZmZXIgKmJ1ZmZlciwgR2luVHVwbGUgKnR1cCkKK3sKKwkvKiBlbXB0eSBidWZmZXIgY2Fu IGFjY2VwdCBkYXRhIGZvciBhbnkga2V5ICovCisJaWYgKEdpbkJ1ZmZlcklzRW1wdHkoYnVm ZmVyKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBvdGhlcndpc2UganVzdCBkYXRhIGZvciB0 aGUgc2FtZSBrZXkgKi8KKwlyZXR1cm4gR2luQnVmZmVyS2V5RXF1YWxzKGJ1ZmZlciwgdHVw KTsKK30KKworLyoKKyAqIFdpdGhpbiBsZWFkZXIsIHdhaXQgZm9yIGVuZCBvZiBoZWFwIHNj YW4gYW5kIG1lcmdlIHBlci13b3JrZXIgcmVzdWx0cy4KKyAqCisgKiBBZnRlciB3YWl0aW5n IGZvciBhbGwgd29ya2VycyB0byBmaW5pc2gsIG1lcmdlIHRoZSBwZXItd29ya2VyIHJlc3Vs dHMgaW50bworICogdGhlIGNvbXBsZXRlIGluZGV4LiBUaGUgcmVzdWx0cyBmcm9tIGVhY2gg d29ya2VyIGFyZSBzb3J0ZWQgYnkgYmxvY2sgbnVtYmVyCisgKiAoc3RhcnQgb2YgdGhlIHBh Z2UgcmFuZ2UpLiBXaGlsZSBjb21iaW5pZyB0aGUgcGVyLXdvcmtlciByZXN1bHRzIHdlIG1l cmdlCisgKiBzdW1tYXJpZXMgZm9yIHRoZSBzYW1lIHBhZ2UgcmFuZ2UsIGFuZCBhbHNvIGZp bGwtaW4gZW1wdHkgc3VtbWFyaWVzIGZvcgorICogcmFuZ2VzIHdpdGhvdXQgYW55IHR1cGxl cy4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgaGVhcCB0dXBsZXMgc2Nh bm5lZC4KKyAqCisgKiBGSVhNRSBwcm9iYWJseSBzaG91bGQgaGF2ZSBsb2NhbCBtZW1vcnkg Y29udGV4dHMgc2ltaWxhciB0byB3aGF0CisgKiBfYnJpbl9wYXJhbGxlbF9tZXJnZSAgZG9l cy4KKyAqLworc3RhdGljIGRvdWJsZQorX2dpbl9wYXJhbGxlbF9tZXJnZShHaW5CdWlsZFN0 YXRlICpzdGF0ZSkKK3sKKwlHaW5UdXBsZSAgICp0dXA7CisJU2l6ZQkJdHVwbGVuOworCWRv dWJsZQkJcmVsdHVwbGVzID0gMDsKKwlHaW5CdWZmZXIgICpidWZmZXI7CisKKwkvKiB3YWl0 IGZvciB3b3JrZXJzIHRvIHNjYW4gdGFibGUgYW5kIHByb2R1Y2UgcGFydGlhbCByZXN1bHRz ICovCisJcmVsdHVwbGVzID0gX2dpbl9wYXJhbGxlbF9oZWFwc2NhbihzdGF0ZSk7CisKKwkv KiBkbyB0aGUgYWN0dWFsIHNvcnQgaW4gdGhlIGxlYWRlciAqLworCXR1cGxlc29ydF9wZXJm b3Jtc29ydChzdGF0ZS0+YnNfc29ydHN0YXRlKTsKKworCS8qIGluaXRpYWxpemUgYnVmZmVy IHRvIGNvbWJpbmUgZW50cmllcyBmb3IgdGhlIHNhbWUga2V5ICovCisJYnVmZmVyID0gR2lu QnVmZmVySW5pdCgpOworCisJLyoKKwkgKiBSZWFkIHRoZSBHSU4gdHVwbGVzIGZyb20gdGhl IHNoYXJlZCB0dXBsZXNvcnQsIHNvcnRlZCBieSBjYXRlZ29yeSBhbmQKKwkgKiBrZXkuIFRo YXQgcHJvYmFibHkgZ2l2ZXMgdXMgb3JkZXIgbWF0Y2hpbmcgaG93IGRhdGEgaXMgb3JnYW5p emVkIGluIHRoZQorCSAqIGluZGV4LgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBz b3J0IGJ5IGtleSBmaXJzdCwgdGhlbiBieSBjYXRlZ29yeT8KKwkgKgorCSAqIFdlIGRvbid0 IGluc2VydCB0aGUgR0lOIHR1cGxlcyByaWdodCBhd2F5LCBidXQgaW5zdGVhZCBhY2N1bXVs YXRlIGFzCisJICogbWFueSBUSURzIGZvciB0aGUgc2FtZSBrZXkgYXMgcG9zc2libGUsIGFu ZCB0aGVuIGluc2VydCB0aGF0IGF0IG9uY2UuCisJICogVGhpcyB3YXkgd2UgZG9uJ3QgbmVl ZCB0byBkZWNvbXByZXNzL3JlY29tcHJlc3MgdGhlIHBvc3RpbmcgbGlzdHMsIGV0Yy4KKwkg Ki8KKwl3aGlsZSAoKHR1cCA9IHR1cGxlc29ydF9nZXRnaW50dXBsZShzdGF0ZS0+YnNfc29y dHN0YXRlLCAmdHVwbGVuLCB0cnVlKSkgIT0gTlVMTCkKKwl7CisJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisKKwkJLyoKKwkJICogSWYgdGhlIGJ1ZmZlciBjYW4gYWNjZXB0IHRoZSBu ZXcgR0lOIHR1cGxlLCBqdXN0IHN0b3JlIGl0IHRoZXJlIGFuZAorCQkgKiB3ZSdyZSBkb25l LiBJZiBpdCdzIGEgZGlmZmVyZW50IGtleSAob3IgbWF5YmUgdG9vIG11Y2ggZGF0YSkgZmx1 c2gKKwkJICogdGhlIGN1cnJlbnQgY29udGVudHMgaW50byB0aGUgaW5kZXggZmlyc3QuCisJ CSAqLworCQlpZiAoIUdpbkJ1ZmZlckNhbkFkZEtleShidWZmZXIsIHR1cCkpCisJCXsKKwkJ CS8qCisJCQkgKiBCdWZmZXIgaXMgbm90IGVtcHR5IGFuZCBpdCdzIHN0b3JpbmcgYSBkaWZm ZXJlbnQga2V5IC0gZmx1c2gKKwkJCSAqIHRoZSBkYXRhIGludG8gdGhlIGluc2VydCwgYW5k IHN0YXJ0IGEgbmV3IGVudHJ5IGZvciBjdXJyZW50CisJCQkgKiBHaW5UdXBsZS4KKwkJCSAq LworCQkJR2luQnVmZmVyU29ydEl0ZW1zKGJ1ZmZlcik7CisKKwkJCWdpbkVudHJ5SW5zZXJ0 KCZzdGF0ZS0+Z2luc3RhdGUsCisJCQkJCQkgICBidWZmZXItPmF0dG51bSwgYnVmZmVyLT5r ZXksIGJ1ZmZlci0+Y2F0ZWdvcnksCisJCQkJCQkgICBidWZmZXItPml0ZW1zLCBidWZmZXIt Pm5pdGVtcywgJnN0YXRlLT5idWlsZFN0YXRzKTsKKworCQkJLyogZGlzY2FyZCB0aGUgZXhp c3RpbmcgZGF0YSAqLworCQkJR2luQnVmZmVyUmVzZXQoYnVmZmVyKTsKKwkJfQorCisJCS8q IG5vdyByZW1lbWJlciB0aGUgbmV3IGtleSAqLworCQlHaW5CdWZmZXJTdG9yZVR1cGxlKGJ1 ZmZlciwgdHVwKTsKKwl9CisKKwkvKiBmbHVzaCBkYXRhIHJlbWFpbmluZyBpbiB0aGUgYnVm ZmVyIChmb3IgdGhlIGxhc3Qga2V5KSAqLworCWlmICghR2luQnVmZmVySXNFbXB0eShidWZm ZXIpKQorCXsKKwkJR2luQnVmZmVyU29ydEl0ZW1zKGJ1ZmZlcik7CisKKwkJZ2luRW50cnlJ bnNlcnQoJnN0YXRlLT5naW5zdGF0ZSwKKwkJCQkJICAgYnVmZmVyLT5hdHRudW0sIGJ1ZmZl ci0+a2V5LCBidWZmZXItPmNhdGVnb3J5LAorCQkJCQkgICBidWZmZXItPml0ZW1zLCBidWZm ZXItPm5pdGVtcywgJnN0YXRlLT5idWlsZFN0YXRzKTsKKworCQkvKiBkaXNjYXJkIHRoZSBl eGlzdGluZyBkYXRhICovCisJCUdpbkJ1ZmZlclJlc2V0KGJ1ZmZlcik7CisJfQorCisJdHVw bGVzb3J0X2VuZChzdGF0ZS0+YnNfc29ydHN0YXRlKTsKKworCXJldHVybiByZWx0dXBsZXM7 Cit9CisKKy8qCisgKiBSZXR1cm5zIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCB0 byBzdG9yZSBzdGF0ZSBmb3IgYSBwYXJhbGxlbAorICogZ2luIGluZGV4IGJ1aWxkIGJhc2Vk IG9uIHRoZSBzbmFwc2hvdCBpdHMgcGFyYWxsZWwgc2NhbiB3aWxsIHVzZS4KKyAqLworc3Rh dGljIFNpemUKK19naW5fcGFyYWxsZWxfZXN0aW1hdGVfc2hhcmVkKFJlbGF0aW9uIGhlYXAs IFNuYXBzaG90IHNuYXBzaG90KQoreworCS8qIGMuZi4gc2htX3RvY19hbGxvY2F0ZSBhcyB0 byB3aHkgQlVGRkVSQUxJR04gaXMgdXNlZCAqLworCXJldHVybiBhZGRfc2l6ZShCVUZGRVJB TElHTihzaXplb2YoR2luU2hhcmVkKSksCisJCQkJCXRhYmxlX3BhcmFsbGVsc2Nhbl9lc3Rp bWF0ZShoZWFwLCBzbmFwc2hvdCkpOworfQorCisvKgorICogV2l0aGluIGxlYWRlciwgcGFy dGljaXBhdGUgYXMgYSBwYXJhbGxlbCB3b3JrZXIuCisgKi8KK3N0YXRpYyB2b2lkCitfZ2lu X2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoR2luQnVpbGRTdGF0ZSAqYnVpbGRzdGF0 ZSwgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgpCit7CisJR2luTGVhZGVyICAqZ2lu bGVhZGVyID0gYnVpbGRzdGF0ZS0+YnNfbGVhZGVyOworCWludAkJCXNvcnRtZW07CisKKwkv KgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZpZ3VyZSB3aGVuIGRvbGluZyBv dXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiByZXF1ZXN0ZWQgbnVtYmVyIG9m IHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2lsbCBiZQorCSAqIHNvbWV3aGF0 IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJzKS4KKwkgKi8KKwlzb3J0bWVt ID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBnaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxl c29ydHM7CisKKwkvKiBQZXJmb3JtIHdvcmsgY29tbW9uIHRvIGFsbCBwYXJ0aWNpcGFudHMg Ki8KKwlfZ2luX3BhcmFsbGVsX3NjYW5fYW5kX2J1aWxkKGJ1aWxkc3RhdGUsIGdpbmxlYWRl ci0+Z2luc2hhcmVkLAorCQkJCQkJCQkgZ2lubGVhZGVyLT5zaGFyZWRzb3J0LCBoZWFwLCBp bmRleCwgc29ydG1lbSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgd29ya2VyJ3Mg cG9ydGlvbiBvZiBhIHBhcmFsbGVsIHNvcnQuCisgKgorICogVGhpcyBnZW5lcmF0ZXMgYSB0 dXBsZXNvcnQgZm9yIHRoZSB3b3JrZXIgcG9ydGlvbiBvZiB0aGUgdGFibGUuCisgKgorICog c29ydG1lbSBpcyB0aGUgYW1vdW50IG9mIHdvcmtpbmcgbWVtb3J5IHRvIHVzZSB3aXRoaW4g ZWFjaCB3b3JrZXIsCisgKiBleHByZXNzZWQgaW4gS0JzLgorICoKKyAqIFdoZW4gdGhpcyBy ZXR1cm5zLCB3b3JrZXJzIGFyZSBkb25lLCBhbmQgbmVlZCBvbmx5IHJlbGVhc2UgcmVzb3Vy Y2VzLgorICovCitzdGF0aWMgdm9pZAorX2dpbl9wYXJhbGxlbF9zY2FuX2FuZF9idWlsZChH aW5CdWlsZFN0YXRlICpzdGF0ZSwKKwkJCQkJCQkgR2luU2hhcmVkICpnaW5zaGFyZWQsIFNo YXJlZHNvcnQgKnNoYXJlZHNvcnQsCisJCQkJCQkJIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9u IGluZGV4LAorCQkJCQkJCSBpbnQgc29ydG1lbSwgYm9vbCBwcm9ncmVzcykKK3sKKwlTb3J0 Q29vcmRpbmF0ZSBjb29yZGluYXRlOworCVRhYmxlU2NhbkRlc2Mgc2NhbjsKKwlkb3VibGUJ CXJlbHR1cGxlczsKKwlJbmRleEluZm8gICppbmRleEluZm87CisKKwkvKiBJbml0aWFsaXpl IGxvY2FsIHR1cGxlc29ydCBjb29yZGluYXRpb24gc3RhdGUgKi8KKwljb29yZGluYXRlID0g cGFsbG9jMChzaXplb2YoU29ydENvb3JkaW5hdGVEYXRhKSk7CisJY29vcmRpbmF0ZS0+aXNX b3JrZXIgPSB0cnVlOworCWNvb3JkaW5hdGUtPm5QYXJ0aWNpcGFudHMgPSAtMTsKKwljb29y ZGluYXRlLT5zaGFyZWRzb3J0ID0gc2hhcmVkc29ydDsKKworCS8qIEJlZ2luICJwYXJ0aWFs IiB0dXBsZXNvcnQgKi8KKwlzdGF0ZS0+YnNfc29ydHN0YXRlID0gdHVwbGVzb3J0X2JlZ2lu X2luZGV4X2dpbihzb3J0bWVtLCBjb29yZGluYXRlLAorCQkJCQkJCQkJCQkJCVRVUExFU09S VF9OT05FKTsKKworCS8qIEpvaW4gcGFyYWxsZWwgc2NhbiAqLworCWluZGV4SW5mbyA9IEJ1 aWxkSW5kZXhJbmZvKGluZGV4KTsKKwlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSBnaW5z aGFyZWQtPmlzY29uY3VycmVudDsKKworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fcGFyYWxs ZWwoaGVhcCwKKwkJCQkJCQkJCVBhcmFsbGVsVGFibGVTY2FuRnJvbUdpblNoYXJlZChnaW5z aGFyZWQpKTsKKworCXJlbHR1cGxlcyA9IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVhcCwg aW5kZXgsIGluZGV4SW5mbywgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJCSAgIGdpbkJ1aWxkQ2Fs bGJhY2tQYXJhbGxlbCwgc3RhdGUsIHNjYW4pOworCisJLyogaW5zZXJ0IHRoZSBsYXN0IGl0 ZW0gKi8KKwkvKiB3cml0ZSByZW1haW5pbmcgYWNjdW11bGF0ZWQgZW50cmllcyAqLworCXsK KwkJSXRlbVBvaW50ZXJEYXRhICpsaXN0OworCQlEYXR1bQkJa2V5OworCQlHaW5OdWxsQ2F0 ZWdvcnkgY2F0ZWdvcnk7CisJCXVpbnQzMgkJbmxpc3Q7CisJCU9mZnNldE51bWJlciBhdHRu dW07CisJCVR1cGxlRGVzYwl0ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaW5kZXgpOworCisJ CWdpbkJlZ2luQkFTY2FuKCZzdGF0ZS0+YWNjdW0pOworCQl3aGlsZSAoKGxpc3QgPSBnaW5H ZXRCQUVudHJ5KCZzdGF0ZS0+YWNjdW0sCisJCQkJCQkJCQkgJmF0dG51bSwgJmtleSwgJmNh dGVnb3J5LCAmbmxpc3QpKSAhPSBOVUxMKQorCQl7CisJCQkvKiBpbmZvcm1hdGlvbiBhYm91 dCB0aGUga2V5ICovCisJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0 cih0ZGVzYywgKGF0dG51bSAtIDEpKTsKKworCQkJR2luVHVwbGUgICAqdHVwOworCQkJU2l6 ZQkJbGVuOworCisJCQkvKiB0aGVyZSBjb3VsZCBiZSBtYW55IGVudHJpZXMsIHNvIGJlIHdp bGxpbmcgdG8gYWJvcnQgaGVyZSAqLworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwor CQkJdHVwID0gX2dpbl9idWlsZF90dXBsZShhdHRudW0sIGNhdGVnb3J5LAorCQkJCQkJCQkg ICBrZXksIGF0dHItPmF0dGxlbiwgYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCSAgIGxpc3Qs IG5saXN0LCAmbGVuKTsKKworCQkJdHVwbGVzb3J0X3B1dGdpbnR1cGxlKHN0YXRlLT5ic19z b3J0c3RhdGUsIHR1cCwgbGVuKTsKKworCQkJcGZyZWUodHVwKTsKKwkJfQorCisJCU1lbW9y eUNvbnRleHRSZXNldChzdGF0ZS0+dG1wQ3R4KTsKKwkJZ2luSW5pdEJBKCZzdGF0ZS0+YWNj dW0pOworCX0KKworCS8qIHNvcnQgdGhlIEdJTiB0dXBsZXMgYnVpbHQgYnkgdGhpcyB3b3Jr ZXIgKi8KKwl0dXBsZXNvcnRfcGVyZm9ybXNvcnQoc3RhdGUtPmJzX3NvcnRzdGF0ZSk7CisK KwlzdGF0ZS0+YnNfcmVsdHVwbGVzICs9IHJlbHR1cGxlczsKKworCS8qCisJICogRG9uZS4g IFJlY29yZCBhbWJ1aWxkIHN0YXRpc3RpY3MuCisJICovCisJU3BpbkxvY2tBY3F1aXJlKCZn aW5zaGFyZWQtPm11dGV4KTsKKwlnaW5zaGFyZWQtPm5wYXJ0aWNpcGFudHNkb25lKys7CisJ Z2luc2hhcmVkLT5yZWx0dXBsZXMgKz0gc3RhdGUtPmJzX3JlbHR1cGxlczsKKwlnaW5zaGFy ZWQtPmluZHR1cGxlcyArPSBzdGF0ZS0+YnNfbnVtdHVwbGVzOworCVNwaW5Mb2NrUmVsZWFz ZSgmZ2luc2hhcmVkLT5tdXRleCk7CisKKwkvKiBOb3RpZnkgbGVhZGVyICovCisJQ29uZGl0 aW9uVmFyaWFibGVTaWduYWwoJmdpbnNoYXJlZC0+d29ya2Vyc2RvbmVjdik7CisKKwl0dXBs ZXNvcnRfZW5kKHN0YXRlLT5ic19zb3J0c3RhdGUpOworfQorCisvKgorICogUGVyZm9ybSB3 b3JrIHdpdGhpbiBhIGxhdW5jaGVkIHBhcmFsbGVsIHByb2Nlc3MuCisgKi8KK3ZvaWQKK19n aW5fcGFyYWxsZWxfYnVpbGRfbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2Mp Cit7CisJY2hhcgkgICAqc2hhcmVkcXVlcnk7CisJR2luU2hhcmVkICAqZ2luc2hhcmVkOwor CVNoYXJlZHNvcnQgKnNoYXJlZHNvcnQ7CisJR2luQnVpbGRTdGF0ZSBidWlsZHN0YXRlOwor CVJlbGF0aW9uCWhlYXBSZWw7CisJUmVsYXRpb24JaW5kZXhSZWw7CisJTE9DS01PREUJaGVh cExvY2ttb2RlOworCUxPQ0tNT0RFCWluZGV4TG9ja21vZGU7CisJV2FsVXNhZ2UgICAqd2Fs dXNhZ2U7CisJQnVmZmVyVXNhZ2UgKmJ1ZmZlcnVzYWdlOworCWludAkJCXNvcnRtZW07CisK KwkvKgorCSAqIFRoZSBvbmx5IHBvc3NpYmxlIHN0YXR1cyBmbGFnIHRoYXQgY2FuIGJlIHNl dCB0byB0aGUgcGFyYWxsZWwgd29ya2VyIGlzCisJICogUFJPQ19JTl9TQUZFX0lDLgorCSAq LworCUFzc2VydCgoTXlQcm9jLT5zdGF0dXNGbGFncyA9PSAwKSB8fAorCQkgICAoTXlQcm9j LT5zdGF0dXNGbGFncyA9PSBQUk9DX0lOX1NBRkVfSUMpKTsKKworCS8qIFNldCBkZWJ1Z19x dWVyeV9zdHJpbmcgZm9yIGluZGl2aWR1YWwgd29ya2VycyBmaXJzdCAqLworCXNoYXJlZHF1 ZXJ5ID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCwgdHJ1 ZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2hhcmVkcXVlcnk7CisKKwkvKiBSZXBvcnQg dGhlIHF1ZXJ5IHN0cmluZyBmcm9tIGxlYWRlciAqLworCXBnc3RhdF9yZXBvcnRfYWN0aXZp dHkoU1RBVEVfUlVOTklORywgZGVidWdfcXVlcnlfc3RyaW5nKTsKKworCS8qIExvb2sgdXAg Z2luIHNoYXJlZCBzdGF0ZSAqLworCWdpbnNoYXJlZCA9IHNobV90b2NfbG9va3VwKHRvYywg UEFSQUxMRUxfS0VZX0dJTl9TSEFSRUQsIGZhbHNlKTsKKworCS8qIE9wZW4gcmVsYXRpb25z IHVzaW5nIGxvY2sgbW9kZXMga25vd24gdG8gYmUgb2J0YWluZWQgYnkgaW5kZXguYyAqLwor CWlmICghZ2luc2hhcmVkLT5pc2NvbmN1cnJlbnQpCisJeworCQloZWFwTG9ja21vZGUgPSBT aGFyZUxvY2s7CisJCWluZGV4TG9ja21vZGUgPSBBY2Nlc3NFeGNsdXNpdmVMb2NrOworCX0K KwllbHNlCisJeworCQloZWFwTG9ja21vZGUgPSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2s7 CisJCWluZGV4TG9ja21vZGUgPSBSb3dFeGNsdXNpdmVMb2NrOworCX0KKworCS8qIE9wZW4g cmVsYXRpb25zIHdpdGhpbiB3b3JrZXIgKi8KKwloZWFwUmVsID0gdGFibGVfb3BlbihnaW5z aGFyZWQtPmhlYXByZWxpZCwgaGVhcExvY2ttb2RlKTsKKwlpbmRleFJlbCA9IGluZGV4X29w ZW4oZ2luc2hhcmVkLT5pbmRleHJlbGlkLCBpbmRleExvY2ttb2RlKTsKKworCS8qIGluaXRp YWxpemUgdGhlIEdJTiBidWlsZCBzdGF0ZSAqLworCWluaXRHaW5TdGF0ZSgmYnVpbGRzdGF0 ZS5naW5zdGF0ZSwgaW5kZXhSZWwpOworCWJ1aWxkc3RhdGUuaW5kdHVwbGVzID0gMDsKKwlt ZW1zZXQoJmJ1aWxkc3RhdGUuYnVpbGRTdGF0cywgMCwgc2l6ZW9mKEdpblN0YXRzRGF0YSkp OworCisJLyoKKwkgKiBjcmVhdGUgYSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRleHQgdGhhdCBp cyB1c2VkIHRvIGhvbGQgZGF0YSBub3QgeWV0CisJICogZHVtcGVkIG91dCB0byB0aGUgaW5k ZXgKKwkgKi8KKwlidWlsZHN0YXRlLnRtcEN0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShD dXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJICAiR2luIGJ1aWxkIHRlbXBvcmFy eSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwor CS8qCisJICogY3JlYXRlIGEgdGVtcG9yYXJ5IG1lbW9yeSBjb250ZXh0IHRoYXQgaXMgdXNl ZCBmb3IgY2FsbGluZworCSAqIGdpbkV4dHJhY3RFbnRyaWVzKCksIGFuZCBjYW4gYmUgcmVz ZXQgYWZ0ZXIgZWFjaCB0dXBsZQorCSAqLworCWJ1aWxkc3RhdGUuZnVuY0N0eCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJICAg IkdpbiBidWlsZCB0ZW1wb3JhcnkgY29udGV4dCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9u IiwKKwkJCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlidWlsZHN0 YXRlLmFjY3VtLmdpbnN0YXRlID0gJmJ1aWxkc3RhdGUuZ2luc3RhdGU7CisJZ2luSW5pdEJB KCZidWlsZHN0YXRlLmFjY3VtKTsKKworCisJLyogTG9vayB1cCBzaGFyZWQgc3RhdGUgcHJp dmF0ZSB0byB0dXBsZXNvcnQuYyAqLworCXNoYXJlZHNvcnQgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0tFWV9UVVBMRVNPUlQsIGZhbHNlKTsKKwl0dXBsZXNvcnRfYXR0YWNo X3NoYXJlZChzaGFyZWRzb3J0LCBzZWcpOworCisJLyogUHJlcGFyZSB0byB0cmFjayBidWZm ZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCUluc3RyU3RhcnRQYXJh bGxlbFF1ZXJ5KCk7CisKKwkvKgorCSAqIE1pZ2h0IGFzIHdlbGwgdXNlIHJlbGlhYmxlIGZp Z3VyZSB3aGVuIGRvbGluZyBvdXQgbWFpbnRlbmFuY2Vfd29ya19tZW0KKwkgKiAod2hlbiBy ZXF1ZXN0ZWQgbnVtYmVyIG9mIHdvcmtlcnMgd2VyZSBub3QgbGF1bmNoZWQsIHRoaXMgd2ls bCBiZQorCSAqIHNvbWV3aGF0IGhpZ2hlciB0aGFuIGl0IGlzIGZvciBvdGhlciB3b3JrZXJz KS4KKwkgKi8KKwlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBnaW5zaGFyZWQt PnNjYW50dXBsZXNvcnRzdGF0ZXM7CisKKwlfZ2luX3BhcmFsbGVsX3NjYW5fYW5kX2J1aWxk KCZidWlsZHN0YXRlLCBnaW5zaGFyZWQsIHNoYXJlZHNvcnQsCisJCQkJCQkJCSBoZWFwUmVs LCBpbmRleFJlbCwgc29ydG1lbSwgZmFsc2UpOworCisJLyogUmVwb3J0IFdBTC9idWZmZXIg dXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLworCWJ1ZmZlcnVzYWdlID0gc2ht X3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CisJ d2FsdXNhZ2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0Us IGZhbHNlKTsKKwlJbnN0ckVuZFBhcmFsbGVsUXVlcnkoJmJ1ZmZlcnVzYWdlW1BhcmFsbGVs V29ya2VyTnVtYmVyXSwKKwkJCQkJCSAgJndhbHVzYWdlW1BhcmFsbGVsV29ya2VyTnVtYmVy XSk7CisKKwlpbmRleF9jbG9zZShpbmRleFJlbCwgaW5kZXhMb2NrbW9kZSk7CisJdGFibGVf Y2xvc2UoaGVhcFJlbCwgaGVhcExvY2ttb2RlKTsKK30KKworLyoKKyAqIF9naW5fYnVpbGRf dHVwbGUKKyAqCQlTZXJpYWxpemUgdGhlIHN0YXRlIGZvciBhbiBpbmRleCBrZXkgaW50byBh IHR1cGxlIGZvciB0dXBsZXNvcnQuCisgKgorICogVGhlIHR1cGxlIGhhcyBhIG51bWJlciBv ZiBzY2FsYXIgZmllbGRzIChtb3N0bHkgbWF0Y2hpbmcgdGhlIGJ1aWxkIHN0YXRlKSwKKyAq IGFuZCB0aGVuIGEgZGF0YSBhcnJheSB0aGF0IHN0b3JlcyB0aGUga2V5IGZpcnN0LCBhbmQg dGhlbiB0aGUgVElEIGxpc3QuCisgKgorICogRm9yIGJ5LXJlZmVyZW5jZSBkYXRhIHR5cGVz LCB3ZSBzdG9yZSB0aGUgYWN0dWFsIGRhdGEuIEZvciBieS12YWwgdHlwZXMKKyAqIHdlIHNp bXBseSBjb3B5IHRoZSB3aG9sZSBEYXR1bSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNh cmUgYWJvdXQgc3R1ZmYKKyAqIGxpa2UgZW5kaWFuZXNzIGV0Yy4gV2UgY291bGQgbWFrZSBp dCBhIGxpdHRsZSBiaXQgc21hbGxlciwgYnV0IGl0J3Mgbm90CisgKiB3b3J0aCBpdCAtIGl0 J3MgYSB0aW55IGZyYWN0aW9uIG9mIHRoZSBkYXRhLCBhbmQgd2UgbmVlZCB0byBNQVhBTElH TiB0aGUKKyAqIHN0YXJ0IG9mIHRoZSBUSUQgbGlzdCBhbnl3YXkuIFNvIHdlIHdvdWxkbid0 IHNhdmUgYW55dGhpbmcuCisgKi8KK3N0YXRpYyBHaW5UdXBsZSAqCitfZ2luX2J1aWxkX3R1 cGxlKE9mZnNldE51bWJlciBhdHRybnVtLCB1bnNpZ25lZCBjaGFyIGNhdGVnb3J5LAorCQkJ CSBEYXR1bSBrZXksIGludDE2IHR5cGxlbiwgYm9vbCB0eXBieXZhbCwKKwkJCQkgSXRlbVBv aW50ZXJEYXRhICppdGVtcywgdWludDMyIG5pdGVtcywKKwkJCQkgU2l6ZSAqbGVuKQorewor CUdpblR1cGxlICAgKnR1cGxlOworCWNoYXIJICAgKnB0cjsKKworCVNpemUJCXR1cGxlbjsK KwlpbnQJCQlrZXlsZW47CisKKwkvKgorCSAqIENhbGN1bGF0ZSBob3cgbG9uZyBpcyB0aGUg a2V5IHZhbHVlLiBPbmx5IGtleXMgd2l0aCBHSU5fQ0FUX05PUk1fS0VZCisJICogaGF2ZSBh Y3R1YWwgbm9uLWVtcHR5IGtleS4gV2UgaW5jbHVkZSB2YXJsZW5hIGhlYWRlcnMgYW5kIFww IGJ5dGVzIGZvcgorCSAqIHN0cmluZ3MsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFjY2VzcyB0 aGUgZGF0YSBpbi1saW5lLgorCSAqCisJICogRm9yIGJ5dmFsIHR5cGVzIHdlIHNpbXBseSBj b3B5IHRoZSB3aG9sZSBEYXR1bS4gV2UgY291bGQgc3RvcmUganVzdCB0aGUKKwkgKiBuZWNl c3NhcnkgYnl0ZXMsIGJ1dCB0aGlzIGlzIHNpbXBsZXIgdG8gd29yayB3aXRoIGFuZCBub3Qg d29ydGggdGhlCisJICogZXh0cmEgY29tcGxleGl0eS4gTW9yZW92ZXIgd2Ugc3RpbGwgbmVl ZCB0byBkbyB0aGUgTUFYQUxJR04gdG8gYWxsb3cKKwkgKiBkaXJlY3QgYWNjZXNzIHRvIGl0 ZW1zIHBvaW50ZXJzLgorCSAqLworCWlmIChjYXRlZ29yeSAhPSBHSU5fQ0FUX05PUk1fS0VZ KQorCQlrZXlsZW4gPSAwOworCWVsc2UgaWYgKHR5cGJ5dmFsKQorCQlrZXlsZW4gPSBzaXpl b2YoRGF0dW0pOworCWVsc2UgaWYgKHR5cGxlbiA+IDApCisJCWtleWxlbiA9IHR5cGxlbjsK KwllbHNlIGlmICh0eXBsZW4gPT0gLTEpCisJCWtleWxlbiA9IFZBUlNJWkVfQU5ZKGtleSk7 CisJZWxzZSBpZiAodHlwbGVuID09IC0yKQorCQlrZXlsZW4gPSBzdHJsZW4oRGF0dW1HZXRQ b2ludGVyKGtleSkpICsgMTsKKwllbHNlCisJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGxl biIpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgR0lOIHR1cGxlIGxlbmd0aCB3aXRoIGFsbCB0 aGUgZGF0YSBpbmNsdWRlZC4gQmUgY2FyZWZ1bCBhYm91dAorCSAqIGFsaWdubWVudCwgdG8g YWxsb3cgZGlyZWN0IGFjY2VzcyB0byBpdGVtIHBvaW50ZXJzLgorCSAqLworCXR1cGxlbiA9 IE1BWEFMSUdOKG9mZnNldG9mKEdpblR1cGxlLCBkYXRhKSArIGtleWxlbikgKworCQkoc2l6 ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBuaXRlbXMpOworCisJKmxlbiA9IHR1cGxlbjsKKwor CS8qCisJICogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aG9sZSBHSU4gdHVwbGUKKwkgKgor CSAqIFhYWCBwYWxsb2MwIHNvIHRoYXQgdmFsZ3JpbmQgZG9lcyBub3QgY29tcGxhaW4gYWJv dXQgdW5pbml0aWFsaXplZAorCSAqIGJ5dGVzIGluIHdyaXRldHVwX2luZGV4X2dpbiwgbGlr ZWx5IGJlY2F1c2Ugb2YgcGFkZGluZworCSAqLworCXR1cGxlID0gcGFsbG9jMCh0dXBsZW4p OworCisJdHVwbGUtPnR1cGxlbiA9IHR1cGxlbjsKKwl0dXBsZS0+YXR0cm51bSA9IGF0dHJu dW07CisJdHVwbGUtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisJdHVwbGUtPmtleWxlbiA9IGtl eWxlbjsKKwl0dXBsZS0+bml0ZW1zID0gbml0ZW1zOworCisJLyoga2V5IHR5cGUgaW5mbyAq LworCXR1cGxlLT50eXBsZW4gPSB0eXBsZW47CisJdHVwbGUtPnR5cGJ5dmFsID0gdHlwYnl2 YWw7CisKKwkvKgorCSAqIENvcHkgdGhlIGtleSBhbmQgaXRlbXMgaW50byB0aGUgdHVwbGUu IEZpcnN0IHRoZSBrZXkgdmFsdWUsIHdoaWNoIHdlCisJICogY2FuIHNpbXBseSBjb3B5IHJp Z2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgYXJyYXkuCisJICovCisJaWYgKGNh dGVnb3J5ID09IEdJTl9DQVRfTk9STV9LRVkpCisJeworCQlpZiAodHlwYnl2YWwpCisJCXsK KwkJCW1lbWNweSh0dXBsZS0+ZGF0YSwgJmtleSwgc2l6ZW9mKERhdHVtKSk7CisJCX0KKwkJ ZWxzZSBpZiAodHlwbGVuID4gMCkJLyogYnlyZWYsIGZpeGVkIGxlbmd0aCAqLworCQl7CisJ CQltZW1jcHkodHVwbGUtPmRhdGEsIERhdHVtR2V0UG9pbnRlcihrZXkpLCB0eXBsZW4pOwor CQl9CisJCWVsc2UgaWYgKHR5cGxlbiA9PSAtMSkKKwkJeworCQkJbWVtY3B5KHR1cGxlLT5k YXRhLCBEYXR1bUdldFBvaW50ZXIoa2V5KSwga2V5bGVuKTsKKwkJfQorCQllbHNlIGlmICh0 eXBsZW4gPT0gLTIpCisJCXsKKwkJCW1lbWNweSh0dXBsZS0+ZGF0YSwgRGF0dW1HZXRQb2lu dGVyKGtleSksIGtleWxlbik7CisJCX0KKwl9CisKKwkvKiBmaW5hbGx5LCBjb3B5IHRoZSBU SURzIGludG8gdGhlIGFycmF5ICovCisJcHRyID0gKGNoYXIgKikgdHVwbGUgKyBNQVhBTElH TihvZmZzZXRvZihHaW5UdXBsZSwgZGF0YSkgKyBrZXlsZW4pOworCisJbWVtY3B5KHB0ciwg aXRlbXMsIHNpemVvZihJdGVtUG9pbnRlckRhdGEpICogbml0ZW1zKTsKKworCXJldHVybiB0 dXBsZTsKK30KKworLyoKKyAqIF9naW5fcGFyc2VfdHVwbGUKKyAqCQlEZXNlcmlhbGl6ZSB0 aGUgdHVwbGUgZnJvbSB0aGUgdHVwbGVzdG9yZSByZXByZXNlbnRhdGlvbi4KKyAqCisgKiBN b3N0IG9mIHRoZSBmaWVsZHMgYXJlIGFjdHVhbGx5IGRpcmVjdGx5IGFjY2Vzc2libGUsIHRo ZSBvbmx5IHRoaW5nIHRoYXQKKyAqIG5lZWRzIG1vcmUgY2FyZSBpcyB0aGUga2V5IGFuZCB0 aGUgVElEIGxpc3QuCisgKgorICogRm9yIHRoZSBrZXksIHRoaXMgcmV0dXJucyBhIHJlZ3Vs YXIgRGF0dW0gcmVwcmVzZW50aW5nIGl0LiBJdCdzIGVpdGhlciB0aGUKKyAqIGFjdHVhbCBr ZXkgdmFsdWUsIG9yIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhIGFy cmF5ICh3aGljaCBpcworICogd2hlcmUgdGhlIGRhdGEgd2FzIGNvcGllZCBieSBfZ2luX2J1 aWxkX3R1cGxlKS4KKyAqCisgKiBUaGUgcG9pbnRlciB0byB0aGUgVElEIGxpc3QgaXMgcmV0 dXJuZWQgdGhyb3VnaCAnaXRlbXMnICh3aGljaCBpcyBzaW1wbHkKKyAqIGEgcG9pbnRlciB0 byB0aGUgZGF0YSBhcnJheSkuCisgKi8KK3N0YXRpYyBEYXR1bQorX2dpbl9wYXJzZV90dXBs ZShHaW5UdXBsZSAqYSwgSXRlbVBvaW50ZXJEYXRhICoqaXRlbXMpCit7CisJRGF0dW0JCWtl eTsKKworCWlmIChpdGVtcykKKwl7CisJCWNoYXIJICAgKnB0ciA9IChjaGFyICopIGEgKyBN QVhBTElHTihvZmZzZXRvZihHaW5UdXBsZSwgZGF0YSkgKyBhLT5rZXlsZW4pOworCisJCSpp dGVtcyA9IChJdGVtUG9pbnRlckRhdGEgKikgcHRyOworCX0KKworCWlmIChhLT5jYXRlZ29y eSAhPSBHSU5fQ0FUX05PUk1fS0VZKQorCQlyZXR1cm4gKERhdHVtKSAwOworCisJaWYgKGEt PnR5cGJ5dmFsKQorCXsKKwkJbWVtY3B5KCZrZXksIGEtPmRhdGEsIGEtPmtleWxlbik7CisJ CXJldHVybiBrZXk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShhLT5kYXRhKTsK K30KKworLyoKKyAqIF9naW5fY29tcGFyZV90dXBsZXMKKyAqCQlDb21wYXJlIEdJTiB0dXBs ZXMsIHVzZWQgYnkgdHVwbGVzb3J0IGR1cmluZyBwYXJhbGxlbCBpbmRleCBidWlsZC4KKyAq CisgKiBUaGUgc2NhbGFyIGZpZWxkcyAoYXR0cm51bSwgY2F0ZWdvcnkpIGFyZSBjb21wYXJl ZCBmaXJzdCwgdGhlIGtleSB2YWx1ZSBpcworICogY29tcGFyZWQgbGFzdC4gVGhlIGNvbXBh cmlzb25zIGFyZSBkb25lIHNpbXBseSBieSAibWVtY21wIiwgYmFzZWQgb24gdGhlCisgKiBh c3N1bXB0aW9uIHRoYXQgaWYgd2UgZ2V0IHR3byBrZXlzIHRoYXQgYXJlIHR3byBkaWZmZXJl bnQgcmVwcmVzZW50YXRpb25zCisgKiBvZiBhIGxvZ2ljYWxseSBlcXVhbCB2YWx1ZSwgaXQn bGwgZ2V0IG1lcmdlZCBieSB0aGUgaW5kZXggYnVpbGQuCisgKgorICogRklYTUUgSXMgdGhl IGFzc3VtcHRpb24gd2UgY2FuIGp1c3QgbWVtY21wKCkgYWN0dWFsbHkgdmFsaWQ/IFdvbid0 IHRoaXMKKyAqIHRyaWdnZXIgdGhlICJjb3VsZCBub3Qgc3BsaXQgR0lOIHBhZ2U7IGFsbCBv bGQgaXRlbXMgZGlkbid0IGZpdCIgZXJyb3IKKyAqIHdoZW4gdHJ5aW5nIHRvIHVwZGF0ZSB0 aGUgVElEIGxpc3Q/CisgKi8KK2ludAorX2dpbl9jb21wYXJlX3R1cGxlcyhHaW5UdXBsZSAq YSwgR2luVHVwbGUgKmIpCit7CisJRGF0dW0JCWtleWEsCisJCQkJa2V5YjsKKworCWlmIChh LT5hdHRybnVtIDwgYi0+YXR0cm51bSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGEtPmF0dHJu dW0gPiBiLT5hdHRybnVtKQorCQlyZXR1cm4gMTsKKworCWlmIChhLT5jYXRlZ29yeSA8IGIt PmNhdGVnb3J5KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYS0+Y2F0ZWdvcnkgPiBiLT5jYXRl Z29yeSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGEtPmNhdGVnb3J5ID09IEdJTl9DQVRfTk9S TV9LRVkpICYmCisJCShiLT5jYXRlZ29yeSA9PSBHSU5fQ0FUX05PUk1fS0VZKSkKKwl7CisJ CWtleWEgPSBfZ2luX3BhcnNlX3R1cGxlKGEsIE5VTEwpOworCQlrZXliID0gX2dpbl9wYXJz ZV90dXBsZShiLCBOVUxMKTsKKworCQkvKgorCQkgKiB3b3JrcyBmb3IgYm90aCBieXZhbCBh bmQgYnlyZWYgdHlwZXMgd2l0aCBmaXhlZCBsZW5naHQsIGJlY2F1c2UgZm9yCisJCSAqIGJ5 dmFsIHdlIHNldCBrZXlsZW4gdG8gc2l6ZW9mKERhdHVtKQorCQkgKi8KKwkJaWYgKGEtPnR5 cGJ5dmFsKQorCQl7CisJCQlyZXR1cm4gbWVtY21wKCZrZXlhLCAma2V5YiwgYS0+a2V5bGVu KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChhLT5rZXlsZW4gPCBiLT5rZXlsZW4pCisJ CQkJcmV0dXJuIC0xOworCisJCQlpZiAoYS0+a2V5bGVuID4gYi0+a2V5bGVuKQorCQkJCXJl dHVybiAxOworCisJCQlyZXR1cm4gbWVtY21wKERhdHVtR2V0UG9pbnRlcihrZXlhKSwgRGF0 dW1HZXRQb2ludGVyKGtleWIpLCBhLT5rZXlsZW4pOworCQl9CisJfQorCisJcmV0dXJuIDA7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmluZGV4IDU3NDdhZTZhNGNhLi5kZDIy YjQ0YWNhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTUzLDcgKzUzLDcg QEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1jbHVzdGVy YWJsZSA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91 dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCWFtcm91dGluZS0+YW1jYW5idWlsZHBh cmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbmJ1aWxkcGFyYWxsZWwgPSB0cnVl OwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbXVz ZW1haW50ZW5hbmNld29ya21lbSA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbXN1bW1hcml6aW5n ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJh bGxlbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCA4 NjEzZmM2ZmI1NC4uYzllYTc2OWFmYjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cGFyYWxsZWwuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK ICNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgorI2luY2x1ZGUgImFjY2Vzcy9naW4uaCIKICNp bmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3Nlc3Npb24uaCIKQEAgLTE0Niw2ICsxNDcsOSBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0CiAJewogCQkiX2JyaW5fcGFyYWxsZWxfYnVpbGRfbWFpbiIsIF9i cmluX3BhcmFsbGVsX2J1aWxkX21haW4KIAl9LAorCXsKKwkJIl9naW5fcGFyYWxsZWxfYnVp bGRfbWFpbiIsIF9naW5fcGFyYWxsZWxfYnVpbGRfbWFpbgorCX0sCiAJewogCQkicGFyYWxs ZWxfdmFjdXVtX21haW4iLCBwYXJhbGxlbF92YWN1dW1fbWFpbgogCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYwppbmRleCAwNWE4NTNjYWEzNi4u NTVjYzU1OTY5ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVz b3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZh cmlhbnRzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAj aW5jbHVkZSAiYWNjZXNzL2JyaW5fdHVwbGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvZ2luX3R1 cGxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1 cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgpAQCAtNDYsNiArNDcs OCBAQCBzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0 YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCSAgIGludCBjb3VudCk7CiBzdGF0aWMg dm9pZCByZW1vdmVhYmJyZXZfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNv cnRUdXBsZSAqc3R1cHMsCiAJCQkJCQkJCQlpbnQgY291bnQpOworc3RhdGljIHZvaWQgcmVt b3ZlYWJicmV2X2luZGV4X2dpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq c3R1cHMsCisJCQkJCQkJCSAgIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCByZW1vdmVhYmJy ZXZfZGF0dW0oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJ CQkJCSAgIGludCBjb3VudCk7CiBzdGF0aWMgaW50CWNvbXBhcmV0dXBfaGVhcChjb25zdCBT b3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAqYiwKQEAgLTc0LDYgKzc3LDggQEAgc3Rh dGljIGludAljb21wYXJldHVwX2luZGV4X2hhc2hfdGllYnJlYWsoY29uc3QgU29ydFR1cGxl ICphLCBjb25zdCBTb3J0VHVwbGUgKmIKIAkJCQkJCQkJCQkgICBUdXBsZXNvcnRzdGF0ZSAq c3RhdGUpOwogc3RhdGljIGludAljb21wYXJldHVwX2luZGV4X2JyaW4oY29uc3QgU29ydFR1 cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIsCiAJCQkJCQkJCSAgVHVwbGVzb3J0c3RhdGUg KnN0YXRlKTsKK3N0YXRpYyBpbnQJY29tcGFyZXR1cF9pbmRleF9naW4oY29uc3QgU29ydFR1 cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIsCisJCQkJCQkJCSBUdXBsZXNvcnRzdGF0ZSAq c3RhdGUpOwogc3RhdGljIHZvaWQgd3JpdGV0dXBfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0 YXRlLCBMb2dpY2FsVGFwZSAqdGFwZSwKIAkJCQkJCSAgIFNvcnRUdXBsZSAqc3R1cCk7CiBz dGF0aWMgdm9pZCByZWFkdHVwX2luZGV4KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1 cGxlICpzdHVwLApAQCAtODIsNiArODcsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGV0dXBfaW5k ZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2ljYWxUYXBlICp0YXBlLAogCQkJ CQkJCQlTb3J0VHVwbGUgKnN0dXApOwogc3RhdGljIHZvaWQgcmVhZHR1cF9pbmRleF9icmlu KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwLAogCQkJCQkJCSAgIExv Z2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHdyaXRl dHVwX2luZGV4X2dpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIExvZ2ljYWxUYXBlICp0YXBl LAorCQkJCQkJCSAgIFNvcnRUdXBsZSAqc3R1cCk7CitzdGF0aWMgdm9pZCByZWFkdHVwX2lu ZGV4X2dpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKKwkJCQkJ CQkgIExvZ2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKTsKIHN0YXRpYyBpbnQJ Y29tcGFyZXR1cF9kYXR1bShjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAq YiwKIAkJCQkJCQkgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKTsKIHN0YXRpYyBpbnQJY29tcGFy ZXR1cF9kYXR1bV90aWVicmVhayhjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBs ZSAqYiwKQEAgLTU4MCw2ICs1ODksMzUgQEAgdHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4o aW50IHdvcmtNZW0sCiAJcmV0dXJuIHN0YXRlOwogfQogCisKK1R1cGxlc29ydHN0YXRlICoK K3R1cGxlc29ydF9iZWdpbl9pbmRleF9naW4oaW50IHdvcmtNZW0sIFNvcnRDb29yZGluYXRl IGNvb3JkaW5hdGUsCisJCQkJCQkgIGludCBzb3J0b3B0KQoreworCVR1cGxlc29ydHN0YXRl ICpzdGF0ZSA9IHR1cGxlc29ydF9iZWdpbl9jb21tb24od29ya01lbSwgY29vcmRpbmF0ZSwK KwkJCQkJCQkJCQkJCSAgIHNvcnRvcHQpOworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1 cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsKKworI2lmZGVmIFRSQUNFX1NPUlQKKwlp ZiAodHJhY2Vfc29ydCkKKwkJZWxvZyhMT0csCisJCQkgImJlZ2luIGluZGV4IHNvcnQ6IHdv cmtNZW0gPSAlZCwgcmFuZG9tQWNjZXNzID0gJWMiLAorCQkJIHdvcmtNZW0sCisJCQkgc29y dG9wdCAmIFRVUExFU09SVF9SQU5ET01BQ0NFU1MgPyAndCcgOiAnZicpOworI2VuZGlmCisK KwliYXNlLT5uS2V5cyA9IDE7CQkJLyogT25seSB0aGUgaW5kZXgga2V5ICovCisKKwliYXNl LT5yZW1vdmVhYmJyZXYgPSByZW1vdmVhYmJyZXZfaW5kZXhfZ2luOworCWJhc2UtPmNvbXBh cmV0dXAgPSBjb21wYXJldHVwX2luZGV4X2dpbjsKKwliYXNlLT53cml0ZXR1cCA9IHdyaXRl dHVwX2luZGV4X2dpbjsKKwliYXNlLT5yZWFkdHVwID0gcmVhZHR1cF9pbmRleF9naW47CisJ YmFzZS0+aGF2ZURhdHVtMSA9IGZhbHNlOworCWJhc2UtPmFyZyA9IE5VTEw7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKIFR1cGxlc29ydHN0YXRlICoKIHR1cGxlc29ydF9iZWdpbl9kYXR1 bShPaWQgZGF0dW1UeXBlLCBPaWQgc29ydE9wZXJhdG9yLCBPaWQgc29ydENvbGxhdGlvbiwK IAkJCQkJICBib29sIG51bGxzRmlyc3RGbGFnLCBpbnQgd29ya01lbSwKQEAgLTgxNyw2ICs4 NTUsMzcgQEAgdHVwbGVzb3J0X3B1dGJyaW50dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUs IEJyaW5UdXBsZSAqdHVwbGUsIFNpemUgc2l6ZSkKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CiB9CiAKK3ZvaWQKK3R1cGxlc29ydF9wdXRnaW50dXBsZShUdXBsZXNv cnRzdGF0ZSAqc3RhdGUsIEdpblR1cGxlICp0dXAsIFNpemUgc2l6ZSkKK3sKKwlTb3J0VHVw bGUJc3R1cDsKKwlHaW5UdXBsZSAgICpjdHVwOworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9 IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsKKwlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYmFzZS0+dHVwbGVjb250ZXh0KTsKKwlT aXplCQl0dXBsZW47CisKKwkvKiBjb3B5IHRoZSBHaW5UdXBsZSBpbnRvIHRoZSByaWdodCBt ZW1vcnkgY29udGV4dCAqLworCWN0dXAgPSBwYWxsb2Moc2l6ZSk7CisJbWVtY3B5KGN0dXAs IHR1cCwgc2l6ZSk7CisKKwlzdHVwLnR1cGxlID0gY3R1cDsKKwlzdHVwLmRhdHVtMSA9IChE YXR1bSkgMDsKKwlzdHVwLmlzbnVsbDEgPSBmYWxzZTsKKworCS8qIEdldE1lbW9yeUNodW5r U3BhY2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVtcCBjb250ZXh0cyAqLworCWlmIChUdXBs ZVNvcnRVc2VCdW1wVHVwbGVDeHQoYmFzZS0+c29ydG9wdCkpCisJCXR1cGxlbiA9IE1BWEFM SUdOKHNpemUpOworCWVsc2UKKwkJdHVwbGVuID0gR2V0TWVtb3J5Q2h1bmtTcGFjZShjdHVw KTsKKworCXR1cGxlc29ydF9wdXR0dXBsZV9jb21tb24oc3RhdGUsICZzdHVwLAorCQkJCQkJ CSAgYmFzZS0+c29ydEtleXMgJiYKKwkJCQkJCQkgIGJhc2UtPnNvcnRLZXlzLT5hYmJyZXZf Y29udmVydGVyICYmCisJCQkJCQkJICAhc3R1cC5pc251bGwxLCB0dXBsZW4pOworCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQWNjZXB0IG9u ZSBEYXR1bSB3aGlsZSBjb2xsZWN0aW5nIGlucHV0IGRhdGEgZm9yIHNvcnQuCiAgKgpAQCAt OTg5LDYgKzEwNTgsMjkgQEAgdHVwbGVzb3J0X2dldGJyaW50dXBsZShUdXBsZXNvcnRzdGF0 ZSAqc3RhdGUsIFNpemUgKmxlbiwgYm9vbCBmb3J3YXJkKQogCXJldHVybiAmYnR1cC0+dHVw bGU7CiB9CiAKK0dpblR1cGxlICoKK3R1cGxlc29ydF9nZXRnaW50dXBsZShUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIFNpemUgKmxlbiwgYm9vbCBmb3J3YXJkKQoreworCVR1cGxlc29ydFB1 YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0YXRlKTsKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYmFzZS0+c29ydGNv bnRleHQpOworCVNvcnRUdXBsZQlzdHVwOworCUdpblR1cGxlICAgKnR1cDsKKworCWlmICgh dHVwbGVzb3J0X2dldHR1cGxlX2NvbW1vbihzdGF0ZSwgZm9yd2FyZCwgJnN0dXApKQorCQlz dHVwLnR1cGxlID0gTlVMTDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCWlmICghc3R1cC50dXBsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJdHVwID0gKEdp blR1cGxlICopIHN0dXAudHVwbGU7CisKKwkqbGVuID0gdHVwLT50dXBsZW47CisKKwlyZXR1 cm4gdHVwOworfQorCiAvKgogICogRmV0Y2ggdGhlIG5leHQgRGF0dW0gaW4gZWl0aGVyIGZv cndhcmQgb3IgYmFjayBkaXJlY3Rpb24uCiAgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIG1vcmUg ZGF0dW1zLgpAQCAtMTc3Nyw2ICsxODY5LDY4IEBAIHJlYWR0dXBfaW5kZXhfYnJpbihUdXBs ZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cCwKIAlzdHVwLT5kYXR1bTEgPSB0 dXBsZS0+dHVwbGUuYnRfYmxrbm87CiB9CiAKKworLyoKKyAqIFJvdXRpbmVzIHNwZWNpYWxp emVkIGZvciBHSU4gY2FzZQorICovCisKK3N0YXRpYyB2b2lkCityZW1vdmVhYmJyZXZfaW5k ZXhfZ2luKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywgaW50IGNv dW50KQoreworCUFzc2VydChmYWxzZSk7CisJZWxvZyhFUlJPUiwgInJlbW92ZWFiYnJldl9p bmRleF9naW4gbm90IGltcGxlbWVudGVkIik7Cit9CisKK3N0YXRpYyBpbnQKK2NvbXBhcmV0 dXBfaW5kZXhfZ2luKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpiLAor CQkJCQkgVHVwbGVzb3J0c3RhdGUgKnN0YXRlKQoreworCUFzc2VydCghVHVwbGVzb3J0c3Rh dGVHZXRQdWJsaWMoc3RhdGUpLT5oYXZlRGF0dW0xKTsKKworCXJldHVybiBfZ2luX2NvbXBh cmVfdHVwbGVzKChHaW5UdXBsZSAqKSBhLT50dXBsZSwKKwkJCQkJCQkgICAoR2luVHVwbGUg KikgYi0+dHVwbGUpOworfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfaW5kZXhfZ2luKFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRhcGUgKnRhcGUsIFNvcnRUdXBsZSAqc3R1 cCkKK3sKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1Ymxp YyhzdGF0ZSk7CisJR2luVHVwbGUgICAqdHVwbGUgPSAoR2luVHVwbGUgKikgc3R1cC0+dHVw bGU7CisJdW5zaWduZWQgaW50IHR1cGxlbiA9IHR1cGxlLT50dXBsZW47CisKKwl0dXBsZW4g PSB0dXBsZW4gKyBzaXplb2YodHVwbGVuKTsKKwlMb2dpY2FsVGFwZVdyaXRlKHRhcGUsICZ0 dXBsZW4sIHNpemVvZih0dXBsZW4pKTsKKwlMb2dpY2FsVGFwZVdyaXRlKHRhcGUsIHR1cGxl LCB0dXBsZS0+dHVwbGVuKTsKKwlpZiAoYmFzZS0+c29ydG9wdCAmIFRVUExFU09SVF9SQU5E T01BQ0NFU1MpIC8qIG5lZWQgdHJhaWxpbmcgbGVuZ3RoIHdvcmQ/ICovCisJCUxvZ2ljYWxU YXBlV3JpdGUodGFwZSwgJnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOworfQorCitzdGF0aWMg dm9pZAorcmVhZHR1cF9pbmRleF9naW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVw bGUgKnN0dXAsCisJCQkJICBMb2dpY2FsVGFwZSAqdGFwZSwgdW5zaWduZWQgaW50IGxlbikK K3sKKwlHaW5UdXBsZSAgICp0dXBsZTsKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBs ZXNvcnRzdGF0ZUdldFB1YmxpYyhzdGF0ZSk7CisJdW5zaWduZWQgaW50IHR1cGxlbiA9IGxl biAtIHNpemVvZih1bnNpZ25lZCBpbnQpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBzcGFjZSBm b3IgdGhlIEdJTiBzb3J0IHR1cGxlLCB3aGljaCBhbHJlYWR5IGhhcyB0aGUgcHJvcGVyCisJ ICogbGVuZ3RoIGluY2x1ZGVkIGluIHRoZSBoZWFkZXIuCisJICovCisJdHVwbGUgPSAoR2lu VHVwbGUgKikgdHVwbGVzb3J0X3JlYWR0dXBfYWxsb2Moc3RhdGUsIHR1cGxlbik7CisKKwl0 dXBsZS0+dHVwbGVuID0gdHVwbGVuOworCisJTG9naWNhbFRhcGVSZWFkRXhhY3QodGFwZSwg dHVwbGUsIHR1cGxlbik7CisJaWYgKGJhc2UtPnNvcnRvcHQgJiBUVVBMRVNPUlRfUkFORE9N QUNDRVNTKSAvKiBuZWVkIHRyYWlsaW5nIGxlbmd0aCB3b3JkPyAqLworCQlMb2dpY2FsVGFw ZVJlYWRFeGFjdCh0YXBlLCAmdHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CisJc3R1cC0+dHVw bGUgPSAodm9pZCAqKSB0dXBsZTsKKworCS8qIG5vIGFiYnJldmlhdGlvbnMgKEZJWE1FIG1h eWJlIHVzZSBhdHRybnVtIGZvciB0aGlzPykgKi8KKwlzdHVwLT5kYXR1bTEgPSAoRGF0dW0p IDA7Cit9CisKKwogLyoKICAqIFJvdXRpbmVzIHNwZWNpYWxpemVkIGZvciBEYXR1bVR1cGxl IGNhc2UKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbi5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dpbi5oCmluZGV4IDI1OTgzYjdhNTA1Li5iZTc2ZDg0NDZmNCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbi5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9naW4uaApAQCAtMTIsNiArMTIsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dyZWFkZXIuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgIm5v ZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYmxvY2suaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogCkBA IC04OCw0ICs5MCw2IEBAIGV4dGVybiB2b2lkIGdpbkdldFN0YXRzKFJlbGF0aW9uIGluZGV4 LCBHaW5TdGF0c0RhdGEgKnN0YXRzKTsKIGV4dGVybiB2b2lkIGdpblVwZGF0ZVN0YXRzKFJl bGF0aW9uIGluZGV4LCBjb25zdCBHaW5TdGF0c0RhdGEgKnN0YXRzLAogCQkJCQkJICAgYm9v bCBpc19idWlsZCk7CiAKK2V4dGVybiB2b2lkIF9naW5fcGFyYWxsZWxfYnVpbGRfbWFpbihk c21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpOworCiAjZW5kaWYJCQkJCQkJLyogR0lO X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5fdHVwbGUuaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9naW5fdHVwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNTZhZWQ0MGZiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2luX3R1cGxlLmgKQEAgLTAsMCArMSwyOSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogZ2luLmgKKyAqCSAgUHVibGljIGhlYWRlciBmaWxlIGZvciBHZW5l cmFsaXplZCBJbnZlcnRlZCBJbmRleCBhY2Nlc3MgbWV0aG9kLgorICoKKyAqCUNvcHlyaWdo dCAoYykgMjAwNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCXNyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIEdJTl9UVVBMRV8KKyNkZWZpbmUgR0lOX1RVUExFXworCisjaW5j bHVkZSAic3RvcmFnZS9pdGVtcHRyLmgiCisKK3R5cGVkZWYgc3RydWN0IEdpblR1cGxlCit7 CisJU2l6ZQkJdHVwbGVuOwkJCS8qIGxlbmd0aCBvZiB0aGUgd2hvbGUgdHVwbGUgKi8KKwlT aXplCQlrZXlsZW47CQkJLyogYnl0ZXMgaW4gZGF0YSBmb3Iga2V5IHZhbHVlICovCisJaW50 MTYJCXR5cGxlbjsJCQkvKiB0eXBsZW4gZm9yIGtleSAqLworCWJvb2wJCXR5cGJ5dmFsOwkJ LyogdHlwYnl2YWwgZm9yIGtleSAqLworCU9mZnNldE51bWJlciBhdHRybnVtOworCXNpZ25l ZCBjaGFyIGNhdGVnb3J5OwkJLyogY2F0ZWdvcnk6IG5vcm1hbCBvciBOVUxMPyAqLworCWlu dAkJCW5pdGVtczsJCQkvKiBudW1iZXIgb2YgVElEcyBpbiB0aGUgZGF0YSAqLworCWNoYXIJ CWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gR2luVHVwbGU7CisKK2V4dGVybiBp bnQJX2dpbl9jb21wYXJlX3R1cGxlcyhHaW5UdXBsZSAqYSwgR2luVHVwbGUgKmIpOworCisj ZW5kaWYJCQkJCQkJLyogR0lOX1RVUExFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3R1cGxlc29ydC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmgKaW5k ZXggZTc5NDFhMWYwOWYuLjM1ZmE1YWUyNDQyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy90dXBsZXNvcnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaApA QCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBUVVBMRVNPUlRfSAogCiAjaW5jbHVkZSAiYWNj ZXNzL2JyaW5fdHVwbGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvZ2luX3R1cGxlLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCkBAIC00NDMsNiArNDQ0LDggQEAgZXh0ZXJuIFR1 cGxlc29ydHN0YXRlICp0dXBsZXNvcnRfYmVnaW5faW5kZXhfZ2lzdChSZWxhdGlvbiBoZWFw UmVsLAogCQkJCQkJCQkJCQkJICBpbnQgc29ydG9wdCk7CiBleHRlcm4gVHVwbGVzb3J0c3Rh dGUgKnR1cGxlc29ydF9iZWdpbl9pbmRleF9icmluKGludCB3b3JrTWVtLCBTb3J0Q29vcmRp bmF0ZSBjb29yZGluYXRlLAogCQkJCQkJCQkJCQkJICBpbnQgc29ydG9wdCk7CitleHRlcm4g VHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9pbmRleF9naW4oaW50IHdvcmtNZW0s IFNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGUsCisJCQkJCQkJCQkJCQkgaW50IHNvcnRvcHQp OwogZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRfYmVnaW5fZGF0dW0oT2lkIGRh dHVtVHlwZSwKIAkJCQkJCQkJCQkJIE9pZCBzb3J0T3BlcmF0b3IsIE9pZCBzb3J0Q29sbGF0 aW9uLAogCQkJCQkJCQkJCQkgYm9vbCBudWxsc0ZpcnN0RmxhZywKQEAgLTQ1Niw2ICs0NTks NyBAQCBleHRlcm4gdm9pZCB0dXBsZXNvcnRfcHV0aW5kZXh0dXBsZXZhbHVlcyhUdXBsZXNv cnRzdGF0ZSAqc3RhdGUsCiAJCQkJCQkJCQkJICBSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVy IHNlbGYsCiAJCQkJCQkJCQkJICBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICpp c251bGwpOwogZXh0ZXJuIHZvaWQgdHVwbGVzb3J0X3B1dGJyaW50dXBsZShUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIEJyaW5UdXBsZSAqdHVwLCBTaXplIGxlbik7CitleHRlcm4gdm9pZCB0 dXBsZXNvcnRfcHV0Z2ludHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBHaW5UdXBsZSAq dHVwLCBTaXplIGxlbik7CiBleHRlcm4gdm9pZCB0dXBsZXNvcnRfcHV0ZGF0dW0oVHVwbGVz b3J0c3RhdGUgKnN0YXRlLCBEYXR1bSB2YWwsCiAJCQkJCQkJICAgYm9vbCBpc051bGwpOwog CkBAIC00NjUsNiArNDY5LDggQEAgZXh0ZXJuIEhlYXBUdXBsZSB0dXBsZXNvcnRfZ2V0aGVh cHR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkKTsKIGV4dGVybiBJ bmRleFR1cGxlIHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0 ZSwgYm9vbCBmb3J3YXJkKTsKIGV4dGVybiBCcmluVHVwbGUgKnR1cGxlc29ydF9nZXRicmlu dHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTaXplICpsZW4sCiAJCQkJCQkJCQkJIGJv b2wgZm9yd2FyZCk7CitleHRlcm4gR2luVHVwbGUgKnR1cGxlc29ydF9nZXRnaW50dXBsZShU dXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNpemUgKmxlbiwKKwkJCQkJCQkJCSAgIGJvb2wgZm9y d2FyZCk7CiBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0ZGF0dW0oVHVwbGVzb3J0c3RhdGUg KnN0YXRlLCBib29sIGZvcndhcmQsIGJvb2wgY29weSwKIAkJCQkJCQkgICBEYXR1bSAqdmFs LCBib29sICppc051bGwsIERhdHVtICphYmJyZXYpOwogCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IGVlZTk4OWJiYTE3Li45NzY5ZjRkNmIwOSAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTEwMDQsMTEgKzEwMDQsMTMgQEAgR2luQnRyZWVEYXRhCiBH aW5CdHJlZURhdGFMZWFmSW5zZXJ0RGF0YQogR2luQnRyZWVFbnRyeUluc2VydERhdGEKIEdp bkJ0cmVlU3RhY2sKK0dpbkJ1ZmZlcgogR2luQnVpbGRTdGF0ZQogR2luQ2hrVmFsCiBHaW5F bnRyaWVzCiBHaW5FbnRyeUFjY3VtdWxhdG9yCiBHaW5JbmRleFN0YXQKK0dpbkxlYWRlcgog R2luTWV0YVBhZ2VEYXRhCiBHaW5OdWxsQ2F0ZWdvcnkKIEdpbk9wdGlvbnMKQEAgLTEwMjEs OSArMTAyMywxMSBAQCBHaW5TY2FuRW50cnkKIEdpblNjYW5LZXkKIEdpblNjYW5PcGFxdWUK IEdpblNjYW5PcGFxdWVEYXRhCitHaW5TaGFyZWQKIEdpblN0YXRlCiBHaW5TdGF0c0RhdGEK IEdpblRlcm5hcnlWYWx1ZQorR2luVHVwbGUKIEdpblR1cGxlQ29sbGVjdG9yCiBHaW5WYWN1 dW1TdGF0ZQogR2lzdEJ1aWxkTW9kZQotLSAKMi40NC4wCgo= --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0002-Use-mergesort-in-the-leader-process.patch" Content-Disposition: attachment; filename="v20240505-0002-Use-mergesort-in-the-leader-process.patch" Content-Transfer-Encoding: base64 RnJvbSBmNDNhZWI5N2Y3NjZiMjQwOTJjMzc1OGZhNWQ2YTlmMGU2Njc2ZWFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjMyICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgMi84XSBVc2UgbWVyZ2Vzb3J0IGluIHRoZSBsZWFkZXIg cHJvY2VzcwoKVGhlIGxlYWRlciBwcm9jZXNzIChleGVjdXRpbmcgdGhlIHNlcmlhbCBwYXJ0 IG9mIHRoZSBpbmRleCBidWlsZCkgc3BlbnQKYSBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSB0 aW1lIGluIHBnX3Fzb3J0LCBhZnRlciBjb21iaW5pbmcgdGhlIHBhcnRpYWwKcmVzdWx0cyBm cm9tIHRoZSB3b3JrZXJzLiBCdXQgd2UgY2FuIGltcHJvdmUgdGhpcyBhbmQgbW92ZSBzb21l IG9mIHRoZQpjb3N0cyB0byB0aGUgcGFyYWxsZWwgcGFydCBpbiB3b3JrZXJzIC0gaWYgd29y a2VycyBwcm9kdWNlIHNvcnRlZCBUSUQKbGlzdHMsIHRoZSBsZWFkZXIgY2FuIGNvbWJpbmUg dGhlbSBieSBtZXJnZXNvcnQuCgpCdXQgdG8gbWFrZSB0aGlzIHJlYWxseSBlZmZpY2llbnQs IHRoZSBtZXJnZXNvcnQgbXVzdCBub3QgYmUgZXhlY3V0ZWQKdG9vIG1hbnkgdGltZXMuIFRo ZSB3b3JrZXJzIG1heSBlYXNpbHkgcHJvZHVjZSB2ZXJ5IHNob3J0IFRJRCBsaXN0cywgaWYK dGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IGtleXMsIGhpdHRpbmcgdGhlIG1lbW9yeSBsaW1p dCBvZnRlbi4gU28gdGhpcwphZGRzIGFuIGludGVybWVkaWF0ZSB0dXBsZXNvcnQgcGFzcyBp bnRvIGVhY2ggd29ya2VyLCB0byBjb21iaW5lIFRJRHMKZm9yIGVhY2gga2V5IGFuZCBvbmx5 IHRoZW4gd3JpdGUgdGhlIHJlc3VsdCBpbnRvIHRoZSBzaGFyZWQgdHVwbGVzdG9yZS4KClRo aXMgbWVhbnMgdGhlIG51bWJlciBvZiBtZXJnZXNvcnQgaW52b2NhdGlvbnMgZm9yIGVhY2gg a2V5IHNob3VsZCBiZQphYm91dCB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMu IFdlIGNhbid0IHJlYWxseSBkbyBiZXR0ZXIsIGFuZAppdCdzIGxvdyBlbm91Z2ggdG8ga2Vl cCB0aGUgbWVyZ2Vzb3J0IGFwcHJvYWNoIGVmZmljaWVudC4KCk5vdGU6IElmIHdlIGludHJv ZHVjZSBhIG1lbW9yeSBsaW1pdCBvbiBHaW5CdWZmZXIgKHRvIG5vdCBhY2N1bXVsYXRlIHRv bwptYW55IFRJRHMgaW4gbWVtb3J5KSwgd2UgY291bGQgZW5kIHVwIHdpdGggbW9yZSBjaHVu a3MsIGJ1dCBpdCBzaG91bGQKbm90IGJlIHZlcnkgY29tbW9uLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNDggaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKaW5kZXggYjM1M2UxNTVmYzYu LmNmN2E2Mjc4OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmlu c2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKQEAgLTE2 MSw2ICsxNjEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkgKiBidWlsZCBjYWxsYmFjayBldGMu CiAJICovCiAJVHVwbGVzb3J0c3RhdGUgKmJzX3NvcnRzdGF0ZTsKKworCS8qCisJICogVGhl IHNvcnRzdGF0ZSBpcyB1c2VkIG9ubHkgd2l0aGluIGEgd29ya2VyIGZvciB0aGUgZmlyc3Qg bWVyZ2UgcGFzcworCSAqIHRoYXQgaGFwcGVucyBpbiB0aGUgd29ya2VyLiBJbiBwcmluY2lw bGUgaXQgZG9lc24ndCBuZWVkIHRvIGJlIHBhcnQgb2YKKwkgKiB0aGUgYnVpbGQgc3RhdGUg YW5kIHdlIGNvdWxkIHBhc3MgaXQgYXJvdW5kIGRpcmVjdGx5LCBidXQgaXQncyBtb3JlCisJ ICogY29udmVuaWVudCB0aGlzIHdheS4KKwkgKi8KKwlUdXBsZXNvcnRzdGF0ZSAqYnNfd29y a2VyX3NvcnQ7CiB9IEdpbkJ1aWxkU3RhdGU7CiAKIApAQCAtNTMzLDcgKzU0MSw3IEBAIGdp bkJ1aWxkQ2FsbGJhY2tQYXJhbGxlbChSZWxhdGlvbiBpbmRleCwgSXRlbVBvaW50ZXIgdGlk LCBEYXR1bSAqdmFsdWVzLAogCQkJCQkJCQkgICBrZXksIGF0dHItPmF0dGxlbiwgYXR0ci0+ YXR0Ynl2YWwsCiAJCQkJCQkJCSAgIGxpc3QsIG5saXN0LCAmdHVwbGVuKTsKIAotCQkJdHVw bGVzb3J0X3B1dGdpbnR1cGxlKGJ1aWxkc3RhdGUtPmJzX3NvcnRzdGF0ZSwgdHVwLCB0dXBs ZW4pOworCQkJdHVwbGVzb3J0X3B1dGdpbnR1cGxlKGJ1aWxkc3RhdGUtPmJzX3dvcmtlcl9z b3J0LCB0dXAsIHR1cGxlbik7CiAKIAkJCXBmcmVlKHR1cCk7CiAJCX0KQEAgLTExMjcsNyAr MTEzNSw2IEBAIHR5cGVkZWYgc3RydWN0IEdpbkJ1ZmZlcgogCiAJLyogYXJyYXkgb2YgVElE IHZhbHVlcyAqLwogCWludAkJCW5pdGVtczsKLQlpbnQJCQltYXhpdGVtczsKIAlJdGVtUG9p bnRlckRhdGEgKml0ZW1zOwogfSBHaW5CdWZmZXI7CiAKQEAgLTExMzYsNyArMTE0Myw2IEBA IHN0YXRpYyB2b2lkCiBBc3NlcnRDaGVja0dpbkJ1ZmZlcihHaW5CdWZmZXIgKmJ1ZmZlcikK IHsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0JQXNzZXJ0KGJ1ZmZlci0+bml0ZW1z IDw9IGJ1ZmZlci0+bWF4aXRlbXMpOwogI2VuZGlmCiB9CiAKQEAgLTEyNDAsMjggKzEyNDYs MjIgQEAgR2luQnVmZmVyU3RvcmVUdXBsZShHaW5CdWZmZXIgKmJ1ZmZlciwgR2luVHVwbGUg KnR1cCkKIAkJCWJ1ZmZlci0+a2V5ID0gKERhdHVtKSAwOwogCX0KIAotCS8qIGVubGFyZ2Ug dGhlIFRJRCBidWZmZXIsIGlmIG5lZWRlZCAqLwotCWlmIChidWZmZXItPm5pdGVtcyArIHR1 cC0+bml0ZW1zID4gYnVmZmVyLT5tYXhpdGVtcykKKwkvKiBjb3B5IHRoZSBuZXcgVElEcyBp bnRvIHRoZSBidWZmZXIsIGNvbWJpbmUgdXNpbmcgbWVyZ2Utc29ydCAqLwogCXsKLQkJLyog NjQgc2VlbXMgbGlrZSBhIGdvb2QgaW5pdCB2YWx1ZSAqLwotCQlidWZmZXItPm1heGl0ZW1z ID0gTWF4KGJ1ZmZlci0+bWF4aXRlbXMsIDY0KTsKKwkJaW50CQkJbm5ldzsKKwkJSXRlbVBv aW50ZXIgbmV3OwogCi0JCXdoaWxlIChidWZmZXItPm5pdGVtcyArIHR1cC0+bml0ZW1zID4g YnVmZmVyLT5tYXhpdGVtcykKLQkJCWJ1ZmZlci0+bWF4aXRlbXMgKj0gMjsKKwkJbmV3ID0g Z2luTWVyZ2VJdGVtUG9pbnRlcnMoYnVmZmVyLT5pdGVtcywgYnVmZmVyLT5uaXRlbXMsCisJ CQkJCQkJCSAgIGl0ZW1zLCB0dXAtPm5pdGVtcywgJm5uZXcpOwogCi0JCWlmIChidWZmZXIt Pml0ZW1zID09IE5VTEwpCi0JCQlidWZmZXItPml0ZW1zID0gcGFsbG9jKGJ1ZmZlci0+bWF4 aXRlbXMgKiBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7Ci0JCWVsc2UKLQkJCWJ1ZmZlci0+ aXRlbXMgPSByZXBhbGxvYyhidWZmZXItPml0ZW1zLAotCQkJCQkJCQkJIGJ1ZmZlci0+bWF4 aXRlbXMgKiBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7Ci0JfQorCQlBc3NlcnQobm5ldyA9 PSBidWZmZXItPm5pdGVtcyArIHR1cC0+bml0ZW1zKTsKIAotCS8qIG5vdyB3ZSBzaG91bGQg YmUgZ3VhcmFudGVlZCB0byBoYXZlIGVub3VnaCBzcGFjZSBmb3IgYWxsIHRoZSBUSURzICov Ci0JQXNzZXJ0KGJ1ZmZlci0+bml0ZW1zICsgdHVwLT5uaXRlbXMgPD0gYnVmZmVyLT5tYXhp dGVtcyk7CisJCWlmIChidWZmZXItPml0ZW1zKQorCQkJcGZyZWUoYnVmZmVyLT5pdGVtcyk7 CiAKLQkvKiBjb3B5IHRoZSBuZXcgVElEcyBpbnRvIHRoZSBidWZmZXIgKi8KLQltZW1jcHko JmJ1ZmZlci0+aXRlbXNbYnVmZmVyLT5uaXRlbXNdLCBpdGVtcywgc2l6ZW9mKEl0ZW1Qb2lu dGVyRGF0YSkgKiB0dXAtPm5pdGVtcyk7Ci0JYnVmZmVyLT5uaXRlbXMgKz0gdHVwLT5uaXRl bXM7CisJCWJ1ZmZlci0+aXRlbXMgPSBuZXc7CisJCWJ1ZmZlci0+bml0ZW1zID0gbm5ldzsK Kwl9CiAKIAlBc3NlcnRDaGVja0l0ZW1Qb2ludGVycyhidWZmZXItPml0ZW1zLCBidWZmZXIt Pm5pdGVtcywgZmFsc2UpOwogfQpAQCAtMTMwMiw2ICsxMzAyLDIxIEBAIEdpbkJ1ZmZlclJl c2V0KEdpbkJ1ZmZlciAqYnVmZmVyKQogCS8qIFhYWCBzaG91bGQgZG8gc29tZXRoaW5nIHdp dGggZXh0cmVtZWx5IGxhcmdlIGFycmF5IG9mIGl0ZW1zPyAqLwogfQogCisvKiBYWFggcHJv YmFibHkgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgYSBtZW1vcnkgY29udGV4dCBmb3IgdGhl IGJ1ZmZlciAqLworc3RhdGljIHZvaWQKK0dpbkJ1ZmZlckZyZWUoR2luQnVmZmVyICpidWZm ZXIpCit7CisJaWYgKGJ1ZmZlci0+aXRlbXMpCisJCXBmcmVlKGJ1ZmZlci0+aXRlbXMpOwor CisJLyogcmVsZWFzZSBieXJlZiB2YWx1ZXMsIGRvIG5vdGhpbmcgZm9yIGJ5LXZhbCBvbmVz ICovCisJaWYgKCFHaW5CdWZmZXJJc0VtcHR5KGJ1ZmZlcikgJiYKKwkJKGJ1ZmZlci0+Y2F0 ZWdvcnkgPT0gR0lOX0NBVF9OT1JNX0tFWSkgJiYgIWJ1ZmZlci0+dHlwYnl2YWwpCisJCXBm cmVlKERhdHVtR2V0UG9pbnRlcihidWZmZXItPmtleSkpOworCisJcGZyZWUoYnVmZmVyKTsK K30KKwogLyoKICAqIFhYWCBNYXliZSBjaGVjayBzaXplIG9mIHRoZSBUSUQgYXJyYXlzLCBh bmQgcmV0dXJuIGZhbHNlIGlmIGl0J3MgdG9vCiAgKiBsYXJnZSAobW9yZSB0aGFudCBtYWlu dGVuYW5jZV93b3JrX21lbSBvciBzb21ldGhpbmc/KS4KQEAgLTEzNzUsNyArMTM5MCw3IEBA IF9naW5fcGFyYWxsZWxfbWVyZ2UoR2luQnVpbGRTdGF0ZSAqc3RhdGUpCiAJCQkgKiB0aGUg ZGF0YSBpbnRvIHRoZSBpbnNlcnQsIGFuZCBzdGFydCBhIG5ldyBlbnRyeSBmb3IgY3VycmVu dAogCQkJICogR2luVHVwbGUuCiAJCQkgKi8KLQkJCUdpbkJ1ZmZlclNvcnRJdGVtcyhidWZm ZXIpOworCQkJQXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoYnVmZmVyLT5pdGVtcywgYnVmZmVy LT5uaXRlbXMsIHRydWUpOwogCiAJCQlnaW5FbnRyeUluc2VydCgmc3RhdGUtPmdpbnN0YXRl LAogCQkJCQkJICAgYnVmZmVyLT5hdHRudW0sIGJ1ZmZlci0+a2V5LCBidWZmZXItPmNhdGVn b3J5LApAQCAtMTM5Miw3ICsxNDA3LDcgQEAgX2dpbl9wYXJhbGxlbF9tZXJnZShHaW5CdWls ZFN0YXRlICpzdGF0ZSkKIAkvKiBmbHVzaCBkYXRhIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVy IChmb3IgdGhlIGxhc3Qga2V5KSAqLwogCWlmICghR2luQnVmZmVySXNFbXB0eShidWZmZXIp KQogCXsKLQkJR2luQnVmZmVyU29ydEl0ZW1zKGJ1ZmZlcik7CisJCUFzc2VydENoZWNrSXRl bVBvaW50ZXJzKGJ1ZmZlci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCB0cnVlKTsKIAogCQln aW5FbnRyeUluc2VydCgmc3RhdGUtPmdpbnN0YXRlLAogCQkJCQkgICBidWZmZXItPmF0dG51 bSwgYnVmZmVyLT5rZXksIGJ1ZmZlci0+Y2F0ZWdvcnksCkBAIC0xNDAyLDYgKzE0MTcsOSBA QCBfZ2luX3BhcmFsbGVsX21lcmdlKEdpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCQlHaW5CdWZm ZXJSZXNldChidWZmZXIpOwogCX0KIAorCS8qIHJlbGFzZSBhbGwgdGhlIG1lbW9yeSAqLwor CUdpbkJ1ZmZlckZyZWUoYnVmZmVyKTsKKwogCXR1cGxlc29ydF9lbmQoc3RhdGUtPmJzX3Nv cnRzdGF0ZSk7CiAKIAlyZXR1cm4gcmVsdHVwbGVzOwpAQCAtMTQ0MCw2ICsxNDU4LDEwMiBA QCBfZ2luX2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoR2luQnVpbGRTdGF0ZSAqYnVp bGRzdGF0ZSwgUmVsYXRpb24gaGVhcCwgUmVsYQogCQkJCQkJCQkgZ2lubGVhZGVyLT5zaGFy ZWRzb3J0LCBoZWFwLCBpbmRleCwgc29ydG1lbSwgdHJ1ZSk7CiB9CiAKKy8qCisgKiBfZ2lu X3Byb2Nlc3Nfd29ya2VyX2RhdGEKKyAqCQlGaXJzdCBwaGFzZSBvZiB0aGUga2V5IG1lcmdp bmcsIGhhcHBlbmluZyBpbiB0aGUgd29ya2VyLgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUg bnVtYmVyIG9mIGRpc3RpbmN0IGtleXMsIHRoZSBUSUQgbGlzdHMgcHJvZHVjZWQgYnkgdGhl CisgKiBjYWxsYmFjayBtYXkgYmUgdmVyeSBzaG9ydC4gQnV0IGNvbWJpbmluZyBtYW55IHRp bnkgbGlzdHMgaXMgZXhwZW5zaXZlLAorICogc28gd2UgdHJ5IHRvIGRvIGFzIG11Y2ggYXMg cG9zc2libGUgaW4gdGhlIHdvcmtlcnMgYW5kIG9ubHkgdGhlbiBwYXNzIHRoZQorICogcmVz dWx0cyB0byB0aGUgbGVhZGVyLgorICoKKyAqIFdlIHJlYWQgdGhlIHR1cGxlcyBzb3J0ZWQg YnkgdGhlIGtleSwgYW5kIG1lcmdlIHRoZW0gaW50byBsYXJnZXIgbGlzdHMuCisgKiBBdCB0 aGUgbW9tZW50IHRoZXJlJ3Mgbm8gbWVtb3J5IGxpbWl0LCBzbyB0aGlzIHdpbGwganVzdCBw cm9kdWNlIG9uZQorICogaHVnZSAoc29ydGVkKSBsaXN0IHBlciBrZXkgaW4gZWFjaCB3b3Jr ZXIuIFdoaWNoIG1lYW5zIHRoZSBsZWFkZXIgd2lsbAorICogZG8gYSB2ZXJ5IGxpbWl0ZWQg bnVtYmVyIG9mIG1lcmdlc29ydHMsIHdoaWNoIGlzIGdvb2QuCisgKi8KK3N0YXRpYyB2b2lk CitfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVpbGRTdGF0ZSAqc3RhdGUsIFR1cGxl c29ydHN0YXRlICp3b3JrZXJfc29ydCkKK3sKKwlHaW5UdXBsZSAgICp0dXA7CisJU2l6ZQkJ dHVwbGVuOworCisJR2luQnVmZmVyICAqYnVmZmVyOworCisJLyogaW5pdGlhbGl6ZSBidWZm ZXIgdG8gY29tYmluZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBrZXkgKi8KKwlidWZmZXIgPSBH aW5CdWZmZXJJbml0KCk7CisKKwkvKiBzb3J0IHRoZSByYXcgcGVyLXdvcmtlciBkYXRhICov CisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLT5ic193b3JrZXJfc29ydCk7CisKKwkv KgorCSAqIFJlYWQgdGhlIEdJTiB0dXBsZXMgZnJvbSB0aGUgc2hhcmVkIHR1cGxlc29ydCwg c29ydGVkIGJ5IHRoZSBrZXksIGFuZAorCSAqIG1lcmdlIHRoZW0gaW50byBsYXJnZXIgY2h1 bmtzIGZvciB0aGUgbGVhZGVyIHRvIGNvbWJpbmUuCisJICovCisJd2hpbGUgKCh0dXAgPSB0 dXBsZXNvcnRfZ2V0Z2ludHVwbGUod29ya2VyX3NvcnQsICZ0dXBsZW4sIHRydWUpKSAhPSBO VUxMKQorCXsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qCisJCSAqIElm IHRoZSBidWZmZXIgY2FuIGFjY2VwdCB0aGUgbmV3IEdJTiB0dXBsZSwganVzdCBzdG9yZSBp dCB0aGVyZSBhbmQKKwkJICogd2UncmUgZG9uZS4gSWYgaXQncyBhIGRpZmZlcmVudCBrZXkg KG9yIG1heWJlIHRvbyBtdWNoIGRhdGEpIGZsdXNoCisJCSAqIHRoZSBjdXJyZW50IGNvbnRl bnRzIGludG8gdGhlIGluZGV4IGZpcnN0LgorCQkgKi8KKwkJaWYgKCFHaW5CdWZmZXJDYW5B ZGRLZXkoYnVmZmVyLCB0dXApKQorCQl7CisJCQlHaW5UdXBsZSAgICpudHVwOworCQkJU2l6 ZQkJbnR1cGxlbjsKKworCQkJLyoKKwkJCSAqIEJ1ZmZlciBpcyBub3QgZW1wdHkgYW5kIGl0 J3Mgc3RvcmluZyBhIGRpZmZlcmVudCBrZXkgLSBmbHVzaAorCQkJICogdGhlIGRhdGEgaW50 byB0aGUgaW5zZXJ0LCBhbmQgc3RhcnQgYSBuZXcgZW50cnkgZm9yIGN1cnJlbnQKKwkJCSAq IEdpblR1cGxlLgorCQkJICovCisJCQlHaW5CdWZmZXJTb3J0SXRlbXMoYnVmZmVyKTsKKwor CQkJbnR1cCA9IF9naW5fYnVpbGRfdHVwbGUoYnVmZmVyLT5hdHRudW0sIGJ1ZmZlci0+Y2F0 ZWdvcnksCisJCQkJCQkJCQlidWZmZXItPmtleSwgYnVmZmVyLT50eXBsZW4sIGJ1ZmZlci0+ dHlwYnl2YWwsCisJCQkJCQkJCQlidWZmZXItPml0ZW1zLCBidWZmZXItPm5pdGVtcywgJm50 dXBsZW4pOworCisJCQl0dXBsZXNvcnRfcHV0Z2ludHVwbGUoc3RhdGUtPmJzX3NvcnRzdGF0 ZSwgbnR1cCwgbnR1cGxlbik7CisKKwkJCXBmcmVlKG50dXApOworCisJCQkvKiBkaXNjYXJk IHRoZSBleGlzdGluZyBkYXRhICovCisJCQlHaW5CdWZmZXJSZXNldChidWZmZXIpOworCQl9 CisKKwkJLyogbm93IHJlbWVtYmVyIHRoZSBuZXcga2V5ICovCisJCUdpbkJ1ZmZlclN0b3Jl VHVwbGUoYnVmZmVyLCB0dXApOworCX0KKworCS8qIGZsdXNoIGRhdGEgcmVtYWluaW5nIGlu IHRoZSBidWZmZXIgKGZvciB0aGUgbGFzdCBrZXkpICovCisJaWYgKCFHaW5CdWZmZXJJc0Vt cHR5KGJ1ZmZlcikpCisJeworCQlHaW5UdXBsZSAgICpudHVwOworCQlTaXplCQludHVwbGVu OworCisJCUdpbkJ1ZmZlclNvcnRJdGVtcyhidWZmZXIpOworCisJCW50dXAgPSBfZ2luX2J1 aWxkX3R1cGxlKGJ1ZmZlci0+YXR0bnVtLCBidWZmZXItPmNhdGVnb3J5LAorCQkJCQkJCQli dWZmZXItPmtleSwgYnVmZmVyLT50eXBsZW4sIGJ1ZmZlci0+dHlwYnl2YWwsCisJCQkJCQkJ CWJ1ZmZlci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCAmbnR1cGxlbik7CisKKwkJdHVwbGVz b3J0X3B1dGdpbnR1cGxlKHN0YXRlLT5ic19zb3J0c3RhdGUsIG50dXAsIG50dXBsZW4pOwor CisJCXBmcmVlKG50dXApOworCisJCS8qIGRpc2NhcmQgdGhlIGV4aXN0aW5nIGRhdGEgKi8K KwkJR2luQnVmZmVyUmVzZXQoYnVmZmVyKTsKKwl9CisKKwkvKiByZWxhc2UgYWxsIHRoZSBt ZW1vcnkgKi8KKwlHaW5CdWZmZXJGcmVlKGJ1ZmZlcik7CisKKwl0dXBsZXNvcnRfZW5kKHdv cmtlcl9zb3J0KTsKK30KKwogLyoKICAqIFBlcmZvcm0gYSB3b3JrZXIncyBwb3J0aW9uIG9m IGEgcGFyYWxsZWwgc29ydC4KICAqCkBAIC0xNDcxLDYgKzE1ODUsMTAgQEAgX2dpbl9wYXJh bGxlbF9zY2FuX2FuZF9idWlsZChHaW5CdWlsZFN0YXRlICpzdGF0ZSwKIAlzdGF0ZS0+YnNf c29ydHN0YXRlID0gdHVwbGVzb3J0X2JlZ2luX2luZGV4X2dpbihzb3J0bWVtLCBjb29yZGlu YXRlLAogCQkJCQkJCQkJCQkJCVRVUExFU09SVF9OT05FKTsKIAorCS8qIExvY2FsIHBlci13 b3JrZXIgc29ydCBvZiByYXctZGF0YSAqLworCXN0YXRlLT5ic193b3JrZXJfc29ydCA9IHR1 cGxlc29ydF9iZWdpbl9pbmRleF9naW4oc29ydG1lbSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkg IFRVUExFU09SVF9OT05FKTsKKwogCS8qIEpvaW4gcGFyYWxsZWwgc2NhbiAqLwogCWluZGV4 SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4KTsKIAlpbmRleEluZm8tPmlpX0NvbmN1cnJl bnQgPSBnaW5zaGFyZWQtPmlzY29uY3VycmVudDsKQEAgLTE1MDgsNyArMTYyNiw3IEBAIF9n aW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoR2luQnVpbGRTdGF0ZSAqc3RhdGUsCiAJCQkJ CQkJCSAgIGtleSwgYXR0ci0+YXR0bGVuLCBhdHRyLT5hdHRieXZhbCwKIAkJCQkJCQkJICAg bGlzdCwgbmxpc3QsICZsZW4pOwogCi0JCQl0dXBsZXNvcnRfcHV0Z2ludHVwbGUoc3RhdGUt PmJzX3NvcnRzdGF0ZSwgdHVwLCBsZW4pOworCQkJdHVwbGVzb3J0X3B1dGdpbnR1cGxlKHN0 YXRlLT5ic193b3JrZXJfc29ydCwgdHVwLCBsZW4pOwogCiAJCQlwZnJlZSh0dXApOwogCQl9 CkBAIC0xNTE3LDYgKzE2MzUsMTMgQEAgX2dpbl9wYXJhbGxlbF9zY2FuX2FuZF9idWlsZChH aW5CdWlsZFN0YXRlICpzdGF0ZSwKIAkJZ2luSW5pdEJBKCZzdGF0ZS0+YWNjdW0pOwogCX0K IAorCS8qCisJICogRG8gdGhlIGZpcnN0IHBoYXNlIG9mIGluLXdvcmtlciBwcm9jZXNzaW5n IC0gc29ydCB0aGUgZGF0YSBwcm9kdWNlZCBieQorCSAqIHRoZSBjYWxsYmFjaywgYW5kIGNv bWJpbmUgdGhlbSBpbnRvIG11Y2ggbGFyZ2VyIGNodW5rcyBhbmQgcGxhY2UgdGhhdAorCSAq IGludG8gdGhlIHNoYXJlZCB0dXBsZXN0b3JlIGZvciBsZWFkZXIgdG8gcHJvY2Vzcy4KKwkg Ki8KKwlfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoc3RhdGUsIHN0YXRlLT5ic193b3JrZXJf c29ydCk7CisKIAkvKiBzb3J0IHRoZSBHSU4gdHVwbGVzIGJ1aWx0IGJ5IHRoaXMgd29ya2Vy ICovCiAJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLT5ic19zb3J0c3RhdGUpOwogCi0t IAoyLjQ0LjAKCg== --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0003-Remove-the-explicit-pg_qsort-in-workers.patch" Content-Disposition: attachment; filename*0="v20240505-0003-Remove-the-explicit-pg_qsort-in-workers.patch" Content-Transfer-Encoding: base64 RnJvbSA0NWU3ZjA5ZWM4MTkzMmM1NGVlZjg5MTAxN2QyYTEwODE4ZGQyNWI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjM2ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgMy84XSBSZW1vdmUgdGhlIGV4cGxpY2l0IHBnX3Fzb3J0 IGluIHdvcmtlcnMKCldlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGV4cGxpY2l0IHNvcnQgYmVm b3JlIGJ1aWxkaW5nIHRoZSBHSU4gdHVwbGUsCmJlY2F1c2UgdGhlIG1lcmdlc29ydCBpbiBH aW5CdWZmZXJTdG9yZVR1cGxlIGlzIGFscmVhZHkgbWFpbnRhaW5pbmcgdGhlCmNvcnJlY3Qg b3JkZXIgKHRoaXMgd2FzIGFkZGVkIGluIGFuIGVhcmxpZXIgY29tbWl0KS4KClRoZSBjb21t ZW50IGFsc28gYWRkcyBhIGZpZWxkIHdpdGggdGhlIGZpcnN0IFRJRCwgYW5kIG1vZGlmaWVz IHRoZQpjb21wYXJhdG9yIHRvIHNvcnQgYnkgaXQgKGZvciBlYWNoIGtleSB2YWx1ZSkuIFRo aXMgaGVscHMgd29ya2VycyB0bwpidWlsZCBub24tb3ZlcmxhcHBpbmcgVElEIGxpc3RzIGFu ZCBzaW1wbHkgYXBwZW5kIHZhbHVlcyBpbnN0ZWFkIG9mCmhhdmluZyB0byBkbyB0aGUgYWN0 dWFsIG1lcmdlc29ydCB0byBjb21iaW5lIHRoZW0uIFRoaXMgaXMgYmVzdC1lZmZvcnQsCmku ZS4gaXQncyBub3QgZ3VhcmFudGVlZCB0byBlbGltaW5hdGUgdGhlIG1lcmdlc29ydCAtIGlu IHBhcnRpY3VsYXIsCnBhcmFsbGVsIHNjYW5zIGFyZSBzeW5jaHJvbml6ZWQsIGFuZCB0aHVz IG1heSBzdGFydCBzb21ld2hlcmUgaW4gdGhlCm1pZGRsZSBvZiB0aGUgdGFibGUsIGFuZCB3 cmFwIGFyb3VuZC4gSW4gd2hpY2ggY2FzZSB0aGVyZSBtYXkgYmUgdmVyeQp3aWRlIGxpc3Qg KHdpdGggbG93L2hpZ2ggVElEIHZhbHVlcykuCgpOb3RlOiBUaGVyZSdzIGFuIFhYWCBjb21t ZW50IHdpdGggYSBjb3VwbGUgaWRlYXMgb24gaG93IHRvIGltcHJvdmUgdGhpcywKYXQgdGhl IGNvc3Qgb2YgbW9yZSBjb21wbGV4aXR5LgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2luaW5zZXJ0LmMgfCAxMjQgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9p bmNsdWRlL2FjY2Vzcy9naW5fdHVwbGUuaCAgICAgfCAgIDggKysKIDIgZmlsZXMgY2hhbmdl ZCwgOTggaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luaW5zZXJ0LmMKaW5kZXggY2Y3YTYyNzg5MTQuLmIyYjQ0MDY2MzI5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKQEAgLTExMTAsMTIgKzExMTAsNiBAQCBfZ2lu X3BhcmFsbGVsX2hlYXBzY2FuKEdpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCXJldHVybiBzdGF0 ZS0+YnNfcmVsdHVwbGVzOwogfQogCi1zdGF0aWMgaW50Ci10aWRfY21wKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0JcmV0dXJuIEl0ZW1Qb2ludGVyQ29tcGFyZSgoSXRl bVBvaW50ZXIpIGEsIChJdGVtUG9pbnRlcikgYik7Ci19Ci0KIC8qCiAgKiBTdGF0ZSB1c2Vk IHRvIGNvbWJpbmUgYWNjdW11bGF0ZSBUSURzIGZyb20gbXVsdGlwbGUgR2luVHVwbGVzIGZv ciB0aGUgc2FtZQogICoga2V5IHZhbHVlLgpAQCAtMTE0NywxNyArMTE0MSwyMSBAQCBBc3Nl cnRDaGVja0dpbkJ1ZmZlcihHaW5CdWZmZXIgKmJ1ZmZlcikKIH0KIAogc3RhdGljIHZvaWQK LUFzc2VydENoZWNrSXRlbVBvaW50ZXJzKEl0ZW1Qb2ludGVyRGF0YSAqaXRlbXMsIGludCBu aXRlbXMsIGJvb2wgc29ydGVkKQorQXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoR2luQnVmZmVy ICpidWZmZXIsIGJvb2wgc29ydGVkKQogewogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcK LQlmb3IgKGludCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCS8qIHdlIHNob3VsZCBub3Qg aGF2ZSBhIGJ1ZmZlciB3aXRoIG5vIFRJRHMgdG8gc29ydCAqLworCUFzc2VydChidWZmZXIt Pml0ZW1zICE9IE5VTEwpOworCUFzc2VydChidWZmZXItPm5pdGVtcyA+IDApOworCisJZm9y IChpbnQgaSA9IDA7IGkgPCBidWZmZXItPm5pdGVtczsgaSsrKQogCXsKLQkJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCgmaXRlbXNbaV0pKTsKKwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNW YWxpZCgmYnVmZmVyLT5pdGVtc1tpXSkpOwogCiAJCWlmICgoaSA9PSAwKSB8fCAhc29ydGVk KQogCQkJY29udGludWU7CiAKLQkJQXNzZXJ0KEl0ZW1Qb2ludGVyQ29tcGFyZSgmaXRlbXNb aSAtIDFdLCAmaXRlbXNbaV0pIDwgMCk7CisJCUFzc2VydChJdGVtUG9pbnRlckNvbXBhcmUo JmJ1ZmZlci0+aXRlbXNbaSAtIDFdLCAmYnVmZmVyLT5pdGVtc1tpXSkgPCAwKTsKIAl9CiAj ZW5kaWYKIH0KQEAgLTEyMjAsNiArMTIxOCw0NSBAQCBHaW5CdWZmZXJLZXlFcXVhbHMoR2lu QnVmZmVyICpidWZmZXIsIEdpblR1cGxlICp0dXApCiAJcmV0dXJuIChtZW1jbXAodHVwLT5k YXRhLCBEYXR1bUdldFBvaW50ZXIoYnVmZmVyLT5rZXkpLCBidWZmZXItPmtleWxlbikgPT0g MCk7CiB9CiAKKy8qCisgKiBHaW5CdWZmZXJTdG9yZVR1cGxlCisgKgkJQWRkIGRhdGEgZnJv bSBhIEdpblR1cGxlIGludG8gdGhlIEdpbkJ1ZmZlci4KKyAqCisgKiBJZiB0aGUgYnVmZmVy IGlzIGVtcHR5LCB3ZSBzaW1wbHkgaW5pdGlhbGl6ZSBpdCB3aXRoIGRhdGEgZnJvbSB0aGUg dHVwbGUuCisgKiBPdGhlcndpc2UgZGF0YSBmcm9tIHRoZSB0dXBsZSAodGhlIFRJRCBsaXN0 KSBpcyBhZGRlZCB0byB0aGUgVElEIGRhdGEgaW4KKyAqIHRoZSBidWZmZXIsIGVpdGhlciBi eSBzaW1wbHkgYXBwZW5kaW5nIHRoZSBUSURzIG9yIGRvaW5nIG1lcmdlIHNvcnQuCisgKgor ICogVGhlIGRhdGEgKGZvciB0aGUgc2FtZSBrZXkpIGlzIGV4cGVjdGVkIHRvIGJlIHByb2Nl c3NlZCBzb3J0ZWQgYnkgZmlyc3QKKyAqIFRJRC4gQnV0IHRoaXMgZG9lcyBub3QgZ3VhcmFu dGVlIHRoZSBsaXN0cyBkbyBub3Qgb3ZlcmxhcCwgZXNwZWNpYWxseSBpbgorICogdGhlIGxl YWRlciwgYmVjYXVzZSB0aGUgd29ya2VycyBwcm9jZXNzIGludGVybGVhdmluZyBkYXRhLiBC dXQgZXZlbiBpbgorICogYSBzaW5nbGUgd29ya2VyLCBsaXN0cyBjYW4gb3ZlcmxhcCAtIHBh cmFsbGVsIHNjYW5zIHJlcXVpcmUgc3luYy1zY2FucywKKyAqIGFuZCBpZiB0aGUgc2NhbiBz dGFydHMgc29tZXdoZXJlIGluIHRoZSB0YWJsZSBhbmQgdGhlbiB3cmFwcyBhcm91bmQsIGl0 CisgKiBtYXkgY29udGFpbiB2ZXJ5IHdpZGUgbGlzdHMgKGluIHRlcm1zIG9mIFRJRCByYW5n ZSkuCisgKgorICogQnV0IHRoZSBnaW5NZXJnZUl0ZW1Qb2ludGVycygpIGlzIGFscmVhZHkg c21hcnQgYWJvdXQgZGV0ZWN0aW5nIGNhc2VzCisgKiB3aGVyZSBpdCBjYW4gc2ltcGx5IGNv bmNhdGVuYXRlIHRoZSBsaXN0cywgYW5kIHdoZW4gZnVsbCBtZXJnZXNvcnQgaXMKKyAqIG5l ZWRlZC4gQW5kIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorICoKKyAqIEJ5IGtlZXBpbmcgdGhl IGZpcnN0IFRJRCBpbiB0aGUgR2luVHVwbGUgYW5kIHNvcnRpbmcgYnkgdGhhdCwgd2UgbWFr ZQorICogaXQgbW9yZSBsaWtlbHkgdGhlIGxpc3RzIHdvbid0IG92ZXJsYXAgdmVyeSBvZnRl bi4KKyAqCisgKiBYWFggSG93IGZyZXF1ZW50IGNhbiB0aGUgb3ZlcmxhcHMgYmU/IElmIHRo ZSBzY2FuIGRvZXMgbm90IHdyYXAgYXJvdW5kLAorICogdGhlcmUgc2hvdWxkIGJlIG5vIG92 ZXJsYXBwaW5nIGxpc3RzLCBhbmQgdGh1cyBubyBtZXJnZXNvcnQuIEFmdGVyIGFiCisgKiBv dmVybGFwLCB0aGVyZSBwcm9iYWJseSBjYW4gYmUgbWFueSAtIHRoZSBvbmUgbGlzdCB3aWxs IGJlIHZlcnkgd2lkZSwKKyAqIHdpdGggYSB2ZXJ5IGxvdyBhbmQgaGlnaCBUSUQsIGFuZCBh bGwgb3RoZXIgbGlzdHMgd2lsbCBvdmVybGFwIHdpdGggaXQuCisgKiBJJ20gbm90IHN1cmUg aG93IG11Y2ggd2UgY2FuIGRvIHRvIHByZXZlbnQgdGhhdCwgc2hvcnQgb2YgZGlzYWJsaW5n IHN5bmMKKyAqIHNjYW5zICh3aGljaCBmb3IgcGFyYWxsZWwgc2NhbnMgaXMgY3VycmVudGx5 IG5vdCBwb3NzaWJsZSkuIE9uZSBvcHRpb24KKyAqIHdvdWxkIGJlIHRvIGtlZXAgdHdvIGxp c3RzIG9mIFRJRHMsIGFuZCBzZWUgaWYgdGhlIG5ldyBsaXN0IGNhbiBiZQorICogY29uY2F0 ZW5hdGVkIHdpdGggb25lIG9mIHRoZW0uIFRoZSBpZGVhIGlzIHRoYXQgdGhlcmUncyBvbmx5 IG9uZSB3aWRlCisgKiBsaXN0IChiZWNhdXNlIHRoZSB3cmFwYXJvdW5kIGhhcHBlbnMgb25s eSBvbmNlKSwgYW5kIHRoZW4gZG8gdGhlCisgKiBtZXJnZXNvcnQgb25seSBvbmNlIGF0IHRo ZSB2ZXJ5IGVuZC4KKyAqCisgKiBYWFggQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgc2ltcGx5 IGRldGVjdCB0aGUgY2FzZSB3aGVuIHRoZSBsaXN0cyBjYW4ndAorICogYmUgYXBwZW5kZWQs IGFuZCBmbHVzaCB0aGUgY3VycmVudCBsaXN0IG91dC4gVGhlIHdyYXAgYXJvdW5kIGhhcHBl bnMgb25seQorICogb25jZSwgc28gdGhlcmUncyBnb2luZyB0byBiZSBvbmx5IHN1Y2ggd2lk ZSBsaXN0LCBhbmQgaXQnbGwgYmUgc29ydGVkCisgKiBmaXJzdCAoYmVjYXVzZSBpdCBoYXMg dGhlIGxvd2VzdCBUSUQgZm9yIHRoZSBrZXkpLiBTbyB3ZSdkIGRvIHRoaXMgYXQKKyAqIG1v c3Qgb25jZSBwZXIga2V5LgorICovCiBzdGF0aWMgdm9pZAogR2luQnVmZmVyU3RvcmVUdXBs ZShHaW5CdWZmZXIgKmJ1ZmZlciwgR2luVHVwbGUgKnR1cCkKIHsKQEAgLTEyNDYsNyArMTI4 MywxMiBAQCBHaW5CdWZmZXJTdG9yZVR1cGxlKEdpbkJ1ZmZlciAqYnVmZmVyLCBHaW5UdXBs ZSAqdHVwKQogCQkJYnVmZmVyLT5rZXkgPSAoRGF0dW0pIDA7CiAJfQogCi0JLyogY29weSB0 aGUgbmV3IFRJRHMgaW50byB0aGUgYnVmZmVyLCBjb21iaW5lIHVzaW5nIG1lcmdlLXNvcnQg Ki8KKwkvKgorCSAqIENvcHkgdGhlIG5ldyBUSURzIGludG8gdGhlIGJ1ZmZlciwgY29tYmlu ZSB3aXRoIGV4aXN0aW5nIGRhdGEgKGlmIGFueSkKKwkgKiB1c2luZyBtZXJnZS1zb3J0LiBU aGUgbWVyZ2Vzb3J0IGlzIGFscmVhZHkgc21hcnQgYWJvdXQgY2FzZXMgd2hlcmUgaXQKKwkg KiBjYW4gc2ltcGx5IGNvbmNhdGVuYXRlIHRoZSB0d28gbGlzdHMsIGFuZCB3aGVuIGl0IGFj dHVhbGx5IG5lZWRzIHRvCisJICogbWVyZ2UgdGhlIGRhdGEgaW4gYW4gZXhwZW5zaXZlIHdh eS4KKwkgKi8KIAl7CiAJCWludAkJCW5uZXc7CiAJCUl0ZW1Qb2ludGVyIG5ldzsKQEAgLTEy NjEsMjEgKzEzMDMsOSBAQCBHaW5CdWZmZXJTdG9yZVR1cGxlKEdpbkJ1ZmZlciAqYnVmZmVy LCBHaW5UdXBsZSAqdHVwKQogCiAJCWJ1ZmZlci0+aXRlbXMgPSBuZXc7CiAJCWJ1ZmZlci0+ bml0ZW1zID0gbm5ldzsKLQl9Ci0KLQlBc3NlcnRDaGVja0l0ZW1Qb2ludGVycyhidWZmZXIt Pml0ZW1zLCBidWZmZXItPm5pdGVtcywgZmFsc2UpOwotfQogCi1zdGF0aWMgdm9pZAotR2lu QnVmZmVyU29ydEl0ZW1zKEdpbkJ1ZmZlciAqYnVmZmVyKQotewotCS8qIHdlIHNob3VsZCBu b3QgaGF2ZSBhIGJ1ZmZlciB3aXRoIG5vIFRJRHMgdG8gc29ydCAqLwotCUFzc2VydChidWZm ZXItPml0ZW1zICE9IE5VTEwpOwotCUFzc2VydChidWZmZXItPm5pdGVtcyA+IDApOwotCi0J cGdfcXNvcnQoYnVmZmVyLT5pdGVtcywgYnVmZmVyLT5uaXRlbXMsIHNpemVvZihJdGVtUG9p bnRlckRhdGEpLCB0aWRfY21wKTsKLQotCUFzc2VydENoZWNrSXRlbVBvaW50ZXJzKGJ1ZmZl ci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCB0cnVlKTsKKwkJQXNzZXJ0Q2hlY2tJdGVtUG9p bnRlcnMoYnVmZmVyLCB0cnVlKTsKKwl9CiB9CiAKIC8qIFhYWCBwcm9iYWJseSB3b3VsZCBi ZSBiZXR0ZXIgdG8gaGF2ZSBhIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgYnVmZmVyICovCkBA IC0xMjk5LDYgKzEzMjksMTEgQEAgR2luQnVmZmVyUmVzZXQoR2luQnVmZmVyICpidWZmZXIp CiAJYnVmZmVyLT50eXBsZW4gPSAwOwogCWJ1ZmZlci0+dHlwYnl2YWwgPSAwOwogCisJaWYg KGJ1ZmZlci0+aXRlbXMpCisJeworCQlwZnJlZShidWZmZXItPml0ZW1zKTsKKwkJYnVmZmVy LT5pdGVtcyA9IE5VTEw7CisJfQogCS8qIFhYWCBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGgg ZXh0cmVtZWx5IGxhcmdlIGFycmF5IG9mIGl0ZW1zPyAqLwogfQogCkBAIC0xMzkwLDcgKzE0 MjUsNyBAQCBfZ2luX3BhcmFsbGVsX21lcmdlKEdpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCQkJ ICogdGhlIGRhdGEgaW50byB0aGUgaW5zZXJ0LCBhbmQgc3RhcnQgYSBuZXcgZW50cnkgZm9y IGN1cnJlbnQKIAkJCSAqIEdpblR1cGxlLgogCQkJICovCi0JCQlBc3NlcnRDaGVja0l0ZW1Q b2ludGVycyhidWZmZXItPml0ZW1zLCBidWZmZXItPm5pdGVtcywgdHJ1ZSk7CisJCQlBc3Nl cnRDaGVja0l0ZW1Qb2ludGVycyhidWZmZXIsIHRydWUpOwogCiAJCQlnaW5FbnRyeUluc2Vy dCgmc3RhdGUtPmdpbnN0YXRlLAogCQkJCQkJICAgYnVmZmVyLT5hdHRudW0sIGJ1ZmZlci0+ a2V5LCBidWZmZXItPmNhdGVnb3J5LApAQCAtMTQwMCwxNCArMTQzNSwxNyBAQCBfZ2luX3Bh cmFsbGVsX21lcmdlKEdpbkJ1aWxkU3RhdGUgKnN0YXRlKQogCQkJR2luQnVmZmVyUmVzZXQo YnVmZmVyKTsKIAkJfQogCi0JCS8qIG5vdyByZW1lbWJlciB0aGUgbmV3IGtleSAqLworCQkv KgorCQkgKiBSZW1lbWJlciBkYXRhIGZvciB0aGUgY3VycmVudCB0dXBsZSAoZWl0aGVyIHJl bWVtYmVyIHRoZSBuZXcga2V5LAorCQkgKiBvciBhcHBlbmQgaWYgdG8gdGhlIGV4aXN0aW5n IGRhdGEpLgorCQkgKi8KIAkJR2luQnVmZmVyU3RvcmVUdXBsZShidWZmZXIsIHR1cCk7CiAJ fQogCiAJLyogZmx1c2ggZGF0YSByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciAoZm9yIHRoZSBs YXN0IGtleSkgKi8KIAlpZiAoIUdpbkJ1ZmZlcklzRW1wdHkoYnVmZmVyKSkKIAl7Ci0JCUFz c2VydENoZWNrSXRlbVBvaW50ZXJzKGJ1ZmZlci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCB0 cnVlKTsKKwkJQXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoYnVmZmVyLCB0cnVlKTsKIAogCQln aW5FbnRyeUluc2VydCgmc3RhdGUtPmdpbnN0YXRlLAogCQkJCQkgICBidWZmZXItPmF0dG51 bSwgYnVmZmVyLT5rZXksIGJ1ZmZlci0+Y2F0ZWdvcnksCkBAIC0xNTEwLDcgKzE1NDgsNyBA QCBfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVpbGRTdGF0ZSAqc3RhdGUsIFR1cGxl c29ydHN0YXRlICp3b3JrZXJfc29ydCkKIAkJCSAqIHRoZSBkYXRhIGludG8gdGhlIGluc2Vy dCwgYW5kIHN0YXJ0IGEgbmV3IGVudHJ5IGZvciBjdXJyZW50CiAJCQkgKiBHaW5UdXBsZS4K IAkJCSAqLwotCQkJR2luQnVmZmVyU29ydEl0ZW1zKGJ1ZmZlcik7CisJCQlBc3NlcnRDaGVj a0l0ZW1Qb2ludGVycyhidWZmZXIsIHRydWUpOwogCiAJCQludHVwID0gX2dpbl9idWlsZF90 dXBsZShidWZmZXItPmF0dG51bSwgYnVmZmVyLT5jYXRlZ29yeSwKIAkJCQkJCQkJCWJ1ZmZl ci0+a2V5LCBidWZmZXItPnR5cGxlbiwgYnVmZmVyLT50eXBieXZhbCwKQEAgLTE1MjQsNyAr MTU2MiwxMCBAQCBfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVpbGRTdGF0ZSAqc3Rh dGUsIFR1cGxlc29ydHN0YXRlICp3b3JrZXJfc29ydCkKIAkJCUdpbkJ1ZmZlclJlc2V0KGJ1 ZmZlcik7CiAJCX0KIAotCQkvKiBub3cgcmVtZW1iZXIgdGhlIG5ldyBrZXkgKi8KKwkJLyoK KwkJICogUmVtZW1iZXIgZGF0YSBmb3IgdGhlIGN1cnJlbnQgdHVwbGUgKGVpdGhlciByZW1l bWJlciB0aGUgbmV3IGtleSwKKwkJICogb3IgYXBwZW5kIGlmIHRvIHRoZSBleGlzdGluZyBk YXRhKS4KKwkJICovCiAJCUdpbkJ1ZmZlclN0b3JlVHVwbGUoYnVmZmVyLCB0dXApOwogCX0K IApAQCAtMTUzNCw3ICsxNTc1LDcgQEAgX2dpbl9wcm9jZXNzX3dvcmtlcl9kYXRhKEdpbkJ1 aWxkU3RhdGUgKnN0YXRlLCBUdXBsZXNvcnRzdGF0ZSAqd29ya2VyX3NvcnQpCiAJCUdpblR1 cGxlICAgKm50dXA7CiAJCVNpemUJCW50dXBsZW47CiAKLQkJR2luQnVmZmVyU29ydEl0ZW1z KGJ1ZmZlcik7CisJCUFzc2VydENoZWNrSXRlbVBvaW50ZXJzKGJ1ZmZlciwgdHJ1ZSk7CiAK IAkJbnR1cCA9IF9naW5fYnVpbGRfdHVwbGUoYnVmZmVyLT5hdHRudW0sIGJ1ZmZlci0+Y2F0 ZWdvcnksCiAJCQkJCQkJCWJ1ZmZlci0+a2V5LCBidWZmZXItPnR5cGxlbiwgYnVmZmVyLT50 eXBieXZhbCwKQEAgLTE4MzUsNiArMTg3Niw3IEBAIF9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0 TnVtYmVyIGF0dHJudW0sIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksCiAJdHVwbGUtPmNhdGVn b3J5ID0gY2F0ZWdvcnk7CiAJdHVwbGUtPmtleWxlbiA9IGtleWxlbjsKIAl0dXBsZS0+bml0 ZW1zID0gbml0ZW1zOworCXR1cGxlLT5maXJzdCA9IGl0ZW1zWzBdOwogCiAJLyoga2V5IHR5 cGUgaW5mbyAqLwogCXR1cGxlLT50eXBsZW4gPSB0eXBsZW47CkBAIC0xOTE5LDYgKzE5NjEs MTIgQEAgX2dpbl9wYXJzZV90dXBsZShHaW5UdXBsZSAqYSwgSXRlbVBvaW50ZXJEYXRhICoq aXRlbXMpCiAgKiBhc3N1bXB0aW9uIHRoYXQgaWYgd2UgZ2V0IHR3byBrZXlzIHRoYXQgYXJl IHR3byBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zCiAgKiBvZiBhIGxvZ2ljYWxseSBlcXVh bCB2YWx1ZSwgaXQnbGwgZ2V0IG1lcmdlZCBieSB0aGUgaW5kZXggYnVpbGQuCiAgKgorICog SWYgdGhlIGtleSB2YWx1ZSBtYXRjaGVzLCB3ZSBjb21wYXJlIHRoZSBmaXJzdCBUSUQgdmFs dWUgaW4gdGhlIFRJRCBsaXN0LAorICogd2hpY2ggbWVhbnMgdGhlIHR1cGxlcyBhcmUgbWVy Z2VkIGluIGFuIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIG1vc3QKKyAqIGxpa2VseSB0byBi ZSBzaW1wbHkgY29uY2F0ZW5hdGVkLiAoVGhpcyAiZmlyc3QiIFRJRCB3aWxsIGFsc28gYWxs b3cgdXMKKyAqIHRvIGRldGVybWluZSBhIHBvaW50IHVwIHRvIHdoaWNoIHRoZSBsaXN0IGlz IGZ1bGx5IGRldGVybWluZWQgYW5kIGNhbiBiZQorICogd3JpdHRlbiBpbnRvIHRoZSBpbmRl eCB0byBlbmZvcmNlIGEgbWVtb3J5IGxpbWl0IGV0Yy4pCisgKgogICogRklYTUUgSXMgdGhl IGFzc3VtcHRpb24gd2UgY2FuIGp1c3QgbWVtY21wKCkgYWN0dWFsbHkgdmFsaWQ/IFdvbid0 IHRoaXMKICAqIHRyaWdnZXIgdGhlICJjb3VsZCBub3Qgc3BsaXQgR0lOIHBhZ2U7IGFsbCBv bGQgaXRlbXMgZGlkbid0IGZpdCIgZXJyb3IKICAqIHdoZW4gdHJ5aW5nIHRvIHVwZGF0ZSB0 aGUgVElEIGxpc3Q/CkBAIC0xOTUzLDE5ICsyMDAxLDI3IEBAIF9naW5fY29tcGFyZV90dXBs ZXMoR2luVHVwbGUgKmEsIEdpblR1cGxlICpiKQogCQkgKi8KIAkJaWYgKGEtPnR5cGJ5dmFs KQogCQl7Ci0JCQlyZXR1cm4gbWVtY21wKCZrZXlhLCAma2V5YiwgYS0+a2V5bGVuKTsKKwkJ CWludAkJCXIgPSBtZW1jbXAoJmtleWEsICZrZXliLCBhLT5rZXlsZW4pOworCisJCQkvKiBp ZiB0aGUga2V5IGlzIHRoZSBzYW1lLCBjb25zaWRlciB0aGUgZmlyc3QgVElEIGluIHRoZSBh cnJheSAqLworCQkJcmV0dXJuIChyICE9IDApID8gciA6IEl0ZW1Qb2ludGVyQ29tcGFyZSgm YS0+Zmlyc3QsICZiLT5maXJzdCk7CiAJCX0KIAkJZWxzZQogCQl7CisJCQlpbnQJCQlyOwor CiAJCQlpZiAoYS0+a2V5bGVuIDwgYi0+a2V5bGVuKQogCQkJCXJldHVybiAtMTsKIAogCQkJ aWYgKGEtPmtleWxlbiA+IGItPmtleWxlbikKIAkJCQlyZXR1cm4gMTsKIAotCQkJcmV0dXJu IG1lbWNtcChEYXR1bUdldFBvaW50ZXIoa2V5YSksIERhdHVtR2V0UG9pbnRlcihrZXliKSwg YS0+a2V5bGVuKTsKKwkJCXIgPSBtZW1jbXAoRGF0dW1HZXRQb2ludGVyKGtleWEpLCBEYXR1 bUdldFBvaW50ZXIoa2V5YiksIGEtPmtleWxlbik7CisKKwkJCS8qIGlmIHRoZSBrZXkgaXMg dGhlIHNhbWUsIGNvbnNpZGVyIHRoZSBmaXJzdCBUSUQgaW4gdGhlIGFycmF5ICovCisJCQly ZXR1cm4gKHIgIT0gMCkgPyByIDogSXRlbVBvaW50ZXJDb21wYXJlKCZhLT5maXJzdCwgJmIt PmZpcnN0KTsKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBJdGVtUG9pbnRlckNv bXBhcmUoJmEtPmZpcnN0LCAmYi0+Zmlyc3QpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpbl90dXBsZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl90dXBsZS5o CmluZGV4IDU2YWVkNDBmYjk2Li44ZWZhMzNhOGQzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpbl90dXBsZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5fdHVw bGUuaApAQCAtMTIsNiArMTIsMTMgQEAKIAogI2luY2x1ZGUgInN0b3JhZ2UvaXRlbXB0ci5o IgogCisvKgorICogRWFjaCB3b3JrZXIgc2VlcyB0dXBsZXMgaW4gQ1RJRCBvcmRlciwgc28g aWYgd2UgdHJhY2sgdGhlIGZpcnN0IFRJRCBhbmQKKyAqIGNvbXBhcmUgdGhhdCB3aGVuIGNv bWJpbmluZyByZXN1bHRzIGluIHRoZSB3b3JrZXIsIHdlIHdvdWxkIG5vdCBuZWVkIHRvCisg KiBkbyBhbiBleHBlbnNpdmUgc29ydCBpbiB3b3JrZXJzICh0aGUgbWVyZ2Vzb3J0IGlzIGFs cmVhZHkgc21hcnQgYWJvdXQKKyAqIGRldGVjdGluZyB0aGlzIGFuZCBqdXN0IGNvbmNhdGVu YXRpbmcgdGhlIGxpc3RzKS4gV2UnZCBzdGlsbCBuZWVkIHRoZQorICogZnVsbCBtZXJnZXNv cnQgaW4gdGhlIGxlYWRlciwgYnV0IHRoYXQncyBtdWNoIGNoZWFwZXIuCisgKi8KIHR5cGVk ZWYgc3RydWN0IEdpblR1cGxlCiB7CiAJU2l6ZQkJdHVwbGVuOwkJCS8qIGxlbmd0aCBvZiB0 aGUgd2hvbGUgdHVwbGUgKi8KQEAgLTIwLDYgKzI3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgR2lu VHVwbGUKIAlib29sCQl0eXBieXZhbDsJCS8qIHR5cGJ5dmFsIGZvciBrZXkgKi8KIAlPZmZz ZXROdW1iZXIgYXR0cm51bTsKIAlzaWduZWQgY2hhciBjYXRlZ29yeTsJCS8qIGNhdGVnb3J5 OiBub3JtYWwgb3IgTlVMTD8gKi8KKwlJdGVtUG9pbnRlckRhdGEgZmlyc3Q7CQkvKiBmaXJz dCBUSUQgaW4gdGhlIGFycmF5ICovCiAJaW50CQkJbml0ZW1zOwkJCS8qIG51bWJlciBvZiBU SURzIGluIHRoZSBkYXRhICovCiAJY2hhcgkJZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJd OwogfSBHaW5UdXBsZTsKLS0gCjIuNDQuMAoK --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0004-Compress-TID-lists-before-writing-tuples-t.patch" Content-Disposition: attachment; filename*0="v20240505-0004-Compress-TID-lists-before-writing-tuples-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwOGY4ZWNkN2EyMTM3MGNjNDUyYTYxODU3ODE0Mjg3MjlhZDU4MzMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjM5ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgNC84XSBDb21wcmVzcyBUSUQgbGlzdHMgYmVmb3JlIHdy aXRpbmcgdHVwbGVzIHRvCiBkaXNrCgpXaGVuIHNlcmlhbGl6aW5nIEdJTiB0dXBsZXMgdG8g dHVwbGVzb3J0cywgd2UgY2FuIHNpZ25pZmljYW50bHkgcmVkdWNlCnRoZSBhbW91bnQgb2Yg ZGF0YSBieSBjb21wcmVzc2luZyB0aGUgVElEIGxpc3RzLiBUaGUgR0lOIG9wY2xhc3NlcyBt YXkKcHJvZHVjZSBhIGxvdCBvZiBkYXRhIChkZXBlbmRpbmcgb24gaG93IG1hbnkga2V5cyBh cmUgZXh0cmFjdGVkIGZyb20KZWFjaCByb3cpLCBhbmQgdGhlIGNvbXByZXNzaW9uIGlzIHZl cnkgZWZmZWN0aXZlIGFuZCBlZmZpY2llbnQuCgpJZiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVu dCBrZXlzIGlzIGhpZ2gsIHRoZSBmaXJzdCB3b3JrZXIgcGFzcyBtYXkgbm90CmJlbmVmaXQg ZnJvbSB0aGUgY29tcHJlc3Npb24gdmVyeSBtdWNoIC0gdGhlIGRhdGEgd2lsbCBiZSBzcGls bGVkIHRvCmRpc2sgYmVmb3JlIHRoZSBUSUQgbGlzdHMgY2FuIGdyb3cgbG9uZyBlbm91Z2gg Zm9yIHRoZSBjb21wcmVzc2lvbiB0bwphY3R1YWx5IGhlbHAuIEluIHRoZSBzZWNvbmQgcGFz cyB0aGUgaW1wYWN0IGlzIG11Y2ggbW9yZSBzaWduaWZpY2FudC4KCkZvciByZWFsLXdvcmxk IGRhdGEgKGZ1bGwtdGV4dCBvbiBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMpLCBJIHVzdWFsbHkg c2VlCnRoZSBjb21wcmVzc2lvbiB0byBzYXZlIG9ubHkgYWJvdXQgfjE1JSBpbiB0aGUgZmly c3QgcGFzcywgYnV0IH41MCUgb24KdGhlIHNlY29uZCBwYXNzLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMgfCAxMTYgKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgfCAgIDEgKwogMiBm aWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYwppbmRleCBiMmI0NDA2NjMyOS4uYjg0ZmI4ZjEy YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYwpAQCAtMTg3LDcgKzE4Nyw5 IEBAIHN0YXRpYyB2b2lkIF9naW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoR2luQnVpbGRT dGF0ZSAqYnVpbGRzdGF0ZSwKIAkJCQkJCQkJCQkgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24g aW5kZXgsCiAJCQkJCQkJCQkJIGludCBzb3J0bWVtLCBib29sIHByb2dyZXNzKTsKIAotc3Rh dGljIERhdHVtIF9naW5fcGFyc2VfdHVwbGUoR2luVHVwbGUgKmEsIEl0ZW1Qb2ludGVyRGF0 YSAqKml0ZW1zKTsKK3N0YXRpYyBJdGVtUG9pbnRlciBfZ2luX3BhcnNlX3R1cGxlX2l0ZW1z KEdpblR1cGxlICphKTsKK3N0YXRpYyBEYXR1bSBfZ2luX3BhcnNlX3R1cGxlX2tleShHaW5U dXBsZSAqYSk7CisKIHN0YXRpYyBHaW5UdXBsZSAqX2dpbl9idWlsZF90dXBsZShPZmZzZXRO dW1iZXIgYXR0cm51bSwgdW5zaWduZWQgY2hhciBjYXRlZ29yeSwKIAkJCQkJCQkJICBEYXR1 bSBrZXksIGludDE2IHR5cGxlbiwgYm9vbCB0eXBieXZhbCwKIAkJCQkJCQkJICBJdGVtUG9p bnRlckRhdGEgKml0ZW1zLCB1aW50MzIgbml0ZW1zLApAQCAtMTI2NSw3ICsxMjY3LDggQEAg R2luQnVmZmVyU3RvcmVUdXBsZShHaW5CdWZmZXIgKmJ1ZmZlciwgR2luVHVwbGUgKnR1cCkK IAogCUFzc2VydENoZWNrR2luQnVmZmVyKGJ1ZmZlcik7CiAKLQlrZXkgPSBfZ2luX3BhcnNl X3R1cGxlKHR1cCwgJml0ZW1zKTsKKwlrZXkgPSBfZ2luX3BhcnNlX3R1cGxlX2tleSh0dXAp OworCWl0ZW1zID0gX2dpbl9wYXJzZV90dXBsZV9pdGVtcyh0dXApOwogCiAJLyogaWYgdGhl IGJ1ZmZlciBpcyBlbXB0eSwgc2V0IHRoZSBmaWVsZHMgKGFuZCBjb3B5IHRoZSBrZXkpICov CiAJaWYgKEdpbkJ1ZmZlcklzRW1wdHkoYnVmZmVyKSkKQEAgLTEzMDYsNiArMTMwOSw5IEBA IEdpbkJ1ZmZlclN0b3JlVHVwbGUoR2luQnVmZmVyICpidWZmZXIsIEdpblR1cGxlICp0dXAp CiAKIAkJQXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoYnVmZmVyLCB0cnVlKTsKIAl9CisKKwkv KiBmcmVlIHRoZSBkZWNvbXByZXNzZWQgVElEIGxpc3QgKi8KKwlwZnJlZShpdGVtcyk7CiB9 CiAKIC8qIFhYWCBwcm9iYWJseSB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIG1lbW9yeSBj b250ZXh0IGZvciB0aGUgYnVmZmVyICovCkBAIC0xODA2LDYgKzE4MTIsMTUgQEAgX2dpbl9w YXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYykKIAl0 YWJsZV9jbG9zZShoZWFwUmVsLCBoZWFwTG9ja21vZGUpOwogfQogCisvKgorICogVXNlZCB0 byBrZWVwIHRyYWNrIG9mIGNvbXByZXNzZWQgVElEIGxpc3RzIHdoZW4gYnVpbGRpbmcgYSBH SU4gdHVwbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJZGxpc3Rfbm9kZQlub2RlOwkJ CS8qIGxpbmtlZCBsaXN0IHBvaW50ZXJzICovCisJR2luUG9zdGluZ0xpc3QgKnNlZzsKK30g R2luU2VnbWVudEluZm87CisKIC8qCiAgKiBfZ2luX2J1aWxkX3R1cGxlCiAgKgkJU2VyaWFs aXplIHRoZSBzdGF0ZSBmb3IgYW4gaW5kZXgga2V5IGludG8gYSB0dXBsZSBmb3IgdHVwbGVz b3J0LgpAQCAtMTgxOCw2ICsxODMzLDExIEBAIF9naW5fcGFyYWxsZWxfYnVpbGRfbWFpbihk c21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCiAgKiBsaWtlIGVuZGlhbmVzcyBldGMu IFdlIGNvdWxkIG1ha2UgaXQgYSBsaXR0bGUgYml0IHNtYWxsZXIsIGJ1dCBpdCdzIG5vdAog ICogd29ydGggaXQgLSBpdCdzIGEgdGlueSBmcmFjdGlvbiBvZiB0aGUgZGF0YSwgYW5kIHdl IG5lZWQgdG8gTUFYQUxJR04gdGhlCiAgKiBzdGFydCBvZiB0aGUgVElEIGxpc3QgYW55d2F5 LiBTbyB3ZSB3b3VsZG4ndCBzYXZlIGFueXRoaW5nLgorICoKKyAqIFRoZSBUSUQgbGlzdCBp cyBzZXJpYWxpemVkIGFzIGNvbXByZXNzZWQgLSBpdCdzIGhpZ2hseSBjb21wcmVzc2libGUs IGFuZAorICogd2UgYWxyZWFkeSBoYXZlIGdpbkNvbXByZXNzUG9zdGluZ0xpc3QgZm9yIHRo aXMgcHVycG9zZS4gVGhlIGxpc3QgbWF5IGJlCisgKiBwcmV0dHkgbG9uZywgc28gd2UgY29t cHJlc3MgaXQgaW50byBtdWx0aXBsZSBzZWdtZW50cyBhbmQgdGhlbiBjb3B5IGFsbAorICog b2YgdGhhdCBpbnRvIHRoZSBHSU4gdHVwbGUuCiAgKi8KIHN0YXRpYyBHaW5UdXBsZSAqCiBf Z2luX2J1aWxkX3R1cGxlKE9mZnNldE51bWJlciBhdHRybnVtLCB1bnNpZ25lZCBjaGFyIGNh dGVnb3J5LApAQCAtMTgzMSw2ICsxODUxLDExIEBAIF9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0 TnVtYmVyIGF0dHJudW0sIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksCiAJU2l6ZQkJdHVwbGVu OwogCWludAkJCWtleWxlbjsKIAorCWRsaXN0X211dGFibGVfaXRlciBpdGVyOworCWRsaXN0 X2hlYWQJc2VnbWVudHM7CisJaW50CQkJbmNvbXByZXNzZWQ7CisJU2l6ZQkJY29tcHJlc3Ns ZW47CisKIAkvKgogCSAqIENhbGN1bGF0ZSBob3cgbG9uZyBpcyB0aGUga2V5IHZhbHVlLiBP bmx5IGtleXMgd2l0aCBHSU5fQ0FUX05PUk1fS0VZCiAJICogaGF2ZSBhY3R1YWwgbm9uLWVt cHR5IGtleS4gV2UgaW5jbHVkZSB2YXJsZW5hIGhlYWRlcnMgYW5kIFwwIGJ5dGVzIGZvcgpA QCAtMTg1NCwxMiArMTg3OSwzNCBAQCBfZ2luX2J1aWxkX3R1cGxlKE9mZnNldE51bWJlciBh dHRybnVtLCB1bnNpZ25lZCBjaGFyIGNhdGVnb3J5LAogCWVsc2UKIAkJZWxvZyhFUlJPUiwg ImludmFsaWQgdHlwbGVuIik7CiAKKwkvKiBjb21wcmVzcyB0aGUgaXRlbSBwb2ludGVycyAq LworCW5jb21wcmVzc2VkID0gMDsKKwljb21wcmVzc2xlbiA9IDA7CisJZGxpc3RfaW5pdCgm c2VnbWVudHMpOworCisJLyogZ2VuZXJhdGUgY29tcHJlc3NlZCBzZWdtZW50cyBvZiBUSUQg bGlzdCBjaHVua3MgKi8KKwl3aGlsZSAobmNvbXByZXNzZWQgPCBuaXRlbXMpCisJeworCQlp bnQJCQljbnQ7CisJCUdpblNlZ21lbnRJbmZvICpzZWdpbmZvID0gcGFsbG9jKHNpemVvZihH aW5TZWdtZW50SW5mbykpOworCisJCXNlZ2luZm8tPnNlZyA9IGdpbkNvbXByZXNzUG9zdGlu Z0xpc3QoJml0ZW1zW25jb21wcmVzc2VkXSwKKwkJCQkJCQkJCQkJICAobml0ZW1zIC0gbmNv bXByZXNzZWQpLAorCQkJCQkJCQkJCQkgIFVJTlQxNl9NQVgsCisJCQkJCQkJCQkJCSAgJmNu dCk7CisKKwkJbmNvbXByZXNzZWQgKz0gY250OworCQljb21wcmVzc2xlbiArPSBTaXplT2ZH aW5Qb3N0aW5nTGlzdChzZWdpbmZvLT5zZWcpOworCisJCWRsaXN0X3B1c2hfdGFpbCgmc2Vn bWVudHMsICZzZWdpbmZvLT5ub2RlKTsKKwl9CisKIAkvKgogCSAqIERldGVybWluZSBHSU4g dHVwbGUgbGVuZ3RoIHdpdGggYWxsIHRoZSBkYXRhIGluY2x1ZGVkLiBCZSBjYXJlZnVsIGFi b3V0Ci0JICogYWxpZ25tZW50LCB0byBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIGl0ZW0gcG9p bnRlcnMuCisJICogYWxpZ25tZW50LCB0byBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIGNvbXBy ZXNzZWQgc2VnbWVudHMgKHRob3NlIHJlcXVpcmUKKwkgKiBTSE9SVEFMSUdOLCBidXQgd2Ug ZG8gTUFYQUxJTkcgYW55d2F5KS4KIAkgKi8KLQl0dXBsZW4gPSBNQVhBTElHTihvZmZzZXRv ZihHaW5UdXBsZSwgZGF0YSkgKyBrZXlsZW4pICsKLQkJKHNpemVvZihJdGVtUG9pbnRlckRh dGEpICogbml0ZW1zKTsKKwl0dXBsZW4gPSBNQVhBTElHTihvZmZzZXRvZihHaW5UdXBsZSwg ZGF0YSkgKyBrZXlsZW4pICsgY29tcHJlc3NsZW47CiAKIAkqbGVuID0gdHVwbGVuOwogCkBA IC0xOTA5LDM3ICsxOTU2LDQwIEBAIF9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0TnVtYmVyIGF0 dHJudW0sIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksCiAJLyogZmluYWxseSwgY29weSB0aGUg VElEcyBpbnRvIHRoZSBhcnJheSAqLwogCXB0ciA9IChjaGFyICopIHR1cGxlICsgTUFYQUxJ R04ob2Zmc2V0b2YoR2luVHVwbGUsIGRhdGEpICsga2V5bGVuKTsKIAotCW1lbWNweShwdHIs IGl0ZW1zLCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIG5pdGVtcyk7CisJLyogY29weSBp biB0aGUgY29tcHJlc3NlZCBkYXRhLCBhbmQgZnJlZSB0aGUgc2VnbWVudHMgKi8KKwlkbGlz dF9mb3JlYWNoX21vZGlmeShpdGVyLCAmc2VnbWVudHMpCisJeworCQlHaW5TZWdtZW50SW5m byAqc2VnaW5mbyA9IGRsaXN0X2NvbnRhaW5lcihHaW5TZWdtZW50SW5mbywgbm9kZSwgaXRl ci5jdXIpOworCisJCW1lbWNweShwdHIsIHNlZ2luZm8tPnNlZywgU2l6ZU9mR2luUG9zdGlu Z0xpc3Qoc2VnaW5mby0+c2VnKSk7CisKKwkJcHRyICs9IFNpemVPZkdpblBvc3RpbmdMaXN0 KHNlZ2luZm8tPnNlZyk7CisKKwkJZGxpc3RfZGVsZXRlKCZzZWdpbmZvLT5ub2RlKTsKKwor CQlwZnJlZShzZWdpbmZvLT5zZWcpOworCQlwZnJlZShzZWdpbmZvKTsKKwl9CiAKIAlyZXR1 cm4gdHVwbGU7CiB9CiAKIC8qCi0gKiBfZ2luX3BhcnNlX3R1cGxlCi0gKgkJRGVzZXJpYWxp emUgdGhlIHR1cGxlIGZyb20gdGhlIHR1cGxlc3RvcmUgcmVwcmVzZW50YXRpb24uCisgKiBf Z2luX3BhcnNlX3R1cGxlX2tleQorICoJCVJldHVybiBhIERhdHVtIHJlcHJlc2VudGluZyB0 aGUga2V5IHN0b3JlZCBpbiB0aGUgdHVwbGUuCiAgKgotICogTW9zdCBvZiB0aGUgZmllbGRz IGFyZSBhY3R1YWxseSBkaXJlY3RseSBhY2Nlc3NpYmxlLCB0aGUgb25seSB0aGluZyB0aGF0 CisgKiBNb3N0IG9mIHRoZSB0dXBsZSBmaWVsZHMgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUs IHRoZSBvbmx5IHRoaW5nIHRoYXQKICAqIG5lZWRzIG1vcmUgY2FyZSBpcyB0aGUga2V5IGFu ZCB0aGUgVElEIGxpc3QuCiAgKgogICogRm9yIHRoZSBrZXksIHRoaXMgcmV0dXJucyBhIHJl Z3VsYXIgRGF0dW0gcmVwcmVzZW50aW5nIGl0LiBJdCdzIGVpdGhlciB0aGUKICAqIGFjdHVh bCBrZXkgdmFsdWUsIG9yIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRh IGFycmF5ICh3aGljaCBpcwogICogd2hlcmUgdGhlIGRhdGEgd2FzIGNvcGllZCBieSBfZ2lu X2J1aWxkX3R1cGxlKS4KLSAqCi0gKiBUaGUgcG9pbnRlciB0byB0aGUgVElEIGxpc3QgaXMg cmV0dXJuZWQgdGhyb3VnaCAnaXRlbXMnICh3aGljaCBpcyBzaW1wbHkKLSAqIGEgcG9pbnRl ciB0byB0aGUgZGF0YSBhcnJheSkuCiAgKi8KIHN0YXRpYyBEYXR1bQotX2dpbl9wYXJzZV90 dXBsZShHaW5UdXBsZSAqYSwgSXRlbVBvaW50ZXJEYXRhICoqaXRlbXMpCitfZ2luX3BhcnNl X3R1cGxlX2tleShHaW5UdXBsZSAqYSkKIHsKIAlEYXR1bQkJa2V5OwogCi0JaWYgKGl0ZW1z KQotCXsKLQkJY2hhcgkgICAqcHRyID0gKGNoYXIgKikgYSArIE1BWEFMSUdOKG9mZnNldG9m KEdpblR1cGxlLCBkYXRhKSArIGEtPmtleWxlbik7Ci0KLQkJKml0ZW1zID0gKEl0ZW1Qb2lu dGVyRGF0YSAqKSBwdHI7Ci0JfQotCiAJaWYgKGEtPmNhdGVnb3J5ICE9IEdJTl9DQVRfTk9S TV9LRVkpCiAJCXJldHVybiAoRGF0dW0pIDA7CiAKQEAgLTE5NTIsNiArMjAwMiwyOCBAQCBf Z2luX3BhcnNlX3R1cGxlKEdpblR1cGxlICphLCBJdGVtUG9pbnRlckRhdGEgKippdGVtcykK IAlyZXR1cm4gUG9pbnRlckdldERhdHVtKGEtPmRhdGEpOwogfQogCisvKgorKiBfZ2luX3Bh cnNlX3R1cGxlX2l0ZW1zCisgKgkJUmV0dXJuIGEgcG9pbnRlciB0byBhIHBhbGxvYydkIGFy cmF5IG9mIGRlY29tcHJlc3NlZCBUSUQgYXJyYXkuCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRl cgorX2dpbl9wYXJzZV90dXBsZV9pdGVtcyhHaW5UdXBsZSAqYSkKK3sKKwlpbnQJCQlsZW47 CisJY2hhcgkgICAqcHRyOworCWludAkJCW5kZWNvZGVkOworCUl0ZW1Qb2ludGVyIGl0ZW1z OworCisJbGVuID0gYS0+dHVwbGVuIC0gTUFYQUxJR04ob2Zmc2V0b2YoR2luVHVwbGUsIGRh dGEpICsgYS0+a2V5bGVuKTsKKwlwdHIgPSAoY2hhciAqKSBhICsgTUFYQUxJR04ob2Zmc2V0 b2YoR2luVHVwbGUsIGRhdGEpICsgYS0+a2V5bGVuKTsKKworCWl0ZW1zID0gZ2luUG9zdGlu Z0xpc3REZWNvZGVBbGxTZWdtZW50cygoR2luUG9zdGluZ0xpc3QgKikgcHRyLCBsZW4sICZu ZGVjb2RlZCk7CisKKwlBc3NlcnQobmRlY29kZWQgPT0gYS0+bml0ZW1zKTsKKworCXJldHVy biAoSXRlbVBvaW50ZXIpIGl0ZW1zOworfQorCiAvKgogICogX2dpbl9jb21wYXJlX3R1cGxl cwogICoJCUNvbXBhcmUgR0lOIHR1cGxlcywgdXNlZCBieSB0dXBsZXNvcnQgZHVyaW5nIHBh cmFsbGVsIGluZGV4IGJ1aWxkLgpAQCAtMTk5Miw4ICsyMDY0LDggQEAgX2dpbl9jb21wYXJl X3R1cGxlcyhHaW5UdXBsZSAqYSwgR2luVHVwbGUgKmIpCiAJaWYgKChhLT5jYXRlZ29yeSA9 PSBHSU5fQ0FUX05PUk1fS0VZKSAmJgogCQkoYi0+Y2F0ZWdvcnkgPT0gR0lOX0NBVF9OT1JN X0tFWSkpCiAJewotCQlrZXlhID0gX2dpbl9wYXJzZV90dXBsZShhLCBOVUxMKTsKLQkJa2V5 YiA9IF9naW5fcGFyc2VfdHVwbGUoYiwgTlVMTCk7CisJCWtleWEgPSBfZ2luX3BhcnNlX3R1 cGxlX2tleShhKTsKKwkJa2V5YiA9IF9naW5fcGFyc2VfdHVwbGVfa2V5KGIpOwogCiAJCS8q CiAJCSAqIHdvcmtzIGZvciBib3RoIGJ5dmFsIGFuZCBieXJlZiB0eXBlcyB3aXRoIGZpeGVk IGxlbmdodCwgYmVjYXVzZSBmb3IKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXgg OTc2OWY0ZDZiMDkuLjZiNjc3NTZlYmI5IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtMTAyMyw2ICsxMDIzLDcgQEAgR2luU2NhbkVudHJ5CiBHaW5TY2FuS2V5CiBHaW5T Y2FuT3BhcXVlCiBHaW5TY2FuT3BhcXVlRGF0YQorR2luU2VnbWVudEluZm8KIEdpblNoYXJl ZAogR2luU3RhdGUKIEdpblN0YXRzRGF0YQotLSAKMi40NC4wCgo= --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0005-Collect-and-print-compression-stats.patch" Content-Disposition: attachment; filename="v20240505-0005-Collect-and-print-compression-stats.patch" Content-Transfer-Encoding: base64 RnJvbSBlYWVmZTRlZDA3MDU0ZmQ0MzQyOGYwNmRlMzU0OTZhZWNiYmFkYjRhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjQzICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgNS84XSBDb2xsZWN0IGFuZCBwcmludCBjb21wcmVzc2lv biBzdGF0cwoKQWxsb3dzIGV2YWx1YXRpbmcgdGhlIGJlbmVmaXRzIG9mIGNvbXByZXNzaW5n IHRoZSBUSUQgbGlzdHMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQu YyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvYWNj ZXNzL2dpbi5oICAgICAgICAgICB8ICAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDMyIGluc2Vy dGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW5pbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0 LmMKaW5kZXggYjg0ZmI4ZjEyYjYuLjIyMDZjNDdkZmIxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luaW5zZXJ0LmMKQEAgLTE5MCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCBfZ2luX3Bh cmFsbGVsX3NjYW5fYW5kX2J1aWxkKEdpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsCiBzdGF0 aWMgSXRlbVBvaW50ZXIgX2dpbl9wYXJzZV90dXBsZV9pdGVtcyhHaW5UdXBsZSAqYSk7CiBz dGF0aWMgRGF0dW0gX2dpbl9wYXJzZV90dXBsZV9rZXkoR2luVHVwbGUgKmEpOwogCi1zdGF0 aWMgR2luVHVwbGUgKl9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0TnVtYmVyIGF0dHJudW0sIHVu c2lnbmVkIGNoYXIgY2F0ZWdvcnksCitzdGF0aWMgR2luVHVwbGUgKl9naW5fYnVpbGRfdHVw bGUoR2luQnVpbGRTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIGF0dHJu dW0sIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksCiAJCQkJCQkJCSAgRGF0dW0ga2V5LCBpbnQx NiB0eXBsZW4sIGJvb2wgdHlwYnl2YWwsCiAJCQkJCQkJCSAgSXRlbVBvaW50ZXJEYXRhICpp dGVtcywgdWludDMyIG5pdGVtcywKIAkJCQkJCQkJICBTaXplICpsZW4pOwpAQCAtNTM5LDcg KzU0MCw3IEBAIGdpbkJ1aWxkQ2FsbGJhY2tQYXJhbGxlbChSZWxhdGlvbiBpbmRleCwgSXRl bVBvaW50ZXIgdGlkLCBEYXR1bSAqdmFsdWVzLAogCQkJLyogdGhlcmUgY291bGQgYmUgbWFu eSBlbnRyaWVzLCBzbyBiZSB3aWxsaW5nIHRvIGFib3J0IGhlcmUgKi8KIAkJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAKLQkJCXR1cCA9IF9naW5fYnVpbGRfdHVwbGUoYXR0bnVtLCBj YXRlZ29yeSwKKwkJCXR1cCA9IF9naW5fYnVpbGRfdHVwbGUoYnVpbGRzdGF0ZSwgYXR0bnVt LCBjYXRlZ29yeSwKIAkJCQkJCQkJICAga2V5LCBhdHRyLT5hdHRsZW4sIGF0dHItPmF0dGJ5 dmFsLAogCQkJCQkJCQkgICBsaXN0LCBubGlzdCwgJnR1cGxlbik7CiAKQEAgLTE1MzAsNiAr MTUzMSwxNSBAQCBfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVpbGRTdGF0ZSAqc3Rh dGUsIFR1cGxlc29ydHN0YXRlICp3b3JrZXJfc29ydCkKIAkvKiBzb3J0IHRoZSByYXcgcGVy LXdvcmtlciBkYXRhICovCiAJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLT5ic193b3Jr ZXJfc29ydCk7CiAKKwkvKiBwcmludCBzb21lIGJhc2ljIGluZm8gKi8KKwllbG9nKExPRywg Il9naW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQgcmF3ICV6dSBjb21wcmVzc2VkICV6dSBy YXRpbyAlLjJmJSUiLAorCQkgc3RhdGUtPmJ1aWxkU3RhdHMuc2l6ZVJhdywgc3RhdGUtPmJ1 aWxkU3RhdHMuc2l6ZUNvbXByZXNzZWQsCisJCSAoMTAwLjAgKiBzdGF0ZS0+YnVpbGRTdGF0 cy5zaXplQ29tcHJlc3NlZCkgLyBzdGF0ZS0+YnVpbGRTdGF0cy5zaXplUmF3KTsKKworCS8q IHJlc2V0IGJlZm9yZSB0aGUgc2Vjb25kIHBoYXNlICovCisJc3RhdGUtPmJ1aWxkU3RhdHMu c2l6ZUNvbXByZXNzZWQgPSAwOworCXN0YXRlLT5idWlsZFN0YXRzLnNpemVSYXcgPSAwOwor CiAJLyoKIAkgKiBSZWFkIHRoZSBHSU4gdHVwbGVzIGZyb20gdGhlIHNoYXJlZCB0dXBsZXNv cnQsIHNvcnRlZCBieSB0aGUga2V5LCBhbmQKIAkgKiBtZXJnZSB0aGVtIGludG8gbGFyZ2Vy IGNodW5rcyBmb3IgdGhlIGxlYWRlciB0byBjb21iaW5lLgpAQCAtMTU1Niw3ICsxNTY2LDcg QEAgX2dpbl9wcm9jZXNzX3dvcmtlcl9kYXRhKEdpbkJ1aWxkU3RhdGUgKnN0YXRlLCBUdXBs ZXNvcnRzdGF0ZSAqd29ya2VyX3NvcnQpCiAJCQkgKi8KIAkJCUFzc2VydENoZWNrSXRlbVBv aW50ZXJzKGJ1ZmZlciwgdHJ1ZSk7CiAKLQkJCW50dXAgPSBfZ2luX2J1aWxkX3R1cGxlKGJ1 ZmZlci0+YXR0bnVtLCBidWZmZXItPmNhdGVnb3J5LAorCQkJbnR1cCA9IF9naW5fYnVpbGRf dHVwbGUoc3RhdGUsIGJ1ZmZlci0+YXR0bnVtLCBidWZmZXItPmNhdGVnb3J5LAogCQkJCQkJ CQkJYnVmZmVyLT5rZXksIGJ1ZmZlci0+dHlwbGVuLCBidWZmZXItPnR5cGJ5dmFsLAogCQkJ CQkJCQkJYnVmZmVyLT5pdGVtcywgYnVmZmVyLT5uaXRlbXMsICZudHVwbGVuKTsKIApAQCAt MTU4Myw3ICsxNTkzLDcgQEAgX2dpbl9wcm9jZXNzX3dvcmtlcl9kYXRhKEdpbkJ1aWxkU3Rh dGUgKnN0YXRlLCBUdXBsZXNvcnRzdGF0ZSAqd29ya2VyX3NvcnQpCiAKIAkJQXNzZXJ0Q2hl Y2tJdGVtUG9pbnRlcnMoYnVmZmVyLCB0cnVlKTsKIAotCQludHVwID0gX2dpbl9idWlsZF90 dXBsZShidWZmZXItPmF0dG51bSwgYnVmZmVyLT5jYXRlZ29yeSwKKwkJbnR1cCA9IF9naW5f YnVpbGRfdHVwbGUoc3RhdGUsIGJ1ZmZlci0+YXR0bnVtLCBidWZmZXItPmNhdGVnb3J5LAog CQkJCQkJCQlidWZmZXItPmtleSwgYnVmZmVyLT50eXBsZW4sIGJ1ZmZlci0+dHlwYnl2YWws CiAJCQkJCQkJCWJ1ZmZlci0+aXRlbXMsIGJ1ZmZlci0+bml0ZW1zLCAmbnR1cGxlbik7CiAK QEAgLTE1OTgsNiArMTYwOCwxMSBAQCBfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVp bGRTdGF0ZSAqc3RhdGUsIFR1cGxlc29ydHN0YXRlICp3b3JrZXJfc29ydCkKIAkvKiByZWxh c2UgYWxsIHRoZSBtZW1vcnkgKi8KIAlHaW5CdWZmZXJGcmVlKGJ1ZmZlcik7CiAKKwkvKiBw cmludCBzb21lIGJhc2ljIGluZm8gKi8KKwllbG9nKExPRywgIl9naW5fcHJvY2Vzc193b3Jr ZXJfZGF0YSByYXcgJXp1IGNvbXByZXNzZWQgJXp1IHJhdGlvICUuMmYlJSIsCisJCSBzdGF0 ZS0+YnVpbGRTdGF0cy5zaXplUmF3LCBzdGF0ZS0+YnVpbGRTdGF0cy5zaXplQ29tcHJlc3Nl ZCwKKwkJICgxMDAuMCAqIHN0YXRlLT5idWlsZFN0YXRzLnNpemVDb21wcmVzc2VkKSAvIHN0 YXRlLT5idWlsZFN0YXRzLnNpemVSYXcpOworCiAJdHVwbGVzb3J0X2VuZCh3b3JrZXJfc29y dCk7CiB9CiAKQEAgLTE2NjksNyArMTY4NCw3IEBAIF9naW5fcGFyYWxsZWxfc2Nhbl9hbmRf YnVpbGQoR2luQnVpbGRTdGF0ZSAqc3RhdGUsCiAJCQkvKiB0aGVyZSBjb3VsZCBiZSBtYW55 IGVudHJpZXMsIHNvIGJlIHdpbGxpbmcgdG8gYWJvcnQgaGVyZSAqLwogCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIAotCQkJdHVwID0gX2dpbl9idWlsZF90dXBsZShhdHRudW0sIGNh dGVnb3J5LAorCQkJdHVwID0gX2dpbl9idWlsZF90dXBsZShzdGF0ZSwgYXR0bnVtLCBjYXRl Z29yeSwKIAkJCQkJCQkJICAga2V5LCBhdHRyLT5hdHRsZW4sIGF0dHItPmF0dGJ5dmFsLAog CQkJCQkJCQkgICBsaXN0LCBubGlzdCwgJmxlbik7CiAKQEAgLTE3NjMsNiArMTc3OCw3IEBA IF9naW5fcGFyYWxsZWxfYnVpbGRfbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0 b2MpCiAJLyogaW5pdGlhbGl6ZSB0aGUgR0lOIGJ1aWxkIHN0YXRlICovCiAJaW5pdEdpblN0 YXRlKCZidWlsZHN0YXRlLmdpbnN0YXRlLCBpbmRleFJlbCk7CiAJYnVpbGRzdGF0ZS5pbmR0 dXBsZXMgPSAwOworCS8qIFhYWCBzaG91bGRuJ3QgdGhpcyBpbml0aWFsaXplIHRoZSBvdGhl ciBmaWVkbHMsIGxpa2UgZ2luYnVpbGQoKT8gKi8KIAltZW1zZXQoJmJ1aWxkc3RhdGUuYnVp bGRTdGF0cywgMCwgc2l6ZW9mKEdpblN0YXRzRGF0YSkpOwogCiAJLyoKQEAgLTE4NDAsNyAr MTg1Niw4IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBvZiB0aGF0IGludG8gdGhlIEdJTiB0dXBs ZS4KICAqLwogc3RhdGljIEdpblR1cGxlICoKLV9naW5fYnVpbGRfdHVwbGUoT2Zmc2V0TnVt YmVyIGF0dHJudW0sIHVuc2lnbmVkIGNoYXIgY2F0ZWdvcnksCitfZ2luX2J1aWxkX3R1cGxl KEdpbkJ1aWxkU3RhdGUgKnN0YXRlLAorCQkJCSBPZmZzZXROdW1iZXIgYXR0cm51bSwgdW5z aWduZWQgY2hhciBjYXRlZ29yeSwKIAkJCQkgRGF0dW0ga2V5LCBpbnQxNiB0eXBsZW4sIGJv b2wgdHlwYnl2YWwsCiAJCQkJIEl0ZW1Qb2ludGVyRGF0YSAqaXRlbXMsIHVpbnQzMiBuaXRl bXMsCiAJCQkJIFNpemUgKmxlbikKQEAgLTE5NzEsNiArMTk4OCwxMyBAQCBfZ2luX2J1aWxk X3R1cGxlKE9mZnNldE51bWJlciBhdHRybnVtLCB1bnNpZ25lZCBjaGFyIGNhdGVnb3J5LAog CQlwZnJlZShzZWdpbmZvKTsKIAl9CiAKKwkvKiBob3cgbGFyZ2Ugd291bGQgdGhlIHR1cGxl IGJlIHdpdGhvdXQgY29tcHJlc3Npb24/ICovCisJc3RhdGUtPmJ1aWxkU3RhdHMuc2l6ZVJh dyArPSBNQVhBTElHTihvZmZzZXRvZihHaW5UdXBsZSwgZGF0YSkgKyBrZXlsZW4pICsKKwkJ bml0ZW1zICogc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSk7CisKKwkvKiBjb21wcmVzc2VkIHNp emUgKi8KKwlzdGF0ZS0+YnVpbGRTdGF0cy5zaXplQ29tcHJlc3NlZCArPSB0dXBsZW47CisK IAlyZXR1cm4gdHVwbGU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAppbmRleCBiZTc2ZDg0NDZmNC4uMmI2 NjMzZDA2OGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmgKQEAgLTQ5LDYgKzQ5LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgR2luU3RhdHNEYXRhCiAJQmxvY2tOdW1iZXIgbkRhdGFQYWdlczsKIAlpbnQ2NAkJbkVu dHJpZXM7CiAJaW50MzIJCWdpblZlcnNpb247CisJU2l6ZQkJc2l6ZVJhdzsKKwlTaXplCQlz aXplQ29tcHJlc3NlZDsKIH0gR2luU3RhdHNEYXRhOwogCiAvKgotLSAKMi40NC4wCgo= --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0006-Enforce-memory-limit-when-combining-tuples.patch" Content-Disposition: attachment; filename*0="v20240505-0006-Enforce-memory-limit-when-combining-tuples.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmYjE0ZDhmODYyNzZkYzA4YmVjMmU5M2MzMTkxODMyNjEzYTZkNTZhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjQ5ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgNi84XSBFbmZvcmNlIG1lbW9yeSBsaW1pdCB3aGVuIGNv bWJpbmluZyB0dXBsZXMKCldoZW4gY29tYmlubmlnIGludGVybWVkaWF0ZSByZXN1bHRzIGR1 cmluZyBwYXJhbGxlbCBHSU4gaW5kZXggYnVpbGQsIHdlCndhbnQgdG8gcmVzdHJpY3QgdGhl IG1lbW9yeSB1c2FnZS4gSW4gZ2luQnVpbGRDYWxsYmFja1BhcmFsbGVsKCkgdGhpcyBpcwpk b25lIHNpbXBseSBieSBkdW1waW5nIHdvcmtpbmcgc3RhdGUgaW50byB0dXBsZXNvcnQgYWZ0 ZXIgaGl0dGluZyB0aGUKbWVtb3J5IGxpbWl0LgoKVGhpcyBjb21taXQgaW50cm9kdWNlcyBt ZW1vcnkgbGltaXQgdG8gdGhlIGZvbGxvd2luZyBzdGVwcywgbWVyZ2luZyB0aGUKaW50ZXJt ZWRpYXRlIHJlc3VsdHMgaW4gYm90aCB3b3JrZXIgYW5kIGxlYWRlci4gVGhlIG1lcmdlIG9u bHkgZGVhbHMKd2l0aCBvbmUga2V5IGF0IGEgdGltZSwgYW5kIHRoZSBwcmltYXJ5IHJpc2sg aXMgdGhlIGtleSBtaWdodCBoYXZlIHRvbwptYW55IGRpZmZlcmVudCBUSURzLiBUaGlzIGlz IG5vdCB2ZXJ5IGxpa2VseSwgYmVjYXVzZSB0aGUgVElEIGFycmF5IG9ubHkKbmVlZHMgNkIg cGVyIGl0ZW0sIGl0J3MgYSBwb3RlbnRpYWwgaXNzdWUuCgpXZSBjYW4ndCBzaW1wbHkgZHVt cCB0aGUgd2hvbGUgY3VycmVudCBUSUQgbGlzdCAtIHRoZSBpbmRleCByZXF1aXJlcyB0aGUK VElEIHZhbHVlcyB0byBiZSBpbnNlcnRlZCBpbiB0aGUgY29ycmVjdCBvcmRlciwgYnV0IGlm IHRoZSBsaXN0cyBvdmVybGFwCihhcyB0aGV5IGRvIGJldHdlZW4gd29ya2VycyksIHRoZSB0 YWlsIG9mIHRoZSBsaXN0IG1heSBjaGFuZ2UgZHVyaW5nIHRoZQptZXJnZXNvcnQuIEJ1dCB0 aGFua3MgdG8gc29ydGluZyBHSU4gdHVwbGVzIGJ5IGZpcnN0IFRJRCwgd2UgY2FuIGRlcml2 ZQphIHNhZmUgVElEIGhvcml6b24gLSB3ZSBrbm93IG5vIGZ1dHVyZSB0dXBsZXMgd2lsbCBo YXZlIFRJRHMgZnJvbSBiZWZvcmUKdGhpcyB2YWx1ZSwgc28gaXQncyBzYWZlIHRvIG91dHB1 dCB0aGlzIHBhcnQgb2YgdGhlIGxpc3QuCgpUaGlzIGNvbW1pdCB0cmFja3MgImZyb3plbiIg cGFydCBvZiB0aGUgdGhlIFRJRCBsaXN0LCB3aGljaCBpcyB0aGUgcGFydAp3ZSBrbm93IHdv bid0IGNoYW5nZSBhZnRlciBtZXJnaW5nIGFkZGl0aW9uYWwgVElEIGxpc3RzLiBUaGVuIGlm IHRoZSBUSUQKbGlzdCBncm93cyB0b28gbGFyZ2UgKG1vcmUgdGhhbiA2NGtCKSwgd2UgdHJ5 IHRvIHRyaW0gaXQgLSB3cml0ZSBvdXQgdGhlCmZyb3plbiBwYXJ0IG9mIHRoZSBsaXN0LCBh bmQgZGlzY2FyZCBpdCBmcm9tIHRoZSBidWZmZXIuIFdlIG9ubHkgZG8gdGhlCnRyaW1taW5n IGlmIHRoZXJlJ3MgYXQgbGVhc3QgMTAyNCBmcm96ZW4gaXRlbXMgLSB3ZSBkb24ndCB3YW50 IHRvIHdyaXRlCnRoZSBkYXRhIGludG8gdGhlIGluZGV4IGluIHRpbnkgY2h1bmtzLgoKVGhl IGZyZWV6aW5nIGFsc28gYWxsb3dzIHVzIHRvIHNraXAgdGhlIGZyb3plbiBwYXJ0IGR1cmlu ZyBtZXJnZXNvcnQuClRoZSBmcm96ZW4gcGFydCBvZiB0aGUgbGlzdCBpcyBrbm93biB0byBi ZSBmdWxseSBzb3J0ZWQsIHNvIHdlIGNhbiBqdXN0CnNraXAgaXQgYW5kIG1lcmdlc29ydCBv bmx5IHRoZSByZXN0IG9mIHRoZSBkYXRhLgoKTm90ZTogVGhlc2UgbGltaXRlcyAoMTAyNCBh bmQgNjRrQikgYXJlIG1vc3RseSBhcmJpdHJhcnkgLSBidXQgc2VlbSBoaWdoCmVub3VnaCB0 byBnZXQgZ29vZCBlZmZpY2llbmN5IGZvciBjb21wcmVzc2lvbi9iYXRjaGluZywgYnV0IGxv dyBlbm91Z2gKdG8gcmVsZWFzZSBtZW1vcnkgZWFybHkgYW5kIHdvcmsgaW4gc21hbGwgaW5j cmVtZW50cy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jIHwgMjQ1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lu LmggICAgICAgICAgIHwgICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMjM3IGluc2VydGlvbnMo KyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW5pbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKaW5k ZXggMjIwNmM0N2RmYjEuLmY0YTRiOGYwMGU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbmluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu aW5zZXJ0LmMKQEAgLTExMzAsOCArMTEzMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBHaW5CdWZm ZXIKIAlpbnQxNgkJdHlwbGVuOwogCWJvb2wJCXR5cGJ5dmFsOwogCisJLyogTnVtYmVyIG9m IFRJRHMgdG8gY29sbGVjdCBiZWZvcmUgYXR0ZW1wdCB0byB3cml0ZSBzb21lIG91dC4gKi8K KwlpbnQJCQltYXhpdGVtczsKKwogCS8qIGFycmF5IG9mIFRJRCB2YWx1ZXMgKi8KIAlpbnQJ CQluaXRlbXM7CisJaW50CQkJbmZyb3plbjsKIAlJdGVtUG9pbnRlckRhdGEgKml0ZW1zOwog fSBHaW5CdWZmZXI7CiAKQEAgLTExNjYsNyArMTE3MCwyMSBAQCBBc3NlcnRDaGVja0l0ZW1Q b2ludGVycyhHaW5CdWZmZXIgKmJ1ZmZlciwgYm9vbCBzb3J0ZWQpCiBzdGF0aWMgR2luQnVm ZmVyICoKIEdpbkJ1ZmZlckluaXQodm9pZCkKIHsKLQlyZXR1cm4gcGFsbG9jMChzaXplb2Yo R2luQnVmZmVyKSk7CisJR2luQnVmZmVyICAqYnVmZmVyID0gKEdpbkJ1ZmZlciAqKSBwYWxs b2MwKHNpemVvZihHaW5CdWZmZXIpKTsKKworCS8qCisJICogSG93IG1hbnkgaXRlbXMgY2Fu IHdlIGZpdCBpbnRvIHRoZSBtZW1vcnkgbGltaXQ/IDY0a0Igc2VlbXMgbW9yZSB0aGFuCisJ ICogZW5vdWdoIGFuZCB3ZSBkb24ndCB3YW50IGEgbGltaXQgdGhhdCdzIHRvbyBoaWdoLiBP VE9IIG1heWJlIHRoaXMKKwkgKiBzaG91bGQgYmUgdGllZCB0byBtYWludGVuYW5jZV93b3Jr X21lbSBvciBzb21ldGhpbmcgbGlrZSB0aGF0PworCSAqCisJICogWFhYIFRoaXMgaXMgbm90 IGVub3VnaCB0byBwcmV2ZW50IHJlcGVhdGVkIG1lcmdlcyBhZnRlciBhIHdyYXBhcm91bmQs CisJICogYnV0IGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gbWFrZSB0aGUgbWVyZ2VzIGNoZWFw IGJlY2F1c2UgaXQgcXVpY2tseQorCSAqIGZpbmRzIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUg c2Vjb25kIGxpc3QgYW5kIGNhbiBqdXN0IG1lbWNweSB0aGUgcmVzdAorCSAqIHdpdGhvdXQg d2Fsa2luZyBpdCBpdGVtIGJ5IGl0ZW0uCisJICovCisJYnVmZmVyLT5tYXhpdGVtcyA9ICg2 NCAqIDEwMjRMKSAvIHNpemVvZihJdGVtUG9pbnRlckRhdGEpOworCisJcmV0dXJuIGJ1ZmZl cjsKIH0KIAogc3RhdGljIGJvb2wKQEAgLTEyMjEsNiArMTIzOSw1NCBAQCBHaW5CdWZmZXJL ZXlFcXVhbHMoR2luQnVmZmVyICpidWZmZXIsIEdpblR1cGxlICp0dXApCiAJcmV0dXJuICht ZW1jbXAodHVwLT5kYXRhLCBEYXR1bUdldFBvaW50ZXIoYnVmZmVyLT5rZXkpLCBidWZmZXIt PmtleWxlbikgPT0gMCk7CiB9CiAKKy8qCisgKiBHaW5CdWZmZXJTaG91bGRUcmltCisgKgkJ U2hvdWxkIHdlIHRyaW0gdGhlIGxpc3Qgb2YgaXRlbSBwb2ludGVycz8KKyAqCisgKiBCeSB0 cmltbWluZyB3ZSB1bmRlcnN0YW5kIHdyaXRpbmcgb3V0IGFuZCByZW1vdmluZyB0aGUgdHVw bGUgSURzIHRoYXQKKyAqIHdlIGtub3cgY2FuJ3QgY2hhbmdlIGJ5IGZ1dHVyZSBtZXJnZXMu IFdlIGNhbiBkZWR1Y2UgdGhlIFRJRCB1cCB0byB3aGljaAorICogdGhpcyBpcyBndWFyYW50 ZWVkIGZyb20gdGhlICJmaXJzdCIgVElEIGluIGVhY2ggR0lOIHR1cGxlLCB3aGljaCBwcm92 aWRlcworICogYSAiaG9yaXpvbiIgKGZvciBhIGdpdmVuIGtleSkgdGhhbmtzIHRvIHRoZSBz b3J0LgorICoKKyAqIFdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcyB0b28gb2Z0ZW4gLSBjb21w cmVzc2luZyBsb25nZXIgVElEIGxpc3RzIGlzIG1vcmUKKyAqIGVmZmljaWVudC4gQnV0IHdl IGFsc28gZG9uJ3Qgd2FudCB0byBhY2N1bXVsYXRlIHRvbyBtYW55IFRJRHMsIGZvciB0d28K KyAqIHJlYXNvbnMuIEZpcnN0LCBpdCBjb25zdW1lcyBtZW1vcnkgYW5kIHdlIG1pZ2h0IGV4 Y2VlZCBtYWludGVuYW5jZV93b3JrX21lbQorICogKG9yIHdoYXRldmVyIGxpbWl0IGFwcGxp ZXMpLCBldmVuIGlmIHRoYXQncyB1bmxpa2VseSBiZWNhdXNlIFRJRHMgYXJlIHZlcnkKKyAq IHNtYWxsIHNvIHdlIGNhbiBmaXQgYSBsb3Qgb2YgdGhlbS4gU2Vjb25kLCBhbmQgbW9yZSBp bXBvcnRhbnRseSwgbG9uZyBUSUQKKyAqIGxpc3RzIGFyZSBhbiBpc3N1ZSBpZiB0aGUgc2Nh biB3cmFwcyBhcm91bmQsIGJlY2F1c2UgYSBrZXkgbWF5IGdldCBhIHZlcnkKKyAqIHdpZGUg bGlzdCAod2l0aCBtaW4vbWF4IFRJRCBmb3IgdGhhdCBrZXkpLCBmb3JjaW5nICJmdWxsIiBt ZXJnZXNvcnRzIGZvcgorICogZXZlcnkgbGlzdCBtZXJnZWQgaW50byBpdCAoaW5zdGVhZCBv ZiB0aGUgZWZmaWNpZW50IGFwcGVuZCkuCisgKgorICogU28gd2UgbG9vayBhdCB0d28gdGhp bmdzIHdoZW4gZGVjaWRpbmcgaWYgdG8gdHJpbSAtIGlmIHRoZSByZXN1bHRpbmcgbGlzdAor ICogKGFmdGVyIGFkZGluZyBUSURzIGZyb20gdGhlIG5ldyB0dXBsZSkgd291bGQgYmUgdG9v IGxvbmcsIGFuZCBpZiB0aGVyZSBpcworICogZW5vdWdoIFRJRHMgdG8gdHJpbSAod2l0aCB2 YWx1ZXMgbGVzcyB0aGFuICJmaXJzdCIgVElEIGZyb20gdGhlIG5ldyB0dXBsZSksCisgKiB3 ZSBkbyB0aGUgdHJpbS4gQnkgZW5vdWdoIHdlIG1lYW4gYXQgbGVhc3QgMTI4IFRJRHMgKG1v c3RseSBhbiBhcmJpdHJhcnkKKyAqIG51bWJlcikuCisgKgorICogWFhYIFRoaXMgZG9lcyBo ZWxwIGZvciB0aGUgd3JhcCBhcm91bmQgY2FzZSwgYmVjYXVzZSB0aGUgIndpZGUiIFRJRCBs aXN0CisgKiBpcyBlc3NlbnRpYWxseSB0d28gcmFuZ2VzIC0gb25lIGF0IHRoZSBiZWdpbm5p bmcgb2YgdGhlIHRhYmxlLCBvbmUgYXQgdGhlCisgKiBlbmQuIEFuZCBhbGwgdGhlIG90aGVy IHJhbmdlcyAoZnJvbSBHSU4gdHVwbGVzKSBjb21lIGluIGJldHdlZW4sIGFuZCBhbHNvCisg KiBkbyBub3Qgb3ZlcmxhcC4gU28gYnkgdHJpbW1pbmcgdXAgdG8gdGhlIHJhbmdlIHdlJ3Jl IGFib3V0IHRvIGFkZCwgdGhpcworICogZ3VhcmFudGVlcyB3ZSdsbCBiZSBhYmxlIHRvICJj b25jYXRlbmF0ZSIgdGhlIHR3byBsaXN0cyBjaGVhcGx5LgorICovCitzdGF0aWMgYm9vbAor R2luQnVmZmVyU2hvdWxkVHJpbShHaW5CdWZmZXIgKmJ1ZmZlciwgR2luVHVwbGUgKnR1cCkK K3sKKwkvKiBub3QgZW5vdWdoIFRJRHMgdG8gdHJpbSAoMTAyNCBpcyBzb21ld2hhdCBhcmJp dHJhcnkgbnVtYmVyKSAqLworCWlmIChidWZmZXItPm5mcm96ZW4gPCAxMDI0KQorCQlyZXR1 cm4gZmFsc2U7CisKKwkvKiBXZSdyZSBub3QgdG8gaGl0IHRoZSBtZW1vcnkgbGltaXQgYWZ0 ZXIgYWRkaW5nIHRoaXMgdHVwbGUuICovCisJaWYgKChidWZmZXItPm5pdGVtcyArIHR1cC0+ bml0ZW1zKSA8IGJ1ZmZlci0+bWF4aXRlbXMpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJ ICogT0ssIHdlIGhhdmUgZW5vdWdoIGZyb3plbiBUSURzIHRvIGZsdXNoLCBhbmQgd2UgaGF2 ZSBoaXQgdGhlIG1lbW9yeQorCSAqIGxpbWl0LCBzbyBpdCdzIHRpbWUgdG8gd3JpdGUgaXQg b3V0LgorCSAqLworCXJldHVybiB0cnVlOworfQorCiAvKgogICogR2luQnVmZmVyU3RvcmVU dXBsZQogICoJCUFkZCBkYXRhIGZyb20gYSBHaW5UdXBsZSBpbnRvIHRoZSBHaW5CdWZmZXIu CkBAIC0xMjU5LDYgKzEzMjUsMTEgQEAgR2luQnVmZmVyS2V5RXF1YWxzKEdpbkJ1ZmZlciAq YnVmZmVyLCBHaW5UdXBsZSAqdHVwKQogICogb25jZSwgc28gdGhlcmUncyBnb2luZyB0byBi ZSBvbmx5IHN1Y2ggd2lkZSBsaXN0LCBhbmQgaXQnbGwgYmUgc29ydGVkCiAgKiBmaXJzdCAo YmVjYXVzZSBpdCBoYXMgdGhlIGxvd2VzdCBUSUQgZm9yIHRoZSBrZXkpLiBTbyB3ZSdkIGRv IHRoaXMgYXQKICAqIG1vc3Qgb25jZSBwZXIga2V5LgorICoKKyAqIFhYWCBNYXliZSB3ZSBj b3VsZC9zaG91bGQgYWxsb2NhdGUgdGhlIGJ1ZmZlciBvbmNlIGFuZCB0aGVuIGtlZXAgaXQK KyAqIHdpdGhvdXQgcGFsbG9jL3BmcmVlLiBUaGF0IHdvbid0IGhlbHAgd2hlbiBqdXN0IGNh bGxpbmcgdGhlIG1lcmdlc29ydCwKKyAqIGFzIHRoYXQgZG9lcyBwYWxsb2MgaW50ZXJuYWxs eSwgYnV0IGlmIHdlIGRldGVjdGVkIHRoZSBhcHBlbmQgY2FzZSwKKyAqIHdlIGNvdWxkIGRv IHdpdGhvdXQgaXQuIE5vdCBzdXJlIGhvdyBtdWNoIG92ZXJoZWFkIGl0IGlzLCB0aG91Z2gu CiAgKi8KIHN0YXRpYyB2b2lkCiBHaW5CdWZmZXJTdG9yZVR1cGxlKEdpbkJ1ZmZlciAqYnVm ZmVyLCBHaW5UdXBsZSAqdHVwKQpAQCAtMTI4NywyNiArMTM1OCw4MiBAQCBHaW5CdWZmZXJT dG9yZVR1cGxlKEdpbkJ1ZmZlciAqYnVmZmVyLCBHaW5UdXBsZSAqdHVwKQogCQkJYnVmZmVy LT5rZXkgPSAoRGF0dW0pIDA7CiAJfQogCisJLyoKKwkgKiBUcnkgZnJlZXplIFRJRHMgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCwgaS5lLiBleGNsdWRlIHRoZW0gZnJvbQorCSAq IHRoZSBtZXJnZXNvcnQuIFdlIGNhbiBkbyB0aGF0IHdpdGggVElEcyBiZWZvcmUgdGhlIGZp cnN0IFRJRCBpbiB0aGUgbmV3CisJICogdHVwbGUgd2UncmUgYWJvdXQgdG8gYWRkIGludG8g dGhlIGJ1ZmZlci4KKwkgKgorCSAqIFdlIGRvIHRoaXMgaW5jcmVtZW50YWxseSB3aGVuIGFk ZGluZyBkYXRhIGludG8gdGhlIGluLW1lbW9yeSBidWZmZXIsCisJICogYW5kIG5vdCBsYXRl ciAoZS5nLiB3aGVuIGhpdHRpbmcgYSBtZW1vcnkgbGltaXQpLCBiZWNhdXNlIGl0IGFsbG93 cyB1cworCSAqIHRvIHNraXAgdGhlIGZyb3plbiBkYXRhIGR1cmluZyB0aGUgbWVyZ2Vzb3J0 LCBtYWtpbmcgaXQgY2hlYXBlci4KKwkgKi8KKworCS8qCisJICogQ2hlY2sgaWYgdGhlIGxh c3QgVElEIGluIHRoZSBjdXJyZW50IGxpc3QgaXMgZnJvemVuLiBUaGlzIGlzIHRoZSBjYXNl CisJICogd2hlbiBtZXJnaW5nIG5vbi1vdmVybGFwcGluZyBsaXN0cywgZS5nLiBpbiBlYWNo IHBhcmFsbGVsIHdvcmtlci4KKwkgKi8KKwlpZiAoKGJ1ZmZlci0+bml0ZW1zID4gMCkgJiYK KwkJKEl0ZW1Qb2ludGVyQ29tcGFyZSgmYnVmZmVyLT5pdGVtc1tidWZmZXItPm5pdGVtcyAt IDFdLCAmdHVwLT5maXJzdCkgPT0gMCkpCisJCWJ1ZmZlci0+bmZyb3plbiA9IGJ1ZmZlci0+ bml0ZW1zOworCisJLyoKKwkgKiBOb3cgc2VhcmNoIHRoZSBsaXN0IGxpbmVhcmx5LCB0byBm aW5kIHRoZSBsYXN0IGZyb3plbiBUSUQuIElmIHdlIGZvdW5kCisJICogdGhlIHdob2xlIGxp c3QgaXMgZnJvemVuLCB0aGlzIGp1c3QgZG9lcyBub3RoaW5nLgorCSAqCisJICogU3RhcnQg d2l0aCB0aGUgZmlyc3Qgbm90LXlldC1mcm96ZW4gdHVwbGUsIGFuZCB3YWxrIHVudGlsIHdl IGZpbmQgdGhlCisJICogZmlyc3QgVElEIHRoYXQncyBoaWdoZXIuCisJICoKKwkgKiBYWFgg TWF5YmUgdGhpcyBzaG91bGQgZG8gYSBiaW5hcnkgc2VhcmNoIGlmIHRoZSBudW1iZXIgb2Yg Im5vbi1mcm96ZW4iCisJICogaXRlbXMgaXMgc3VmZmljaWVudGx5IGhpZ2ggKGVub3VnaCB0 byBtYWtlIGxpbmVhciBzZWFyY2ggc2xvd2VyIHRoYW4KKwkgKiBiaW5zZWFyY2gpLgorCSAq LworCWZvciAoaW50IGkgPSBidWZmZXItPm5mcm96ZW47IGkgPCBidWZmZXItPm5pdGVtczsg aSsrKQorCXsKKwkJLyogSXMgdGhlIFRJRCBhZnRlciB0aGUgZmlyc3QgVElEIG9mIHRoZSBu ZXcgdHVwbGU/IENhbid0IGZyZWV6ZS4gKi8KKwkJaWYgKEl0ZW1Qb2ludGVyQ29tcGFyZSgm YnVmZmVyLT5pdGVtc1tpXSwgJnR1cC0+Zmlyc3QpID4gMCkKKwkJCWJyZWFrOworCisJCWJ1 ZmZlci0+bmZyb3plbisrOworCX0KKwogCS8qCiAJICogQ29weSB0aGUgbmV3IFRJRHMgaW50 byB0aGUgYnVmZmVyLCBjb21iaW5lIHdpdGggZXhpc3RpbmcgZGF0YSAoaWYgYW55KQogCSAq IHVzaW5nIG1lcmdlLXNvcnQuIFRoZSBtZXJnZXNvcnQgaXMgYWxyZWFkeSBzbWFydCBhYm91 dCBjYXNlcyB3aGVyZSBpdAogCSAqIGNhbiBzaW1wbHkgY29uY2F0ZW5hdGUgdGhlIHR3byBs aXN0cywgYW5kIHdoZW4gaXQgYWN0dWFsbHkgbmVlZHMgdG8KIAkgKiBtZXJnZSB0aGUgZGF0 YSBpbiBhbiBleHBlbnNpdmUgd2F5LgorCSAqCisJICogWFhYIFdlIGNvdWxkIGNoZWNrIGlm IChidWZmZXItPm5pdGVtcyA+IGJ1ZmZlci0+bmZyb3plbikgYW5kIG9ubHkgZG8KKwkgKiB0 aGUgbWVyZ2Vzb3J0IGluIHRoYXQgY2FzZS4gZ2luTWVyZ2VJdGVtUG9pbnRlcnMgZG9lcyBz b21lIHBhbGxvYworCSAqIGludGVybmFsbHksIGFuZCB0aGlzIHdheSB3ZSBjb3VsZCBlbGlt aW5hdGUgdGhhdC4gQnV0IGxldCdzIGtlZXAgdGhlCisJICogY29kZSBzaW1wbGUgZm9yIG5v dy4KIAkgKi8KIAl7CiAJCWludAkJCW5uZXc7CiAJCUl0ZW1Qb2ludGVyIG5ldzsKIAotCQlu ZXcgPSBnaW5NZXJnZUl0ZW1Qb2ludGVycyhidWZmZXItPml0ZW1zLCBidWZmZXItPm5pdGVt cywKKwkJLyoKKwkJICogUmVzaXplIHRoZSBhcnJheSAtIHdlIGRvIHRoaXMgZmlyc3QsIGJl Y2F1c2Ugd2UnbGwgZGVyZWZlcmVuY2UgdGhlCisJCSAqIGZpcnN0IHVuZnJvemVuIFRJRCwg d2hpY2ggd291bGQgZmFpbCBpZiB0aGUgYXJyYXkgaXMgTlVMTC4gV2UnbGwKKwkJICogc3Rp bGwgcGFzcyAwIGFzIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGF0IGFycmF5IHRob3VnaC4K KwkJICovCisJCWlmIChidWZmZXItPml0ZW1zID09IE5VTEwpCisJCQlidWZmZXItPml0ZW1z ID0gcGFsbG9jKChidWZmZXItPm5pdGVtcyArIHR1cC0+bml0ZW1zKSAqIHNpemVvZihJdGVt UG9pbnRlckRhdGEpKTsKKwkJZWxzZQorCQkJYnVmZmVyLT5pdGVtcyA9IHJlcGFsbG9jKGJ1 ZmZlci0+aXRlbXMsCisJCQkJCQkJCQkgKGJ1ZmZlci0+bml0ZW1zICsgdHVwLT5uaXRlbXMp ICogc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOworCisJCW5ldyA9IGdpbk1lcmdlSXRlbVBv aW50ZXJzKCZidWZmZXItPml0ZW1zW2J1ZmZlci0+bmZyb3plbl0sIC8qIGZpcnN0IHVuZnJv bnplbiAqLworCQkJCQkJCQkgICAoYnVmZmVyLT5uaXRlbXMgLSBidWZmZXItPm5mcm96ZW4p LAkvKiBudW0gb2YgdW5mcm96ZW4gKi8KIAkJCQkJCQkJICAgaXRlbXMsIHR1cC0+bml0ZW1z LCAmbm5ldyk7CiAKLQkJQXNzZXJ0KG5uZXcgPT0gYnVmZmVyLT5uaXRlbXMgKyB0dXAtPm5p dGVtcyk7CisJCUFzc2VydChubmV3ID09ICh0dXAtPm5pdGVtcyArIChidWZmZXItPm5pdGVt cyAtIGJ1ZmZlci0+bmZyb3plbikpKTsKKworCQltZW1jcHkoJmJ1ZmZlci0+aXRlbXNbYnVm ZmVyLT5uZnJvemVuXSwgbmV3LAorCQkJICAgbm5ldyAqIHNpemVvZihJdGVtUG9pbnRlckRh dGEpKTsKIAotCQlpZiAoYnVmZmVyLT5pdGVtcykKLQkJCXBmcmVlKGJ1ZmZlci0+aXRlbXMp OworCQlwZnJlZShuZXcpOwogCi0JCWJ1ZmZlci0+aXRlbXMgPSBuZXc7Ci0JCWJ1ZmZlci0+ bml0ZW1zID0gbm5ldzsKKwkJYnVmZmVyLT5uaXRlbXMgKz0gdHVwLT5uaXRlbXM7CiAKIAkJ QXNzZXJ0Q2hlY2tJdGVtUG9pbnRlcnMoYnVmZmVyLCB0cnVlKTsKIAl9CkBAIC0xMzMyLDYg KzE0NTksNyBAQCBHaW5CdWZmZXJSZXNldChHaW5CdWZmZXIgKmJ1ZmZlcikKIAlidWZmZXIt PmNhdGVnb3J5ID0gMDsKIAlidWZmZXItPmtleWxlbiA9IDA7CiAJYnVmZmVyLT5uaXRlbXMg PSAwOworCWJ1ZmZlci0+bmZyb3plbiA9IDA7CiAKIAlidWZmZXItPnR5cGxlbiA9IDA7CiAJ YnVmZmVyLT50eXBieXZhbCA9IDA7CkBAIC0xMzQ0LDYgKzE0NzIsMjMgQEAgR2luQnVmZmVy UmVzZXQoR2luQnVmZmVyICpidWZmZXIpCiAJLyogWFhYIHNob3VsZCBkbyBzb21ldGhpbmcg d2l0aCBleHRyZW1lbHkgbGFyZ2UgYXJyYXkgb2YgaXRlbXM/ICovCiB9CiAKKy8qCisgKiBH aW5CdWZmZXJUcmltCisgKgkJRGlzY2FyZCB0aGUgImZyb3plbiIgcGFydCBvZiB0aGUgVElE IGxpc3QgKHdoaWNoIHNob3VsZCBoYXZlIGJlZW4KKyAqCQl3cml0dGVuIHRvIGRpc2svaW5k ZXggYmVmb3JlIHRoaXMgY2FsbCkuCisgKi8KK3N0YXRpYyB2b2lkCitHaW5CdWZmZXJUcmlt KEdpbkJ1ZmZlciAqYnVmZmVyKQoreworCUFzc2VydCgoYnVmZmVyLT5uZnJvemVuID4gMCkg JiYgKGJ1ZmZlci0+bmZyb3plbiA8PSBidWZmZXItPm5pdGVtcykpOworCisJbWVtbW92ZSgm YnVmZmVyLT5pdGVtc1swXSwgJmJ1ZmZlci0+aXRlbXNbYnVmZmVyLT5uZnJvemVuXSwKKwkJ CXNpemVvZihJdGVtUG9pbnRlckRhdGEpICogKGJ1ZmZlci0+bml0ZW1zIC0gYnVmZmVyLT5u ZnJvemVuKSk7CisKKwlidWZmZXItPm5pdGVtcyAtPSBidWZmZXItPm5mcm96ZW47CisJYnVm ZmVyLT5uZnJvemVuID0gMDsKK30KKwogLyogWFhYIHByb2JhYmx5IHdvdWxkIGJlIGJldHRl ciB0byBoYXZlIGEgbWVtb3J5IGNvbnRleHQgZm9yIHRoZSBidWZmZXIgKi8KIHN0YXRpYyB2 b2lkCiBHaW5CdWZmZXJGcmVlKEdpbkJ1ZmZlciAqYnVmZmVyKQpAQCAtMTQwMiw3ICsxNTQ3 LDEyIEBAIF9naW5fcGFyYWxsZWxfbWVyZ2UoR2luQnVpbGRTdGF0ZSAqc3RhdGUpCiAJLyog ZG8gdGhlIGFjdHVhbCBzb3J0IGluIHRoZSBsZWFkZXIgKi8KIAl0dXBsZXNvcnRfcGVyZm9y bXNvcnQoc3RhdGUtPmJzX3NvcnRzdGF0ZSk7CiAKLQkvKiBpbml0aWFsaXplIGJ1ZmZlciB0 byBjb21iaW5lIGVudHJpZXMgZm9yIHRoZSBzYW1lIGtleSAqLworCS8qCisJICogSW5pdGlh bGl6ZSBidWZmZXIgdG8gY29tYmluZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBrZXkuCisJICoK KwkgKiBUaGUgbGVhZGVyIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSB3aG9sZSBtYWludGVuYW5j ZV93b3JrX21lbSBidWZmZXIgdG8KKwkgKiBjb21iaW5lIGRhdGEuIFRoZSBwYXJhbGxlbCB3 b3JrZXJzIGFscmVhZHkgY29tcGxldGVkLgorCSAqLwogCWJ1ZmZlciA9IEdpbkJ1ZmZlcklu aXQoKTsKIAogCS8qCkBAIC0xNDQyLDYgKzE1OTIsMzYgQEAgX2dpbl9wYXJhbGxlbF9tZXJn ZShHaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAkJCUdpbkJ1ZmZlclJlc2V0KGJ1ZmZlcik7CiAJ CX0KIAorCQkvKgorCQkgKiBXZSdyZSBhYm91dCB0byBhZGQgYSBHSU4gdHVwbGUgdG8gdGhl IGJ1ZmZlciAtIGNoZWNrIHRoZSBtZW1vcnkKKwkJICogbGltaXQgZmlyc3QsIGFuZCBtYXli ZSB3cml0ZSBvdXQgc29tZSBvZiB0aGUgZGF0YSBpbnRvIHRoZSBpbmRleAorCQkgKiBmaXJz dCwgaWYgbmVlZGVkIChhbmQgcG9zc2libGUpLiBXZSBvbmx5IGZsdXNoIHRoZSBwYXJ0IG9m IHRoZSBUSUQKKwkJICogbGlzdCB0aGF0IHdlIGtub3cgd29uJ3QgY2hhbmdlLCBhbmQgb25s eSBpZiB0aGVyZSdzIGVub3VnaCBkYXRhIGZvcgorCQkgKiBjb21wcmVzc2lvbiB0byB3b3Jr IHdlbGwuCisJCSAqCisJCSAqIFhYWCBUaGUgYnVmZmVyIG1heSBhbHNvIGJlIGVtcHR5LCBi dXQgaW4gdGhhdCBjYXNlIHdlIHNraXAgdGhpcy4KKwkJICovCisJCWlmIChHaW5CdWZmZXJT aG91bGRUcmltKGJ1ZmZlciwgdHVwKSkKKwkJeworCQkJQXNzZXJ0KGJ1ZmZlci0+bmZyb3pl biA+IDApOworCisJCQlzdGF0ZS0+YnVpbGRTdGF0cy5uVHJpbXMrKzsKKworCQkJLyoKKwkJ CSAqIEJ1ZmZlciBpcyBub3QgZW1wdHkgYW5kIGl0J3Mgc3RvcmluZyBhIGRpZmZlcmVudCBr ZXkgLSBmbHVzaAorCQkJICogdGhlIGRhdGEgaW50byB0aGUgaW5zZXJ0LCBhbmQgc3RhcnQg YSBuZXcgZW50cnkgZm9yIGN1cnJlbnQKKwkJCSAqIEdpblR1cGxlLgorCQkJICovCisJCQlB c3NlcnRDaGVja0l0ZW1Qb2ludGVycyhidWZmZXIsIHRydWUpOworCisJCQlnaW5FbnRyeUlu c2VydCgmc3RhdGUtPmdpbnN0YXRlLAorCQkJCQkJICAgYnVmZmVyLT5hdHRudW0sIGJ1ZmZl ci0+a2V5LCBidWZmZXItPmNhdGVnb3J5LAorCQkJCQkJICAgYnVmZmVyLT5pdGVtcywgYnVm ZmVyLT5uZnJvemVuLCAmc3RhdGUtPmJ1aWxkU3RhdHMpOworCisJCQkvKiB0cnVuY2F0ZSB0 aGUgZGF0YSB3ZSd2ZSBqdXN0IGRpc2NhcmRlZCAqLworCQkJR2luQnVmZmVyVHJpbShidWZm ZXIpOworCQl9CisKIAkJLyoKIAkJICogUmVtZW1iZXIgZGF0YSBmb3IgdGhlIGN1cnJlbnQg dHVwbGUgKGVpdGhlciByZW1lbWJlciB0aGUgbmV3IGtleSwKIAkJICogb3IgYXBwZW5kIGlm IHRvIHRoZSBleGlzdGluZyBkYXRhKS4KQEAgLTE0NjUsNiArMTY0NSw4IEBAIF9naW5fcGFy YWxsZWxfbWVyZ2UoR2luQnVpbGRTdGF0ZSAqc3RhdGUpCiAJLyogcmVsYXNlIGFsbCB0aGUg bWVtb3J5ICovCiAJR2luQnVmZmVyRnJlZShidWZmZXIpOwogCisJZWxvZyhMT0csICJfZ2lu X3BhcmFsbGVsX21lcmdlIG50cmltcyAiIElOVDY0X0ZPUk1BVCwgc3RhdGUtPmJ1aWxkU3Rh dHMublRyaW1zKTsKKwogCXR1cGxlc29ydF9lbmQoc3RhdGUtPmJzX3NvcnRzdGF0ZSk7CiAK IAlyZXR1cm4gcmVsdHVwbGVzOwpAQCAtMTUyNSw3ICsxNzA3LDEzIEBAIF9naW5fcHJvY2Vz c193b3JrZXJfZGF0YShHaW5CdWlsZFN0YXRlICpzdGF0ZSwgVHVwbGVzb3J0c3RhdGUgKndv cmtlcl9zb3J0KQogCiAJR2luQnVmZmVyICAqYnVmZmVyOwogCi0JLyogaW5pdGlhbGl6ZSBi dWZmZXIgdG8gY29tYmluZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBrZXkgKi8KKwkvKgorCSAq IEluaXRpYWxpemUgYnVmZmVyIHRvIGNvbWJpbmUgZW50cmllcyBmb3IgdGhlIHNhbWUga2V5 LgorCSAqCisJICogVGhlIHdvcmtlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIHNhbWUgYW1vdW50 IG9mIG1lbW9yeSBhcyBkdXJpbmcgdGhlIHNvcnQKKwkgKiBpbiBnaW5CdWlsZENhbGxiYWNr UGFyYWxsZWwuIEJ1dCB0aGlzIHByb2JhYmx5IHNob3VsZCBiZSB0aGUgMzJNQiB1c2VkCisJ ICogZHVyaW5nIHBsYW5uaW5nLCBqdXN0IGxpa2UgdGhlcmUuCisJICovCiAJYnVmZmVyID0g R2luQnVmZmVySW5pdCgpOwogCiAJLyogc29ydCB0aGUgcmF3IHBlci13b3JrZXIgZGF0YSAq LwpAQCAtMTU3OCw2ICsxNzY2LDQzIEBAIF9naW5fcHJvY2Vzc193b3JrZXJfZGF0YShHaW5C dWlsZFN0YXRlICpzdGF0ZSwgVHVwbGVzb3J0c3RhdGUgKndvcmtlcl9zb3J0KQogCQkJR2lu QnVmZmVyUmVzZXQoYnVmZmVyKTsKIAkJfQogCisJCS8qCisJCSAqIFdlJ3JlIGFib3V0IHRv IGFkZCBhIEdJTiB0dXBsZSB0byB0aGUgYnVmZmVyIC0gY2hlY2sgdGhlIG1lbW9yeQorCQkg KiBsaW1pdCBmaXJzdCwgYW5kIG1heWJlIHdyaXRlIG91dCBzb21lIG9mIHRoZSBkYXRhIGlu dG8gdGhlIGluZGV4CisJCSAqIGZpcnN0LCBpZiBuZWVkZWQgKGFuZCBwb3NzaWJsZSkuIFdl IG9ubHkgZmx1c2ggdGhlIHBhcnQgb2YgdGhlIFRJRAorCQkgKiBsaXN0IHRoYXQgd2Uga25v dyB3b24ndCBjaGFuZ2UsIGFuZCBvbmx5IGlmIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yCisJ CSAqIGNvbXByZXNzaW9uIHRvIHdvcmsgd2VsbC4KKwkJICoKKwkJICogWFhYIFRoZSBidWZm ZXIgbWF5IGFsc28gYmUgZW1wdHksIGJ1dCBpbiB0aGF0IGNhc2Ugd2Ugc2tpcCB0aGlzLgor CQkgKi8KKwkJaWYgKEdpbkJ1ZmZlclNob3VsZFRyaW0oYnVmZmVyLCB0dXApKQorCQl7CisJ CQlHaW5UdXBsZSAgICpudHVwOworCQkJU2l6ZQkJbnR1cGxlbjsKKworCQkJQXNzZXJ0KGJ1 ZmZlci0+bmZyb3plbiA+IDApOworCisJCQlzdGF0ZS0+YnVpbGRTdGF0cy5uVHJpbXMrKzsK KworCQkJLyoKKwkJCSAqIEJ1ZmZlciBpcyBub3QgZW1wdHkgYW5kIGl0J3Mgc3RvcmluZyBh IGRpZmZlcmVudCBrZXkgLSBmbHVzaAorCQkJICogdGhlIGRhdGEgaW50byB0aGUgaW5zZXJ0 LCBhbmQgc3RhcnQgYSBuZXcgZW50cnkgZm9yIGN1cnJlbnQKKwkJCSAqIEdpblR1cGxlLgor CQkJICovCisJCQlBc3NlcnRDaGVja0l0ZW1Qb2ludGVycyhidWZmZXIsIHRydWUpOworCisJ CQludHVwID0gX2dpbl9idWlsZF90dXBsZShzdGF0ZSwgYnVmZmVyLT5hdHRudW0sIGJ1ZmZl ci0+Y2F0ZWdvcnksCisJCQkJCQkJCQlidWZmZXItPmtleSwgYnVmZmVyLT50eXBsZW4sIGJ1 ZmZlci0+dHlwYnl2YWwsCisJCQkJCQkJCQlidWZmZXItPml0ZW1zLCBidWZmZXItPm5mcm96 ZW4sICZudHVwbGVuKTsKKworCQkJdHVwbGVzb3J0X3B1dGdpbnR1cGxlKHN0YXRlLT5ic19z b3J0c3RhdGUsIG50dXAsIG50dXBsZW4pOworCisJCQlwZnJlZShudHVwKTsKKworCQkJLyog dHJ1bmNhdGUgdGhlIGRhdGEgd2UndmUganVzdCBkaXNjYXJkZWQgKi8KKwkJCUdpbkJ1ZmZl clRyaW0oYnVmZmVyKTsKKwkJfQorCiAJCS8qCiAJCSAqIFJlbWVtYmVyIGRhdGEgZm9yIHRo ZSBjdXJyZW50IHR1cGxlIChlaXRoZXIgcmVtZW1iZXIgdGhlIG5ldyBrZXksCiAJCSAqIG9y IGFwcGVuZCBpZiB0byB0aGUgZXhpc3RpbmcgZGF0YSkuCkBAIC0xNjEzLDYgKzE4MzgsOCBA QCBfZ2luX3Byb2Nlc3Nfd29ya2VyX2RhdGEoR2luQnVpbGRTdGF0ZSAqc3RhdGUsIFR1cGxl c29ydHN0YXRlICp3b3JrZXJfc29ydCkKIAkJIHN0YXRlLT5idWlsZFN0YXRzLnNpemVSYXcs IHN0YXRlLT5idWlsZFN0YXRzLnNpemVDb21wcmVzc2VkLAogCQkgKDEwMC4wICogc3RhdGUt PmJ1aWxkU3RhdHMuc2l6ZUNvbXByZXNzZWQpIC8gc3RhdGUtPmJ1aWxkU3RhdHMuc2l6ZVJh dyk7CiAKKwllbG9nKExPRywgIl9naW5fcHJvY2Vzc193b3JrZXJfZGF0YSB0cmltcyAiIElO VDY0X0ZPUk1BVCwgc3RhdGUtPmJ1aWxkU3RhdHMublRyaW1zKTsKKwogCXR1cGxlc29ydF9l bmQod29ya2VyX3NvcnQpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2luLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmgKaW5kZXggMmI2NjMzZDA2OGEuLjkz ODEzMjlmYWM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2dpbi5oCkBAIC01MSw2ICs1MSw3IEBAIHR5cGVkZWYgc3Ry dWN0IEdpblN0YXRzRGF0YQogCWludDMyCQlnaW5WZXJzaW9uOwogCVNpemUJCXNpemVSYXc7 CiAJU2l6ZQkJc2l6ZUNvbXByZXNzZWQ7CisJaW50NjQJCW5UcmltczsKIH0gR2luU3RhdHNE YXRhOwogCiAvKgotLSAKMi40NC4wCgo= --------------QSG8B2GJOHGCxDMrFSwGSI5X Content-Type: text/x-patch; charset=UTF-8; name="v20240505-0007-Detect-wrap-around-in-parallel-callback.patch" Content-Disposition: attachment; filename*0="v20240505-0007-Detect-wrap-around-in-parallel-callback.patch" Content-Transfer-Encoding: base64 RnJvbSBmOGFmMzdlYjIyNzhkM2E5N2IxNDg0NTgxNjFjMzAxMjJjZGJmOWUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAyIE1heSAyMDI0IDE1OjIxOjU1ICswMjAwClN1Ympl Y3Q6IFtQQVRDSCB2MjAyNDA1MDUgNy84XSBEZXRlY3Qgd3JhcCBhcm91bmQgaW4gcGFyYWxs ZWwgY2FsbGJhY2sKCldoZW4gc3luYyBzY2FuIGR1cmluZyBpbmRleCBidWlsZCB3cmFwcyBh cm91bmQsIHRoYXQgbWF5IHJlc3VsdCBpbiBzb21lCmtleXMgaGF2aW5nIHZlcnkgbG9uZyBU SUQgbGlzdHMsIHJlcXVpcmluZyAiZnVsbCIgbWVyZ2Ugc29ydCBydW5zIHdoZW4KY29tYmlu aW5nIGRhdGEgaW4gd29ya2Vycy4gSXQgYWxzbyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBlbmZv cmNpbmcgbWVtb3J5CmxpbWl0LCBiZWNhdXNlIHdlIGNhbid0IGp1c3QgZHVtcCB0aGUgZGF0 YSAtIHRoZSBpbmRleCBidWlsZCByZXF1aXJlcwphcHBlbmQtb25seSBwb3N0aW5nIGxpc3Rz LCBhbmQgdmlvbGF0aW5nIG1heSByZXN1bHQgaW4gZXJyb3JzIGxpa2UKCiAgRVJST1I6IGNv dWxkIG5vdCBzcGxpdCBHSU4gcGFnZTsgYWxsIG9sZCBpdGVtcyBkaWRuJ3QgZml0CgpiZWNh dXNlIGFmdGVyIHRoZSBzY2FuIHdyYXAgYXJvdW5kIHNvbWUgb2YgdGhlIFRJRHMgbWF5IGJl bG9uZyB0byB0aGUKYmVnaW5uaW5nIG9mIHRoZSBsaXN0LCBhZmZlY3RpbmcgdGhlIGNvbXBy ZXNzaW9uLgoKQnV0IHdlIGNhbiBkZWFsIHdpdGggdGhpcyBpbiB0aGUgY2FsbGJhY2sgLSBp ZiB3ZSBzZWUgdGhlIFRJRCB0byBqdW1wCmJhY2ssIHRoYXQgbXVzdCBtZWFuIGEgd3JhcGFy b3VuZCBoYXBwZW5lZC4gSW4gdGhhdCBjYXNlIHdlIHNpbXBseSBkdW1wCmFsbCB0aGUgZGF0 YSBhY2N1bXVsYXRlZCBpbiBtZW1vcnksIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2guCgpUaGlz IG1lYW5zIHRoZXJlIHdvbid0IGJlIGFueSB0dXBsZXMgd2l0aCB2ZXJ5IHdpZGUgVElEIHJh bmdlcywgaW5zdGVhZAp0aGVyZSdsbCBiZSBvbmUgdHVwbGUgd2l0aCBhIHJhbmdlIGF0IHRo ZSBlbmQgb2YgdGhlIHRhYmxlLCBhbmQgYW5vdGhlcgp0dXBsZSBhdCB0aGUgYmVnaW5uaW5n LiBBbmQgYWxsIHRoZSBsaXN0cyBpbiB0aGUgd29ya2VyIHdpbGwgYmUKbm9uLW92ZXJsYXBw aW5nLCBhbmQgc29ydCBuaWNlbHkgYmFzZWQgb24gZmlyc3QgVElELgoKRm9yIHRoZSBsZWFk ZXIsIHdlIHN0aWxsIG5lZWQgdG8gZG8gdGhlIGZ1bGwgbWVyZ2UgLSB0aGUgbGlzdHMgbWF5 Cm92ZXJsYXAgYW5kIGludGVybGVhdmUgaW4gdmFyaW91cyB3YXlzLiBCdXQgdGhlcmUgc2hv dWxkIGJlIG9ubHkgdmVyeQpmZXcgb2YgdGhvc2UgbGlzdHMsIGFib3V0IG9uZSBwZXIgd29y a2VyLCBtYWtpbmcgaXQgbm90IGFuIGlzc3VlLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luaW5zZXJ0LmMgfCA4OSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYwppbmRleCBmNGE0YjhmMDBlOS4uNzcwNWVkZGZh NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQuYwpAQCAtMTQyLDYgKzE0Miw3 IEBAIHR5cGVkZWYgc3RydWN0CiAJTWVtb3J5Q29udGV4dCB0bXBDdHg7CiAJTWVtb3J5Q29u dGV4dCBmdW5jQ3R4OwogCUJ1aWxkQWNjdW11bGF0b3IgYWNjdW07CisJSXRlbVBvaW50ZXJE YXRhIHRpZDsKIAogCS8qIEZJWE1FIGxpa2VseSBkdXBsaWNhdGUgd2l0aCBpbmR0dXBsZXMg Ki8KIAlkb3VibGUJCWJzX251bXR1cGxlczsKQEAgLTQ3NCw2ICs0NzUsNDcgQEAgZ2luQnVp bGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwgSXRlbVBvaW50ZXIgdGlkLCBEYXR1bSAqdmFs dWVzLAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgpOwogfQogCitzdGF0aWMgdm9p ZAorZ2luRmx1c2hCdWlsZFN0YXRlKEdpbkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0 aW9uIGluZGV4KQoreworCUl0ZW1Qb2ludGVyRGF0YSAqbGlzdDsKKwlEYXR1bQkJa2V5Owor CUdpbk51bGxDYXRlZ29yeSBjYXRlZ29yeTsKKwl1aW50MzIJCW5saXN0OworCU9mZnNldE51 bWJlciBhdHRudW07CisJVHVwbGVEZXNjCXRkZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRl eCk7CisKKwlnaW5CZWdpbkJBU2NhbigmYnVpbGRzdGF0ZS0+YWNjdW0pOworCXdoaWxlICgo bGlzdCA9IGdpbkdldEJBRW50cnkoJmJ1aWxkc3RhdGUtPmFjY3VtLAorCQkJCQkJCQkgJmF0 dG51bSwgJmtleSwgJmNhdGVnb3J5LCAmbmxpc3QpKSAhPSBOVUxMKQorCXsKKwkJLyogaW5m b3JtYXRpb24gYWJvdXQgdGhlIGtleSAqLworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0g VHVwbGVEZXNjQXR0cih0ZGVzYywgKGF0dG51bSAtIDEpKTsKKworCQkvKiBHSU4gdHVwbGUg YW5kIHR1cGxlIGxlbmd0aCAqLworCQlHaW5UdXBsZSAgICp0dXA7CisJCVNpemUJCXR1cGxl bjsKKworCQkvKiB0aGVyZSBjb3VsZCBiZSBtYW55IGVudHJpZXMsIHNvIGJlIHdpbGxpbmcg dG8gYWJvcnQgaGVyZSAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXR1cCA9 IF9naW5fYnVpbGRfdHVwbGUoYnVpbGRzdGF0ZSwgYXR0bnVtLCBjYXRlZ29yeSwKKwkJCQkJ CQkgICBrZXksIGF0dHItPmF0dGxlbiwgYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJICAgbGlz dCwgbmxpc3QsICZ0dXBsZW4pOworCisJCXR1cGxlc29ydF9wdXRnaW50dXBsZShidWlsZHN0 YXRlLT5ic193b3JrZXJfc29ydCwgdHVwLCB0dXBsZW4pOworCisJCXBmcmVlKHR1cCk7CisJ fQorCisJTWVtb3J5Q29udGV4dFJlc2V0KGJ1aWxkc3RhdGUtPnRtcEN0eCk7CisJZ2luSW5p dEJBKCZidWlsZHN0YXRlLT5hY2N1bSk7Cit9CisKKy8qCisgKiBGSVhNRSBBbm90aGVyIHdh eSB0byBkZWFsIHdpdGggdGhlIHdyYXAgYXJvdW5kIG9mIHN5bmMgc2NhbnMgd291bGQgYmUg dG8KKyAqIGRldGVjdCB3aGVuIHRpZCB3cmFwcyBhcm91bmQgYW5kIGp1c3QgZmx1c2ggdGhl IHN0YXRlLgorICovCiBzdGF0aWMgdm9pZAogZ2luQnVpbGRDYWxsYmFja1BhcmFsbGVsKFJl bGF0aW9uIGluZGV4LCBJdGVtUG9pbnRlciB0aWQsIERhdHVtICp2YWx1ZXMsCiAJCQkJCQkg Ym9vbCAqaXNudWxsLCBib29sIHR1cGxlSXNBbGl2ZSwgdm9pZCAqc3RhdGUpCkBAIC00ODQs NiArNTI2LDE2IEBAIGdpbkJ1aWxkQ2FsbGJhY2tQYXJhbGxlbChSZWxhdGlvbiBpbmRleCwg SXRlbVBvaW50ZXIgdGlkLCBEYXR1bSAqdmFsdWVzLAogCiAJb2xkQ3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGJ1aWxkc3RhdGUtPnRtcEN0eCk7CiAKKwkvKiBmbHVzaCBjb250ZW50 cyBiZWZvcmUgd3JhcHBpbmcgYXJvdW5kICovCisJaWYgKEl0ZW1Qb2ludGVyQ29tcGFyZSh0 aWQsICZidWlsZHN0YXRlLT50aWQpIDwgMCkKKwl7CisJCWVsb2coTE9HLCAiY2FsbGluZyBn aW5GbHVzaEJ1aWxkU3RhdGUiKTsKKwkJZ2luRmx1c2hCdWlsZFN0YXRlKGJ1aWxkc3RhdGUs IGluZGV4KTsKKwl9CisKKwkvKiByZW1lbWJlciB0aGUgVElEIHdlJ3JlIGFib3V0IHRvIHBy b2Nlc3MgKi8KKwltZW1jcHkoJmJ1aWxkc3RhdGUtPnRpZCwgdGlkLCBzaXplb2YoSXRlbVBv aW50ZXJEYXRhKSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgYnVpbGRzdGF0ZS0+Z2luc3RhdGUu b3JpZ1R1cGRlc2MtPm5hdHRzOyBpKyspCiAJCWdpbkhlYXBUdXBsZUJ1bGtJbnNlcnQoYnVp bGRzdGF0ZSwgKE9mZnNldE51bWJlcikgKGkgKyAxKSwKIAkJCQkJCQkgICB2YWx1ZXNbaV0s IGlzbnVsbFtpXSwgdGlkKTsKQEAgLTUxOCw0MCArNTcwLDcgQEAgZ2luQnVpbGRDYWxsYmFj a1BhcmFsbGVsKFJlbGF0aW9uIGluZGV4LCBJdGVtUG9pbnRlciB0aWQsIERhdHVtICp2YWx1 ZXMsCiAJICogWFhYIHByb2JhYmx5IHNob3VsZCB1c2UgMzJNQiwgbm90IHdvcmtfbWVtLCBh cyB1c2VkIGR1cmluZyBwbGFubmluZz8KIAkgKi8KIAlpZiAoYnVpbGRzdGF0ZS0+YWNjdW0u YWxsb2NhdGVkTWVtb3J5ID49IChTaXplKSB3b3JrX21lbSAqIDEwMjRMKQotCXsKLQkJSXRl bVBvaW50ZXJEYXRhICpsaXN0OwotCQlEYXR1bQkJa2V5OwotCQlHaW5OdWxsQ2F0ZWdvcnkg Y2F0ZWdvcnk7Ci0JCXVpbnQzMgkJbmxpc3Q7Ci0JCU9mZnNldE51bWJlciBhdHRudW07Ci0J CVR1cGxlRGVzYwl0ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoaW5kZXgpOwotCi0JCWdpbkJl Z2luQkFTY2FuKCZidWlsZHN0YXRlLT5hY2N1bSk7Ci0JCXdoaWxlICgobGlzdCA9IGdpbkdl dEJBRW50cnkoJmJ1aWxkc3RhdGUtPmFjY3VtLAotCQkJCQkJCQkJICZhdHRudW0sICZrZXks ICZjYXRlZ29yeSwgJm5saXN0KSkgIT0gTlVMTCkKLQkJewotCQkJLyogaW5mb3JtYXRpb24g YWJvdXQgdGhlIGtleSAqLwotCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVz Y0F0dHIodGRlc2MsIChhdHRudW0gLSAxKSk7Ci0KLQkJCS8qIEdJTiB0dXBsZSBhbmQgdHVw bGUgbGVuZ3RoICovCi0JCQlHaW5UdXBsZSAgICp0dXA7Ci0JCQlTaXplCQl0dXBsZW47Ci0K LQkJCS8qIHRoZXJlIGNvdWxkIGJlIG1hbnkgZW50cmllcywgc28gYmUgd2lsbGluZyB0byBh Ym9ydCBoZXJlICovCi0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCi0JCQl0dXAgPSBf Z2luX2J1aWxkX3R1cGxlKGJ1aWxkc3RhdGUsIGF0dG51bSwgY2F0ZWdvcnksCi0JCQkJCQkJ CSAgIGtleSwgYXR0ci0+YXR0bGVuLCBhdHRyLT5hdHRieXZhbCwKLQkJCQkJCQkJICAgbGlz dCwgbmxpc3QsICZ0dXBsZW4pOwotCi0JCQl0dXBsZXNvcnRfcHV0Z2ludHVwbGUoYnVpbGRz dGF0ZS0+YnNfd29ya2VyX3NvcnQsIHR1cCwgdHVwbGVuKTsKLQotCQkJcGZyZWUodHVwKTsK LQkJfQotCi0JCU1lbW9yeUNvbnRleHRSZXNldChidWlsZHN0YXRlLT50bXBDdHgpOwotCQln aW5Jbml0QkEoJmJ1aWxkc3RhdGUtPmFjY3VtKTsKLQl9CisJCWdpbkZsdXNoQnVpbGRTdGF0 ZShidWlsZHN0YXRlLCBpbmRleCk7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4 KTsKIH0KQEAgLTU4Nyw2ICs2MDYsNyBAQCBnaW5idWlsZChSZWxhdGlvbiBoZWFwLCBSZWxh dGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleEluZm8pCiAJYnVpbGRzdGF0ZS5ic19udW10 dXBsZXMgPSAwOwogCWJ1aWxkc3RhdGUuYnNfcmVsdHVwbGVzID0gMDsKIAlidWlsZHN0YXRl LmJzX2xlYWRlciA9IE5VTEw7CisJbWVtc2V0KCZidWlsZHN0YXRlLnRpZCwgMCwgc2l6ZW9m KEl0ZW1Qb2ludGVyRGF0YSkpOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgbWV0YSBwYWdlICov CiAJTWV0YUJ1ZmZlciA9IEdpbk5ld0J1ZmZlcihpbmRleCk7CkBAIC0yMDA3LDYgKzIwMjcs NyBAQCBfZ2luX3BhcmFsbGVsX2J1aWxkX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3Rv YyAqdG9jKQogCWJ1aWxkc3RhdGUuaW5kdHVwbGVzID0gMDsKIAkvKiBYWFggc2hvdWxkbid0 IHRoaXMgaW5pdGlhbGl6ZSB0aGUgb3RoZXIgZmllZGxzLCBsaWtlIGdpbmJ1aWxkKCk/ICov CiAJbWVtc2V0KCZidWlsZHN0YXRlLmJ1aWxkU3RhdHMsIDAsIHNpemVvZihHaW5TdGF0c0Rh dGEpKTsKKwltZW1zZXQoJmJ1aWxkc3RhdGUudGlkLCAwLCBzaXplb2YoSXRlbVBvaW50ZXJE YXRhKSk7CiAKIAkvKgogCSAqIGNyZWF0ZSBhIHRlbXBvcmFyeSBtZW1vcnkgY29udGV4dCB0 aGF0IGlzIHVzZWQgdG8gaG9sZCBkYXRhIG5vdCB5ZXQKLS0gCjIuNDQuMAoK --------------QSG8B2GJOHGCxDMrFSwGSI5X--