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.96) (envelope-from ) id 1x2tBU-0062kD-14 for pgsql-bugs@arkaria.postgresql.org; Sat, 05 Sep 2026 16:24:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1x2tBT-00CUrD-0L for pgsql-bugs@arkaria.postgresql.org; Sat, 05 Sep 2026 16:24:03 +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.96) (envelope-from ) id 1x2tBS-00CUr2-1m for pgsql-bugs@lists.postgresql.org; Sat, 05 Sep 2026 16:24:02 +0000 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x2tBP-000000049ZG-2B7d for pgsql-bugs@lists.postgresql.org; Sat, 05 Sep 2026 16:24:01 +0000 Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-3a1e9f55e03so18326671fa.1 for ; Sat, 05 Sep 2026 09:23:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788625436; x=1789230236; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=ZAZ2AODDmy9h6X1IqOIL3Pkg8sq4aRUE6dczGD6Wzgw=; b=lf7xQ3s20UPy01XRYPLfnZsadoRR+dvNY+sbqwcvYIQO6e8Ts7MArOGqQA/oF2VpzB wZHSJx+3nltD9xJd1p4ZzTRuFkUk5tkl/1Dr05g9WFNxKnOzB/oX8zLvs5SgBXWrpSy7 LbBB4XDxkXya9bub26NS5t5ypUmrIFwe+kFkLmXbaHssei8wY5FiJpEM0WsyMUQPE/BN /ZEEPAR3DZRjsNgB/XbBfSrGwS9FlhqJMaDJhNX/Jm+Q2N+qtbIkS63vtdnfJZCui9Ir pSdRQGu2J7Cap2zVd4zXhPNC3iulZhcC3q30vNZLMDI4AA/qJwhZDImK0SV0DHddTIzu IkmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788625436; x=1789230236; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ZAZ2AODDmy9h6X1IqOIL3Pkg8sq4aRUE6dczGD6Wzgw=; b=ApDh5f11AO7eHuNw16e3IaQosf2pXModv1AYT/nLlX9q0mMtETO8wdteSZ7BoRyqcv FqM6d7FOQlUuae1BxqS4z7UXnBpNawWTqKLzGxM3xoCQixGvH259PQFRDL3di4+N0Rh7 1LODgJQvbxkMGvxhxTP/tPswMB34Ud063C4VpdzFMhbjEI6XZLOiJLmt3naWDaSIcsoW ffBYCgvMIsaO8tEpZeWij54YzKtNDh8jzzC2svZ2h/Tz9eSfIZa/6Yluznyp3219FlYW XcoEwMQ5icadJjYY7jx4eySS5UY4Z1Dy37VtjpW5dXP4VLx1m8pV6aw/GI7UbDb7ZXrr blpw== X-Forwarded-Encrypted: i=1; AKwUvBxQdh0uWK4qWtzKC4kFQZLXziUWdqfcKu6eyJv+H3X93wTOwl6WGTLIt0/eJd9ZlI3JZGqCG9BLS55R@lists.postgresql.org X-Gm-Message-State: AFuF++nQbc7m0ntR1O3DUlytJGGFPETfJXUbSv9uoKsXXIp/aNTsAMiq Sq1Fq6YGiUERLHNIN/1gyNta/6gET5OoL50wQaiMBSFjUkqlsgohuKcX X-Gm-Gg: AYBFou3V5KnHw+e45a0bpzrEwe3xHbRSuvONMasM4WJgleizALX7a6FMqZCegNNKwQt Brokc4TNA14aU1wcdwY214ebsdCsp+Z3958MLmMi5QqueOvvtFIr8XuCxeVt8csvpH+kwHP465m +ioDIL4l6gxsPllTdTpn44UzahdyESGUjgUm0m7zltiDN7htH1p8u9ISMZZY92i6Afllb9TWD/+ QLVi9t6XRzRYnn29IhlLvM6tjw3yfpmFt1o+7Kz24YBK27Nh7//i2HVWXNvrhPiwcsjlF9Nwg7H OT4HOUHPIM8XcczH8zaCK5A5SYGWPrXp1YiAS3mgg/mobQYq+hpEiFlBWfE21WFCmUBaJUAGnNZ ffwSPYgxc1u7k1QrwHZIuBRSw5Z9LpRPyY0cZVi/5BlKd5M42ObepapJFw7ABZZ6LXxE1I5Gk0G Ist4ctllM8Mv5XNSLMWsOnvo0pn/uU8Jyp4g19qgoezxhlU1aI+ZebZBJwBSmQE/30KEzYPX2My 5Rz2c2UuVV/LNeCzEEDxZrX/pqnlzoUvgk/u3lrjtZ/AuOn X-Received: by 2002:a2e:be89:0:b0:3a3:5a01:a7c1 with SMTP id 38308e7fff4ca-3a371b8043dmr16548651fa.7.1788625435688; Sat, 05 Sep 2026 09:23:55 -0700 (PDT) Received: from [192.168.0.86] (84.123.224.186.dyn.user.ono.com. [84.123.224.186]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a37058887fsm14665561fa.21.2026.09.05.09.23.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 05 Sep 2026 09:23:54 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------rGZPqKYv0GmjPq9XWvot9EA2" Message-ID: <7c27d19d-3324-4977-a8b2-ea89af0eac79@gmail.com> Date: Sat, 5 Sep 2026 18:23:52 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #19649: Qual pushdown into GROUP BY subqueries ignores non-equivalence-preserving references to grouping col To: Andrey Rachitskiy Cc: 303677365@qq.com, pgsql-bugs@lists.postgresql.org, Tender Wang References: <19649-2cabf1440793cc71@postgresql.org> <60c6b1f7-f435-4ca7-992a-482417af5130@gmail.com> Content-Language: en-US From: Andrei Lepikhov In-Reply-To: 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. --------------rGZPqKYv0GmjPq9XWvot9EA2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 05/09/2026 12:45, Andrey Rachitskiy wrote: > I attach v4, it is v2 with fixed comment. > Sorry for the noise, I'll be more attentive and take my time.  > Thanks for the quick turnaround. My concern is with the approach, not the code itself. The key change in v4 is a single line: if (getBaseType(var->vartype) != JSONBOID) return false; This only addresses the specific type mentioned in the report. However, the reporter could have demonstrated the same bug using numeric, without involving jsonb at all. The same goes for float8. In core, the default btree opclasses that make no image-equality promise are numeric, float8, interval, jsonb, record and tsvector, among others. Group by any of those and wrap the column in any expression, and the qual moves. This means we will see this issue reported again, just with a different type mentioned. What's more, I think your solution not even full. Just check something like the following: SELECT j, count(*) FROM t GROUP BY j HAVING starts_with(j::text, '1.'); So, how can we address the broader issue rather than just this specific case? The property we need is already in the catalogue. Peter and Anastasia added equalimage support functions in 612a1ab7672 for btree deduplication, and the documented contract is exactly what we need. If that holds, no wrapping expression can distinguish values that the grouping merged, whatever the wrapper is. Even this approach is not free from issues, quite narrow ones though. If I understand correctly, image equality is not quite the same as bitwise equality for varlena, since TOAST compression is not applied consistently, so functions like pg_column_size() can still be inconsistent. The attachment is a LLM generated patch that demonstrates the idea, maybe in too much detail. One way or another, we end up with worse query plans, sometimes for nothing. Postgres is not the only one facing this issue. Let's try to find ideas in others' experience. The mainstream solution is to remove the coarse equality from the type system. DuckDB canonicalises -0.0 and gives DECIMAL a fixed per-column scale. ClickHouse allows COLLATE only in ORDER BY and fixes DECIMAL scale as well. Equality becomes image equality, and the optimiser needs no guard at all. The second is to declare the result unspecified [1]. SQLite reproduces our bug through type affinity, and their answer is that the affinity of such a column is indeterminate and the group representative is arbitrary, so any result is legal. Some discussions in the Internet give me an idea that SQL Server restrict clause pushdown in such cases. I personally prefer the second approach, possibly with an image equality check. GROUP BY already hands back an arbitrary member of the group. Postgres does not promise which one, and any expression that can distinguish members of the class is therefore reading something we never guaranteed. [1] https://sqlite.org/forum/info/6dc048f81303cb97 -- regards, Andrei Lepikhov, pgEdge --------------rGZPqKYv0GmjPq9XWvot9EA2 Content-Type: text/plain; charset=UTF-8; name="demo.diff" Content-Disposition: attachment; filename="demo.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9idHJlZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2J0 cmVlLnNnbWwKaW5kZXggMDI3MzYxZjIwYmIuLmIxYjMyNTVkNjE2IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvYnRyZWUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYnRyZWUuc2dtbApA QCAtNDY0LDkgKzQ2NCwxMiBAQCByZXR1cm5zIGJvb2wKICAgICAgPGZ1bmN0aW9uPmVxdWFs aW1hZ2U8L2Z1bmN0aW9uPiAoPHF1b3RlPmVxdWFsaXR5IGltcGxpZXMgaW1hZ2UKICAgICAg IGVxdWFsaXR5PC9xdW90ZT4pIHN1cHBvcnQgZnVuY3Rpb25zLCByZWdpc3RlcmVkIHVuZGVy IHN1cHBvcnQKICAgICAgZnVuY3Rpb24gbnVtYmVyIDQuICBUaGVzZSBmdW5jdGlvbnMgYWxs b3cgdGhlIGNvcmUgY29kZSB0bwotICAgICBkZXRlcm1pbmUgd2hlbiBpdCBpcyBzYWZlIHRv IGFwcGx5IHRoZSBidHJlZSBkZWR1cGxpY2F0aW9uCi0gICAgIG9wdGltaXphdGlvbi4gIEN1 cnJlbnRseSwgPGZ1bmN0aW9uPmVxdWFsaW1hZ2U8L2Z1bmN0aW9uPgotICAgICBmdW5jdGlv bnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gYnVpbGRpbmcgb3IgcmVidWlsZGluZyBhbiBpbmRl eC4KKyAgICAgZGV0ZXJtaW5lIHdoZW4gdHdvIHZhbHVlcyB0aGF0IGNvbXBhcmUgZXF1YWwg bWF5IGJlIGZyZWVseQorICAgICBzdWJzdGl0dXRlZCBmb3Igb25lIGFub3RoZXIuICBUaGV5 IGFyZSBjYWxsZWQgd2hlbiBidWlsZGluZyBvcgorICAgICByZWJ1aWxkaW5nIGFuIGluZGV4 LCB0byBkZWNpZGUgd2hldGhlciB0aGUgYnRyZWUgZGVkdXBsaWNhdGlvbgorICAgICBvcHRp bWl6YXRpb24gaXMgc2FmZSwgYW5kIGR1cmluZyBxdWVyeSBwbGFubmluZywgdG8gZGVjaWRl IHdoZXRoZXIKKyAgICAgYW4gb3B0aW1pemF0aW9uIHRoYXQgbWVyZ2VzIGVxdWFsIHZhbHVl cyBtYXkgZGlzY2FyZCB0aGUKKyAgICAgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGVtLgogICAg IDwvcGFyYT4KICAgICA8cGFyYT4KICAgICAgQW4gPGZ1bmN0aW9uPmVxdWFsaW1hZ2U8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKaW5kZXggMDE0ZmFhMTYyMmYuLmU1MjViZGYxODQ3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xMTgzLDIxICsxMTgzLDEyIEBAIF9i dF9hbGxlcXVhbGltYWdlKFJlbGF0aW9uIHJlbCwgYm9vbCBkZWJ1Z21lc3NhZ2UpCiAKIAlm b3IgKGludCBpID0gMDsgaSA8IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0 ZXMocmVsKTsgaSsrKQogCXsKLQkJT2lkCQkJb3BmYW1pbHkgPSByZWwtPnJkX29wZmFtaWx5 W2ldOwotCQlPaWQJCQlvcGNpbnR5cGUgPSByZWwtPnJkX29wY2ludHlwZVtpXTsKLQkJT2lk CQkJY29sbGF0aW9uID0gcmVsLT5yZF9pbmRjb2xsYXRpb25baV07Ci0JCU9pZAkJCWVxdWFs aW1hZ2Vwcm9jOwotCi0JCWVxdWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3Byb2Mob3Bm YW1pbHksIG9wY2ludHlwZSwgb3BjaW50eXBlLAotCQkJCQkJCQkJCSAgIEJURVFVQUxJTUFH RV9QUk9DKTsKLQogCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBubyBCVEVRVUFMSU1BR0VfUFJP QyB0aGVuIGRlZHVwbGljYXRpb24gaXMgYXNzdW1lZCB0bwotCQkgKiBiZSB1bnNhZmUuICBP dGhlcndpc2UsIGFjdHVhbGx5IGNhbGwgcHJvYyBhbmQgc2VlIHdoYXQgaXQgc2F5cy4KKwkJ ICogQW4gb3BjbGFzcyB0aGF0IGxhY2tzIGEgQlRFUVVBTElNQUdFX1BST0MsIG9yIHdob3Nl IHByb2NlZHVyZQorCQkgKiByZXR1cm5zIGZhbHNlLCBtYWtlcyBkZWR1cGxpY2F0aW9uIHVu c2FmZSBmb3IgdGhlIHdob2xlIGluZGV4LgogCQkgKi8KLQkJaWYgKCFPaWRJc1ZhbGlkKGVx dWFsaW1hZ2Vwcm9jKSB8fAotCQkJIURhdHVtR2V0Qm9vbChPaWRGdW5jdGlvbkNhbGwxQ29s bChlcXVhbGltYWdlcHJvYywgY29sbGF0aW9uLAotCQkJCQkJCQkJCQkgICBPYmplY3RJZEdl dERhdHVtKG9wY2ludHlwZSkpKSkKKwkJaWYgKCFvcGZhbWlseV9pc19lcXVhbGltYWdlKHJl bC0+cmRfb3BmYW1pbHlbaV0sIHJlbC0+cmRfb3BjaW50eXBlW2ldLAorCQkJCQkJCQkJcmVs LT5yZF9pbmRjb2xsYXRpb25baV0pKQogCQl7CiAJCQlhbGxlcXVhbGltYWdlID0gZmFsc2U7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2lu aXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5k ZXggZmI2ZjgxNDUzZWEuLmRlYWVlMzk5MDQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9pbml0c3BsYW4uYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAotI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJhY2Nl c3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgpAQCAtODg1LDcgKzg4NCw2IEBAIGNyZWF0ZV9n cm91cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpyb290KQogCQlTb3J0R3JvdXBDbGF1 c2UgKnNnYyA9IGxmaXJzdF9ub2RlKFNvcnRHcm91cENsYXVzZSwgbGMpOwogCQlUYXJnZXRF bnRyeSAqdGxlID0gZ2V0X3NvcnRncm91cGNsYXVzZV90bGUoc2djLCByb290LT5wcm9jZXNz ZWRfdGxpc3QpOwogCQlUeXBlQ2FjaGVFbnRyeSAqdGNlOwotCQlPaWQJCQllcXVhbGltYWdl cHJvYzsKIAogCQlBc3NlcnQodGxlLT5yZXNzb3J0Z3JvdXByZWYgPiAwKTsKIApAQCAtOTEx LDIyICs5MDksMTMgQEAgY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5lckluZm8g KnJvb3QpCiAJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKIAkJCXJldHVy bjsKIAotCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+YnRyZWVf b3BmLAotCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCi0JCQkJCQkJCQkJICAg dGNlLT5idHJlZV9vcGludHlwZSwKLQkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7 Ci0KIAkJLyoKLQkJICogSWYgdGhlcmUgaXMgbm8gQlRFUVVBTElNQUdFX1BST0MsIGVhZ2Vy IGFnZ3JlZ2F0aW9uIGlzIGFzc3VtZWQgdG8KLQkJICogYmUgdW5zYWZlLiAgT3RoZXJ3aXNl LCB3ZSBjYWxsIHRoZSBwcm9jZWR1cmUgdG8gY2hlY2suICBXZSBtdXN0IGJlCi0JCSAqIGNh cmVmdWwgdG8gcGFzcyB0aGUgZXhwcmVzc2lvbidzIGFjdHVhbCBjb2xsYXRpb24sIHJhdGhl ciB0aGFuIHRoZQotCQkgKiBkYXRhIHR5cGUncyBkZWZhdWx0IGNvbGxhdGlvbiwgdG8gZW5z dXJlIHRoYXQgbm9uLWRldGVybWluaXN0aWMKLQkJICogY29sbGF0aW9ucyBhcmUgY29ycmVj dGx5IGhhbmRsZWQuCisJCSAqIFdlIG11c3QgYmUgY2FyZWZ1bCB0byBwYXNzIHRoZSBleHBy ZXNzaW9uJ3MgYWN0dWFsIGNvbGxhdGlvbiwgcmF0aGVyCisJCSAqIHRoYW4gdGhlIGRhdGEg dHlwZSdzIGRlZmF1bHQgY29sbGF0aW9uLCB0byBlbnN1cmUgdGhhdAorCQkgKiBub24tZGV0 ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4KIAkJICovCi0J CWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKLQkJCSFEYXR1bUdldEJvb2wo T2lkRnVuY3Rpb25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCi0JCQkJCQkJCQkJCSAgIGV4 cHJDb2xsYXRpb24oKE5vZGUgKikgdGxlLT5leHByKSwKLQkJCQkJCQkJCQkJICAgT2JqZWN0 SWRHZXREYXR1bSh0Y2UtPmJ0cmVlX29waW50eXBlKSkpKQorCQlpZiAoIW9wZmFtaWx5X2lz X2VxdWFsaW1hZ2UodGNlLT5idHJlZV9vcGYsIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJ CQkJCQlleHByQ29sbGF0aW9uKChOb2RlICopIHRsZS0+ZXhwcikpKQogCQkJcmV0dXJuOwog CiAJCWV4cHJzID0gbGFwcGVuZChleHBycywgdGxlLT5leHByKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL2NsYXVzZXMuYwppbmRleCA1NWNlYmU0YTc0Yi4uMDdmMjU1MDFkYTkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTY0MTQsMTggKzY0MTQs MjIgQEAgcHVsbF9wYXJhbWlkc193YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoqY29u dGV4dCkKICAqIHNlbWFudGljcyBjb21wYXRpYmxlIHdpdGggdGhlIGdyb3VwaW5nIGVxb3As IG9yLCBmb3IgYSBub25kZXRlcm1pbmlzdGljCiAgKiBjb2xsYXRpb24sIHdoZW4gdGhlIGNv bXBhcmlzb24gYXBwbGllcyBhIGNvbGxhdGlvbiBvdGhlciB0aGFuIHRoZSBjb2x1bW4ncy4K ICAqCi0gKiBGb3IgYSBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbiwgZXZlcnkgb3RoZXIg cmVmZXJlbmNlIGlzIHJlamVjdGVkOiBhCi0gKiBjb21wYXJpc29uIHVuZGVyIGEgZGlmZmVy ZW50IGNvbGxhdGlvbiwgYW5kIGFueSBmdW5jdGlvbiBvciBvcGVyYXRvciBvdmVyCi0gKiB0 aGUgY29sdW1uLCBiZWNhdXNlIHdlIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIGZ1bmN0aW9u IHlpZWxkcyB0aGUgc2FtZQotICogcmVzdWx0IGZvciB2YWx1ZXMgdGhlIGdyb3VwaW5nIHRy ZWF0cyBhcyBlcXVhbCwgYW5kIG1hbnkgZG8gbm90LiAgQSBjb2x1bW4KLSAqIHdpdGggYSBk ZXRlcm1pbmlzdGljIGNvbGxhdGlvbiBpcyBub3QgcmVzdHJpY3RlZCB0aGlzIHdheS4KKyAq IEV2ZXJ5IG90aGVyIHJlZmVyZW5jZSAtLSBhIGNvbXBhcmlzb24gdW5kZXIgYSBkaWZmZXJl bnQgY29sbGF0aW9uLCBvciBhbnkKKyAqIGZ1bmN0aW9uIG9yIG9wZXJhdG9yIG92ZXIgdGhl IGNvbHVtbiAtLSBpcyBvcGFxdWUgdG8gdXMsIHNvIHdlIGFjY2VwdCBpdAorICogb25seSB3 aGVuIHRoZSBncm91cGluZydzIGVxdWFsaXR5IGlzIGltYWdlIGVxdWFsaXR5LiAgVGhlbiB0 aGUgdmFsdWVzIHRoZQorICogZ3JvdXBpbmcgbWVyZ2VzIGFyZSBpbnRlcmNoYW5nZWFibGUg d2l0aG91dCBsb3NzIG9mIHNlbWFudGljIGluZm9ybWF0aW9uLAorICogYW5kIHdoYXRldmVy IHdyYXBzIHRoZSBjb2x1bW4gaXMgYm91bmQgdG8gcmV0dXJuIHRoZSBzYW1lIGFuc3dlciBm b3IgYWxsIG9mCisgKiB0aGVtLiAgV2hlbiBpdCBpcyBub3QgaW1hZ2UgZXF1YWxpdHksIGFz IGZvciBudW1lcmljICgxIGFuZCAxLjApLCBqc29uYiwKKyAqIGZsb2F0OCAoMCBhbmQgLTAp LCByZWNvcmQsIG9yIHRleHQgdW5kZXIgYSBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbiwg bm8KKyAqIHN1Y2ggcmVhc29uaW5nIGlzIGF2YWlsYWJsZSwgYW5kIG1hbnkgd3JhcHBlcnMg ZG8gaW4gZmFjdCBkaXN0aW5ndWlzaCB0aGUKKyAqIHZhbHVlczogMS4wOjp0ZXh0IGlzIG5v dCAxOjp0ZXh0LgogICoKLSAqIFRoaXMgbGVhdmVzIG9uZSBjYXNlIHVuY2F1Z2h0OiB3aXRo IGEgZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24sIGEgZnVuY3Rpb24KLSAqIG92ZXIgdGhlIGNv bHVtbiBjYW4gc3RpbGwgZmVlZCBhIGZpbmVyIGNvbXBhcmlzb24gdGhhbiB0aGUgZGlyZWN0 LW9wZXJhbmQKLSAqIGNoZWNrIHNlZXMsIGZvciBleGFtcGxlIHJlY29yZF9pbWFnZV9vcHMg b3ZlciBhIHJlYnVpbHQgcmVjb3JkLCBvciBzY2FsZSgpCi0gKiBvdmVyIG51bWVyaWMgd2hl cmUgdHdvIGVxdWFsIHZhbHVlcyBkaWZmZXIgaW4gc2NhbGUuICBDYXRjaGluZyBpdCB3b3Vs ZAotICogcmVxdWlyZSBrbm93aW5nIHRoYXQgYSB0eXBlJ3MgZXF1YWxpdHkgaXMgYml0d2lz ZSwgd2hpY2ggd2UgZG8gbm90IHRlc3QKLSAqIGhlcmUuCisgKiBJbWFnZSBlcXVhbGl0eSBp cyBub3QgcXVpdGUgYml0d2lzZSBlcXVhbGl0eSBmb3IgdmFybGVuYSB0eXBlcywgYmVjYXVz ZQorICogVE9BU1QgY29tcHJlc3Npb24gaXMgbm90IGFwcGxpZWQgY29uc2lzdGVudGx5IG9u IGlucHV0LiAgRXhwcmVzc2lvbnMgdGhhdAorICogZXhwb3NlIHBoeXNpY2FsIHJlcHJlc2Vu dGF0aW9uIHJhdGhlciB0aGFuIHZhbHVlLCBwZ19jb2x1bW5fc2l6ZSgpIGZvciBvbmUsCisg KiBjYW4gdGhlcmVmb3JlIHN0aWxsIHRlbGwgYXBhcnQgdmFsdWVzIHRoYXQgdGhlIGdyb3Vw aW5nIG1lcmdlcy4gIFRob3NlIGFyZQorICogb3V0c2lkZSB0aGUgc2VtYW50aWMgY29udHJh Y3QgdGhhdCBhbiBlcXVhbGltYWdlIHByb2NlZHVyZSBkZXNjcmliZXMsIGFuZCB3ZQorICog bWFrZSBubyBhdHRlbXB0IHRvIGRldGVjdCB0aGVtLgogICoKICAqIFJldHVybnMgdHJ1ZSBp ZiBhbnkgc3VjaCBjb25mbGljdCBleGlzdHMuCiAgKi8KQEAgLTY0NzcsMTggKzY0ODEsMjMg QEAgZ3JvdXBpbmdfY29uZmxpY3Rfd2Fsa2VyKE5vZGUgKm5vZGUsIGdyb3VwaW5nX3dhbGtl cl9jdHggKmN0eCkKIAlpZiAoSXNBKG5vZGUsIFZhcikpCiAJewogCQlWYXIJCSAgICp2YXIg PSAoVmFyICopIG5vZGU7CisJCU9pZAkJCWdyb3VwaW5nX2Vxb3AgPSBjdHgtPmdldF9lcW9w KHZhciwgY3R4LT5jYl9jb250ZXh0KTsKIAogCQkvKgogCQkgKiBBIGdyb3VwaW5nIGNvbHVt biByZWFjaGVzIGhlcmUgd2hlbiBpdCB3YXMgbm90IGhhbmRsZWQgYXMgYSBkaXJlY3QKLQkJ ICogb3BlcmFuZCBieSBhIGNvbXBhcmlzb24gbm9kZSBhYm92ZSAoc2VlIHRoZSBmdW5jdGlv biBoZWFkZXIpLiAgVGhhdAotCQkgKiBpcyBzYWZlIGZvciBhIGRldGVybWluaXN0aWMgY29s bGF0aW9uLCBidXQgbm90IGZvciBhCi0JCSAqIG5vbmRldGVybWluaXN0aWMgb25lLCB3aGVy ZSB0aGUgcmVmZXJlbmNlIG1heSBkaXN0aW5ndWlzaCB2YWx1ZXMKLQkJICogdGhlIGdyb3Vw aW5nIGNvbnNpZGVycyBlcXVhbC4gIEEgYmFyZSBib29sZWFuIHF1YWwgaXMgc2FmZSB0b286 Ci0JCSAqIGJvb2xlYW4gaXMgbm90IGNvbGxhdGFibGUsIHNvIGl0IHRha2VzIHRoZSBkZXRl cm1pbmlzdGljIHBhdGggaGVyZS4KKwkJICogb3BlcmFuZCBieSBhIGNvbXBhcmlzb24gbm9k ZSBhYm92ZSAoc2VlIHRoZSBmdW5jdGlvbiBoZWFkZXIpLCBzbyB3ZQorCQkgKiBrbm93IG5v dGhpbmcgYWJvdXQgdGhlIGV4cHJlc3Npb24gaXQgaXMgZW1iZWRkZWQgaW4uICBBY2NlcHQg aXQgb25seQorCQkgKiBpZiB0aGUgZ3JvdXBpbmcncyBlcXVhbGl0eSBpcyBpbWFnZSBlcXVh bGl0eSwgd2hpY2ggbWFrZXMgYW55IHR3bworCQkgKiB2YWx1ZXMgdGhlIGdyb3VwaW5nIG1l cmdlcyBpbnRlcmNoYW5nZWFibGUgZm9yIGV2ZXJ5IGV4cHJlc3Npb24uCisJCSAqCisJCSAq IFRoaXMgc3Vic3VtZXMgdGhlIG5vbmRldGVybWluaXN0aWMtY29sbGF0aW9uIGNhc2U6IHRo ZSBlcXVhbGltYWdlCisJCSAqIHByb2NlZHVyZSBvZiBhIGNvbGxhdGFibGUgdHlwZSBpcyBo YW5kZWQgdGhlIGNvbHVtbidzIGNvbGxhdGlvbiBhbmQKKwkJICogYW5zd2VycyBmYWxzZSBm b3IgYSBub25kZXRlcm1pbmlzdGljIG9uZS4gIEEgYmFyZSBib29sZWFuIHF1YWwgdGFrZXMK KwkJICogdGhpcyBwYXRoIHRvbywgYW5kIHN0YXlzIHNhZmUsIGJvb2xlYW4gZXF1YWxpdHkg YmVpbmcgaW1hZ2UKKwkJICogZXF1YWxpdHkuCiAJCSAqLwotCQlpZiAoT2lkSXNWYWxpZChj dHgtPmdldF9lcW9wKHZhciwgY3R4LT5jYl9jb250ZXh0KSkgJiYKLQkJCU9pZElzVmFsaWQo dmFyLT52YXJjb2xsaWQpICYmCi0JCQkhZ2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWMo dmFyLT52YXJjb2xsaWQpKQorCQlpZiAoT2lkSXNWYWxpZChncm91cGluZ19lcW9wKSAmJgor CQkJIWVxdWFsaXR5X29wX2lzX2VxdWFsaW1hZ2UoZ3JvdXBpbmdfZXFvcCwgdmFyLT52YXJj b2xsaWQpKQogCQkJcmV0dXJuIHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggZWU2OWY4MTk0NWYuLjI2NGE1NTc1 YTA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0xNiw3ICsx Niw2IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAotI2luY2x1ZGUgImFjY2Vzcy9uYnRy ZWUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTMwMzgsNyAr MzAzNyw2IEBAIGluaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQkJICovCiAJCQlTb3J0R3JvdXBDbGF1c2UgKnNnYzsKIAkJCVR5 cGVDYWNoZUVudHJ5ICp0Y2U7Ci0JCQlPaWQJCQllcXVhbGltYWdlcHJvYzsKIAogCQkJLyoK IAkJCSAqIEJ1dCBmaXJzdCwgY2hlY2sgaWYgZXF1YWxpdHkgaW1wbGllcyBpbWFnZSBlcXVh bGl0eSBmb3IgdGhpcwpAQCAtMzA1MSwyMiArMzA0OSwxMyBAQCBpbml0X2dyb3VwaW5nX3Rh cmdldHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkhT2lkSXNW YWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCWVx dWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3Byb2ModGNlLT5idHJlZV9vcGYsCi0JCQkJ CQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCi0JCQkJCQkJCQkJCSAgIHRjZS0+YnRy ZWVfb3BpbnR5cGUsCi0JCQkJCQkJCQkJCSAgIEJURVFVQUxJTUFHRV9QUk9DKTsKLQogCQkJ LyoKLQkJCSAqIElmIHRoZXJlIGlzIG5vIEJURVFVQUxJTUFHRV9QUk9DLCBlYWdlciBhZ2dy ZWdhdGlvbiBpcyBhc3N1bWVkCi0JCQkgKiB0byBiZSB1bnNhZmUuICBPdGhlcndpc2UsIHdl IGNhbGwgdGhlIHByb2NlZHVyZSB0byBjaGVjay4gIFdlCi0JCQkgKiBtdXN0IGJlIGNhcmVm dWwgdG8gcGFzcyB0aGUgZXhwcmVzc2lvbidzIGFjdHVhbCBjb2xsYXRpb24sCisJCQkgKiBX ZSBtdXN0IGJlIGNhcmVmdWwgdG8gcGFzcyB0aGUgZXhwcmVzc2lvbidzIGFjdHVhbCBjb2xs YXRpb24sCiAJCQkgKiByYXRoZXIgdGhhbiB0aGUgZGF0YSB0eXBlJ3MgZGVmYXVsdCBjb2xs YXRpb24sIHRvIGVuc3VyZSB0aGF0CiAJCQkgKiBub24tZGV0ZXJtaW5pc3RpYyBjb2xsYXRp b25zIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4KIAkJCSAqLwotCQkJaWYgKCFPaWRJc1ZhbGlk KGVxdWFsaW1hZ2Vwcm9jKSB8fAotCQkJCSFEYXR1bUdldEJvb2woT2lkRnVuY3Rpb25DYWxs MUNvbGwoZXF1YWxpbWFnZXByb2MsCi0JCQkJCQkJCQkJCQkgICBleHByQ29sbGF0aW9uKChO b2RlICopIGV4cHIpLAotCQkJCQkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bSh0Y2UtPmJ0 cmVlX29waW50eXBlKSkpKQorCQkJaWYgKCFvcGZhbWlseV9pc19lcXVhbGltYWdlKHRjZS0+ YnRyZWVfb3BmLCB0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJCWV4cHJDb2xsYXRp b24oKE5vZGUgKikgZXhwcikpKQogCQkJCXJldHVybiBmYWxzZTsKIAogCQkJLyogQ3JlYXRl IHRoZSBTb3J0R3JvdXBDbGF1c2UuICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9sc3lzY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNo ZS5jCmluZGV4IDllZjM5MjJkMTdjLi4zNjBiYTQ3MGVmMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUg ImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJib290c3RyYXAvYm9vdHN0cmFwLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Ft LmgiCkBAIC0xMDM4LDYgKzEwMzksMTA5IEBAIGdldF9vcGZhbWlseV9wcm9jKE9pZCBvcGZh bWlseSwgT2lkIGxlZnR0eXBlLCBPaWQgcmlnaHR0eXBlLCBpbnQxNiBwcm9jbnVtKQogCXJl dHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBvcGZhbWlseV9pc19lcXVhbGltYWdlCisgKgor ICoJCURvZXMgb3BmYW1pbHkgcHJvbWlzZSAiZXF1YWxpdHkgaW1wbGllcyBpbWFnZSBlcXVh bGl0eSIgZm9yIHRoZSBnaXZlbgorICoJCWlucHV0IHR5cGUgYW5kIGNvbGxhdGlvbj8KKyAq CisgKiBBIHRydWUgcmVzdWx0IG1lYW5zIHRoYXQgd2hlbmV2ZXIgdGhlIG9wZmFtaWx5J3Mg b3JkZXJpbmcgZnVuY3Rpb24gcmVwb3J0cworICogdHdvIHZhbHVlcyBlcXVhbCwgdGhvc2Ug dmFsdWVzIGFyZSBpbnRlcmNoYW5nZWFibGUgd2l0aG91dCBhbnkgbG9zcyBvZgorICogc2Vt YW50aWMgaW5mb3JtYXRpb247IHRoYXQgaXMsIG5vIGV4cHJlc3Npb24gY2FuIHRlbGwgdGhl bSBhcGFydC4gIENhbGxlcnMKKyAqIHJlbHkgb24gdGhpcyB3aGVuIHRoZXkgd2FudCB0byBz dWJzdGl0dXRlIG9uZSBtZW1iZXIgb2YgYW4gZXF1aXZhbGVuY2UKKyAqIGNsYXNzIGZvciBh bm90aGVyLCBhcyBCLXRyZWUgZGVkdXBsaWNhdGlvbiBkb2VzLgorICoKKyAqIEFuIG9wZmFt aWx5IHRoYXQgcmVnaXN0ZXJzIG5vIEJURVFVQUxJTUFHRV9QUk9DIG1ha2VzIG5vIHN1Y2gg cHJvbWlzZSwgc28KKyAqIHdlIG11c3QgYXNzdW1lIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBo b2xkLiAgTm90ZSB0aGF0IGNhbGxlcnMgbXVzdCBwYXNzIHRoZQorICogY29sbGF0aW9uIGFj dHVhbGx5IGluIHVzZSByYXRoZXIgdGhhbiB0aGUgdHlwZSdzIGRlZmF1bHQgY29sbGF0aW9u OiBmb3IgYQorICogY29sbGF0YWJsZSB0eXBlIHRoZSBhbnN3ZXIgZGVwZW5kcyBvbiBpdCwg c2luY2UgYSBub25kZXRlcm1pbmlzdGljCisgKiBjb2xsYXRpb24gaXMgbm90IGltYWdlIGVx dWFsaXR5LgorICovCitib29sCitvcGZhbWlseV9pc19lcXVhbGltYWdlKE9pZCBvcGZhbWls eSwgT2lkIG9wY2ludHlwZSwgT2lkIGNvbGxhdGlvbikKK3sKKwlPaWQJCQllcXVhbGltYWdl cHJvYzsKKworCWVxdWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3Byb2Mob3BmYW1pbHks IG9wY2ludHlwZSwgb3BjaW50eXBlLAorCQkJCQkJCQkJICAgQlRFUVVBTElNQUdFX1BST0Mp OworCisJaWYgKCFPaWRJc1ZhbGlkKGVxdWFsaW1hZ2Vwcm9jKSkKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIERhdHVtR2V0Qm9vbChPaWRGdW5jdGlvbkNhbGwxQ29sbChlcXVhbGlt YWdlcHJvYywgY29sbGF0aW9uLAorCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvcGNp bnR5cGUpKSk7Cit9CisKKy8qCisgKiBlcXVhbGl0eV9vcF9pc19lcXVhbGltYWdlCisgKgor ICoJCURvZXMgZXFvcCBkZWZpbmUgYW4gZXF1aXZhbGVuY2UgdW5kZXIgd2hpY2ggZXF1YWwg dmFsdWVzIGFyZQorICoJCWludGVyY2hhbmdlYWJsZSB3aXRob3V0IGFueSBsb3NzIG9mIHNl bWFudGljIGluZm9ybWF0aW9uPworICoKKyAqIFRoaXMgaXMgdGhlIG9wZXJhdG9yLWxldmVs IGNvdW50ZXJwYXJ0IG9mIG9wZmFtaWx5X2lzX2VxdWFsaW1hZ2UoKSwgZm9yCisgKiBjYWxs ZXJzIHRoYXQga25vdyBvbmx5IHRoZSBlcXVhbGl0eSBvcGVyYXRvciBzb21lIG1lY2hhbmlz bSB1c2VzIHRvIGRlY2lkZQorICogd2hpY2ggdmFsdWVzIHRvIG1lcmdlIC0tIGEgU29ydEdy b3VwQ2xhdXNlJ3MgZXFvcCwgdHlwaWNhbGx5IC0tIGFuZCBub3QgdGhlCisgKiBvcGZhbWls eSBpdCBjYW1lIGZyb20uCisgKgorICogTm90IGtub3dpbmcgdGhlIG9wZmFtaWx5IGlzIHdo eSB3ZSBtdXN0IGRlbWFuZCBhIHByb21pc2UgZnJvbSBldmVyeSBmYW1pbHkKKyAqIGluIHdo aWNoIGVxb3AgaXMgdGhlIGVxdWFsaXR5IG1lbWJlciwgcmF0aGVyIHRoYW4gYWNjZXB0aW5n IHRoZSBmaXJzdCAieWVzIgorICogd2UgZmluZC4gIFRob3NlIGZhbWlsaWVzIG5lZWQgbm90 IGFncmVlOiB0ZXh0ZXEgaXMgdGhlIGVxdWFsaXR5IG1lbWJlciBvZgorICogYm90aCB0ZXh0 X29wcyBhbmQgdGV4dF9wYXR0ZXJuX29wcywgYW5kIHVuZGVyIGEgbm9uZGV0ZXJtaW5pc3Rp YyBjb2xsYXRpb24KKyAqIHRoZXkgZGVzY3JpYmUgZGlmZmVyZW50IGVxdWl2YWxlbmNlcywg dGhlIGZvcm1lciBjYXNlLWZvbGRpbmcgd2hlcmUgdGhlCisgKiBsYXR0ZXIgaXMgYnl0ZXdp c2UuICB0ZXh0X3BhdHRlcm5fb3BzIHJlZ2lzdGVycyBidGVxdWFsaW1hZ2UsIHdoaWNoIGFu c3dlcnMKKyAqIHRydWUgd2hhdGV2ZXIgY29sbGF0aW9uIGl0IGlzIGhhbmRlZCwgc28gdHJ1 c3RpbmcgaXQgYWxvbmUgd291bGQgbGV0IGEKKyAqIGNhbGxlciBzdWJzdGl0dXRlIHZhbHVl cyB0aGF0IGEgY2FzZS1pbnNlbnNpdGl2ZSBncm91cGluZyBtZXJnZWQuCisgKgorICogQSBm YWxzZSByZXN1bHQgbWVhbnMgIm5vdCBwcm92ZW4iLCBub3QgInByb3ZlbiBmYWxzZSIsIGFu ZCBjYWxsZXJzIG11c3QKKyAqIHRyZWF0IGl0IGFzICJub3QgaW1hZ2UgZXF1YWxpdHkiLiAg QSB0eXBlIHdpdGggbm8gb3JkZXJpbmcgb3BjbGFzcyBhdCBhbGwsCisgKiBzdWNoIGFzIHhp ZCwgYWx3YXlzIGxhbmRzIHRoZXJlLgorICoKKyAqICdjb2xsYXRpb24nIG11c3QgYmUgdGhl IGNvbGxhdGlvbiBhY3R1YWxseSBhcHBsaWVkIHRvIHRoZSB2YWx1ZXMsIG5vdCB0aGUKKyAq IHR5cGUncyBkZWZhdWx0OyBzZWUgb3BmYW1pbHlfaXNfZXF1YWxpbWFnZSgpLgorICovCiti b29sCitlcXVhbGl0eV9vcF9pc19lcXVhbGltYWdlKE9pZCBlcW9wLCBPaWQgY29sbGF0aW9u KQoreworCU9pZAkJCWxlZnR0eXBlOworCU9pZAkJCXJpZ2h0dHlwZTsKKwlMaXN0CSAgICpv cGZhbWlsaWVzOworCWJvb2wJCXJlc3VsdDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCW9wX2lu cHV0X3R5cGVzKGVxb3AsICZsZWZ0dHlwZSwgJnJpZ2h0dHlwZSk7CisKKwkvKgorCSAqIEFu IGVxdWFsaW1hZ2UgcHJvY2VkdXJlIGRlc2NyaWJlcyBhIHNpbmdsZSB0eXBlLCBzbyBhIGNy b3NzLXR5cGUKKwkgKiBvcGVyYXRvciBnaXZlcyB1cyBub3RoaW5nIHRvIGFzayBhYm91dC4g IEdyb3VwaW5nIGVxdWFsaXR5IG9wZXJhdG9ycyBhcmUKKwkgKiBuZXZlciBjcm9zcy10eXBl LCBzbyB0aGlzIGNvc3RzIG5vIG9wdGltaXphdGlvbiBpbiBwcmFjdGljZS4KKwkgKi8KKwlp ZiAobGVmdHR5cGUgIT0gcmlnaHR0eXBlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAq IENvbGxlY3QgdGhlIG9wZmFtaWxpZXMgYmVmb3JlIGNhbGxpbmcgYW55IG9mIHRoZWlyIHBy b2NlZHVyZXM6IHRoZQorCSAqIHByb2NlZHVyZSBpcyB1c2VyLXN1cHBsaWVkIGNvZGUgdGhh dCBjYW4gdGhyb3csIGFuZCB3ZSB3b3VsZCByYXRoZXIgbm90CisJICogYmUgaG9sZGluZyBh IHN5c2NhY2hlIGxpc3QgcmVmZXJlbmNlIHdoZW4gaXQgZG9lcy4KKwkgKi8KKwlvcGZhbWls aWVzID0gZ2V0X21lcmdlam9pbl9vcGZhbWlsaWVzKGVxb3ApOworCisJLyogTm8gb3JkZXJp bmcgb3BmYW1pbHkgYXQgYWxsIG1lYW5zIG5vdGhpbmcgcHJvbWlzZWQgYW55dGhpbmcuICov CisJcmVzdWx0ID0gKG9wZmFtaWxpZXMgIT0gTklMKTsKKworCWZvcmVhY2gobGMsIG9wZmFt aWxpZXMpCisJeworCQlpZiAoIW9wZmFtaWx5X2lzX2VxdWFsaW1hZ2UobGZpcnN0X29pZChs YyksIGxlZnR0eXBlLCBjb2xsYXRpb24pKQorCQl7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJbGlzdF9mcmVlKG9wZmFtaWxpZXMpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKwogCiAvKgkJCQktLS0tLS0tLS0tIEFUVFJJQlVURSBDQUNIRVMgLS0t LS0tLS0tLQkJCQkJICovCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNj YWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKaW5kZXggODY1OTgwY2Iw ZjEuLjA5ODg3ZGRmMDkzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2Fj aGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaApAQCAtOTUsNiArOTUs OCBAQCBleHRlcm4gYm9vbCBjb2xsYXRpb25zX2FncmVlX29uX2VxdWFsaXR5KE9pZCBjb2xs MSwgT2lkIGNvbGwyKTsKIGV4dGVybiBib29sIG9wX2lzX3NhZmVfaW5kZXhfbWVtYmVyKE9p ZCBvcG5vKTsKIGV4dGVybiBPaWQJZ2V0X29wZmFtaWx5X3Byb2MoT2lkIG9wZmFtaWx5LCBP aWQgbGVmdHR5cGUsIE9pZCByaWdodHR5cGUsCiAJCQkJCQkJICBpbnQxNiBwcm9jbnVtKTsK K2V4dGVybiBib29sIG9wZmFtaWx5X2lzX2VxdWFsaW1hZ2UoT2lkIG9wZmFtaWx5LCBPaWQg b3BjaW50eXBlLCBPaWQgY29sbGF0aW9uKTsKK2V4dGVybiBib29sIGVxdWFsaXR5X29wX2lz X2VxdWFsaW1hZ2UoT2lkIGVxb3AsIE9pZCBjb2xsYXRpb24pOwogZXh0ZXJuIGNoYXIgKmdl dF9hdHRuYW1lKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgbWlzc2luZ19v ayk7CiBleHRlcm4gQXR0ck51bWJlciBnZXRfYXR0bnVtKE9pZCByZWxpZCwgY29uc3QgY2hh ciAqYXR0bmFtZSk7CiBleHRlcm4gY2hhciBnZXRfYXR0Z2VuZXJhdGVkKE9pZCByZWxpZCwg QXR0ck51bWJlciBhdHRudW0pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9hZ2dyZWdhdGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVn YXRlcy5vdXQKaW5kZXggN2QwNzYxOTk1NmYuLmJhZTE0NWEzYjg4IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKQEAgLTE4MDksNiArMTgwOSwxMzAg QEAgc2VsZWN0IGEsIGNvdW50KCopIGZyb20gdF9oYXZpbmcgZ3JvdXAgYnkgYSBoYXZpbmcg YSA9IHJvdygxLjApOjphdmdfcmVjOwogCiBkcm9wIHRhYmxlIHRfaGF2aW5nOwogZHJvcCB0 eXBlIGF2Z19yZWM7CistLSBBIEhBVklORyBjbGF1c2UgdGhhdCByZWFjaGVzIHRoZSBncm91 cGluZyBjb2x1bW4gdGhyb3VnaCBhIHdyYXBwZXIsIHJhdGhlcgorLS0gdGhhbiBhcyBhIGRp cmVjdCBvcGVyYW5kIG9mIGEgY29tcGFyaXNvbiwgbXVzdCBOT1QgYmUgcHVzaGVkIGRvd24g dG8gV0hFUkUKKy0tIHVubGVzcyB0aGUgZ3JvdXBpbmcncyBlcXVhbGl0eSBpcyBpbWFnZSBl cXVhbGl0eTogdGhlIHdyYXBwZXIgY2FuIHRlbGwgYXBhcnQKKy0tIHZhbHVlcyB0aGF0IEdS T1VQIEJZIG1lcmdlZCBpbnRvIG9uZSBncm91cC4KK2NyZWF0ZSB0ZW1wIHRhYmxlIHRfZXFp bWcgKG4gbnVtZXJpYywgZiBmbG9hdDgsIGoganNvbmIsIGkgaW50KTsKK2luc2VydCBpbnRv IHRfZXFpbWcgdmFsdWVzICgxLCAnMCcsICcxJywgMSksICgxLjAsICctMCcsICcxLjAnLCAx KTsKKy0tIGJhc2VsaW5lczogZWFjaCBvZiB0aGVzZSBpcyBhIHNpbmdsZSBncm91cCBvZiB0 d28gcm93cworc2VsZWN0IG4sIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBieSBuOwor IG4gfCBjb3VudCAKKy0tLSstLS0tLS0tCisgMSB8ICAgICAyCisoMSByb3cpCisKK3NlbGVj dCBmLCBjb3VudCgqKSBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgZjsKKyBmIHwgY291bnQgCist LS0rLS0tLS0tLQorIDAgfCAgICAgMgorKDEgcm93KQorCitzZWxlY3QgaiwgY291bnQoKikg ZnJvbSB0X2VxaW1nIGdyb3VwIGJ5IGo7CisgaiB8IGNvdW50IAorLS0tKy0tLS0tLS0KKyAx IHwgICAgIDIKKygxIHJvdykKKworLS0gbnVtZXJpYyBlcXVhbGl0eSBpZ25vcmVzIHNjYWxl LCBzbyB0aGUgY2xhdXNlIG11c3Qgc3RheSBpbiBIQVZJTkcKK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCBuLCBjb3VudCgqKSBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgbiBoYXZpbmcg bjo6dGV4dCA9ICcxJzsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAg IEdyb3VwIEtleTogbgorICAgRmlsdGVyOiAoKG4pOjp0ZXh0ID0gJzEnOjp0ZXh0KQorICAg LT4gIFNlcSBTY2FuIG9uIHRfZXFpbWcKKyg0IHJvd3MpCisKK3NlbGVjdCBuLCBjb3VudCgq KSBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgbiBoYXZpbmcgbjo6dGV4dCA9ICcxJzsKKyBuIHwg Y291bnQgCistLS0rLS0tLS0tLQorIDEgfCAgICAgMgorKDEgcm93KQorCistLSBmbG9hdDgg ZXF1YWxpdHkgbWVyZ2VzIDAgYW5kIC0wCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg ZiwgY291bnQoKikgZnJvbSB0X2VxaW1nIGdyb3VwIGJ5IGYgaGF2aW5nIGY6OnRleHQgPSAn MCc7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6 IGYKKyAgIEZpbHRlcjogKChmKTo6dGV4dCA9ICcwJzo6dGV4dCkKKyAgIC0+ICBTZXEgU2Nh biBvbiB0X2VxaW1nCisoNCByb3dzKQorCitzZWxlY3QgZiwgY291bnQoKikgZnJvbSB0X2Vx aW1nIGdyb3VwIGJ5IGYgaGF2aW5nIGY6OnRleHQgPSAnMCc7CisgZiB8IGNvdW50IAorLS0t Ky0tLS0tLS0KKyAwIHwgICAgIDIKKygxIHJvdykKKworLS0ganNvbmIgbnVtYmVycyBjb21w YXJlIGFzIG51bWVyaWMgYnV0IHByaW50IHRoZWlyIHRyYWlsaW5nIHplcm9lcworZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0IGosIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBi eSBqIGhhdmluZyBqOjp0ZXh0ID0gJzEnOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFn Z3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBqCisgICBGaWx0ZXI6ICgoaik6OnRleHQgPSAnMSc6 OnRleHQpCisgICAtPiAgU2VxIFNjYW4gb24gdF9lcWltZworKDQgcm93cykKKworc2VsZWN0 IGosIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBieSBqIGhhdmluZyBqOjp0ZXh0ID0g JzEnOworIGogfCBjb3VudCAKKy0tLSstLS0tLS0tCisgMSB8ICAgICAyCisoMSByb3cpCisK Ky0tIFRoZSBzYW1lIGNvbmZsaWN0IHJlYWNoZWQgdGhyb3VnaCBhbiBvdXRlciBXSEVSRSBv dmVyIGEgR1JPVVAgQlkgc3VicXVlcnksCistLSB3aGljaCBzdWJxdWVyeV9wdXNoX3F1YWwg dHVybnMgaW50byBhIEhBVklORyBjbGF1c2UgYmVmb3JlIHdlIGdldCB0byBpdC4KKy0tIEEg V0hFUkUgY2xhdXNlIG1heSBvbmx5IHNlbGVjdCB0aGUgc3VicXVlcnkncyBvdXRwdXQgcm93 cywgbmV2ZXIgYWx0ZXIKKy0tIHRoZW0sIHNvIGJvdGggdGhlIGNvdW50IGFuZCB0aGUgZ3Jv dXAga2V5IG11c3QgYmUgdW5hZmZlY3RlZCBoZXJlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0IG4sIGMgZnJvbSAoc2VsZWN0IG4sIGNvdW50KCopIGMgZnJvbSB0X2VxaW1nIGdy b3VwIGJ5IG4pIHMKK3doZXJlIG46OnRleHQgPSAnMSc7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiB0X2VxaW1n Lm4KKyAgIEZpbHRlcjogKCh0X2VxaW1nLm4pOjp0ZXh0ID0gJzEnOjp0ZXh0KQorICAgLT4g IFNlcSBTY2FuIG9uIHRfZXFpbWcKKyg0IHJvd3MpCisKK3NlbGVjdCBuLCBjIGZyb20gKHNl bGVjdCBuLCBjb3VudCgqKSBjIGZyb20gdF9lcWltZyBncm91cCBieSBuKSBzCit3aGVyZSBu Ojp0ZXh0ID0gJzEnOworIG4gfCBjIAorLS0tKy0tLQorIDEgfCAyCisoMSByb3cpCisKK3Nl bGVjdCBuLCBjIGZyb20gKHNlbGVjdCBuLCBjb3VudCgqKSBjIGZyb20gdF9lcWltZyBncm91 cCBieSBuKSBzCit3aGVyZSBuOjp0ZXh0ID0gJzEuMCc7CisgbiB8IGMgCistLS0rLS0tCiso MCByb3dzKQorCistLSBpbnQgZXF1YWxpdHkgaXMgaW1hZ2UgZXF1YWxpdHksIHNvIGEgd3Jh cHBlZCByZWZlcmVuY2UgaXMgc3RpbGwgcHVzaGFibGUKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCBpLCBjb3VudCgqKSBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgaSBoYXZpbmcgaSAr IDEgPSAyOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBH cm91cCBLZXk6IGkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogaQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHRfZXFpbWcKKyAgICAgICAgICAgICAgIEZpbHRlcjogKChp ICsgMSkgPSAyKQorKDYgcm93cykKKworc2VsZWN0IGksIGNvdW50KCopIGZyb20gdF9lcWlt ZyBncm91cCBieSBpIGhhdmluZyBpICsgMSA9IDI7CisgaSB8IGNvdW50IAorLS0tKy0tLS0t LS0KKyAxIHwgICAgIDIKKygxIHJvdykKKworZHJvcCB0YWJsZSB0X2VxaW1nOwogLS0KIC0t IFRlc3QgR1JPVVAgQlkgbWF0Y2hpbmcgb2Ygam9pbiBjb2x1bW5zIHRoYXQgYXJlIHR5cGUt Y29lcmNlZCBkdWUgdG8gVVNJTkcKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1 YnNlbGVjdC5vdXQKaW5kZXggY2YyOTVkNTY1MDcuLjFkYWQ0OTFmNTI1IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CkBAIC0yMjcwLDYgKzIyNzAsODEg QEAgV0hFUkUgYSAqPSBST1coMS4wKTo6dF9yZWM7CiAgKDEuMCkKICgyIHJvd3MpCiAKK1JP TExCQUNLOworLS0KKy0tIEEgcXVhbCB0aGF0IHJlYWNoZXMgYSBncm91cGluZyBjb2x1bW4g b2YgdGhlIHN1YnF1ZXJ5IHRocm91Z2ggYSB3cmFwcGVyLAorLS0gcmF0aGVyIHRoYW4gYXMg YSBkaXJlY3Qgb3BlcmFuZCBvZiBhIGNvbXBhcmlzb24sIGlzIG9ubHkgcHVzaGFibGUgd2hl biB0aGUKKy0tIGdyb3VwaW5nJ3MgZXF1YWxpdHkgaXMgaW1hZ2UgZXF1YWxpdHkuICBudW1l cmljIGVxdWFsaXR5IGlzIG5vdDogMSBhbmQgMS4wCistLSBhcmUgZXF1YWwgYnV0IGRvIG5v dCBwcmludCBhbGlrZSwgc28gYSBwdXNoZWQtZG93biBxdWFsIGNvdWxkIGJvdGggZHJvcCBh CistLSByb3cgdGhlIGdyb3VwaW5nIHdvdWxkIGhhdmUga2VwdCBhbmQgY2hhbmdlIHdoaWNo IHJvdyByZXByZXNlbnRzIHRoZSBncm91cC4KKy0tCitCRUdJTjsKK0NSRUFURSBURU1QIFRB QkxFIGVxaW1nX251bSAobiBudW1lcmljKTsKK0lOU0VSVCBJTlRPIGVxaW1nX251bSBWQUxV RVMgKDEpLCAoMS4wKTsKKy0tIHRoZSBzdWJxdWVyeSBlbWl0cyBhIHNpbmdsZSByb3csIHNv IHRoZSBvdXRlciBXSEVSRSBjYW4gb25seSBrZWVwIG9yIGRyb3AgaXQKK1NFTEVDVCBuIEZS T00gKFNFTEVDVCBESVNUSU5DVCBuIEZST00gZXFpbWdfbnVtKSBzOworIG4gCistLS0KKyAx CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuIEZST00gKFNFTEVD VCBESVNUSU5DVCBuIEZST00gZXFpbWdfbnVtKSBzIFdIRVJFIG46OnRleHQgPSAnMS4wJzsK KyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBzCisgICBG aWx0ZXI6ICgocy5uKTo6dGV4dCA9ICcxLjAnOjp0ZXh0KQorICAgLT4gIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgIEdyb3VwIEtleTogZXFpbWdfbnVtLm4KKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlcWltZ19udW0KKyg1IHJvd3MpCisKK1NFTEVDVCBuIEZST00gKFNFTEVDVCBE SVNUSU5DVCBuIEZST00gZXFpbWdfbnVtKSBzIFdIRVJFIG46OnRleHQgPSAnMS4wJzsKKyBu IAorLS0tCisoMCByb3dzKQorCistLSBVTklPTiBncm91cHMgYnkgdGhlIHNhbWUgZXF1YWxp dHkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuIEZST00gKFNFTEVDVCBuIEZST00g ZXFpbWdfbnVtIFVOSU9OIFNFTEVDVCBuIEZST00gZXFpbWdfbnVtKSBzCitXSEVSRSBuOjp0 ZXh0ID0gJzEuMCc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIHMKKyAgIEZpbHRlcjogKChzLm4p Ojp0ZXh0ID0gJzEuMCc6OnRleHQpCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg R3JvdXAgS2V5OiBlcWltZ19udW0ubgorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGVxaW1nX251bQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGVxaW1nX251bSBlcWltZ19udW1fMQorKDcgcm93cykKKworU0VMRUNUIG4g RlJPTSAoU0VMRUNUIG4gRlJPTSBlcWltZ19udW0gVU5JT04gU0VMRUNUIG4gRlJPTSBlcWlt Z19udW0pIHMKK1dIRVJFIG46OnRleHQgPSAnMS4wJzsKKyBuIAorLS0tCisoMCByb3dzKQor CistLSBpbnQgZXF1YWxpdHkgaXMgaW1hZ2UgZXF1YWxpdHksIHNvIHRoZSBzYW1lIHNoYXBl IG9mIHF1YWwgaXMgcHVzaGFibGUKK0NSRUFURSBURU1QIFRBQkxFIGVxaW1nX2ludCAoaSBp bnQpOworSU5TRVJUIElOVE8gZXFpbWdfaW50IFZBTFVFUyAoMSksICgxKTsKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBpIEZST00gKFNFTEVDVCBESVNUSU5DVCBpIEZST00gZXFp bWdfaW50KSBzIFdIRVJFIGkgKyAxID0gMjsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBV bmlxdWUKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZXFpbWdfaW50LmkKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlcWltZ19pbnQKKyAgICAgICAgICAgICAgIEZpbHRl cjogKChpICsgMSkgPSAyKQorKDUgcm93cykKKworU0VMRUNUIGkgRlJPTSAoU0VMRUNUIERJ U1RJTkNUIGkgRlJPTSBlcWltZ19pbnQpIHMgV0hFUkUgaSArIDEgPSAyOworIGkgCistLS0K KyAxCisoMSByb3cpCisKIFJPTExCQUNLOwogLS0KIC0tIFRlc3QgdGhhdCBMSU1JVCBjYW4g YmUgcHVzaGVkIHRvIFNPUlQgdGhyb3VnaCBhIHN1YnF1ZXJ5IHRoYXQganVzdCBwcm9qZWN0 cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAppbmRleCA5MWY4MzQyMTY2Zi4u Yzk4OTNlZjE3ZTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0 ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC02 NTIsNiArNjUyLDUyIEBAIHNlbGVjdCBhLCBjb3VudCgqKSBmcm9tIHRfaGF2aW5nIGdyb3Vw IGJ5IGEgaGF2aW5nIGEgPSByb3coMS4wKTo6YXZnX3JlYzsKIGRyb3AgdGFibGUgdF9oYXZp bmc7CiBkcm9wIHR5cGUgYXZnX3JlYzsKIAorLS0gQSBIQVZJTkcgY2xhdXNlIHRoYXQgcmVh Y2hlcyB0aGUgZ3JvdXBpbmcgY29sdW1uIHRocm91Z2ggYSB3cmFwcGVyLCByYXRoZXIKKy0t IHRoYW4gYXMgYSBkaXJlY3Qgb3BlcmFuZCBvZiBhIGNvbXBhcmlzb24sIG11c3QgTk9UIGJl IHB1c2hlZCBkb3duIHRvIFdIRVJFCistLSB1bmxlc3MgdGhlIGdyb3VwaW5nJ3MgZXF1YWxp dHkgaXMgaW1hZ2UgZXF1YWxpdHk6IHRoZSB3cmFwcGVyIGNhbiB0ZWxsIGFwYXJ0CistLSB2 YWx1ZXMgdGhhdCBHUk9VUCBCWSBtZXJnZWQgaW50byBvbmUgZ3JvdXAuCitjcmVhdGUgdGVt cCB0YWJsZSB0X2VxaW1nIChuIG51bWVyaWMsIGYgZmxvYXQ4LCBqIGpzb25iLCBpIGludCk7 CitpbnNlcnQgaW50byB0X2VxaW1nIHZhbHVlcyAoMSwgJzAnLCAnMScsIDEpLCAoMS4wLCAn LTAnLCAnMS4wJywgMSk7CisKKy0tIGJhc2VsaW5lczogZWFjaCBvZiB0aGVzZSBpcyBhIHNp bmdsZSBncm91cCBvZiB0d28gcm93cworc2VsZWN0IG4sIGNvdW50KCopIGZyb20gdF9lcWlt ZyBncm91cCBieSBuOworc2VsZWN0IGYsIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBi eSBmOworc2VsZWN0IGosIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBieSBqOworCist LSBudW1lcmljIGVxdWFsaXR5IGlnbm9yZXMgc2NhbGUsIHNvIHRoZSBjbGF1c2UgbXVzdCBz dGF5IGluIEhBVklORworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IG4sIGNvdW50KCop IGZyb20gdF9lcWltZyBncm91cCBieSBuIGhhdmluZyBuOjp0ZXh0ID0gJzEnOworc2VsZWN0 IG4sIGNvdW50KCopIGZyb20gdF9lcWltZyBncm91cCBieSBuIGhhdmluZyBuOjp0ZXh0ID0g JzEnOworCistLSBmbG9hdDggZXF1YWxpdHkgbWVyZ2VzIDAgYW5kIC0wCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgZiwgY291bnQoKikgZnJvbSB0X2VxaW1nIGdyb3VwIGJ5IGYg aGF2aW5nIGY6OnRleHQgPSAnMCc7CitzZWxlY3QgZiwgY291bnQoKikgZnJvbSB0X2VxaW1n IGdyb3VwIGJ5IGYgaGF2aW5nIGY6OnRleHQgPSAnMCc7CisKKy0tIGpzb25iIG51bWJlcnMg Y29tcGFyZSBhcyBudW1lcmljIGJ1dCBwcmludCB0aGVpciB0cmFpbGluZyB6ZXJvZXMKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBqLCBjb3VudCgqKSBmcm9tIHRfZXFpbWcgZ3Jv dXAgYnkgaiBoYXZpbmcgajo6dGV4dCA9ICcxJzsKK3NlbGVjdCBqLCBjb3VudCgqKSBmcm9t IHRfZXFpbWcgZ3JvdXAgYnkgaiBoYXZpbmcgajo6dGV4dCA9ICcxJzsKKworLS0gVGhlIHNh bWUgY29uZmxpY3QgcmVhY2hlZCB0aHJvdWdoIGFuIG91dGVyIFdIRVJFIG92ZXIgYSBHUk9V UCBCWSBzdWJxdWVyeSwKKy0tIHdoaWNoIHN1YnF1ZXJ5X3B1c2hfcXVhbCB0dXJucyBpbnRv IGEgSEFWSU5HIGNsYXVzZSBiZWZvcmUgd2UgZ2V0IHRvIGl0LgorLS0gQSBXSEVSRSBjbGF1 c2UgbWF5IG9ubHkgc2VsZWN0IHRoZSBzdWJxdWVyeSdzIG91dHB1dCByb3dzLCBuZXZlciBh bHRlcgorLS0gdGhlbSwgc28gYm90aCB0aGUgY291bnQgYW5kIHRoZSBncm91cCBrZXkgbXVz dCBiZSB1bmFmZmVjdGVkIGhlcmUuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qgbiwg YyBmcm9tIChzZWxlY3QgbiwgY291bnQoKikgYyBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgbikg cword2hlcmUgbjo6dGV4dCA9ICcxJzsKK3NlbGVjdCBuLCBjIGZyb20gKHNlbGVjdCBuLCBj b3VudCgqKSBjIGZyb20gdF9lcWltZyBncm91cCBieSBuKSBzCit3aGVyZSBuOjp0ZXh0ID0g JzEnOworc2VsZWN0IG4sIGMgZnJvbSAoc2VsZWN0IG4sIGNvdW50KCopIGMgZnJvbSB0X2Vx aW1nIGdyb3VwIGJ5IG4pIHMKK3doZXJlIG46OnRleHQgPSAnMS4wJzsKKworLS0gaW50IGVx dWFsaXR5IGlzIGltYWdlIGVxdWFsaXR5LCBzbyBhIHdyYXBwZWQgcmVmZXJlbmNlIGlzIHN0 aWxsIHB1c2hhYmxlCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgaSwgY291bnQoKikg ZnJvbSB0X2VxaW1nIGdyb3VwIGJ5IGkgaGF2aW5nIGkgKyAxID0gMjsKK3NlbGVjdCBpLCBj b3VudCgqKSBmcm9tIHRfZXFpbWcgZ3JvdXAgYnkgaSBoYXZpbmcgaSArIDEgPSAyOworCitk cm9wIHRhYmxlIHRfZXFpbWc7CisKIC0tCiAtLSBUZXN0IEdST1VQIEJZIG1hdGNoaW5nIG9m IGpvaW4gY29sdW1ucyB0aGF0IGFyZSB0eXBlLWNvZXJjZWQgZHVlIHRvIFVTSU5HCiAtLQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKaW5kZXggMDc0Mzg2OTRmNmUuLmQ2ZWYz YmFkYWEyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKQEAgLTExMTAsNiAr MTExMCw0NSBAQCBXSEVSRSBhICo9IFJPVygxLjApOjp0X3JlYzsKIAogUk9MTEJBQ0s7CiAK Ky0tCistLSBBIHF1YWwgdGhhdCByZWFjaGVzIGEgZ3JvdXBpbmcgY29sdW1uIG9mIHRoZSBz dWJxdWVyeSB0aHJvdWdoIGEgd3JhcHBlciwKKy0tIHJhdGhlciB0aGFuIGFzIGEgZGlyZWN0 IG9wZXJhbmQgb2YgYSBjb21wYXJpc29uLCBpcyBvbmx5IHB1c2hhYmxlIHdoZW4gdGhlCist LSBncm91cGluZydzIGVxdWFsaXR5IGlzIGltYWdlIGVxdWFsaXR5LiAgbnVtZXJpYyBlcXVh bGl0eSBpcyBub3Q6IDEgYW5kIDEuMAorLS0gYXJlIGVxdWFsIGJ1dCBkbyBub3QgcHJpbnQg YWxpa2UsIHNvIGEgcHVzaGVkLWRvd24gcXVhbCBjb3VsZCBib3RoIGRyb3AgYQorLS0gcm93 IHRoZSBncm91cGluZyB3b3VsZCBoYXZlIGtlcHQgYW5kIGNoYW5nZSB3aGljaCByb3cgcmVw cmVzZW50cyB0aGUgZ3JvdXAuCistLQorQkVHSU47CisKK0NSRUFURSBURU1QIFRBQkxFIGVx aW1nX251bSAobiBudW1lcmljKTsKK0lOU0VSVCBJTlRPIGVxaW1nX251bSBWQUxVRVMgKDEp LCAoMS4wKTsKKworLS0gdGhlIHN1YnF1ZXJ5IGVtaXRzIGEgc2luZ2xlIHJvdywgc28gdGhl IG91dGVyIFdIRVJFIGNhbiBvbmx5IGtlZXAgb3IgZHJvcCBpdAorU0VMRUNUIG4gRlJPTSAo U0VMRUNUIERJU1RJTkNUIG4gRlJPTSBlcWltZ19udW0pIHM7CisKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCBuIEZST00gKFNFTEVDVCBESVNUSU5DVCBuIEZST00gZXFpbWdfbnVt KSBzIFdIRVJFIG46OnRleHQgPSAnMS4wJzsKKworU0VMRUNUIG4gRlJPTSAoU0VMRUNUIERJ U1RJTkNUIG4gRlJPTSBlcWltZ19udW0pIHMgV0hFUkUgbjo6dGV4dCA9ICcxLjAnOworCist LSBVTklPTiBncm91cHMgYnkgdGhlIHNhbWUgZXF1YWxpdHkKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBuIEZST00gKFNFTEVDVCBuIEZST00gZXFpbWdfbnVtIFVOSU9OIFNFTEVD VCBuIEZST00gZXFpbWdfbnVtKSBzCitXSEVSRSBuOjp0ZXh0ID0gJzEuMCc7CisKK1NFTEVD VCBuIEZST00gKFNFTEVDVCBuIEZST00gZXFpbWdfbnVtIFVOSU9OIFNFTEVDVCBuIEZST00g ZXFpbWdfbnVtKSBzCitXSEVSRSBuOjp0ZXh0ID0gJzEuMCc7CisKKy0tIGludCBlcXVhbGl0 eSBpcyBpbWFnZSBlcXVhbGl0eSwgc28gdGhlIHNhbWUgc2hhcGUgb2YgcXVhbCBpcyBwdXNo YWJsZQorQ1JFQVRFIFRFTVAgVEFCTEUgZXFpbWdfaW50IChpIGludCk7CitJTlNFUlQgSU5U TyBlcWltZ19pbnQgVkFMVUVTICgxKSwgKDEpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgaSBGUk9NIChTRUxFQ1QgRElTVElOQ1QgaSBGUk9NIGVxaW1nX2ludCkgcyBXSEVS RSBpICsgMSA9IDI7CisKK1NFTEVDVCBpIEZST00gKFNFTEVDVCBESVNUSU5DVCBpIEZST00g ZXFpbWdfaW50KSBzIFdIRVJFIGkgKyAxID0gMjsKKworUk9MTEJBQ0s7CisKIC0tCiAtLSBU ZXN0IHRoYXQgTElNSVQgY2FuIGJlIHB1c2hlZCB0byBTT1JUIHRocm91Z2ggYSBzdWJxdWVy eSB0aGF0IGp1c3QgcHJvamVjdHMKIC0tIGNvbHVtbnMuICBXZSBjaGVjayBmb3IgdGhhdCBo YXZpbmcgaGFwcGVuZWQgYnkgbG9va2luZyB0byBzZWUgaWYgRVhQTEFJTgo= --------------rGZPqKYv0GmjPq9XWvot9EA2--