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 1quAuO-00GpVW-8O for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Oct 2023 12:16:48 +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 1quAuK-000fEV-BP for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Oct 2023 12:16:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1quAuJ-000fEN-Q7 for pgsql-hackers@lists.postgresql.org; Sat, 21 Oct 2023 12:16:44 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1quAuF-001tPB-J0 for pgsql-hackers@postgresql.org; Sat, 21 Oct 2023 12:16:43 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-99bdeae1d0aso260932866b.1 for ; Sat, 21 Oct 2023 05:16:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garret-ru.20230601.gappssmtp.com; s=20230601; t=1697890598; x=1698495398; darn=postgresql.org; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=fY4rfUUW+9cvtgfsnKtnclnAjbhQQOWSQ3PUPEULlug=; b=M45Nktwe/F+srEljLIRxRIxUhLyw0f3hozwj1zW6t6KZRGlrkh85rz2mnVCG+fY+YU v9eYgbPDWYW8klilSCmGxfVnI0oGrh93RxQsIZ0P+ZmyW2hJoQdoZ4pN4Z6JUqbiaaOw 43HmqL4kPVfagWj9Se27T28OhcRxuYjLhbyZYNAf+IzFaO8ANxQ3d464h7zIPmpFdXNb 3wi5Z1OiHM5ocjFdYnaS8d/TpGSICGjUH+Gb1md7on/toMyWb6S6lLFjHqmcPDXBWnh+ RbaAnhmtranbGmsgBorQRNuxSHfSWPoVSH/p1F81Z2E9eXY/jEc855cZwYr6mTJWwxcL KQfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697890598; x=1698495398; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fY4rfUUW+9cvtgfsnKtnclnAjbhQQOWSQ3PUPEULlug=; b=HzUwHM7Z0hFGe92ux8Lbc51iVGasruRsaJ62ttSkDkUqy4lktOdRmAKpNuYxEhphOv myDn7Q1hFR00It7FyYqpF2vJFIOJEEpbyY4smNUQt0zu22GRcHlZ1kpmHjpg/Z7QyJRm N3roMZU/rH4uRhLq/tLslWrp27y8AK3N/JXk4GF9OrkP16Mj2DnvGtLISoafw+aBLPOi NWIJcSZDVZHfqommGEwSzh5sLSF83PDC2W9FVUE4B/WWOelAHK/VMFPFUmYfC5fE1hmp KKpByCX6F5RlSkdVzqWLnkJ764LroIs4sf0mZejOzHjUKrw4VvJ8R7+VgzqIz27u/uWT D2kA== X-Gm-Message-State: AOJu0YwAwkQp7a7/KCipWrneKY53oxAdLpEYsM6PnFCeD8Iqia+cHxMF Cqg4e9Ufc2ZK0OLBigIqVgGNPp+O3Yf5yVg2pgI= X-Google-Smtp-Source: AGHT+IFTWCY35auZ9Xe0Tug/4uhNczmA6fSSwrVXWq11a+YRsVj7yOSAKv8FjkVCmUwcXELFqiOcew== X-Received: by 2002:a17:907:a08a:b0:9c3:87ff:67b8 with SMTP id hu10-20020a170907a08a00b009c387ff67b8mr2996751ejc.2.1697890597366; Sat, 21 Oct 2023 05:16:37 -0700 (PDT) Received: from [192.168.2.14] ([217.175.216.56]) by smtp.gmail.com with ESMTPSA id w25-20020a17090633d900b0099bcf9c2ec6sm3536087eja.75.2023.10.21.05.16.34 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 21 Oct 2023 05:16:36 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------0kTMooufRScoqVV03oG26pqg" Message-ID: <6cd5caa7-06e1-4460-bf35-00a59da3f677@garret.ru> Date: Sat, 21 Oct 2023 15:16:33 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Konstantin Knizhnik Subject: Custom explain options 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. --------------0kTMooufRScoqVV03oG26pqg Content-Type: multipart/alternative; boundary="------------ITM8XKPvXXYC0ujRK0vMvdTw" --------------ITM8XKPvXXYC0ujRK0vMvdTw Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi hackers, EXPLAIN statement has a list of options (i.e. ANALYZE, BUFFERS, COST,...) which help to provide useful details of query execution. In Neon we have added PREFETCH option which shows information about page prefetching during query execution (prefetching is more critical for Neon architecture because of separation of compute and storage, so it is implemented not only for bitmap heap scan as in Vanilla Postgres, but also for seqscan, indexscan and indexonly scan). Another possible candidate  for explain options is local file cache (extra caching layer above shared buffers which is used to somehow replace file system cache in standalone Postgres). I think that it will be nice to have a generic mechanism which allows extensions to add its own options to EXPLAIN. I have attached the patch with implementation of such mechanism (also available as PR: https://github.com/knizhnik/postgres/pull/1 ) I have demonstrated this mechanism using Bloom extension - just to report number of Bloom matches. Not sure that it is really useful information but it is used mostly as example: explain (analyze,bloom) select * from t where pk=2000; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on t (cost=15348.00..15352.01 rows=1 width=4) (actual time=25.244..25.939 rows=1 loops=1) Recheck Cond: (pk = 2000) Rows Removed by Index Recheck: 292 Heap Blocks: exact=283 Bloom: matches=293 -> Bitmap Index Scan on t_pk_idx (cost=0.00..15348.00 rows=1 width=0) (actual time=25.147..25.147 rows=293 loops=1) Index Cond: (pk = 2000) Bloom: matches=293 Planning: Bloom: matches=0 Planning Time: 0.387 ms Execution Time: 26.053 ms (12 rows) There are two known issues with this proposal: 1. I have to limit total size of all custom metrics - right now it is limited by 128 bytes. It is done to keep|Instrumentation|and some other data structures fixes size. Otherwise maintaining varying parts of this structure is ugly, especially in shared memory 2. Custom extension is added by means of|RegisterCustomInsrumentation|function which is called from|_PG_init| But|_PG_init|is called when extension is loaded and it is loaded on demand when some of extension functions is called (except when extension is included in shared_preload_libraries list), Bloom extension doesn't require it. So if your first statement executed in your session is: explain (analyze,bloom) select * from t where pk=2000; ...you will get error: ERROR: unrecognized EXPLAIN option "bloom" LINE 1: explain (analyze,bloom) select * from t where pk=2000; It happens because at the moment when explain statement parses options, Bloom index is not yet selected and so bloom extension is not loaded and|RegisterCustomInsrumentation|is not yet called. If we repeat the query, then proper result will be displayed (see above). --------------ITM8XKPvXXYC0ujRK0vMvdTw Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi hackers,

EXPLAIN statement has a list of options (i.e. ANALYZE, BUFFERS, COST,...) which help to provide useful details of query execution.<= br> In Neon we have added PREFETCH option which shows information about page prefetching during query execution (prefetching is more critical for Neon
architecture because of separation of compute and storage, so it is implemented not only for bitmap heap scan as in Vanilla Postgres, but also for seqscan, indexscan and indexonly scan). Another possible candidate=C2=A0 for explain options is local file cache (extra caching layer above shared buffers which is used to somehow replace file system cache in standalone Postgres).

I think that it will be nice to have a generic mechanism which allows extensions to add its own options to EXPLAIN.
I have attached the patch with implementation of such mechanism (also available as PR:=C2=A0 https://github.com/knizhnik/postgres/pull/1 )
I have demonstrated this mechanism using Bloom extension - just to report number of Bloom matches.

Not sure that it is really useful information but it is used mostly as example:

explain (analyz=
e,bloom) select * from t where pk=3D2000;
                                                       QUERY PLAN        =
                                               =20
-------------------------------------------------------------------------=
------------------------------------------------
 Bitmap Heap Scan on t  (cost=3D15348.00..15352.01 rows=3D1 width=3D4) (a=
ctual time=3D25.244..25.939 rows=3D1 loops=3D1)
   Recheck Cond: (pk =3D 2000)
   Rows Removed by Index Recheck: 292
   Heap Blocks: exact=3D283
   Bloom: matches=3D293
   ->  Bitmap Index Scan on t_pk_idx  (cost=3D0.00..15348.00 rows=3D1 =
width=3D0) (actual time=3D25.147..25.147 rows=3D293 loops=3D1)
         Index Cond: (pk =3D 2000)
         Bloom: matches=3D293
 Planning:
   Bloom: matches=3D0
 Planning Time: 0.387 ms
 Execution Time: 26.053 ms
(12 rows)

There are two known issues with this proposal:

1. I have to limit total size of all custom metrics - right now it is limited by 128 bytes. It is done to keep=C2=A0I= nstrumentation=C2=A0and some other data structures fixes size. Otherwise maintaining varying parts of this structure is ugly, especially in shared memory

2. Custom extension is added by means of=C2=A0R= egisterCustomInsrumentation=C2=A0function which is called from=C2=A0_= PG_init
But=C2=A0_= PG_init=C2=A0is called when extension is loaded and it is loaded on demand when some of extension functions is called (except when extension is included
in shared_preload_libraries list), Bloom extension doesn't require it. So if your first statement executed in your session is:
 explain (analy=
ze,bloom) select * from t where pk=3D2000;
...you will get error:
ERROR:  unrecog=
nized EXPLAIN option "bloom"
LINE 1: explain (analyze,bloom) select * from t where pk=3D2000;
It happens because at the moment when explain statement parses options, Bloom index is not yet selected and so bloom extension is not loaded and=C2=A0= RegisterCustomInsrumentation=C2=A0is not yet called. If we repeat the query, then proper result will be displayed (see above).

--------------ITM8XKPvXXYC0ujRK0vMvdTw-- --------------0kTMooufRScoqVV03oG26pqg Content-Type: text/plain; charset=UTF-8; name="custom_explain_options.patch" Content-Disposition: attachment; filename="custom_explain_options.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmxvb20uaCBiL2NvbnRyaWIvYmxvb20vYmxv b20uaAppbmRleCAzMzA4MTFlYzYwLi5hZjIzZmZlODIxIDEwMDY0NAotLS0gYS9jb250cmli L2Jsb29tL2Jsb29tLmgKKysrIGIvY29udHJpYi9ibG9vbS9ibG9vbS5oCkBAIC0xNzQsNiAr MTc0LDEzIEBAIHR5cGVkZWYgc3RydWN0IEJsb29tU2Nhbk9wYXF1ZURhdGEKIAogdHlwZWRl ZiBCbG9vbVNjYW5PcGFxdWVEYXRhICpCbG9vbVNjYW5PcGFxdWU7CiAKK3R5cGVkZWYgc3Ry dWN0Cit7CisJdWludDY0IG1hdGNoZXM7Cit9IEJsb29tVXNhZ2U7CisKK2V4dGVybiBCbG9v bVVzYWdlIGJsb29tVXNhZ2U7CisKIC8qIGJsdXRpbHMuYyAqLwogZXh0ZXJuIHZvaWQgaW5p dEJsb29tU3RhdGUoQmxvb21TdGF0ZSAqc3RhdGUsIFJlbGF0aW9uIGluZGV4KTsKIGV4dGVy biB2b2lkIEJsb29tRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIG1ldGFQYWdl KTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmxzY2FuLmMgYi9jb250cmliL2Jsb29t L2Jsc2Nhbi5jCmluZGV4IDYxZDFmNjZiMzguLjg4OTA5NTE5NDMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYmxvb20vYmxzY2FuLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHNjYW4uYwpAQCAt MTY2LDYgKzE2Niw2IEBAIGJsZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJfQogCUZyZWVBY2Nlc3NT dHJhdGVneShiYXMpOwotCisJYmxvb21Vc2FnZS5tYXRjaGVzICs9IG50aWRzOwogCXJldHVy biBudGlkczsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29u dHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggZjIzZmJiMWQ5ZS4uZDc5NTg3NTkyMCAxMDA2 NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9i bHV0aWxzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9u cy5oIgogI2luY2x1ZGUgImJsb29tLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1 dW0uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgpAQCAtMzQsNiArMzUsNTUgQEAKIAogUEdfRlVOQ1RJT05fSU5GT19WMShibGhhbmRs ZXIpOwogCitCbG9vbVVzYWdlIGJsb29tVXNhZ2U7CisKK3N0YXRpYyB2b2lkCitibG9vbVVz YWdlQWRkKEN1c3RvbVJlc291cmNlVXNhZ2UqIGRzdCwgQ3VzdG9tUmVzb3VyY2VVc2FnZSBj b25zdCogYWRkKQoreworCSgoQmxvb21Vc2FnZSopZHN0KS0+bWF0Y2hlcyArPSAoKEJsb29t VXNhZ2UqKWFkZCktPm1hdGNoZXM7Cit9CisKK3N0YXRpYyB2b2lkCitibG9vbVVzYWdlQWNj dW0oQ3VzdG9tUmVzb3VyY2VVc2FnZSogYWNjLCBDdXN0b21SZXNvdXJjZVVzYWdlIGNvbnN0 KiBlbmQsIEN1c3RvbVJlc291cmNlVXNhZ2UgY29uc3QqIHN0YXJ0KQoreworCSgoQmxvb21V c2FnZSopYWNjKS0+bWF0Y2hlcyArPSAoKEJsb29tVXNhZ2UqKWVuZCktPm1hdGNoZXMgLSAo KEJsb29tVXNhZ2UqKXN0YXJ0KS0+bWF0Y2hlczs7Cit9CisKK3N0YXRpYyB2b2lkCitibG9v bVVzYWdlU2hvdyhFeHBsYWluU3RhdGUqIGVzLCBDdXN0b21SZXNvdXJjZVVzYWdlIGNvbnN0 KiB1c2FnZSwgYm9vbCBwbGFubmluZykKK3sKKwlpZiAoZXMtPmZvcm1hdCA9PSBFWFBMQUlO X0ZPUk1BVF9URVhUKQorCXsKKwkJaWYgKHBsYW5uaW5nKQorCQl7CisJCQlFeHBsYWluSW5k ZW50VGV4dChlcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVzLT5zdHIsICJQbGFu bmluZzpcbiIpOworCQkJZXMtPmluZGVudCsrOworCQl9CisJCUV4cGxhaW5JbmRlbnRUZXh0 KGVzKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3RyLCAiQmxvb206Iik7CisJ CWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBtYXRjaGVzPSVsbGQiLAorCQkJCQkJIChs b25nIGxvbmcpICgoQmxvb21Vc2FnZSopdXNhZ2UpLT5tYXRjaGVzKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CisJCWlmIChwbGFubmluZykKKwkJCWVzLT5p bmRlbnQtLTsKKwl9CisJZWxzZQorCXsKKwkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiQmxv b20gTWF0Y2hlcyIsIE5VTEwsCisJCQkJCQkJICAgKChCbG9vbVVzYWdlKil1c2FnZSktPm1h dGNoZXMsIGVzKTsKKwl9Cit9CisKK3N0YXRpYyBDdXN0b21JbnN0cnVtZW50YXRpb24gYmxv b21JbnN0ciA9IHsKKwkiYmxvb20iLAorCXNpemVvZihCbG9vbVVzYWdlKSwKKwkmYmxvb21V c2FnZSwKKwlibG9vbVVzYWdlQWRkLAorCWJsb29tVXNhZ2VBY2N1bSwKKwlibG9vbVVzYWdl U2hvdworfTsKKwogLyogS2luZCBvZiByZWxhdGlvbiBvcHRpb25zIGZvciBibG9vbSBpbmRl eCAqLwogc3RhdGljIHJlbG9wdF9raW5kIGJsX3JlbG9wdF9raW5kOwogCkBAIC03OCw2ICsx MjgsNyBAQCBfUEdfaW5pdCh2b2lkKQogCQlibF9yZWxvcHRfdGFiW2kgKyAxXS5vcHR0eXBl ID0gUkVMT1BUX1RZUEVfSU5UOwogCQlibF9yZWxvcHRfdGFiW2kgKyAxXS5vZmZzZXQgPSBv ZmZzZXRvZihCbG9vbU9wdGlvbnMsIGJpdFNpemVbMF0pICsgc2l6ZW9mKGludCkgKiBpOwog CX0KKwlSZWdpc3RlckN1c3RvbUluc3J1bWVudGF0aW9uKCZibG9vbUluc3RyKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggYzI2NjVmY2U0MS4u YTRhYjBkNmJhMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz b3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKQEAgLTcx LDYgKzcxLDcgQEAKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQJCQlVSU5UNjRD T05TVCgweEEwMDAwMDAwMDAwMDAwMDQpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNB R0UJCQlVSU5UNjRDT05TVCgweEEwMDAwMDAwMDAwMDAwMDUpCiAjZGVmaW5lIFBBUkFMTEVM X0tFWV9CVUZGRVJfVVNBR0UJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwNikKKyNk ZWZpbmUgUEFSQUxMRUxfS0VZX0NVU1RfVVNBR0UJCSAgICBVSU5UNjRDT05TVCgweEEwMDAw MDAwMDAwMDAwMDcpCiAKIC8qCiAgKiBESVNBQkxFX0xFQURFUl9QQVJUSUNJUEFUSU9OIGRp c2FibGVzIHRoZSBsZWFkZXIncyBwYXJ0aWNpcGF0aW9uIGluCkBAIC0xOTcsNiArMTk4LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgQlRMZWFkZXIKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAlXYWxV c2FnZSAgICp3YWx1c2FnZTsKIAlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJY2hhciAg ICAgICAqY3VzdHVzYWdlOwogfSBCVExlYWRlcjsKIAogLyoKQEAgLTE0NjcsNiArMTQ2OSw3 IEBAIF9idF9iZWdpbl9wYXJhbGxlbChCVEJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIGJvb2wg aXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkKIAlCVExlYWRlciAgICpidGxlYWRlciA9IChC VExlYWRlciAqKSBwYWxsb2MwKHNpemVvZihCVExlYWRlcikpOwogCVdhbFVzYWdlICAgKndh bHVzYWdlOwogCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsKKwljaGFyICAgICAgICAqY3Vz dHVzYWdlOwogCWJvb2wJCWxlYWRlcnBhcnRpY2lwYXRlcyA9IHRydWU7CiAJaW50CQkJcXVl cnlsZW47CiAKQEAgLTE1MzIsNiArMTUzNSw5IEBAIF9idF9iZWdpbl9wYXJhbGxlbChCVEJ1 aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIGJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkK IAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCiAJCQkJCQkgICBt dWxfc2l6ZShzaXplb2YoQnVmZmVyVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOwogCXNobV90 b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwlzaG1fdG9jX2VzdGlt YXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCisJCQkJCQkgICBtdWxfc2l6ZShwZ0N1c3RV c2FnZVNpemUsIHBjeHQtPm53b3JrZXJzKSk7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZw Y3h0LT5lc3RpbWF0b3IsIDEpOwogCiAJLyogRmluYWxseSwgZXN0aW1hdGUgUEFSQUxMRUxf S0VZX1FVRVJZX1RFWFQgc3BhY2UgKi8KIAlpZiAoZGVidWdfcXVlcnlfc3RyaW5nKQpAQCAt MTYyNSw2ICsxNjMxLDEwIEBAIF9idF9iZWdpbl9wYXJhbGxlbChCVEJ1aWxkU3RhdGUgKmJ1 aWxkc3RhdGUsIGJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkKIAlidWZmZXJ1c2Fn ZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLAogCQkJCQkJCQkgICBtdWxfc2l6ZShz aXplb2YoQnVmZmVyVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOwogCXNobV90b2NfaW5zZXJ0 KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0JVRkZFUl9VU0FHRSwgYnVmZmVydXNhZ2UpOwor CWN1c3R1c2FnZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLAorCQkJCQkJCQkgbXVs X3NpemUocGdDdXN0VXNhZ2VTaXplLCBwY3h0LT5ud29ya2VycykpOworCXNobV90b2NfaW5z ZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0NVU1RfVVNBR0UsIGN1c3R1c2FnZSk7CisK IAogCS8qIExhdW5jaCB3b3JrZXJzLCBzYXZpbmcgc3RhdHVzIGZvciBsZWFkZXIvY2FsbGVy ICovCiAJTGF1bmNoUGFyYWxsZWxXb3JrZXJzKHBjeHQpOwpAQCAtMTYzOCw2ICsxNjQ4LDcg QEAgX2J0X2JlZ2luX3BhcmFsbGVsKEJUQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwgYm9vbCBp c2NvbmN1cnJlbnQsIGludCByZXF1ZXN0KQogCWJ0bGVhZGVyLT5zbmFwc2hvdCA9IHNuYXBz aG90OwogCWJ0bGVhZGVyLT53YWx1c2FnZSA9IHdhbHVzYWdlOwogCWJ0bGVhZGVyLT5idWZm ZXJ1c2FnZSA9IGJ1ZmZlcnVzYWdlOworCWJ0bGVhZGVyLT5jdXN0dXNhZ2UgPSBjdXN0dXNh Z2U7CiAKIAkvKiBJZiBubyB3b3JrZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBi YWNrIG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLwogCWlmIChwY3h0LT5ud29ya2Vyc19sYXVu Y2hlZCA9PSAwKQpAQCAtMTY3Niw3ICsxNjg3LDcgQEAgX2J0X2VuZF9wYXJhbGxlbChCVExl YWRlciAqYnRsZWFkZXIpCiAJICogb3Igd2UgbWlnaHQgZ2V0IGluY29tcGxldGUgZGF0YS4p CiAJICovCiAJZm9yIChpID0gMDsgaSA8IGJ0bGVhZGVyLT5wY3h0LT5ud29ya2Vyc19sYXVu Y2hlZDsgaSsrKQotCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmYnRsZWFkZXItPmJ1ZmZl cnVzYWdlW2ldLCAmYnRsZWFkZXItPndhbHVzYWdlW2ldKTsKKwkJSW5zdHJBY2N1bVBhcmFs bGVsUXVlcnkoJmJ0bGVhZGVyLT5idWZmZXJ1c2FnZVtpXSwgJmJ0bGVhZGVyLT53YWx1c2Fn ZVtpXSwgYnRsZWFkZXItPmN1c3R1c2FnZSArIHBnQ3VzdFVzYWdlU2l6ZSppKTsKIAogCS8q IEZyZWUgbGFzdCByZWZlcmVuY2UgdG8gTVZDQyBzbmFwc2hvdCwgaWYgb25lIHdhcyB1c2Vk ICovCiAJaWYgKElzTVZDQ1NuYXBzaG90KGJ0bGVhZGVyLT5zbmFwc2hvdCkpCkBAIC0xODEx LDYgKzE4MjIsNyBAQCBfYnRfcGFyYWxsZWxfYnVpbGRfbWFpbihkc21fc2VnbWVudCAqc2Vn LCBzaG1fdG9jICp0b2MpCiAJTE9DS01PREUJaW5kZXhMb2NrbW9kZTsKIAlXYWxVc2FnZSAg ICp3YWx1c2FnZTsKIAlCdWZmZXJVc2FnZSAqYnVmZmVydXNhZ2U7CisJY2hhciAgICAgICAq Y3VzdHVzYWdlOwogCWludAkJCXNvcnRtZW07CiAKICNpZmRlZiBCVFJFRV9CVUlMRF9TVEFU UwpAQCAtMTg5MSw4ICsxOTAzLDEwIEBAIF9idF9wYXJhbGxlbF9idWlsZF9tYWluKGRzbV9z ZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYykKIAkvKiBSZXBvcnQgV0FML2J1ZmZlciB1c2Fn ZSBkdXJpbmcgcGFyYWxsZWwgZXhlY3V0aW9uICovCiAJYnVmZmVydXNhZ2UgPSBzaG1fdG9j X2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UsIGZhbHNlKTsKIAl3YWx1 c2FnZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRSwgZmFs c2UpOworCWN1c3R1c2FnZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX0NV U1RfVVNBR0UsIGZhbHNlKTsKIAlJbnN0ckVuZFBhcmFsbGVsUXVlcnkoJmJ1ZmZlcnVzYWdl W1BhcmFsbGVsV29ya2VyTnVtYmVyXSwKLQkJCQkJCSAgJndhbHVzYWdlW1BhcmFsbGVsV29y a2VyTnVtYmVyXSk7CisJCQkJCQkgICZ3YWx1c2FnZVtQYXJhbGxlbFdvcmtlck51bWJlcl0s CisJCQkJCQkgIGN1c3R1c2FnZSArIFBhcmFsbGVsV29ya2VyTnVtYmVyKnBnQ3VzdFVzYWdl U2l6ZSk7CiAKICNpZmRlZiBCVFJFRV9CVUlMRF9TVEFUUwogCWlmIChsb2dfYnRyZWVfYnVp bGRfc3RhdHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggMTMyMTc4MDdlZS4uMzk1 NTU5MGNiOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTE5LDYgKzExOSw4IEBA IHN0YXRpYyB2b2lkIHNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KGNvbnN0IGNoYXIgKnFs YWJlbCwgaW50IHdoaWNoLAogc3RhdGljIHZvaWQgc2hvd19mb3JlaWduc2Nhbl9pbmZvKEZv cmVpZ25TY2FuU3RhdGUgKmZzc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZv aWQgc2hvd19ldmFsX3BhcmFtcyhCaXRtYXBzZXQgKmJtc19wYXJhbXMsIEV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIGNvbnN0IGNoYXIgKmV4cGxhaW5fZ2V0X2luZGV4X25hbWUoT2lk IGluZGV4SWQpOworc3RhdGljIHZvaWQgc2hvd19jdXN0b21fdXNhZ2UoRXhwbGFpblN0YXRl ICplcywgY29uc3QgY2hhciogdXNhZ2UsCisJCQkJCQkJICBib29sIHBsYW5uaW5nKTsKIHN0 YXRpYyB2b2lkIHNob3dfYnVmZmVyX3VzYWdlKEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IEJ1 ZmZlclVzYWdlICp1c2FnZSwKIAkJCQkJCQkgIGJvb2wgcGxhbm5pbmcpOwogc3RhdGljIHZv aWQgc2hvd193YWxfdXNhZ2UoRXhwbGFpblN0YXRlICplcywgY29uc3QgV2FsVXNhZ2UgKnVz YWdlKTsKQEAgLTE0OSw3ICsxNTEsNiBAQCBzdGF0aWMgdm9pZCBFeHBsYWluUmVzdG9yZUdy b3VwKEV4cGxhaW5TdGF0ZSAqZXMsIGludCBkZXB0aCwgaW50ICpzdGF0ZV9zYXZlKTsKIHN0 YXRpYyB2b2lkIEV4cGxhaW5EdW1teUdyb3VwKGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0 IGNoYXIgKmxhYmVsbmFtZSwKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGlj IHZvaWQgRXhwbGFpblhNTFRhZyhjb25zdCBjaGFyICp0YWduYW1lLCBpbnQgZmxhZ3MsIEV4 cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGljIHZvaWQgRXhwbGFpbkluZGVudFRleHQoRXhwbGFp blN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBFeHBsYWluSlNPTkxpbmVFbmRpbmcoRXhwbGFp blN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBFeHBsYWluWUFNTExpbmVTdGFydGluZyhFeHBs YWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIGVzY2FwZV95YW1sKFN0cmluZ0luZm8gYnVm LCBjb25zdCBjaGFyICpzdHIpOwpAQCAtMTcwLDYgKzE3MSw3IEBAIEV4cGxhaW5RdWVyeShQ YXJzZVN0YXRlICpwc3RhdGUsIEV4cGxhaW5TdG10ICpzdG10LAogCVF1ZXJ5CSAgICpxdWVy eTsKIAlMaXN0CSAgICpyZXdyaXR0ZW47CiAJTGlzdENlbGwgICAqbGM7CisJTGlzdENlbGwg ICAqYzsKIAlib29sCQl0aW1pbmdfc2V0ID0gZmFsc2U7CiAJYm9vbAkJc3VtbWFyeV9zZXQg PSBmYWxzZTsKIApAQCAtMjIyLDExICsyMjQsMjggQEAgRXhwbGFpblF1ZXJ5KFBhcnNlU3Rh dGUgKnBzdGF0ZSwgRXhwbGFpblN0bXQgKnN0bXQsCiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0 aW9uKHBzdGF0ZSwgb3B0LT5sb2NhdGlvbikpKTsKIAkJfQogCQllbHNlCi0JCQllcmVwb3J0 KEVSUk9SLAorCQl7CisJCQlib29sIGZvdW5kID0gZmFsc2U7CisJCQlmb3JlYWNoIChjLCBw Z0N1c3RJbnN0cikKKwkJCXsKKwkJCQlDdXN0b21JbnN0cnVtZW50YXRpb24gKmNpID0gKEN1 c3RvbUluc3RydW1lbnRhdGlvbiopbGZpcnN0KGMpOworCQkJCWlmIChzdHJjbXAob3B0LT5k ZWZuYW1lLCBjaS0+bmFtZSkgPT0gMCkKKwkJCQl7CisJCQkJCWNpLT5zZWxlY3RlZCA9IHRy dWU7CisJCQkJCWVzLT5jdXN0b20gPSB0cnVlOworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmICghZm91bmQpCisJCQl7CisJCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkg ZXJybXNnKCJ1bnJlY29nbml6ZWQgRVhQTEFJTiBvcHRpb24gXCIlc1wiIiwKIAkJCQkJCQlv cHQtPmRlZm5hbWUpLAogCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgb3B0LT5s b2NhdGlvbikpKTsKKwkJCX0KKwkJfQogCX0KIAogCS8qIGNoZWNrIHRoYXQgV0FMIGlzIHVz ZWQgd2l0aCBFWFBMQUlOIEFOQUxZWkUgKi8KQEAgLTMyMCwxMiArMzM5LDE5IEBAIEV4cGxh aW5TdGF0ZSAqCiBOZXdFeHBsYWluU3RhdGUodm9pZCkKIHsKIAlFeHBsYWluU3RhdGUgKmVz ID0gKEV4cGxhaW5TdGF0ZSAqKSBwYWxsb2MwKHNpemVvZihFeHBsYWluU3RhdGUpKTsKKwlM aXN0Q2VsbCogbGM7CiAKIAkvKiBTZXQgZGVmYXVsdCBvcHRpb25zIChtb3N0IGZpZWxkcyBj YW4gYmUgbGVmdCBhcyB6ZXJvZXMpLiAqLwogCWVzLT5jb3N0cyA9IHRydWU7CiAJLyogUHJl cGFyZSBvdXRwdXQgYnVmZmVyLiAqLwogCWVzLT5zdHIgPSBtYWtlU3RyaW5nSW5mbygpOwog CisJLyogUmVzZXQgY3VzdG9tIGluc3RydW1lbnRhdGlvbnMgc2VsZWN0aW9uIGZsYWcgKi8K Kwlmb3JlYWNoIChsYywgcGdDdXN0SW5zdHIpCisJeworCQlDdXN0b21JbnN0cnVtZW50YXRp b24gKmNpID0gKEN1c3RvbUluc3RydW1lbnRhdGlvbiopbGZpcnN0KGxjKTsKKwkJY2ktPnNl bGVjdGVkID0gZmFsc2U7CisJfQogCXJldHVybiBlczsKIH0KIApAQCAtMzk3LDkgKzQyMywx NCBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0aW9ucywK IAkJCQkJcGxhbmR1cmF0aW9uOwogCQlCdWZmZXJVc2FnZSBidWZ1c2FnZV9zdGFydCwKIAkJ CQkJYnVmdXNhZ2U7CisJCUN1c3RvbUluc3RydW1lbnRhdGlvbkRhdGEgY3VzdHVzYWdlX3N0 YXJ0LCBjdXN0dXNhZ2U7CiAKIAkJaWYgKGVzLT5idWZmZXJzKQogCQkJYnVmdXNhZ2Vfc3Rh cnQgPSBwZ0J1ZmZlclVzYWdlOworCisJCWlmIChlcy0+Y3VzdG9tKQorCQkJR2V0Q3VzdG9t SW5zdHJ1bWVudGF0aW9uU3RhdGUoY3VzdHVzYWdlX3N0YXJ0LmRhdGEpOworCiAJCUlOU1RS X1RJTUVfU0VUX0NVUlJFTlQocGxhbnN0YXJ0KTsKIAogCQkvKiBwbGFuIHRoZSBxdWVyeSAq LwpAQCAtNDE1LDkgKzQ0NiwxNCBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBp bnQgY3Vyc29yT3B0aW9ucywKIAkJCUJ1ZmZlclVzYWdlQWNjdW1EaWZmKCZidWZ1c2FnZSwg JnBnQnVmZmVyVXNhZ2UsICZidWZ1c2FnZV9zdGFydCk7CiAJCX0KIAorCQlpZiAoZXMtPmN1 c3RvbSkKKwkJCUFjY3VtdWxhdGVDdXN0b21JbnN0cnVtZW50YXRpb25TdGF0ZShjdXN0dXNh Z2UuZGF0YSwgY3VzdHVzYWdlX3N0YXJ0LmRhdGEpOworCiAJCS8qIHJ1biBpdCAoaWYgbmVl ZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQgKi8KIAkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50 bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAotCQkJCQkgICAmcGxhbmR1 cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CisJCQkJCSAgICZw bGFuZHVyYXRpb24sCisJCQkJCSAgIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwp LAorCQkJCQkgICAoZXMtPmN1c3RvbSA/ICZjdXN0dXNhZ2UgOiBOVUxMKSk7CiAJfQogfQog CkBAIC01MjcsNyArNTYzLDggQEAgdm9pZAogRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJ ICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJ ICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5k dXJhdGlvbiwKLQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKKwkJCSAgIGNv bnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKKwkJCSAgIGNvbnN0IEN1c3RvbUluc3RydW1l bnRhdGlvbkRhdGEgKmN1c3R1c2FnZSkKIHsKIAlEZXN0UmVjZWl2ZXIgKmRlc3Q7CiAJUXVl cnlEZXNjICAqcXVlcnlEZXNjOwpAQCAtNjIzLDYgKzY2MCwxMyBAQCBFeHBsYWluT25lUGxh bihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5T dGF0ZSAqZXMsCiAJCUV4cGxhaW5DbG9zZUdyb3VwKCJQbGFubmluZyIsICJQbGFubmluZyIs IHRydWUsIGVzKTsKIAl9CiAKKwlpZiAoY3VzdHVzYWdlKQorCXsKKwkJRXhwbGFpbk9wZW5H cm91cCgiUGxhbm5pbmciLCAiUGxhbm5pbmciLCB0cnVlLCBlcyk7CisJCXNob3dfY3VzdG9t X3VzYWdlKGVzLCBjdXN0dXNhZ2UtPmRhdGEsIHRydWUpOworCQlFeHBsYWluQ2xvc2VHcm91 cCgiUGxhbm5pbmciLCAiUGxhbm5pbmciLCB0cnVlLCBlcyk7CisJfQorCiAJaWYgKGVzLT5z dW1tYXJ5ICYmIHBsYW5kdXJhdGlvbikKIAl7CiAJCWRvdWJsZQkJcGxhbnRpbWUgPSBJTlNU Ul9USU1FX0dFVF9ET1VCTEUoKnBsYW5kdXJhdGlvbik7CkBAIC0yMTEwLDggKzIxNTQsMTIg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAlpZiAoZXMtPndhbCAmJiBwbGFuc3RhdGUtPmluc3RydW1lbnQpCiAJCXNob3dfd2FsX3Vz YWdlKGVzLCAmcGxhbnN0YXRlLT5pbnN0cnVtZW50LT53YWx1c2FnZSk7CiAKKwkvKiBTaG93 IGN1c3RvbSBpbnN0cnVtZW50YXRpb24gKi8KKwlpZiAoZXMtPmN1c3RvbSAmJiBwbGFuc3Rh dGUtPmluc3RydW1lbnQpCisJCXNob3dfY3VzdG9tX3VzYWdlKGVzLCBwbGFuc3RhdGUtPmlu c3RydW1lbnQtPmN1c3RfdXNhZ2UuZGF0YSwgZmFsc2UpOworCiAJLyogUHJlcGFyZSBwZXIt d29ya2VyIGJ1ZmZlci9XQUwgdXNhZ2UgKi8KLQlpZiAoZXMtPndvcmtlcnNfc3RhdGUgJiYg KGVzLT5idWZmZXJzIHx8IGVzLT53YWwpICYmIGVzLT52ZXJib3NlKQorCWlmIChlcy0+d29y a2Vyc19zdGF0ZSAmJiAoZXMtPmJ1ZmZlcnMgfHwgZXMtPndhbCB8fCBlcy0+Y3VzdG9tKSAm JiBlcy0+dmVyYm9zZSkKIAl7CiAJCVdvcmtlckluc3RydW1lbnRhdGlvbiAqdyA9IHBsYW5z dGF0ZS0+d29ya2VyX2luc3RydW1lbnQ7CiAKQEAgLTIxMjgsNiArMjE3Niw4IEBAIEV4cGxh aW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJc2hv d19idWZmZXJfdXNhZ2UoZXMsICZpbnN0cnVtZW50LT5idWZ1c2FnZSwgZmFsc2UpOwogCQkJ aWYgKGVzLT53YWwpCiAJCQkJc2hvd193YWxfdXNhZ2UoZXMsICZpbnN0cnVtZW50LT53YWx1 c2FnZSk7CisJCQlpZiAoZXMtPmN1c3RvbSkKKwkJCQlzaG93X2N1c3RvbV91c2FnZShlcywg aW5zdHJ1bWVudC0+Y3VzdF91c2FnZS5kYXRhLCBmYWxzZSk7CiAJCQlFeHBsYWluQ2xvc2VX b3JrZXIobiwgZXMpOwogCQl9CiAJfQpAQCAtMzU0NCw2ICszNTk0LDIzIEBAIGV4cGxhaW5f Z2V0X2luZGV4X25hbWUoT2lkIGluZGV4SWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoK KyAqIFNob3cgc2VsZWN0IGN1c3RvbSB1c2FnZSBkZXRhaWxzCisgKi8KK3N0YXRpYyB2b2lk CitzaG93X2N1c3RvbV91c2FnZShFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyKiB1c2Fn ZSwgYm9vbCBwbGFubmluZykKK3sKKwlMaXN0Q2VsbCogbGM7CisKKwlmb3JlYWNoIChsYywg cGdDdXN0SW5zdHIpCisJeworCQlDdXN0b21JbnN0cnVtZW50YXRpb24gKmNpID0gKEN1c3Rv bUluc3RydW1lbnRhdGlvbiopbGZpcnN0KGxjKTsKKwkJaWYgKGNpLT5zZWxlY3RlZCkKKwkJ CWNpLT5zaG93KGVzLCB1c2FnZSwgcGxhbm5pbmcpOworCQl1c2FnZSArPSBjaS0+c2l6ZTsK Kwl9Cit9CisKIC8qCiAgKiBTaG93IGJ1ZmZlciB1c2FnZSBkZXRhaWxzLgogICovCkBAIC00 OTk1LDcgKzUwNjIsNyBAQCBFeHBsYWluWE1MVGFnKGNvbnN0IGNoYXIgKnRhZ25hbWUsIGlu dCBmbGFncywgRXhwbGFpblN0YXRlICplcykKICAqIGRhdGEgZm9yIGEgcGFyYWxsZWwgd29y a2VyIHRoZXJlIG1pZ2h0IGFscmVhZHkgYmUgZGF0YSBvbiB0aGUgY3VycmVudCBsaW5lCiAg KiAoY2YuIEV4cGxhaW5PcGVuV29ya2VyKTsgaW4gdGhhdCBjYXNlLCBkb24ndCBpbmRlbnQg YW55IG1vcmUuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBFeHBsYWluSW5kZW50VGV4dChF eHBsYWluU3RhdGUgKmVzKQogewogCUFzc2VydChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9S TUFUX1RFWFQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDE4ZjcwMzE5ZmMuLjc5 OTk5ODA2OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTU4Myw5ICs1ODMsMTMg QEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJaW5zdHJfdGltZQlwbGFuZHVyYXRpb247 CiAJQnVmZmVyVXNhZ2UgYnVmdXNhZ2Vfc3RhcnQsCiAJCQkJYnVmdXNhZ2U7CisJQ3VzdG9t SW5zdHJ1bWVudGF0aW9uRGF0YSBjdXN0dXNhZ2Vfc3RhcnQsIGN1c3R1c2FnZTsKIAogCWlm IChlcy0+YnVmZmVycykKIAkJYnVmdXNhZ2Vfc3RhcnQgPSBwZ0J1ZmZlclVzYWdlOworCWlm IChlcy0+Y3VzdG9tKQorCQlHZXRDdXN0b21JbnN0cnVtZW50YXRpb25TdGF0ZShjdXN0dXNh Z2Vfc3RhcnQuZGF0YSk7CisKIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHBsYW5zdGFydCk7 CiAKIAkvKiBMb29rIGl0IHVwIGluIHRoZSBoYXNoIHRhYmxlICovCkBAIC02MzAsNiArNjM0 LDggQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9D bGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCW1lbXNldCgmYnVmdXNhZ2UsIDAs IHNpemVvZihCdWZmZXJVc2FnZSkpOwogCQlCdWZmZXJVc2FnZUFjY3VtRGlmZigmYnVmdXNh Z2UsICZwZ0J1ZmZlclVzYWdlLCAmYnVmdXNhZ2Vfc3RhcnQpOwogCX0KKwlpZiAoZXMtPmN1 c3RvbSkKKwkJQWNjdW11bGF0ZUN1c3RvbUluc3RydW1lbnRhdGlvblN0YXRlKGN1c3R1c2Fn ZS5kYXRhLCBjdXN0dXNhZ2Vfc3RhcnQuZGF0YSk7CiAKIAlwbGFuX2xpc3QgPSBjcGxhbi0+ c3RtdF9saXN0OwogCkBAIC02NDAsNyArNjQ2LDkgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShF eGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCiAKIAkJaWYgKHBzdG10LT5jb21tYW5kVHlwZSAhPSBDTURfVVRJTElUWSkKIAkJCUV4 cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBx dWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1 c2FnZSA6IE5VTEwpKTsKKwkJCQkJCSAgICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMt PmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSwKKwkJCQkJCSAgIChlcy0+Y3VzdG9tID8g JmN1c3R1c2FnZSA6IE5VTEwpKTsKIAkJZWxzZQogCQkJRXhwbGFpbk9uZVV0aWxpdHkocHN0 bXQtPnV0aWxpdHlTdG10LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAogCQkJCQkJCSAgcGFy YW1MSSwgcXVlcnlFbnYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMK aW5kZXggMzUxYWI0OTU3YS4uNWI3YTA4MWY3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92 YWN1dW1wYXJhbGxlbC5jCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIFBBUkFMTEVMX1ZB Q1VVTV9LRVlfQlVGRkVSX1VTQUdFCTQKICNkZWZpbmUgUEFSQUxMRUxfVkFDVVVNX0tFWV9X QUxfVVNBR0UJCTUKICNkZWZpbmUgUEFSQUxMRUxfVkFDVVVNX0tFWV9JTkRFWF9TVEFUUwkJ NgorI2RlZmluZSBQQVJBTExFTF9WQUNVVU1fS0VZX0NVU1RPTV9VU0FHRQk3CiAKIC8qCiAg KiBTaGFyZWQgaW5mb3JtYXRpb24gYW1vbmcgcGFyYWxsZWwgd29ya2Vycy4gIFNvIHRoaXMg aXMgYWxsb2NhdGVkIGluIHRoZSBEU00KQEAgLTE4NCw2ICsxODUsOSBAQCBzdHJ1Y3QgUGFy YWxsZWxWYWN1dW1TdGF0ZQogCS8qIFBvaW50cyB0byBXQUwgdXNhZ2UgYXJlYSBpbiBEU00g Ki8KIAlXYWxVc2FnZSAgICp3YWxfdXNhZ2U7CiAKKwkvKiBQb2ludHMgdG8gY3VzdG9tIHVz YWdlIGFyZWEgaW4gRFNNICovCisJY2hhciAqY3VzdG9tX3VzYWdlOworCiAJLyoKIAkgKiBG YWxzZSBpZiB0aGUgaW5kZXggaXMgdG90YWxseSB1bnN1aXRhYmxlIHRhcmdldCBmb3IgYWxs IHBhcmFsbGVsCiAJICogcHJvY2Vzc2luZy4gRm9yIGV4YW1wbGUsIHRoZSBpbmRleCBjb3Vs ZCBiZSA8CkBAIC0yNDIsNiArMjQ2LDcgQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRp b24gcmVsLCBSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogCVBWSW5kU3RhdHMg KmluZHN0YXRzOwogCUJ1ZmZlclVzYWdlICpidWZmZXJfdXNhZ2U7CiAJV2FsVXNhZ2UgICAq d2FsX3VzYWdlOworCWNoYXIgICAgICAgKmN1c3RvbV91c2FnZTsKIAlib29sCSAgICp3aWxs X3BhcmFsbGVsX3ZhY3V1bTsKIAlTaXplCQllc3RfaW5kc3RhdHNfbGVuOwogCVNpemUJCWVz dF9zaGFyZWRfbGVuOwpAQCAtMzEzLDYgKzMxOCw5IEBAIHBhcmFsbGVsX3ZhY3V1bV9pbml0 KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5kZXhlcywKIAlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCiAJCQkJCQkgICBtdWxfc2l6 ZShzaXplb2YoV2FsVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOwogCXNobV90b2NfZXN0aW1h dGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZwY3h0LT5lc3RpbWF0b3IsCisJCQkJCQkgICBtdWxfc2l6ZShwZ0N1c3RVc2FnZVNpemUs IHBjeHQtPm53b3JrZXJzKSk7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3Rp bWF0b3IsIDEpOwogCiAJLyogRmluYWxseSwgZXN0aW1hdGUgUEFSQUxMRUxfVkFDVVVNX0tF WV9RVUVSWV9URVhUIHNwYWNlICovCiAJaWYgKGRlYnVnX3F1ZXJ5X3N0cmluZykKQEAgLTQw Myw2ICs0MTEsMTAgQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogCQkJCQkJCQkgbXVsX3NpemUoc2l6ZW9m KFdhbFVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfV0FMX1VTQUdFLCB3YWxfdXNhZ2UpOwogCXB2cy0+ d2FsX3VzYWdlID0gd2FsX3VzYWdlOworICAgIGN1c3RvbV91c2FnZSA9IHNobV90b2NfYWxs b2NhdGUocGN4dC0+dG9jLAorCQkJCQkJCQkJbXVsX3NpemUocGdDdXN0VXNhZ2VTaXplLCBw Y3h0LT5ud29ya2VycykpOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxf VkFDVVVNX0tFWV9DVVNUT01fVVNBR0UsIGN1c3RvbV91c2FnZSk7CisJcHZzLT5jdXN0b21f dXNhZ2UgPSBjdXN0b21fdXNhZ2U7CiAKIAkvKiBTdG9yZSBxdWVyeSBzdHJpbmcgZm9yIHdv cmtlcnMgKi8KIAlpZiAoZGVidWdfcXVlcnlfc3RyaW5nKQpAQCAtNzA2LDcgKzcxOCw3IEBA IHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3Rh dGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAJCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNU b0ZpbmlzaChwdnMtPnBjeHQpOwogCiAJCWZvciAoaW50IGkgPSAwOyBpIDwgcHZzLT5wY3h0 LT5ud29ya2Vyc19sYXVuY2hlZDsgaSsrKQotCQkJSW5zdHJBY2N1bVBhcmFsbGVsUXVlcnko JnB2cy0+YnVmZmVyX3VzYWdlW2ldLCAmcHZzLT53YWxfdXNhZ2VbaV0pOworCQkJSW5zdHJB Y2N1bVBhcmFsbGVsUXVlcnkoJnB2cy0+YnVmZmVyX3VzYWdlW2ldLCAmcHZzLT53YWxfdXNh Z2VbaV0sIHB2cy0+Y3VzdG9tX3VzYWdlICsgcGdDdXN0VXNhZ2VTaXplKmkpOwogCX0KIAog CS8qCkBAIC05NjQsNiArOTc2LDcgQEAgcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21l bnQgKnNlZywgc2htX3RvYyAqdG9jKQogCVZhY0RlYWRJdGVtcyAqZGVhZF9pdGVtczsKIAlC dWZmZXJVc2FnZSAqYnVmZmVyX3VzYWdlOwogCVdhbFVzYWdlICAgKndhbF91c2FnZTsKKwlj aGFyICAgICAgICpjdXN0b21fdXNhZ2U7CiAJaW50CQkJbmluZGV4ZXM7CiAJY2hhcgkgICAq c2hhcmVkcXVlcnk7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CkBAIC0x MDUzLDggKzEwNjYsMTAgQEAgcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNl Zywgc2htX3RvYyAqdG9jKQogCS8qIFJlcG9ydCBidWZmZXIvV0FMIHVzYWdlIGR1cmluZyBw YXJhbGxlbCBleGVjdXRpb24gKi8KIAlidWZmZXJfdXNhZ2UgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CiAJd2FsX3Vz YWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX1dBTF9VU0FH RSwgZmFsc2UpOworCWN1c3RvbV91c2FnZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxM RUxfVkFDVVVNX0tFWV9DVVNUT01fVVNBR0UsIGZhbHNlKTsKIAlJbnN0ckVuZFBhcmFsbGVs UXVlcnkoJmJ1ZmZlcl91c2FnZVtQYXJhbGxlbFdvcmtlck51bWJlcl0sCi0JCQkJCQkgICZ3 YWxfdXNhZ2VbUGFyYWxsZWxXb3JrZXJOdW1iZXJdKTsKKwkJCQkJCSAgJndhbF91c2FnZVtQ YXJhbGxlbFdvcmtlck51bWJlcl0sCisJCQkJCQkgIGN1c3RvbV91c2FnZSArIHBnQ3VzdFVz YWdlU2l6ZSpQYXJhbGxlbFdvcmtlck51bWJlcik7CiAKIAkvKiBQb3AgdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJl dmlvdXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IGNjMmI4Y2Nh YjcuLjM5ZDk3NTRhMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBA IC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQlVSU5U NjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9KSVRf SU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwOSkKICNkZWZp bmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAw MDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX0NVU1RPTV9VU0FHRQkJVUlOVDY0Q09OU1Qo MHhFMDAwMDAwMDAwMDAwMDBCKQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExFX1FVRVVFX1NJ WkUJCTY1NTM2CiAKQEAgLTYwMCw2ICs2MDEsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJY2hhcgkgICAqcGFyYW1s aXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJV2FsVXNh Z2UgICAqd2FsdXNhZ2Vfc3BhY2U7CisJY2hhciAgICAgICAqY3VzdG9tdXNhZ2Vfc3BhY2U7 CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnRhdGlvbiA9IE5V TEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpqaXRfaW5zdHJ1bWVudGF0aW9uID0g TlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CkBAIC02ODAsNiArNjgyLDEzIEBAIEV4ZWNJbml0 UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAkJ CQkJCSAgIG11bF9zaXplKHNpemVvZihXYWxVc2FnZSksIHBjeHQtPm53b3JrZXJzKSk7CiAJ c2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyoKKwkg KiBTYW1lIHRoaW5nIGZvciBDdXN0b21Vc2FnZS4KKwkgKi8KKwlzaG1fdG9jX2VzdGltYXRl X2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCisJCQkJCQkgICBtdWxfc2l6ZShwZ0N1c3RVc2Fn ZVNpemUsIHBjeHQtPm53b3JrZXJzKSk7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0 LT5lc3RpbWF0b3IsIDEpOworCiAJLyogRXN0aW1hdGUgc3BhY2UgZm9yIHR1cGxlIHF1ZXVl cy4gKi8KIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCiAJCQkJ CQkgICBtdWxfc2l6ZShQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFLCBwY3h0LT5ud29ya2Vy cykpOwpAQCAtNzY4LDYgKzc3NywxMSBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJc2htX3RvY19pbnNlcnQocGN4dC0+ dG9jLCBQQVJBTExFTF9LRVlfV0FMX1VTQUdFLCB3YWx1c2FnZV9zcGFjZSk7CiAJcGVpLT53 YWxfdXNhZ2UgPSB3YWx1c2FnZV9zcGFjZTsKIAorCWN1c3RvbXVzYWdlX3NwYWNlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsCisJCQkJCQkJCQkJIG11bF9zaXplKHBnQ3VzdFVz YWdlU2l6ZSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2Ms IFBBUkFMTEVMX0tFWV9DVVNUT01fVVNBR0UsIGN1c3RvbXVzYWdlX3NwYWNlKTsKKwlwZWkt PmN1c3RvbV91c2FnZSA9IGN1c3RvbXVzYWdlX3NwYWNlOworCiAJLyogU2V0IHVwIHRoZSB0 dXBsZSBxdWV1ZXMgdGhhdCB0aGUgd29ya2VycyB3aWxsIHdyaXRlIGludG8uICovCiAJcGVp LT50cXVldWUgPSBFeGVjUGFyYWxsZWxTZXR1cFR1cGxlUXVldWVzKHBjeHQsIGZhbHNlKTsK IApAQCAtMTE2NCw3ICsxMTc4LDcgQEAgRXhlY1BhcmFsbGVsRmluaXNoKFBhcmFsbGVsRXhl Y3V0b3JJbmZvICpwZWkpCiAJICogZmluaXNoLCBvciB3ZSBtaWdodCBnZXQgaW5jb21wbGV0 ZSBkYXRhLikKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbndvcmtlcnM7IGkrKykKLQkJSW5z dHJBY2N1bVBhcmFsbGVsUXVlcnkoJnBlaS0+YnVmZmVyX3VzYWdlW2ldLCAmcGVpLT53YWxf dXNhZ2VbaV0pOworCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmcGVpLT5idWZmZXJfdXNh Z2VbaV0sICZwZWktPndhbF91c2FnZVtpXSwgcGVpLT5jdXN0b21fdXNhZ2UgKyBwZ0N1c3RV c2FnZVNpemUqaSk7CiAKIAlwZWktPmZpbmlzaGVkID0gdHJ1ZTsKIH0KQEAgLTEzOTcsNiAr MTQxMSw3IEBAIFBhcmFsbGVsUXVlcnlNYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2Mg KnRvYykKIAlGaXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAlCdWZmZXJVc2Fn ZSAqYnVmZmVyX3VzYWdlOwogCVdhbFVzYWdlICAgKndhbF91c2FnZTsKKwljaGFyICpjdXN0 b21fdXNhZ2U7IAogCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CiAJUXVlcnlEZXNjICAqcXVl cnlEZXNjOwogCVNoYXJlZEV4ZWN1dG9ySW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50YXRp b247CkBAIC0xNDcyLDggKzE0ODcsMTAgQEAgUGFyYWxsZWxRdWVyeU1haW4oZHNtX3NlZ21l bnQgKnNlZywgc2htX3RvYyAqdG9jKQogCS8qIFJlcG9ydCBidWZmZXIvV0FMIHVzYWdlIGR1 cmluZyBwYXJhbGxlbCBleGVjdXRpb24uICovCiAJYnVmZmVyX3VzYWdlID0gc2htX3RvY19s b29rdXAodG9jLCBQQVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFLCBmYWxzZSk7CiAJd2FsX3Vz YWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfV0FMX1VTQUdFLCBmYWxz ZSk7CisJY3VzdG9tX3VzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlf Q1VTVE9NX1VTQUdFLCBmYWxzZSk7CiAJSW5zdHJFbmRQYXJhbGxlbFF1ZXJ5KCZidWZmZXJf dXNhZ2VbUGFyYWxsZWxXb3JrZXJOdW1iZXJdLAotCQkJCQkJICAmd2FsX3VzYWdlW1BhcmFs bGVsV29ya2VyTnVtYmVyXSk7CisJCQkJCQkgICZ3YWxfdXNhZ2VbUGFyYWxsZWxXb3JrZXJO dW1iZXJdLAorCQkJCQkJICBjdXN0b21fdXNhZ2UgKyBQYXJhbGxlbFdvcmtlck51bWJlcipw Z0N1c3RVc2FnZVNpemUpOwogCiAJLyogUmVwb3J0IGluc3RydW1lbnRhdGlvbiBkYXRhIGlm IGFueSBpbnN0cnVtZW50YXRpb24gb3B0aW9ucyBhcmUgc2V0LiAqLwogCWlmIChpbnN0cnVt ZW50YXRpb24gIT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2lu c3RydW1lbnQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2luc3RydW1lbnQuYwppbmRleCBl ZTc4YTU3NDlkLi5kODgzYzk5ODc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9pbnN0cnVtZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVudC5j CkBAIC0xNiwxNSArMTYsNjIgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUg ImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog CiBCdWZmZXJVc2FnZSBwZ0J1ZmZlclVzYWdlOwogc3RhdGljIEJ1ZmZlclVzYWdlIHNhdmVf cGdCdWZmZXJVc2FnZTsKIFdhbFVzYWdlCXBnV2FsVXNhZ2U7CiBzdGF0aWMgV2FsVXNhZ2Ug c2F2ZV9wZ1dhbFVzYWdlOwogCitMaXN0KiBwZ0N1c3RJbnN0cjsgLyogZGVzY3JpcHRpb24g b2YgY3VzdG9tIGluc3RyaXVtZW50YXRpb25zICovCitTaXplIHBnQ3VzdFVzYWdlU2l6ZTsK K3N0YXRpYyBDdXN0b21JbnN0cnVtZW50YXRpb25EYXRhIHNhdmVfcGdDdXN0VXNhZ2U7IC8q IHNhdmVkIGN1c3RvbSBpbnN0cnVtZW50YXRpb24gc3RhdGUgKi8KKworCiBzdGF0aWMgdm9p ZCBCdWZmZXJVc2FnZUFkZChCdWZmZXJVc2FnZSAqZHN0LCBjb25zdCBCdWZmZXJVc2FnZSAq YWRkKTsKIHN0YXRpYyB2b2lkIFdhbFVzYWdlQWRkKFdhbFVzYWdlICpkc3QsIFdhbFVzYWdl ICphZGQpOwogCit2b2lkCitSZWdpc3RlckN1c3RvbUluc3J1bWVudGF0aW9uKEN1c3RvbUlu c3RydW1lbnRhdGlvbiogaW5zdCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisJcGdDdXN0SW5zdHIg PSBsYXBwZW5kKHBnQ3VzdEluc3RyLCBpbnN0KTsKKwlwZ0N1c3RVc2FnZVNpemUgKz0gaW5z dC0+c2l6ZTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJaWYgKHBn Q3VzdFVzYWdlU2l6ZSA+IE1BWF9DVVNUT01fSU5TVFJfU0laRSkKKwkJZWxvZyhFUlJPUiwg IlRvdGFsIHNpemUgb2YgY3VzdG9tIGluc3RydW1lbnRhdGlvbnMgZXhjZWVkIGxpbWl0ICVk IiwgIE1BWF9DVVNUT01fSU5TVFJfU0laRSk7Cit9CisKK3ZvaWQKK0dldEN1c3RvbUluc3Ry dW1lbnRhdGlvblN0YXRlKGNoYXIqIGRzdCkKK3sKKwlMaXN0Q2VsbCogbGM7CisKKwlmb3Jl YWNoIChsYywgcGdDdXN0SW5zdHIpCisJeworCQlDdXN0b21JbnN0cnVtZW50YXRpb24gKmNp ID0gKEN1c3RvbUluc3RydW1lbnRhdGlvbiopbGZpcnN0KGxjKTsJCisJCW1lbWNweShkc3Qs IGNpLT51c2FnZSwgY2ktPnNpemUpOworCQlkc3QgKz0gY2ktPnNpemU7CisJfQorfQorCit2 b2lkCitBY2N1bXVsYXRlQ3VzdG9tSW5zdHJ1bWVudGF0aW9uU3RhdGUoY2hhciogZHN0LCBj aGFyIGNvbnN0KiBiZWZvcmUpCit7CisJTGlzdENlbGwqIGxjOworCisJZm9yZWFjaCAobGMs IHBnQ3VzdEluc3RyKQorCXsKKwkJQ3VzdG9tSW5zdHJ1bWVudGF0aW9uICpjaSA9IChDdXN0 b21JbnN0cnVtZW50YXRpb24qKWxmaXJzdChsYyk7CQorCQlpZiAoY2ktPnNlbGVjdGVkKQor CQl7CisJCQltZW1zZXQoZHN0LCAwLCBjaS0+c2l6ZSk7CisJCQljaS0+YWNjdW0oZHN0LCBj aS0+dXNhZ2UsIGJlZm9yZSk7CisJCX0KKwkJZHN0ICs9IGNpLT5zaXplOworCQliZWZvcmUg Kz0gY2ktPnNpemU7CisJfQorfQogCiAvKiBBbGxvY2F0ZSBuZXcgaW5zdHJ1bWVudGF0aW9u IHN0cnVjdHVyZShzKSAqLwogSW5zdHJ1bWVudGF0aW9uICoKQEAgLTQ5LDcgKzk2LDYgQEAg SW5zdHJBbGxvYyhpbnQgbiwgaW50IGluc3RydW1lbnRfb3B0aW9ucywgYm9vbCBhc3luY19t b2RlKQogCQkJaW5zdHJbaV0uYXN5bmNfbW9kZSA9IGFzeW5jX21vZGU7CiAJCX0KIAl9Ci0K IAlyZXR1cm4gaW5zdHI7CiB9CiAKQEAgLTY3LDYgKzExMyw4IEBAIEluc3RySW5pdChJbnN0 cnVtZW50YXRpb24gKmluc3RyLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25zKQogdm9pZAogSW5z dHJTdGFydE5vZGUoSW5zdHJ1bWVudGF0aW9uICppbnN0cikKIHsKKwlMaXN0Q2VsbCAqbGM7 CisJY2hhciogY3VzdF9zdGFydCA9IGluc3RyLT5jdXN0X3VzYWdlX3N0YXJ0LmRhdGE7CiAJ aWYgKGluc3RyLT5uZWVkX3RpbWVyICYmCiAJCSFJTlNUUl9USU1FX1NFVF9DVVJSRU5UX0xB WlkoaW5zdHItPnN0YXJ0dGltZSkpCiAJCWVsb2coRVJST1IsICJJbnN0clN0YXJ0Tm9kZSBj YWxsZWQgdHdpY2UgaW4gYSByb3ciKTsKQEAgLTc3LDYgKzEyNSwxMyBAQCBJbnN0clN0YXJ0 Tm9kZShJbnN0cnVtZW50YXRpb24gKmluc3RyKQogCiAJaWYgKGluc3RyLT5uZWVkX3dhbHVz YWdlKQogCQlpbnN0ci0+d2FsdXNhZ2Vfc3RhcnQgPSBwZ1dhbFVzYWdlOworCisJZm9yZWFj aCAobGMsIHBnQ3VzdEluc3RyKQorCXsKKwkJQ3VzdG9tSW5zdHJ1bWVudGF0aW9uICpjaSA9 IChDdXN0b21JbnN0cnVtZW50YXRpb24qKWxmaXJzdChsYyk7CisJCW1lbWNweShjdXN0X3N0 YXJ0LCBjaS0+dXNhZ2UsIGNpLT5zaXplKTsKKwkJY3VzdF9zdGFydCArPSBjaS0+c2l6ZTsK Kwl9CiB9CiAKIC8qIEV4aXQgZnJvbSBhIHBsYW4gbm9kZSAqLwpAQCAtODUsNiArMTQwLDkg QEAgSW5zdHJTdG9wTm9kZShJbnN0cnVtZW50YXRpb24gKmluc3RyLCBkb3VibGUgblR1cGxl cykKIHsKIAlkb3VibGUJCXNhdmVfdHVwbGVjb3VudCA9IGluc3RyLT50dXBsZWNvdW50Owog CWluc3RyX3RpbWUJZW5kdGltZTsKKwlMaXN0Q2VsbCAqbGM7CisJY2hhciAqY3VzdF9zdGFy dCA9IGluc3RyLT5jdXN0X3VzYWdlX3N0YXJ0LmRhdGE7CisJY2hhciAqY3VzdF91c2FnZSA9 IGluc3RyLT5jdXN0X3VzYWdlLmRhdGE7CiAKIAkvKiBjb3VudCB0aGUgcmV0dXJuZWQgdHVw bGVzICovCiAJaW5zdHItPnR1cGxlY291bnQgKz0gblR1cGxlczsKQEAgLTExMCw3ICsxNjgs MTUgQEAgSW5zdHJTdG9wTm9kZShJbnN0cnVtZW50YXRpb24gKmluc3RyLCBkb3VibGUgblR1 cGxlcykKIAkJV2FsVXNhZ2VBY2N1bURpZmYoJmluc3RyLT53YWx1c2FnZSwKIAkJCQkJCSAg JnBnV2FsVXNhZ2UsICZpbnN0ci0+d2FsdXNhZ2Vfc3RhcnQpOwogCi0JLyogSXMgdGhpcyB0 aGUgZmlyc3QgdHVwbGUgb2YgdGhpcyBjeWNsZT8gKi8KKwlmb3JlYWNoIChsYywgcGdDdXN0 SW5zdHIpCisJeworCQlDdXN0b21JbnN0cnVtZW50YXRpb24gKmNpID0gKEN1c3RvbUluc3Ry dW1lbnRhdGlvbiopbGZpcnN0KGxjKTsKKwkJY2ktPmFjY3VtKGN1c3RfdXNhZ2UsIGNpLT51 c2FnZSwgY3VzdF9zdGFydCk7CisJCWN1c3Rfc3RhcnQgKz0gY2ktPnNpemU7CisJCWN1c3Rf dXNhZ2UgKz0gY2ktPnNpemU7CisJfQorCisgICAgLyogSXMgdGhpcyB0aGUgZmlyc3QgdHVw bGUgb2YgdGhpcyBjeWNsZT8gKi8KIAlpZiAoIWluc3RyLT5ydW5uaW5nKQogCXsKIAkJaW5z dHItPnJ1bm5pbmcgPSB0cnVlOwpAQCAtMTY4LDYgKzIzNCwxMCBAQCBJbnN0ckVuZExvb3Ao SW5zdHJ1bWVudGF0aW9uICppbnN0cikKIHZvaWQKIEluc3RyQWdnTm9kZShJbnN0cnVtZW50 YXRpb24gKmRzdCwgSW5zdHJ1bWVudGF0aW9uICphZGQpCiB7CisJTGlzdENlbGwgKmxjOwor CWNoYXIgKmN1c3RfZHN0ID0gZHN0LT5jdXN0X3VzYWdlLmRhdGE7CisJY2hhciAqY3VzdF9h ZGQgPSBhZGQtPmN1c3RfdXNhZ2UuZGF0YTsKKwogCWlmICghZHN0LT5ydW5uaW5nICYmIGFk ZC0+cnVubmluZykKIAl7CiAJCWRzdC0+cnVubmluZyA9IHRydWU7CkBAIC0xOTMsMzIgKzI2 Myw2OSBAQCBJbnN0ckFnZ05vZGUoSW5zdHJ1bWVudGF0aW9uICpkc3QsIEluc3RydW1lbnRh dGlvbiAqYWRkKQogCiAJaWYgKGRzdC0+bmVlZF93YWx1c2FnZSkKIAkJV2FsVXNhZ2VBZGQo JmRzdC0+d2FsdXNhZ2UsICZhZGQtPndhbHVzYWdlKTsKKworCWZvcmVhY2ggKGxjLCBwZ0N1 c3RJbnN0cikKKwl7CisJCUN1c3RvbUluc3RydW1lbnRhdGlvbiAqY2kgPSAoQ3VzdG9tSW5z dHJ1bWVudGF0aW9uKilsZmlyc3QobGMpOworCQljaS0+YWRkKGN1c3RfZHN0LCBjdXN0X2Fk ZCk7CisJCWN1c3RfZHN0ICs9IGNpLT5zaXplOworCQljdXN0X2FkZCArPSBjaS0+c2l6ZTsK Kwl9CiB9CiAKIC8qIG5vdGUgY3VycmVudCB2YWx1ZXMgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1 dG9yIHN0YXJ0dXAgKi8KIHZvaWQKIEluc3RyU3RhcnRQYXJhbGxlbFF1ZXJ5KHZvaWQpCiB7 CisJTGlzdENlbGwqIGxjOworCWNoYXIqIGN1c3RfZHN0ID0gc2F2ZV9wZ0N1c3RVc2FnZS5k YXRhOworCiAJc2F2ZV9wZ0J1ZmZlclVzYWdlID0gcGdCdWZmZXJVc2FnZTsKIAlzYXZlX3Bn V2FsVXNhZ2UgPSBwZ1dhbFVzYWdlOworCisJZm9yZWFjaCAobGMsIHBnQ3VzdEluc3RyKQor CXsKKwkJQ3VzdG9tSW5zdHJ1bWVudGF0aW9uICpjaSA9IChDdXN0b21JbnN0cnVtZW50YXRp b24qKWxmaXJzdChsYyk7CisJCW1lbWNweShjdXN0X2RzdCwgY2ktPnVzYWdlLCBjaS0+c2l6 ZSk7CisJCWN1c3RfZHN0ICs9IGNpLT5zaXplOworCX0KIH0KIAogLyogcmVwb3J0IHVzYWdl IGFmdGVyIHBhcmFsbGVsIGV4ZWN1dG9yIHNodXRkb3duICovCiB2b2lkCi1JbnN0ckVuZFBh cmFsbGVsUXVlcnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2FnZSAqd2FsdXNhZ2Up CitJbnN0ckVuZFBhcmFsbGVsUXVlcnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2Fn ZSAqd2FsdXNhZ2UsIGNoYXIqIGN1c3RfdXNhZ2UpCiB7CisJTGlzdENlbGwgKmxjOworCWNo YXIqIGN1c3Rfc2F2ZSA9IHNhdmVfcGdDdXN0VXNhZ2UuZGF0YTsKKwogCW1lbXNldChidWZ1 c2FnZSwgMCwgc2l6ZW9mKEJ1ZmZlclVzYWdlKSk7CiAJQnVmZmVyVXNhZ2VBY2N1bURpZmYo YnVmdXNhZ2UsICZwZ0J1ZmZlclVzYWdlLCAmc2F2ZV9wZ0J1ZmZlclVzYWdlKTsKIAltZW1z ZXQod2FsdXNhZ2UsIDAsIHNpemVvZihXYWxVc2FnZSkpOwogCVdhbFVzYWdlQWNjdW1EaWZm KHdhbHVzYWdlLCAmcGdXYWxVc2FnZSwgJnNhdmVfcGdXYWxVc2FnZSk7CisKKwlmb3JlYWNo IChsYywgcGdDdXN0SW5zdHIpCisJeworCQlDdXN0b21JbnN0cnVtZW50YXRpb24gKmNpID0g KEN1c3RvbUluc3RydW1lbnRhdGlvbiopbGZpcnN0KGxjKTsKKwkJY2ktPmFjY3VtKGN1c3Rf dXNhZ2UsIGNpLT51c2FnZSwgY3VzdF9zYXZlKTsKKwkJY3VzdF91c2FnZSArPSBjaS0+c2l6 ZTsKKwkJY3VzdF9zYXZlICs9IGNpLT5zaXplOworCX0KIH0KIAogLyogYWNjdW11bGF0ZSB3 b3JrIGRvbmUgYnkgd29ya2VycyBpbiBsZWFkZXIncyBzdGF0cyAqLwogdm9pZAotSW5zdHJB Y2N1bVBhcmFsbGVsUXVlcnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2FnZSAqd2Fs dXNhZ2UpCitJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeShCdWZmZXJVc2FnZSAqYnVmdXNhZ2Us IFdhbFVzYWdlICp3YWx1c2FnZSwgY2hhciogY3VzdF91c2FnZSkKIHsKKwlMaXN0Q2VsbCAq bGM7CiAJQnVmZmVyVXNhZ2VBZGQoJnBnQnVmZmVyVXNhZ2UsIGJ1ZnVzYWdlKTsKIAlXYWxV c2FnZUFkZCgmcGdXYWxVc2FnZSwgd2FsdXNhZ2UpOworCisJZm9yZWFjaCAobGMsIHBnQ3Vz dEluc3RyKQorCXsKKwkJQ3VzdG9tSW5zdHJ1bWVudGF0aW9uICpjaSA9IChDdXN0b21JbnN0 cnVtZW50YXRpb24qKWxmaXJzdChsYyk7CisJCWNpLT5hZGQoY2ktPnVzYWdlLCBjdXN0X3Vz YWdlKTsKKwkJY3VzdF91c2FnZSArPSBjaS0+c2l6ZTsKKwl9CiB9CiAKIC8qIGRzdCArPSBh ZGQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCAzZDNlNjMyYTBjLi5kMjYzOWJl OGM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC00MSw2ICs0MSw3IEBAIHR5cGVk ZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCWJvb2wJCXZlcmJvc2U7CQkvKiBiZSB2ZXJib3Nl ICovCiAJYm9vbAkJYW5hbHl6ZTsJCS8qIHByaW50IGFjdHVhbCB0aW1lcyAqLwogCWJvb2wJ CWNvc3RzOwkJCS8qIHByaW50IGVzdGltYXRlZCBjb3N0cyAqLworCWJvb2wJCWN1c3RvbTsJ CSAgICAvKiBwcmludCBjdXN0b20gdXNhZ2UgKi8KIAlib29sCQlidWZmZXJzOwkJLyogcHJp bnQgYnVmZmVyIHVzYWdlICovCiAJYm9vbAkJd2FsOwkJCS8qIHByaW50IFdBTCB1c2FnZSAq LwogCWJvb2wJCXRpbWluZzsJCQkvKiBwcmludCBkZXRhaWxlZCBub2RlIHRpbWluZyAqLwpA QCAtOTIsNyArOTMsOCBAQCBleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkgICBFeHBsYWluU3Rh dGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCSAgIFBhcmFtTGlzdElu Zm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKIAkJCQkJCSAgIGNvbnN0 IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKLQkJCQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdl ICpidWZ1c2FnZSk7CisJCQkJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCisJ CQkJCQkgICBjb25zdCBDdXN0b21JbnN0cnVtZW50YXRpb25EYXRhICpjdXN0dXNhZ2UpOwog CiBleHRlcm4gdm9pZCBFeHBsYWluUHJpbnRQbGFuKEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5 RGVzYyAqcXVlcnlEZXNjKTsKIGV4dGVybiB2b2lkIEV4cGxhaW5QcmludFRyaWdnZXJzKEV4 cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKQEAgLTEyNSw1ICsxMjcs NiBAQCBleHRlcm4gdm9pZCBFeHBsYWluT3Blbkdyb3VwKGNvbnN0IGNoYXIgKm9ianR5cGUs IGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIAkJCQkJCQkgYm9vbCBsYWJlbGVkLCBFeHBsYWlu U3RhdGUgKmVzKTsKIGV4dGVybiB2b2lkIEV4cGxhaW5DbG9zZUdyb3VwKGNvbnN0IGNoYXIg Km9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIAkJCQkJCQkgIGJvb2wgbGFiZWxl ZCwgRXhwbGFpblN0YXRlICplcyk7CitleHRlcm4gdm9pZCBFeHBsYWluSW5kZW50VGV4dChF eHBsYWluU3RhdGUgKmVzKTsKIAogI2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjUGFyYWxsZWwuaAppbmRleCAzOWE4NzkyYTMxLi4wMjY5OTgy OGEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFyYWxsZWwuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFyYWxsZWwuaApAQCAtMjcsNiArMjcs NyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEV4ZWN1dG9ySW5mbwogCVBhcmFsbGVsQ29u dGV4dCAqcGN4dDsJCS8qIHBhcmFsbGVsIGNvbnRleHQgd2UncmUgdXNpbmcgKi8KIAlCdWZm ZXJVc2FnZSAqYnVmZmVyX3VzYWdlOwkvKiBwb2ludHMgdG8gYnVmdXNhZ2UgYXJlYSBpbiBE U00gKi8KIAlXYWxVc2FnZSAgICp3YWxfdXNhZ2U7CQkvKiB3YWx1c2FnZSBhcmVhIGluIERT TSAqLworCWNoYXIgKmN1c3RvbV91c2FnZTsgICAgICAgICAvKiBwb2ludHMgdG8gY3VzdGlv bSB1c2FnZSBhcmVhIGluIERTTSAqLwogCVNoYXJlZEV4ZWN1dG9ySW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50YXRpb247IC8qIG9wdGlvbmFsICovCiAJc3RydWN0IFNoYXJlZEppdElu c3RydW1lbnRhdGlvbiAqaml0X2luc3RydW1lbnRhdGlvbjsJLyogb3B0aW9uYWwgKi8KIAlk c2FfYXJlYSAgICphcmVhOwkJCS8qIHBvaW50cyB0byBEU0EgYXJlYSBpbiBEU00gKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAppbmRleCA4N2U1ZTIxODNiLi45MWQ4NWNmM2M4 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCkBAIC0xNCw3ICsxNCw3IEBACiAj ZGVmaW5lIElOU1RSVU1FTlRfSAogCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkvaW5zdHJfdGlt ZS5oIgotCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogCiAvKgogICogQnVmZmVyVXNh Z2UgYW5kIFdhbFVzYWdlIGNvdW50ZXJzIGtlZXAgYmVpbmcgaW5jcmVtZW50ZWQgaW5maW5p dGVseSwKQEAgLTYzLDYgKzYzLDM2IEBAIHR5cGVkZWYgZW51bSBJbnN0cnVtZW50T3B0aW9u CiAJSU5TVFJVTUVOVF9BTEwgPSBQR19JTlQzMl9NQVgKIH0gSW5zdHJ1bWVudE9wdGlvbjsK IAorLyoKKyAqIE1heGltYWwgdG90YWwgc2l6ZSBvZiBhbGwgY3VzdG9tIGludHJ1bWVudGF0 aW9ucworICovCisjZGVmaW5lIE1BWF9DVVNUT01fSU5TVFJfU0laRSAxMjgKKwordHlwZWRl ZiBzdHJ1Y3QgeworCWNoYXIgZGF0YVtNQVhfQ1VTVE9NX0lOU1RSX1NJWkVdOworfSBDdXN0 b21JbnN0cnVtZW50YXRpb25EYXRhOworCit0eXBlZGVmIHZvaWQgQ3VzdG9tUmVzb3VyY2VV c2FnZTsKK3R5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZSBFeHBsYWluU3RhdGU7Cit0eXBl ZGVmIHZvaWQgKCpjdXN0X2luc3RyX2FkZF90KShDdXN0b21SZXNvdXJjZVVzYWdlKiBkc3Qs IEN1c3RvbVJlc291cmNlVXNhZ2UgY29uc3QqIGFkZCk7Cit0eXBlZGVmIHZvaWQgKCpjdXN0 X2luc3RyX2FjY3VtX3QpKEN1c3RvbVJlc291cmNlVXNhZ2UqIGFjYywgQ3VzdG9tUmVzb3Vy Y2VVc2FnZSBjb25zdCogZW5kLCBDdXN0b21SZXNvdXJjZVVzYWdlIGNvbnN0KiBzdGFydCk7 Cit0eXBlZGVmIHZvaWQgKCpjdXN0X2luc3RyX3Nob3dfdCkoRXhwbGFpblN0YXRlKiBlcywg Q3VzdG9tUmVzb3VyY2VVc2FnZSBjb25zdCogdXNhZ2UsIGJvb2wgcGxhbm5pbmcpOworCit0 eXBlZGVmIHN0cnVjdAoreworCWNoYXIgY29uc3QqICAgICAgICAgIG5hbWU7IC8qIGluc3Ry dW1lbnRhdGlvbiBuYW1lIChhcyB3aWxsIGJlIHJlY29uZ25pemVkIGluIEVYUExBSU4gb3B0 aW9ucyAqLworCVNpemUgICAgICAgICAgICAgICAgIHNpemU7CisJQ3VzdG9tUmVzb3VyY2VV c2FnZSogdXNhZ2U7CisJY3VzdF9pbnN0cl9hZGRfdCAgICAgYWRkOworCWN1c3RfaW5zdHJf YWNjdW1fdCAgIGFjY3VtOworCWN1c3RfaW5zdHJfc2hvd190ICAgIHNob3c7CisJYm9vbCAg ICAgICAgICAgICAgICAgc2VsZWN0ZWQ7IC8qIHNlbGVjdGVkIGluIEVYUExBSU4gb3B0aW9u cyAqLworfSBDdXN0b21JbnN0cnVtZW50YXRpb247CisKK2V4dGVybiBQR0RMTElNUE9SVCBM aXN0KiBwZ0N1c3RJbnN0cjsgLyogZGVzY3JpcHRpb24gb2YgY3VzdG9tIGluc3RydW1lbnRh dGlvbnMgKi8KK2V4dGVybiBTaXplICAgICAgICAgICAgICBwZ0N1c3RVc2FnZVNpemU7CisK KwogdHlwZWRlZiBzdHJ1Y3QgSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogUGFyYW1ldGVycyBz ZXQgYXQgbm9kZSBjcmVhdGlvbjogKi8KQEAgLTg4LDYgKzExOCw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluc3RydW1lbnRhdGlvbgogCWRvdWJsZQkJbmZpbHRlcmVkMjsJCS8qICMgb2YgdHVw bGVzIHJlbW92ZWQgYnkgIm90aGVyIiBxdWFscyAqLwogCUJ1ZmZlclVzYWdlIGJ1ZnVzYWdl OwkJLyogdG90YWwgYnVmZmVyIHVzYWdlICovCiAJV2FsVXNhZ2UJd2FsdXNhZ2U7CQkvKiB0 b3RhbCBXQUwgdXNhZ2UgKi8KKwlDdXN0b21JbnN0cnVtZW50YXRpb25EYXRhIGN1c3RfdXNh Z2Vfc3RhcnQ7IC8qIHN0YXRlIG9mIGN1c3RvbSB1c2FnZSBhdCBzdGFydCAqLworCUN1c3Rv bUluc3RydW1lbnRhdGlvbkRhdGEgY3VzdF91c2FnZTsgLyogdG90YWwgY3VzdG9tICB1c2Fn ZSAqLwogfSBJbnN0cnVtZW50YXRpb247CiAKIHR5cGVkZWYgc3RydWN0IFdvcmtlckluc3Ry dW1lbnRhdGlvbgpAQCAtOTksNiArMTMxLDExIEBAIHR5cGVkZWYgc3RydWN0IFdvcmtlcklu c3RydW1lbnRhdGlvbgogZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZmZlclVzYWdlIHBnQnVmZmVy VXNhZ2U7CiBleHRlcm4gUEdETExJTVBPUlQgV2FsVXNhZ2UgcGdXYWxVc2FnZTsKIAorCitl eHRlcm4gdm9pZCBSZWdpc3RlckN1c3RvbUluc3J1bWVudGF0aW9uKEN1c3RvbUluc3RydW1l bnRhdGlvbiogaW5zdCk7CitleHRlcm4gdm9pZCBHZXRDdXN0b21JbnN0cnVtZW50YXRpb25T dGF0ZShjaGFyKiBkc3QpOworZXh0ZXJuIHZvaWQgQWNjdW11bGF0ZUN1c3RvbUluc3RydW1l bnRhdGlvblN0YXRlKGNoYXIqIGRzdCwgY2hhciBjb25zdCogYmVmb3JlKTsKKwogZXh0ZXJu IEluc3RydW1lbnRhdGlvbiAqSW5zdHJBbGxvYyhpbnQgbiwgaW50IGluc3RydW1lbnRfb3B0 aW9ucywKIAkJCQkJCQkJICAgYm9vbCBhc3luY19tb2RlKTsKIGV4dGVybiB2b2lkIEluc3Ry SW5pdChJbnN0cnVtZW50YXRpb24gKmluc3RyLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25zKTsK QEAgLTEwOCw4ICsxNDUsOCBAQCBleHRlcm4gdm9pZCBJbnN0clVwZGF0ZVR1cGxlQ291bnQo SW5zdHJ1bWVudGF0aW9uICppbnN0ciwgZG91YmxlIG5UdXBsZXMpOwogZXh0ZXJuIHZvaWQg SW5zdHJFbmRMb29wKEluc3RydW1lbnRhdGlvbiAqaW5zdHIpOwogZXh0ZXJuIHZvaWQgSW5z dHJBZ2dOb2RlKEluc3RydW1lbnRhdGlvbiAqZHN0LCBJbnN0cnVtZW50YXRpb24gKmFkZCk7 CiBleHRlcm4gdm9pZCBJbnN0clN0YXJ0UGFyYWxsZWxRdWVyeSh2b2lkKTsKLWV4dGVybiB2 b2lkIEluc3RyRW5kUGFyYWxsZWxRdWVyeShCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsIFdhbFVz YWdlICp3YWx1c2FnZSk7Ci1leHRlcm4gdm9pZCBJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeShC dWZmZXJVc2FnZSAqYnVmdXNhZ2UsIFdhbFVzYWdlICp3YWx1c2FnZSk7CitleHRlcm4gdm9p ZCBJbnN0ckVuZFBhcmFsbGVsUXVlcnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2Fn ZSAqd2FsdXNhZ2UsIGNoYXIqIGN1c3R1c2FnZSk7CitleHRlcm4gdm9pZCBJbnN0ckFjY3Vt UGFyYWxsZWxRdWVyeShCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsIFdhbFVzYWdlICp3YWx1c2Fn ZSwgY2hhciogY3VzdHVzYWdlKTsKIGV4dGVybiB2b2lkIEJ1ZmZlclVzYWdlQWNjdW1EaWZm KEJ1ZmZlclVzYWdlICpkc3QsCiAJCQkJCQkJCSBjb25zdCBCdWZmZXJVc2FnZSAqYWRkLCBj b25zdCBCdWZmZXJVc2FnZSAqc3ViKTsKIGV4dGVybiB2b2lkIFdhbFVzYWdlQWNjdW1EaWZm KFdhbFVzYWdlICpkc3QsIGNvbnN0IFdhbFVzYWdlICphZGQsCg== --------------0kTMooufRScoqVV03oG26pqg--