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 1wcUBH-003O1r-3C for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 20:26:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcUBG-002Vb4-2g for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 20:26:42 +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.96) (envelope-from ) id 1wcUBG-002Vag-0c for pgsql-hackers@lists.postgresql.org; Wed, 24 Jun 2026 20:26:42 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wcUB7-000000005bN-11eP for pgsql-hackers@lists.postgresql.org; Wed, 24 Jun 2026 20:26:41 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 75A703ED61; Wed, 24 Jun 2026 20:26:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1782332791; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0f/1yzdFywwzUpjD+qDN6LSyfb1ti7/lLyTUzuCgGxw=; b=kUSdolqlphEJN2ifwVhxzqn2yocKq+mUqtVPS1u3PuOXX033Rm032EH4HsQUGLxTFhUaY+ WfhJEQOHHMOAvE3K7iSa7lkhC0LbGSEyEZoHfPL9BCN/C8RPLlGnoh88MLnoN77BEzneup xN2KAh3CFGnMHE3EgVr0OtXVIecvD2zUu3IrSQKB+vomX7/ipdj4TZgkvPNXzUnPdQdK1O SA5UV3Df9SJsEqGpL/RvtblDt8JgBalLMvKkiIjl5ePGqKDzVU0dsatWyWQd0O5WTiokrh GQs1p3JNRSYJGqxi6Nq5KVYWfsZV3960eVJsf8ofhHNDaP+3PAJjmc7BJ2aVLA== Content-Type: multipart/mixed; boundary="------------xDGiXotXhDZtLw3h0Nc02iS7" Message-ID: Date: Wed, 24 Jun 2026 22:26:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Tomas Vondra Subject: Re: Adding basic NUMA awareness To: Jakub Wartak Cc: Andres Freund , Alexey Makhmutov , PostgreSQL Hackers References: <5bc6d309-61fe-4d8b-9e1f-a2961564a559@vondra.me> <05df16f8-025a-43cd-9636-3194464012ed@vondra.me> <403c813e-7d63-4ee8-a95f-4e5c1e310f4d@vondra.me> <0e1b997d-99c8-40f4-bc32-6c044bc7ed9a@vondra.me> <2db78610-b480-4aa0-a1b6-57f1c2dcb708@vondra.me> <2e1be441-5608-4bc8-9ac4-6fad9a060db4@vondra.me> <334f7644-6716-4e63-a7c4-13c5cbcdd210@vondra.me> <86e7e218-9013-4cdb-9ed2-dfda49640b4d@vondra.me> Content-Language: en-US In-Reply-To: X-GND-Sasl: tomas@vondra.me X-GND-Score: -100 X-GND-Cause: dmFkZTF6FhZmGI3bkte5P34x2qHwdezcjjydZoUw7xV6BElg+XsMdiooLu5QEF4wCb+rrHBAu6jCn8xUCbnIDU02DhU2G1sksk7oxtNNZSwAkbm5G812ngMosymGYu4YMPTjidYzlxEmT6UHT0roFHXXz5GUuODpH2OSYjm8L+xXptFtigwtX5ikYEjTJlqjAEpw0/fVwe4PyUBYnaHbWfcTtYvFK+a2+WNsn7wkWcTuBKLQ3XD1pTtMmsNXyibRxKh7UdABRoibb+xh2do6zFohP2HbD50GeUsrTaIGDKBLOqzWmFZkUJfLCMeiN2aC5/AE0NQl9smYOQAP7lPk8jgAC5YLZjYv4MHkOOShZCR8FVDYqHBk1zA16TMtNgbth81CypOlfg113/cGBPG3QpY7l9yfi0Tc7vDdTPr5XavQAqo9cWNuoo29H0Eeu4Es53Py4zs4NbGbXXVsWtqncsuynUZdHzufsMTFRCJQ9lwgeWGaKrxShbEiNCzNMA8mT6JrGttmxaQMTi62i7R0zcUENfYZ0ICS5gB4v/8Rh5SqhWhWgXFNFdPXyEkQDMHTKyZw/NPs97Im1na+c/O5EHJShYIlmOY2oytha28ZMBcmp9pNsgXLe8H/F17h+YFVhuwbXW46mXsufvLjIgRTkByxVBV1b2f9wS52OTOh2W/CH/ysrg X-GND-State: clean 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. --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's an updated patch series, with only minor changes to fix the mbind issues: 1) It uses the correct nodemask size, so that the mbind actually binds the partition to the right node. 2) It aligns the start/end pointers so that there no pages are left with the default memory policy. So now there should be only the bind:N entries, not the single-page "default" ones. This means the last page of a partition can be mapped to a different node, but that seems fine (in the end it could have happened with the old approach too). I've also included Jakub's "goodies" patch with the additional GUCs. Those seem potentially useful to development. I have some results from a new round of benchmarks, and it's a bit disappointing. Or rather, there seem to be some issues that I can't figure out, causing regressions. Consider a very simple test, doing a lot of sequential scans to put a fair amount of pressure on the clocksweep / buffer replacement. There's a .tgz with the benchmark script attached, but it does about this: * Initialize a pgbench database with scale 2000 (so ~30GB, about twice the shared buffers). * Uses --partitions=100, so that the partitions are small enough not to trigger the 1/4 threshold (i.e. not use circular buffers). * Does runs with custom script, forcing sequential scans of the table, with two queries: select count(1) from pgbench_accounts; select * from pgbench_accounts offset 1000000000; Those are called "count" and "offset" in the results. The script forces serial sequential scans (no index scans, no parallelism), and does runs with 1, 8 and 32 clients (this is an old-ish xeon with 44 physical cores on two sockets, 2 NUMA nodes). I did runs with "master" and the all the 7 patches, with the NUMA stuff enabled/disabled since 0003 (which adds it). See the two PDFs with more complete results, but here's the "count" query for a subset of the patches (the omitted ones behave similarly to what's shown here). This chart is for median latency (in milliseconds): clients master 0003 0004 0003/on 0004/on ------------------------------------------------------------- 1 12767 12582 14509 12807 15307 8 14383 14355 14149 14069 16165 32 14756 15198 14836 14984 17128 -------------------------------------------------------- 1 103% 114% 100% 120% 8 101% 98% 98% 112% 32 102% 101% 102% 116% The percentages are compared to "master", the columns with "/on" are with shared_buffers_numa=on. Clearly, there's no chance with 0003 (which binds shared buffer partitions to NUMA nodes, even if that's enabled). The differences are within noise, pretty much, for all client counts. Then 0004 gets applied, which partitions the clock sweep. And well, that doesn't go particularly well. There is a bit of a regression even with numa=off, but it kinda recovers with the following patches. But with numa=on, there's a consistent ~10% regression (give or take). I've spent a fair bit of time investigating what's causing this, but so far I have nothing. I assume it's something silly in the patches partitioning the clocksweep, or maybe the approach is flawed in some way. Not sure :-( regards -- Tomas Vondra --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0001-Add-shmem_populate-and-shmem_interleave-GU.patch" Content-Disposition: attachment; filename*0="v20260624-0001-Add-shmem_populate-and-shmem_interleave-GU.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNmQxOTJhZTU3M2Q2M2I1Y2I1YzcxNzczMDQ3Yjk3Yzk3ZWI3OTYxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAzIEp1biAyMDI2IDE2OjMwOjI4ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgMS83XSBBZGQgc2htZW1fcG9wdWxhdGUgYW5kIHNobWVtX2ludGVybGVhdmUg R1VDcwoKLSBzaG1lbV9wb3B1bGF0ZSAtIEZvcmNlcyBtbWFwKCkgd2l0aCBNQVBfUE9QVUxB VEUsIHdoaWNoIGZhdWx0cyBhbGwKICBtZW1vcnkgcGFnZXMgYmFja2luZyB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50LgoKLSBzaG1lbV9pbnRlcmxlYXZlIC0gQXBwbGllcyBOVU1BIGlu dGVybGVhdmluZyBvbiB0aGUgd2hvbGUgc2hhcmVkCiAgbWVtb3J5IHNlZ21lbnQsIHRvIGJh bGFuY2UgYWxsb2NhdGlvbnMgYmV0d2VlbiBub2Rlcy4KLS0tCiBzcmMvYmFja2VuZC9wb3J0 L3N5c3Zfc2htZW0uYyAgICAgICAgICAgICB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCB8IDE0ICsrKysr KysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgIHwgIDQgKysK IDMgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jIGIvc3JjL2JhY2tlbmQvcG9ydC9zeXN2X3NobWVt LmMKaW5kZXggMmUzODg2Y2Y5ZmUuLjllYWZmODM4YTA0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wb3J0L3N5c3Zfc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9wb3J0L3N5c3Zfc2ht ZW0uYwpAQCAtMjcsNiArMjcsMTAgQEAKICNpbmNsdWRlIDxzeXMvc2htLmg+CiAjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5o PgorI2VuZGlmCisKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3J0L3Bn X2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkvbWVtLmgiCkBAIC05OCw2ICsx MDIsMTAgQEAgdm9pZAkgICAqVXNlZFNobWVtU2VnQWRkciA9IE5VTEw7CiBzdGF0aWMgU2l6 ZSBBbm9ueW1vdXNTaG1lbVNpemU7CiBzdGF0aWMgdm9pZCAqQW5vbnltb3VzU2htZW0gPSBO VUxMOwogCisvKiBHVUNzICovCitib29sIHNobWVtX3BvcHVsYXRlID0gZmFsc2U7CS8qIE1B UF9QT1BVTEFURSAqLworYm9vbCBzaG1lbV9pbnRlcmxlYXZlID0gZmFsc2U7CS8qIE5VTUEg aW50ZXJsZWF2aW5nICovCisKIHN0YXRpYyB2b2lkICpJbnRlcm5hbElwY01lbW9yeUNyZWF0 ZShJcGNNZW1vcnlLZXkgbWVtS2V5LCBTaXplIHNpemUpOwogc3RhdGljIHZvaWQgSXBjTWVt b3J5RGV0YWNoKGludCBzdGF0dXMsIERhdHVtIHNobWFkZHIpOwogc3RhdGljIHZvaWQgSXBj TWVtb3J5RGVsZXRlKGludCBzdGF0dXMsIERhdHVtIHNobUlkKTsKQEAgLTYwNCw2ICs2MTIs MjEgQEAgQ3JlYXRlQW5vbnltb3VzU2VnbWVudChTaXplICpzaXplKQogCWludAkJCW1tYXBf ZXJybm8gPSAwOwogCWludAkJCW1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0FOT05Z TU9VUyB8IE1BUF9IQVNTRU1BUEhPUkU7CiAKKwkvKiBJZiByZXF1ZXN0ZWQsIHBvcHVsYXRl IHRoZSBzaGFyZWQgbWVtb3J5IGJ5IE1BUF9QT1BVTEFURS4gKi8KKwlpZiAoc2htZW1fcG9w dWxhdGUpCisJCW1tYXBfZmxhZ3MgfD0gTUFQX1BPUFVMQVRFOworCisjaWZkZWYgVVNFX0xJ Qk5VTUEKKwkvKgorCSAqIElmIHJlcXVlc3RlZCwgaW50ZXJsZWF2ZSB0aGUgc2hhcmVkIG1l bW9yeSBieSBzZXR0aW5nIGEgbWVtb3J5IHBvbGljeQorCSAqIGJlZm9yZSB0aGUgbW1hcCgp IGNhbGwuIFRoaXMgcmVhbGx5IG1hdHRlcnMgb25seSB3aXRoIE1BUF9QT1BVTEFURSwKKwkg KiBiZWNhdXNlIHdpdGhvdXQgcGFnZSBmYXVsdHMgdGhlIG1lbW9yeSBkb2VzIG5vdCBhY3R1 YWxseSBnZXQgcGxhY2VkCisJICogdG8gdGhlIG5vZGVzLiBCdXQgd2l0aG91dCBNQVBfUE9Q VUxBVEUgaXQncyB2aXJ0dWFsbHkgZnJlZS4KKwkgKi8KKwlpZiAoc2htZW1faW50ZXJsZWF2 ZSkKKwkJbnVtYV9zZXRfaW50ZXJsZWF2ZV9tYXNrKG51bWFfYWxsX25vZGVzX3B0cik7Cisj ZW5kaWYKKwogI2lmbmRlZiBNQVBfSFVHRVRMQgogCS8qIFBHU2hhcmVkTWVtb3J5Q3JlYXRl IHNob3VsZCBoYXZlIGRlYWx0IHdpdGggdGhpcyBjYXNlICovCiAJQXNzZXJ0KGh1Z2VfcGFn ZXMgIT0gSFVHRV9QQUdFU19PTik7CkBAIC02NjUsNiArNjg4LDMwIEBAIENyZWF0ZUFub255 bW91c1NlZ21lbnQoU2l6ZSAqc2l6ZSkKIAkJCQkJCSBhbGxvY3NpemUpIDogMCkpOwogCX0K IAorI2lmZGVmIFVTRV9MSUJOVU1BCisJLyoKKwkgKiBJZiBzZXQgdGhlIHBvbGljeSB0byBp bnRlcmxlYXZpbmcgYnkgbnVtYV9zZXRfbWVtYmluZCgpLCB1bmRvIGl0IG5vdyBieQorCSAq IHNldHRpbmcgdGhlIHBvbGljeSB0byBsb2NhbGFsbG9jLiBXaXRoIE1BUF9QT1BVTEFURSwg YWxsIHRoZSBwYWdlcyB3ZXJlCisJICogZmF1bHRlZCBhbmQgYXJlIG5vdyBpbnRlcmxlYXZl ZCBvbiB0aGUgYXZhaWxhYmxlIG5vZGVzLgorCSAqCisJICogVG8gaGFuZGxlIHRoZSBjYXNl IHdpdGhvdXQgTUFQX1BPUFVMQVRFLCBhcHBseSB0aGUgaW50ZXJsZWF2aW5nIHBvbGljeSB0 bworCSAqIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYWxsb2NhdGVkIGJ5IG1tYXAoKSBi ZWZvcmUgdG91Y2hpbmcgaXQgaW4gYW55CisJICogd2F5LCBzbyB0aGF0IGl0IGdldHMgcGxh Y2VkIG9uIHRoZSBjb3JyZWN0IG5vZGUgb24gZmlyc3QgYWNjZXNzLgorCSAqCisJICogVGhp cyBtYXR0ZXJzIGVzcGVjaWFsbHkgd2l0aCBodWdlIHBhZ2VzLCB3aGVyZSBpdCdzIHBvc3Np YmxlIHRvIHJ1biBvdXQKKwkgKiBvZiBodWdlIHBhZ2VzIG9uIHNvbWUgbm9kZXMgYW5kIHRo ZW4gY3Jhc2guIEJ5IGV4cGxpY2l0bHkgaW50ZXJsZWF2aW5nCisJICogdGhlIHdob2xlIHNl Z21lbnQsIHRoYXQncyBtdWNoIGxlc3MgbGlrZWx5LgorCSAqLworCWlmIChzaG1lbV9pbnRl cmxlYXZlKQorCXsKKwkJLyogdW5kbyB0aGUgcG9saWN5IHNldCBieSBudW1hX3NldF9tZW1i aW5kKCkgZWFybGllciAqLworCQludW1hX3NldF9sb2NhbGFsbG9jKCk7CisKKwkJLyogc2V0 IGludGVybGVhdmluZyBwb2xpY3kgZm9yIG5vdCB5ZXQgZmF1bHRlZCBtZW1vcnkgKi8KKwkJ bnVtYV9pbnRlcmxlYXZlX21lbW9yeShwdHIsIGFsbG9jc2l6ZSwgbnVtYV9hbGxfbm9kZXNf cHRyKTsKKwl9CisjZW5kaWYKKwogCSpzaXplID0gYWxsb2NzaXplOwogCXJldHVybiBwdHI7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4 IGFmYWEwNThiMDQ2Li5mMTVlNzQxOThjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTc0MCw2ICs3NDAsMjAgQEAKICAgaWZkZWYgPT4g J0RFQlVHX05PREVfVEVTVFNfRU5BQkxFRCcsCiB9LAogCit7IG5hbWUgPT4gJ2RlYnVnX3No bWVtX2ludGVybGVhdmUnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1NVU0VU JywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKKyAgc2hvcnRfZGVzYyA9PiAnRm9y Y2VzIGludGVybGVhdmluZyBmb3IgdGhlIHdob2xlIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4n LAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJpYWJsZSA9PiAnc2ht ZW1faW50ZXJsZWF2ZScsCisgIGJvb3RfdmFsID0+ICdmYWxzZScKK30sCisKK3sgbmFtZSA9 PiAnZGVidWdfc2htZW1fcG9wdWxhdGUnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAn UEdDX1NVU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKKyAgc2hvcnRfZGVz YyA9PiAnUG9wdWxhdGVzIChmYXVsdHMpIHRoZSB3aG9sZSBzaGFyZWQgbWVtb3J5IHNlZ21l bnQgdXNpbmcgTUFQX1BPUFVMQVRFLicsCisgIGZsYWdzID0+ICdHVUNfTk9UX0lOX1NBTVBM RScsCisgIHZhcmlhYmxlID0+ICdzaG1lbV9wb3B1bGF0ZScsCisgIGJvb3RfdmFsID0+ICdm YWxzZScKK30sCisKIHsgbmFtZSA9PiAnZGVidWdfd3JpdGVfcmVhZF9wYXJzZV9wbGFuX3Ry ZWVzJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19TVVNFVCcsIGdyb3VwID0+ ICdERVZFTE9QRVJfT1BUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldCB0aGlzIHRvIGZv cmNlIGFsbCBwYXJzZSBhbmQgcGxhbiB0cmVlcyB0byBiZSBwYXNzZWQgdGhyb3VnaCBvdXRm dW5jcy5jL3JlYWRmdW5jcy5jLCB0byBmYWNpbGl0YXRlIGNhdGNoaW5nIGVycm9ycyBhbmQg b21pc3Npb25zIGluIHRob3NlIG1vZHVsZXMuJywKICAgZmxhZ3MgPT4gJ0dVQ19OT1RfSU5f U0FNUExFJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggNzE3MGE0YmZmOTguLmJmMzhhYTZiYWEyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaApAQCAtMjEzLDYgKzIxMywxMCBAQCBleHRlcm4gUEdETExJTVBPUlQgT2lkIE15 RGF0YWJhc2VUYWJsZVNwYWNlOwogCiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBNeURhdGFi YXNlSGFzTG9naW5FdmVudFRyaWdnZXJzOwogCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBz aG1lbV9wb3B1bGF0ZTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIHNobWVtX2ludGVybGVh dmU7CisKKwogLyoKICAqIERhdGUvVGltZSBDb25maWd1cmF0aW9uCiAgKgotLSAKMi41NC4w Cgo= --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0002-Infrastructure-for-partitioning-of-shared-.patch" Content-Disposition: attachment; filename*0="v20260624-0002-Infrastructure-for-partitioning-of-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxZjNmZTZlYzI3NGY0NTljYTRkZTQ0MGNmOWRhNGViNDM4MThlNDhjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyIEp1biAyMDI2IDIyOjA5OjMzICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgMi83XSBJbmZyYXN0cnVjdHVyZSBmb3IgcGFydGl0aW9uaW5nIG9mIHNoYXJl ZAogYnVmZmVycwoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lzdHJ5IiBv ZiBidWZmZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3QvbGFzdCBi dWZmZXIsIGV0Yy4gVGhpcyBzZXJ2ZXMgYXMgYSBzb3VyY2Ugb2YgdHJ1dGgKZm9yIGxhdGVy IHBhdGNoZXMgKGUuZy4gdG8gcGFydGl0aW9uIGNsb2NrLXN3ZWVwIG9yIHRvIG1ha2UgdGhl CnBhcnRpdGlvbmluZyBOVU1BLWF3YXJlKS4KClRoZSByZWdpc3RyeSBpcyBhIHNtYWxsIGFy cmF5IG9mIEJ1ZmZlclBhcnRpdGlvbiBlbnRyaWVzIGluIHNoYXJlZAptZW1vcnksIHdpdGgg cGFydGl0aW9ucyBzaXplZCB0byBiZSBhIGZhaXIgc2hhcmUgb2Ygc2hhcmVkIGJ1ZmZlcnMu CgpOb3RlczoKCiogTWF5YmUgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIHNob3VsZCBiZSBj b25maWd1cmFibGU/IFJpZ2h0IG5vdyBpdCdzCiAgaGFyZC1jb2RlZCBhcyA0LCBidXQgdGVz dGluZyBzaG93cyBpbmNyZWFzaW5nIHRvIGUuZy4gMTYpIGNhbiBiZQogIGJlbmVmaWNpYWwu CgoqIFRoaXMgcGFydGl0aW9uaW5nIGlzIGluZGVwZW5kZW50IG9mIHRoZSBwYXJ0aXRpb25z IGRlZmluZWQgaW4KICBsd2xvY2suaCwgd2hpY2ggZGVmaW5lcyAxMjggcGFydGl0aW9ucyB0 byByZWR1Y2UgbG9jayBjb25mbGljdCBvbiB0aGUKICBidWZmZXIgbWFwcGluZyBoYXNodGFi bGUuIFRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMKICBwYXRj aCBpcyBleHBlY3RlZCB0byBiZSBtdWNoIGxvd2VyIChhIGRvemVuIG9yIHNvKS4KCiogVGhl IGJ1ZmZlcnMgYXJlIGRpdmlkZWQgYXMgZXZlbmx5IGFzIHBvc3NpYmxlLCB3aXRoIHRoZSBm aXJzdCBjb3VwbGUKICBwYXJ0aXRpb25zIHBvc3NpYmx5IGdldHRpbmcgYW4gZXh0cmEgYnVm ZmVyLgotLS0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgICAgICAgICAgICAg ICB8ICAgMyArLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwgICAgICAgICAg ICAgIHwgIDIzICsrKwogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS5j b250cm9sIHwgICAyICstCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl X3BhZ2VzLmMgfCAgODYgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zl9pbml0LmMgICAgICAgICB8IDE0MiArKysrKysrKysrKysrKysrKysKIHNyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgMTkgKysrCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogOCBm aWxlcyBjaGFuZ2VkLCAyODAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0x LjctLTEuOC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01ha2Vm aWxlIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZQppbmRleCAwZTYxOGY2NmFl Yy4uN2ZkNWNkZmM0M2QgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFr ZWZpbGUKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZQpAQCAtOSw3ICs5 LDggQEAgRVhURU5TSU9OID0gcGdfYnVmZmVyY2FjaGUKIERBVEEgPSBwZ19idWZmZXJjYWNo ZS0tMS4yLnNxbCBwZ19idWZmZXJjYWNoZS0tMS4yLS0xLjMuc3FsIFwKIAlwZ19idWZmZXJj YWNoZS0tMS4xLS0xLjIuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjAtLTEuMS5zcWwgXAogCXBn X2J1ZmZlcmNhY2hlLS0xLjMtLTEuNC5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuNC0tMS41LnNx bCBcCi0JcGdfYnVmZmVyY2FjaGUtLTEuNS0tMS42LnNxbCBwZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsCisJcGdfYnVmZmVyY2FjaGUtLTEuNS0tMS42LnNxbCBwZ19idWZmZXJjYWNo ZS0tMS42LS0xLjcuc3FsIFwKKwlwZ19idWZmZXJjYWNoZS0tMS43LS0xLjguc3FsCiBQR0ZJ TEVERVNDID0gInBnX2J1ZmZlcmNhY2hlIC0gbW9uaXRvcmluZyBvZiBzaGFyZWQgYnVmZmVy IGNhY2hlIGluIHJlYWwtdGltZSIKIAogUkVHUkVTUyA9IHBnX2J1ZmZlcmNhY2hlIHBnX2J1 ZmZlcmNhY2hlX251bWEKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZDYyYjgzMzliZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKQEAgLTAsMCArMSwy MyBAQAorLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVy IHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9O IHBnX2J1ZmZlcmNhY2hlIFVQREFURSBUTyAnMS44JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxx dWl0CisKKy0tIFJlZ2lzdGVyIHRoZSBuZXcgZnVuY3Rpb25zLgorQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpCitSRVRVUk5TIFNFVE9G IFJFQ09SRAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19idWZmZXJjYWNoZV9wYXJ0aXRp b25zJworTEFOR1VBR0UgQyBQQVJBTExFTCBTQUZFOworCistLSBDcmVhdGUgYSB2aWV3IGZv ciBjb252ZW5pZW50IGFjY2Vzcy4KK0NSRUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRp dGlvbnMgQVMKKwlTRUxFQ1QgUC4qIEZST00gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygp IEFTIFAKKwkocGFydGl0aW9uIGludGVnZXIsCQkJLS0gcGFydGl0aW9uIGluZGV4CisJIG51 bV9idWZmZXJzIGludGVnZXIsCQktLSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcGFydGl0 aW9uCisJIGZpcnN0X2J1ZmZlciBpbnRlZ2VyLAkJLS0gZmlyc3QgYnVmZmVyIG9mIHBhcnRp dGlvbgorCSBsYXN0X2J1ZmZlciBpbnRlZ2VyKTsJCS0tIGxhc3QgYnVmZmVyIG9mIHBhcnRp dGlvbgorCistLSBEb24ndCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMu CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBG Uk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBG Uk9NIFBVQkxJQzsKKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zKCkgVE8gcGdfbW9uaXRvcjsKK0dSQU5UIFNFTEVDVCBPTiBwZ19idWZm ZXJjYWNoZV9wYXJ0aXRpb25zIFRPIHBnX21vbml0b3I7CmRpZmYgLS1naXQgYS9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNvbnRyb2wgYi9jb250cmliL3BnX2J1 ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNvbnRyb2wKaW5kZXggMTE0OTk1NTA5NDUuLmQy ZmE4YmE1M2JhIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlLmNvbnRyb2wKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJj YWNoZS5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBwZ19idWZmZXJjYWNoZSBleHRlbnNp b24KIGNvbW1lbnQgPSAnZXhhbWluZSB0aGUgc2hhcmVkIGJ1ZmZlciBjYWNoZScKLWRlZmF1 bHRfdmVyc2lvbiA9ICcxLjcnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS44JwogbW9kdWxlX3Bh dGhuYW1lID0gJyRsaWJkaXIvcGdfYnVmZmVyY2FjaGUnCiByZWxvY2F0YWJsZSA9IHRydWUK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFn ZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpp bmRleCA1MTA0NTU5OThhYS4uNmM5ODM4YjRlZmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf YnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3BnX2J1 ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNk ZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX01BUktfRElSVFlfQUxMX0VMRU0gMwogCiAjZGVmaW5l IE5VTV9CVUZGRVJDQUNIRV9PU19QQUdFU19FTEVNCTMKKyNkZWZpbmUgTlVNX0JVRkZFUkNB Q0hFX1BBUlRJVElPTlNfRUxFTQk0CiAKIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5u YW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTc3LDYgKzc4LDcgQEAgUEdfRlVOQ1RJT05f SU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdF9hbGwpOwogUEdfRlVOQ1RJT05fSU5GT19W MShwZ19idWZmZXJjYWNoZV9tYXJrX2RpcnR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdf YnVmZmVyY2FjaGVfbWFya19kaXJ0eV9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1Yx KHBnX2J1ZmZlcmNhY2hlX21hcmtfZGlydHlfYWxsKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyk7CiAKIAogLyogT25seSBuZWVkIHRvIHRvdWNo IG1lbW9yeSBvbmNlIHBlciBiYWNrZW5kIHByb2Nlc3MgbGlmZXRpbWUgKi8KQEAgLTkyMiwz ICs5MjQsODcgQEAgcGdfYnVmZmVyY2FjaGVfbWFya19kaXJ0eV9hbGwoUEdfRlVOQ1RJT05f QVJHUykKIAogCVBHX1JFVFVSTl9EQVRVTShyZXN1bHQpOwogfQorCisvKgorICogSW5xdWly ZSBhYm91dCBwYXJ0aXRpb25pbmcgb2Ygc2hhcmVkIGJ1ZmZlcnMuCisgKi8KK0RhdHVtCitw Z19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0Nh bGxDb250ZXh0ICpmdW5jY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBs ZURlc2MJdHVwbGVkZXNjOworCVR1cGxlRGVzYwlleHBlY3RlZF90dXBsZWRlc2M7CisJSGVh cFR1cGxlCXR1cGxlOworCURhdHVtCQlyZXN1bHQ7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FM TCgpKQorCXsKKwkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIFN3 aXRjaCBjb250ZXh0IHdoZW4gYWxsb2NhdGluZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVy IGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0 eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5 cGUoZmNpbmZvLCBOVUxMLCAmZXhwZWN0ZWRfdHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01Q T1NJVEUpCisJCQllbG9nKEVSUk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBl Iik7CisKKwkJaWYgKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMgIT0gTlVNX0JVRkZFUkNB Q0hFX1BBUlRJVElPTlNfRUxFTSkKKwkJCWVsb2coRVJST1IsICJpbmNvcnJlY3QgbnVtYmVy IG9mIG91dHB1dCBhcmd1bWVudHMiKTsKKworCQkvKiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNj cmlwdG9yIGZvciB0aGUgcmVzdWx0IHJvd3MuICovCisJCXR1cGxlZGVzYyA9IENyZWF0ZVRl bXBsYXRlVHVwbGVEZXNjKGV4cGVjdGVkX3R1cGxlZGVzYy0+bmF0dHMpOworCQlUdXBsZURl c2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMSwgInBhcnRpdGlvbiIsCisJ CQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRl c2MsIChBdHRyTnVtYmVyKSAyLCAibnVtX2J1ZmZlcnMiLAorCQkJCQkJICAgSU5UNE9JRCwg LTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg MywgImZpcnN0X2J1ZmZlciIsCisJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA0LCAibGFzdF9idWZmZXIi LAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9 IEJsZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CisKKwkJLyogUmV0dXJuIHRvIG9yaWdpbmFs IGNvbnRleHQgd2hlbiBhbGxvY2F0aW5nIHRyYW5zaWVudCBtZW1vcnkgKi8KKwkJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCS8qIFNldCBtYXggY2FsbHMgYW5k IHJlbWVtYmVyIHRoZSB1c2VyIGZ1bmN0aW9uIGNvbnRleHQuICovCisJCWZ1bmNjdHgtPm1h eF9jYWxscyA9IEJ1ZmZlclBhcnRpdGlvbkNvdW50KCk7CisJfQorCisJZnVuY2N0eCA9IFNS Rl9QRVJDQUxMX1NFVFVQKCk7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgZnVuY2N0 eC0+bWF4X2NhbGxzKQorCXsKKwkJdWludDMyCQlpID0gZnVuY2N0eC0+Y2FsbF9jbnRyOwor CisJCWludAkJCW51bV9idWZmZXJzLAorCQkJCQlmaXJzdF9idWZmZXIsCisJCQkJCWxhc3Rf YnVmZmVyOworCisJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNf RUxFTV07CisJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1d OworCisJCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtX2J1ZmZlcnMsCisJCQkJCQkgICAm Zmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCXZhbHVlc1swXSA9IEludDMyR2V0 RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJdmFsdWVzWzFdID0gSW50MzJH ZXREYXR1bShudW1fYnVmZmVycyk7CisJCW51bGxzWzFdID0gZmFsc2U7CisKKwkJdmFsdWVz WzJdID0gSW50MzJHZXREYXR1bShmaXJzdF9idWZmZXIpOworCQludWxsc1syXSA9IGZhbHNl OworCisJCXZhbHVlc1szXSA9IEludDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOworCQludWxs c1szXSA9IGZhbHNlOworCisJCS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwor CQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2Zj dHgsIHZhbHVlcywgbnVsbHMpOworCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBs ZSk7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIHJlc3VsdCk7CisJfQorCWVsc2UK KwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zl9pbml0LmMKaW5kZXggMTQwN2M5MzBjNTYuLmU1OTNiMDJlMGNhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKQEAgLTI2LDEwICsyNiwxMiBAQCBj aGFyCSAgICpCdWZmZXJCbG9ja3M7CiBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRl ZCAqQnVmZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNr Q29udGV4dDsKIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKK0J1ZmZlclBhcnRpdGlv bnMgKkJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeTsKIAogc3RhdGljIHZvaWQgQnVmZmVyTWFu YWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdl clNobWVtSW5pdCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgQnVmZmVyTWFuYWdlclNobWVt QXR0YWNoKHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBCdWZmZXJQYXJ0aXRpb25zSW5pdCh2 b2lkKTsKIAogY29uc3QgU2htZW1DYWxsYmFja3MgQnVmZmVyTWFuYWdlclNobWVtQ2FsbGJh Y2tzID0gewogCS5yZXF1ZXN0X2ZuID0gQnVmZmVyTWFuYWdlclNobWVtUmVxdWVzdCwKQEAg LTY5LDYgKzcxLDkgQEAgY29uc3QgU2htZW1DYWxsYmFja3MgQnVmZmVyTWFuYWdlclNobWVt Q2FsbGJhY2tzID0gewogICoJCW11bHRpcGxlIHRpbWVzLiBDaGVjayB0aGUgUHJpdmF0ZVJl ZkNvdW50IGluZnJhc3RydWN0dXJlIGluIGJ1Zm1nci5jLgogICovCiAKKy8qIG51bWJlciBv ZiBidWZmZXIgcGFydGl0aW9ucyAqLworI2RlZmluZSBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElU SU9OUwk0CisKIAogLyoKICAqIFJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgYXJlYSBmb3IgdGhl IGJ1ZmZlciBwb29sLgpAQCAtOTcsNiArMTAyLDEzIEBAIEJ1ZmZlck1hbmFnZXJTaG1lbVJl cXVlc3Qodm9pZCAqYXJnKQogCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZCdWZmZXJJT0NW QXJyYXksCiAJCSk7CiAKKwlTaG1lbVJlcXVlc3RTdHJ1Y3QoLm5hbWUgPSAiQnVmZmVyIFBh cnRpdGlvbiBSZWdpc3RyeSIsCisJCQkJCSAgIC5zaXplID0gTlVNX0NMT0NLX1NXRUVQX1BB UlRJVElPTlMgKiBzaXplb2YoQnVmZmVyUGFydGl0aW9uKSwKKwkvKiBBbGlnbiBkZXNjcmlw dG9ycyB0byBhIGNhY2hlbGluZSBib3VuZGFyeS4gKi8KKwkJCQkJICAgLmFsaWdubWVudCA9 IFBHX0NBQ0hFX0xJTkVfU0laRSwKKwkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQnVmZmVy UGFydGl0aW9uc1JlZ2lzdHJ5LAorCQkpOworCiAJLyoKIAkgKiBUaGUgYXJyYXkgdXNlZCB0 byBzb3J0IHRvLWJlLWNoZWNrcG9pbnRlZCBidWZmZXIgaWRzIGlzIGxvY2F0ZWQgaW4KIAkg KiBzaGFyZWQgbWVtb3J5LCB0byBhdm9pZCBoYXZpbmcgdG8gYWxsb2NhdGUgc2lnbmlmaWNh bnQgYW1vdW50cyBvZgpAQCAtMTE5LDYgKzEzMSwxMiBAQCBCdWZmZXJNYW5hZ2VyU2htZW1S ZXF1ZXN0KHZvaWQgKmFyZykKIHN0YXRpYyB2b2lkCiBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0 KHZvaWQgKmFyZykKIHsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJ1ZmZlciBwYXJ0aXRp b24gcmVnaXN0cnkgZmlyc3QsIGJlZm9yZSBvdGhlciBwYXJ0cworCSAqIGhhdmUgYSBjaGFu Y2UgdG8gdG91Y2ggdGhlIG1lbW9yeS4KKwkgKi8KKwlCdWZmZXJQYXJ0aXRpb25zSW5pdCgp OworCiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhlYWRlcnMuCiAJICov CkBAIC0xNTEsMyArMTY5LDEyNyBAQCBCdWZmZXJNYW5hZ2VyU2htZW1BdHRhY2godm9pZCAq YXJnKQogCVdyaXRlYmFja0NvbnRleHRJbml0KCZCYWNrZW5kV3JpdGViYWNrQ29udGV4dCwK IAkJCQkJCSAmYmFja2VuZF9mbHVzaF9hZnRlcik7CiB9CisKKy8qCisgKiBTYW5pdHkgY2hl Y2tzIG9mIGJ1ZmZlcnMgcGFydGl0aW9ucyAtIHRoZXJlIG11c3QgYmUgbm8gZ2FwcywgaXQg bXVzdCBjb3ZlcgorICogdGhlIHdob2xlIHJhbmdlIG9mIGJ1ZmZlcnMsIGV0Yy4KKyAqLwor c3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQnVmZmVyUGFydGl0aW9ucyh2b2lkKQoreworI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQludW1fYnVmZmVycyA9IDA7CisKKwlB c3NlcnQoQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5LT5ucGFydGl0aW9ucyA+IDApOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBCdWZmZXJQYXJ0aXRpb25zUmVnaXN0cnktPm5wYXJ0aXRp b25zOyBpKyspCisJeworCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0 aW9uc1JlZ2lzdHJ5LT5wYXJ0aXRpb25zW2ldOworCisJCS8qCisJCSAqIFdlIGNhbiBnZXQg YSBzaW5nbGUtYnVmZmVyIHBhcnRpdGlvbiwgaWYgdGhlIHNpemluZyBmb3JjZXMgdGhlIGxh c3QKKwkJICogcGFydGl0aW9uIHRvIGJlIGp1c3Qgb25lIGJ1ZmZlci4gQnV0IGl0J3MgdW5s aWtlbHkgKGFuZAorCQkgKiB1bmRlc2lyYWJsZSkuCisJCSAqLworCQlBc3NlcnQocGFydC0+ Zmlyc3RfYnVmZmVyIDw9IHBhcnQtPmxhc3RfYnVmZmVyKTsKKwkJQXNzZXJ0KChwYXJ0LT5s YXN0X2J1ZmZlciAtIHBhcnQtPmZpcnN0X2J1ZmZlciArIDEpID09IHBhcnQtPm51bV9idWZm ZXJzKTsKKworCQludW1fYnVmZmVycyArPSBwYXJ0LT5udW1fYnVmZmVyczsKKworCQkvKgor CQkgKiBUaGUgZmlyc3QgcGFydGl0aW9uIG5lZWRzIHRvIHN0YXJ0IG9uIGJ1ZmZlciAwLiBM YXRlciBwYXJ0aXRpb25zCisJCSAqIG5lZWQgdG8gYmUgY29udGlndW91cywgd2l0aG91dCBz a2lwcGluZyBhbnkgYnVmZmVycy4KKwkJICovCisJCWlmIChpID09IDApCisJCXsKKwkJCUFz c2VydChwYXJ0LT5maXJzdF9idWZmZXIgPT0gMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlC dWZmZXJQYXJ0aXRpb24gKnByZXYgPSAmQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5LT5wYXJ0 aXRpb25zW2kgLSAxXTsKKworCQkJQXNzZXJ0KChwYXJ0LT5maXJzdF9idWZmZXIgLSAxKSA9 PSBwcmV2LT5sYXN0X2J1ZmZlcik7CisJCX0KKworCQkvKiB0aGUgbGFzdCBwYXJ0aXRpb24g bmVlZHMgdG8gZW5kIG9uIGJ1ZmZlciAoTkJ1ZmZlcnMgLSAxKSAqLworCQlpZiAoaSA9PSAo QnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5LT5ucGFydGl0aW9ucyAtIDEpKQorCQl7CisJCQlB c3NlcnQocGFydC0+bGFzdF9idWZmZXIgPT0gKE5CdWZmZXJzIC0gMSkpOworCQl9CisJfQor CisJQXNzZXJ0KG51bV9idWZmZXJzID09IE5CdWZmZXJzKTsKKyNlbmRpZgorfQorCisvKgor ICogQnVmZmVyUGFydGl0aW9uc0luaXQKKyAqCQlJbml0aWFsaXplIHJlZ2lzdHJ5IG9mIGJ1 ZmZlciBwYXJ0aXRpb25zLgorICovCitzdGF0aWMgdm9pZAorQnVmZmVyUGFydGl0aW9uc0lu aXQodm9pZCkKK3sKKwlpbnQJCQlidWZmZXIgPSAwOworCisJLyogbnVtYmVyIG9mIGJ1ZmZl cnMgcGVyIHBhcnRpdGlvbiAobWFrZSBzdXJlIHRvIG5vdCBvdmVyZmxvdykgKi8KKwlpbnQJ CQlwYXJ0X2J1ZmZlcnMgPSBOQnVmZmVycyAvIE5VTV9DTE9DS19TV0VFUF9QQVJUSVRJT05T OworCWludAkJCXJlbWFpbmluZ19idWZmZXJzID0gTkJ1ZmZlcnMgJSBOVU1fQ0xPQ0tfU1dF RVBfUEFSVElUSU9OUzsKKworCUJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+bnBhcnRpdGlv bnMgPSBOVU1fQ0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsKKworCWZvciAoaW50IG4gPSAwOyBu IDwgQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5LT5ucGFydGl0aW9uczsgbisrKQorCXsKKwkJ QnVmZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+cGFy dGl0aW9uc1tuXTsKKworCQlpbnQJCQludW1fYnVmZmVycyA9IHBhcnRfYnVmZmVyczsKKwkJ aWYgKG4gPCByZW1haW5pbmdfYnVmZmVycykKKwkJCW51bV9idWZmZXJzICs9IDE7CisKKwkJ cmVtYWluaW5nX2J1ZmZlcnMgLT0gbnVtX2J1ZmZlcnM7CisKKwkJQXNzZXJ0KChudW1fYnVm ZmVycyA+IDApICYmIChudW1fYnVmZmVycyA8PSBwYXJ0X2J1ZmZlcnMpKTsKKwkJQXNzZXJ0 KChidWZmZXIgPj0gMCkgJiYgKGJ1ZmZlciA8IE5CdWZmZXJzKSk7CisKKwkJcGFydC0+bnVt X2J1ZmZlcnMgPSBudW1fYnVmZmVyczsKKwkJcGFydC0+Zmlyc3RfYnVmZmVyID0gYnVmZmVy OworCQlwYXJ0LT5sYXN0X2J1ZmZlciA9IGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEpOwor CisJCWJ1ZmZlciArPSBudW1fYnVmZmVyczsKKwl9CisKKwlBc3NlcnRDaGVja0J1ZmZlclBh cnRpdGlvbnMoKTsKK30KKworLyoKKyAqIEJ1ZmZlclBhcnRpdGlvbkNvdW50CisgKgkJUmV0 dXJucyB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgY3JlYXRlZC4KKyAqLworaW50CitCdWZm ZXJQYXJ0aXRpb25Db3VudCh2b2lkKQoreworCXJldHVybiBCdWZmZXJQYXJ0aXRpb25zUmVn aXN0cnktPm5wYXJ0aXRpb25zOworfQorCisvKgorICogQnVmZmVyUGFydGl0aW9uR2V0Cisg KgkJUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpdGlvbiBhdCB0aGUgcHJvdmlk ZWQgaW5kZXguCisgKgorICogVGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGlzIGZpcnN0L2xh c3QgYnVmZmVyLCBudW1iZXIgb2YgYnVmZmVycy4KKyAqLwordm9pZAorQnVmZmVyUGFydGl0 aW9uR2V0KGludCBpZHgsIGludCAqbnVtX2J1ZmZlcnMsCisJCQkJICAgaW50ICpmaXJzdF9i dWZmZXIsIGludCAqbGFzdF9idWZmZXIpCit7CisJaWYgKChpZHggPj0gMCkgJiYgKGlkeCA8 IEJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+bnBhcnRpdGlvbnMpKQorCXsKKwkJQnVmZmVy UGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+cGFydGl0aW9u c1tpZHhdOworCisJCSpudW1fYnVmZmVycyA9IHBhcnQtPm51bV9idWZmZXJzOworCQkqZmly c3RfYnVmZmVyID0gcGFydC0+Zmlyc3RfYnVmZmVyOworCQkqbGFzdF9idWZmZXIgPSBwYXJ0 LT5sYXN0X2J1ZmZlcjsKKworCQlyZXR1cm47CisJfQorCisJZWxvZyhFUlJPUiwgImludmFs aWQgcGFydGl0aW9uIGluZGV4Iik7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFs cy5oCmluZGV4IDg5NjE1YTI1NGEzLi5lNWE4ODdiOTk2OSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmgKQEAgLTQxMSw5ICs0MTEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qg V3JpdGViYWNrQ29udGV4dAogCiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4gUEdETExJ TVBPUlQgQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CitleHRlcm4gUEdE TExJTVBPUlQgQnVmZmVyUGFydGl0aW9ucyAqQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5Owog ZXh0ZXJuIFBHRExMSU1QT1JUIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpC dWZmZXJJT0NWQXJyYXk7CiBleHRlcm4gUEdETExJTVBPUlQgV3JpdGViYWNrQ29udGV4dCBC YWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIAorZXh0ZXJuIGludAlCdWZmZXJQYXJ0aXRpb25D b3VudCh2b2lkKTsKK2V4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBp bnQgKm51bV9idWZmZXJzLAorCQkJCQkJCSAgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKmxh c3RfYnVmZmVyKTsKKwogLyogaW4gbG9jYWxidWYuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JU IEJ1ZmZlckRlc2MgKkxvY2FsQnVmZmVyRGVzY3JpcHRvcnM7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oCmluZGV4IDY4MzdiMzVmYzZkLi43OWEzZjQ0NzQ3YSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oCkBAIC0xNTUsNiArMTU1LDI1IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgog CiB0eXBlZGVmIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbiBSZWFkQnVmZmVyc09wZXJh dGlvbjsKIAorLyoKKyAqIGluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2Ygc2hh cmVkIGJ1ZmZlcnMKKyAqCisgKiBmaXJzdC9sYXN0IGJ1ZmZlciAtIHRoZSB2YWx1ZXMgYXJl IGluY2x1c2l2ZQorICovCit0eXBlZGVmIHN0cnVjdCBCdWZmZXJQYXJ0aXRpb24KK3sKKwlp bnQJCQludW1fYnVmZmVyczsJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwlpbnQJCQlmaXJz dF9idWZmZXI7CS8qIGZpcnN0IGJ1ZmZlciBvZiBwYXJ0aXRpb24gKi8KKwlpbnQJCQlsYXN0 X2J1ZmZlcjsJLyogbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uICovCit9IEJ1ZmZlclBhcnRp dGlvbjsKKworLyogYW4gYXJyYXkgb2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBhcnRpdGlv bnMgKi8KK3R5cGVkZWYgc3RydWN0IEJ1ZmZlclBhcnRpdGlvbnMKK3sKKwlpbnQJCQlucGFy dGl0aW9uczsJLyogbnVtYmVyIG9mIHBhcnRpdGlvbnMgKi8KKwlCdWZmZXJQYXJ0aXRpb24g cGFydGl0aW9uc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBCdWZmZXJQYXJ0aXRpb25z OworCiAvKiB0byBhdm9pZCBoYXZpbmcgdG8gZXhwb3NlIGJ1Zl9pbnRlcm5hbHMuaCBoZXJl ICovCiB0eXBlZGVmIHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0IFdyaXRlYmFja0NvbnRleHQ7 CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYzVkYjZjYTY3MDUuLjQ1ZmM5 MWZjYjk3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzY1LDYgKzM2NSw4 IEBAIEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdAogQnVmZmVyTG9ja01vZGUKIEJ1ZmZlckxv b2t1cEVudAogQnVmZmVyTWFuYWdlclJlbGF0aW9uCitCdWZmZXJQYXJ0aXRpb24KK0J1ZmZl clBhcnRpdGlvbnMKIEJ1ZmZlclN0cmF0ZWd5Q29udHJvbAogQnVmZmVyVGFnCiBCdWZmZXJV c2FnZQotLSAKMi41NC4wCgo= --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0003-NUMA-shared-buffers-partitioning.patch" Content-Disposition: attachment; filename="v20260624-0003-NUMA-shared-buffers-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSA1YThmNzU3ZmVhOWEyNzU1ZDFjNGZhZGFkMDY3MzUyZjRhYjMwN2JlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyIEp1biAyMDI2IDIzOjI3OjEzICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgMy83XSBOVU1BOiBzaGFyZWQgYnVmZmVycyBwYXJ0aXRpb25pbmcKCkVuc3Vy ZSBzaGFyZWQgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGZyb20gYWxsIE5VTUEgbm9kZXMsIGlu IGEgYmFsYW5jZWQKd2F5LCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgdGhlIG5vZGUgd2hlcmUg UG9zdGdyZXMgaW5pdGlhbGx5IHN0YXJ0cywgb3IKd2hlcmUgdGhlIGtlcm5lbCBkZWNpZGVz IHRvIG1pZ3JhdGUgdGhlIHBhZ2UsIGV0Yy4KCkluIGNhc2VzIGxpa2UgcHJlLXdhcm1pbmcg YSBkYXRhYmFzZSBmcm9tIGEgc2luZ2xlIHdvcmtlciAoZS5nLiB1c2luZwpwZ19wcmV3YXJt KSwgd2UgbWF5IGVuZCB1cCB3aXRoIHNldmVyZWx5IHVuYmFsYW5jZWQgbWVtb3J5IGRpc3Ry aWJ1dGlvbgood2l0aCBtb3N0IG1lbW9yeSBsb2NhdGVkIG9uIGEgc2luZ2xlIE5VTUEgbm9k ZSkuIFVuYmFsYW5jZWQgYWxsb2NhdGlvbgptYXkgcHV0IGEgbG90IG9mIHByZXNzdXJlIG9u IHRoZSBtZW1vcnkgc3lzdGVtIG9uIGEgc21hbGwgbnVtYmVyIG9mIE5VTUEKbm9kZXMsIGxp bWl0aW5nIHRoZSBiYW5kd2lkdGggZXRjLgoKV2l0aCB6b25lX3JlY2xhaW0sIHRoZSBrZXJu ZWwgd291bGQgZXZlbnR1YWxseSBtb3ZlIHNvbWUgb2YgdGhlIG1lbW9yeQp0byBvdGhlciBu b2RlcywgYnV0IHRoYXQgdGVuZHMgdG8gdGFrZSBhIGxvbmcgdGltZSBhbmQgaXMgdW5wcmVk aWN0YWJsZS4KClRoaXMgY2hhbmdlIGZvcmNlcyBldmVuIGRpc3RyaWJ1dGlvbiBvZiBzaGFy ZWQgYnVmZmVycyBvbiBhbGwgTlVNQQpub2RlcywgaW1wcm92aW5nIHByZWRpY3RhYmlsaXR5 LCByZWR1Y2luZyB0aGUgdGltZSBuZWVkZWQgZm9yIHdhcm11cApkdXJpbmcgYmVuY2htYXJr aW5nLCBldGMuIEl0J3MgYWxzbyBsZXNzIGRlcGVuZGVudCBvbiB3aGF0IHRoZSBDUFUKc2No ZWR1bGVyIGRlY2lkZXMgdG8gZG8gKHdoaWNoIGNvcmVzIGdldCB1c2VkIGZvciB0aGUgd2Fy bXVwLikKClRoZSBlZmZlY3QgaXMgc2ltaWxhciB0bwoKICAgICBudW1hY3RsIC0taW50ZXJs ZWF2ZT1hbGwKCmluIHRoYXQgdGhlIGJ1ZmZlcnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBO VU1BIG5vZGVzIGV2ZW5seSwgYnV0CnRoZXJlJ3MgYWxzbyBhIG51bWJlciBvZiBpbXBvcnRh bnQgZGlmZmVyZW5jZXMuCgpGaXJzdGx5LCBpdCdzIGFwcGxpZWQgb25seSB0byBzaGFyZWQg YnVmZmVycyAoYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycyksCm5vdCB0byB0aGUgd2hvbGUgc2hh cmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIHBvc3NpYmxlIHRvIGVuYWJsZSBtZW1vcnkKaW50 ZXJsZWF2aW5nIHVzaW5nIHRoZSBzaG1lbV9pbnRlcmxlYXZlIEdVQywgaW50cm9kdWNlZCBp biBhbiBlYXJsaWVyCnBhdGNoIGluIHRoaXMgc2VyaWVzLgoKTlVNQSB3b3JrcyBhdCB0aGUg Z3JhbnVsYXJpdHkgb2YgYSBtZW1vcnkgcGFnZSwgd2hpY2ggaXMgdHlwaWNhbGx5CmVpdGhl ciA0SyBvciAyTUIgKGh1Z2VwYWdlKSwgYnV0IG90aGVyIHNpemVzIGFyZSBwb3NzaWJsZS4g Rm9yIHN5c3RlbXMKd2hlcmUgTlVNQSBtYXR0ZXJzLCB3ZSBleHBlY3QgbGFyZ2UgYW1vdW50 cyBvZiBtZW1vcnkgKGh1bmRyZWRzIG9mCmdpZ2FieXRlcykgYW5kIGh1Z2VwYWdlcyBlbmFi bGVkLiBCdXQgbm90IG5lY2Vzc2FyaWx5LgoKVGhlIHBhcnRpdGlvbmluZyBzY2hlbWUgaXMg YmVzdC1lZmZvcnQgd2l0aCByZXNwZWN0IHRvIG1lbW9yeSBwYWdlIHNpemUuClRoZSBzaGFy ZWQgYnVmZmVycyBkbyBub3QgImFsaWduIiB3aXRoIG1lbW9yeSBwYWdlcyAoaS5lLiBhIHBh cnRpdGlvbgptYXkgbm90IGVuZCBhdCB0aGUgbWVtb3J5IHBhZ2UgYm91bmRhcnkpLCBpbiB3 aGljaCBjYXNlIHdlIHNpbXBseSBsb2NhdGUKanVzdCB0aGUgc2VjdGlvbiBvZiB0aGUgcGFy dGl0aW9uIHdpdGggY29tcGxldGUgbWVtb3J5IHBhZ2VzLiBUaGlzIG1lYW5zCnRoZXJlIG1h eSBiZSB+b25lIHVubWFwcGVkIG1lbW9yeSBwYWdlIGJldHdlZW4gcGFydGl0aW9ucy4gQ29u c2lkZXJpbmcKdGhlIGV4cGVjdGVkIGFtb3VudHMgb2YgbWVtb3J5LCB0aGlzIGlzIG5lZ2xp Z2libGUsIGFuZCB0aGUgYWx0ZXJuYXRpdmUKd291bGQgYmUgYSBzaWduaWZpY2FudCBhbW91 bnQgb2YgY29tcGxleGl0eSB0byBhbGlnbiB0aGUgcGFnZXMgYW5kCmVuZm9yY2UgImFsbG93 ZWQiIHBhcnRpdGlvbiBzaXplcy4KCkJ1ZmZlciBkZXNjcmlwdG9ycyBhcmUgYWZmZWN0ZWQg YnkgdGhpcyB0b28sIGFuZCB0aGUgZWZmZWN0IG1heSBiZSBtb3JlCnNpZ25pZmljYW50LCBz aW1wbHkgYmVjYXVzZSB0aGUgZGVzY3JpcHRvcnMgYXJlIG11Y2ggc21hbGxlciAofjY0Qiku IFNvCnRoZSBhcnJheSBpcyBzbWFsbGVyLCBhbmQgYSBzaW5nbGUgMk1CIG1lbW9yeSBwYWdl IGlzIHdvcnRoIH4zMksgYnVmZmVyCmRlc2NyaXB0b3JzLiBCdXQgd2l0aCBsYXJnZSBzeXN0 ZW1zIGl0J3Mgc3RpbGwgbmVnbGlnaWJsZS4KClRoZSAiYnVmZmVyIHBhcnRpdGlvbnMiIG1h eSBub3QgYmUgMToxIHdpdGggTlVNQSBub2Rlcy4gV2Ugd2FudCB0byBhbGxvdwpjbG9jay1z d2VlcCBwYXJ0aXRpb25pbmcgZXZlbiBvbiBub24tTlVNQSBzeXN0ZW1zLCBvciB3aGVuIHJ1 bm5pbmcgb25seQpvbiBhIHNtYWxsIG51bWJlciBvZiBOVU1BIG5vZGVzLiBUaGVyZSdzIGEg bWluaW1hbCBudW1iZXIgb2YgcGFydGl0aW9ucwooZGVmYXVsdDogNCksIGFuZCBhIG5vZGUg bWF5IGdldCBtdWx0aXBsZSBwYXJ0aXRpb25zLiBOb2RlcyBhbHdheXMgZ2V0CnRoZSBzYW1l IG51bWJlciBvZiBwYXJ0aXRpb25zIChlLmcuIHdpdGggMyBOVU1BIG5vZGVzIHRoZXJlIHdp bGwgYmUgNgpwYXJ0aXRpb25zIGluIHRvdGFsLCBhcyBlYWNoIG5vZGUgZ2V0cyAyIHBhcnRp dGlvbnMpLgoKVGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkc2hhcmVkX2J1ZmZlcnNfbnVt YSBHVUMgKGRlZmF1bHQ6IGZhbHNlKS4KLS0tCiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNy0t MS44LnNxbCAgICAgICAgICAgICAgfCAgIDEgKwogY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZV9wYWdlcy5jIHwgIDI0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZfaW5pdC5jICAgICAgICAgfCAyNTEgKysrKysrKysrKysrKysrKy0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jICAgICAgICAgfCAgIDkgKwogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA2ICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBz cmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwog c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgIDE2ICst CiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgIDgg Kwogc3JjL3BvcnQvcGdfbnVtYS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEy ICsrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAzOTkgaW5zZXJ0aW9ucygrKSwgMzYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZS0tMS43LS0xLjguc3FsIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZS0tMS43LS0xLjguc3FsCmluZGV4IGQ2MmI4MzM5YmZjLi5hNmU0OWZkMTY1MiAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS43 LS0xLjguc3FsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUt LTEuNy0tMS44LnNxbApAQCAtMTEsNiArMTEsNyBAQCBMQU5HVUFHRSBDIFBBUkFMTEVMIFNB RkU7CiBDUkVBVEUgVklFVyBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEFTCiAJU0VMRUNU IFAuKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBBUyBQCiAJKHBhcnRpdGlv biBpbnRlZ2VyLAkJCS0tIHBhcnRpdGlvbiBpbmRleAorCSBudW1hX25vZGUgaW50ZWdlciwJ CQktLSBOVU1BIG5vZGUgb2YgdGhlIHBhcnRpdGlvb24KIAkgbnVtX2J1ZmZlcnMgaW50ZWdl ciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0aXRpb24KIAkgZmlyc3RfYnVm ZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIgb2YgcGFydGl0aW9uCiAJIGxhc3RfYnVm ZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggNmM5ODM4 YjRlZmMuLjQ2YjZiODVhMmUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hl L3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIE5VTV9C VUZGRVJDQUNIRV9NQVJLX0RJUlRZX0FMTF9FTEVNIDMKIAogI2RlZmluZSBOVU1fQlVGRkVS Q0FDSEVfT1NfUEFHRVNfRUxFTQkzCi0jZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJUSVRJ T05TX0VMRU0JNAorI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTUK IAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2FjaGUi LApAQCAtOTU1LDExICs5NTUsMTMgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19G VU5DVElPTl9BUkdTKQogCQl0dXBsZWRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhl eHBlY3RlZF90dXBsZWRlc2MtPm5hdHRzKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxl ZGVzYywgKEF0dHJOdW1iZXIpIDEsICJwYXJ0aXRpb24iLAogCQkJCQkJICAgSU5UNE9JRCwg LTEsIDApOwotCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg MiwgIm51bV9idWZmZXJzIiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0 dHJOdW1iZXIpIDIsICJudW1hX25vZGUiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwot CQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgImZpcnN0 X2J1ZmZlciIsCisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVy KSAzLCAibnVtX2J1ZmZlcnMiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwotCQlUdXBs ZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNCwgImxhc3RfYnVmZmVy IiwKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDQsICJm aXJzdF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJ bml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVyIiwKIAkJ CQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBCbGVz c1R1cGxlRGVzYyh0dXBsZWRlc2MpOwpAQCAtOTc3LDI4ICs5NzksMzIgQEAgcGdfYnVmZmVy Y2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJdWludDMyCQlpID0g ZnVuY2N0eC0+Y2FsbF9jbnRyOwogCi0JCWludAkJCW51bV9idWZmZXJzLAorCQlpbnQJCQlu dW1hX25vZGUsCisJCQkJCW51bV9idWZmZXJzLAogCQkJCQlmaXJzdF9idWZmZXIsCiAJCQkJ CWxhc3RfYnVmZmVyOwogCiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJ VElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05T X0VMRU1dOwogCi0JCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtX2J1ZmZlcnMsCisJCUJ1 ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCiAJCQkJCQkg ICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOwogCiAJCXZhbHVlc1swXSA9IEludDMy R2V0RGF0dW0oaSk7CiAJCW51bGxzWzBdID0gZmFsc2U7CiAKLQkJdmFsdWVzWzFdID0gSW50 MzJHZXREYXR1bShudW1fYnVmZmVycyk7CisJCXZhbHVlc1sxXSA9IEludDMyR2V0RGF0dW0o bnVtYV9ub2RlKTsKIAkJbnVsbHNbMV0gPSBmYWxzZTsKIAotCQl2YWx1ZXNbMl0gPSBJbnQz MkdldERhdHVtKGZpcnN0X2J1ZmZlcik7CisJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0o bnVtX2J1ZmZlcnMpOwogCQludWxsc1syXSA9IGZhbHNlOwogCi0JCXZhbHVlc1szXSA9IElu dDMyR2V0RGF0dW0obGFzdF9idWZmZXIpOworCQl2YWx1ZXNbM10gPSBJbnQzMkdldERhdHVt KGZpcnN0X2J1ZmZlcik7CiAJCW51bGxzWzNdID0gZmFsc2U7CiAKKwkJdmFsdWVzWzRdID0g SW50MzJHZXREYXR1bShsYXN0X2J1ZmZlcik7CisJCW51bGxzWzRdID0gZmFsc2U7CisKIAkJ LyogQnVpbGQgYW5kIHJldHVybiB0aGUgdHVwbGUuICovCiAJCXR1cGxlID0gaGVhcF9mb3Jt X3R1cGxlKChUdXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxscyk7 CiAJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IGU1OTNiMDJlMGNhLi40ZWQ3OWRiN2I0OSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC0xNCwxMiArMTQs MjAgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNlbmRpZgorCisj aW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2xpc3QuaCIKICNpbmNsdWRlICJzdG9y YWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCisjaW5jbHVk ZSAidXRpbHMvZ3VjX2hvb2tzLmgiCisjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCiBC dWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGNoYXIJICAgKkJ1ZmZlckJs b2NrczsKQEAgLTcxLDkgKzc5LDEyIEBAIGNvbnN0IFNobWVtQ2FsbGJhY2tzIEJ1ZmZlck1h bmFnZXJTaG1lbUNhbGxiYWNrcyA9IHsKICAqCQltdWx0aXBsZSB0aW1lcy4gQ2hlY2sgdGhl IFByaXZhdGVSZWZDb3VudCBpbmZyYXN0cnVjdHVyZSBpbiBidWZtZ3IuYy4KICAqLwogCi0v KiBudW1iZXIgb2YgYnVmZmVyIHBhcnRpdGlvbnMgKi8KLSNkZWZpbmUgTlVNX0NMT0NLX1NX RUVQX1BBUlRJVElPTlMJNAorLyoKKyAqIE1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0 aXRpb25zLCBubyBtYXR0ZXIgdGhlIG51bWJlciBvZiBOVU1BIG5vZGVzLgorICovCisjZGVm aW5lIE1JTl9CVUZGRVJfUEFSVElUSU9OUwk0CiAKK2Jvb2wJc2hhcmVkX2J1ZmZlcnNfbnVt YSA9IGZhbHNlOwogCiAvKgogICogUmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBhcmVhIGZvciB0 aGUgYnVmZmVyIHBvb2wuCkBAIC04MSw2ICs5MiwxMCBAQCBjb25zdCBTaG1lbUNhbGxiYWNr cyBCdWZmZXJNYW5hZ2VyU2htZW1DYWxsYmFja3MgPSB7CiBzdGF0aWMgdm9pZAogQnVmZmVy TWFuYWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpCiB7CisJaW50CQlucGFydHM7CisKKwlC dWZmZXJQYXJ0aXRpb25zQ2FsY3VsYXRlKE5VTEwsICZucGFydHMsIE5VTEwpOworCiAJU2ht ZW1SZXF1ZXN0U3RydWN0KC5uYW1lID0gIkJ1ZmZlciBEZXNjcmlwdG9ycyIsCiAJCQkJCSAg IC5zaXplID0gTkJ1ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCksCiAJLyogQWxp Z24gZGVzY3JpcHRvcnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkuICovCkBAIC0xMDMsNyAr MTE4LDcgQEAgQnVmZmVyTWFuYWdlclNobWVtUmVxdWVzdCh2b2lkICphcmcpCiAJCSk7CiAK IAlTaG1lbVJlcXVlc3RTdHJ1Y3QoLm5hbWUgPSAiQnVmZmVyIFBhcnRpdGlvbiBSZWdpc3Ry eSIsCi0JCQkJCSAgIC5zaXplID0gTlVNX0NMT0NLX1NXRUVQX1BBUlRJVElPTlMgKiBzaXpl b2YoQnVmZmVyUGFydGl0aW9uKSwKKwkJCQkJICAgLnNpemUgPSBucGFydHMgKiBzaXplb2Yo QnVmZmVyUGFydGl0aW9uKSwKIAkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGlu ZSBib3VuZGFyeS4gKi8KIAkJCQkJICAgLmFsaWdubWVudCA9IFBHX0NBQ0hFX0xJTkVfU0la RSwKIAkJCQkJICAgLnB0ciA9ICh2b2lkICoqKSAmQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5 LApAQCAtMTM0LDYgKzE0OSwxMCBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQgKmFy ZykKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGJ1ZmZlciBwYXJ0aXRpb24gcmVnaXN0cnkg Zmlyc3QsIGJlZm9yZSBvdGhlciBwYXJ0cwogCSAqIGhhdmUgYSBjaGFuY2UgdG8gdG91Y2gg dGhlIG1lbW9yeS4KKwkgKgorCSAqIEFsc28gbW92ZXMgbWVtb3J5IHRvIGRpZmZlcmVudCBO VU1BIG5vZGVzIChpZiBlbmFibGVkIGJ5IGEgR1VDKS4KKwkgKiBEbyB0aGlzIGJlZm9yZSB0 aGUgbG9vcCB0aGF0IGluaXRpYWxpemVzIGJ1ZmZlciBoZWFkZXJzIGV0Yy4gd2hpY2gKKwkg KiBtYXkgZmF1bHQgc29tZSBvZiB0aGUgbWVtb3J5IHBhZ2VzIGV0Yy4KIAkgKi8KIAlCdWZm ZXJQYXJ0aXRpb25zSW5pdCgpOwogCkBAIC0yMzEsMzUgKzI1MCwyMTAgQEAgQnVmZmVyUGFy dGl0aW9uc0luaXQodm9pZCkKIHsKIAlpbnQJCQlidWZmZXIgPSAwOwogCi0JLyogbnVtYmVy IG9mIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAobWFrZSBzdXJlIHRvIG5vdCBvdmVyZmxvdykg Ki8KLQlpbnQJCQlwYXJ0X2J1ZmZlcnMgPSBOQnVmZmVycyAvIE5VTV9DTE9DS19TV0VFUF9Q QVJUSVRJT05TOwotCWludAkJCXJlbWFpbmluZ19idWZmZXJzID0gTkJ1ZmZlcnMgJSBOVU1f Q0xPQ0tfU1dFRVBfUEFSVElUSU9OUzsKKwlpbnQJCQlubm9kZXMsCisJCQkJbnBhcnRpdGlv bnMsCisJCQkJbnBhcnRpdGlvbnNfcGVyX25vZGU7CiAKLQlCdWZmZXJQYXJ0aXRpb25zUmVn aXN0cnktPm5wYXJ0aXRpb25zID0gTlVNX0NMT0NLX1NXRUVQX1BBUlRJVElPTlM7CisJaW50 CQkJYnVmZmVyc19wZXJfcGFydGl0aW9uLAorCQkJCWJ1ZmZlcnNfcmVtYWluaW5nOwogCi0J Zm9yIChpbnQgbiA9IDA7IG4gPCBCdWZmZXJQYXJ0aXRpb25zUmVnaXN0cnktPm5wYXJ0aXRp b25zOyBuKyspCi0JewotCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0 aW9uc1JlZ2lzdHJ5LT5wYXJ0aXRpb25zW25dOworCS8qIGNhbGN1bGF0ZSBwYXJ0aXRpb25p bmcgcGFyYW1ldGVycyAqLworCUJ1ZmZlclBhcnRpdGlvbnNDYWxjdWxhdGUoJm5ub2Rlcywg Jm5wYXJ0aXRpb25zLCAmbnBhcnRpdGlvbnNfcGVyX25vZGUpOworCisJLyogcGFyYW5vaWEg Ki8KKwlBc3NlcnQobm5vZGVzID4gMCk7CisJQXNzZXJ0KG5wYXJ0aXRpb25zID49IE1JTl9C VUZGRVJfUEFSVElUSU9OUyk7CisJQXNzZXJ0KChucGFydGl0aW9ucyAlIG5ub2RlcykgPT0g MCk7CisJQXNzZXJ0KChucGFydGl0aW9uc19wZXJfbm9kZSAqIG5ub2RlcykgPT0gbnBhcnRp dGlvbnMpOwogCi0JCWludAkJCW51bV9idWZmZXJzID0gcGFydF9idWZmZXJzOwotCQlpZiAo biA8IHJlbWFpbmluZ19idWZmZXJzKQotCQkJbnVtX2J1ZmZlcnMgKz0gMTsKKwlCdWZmZXJQ YXJ0aXRpb25zUmVnaXN0cnktPm5ub2RlcyA9IG5ub2RlczsKKwlCdWZmZXJQYXJ0aXRpb25z UmVnaXN0cnktPm5wYXJ0aXRpb25zID0gbnBhcnRpdGlvbnM7CisJQnVmZmVyUGFydGl0aW9u c1JlZ2lzdHJ5LT5ucGFydGl0aW9uc19wZXJfbm9kZSA9IG5wYXJ0aXRpb25zX3Blcl9ub2Rl OwogCi0JCXJlbWFpbmluZ19idWZmZXJzIC09IG51bV9idWZmZXJzOworCS8qIHJlZ3VsYXIg cGFydGl0aW9uIHNpemUsIHRoZSBmaXJzdCBjb3VwbGUgZ2V0IGFuIGV4dHJhIGJ1ZmZlciAq LworCWJ1ZmZlcnNfcGVyX3BhcnRpdGlvbiA9IChOQnVmZmVycyAvIG5wYXJ0aXRpb25zKTsK KwlidWZmZXJzX3JlbWFpbmluZyA9IChOQnVmZmVycyAlIGJ1ZmZlcnNfcGVyX3BhcnRpdGlv bik7CiAKLQkJQXNzZXJ0KChudW1fYnVmZmVycyA+IDApICYmIChudW1fYnVmZmVycyA8PSBw YXJ0X2J1ZmZlcnMpKTsKLQkJQXNzZXJ0KChidWZmZXIgPj0gMCkgJiYgKGJ1ZmZlciA8IE5C dWZmZXJzKSk7CisJLyogc2hvdWxkIGhhdmUgYWxsIHRoZSBidWZmZXJzICovCisJQXNzZXJ0 KChidWZmZXJzX3Blcl9wYXJ0aXRpb24gKiBucGFydGl0aW9ucyArIGJ1ZmZlcnNfcmVtYWlu aW5nKSA9PSBOQnVmZmVycyk7CiAKLQkJcGFydC0+bnVtX2J1ZmZlcnMgPSBudW1fYnVmZmVy czsKLQkJcGFydC0+Zmlyc3RfYnVmZmVyID0gYnVmZmVyOwotCQlwYXJ0LT5sYXN0X2J1ZmZl ciA9IGJ1ZmZlciArIChudW1fYnVmZmVycyAtIDEpOworCS8qCisJICogTm93IHdhbGsgdGhl IHBhcnRpdGlvbnMsIGFuZCBzZXQgdGhlIGJ1ZmZlciByYW5nZS4gT3B0aW9uYWxseSwgcGxh Y2UKKwkgKiB0aGUgcGFydGl0aW9ucyBvbiBhIGdpdmVuIG5vZGUgKGZvciBhbGwgcGFydGl0 aW9ucyBhdCBvbmNlKS4KKwkgKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IG5ub2Rlczsgbisr KQorCXsKKwkJZm9yIChpbnQgcCA9IDA7IHAgPCBucGFydGl0aW9uc19wZXJfbm9kZTsgcCsr KQorCQl7CisJCQlpbnQJCQlpZHggPSAobiAqIG5wYXJ0aXRpb25zX3Blcl9ub2RlKSArIHA7 CisJCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5 LT5wYXJ0aXRpb25zW2lkeF07CisKKwkJCS8qCisJCQkgKiBBc3NpZ24gdG8gdGhlIE5VTUEg bm9kZSwgYnV0IG9ubHkgd2l0aCBzaGFyZWRfYnVmZmVyc19udW1hPW9uLgorCQkJICoKKwkJ CSAqIFhYWCB3ZSBzaG91bGQgZ2V0IGFuIGFjdHVhbCBub2RlIElEIGZyb20gdGhlIG1hc2ss IGluIGNhc2UgdGhlCisJCQkgKiB0YXNrIGlzIHJlc3RyaWN0ZWQgdG8gb25seSBzb21lIG5v ZGVzLgorCQkJICovCisJCQlwYXJ0LT5udW1hX25vZGUgPSAoc2hhcmVkX2J1ZmZlcnNfbnVt YSkgPyBuIDogLTE7CisKKwkJCS8qIFRoZSBmaXJzdCBjb3VwbGUgcGFydGl0aW9ucyBtYXkg Z2V0IGFuIGV4dHJhIGJ1ZmZlci4gKi8KKwkJCXBhcnQtPm51bV9idWZmZXJzID0gYnVmZmVy c19wZXJfcGFydGl0aW9uOworCQkJaWYgKGlkeCA8IGJ1ZmZlcnNfcmVtYWluaW5nKQorCQkJ CXBhcnQtPm51bV9idWZmZXJzICs9IDE7CisKKwkJCS8qIHJlbWVtYmVyIHRoZSBidWZmZXIg cmFuZ2UgKi8KKwkJCXBhcnQtPmZpcnN0X2J1ZmZlciA9IGJ1ZmZlcjsKKwkJCXBhcnQtPmxh c3RfYnVmZmVyID0gYnVmZmVyICsgKHBhcnQtPm51bV9idWZmZXJzIC0gMSk7CisKKwkJCS8q IHJlbWVtYmVyIHN0YXJ0IG9mIHRoZSBuZXh0IHBhcnRpdGlvbiAqLworCQkJYnVmZmVyICs9 IHBhcnQtPm51bV9idWZmZXJzOworCQl9CiAKLQkJYnVmZmVyICs9IG51bV9idWZmZXJzOwor I2lmZGVmIFVTRV9MSUJOVU1BCisJCS8qCisJCSAqIE5vdyB0cnkgdG8gbG9jYXRlIGJ1ZmZl cnMgYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycyB0byB0aGUgbm9kZSAoYWxsCisJCSAqIHBhcnRp dGlvbnMgZm9yIHRoZSBub2RlIGF0IG9uY2UpLgorCQkgKi8KKwkJaWYgKHNoYXJlZF9idWZm ZXJzX251bWEpCisJCXsKKwkJCVNpemUJbnVtYV9wYWdlX3NpemUgPSBwZ19udW1hX3BhZ2Vf c2l6ZSgpOworCisJCQlpbnQJCXBhcnRfZmlyc3QsCisJCQkJCXBhcnRfbGFzdCwKKwkJCQkJ YnVmZl9maXJzdCwKKwkJCQkJYnVmZl9sYXN0OworCisJCQljaGFyICAgKnN0YXJ0cHRyLAor CQkJCSAgICplbmRwdHI7CisKKwkJCS8qIGZpcnN0L2xhc3QgcGFydGl0aW9uIGZvciB0aGlz IG5vZGUgKi8KKwkJCXBhcnRfZmlyc3QgPSAobiAqIG5wYXJ0aXRpb25zX3Blcl9ub2RlKTsK KwkJCXBhcnRfbGFzdCA9IHBhcnRfZmlyc3QgKyAobnBhcnRpdGlvbnNfcGVyX25vZGUgLSAx KTsKKworCQkJLyogYnVmZmVycyAoYmxvY2tzKSAqLworCisJCQkvKiBmaXJzdC9sYXN0IGJ1 ZmZlciAqLworCQkJYnVmZl9maXJzdCA9IEJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+cGFy dGl0aW9uc1twYXJ0X2ZpcnN0XS5maXJzdF9idWZmZXI7CisJCQlidWZmX2xhc3QgPSBCdWZm ZXJQYXJ0aXRpb25zUmVnaXN0cnktPnBhcnRpdGlvbnNbcGFydF9sYXN0XS5sYXN0X2J1ZmZl cjsKKworCQkJLyogYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBibG9jaywgZW5kIG9mIGxhc3Qg YmxvY2sgKi8KKwkJCXN0YXJ0cHRyID0gQnVmZmVyQmxvY2tzICsgKChTaXplKSBidWZmX2Zp cnN0ICogQkxDS1NaKTsKKwkJCWVuZHB0ciA9IEJ1ZmZlckJsb2NrcyArICgoU2l6ZSkgKGJ1 ZmZfbGFzdCArIDEpICogQkxDS1NaKTsKKworCQkJLyogcHJpbnQgc29tZSB3YXJuaW5ncyB3 aGVuIHRoZSBwYXJ0aXRpb25zIGFyZSBub3QgYWxpZ25lZCAqLworCQkJaWYgKChzdGFydHB0 ciAhPSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3NpemUsIHN0YXJ0cHRyKSkgfHwK KwkJCQkoZW5kcHRyICE9IChjaGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgZW5k cHRyKSkpCisJCQl7CisJCQkJZWxvZyhXQVJOSU5HLCAiYnVmZmVycyBmb3Igbm9kZSAlZCBu b3Qgd2VsbCBhbGlnbmVkIFslcCwlcF0iLAorCQkJCQkgbiwgc3RhcnRwdHIsIGVuZHB0cik7 CisJCQl9CisKKwkJCS8qIGJlc3QgZWZmb3J0OiBhbGlnbiB0aGUgcG9pbnRlcnMsIHNvIHRo YXQgdGhlIG1iaW5kKCkgd29ya3MgKi8KKwkJCXN0YXJ0cHRyID0gKGNoYXIgKikgVFlQRUFM SUdOX0RPV04obnVtYV9wYWdlX3NpemUsIHN0YXJ0cHRyKTsKKworCQkJLyogdGhlIGxhc3Qg cGFydGl0aW9uIGFsaWducyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KKwkJCWlmIChu ID09IChubm9kZXMgLSAxKSkKKwkJCQllbmRwdHIgPSAoY2hhciAqKSBUWVBFQUxJR04obnVt YV9wYWdlX3NpemUsIGVuZHB0cik7CisJCQllbHNlCisJCQkJZW5kcHRyID0gKGNoYXIgKikg VFlQRUFMSUdOX0RPV04obnVtYV9wYWdlX3NpemUsIGVuZHB0cik7CisKKwkJCS8qIFhYWCBv ciBzaG91bGQgd2UgdXNlIHBnX251bWFfbW92ZV90b19ub2RlPyAqLworCQkJaWYgKHBnX251 bWFfYmluZF90b19ub2RlKHN0YXJ0cHRyLCBlbmRwdHIsIG4pICE9IDApCisJCQkJZWxvZyhX QVJOSU5HLCAiZmFpbGVkIHRvIGJpbmQgc2hhcmVkIGJ1ZmZlcnMgcGFydGl0aW9uIHRvIG5v ZGUgJWQiLCBuKTsKKworCQkJLyogYnVmZmVyIGRlc2NyaXB0b3JzICovCisKKwkJCS8qIGJl Z2lubmluZyBvZiB0aGUgZmlyc3QgZGVzY3JpcHRvciwgZW5kIG9mIGxhc3QgZGVzY3JpcHRv ciAqLworCQkJc3RhcnRwdHIgPSAoY2hhciAqKSAmQnVmZmVyRGVzY3JpcHRvcnNbYnVmZl9m aXJzdF07CisJCQllbmRwdHIgPSAoY2hhciAqKSAmQnVmZmVyRGVzY3JpcHRvcnNbYnVmZl9s YXN0XSArIDE7CisKKwkJCS8qIHByaW50IHNvbWUgd2FybmluZ3Mgd2hlbiB0aGUgcGFydGl0 aW9ucyBhcmUgbm90IGFsaWduZWQgKi8KKwkJCWlmICgoc3RhcnRwdHIgIT0gKGNoYXIgKikg VFlQRUFMSUdOKG51bWFfcGFnZV9zaXplLCBzdGFydHB0cikpIHx8CisJCQkJKGVuZHB0ciAh PSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3NpemUsIGVuZHB0cikpKQorCQkJewor CQkJCWVsb2coV0FSTklORywgImJ1ZmZlcnMgZGVzY3JpcHRvcnMgZm9yIG5vZGUgJWQgbm90 IHdlbGwgYWxpZ25lZCBbJXAsJXBdIiwKKwkJCQkJIG4sIHN0YXJ0cHRyLCBlbmRwdHIpOwor CQkJfQorCisJCQkvKiBiZXN0IGVmZm9ydDogYWxpZ24gdGhlIHBvaW50ZXJzLCBzbyB0aGF0 IHRoZSBtYmluZCgpIHdvcmtzICovCisJCQlzdGFydHB0ciA9IChjaGFyICopIFRZUEVBTElH Tl9ET1dOKG51bWFfcGFnZV9zaXplLCBzdGFydHB0cik7CisKKwkJCWlmIChuID09IChubm9k ZXMgLSAxKSkKKwkJCQllbmRwdHIgPSAoY2hhciAqKSBUWVBFQUxJR04obnVtYV9wYWdlX3Np emUsIGVuZHB0cik7CisJCQllbHNlCisJCQkJZW5kcHRyID0gKGNoYXIgKikgVFlQRUFMSUdO X0RPV04obnVtYV9wYWdlX3NpemUsIGVuZHB0cik7CisKKwkJCS8qIFhYWCBvciBzaG91bGQg d2UgdXNlIHBnX251bWFfbW92ZV90b19ub2RlPyAqLworCQkJaWYgKHBnX251bWFfYmluZF90 b19ub2RlKHN0YXJ0cHRyLCBlbmRwdHIsIG4pICE9IDApCisJCQkJZWxvZyhXQVJOSU5HLCAi ZmFpbGVkIHRvIGJpbmQgc2hhcmVkIGJ1ZmZlciBkZXNjcmlwdG9ycyBwYXJ0aXRpb24gdG8g bm9kZSAlZCIsIG4pOworCQl9CisjZW5kaWYKIAl9CiAKIAlBc3NlcnRDaGVja0J1ZmZlclBh cnRpdGlvbnMoKTsKIH0KIAorLyoKKyAqIEJ1ZmZlclBhcnRpdGlvbnNDYWxjdWxhdGUKKyAq CQlQaWNrIG51bWJlciBvZiBidWZmZXIgcGFydGl0aW9ucyBmb3IgdGhlIG51bWJlciBvZiBu b2RlcyBhbmQKKyAqCQlNSU5fQlVGRkVSX1BBUlRJVElPTlMuCisgKgorICogUGlja3MgdGhl IHNtYWxsZXN0IG51bWJlciBvZiBwYXJ0aXRpb25zIGhpZ2hlciB0aGFoIE1JTl9CVUZGRVJf UEFSVElUSU9OUywKKyAqIHN1Y2ggdGhhdCBhbGwgbm9kZXMgaGF2ZSB0aGUgc2FtZSBudW1i ZXIgb2YgcGFydGl0aW9ucy4KKyAqCisgKiBUaGlzIGlzIGJlc3QtZWZmb3J0IHdpdGggcmVz cGVjdCB0byBzaXplIG9mIHRoZSBwYXJ0aXRpb25zLiBJdCdzIHBvc3NpYmxlCisgKiB0aGUg cGFydGl0aW9ucyBhcmUgbm90IGEgcGVyZmVjdCBtdWx0aXBsZSBvZiBwYWdlIHNpemUsIGlu IHdoaWNoIGNhc2UKKyAqIHdlIHNldCBsb2NhdGlvbiBvbmx5IGZvciB0aGUgcGFydCB3aGVy ZSB0aGF0IGlzIHBvc3NpYmxlLiBUaGUgYnVmZmVycyBvbgorICogdGhlICJib3VuZGFyeSIg bWF5IGdldCBsb2NhdGVkIHVwIG9uIGFyYml0cmFyeSBub2Rlcy4KKyAqCisgKiBUaGUgZXh0 cmEgY29tcGxleGl0eSBvZiBmaWd1cmluZyBvdXQgdGhlIHJpZ2h0ICJwYXJ0aXRpb24gc2l6 ZSIgaXMgbm90CisgKiB3b3J0aCBpdCwgYW5kIGl0IGNhbiBsZWFkIHRvIHNvbWUgcGFydGl0 aW9ucyBiZWluZyBtdWNoIHNtYWxsZXIuIFRoaXMgd2F5CisgKiB3ZSBlbmQgdXAgd2l0aCBw YXJ0aXRpb25zIG9mIGFsbW9zdCBleGFjdGx5IHRoZSBzYW1lIHNpemUgKG9uZSBCTENLU1og aXMKKyAqIHRoZSBsYXJnZXN0IGRpZmZlcmVuY2UpLgorICoKKyAqIFdlIGV4cGVjdCBzaGFy ZWQgYnVmZmVycyB0byBiZSBtdWNoIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSAoYXQgbGVhc3Qg b24KKyAqIHN5c3RlbSB3aGVyZSBOVU1BIGlzIGEgcmVsZXZhbnQgZmVhdHVyZSksIHNvIHRo ZSBudW1iZXIgb2YgIm5vdCBsb2NhdGVkIgorICogYnVmZmVycyBzaG91bGQgYmUgYSBuZWds aWdpYmxlIGZyYWN0aW9uLiBUaGlzIG9ubHkgYWZmZWN0cyBwYWdlcyBiZXR3ZWVuCisgKiBw YXJ0aXRpb25zIGZvciBkaWZmZXJlbnQgbm9kZXMsIHNvIChub2Rlcy0xKSBwYWdlcy4gVGhp cyBpcyBjZXJ0YWlubHkKKyAqIGZpbmUgd2l0aCAyTUIgaHVnZSBwYWdlcywgYnV0IGV2ZW4g d2l0aCAxR0IgcGFnZXMgaXQgc2hvdWxkIGJlIE9LIChhcworICogc3VjaCBzeXN0ZW1zIHNo b3VsZCBoYXZlIGh1bW9uZ291cyBhbW91bnRzIG9mIG1lbW9yeSkuCisgKgorICogSXQgYWxz byBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1lbW9yeSBwYWdlIHNpemUg YmVmb3JlIGtub3dpbmcKKyAqIGlmIGh1Z2UgcGFnZXMgZ290IHVzZWQgKHdoaWNoIHdlIG9u bHkgbGVhcm4gZHVyaW5nIGFsbG9jYXRpb24pLgorICovCit2b2lkCitCdWZmZXJQYXJ0aXRp b25zQ2FsY3VsYXRlKGludCAqbnVtX25vZGVzLCBpbnQgKm51bV9wYXJ0aXRpb25zLAorCQkJ CQkJICBpbnQgKm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKQoreworCWludAkJbm5vZGVzLAor CQkJbnBhcnRzLAorCQkJbnBhcnRzX3Blcl9ub2RlOworCisjaWYgVVNFX0xJQk5VTUEKKwlu bm9kZXMgPSBudW1hX251bV9jb25maWd1cmVkX25vZGVzKCk7CisJbnBhcnRzX3Blcl9ub2Rl ID0gMTsJLyogYXQgbGVhc3Qgb25lIHBhcnRpdGlvbiBwZXIgbm9kZSAqLworCisJd2hpbGUg KChucGFydHNfcGVyX25vZGUgKiBubm9kZXMpIDwgTUlOX0JVRkZFUl9QQVJUSVRJT05TKQor CQlucGFydHNfcGVyX25vZGUrKzsKKworCW5wYXJ0cyA9IChubm9kZXMgKiBucGFydHNfcGVy X25vZGUpOworI2Vsc2UKKwkvKiB3aXRob3V0IE5VTUEsIGFzc3VtZSB0aGVyZSdzIGp1c3Qg b25lIG5vZGUgKi8KKwlubm9kZXMgPSAxOworCW5wYXJ0cyA9IE1JTl9CVUZGRVJfUEFSVElU SU9OUzsKKwlucGFydHNfcGVyX25vZGUgPSBNSU5fQlVGRkVSX1BBUlRJVElPTlM7CisjZW5k aWYKKworCWlmIChudW1fbm9kZXMpCisJCSpudW1fbm9kZXMgPSBubm9kZXM7CisKKwlpZiAo bnVtX3BhcnRpdGlvbnMpCisJCSpudW1fcGFydGl0aW9ucyA9IG5wYXJ0czsKKworCWlmIChu dW1fcGFydGl0aW9uc19wZXJfbm9kZSkKKwkJKm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID0g bnBhcnRzX3Blcl9ub2RlOworfQorCiAvKgogICogQnVmZmVyUGFydGl0aW9uQ291bnQKICAq CQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBjcmVhdGVkLgpAQCAtMjc3LDEz ICs0NzEsMTQgQEAgQnVmZmVyUGFydGl0aW9uQ291bnQodm9pZCkKICAqIFRoZSByZXR1cm5l ZCBpbmZvcm1hdGlvbiBpcyBmaXJzdC9sYXN0IGJ1ZmZlciwgbnVtYmVyIG9mIGJ1ZmZlcnMu CiAgKi8KIHZvaWQKLUJ1ZmZlclBhcnRpdGlvbkdldChpbnQgaWR4LCBpbnQgKm51bV9idWZm ZXJzLAorQnVmZmVyUGFydGl0aW9uR2V0KGludCBpZHgsIGludCAqbm9kZSwgaW50ICpudW1f YnVmZmVycywKIAkJCQkgICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpsYXN0X2J1ZmZlcikK IHsKIAlpZiAoKGlkeCA+PSAwKSAmJiAoaWR4IDwgQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5 LT5ucGFydGl0aW9ucykpCiAJewogCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVy UGFydGl0aW9uc1JlZ2lzdHJ5LT5wYXJ0aXRpb25zW2lkeF07CiAKKwkJKm5vZGUgPSBwYXJ0 LT5udW1hX25vZGU7CiAJCSpudW1fYnVmZmVycyA9IHBhcnQtPm51bV9idWZmZXJzOwogCQkq Zmlyc3RfYnVmZmVyID0gcGFydC0+Zmlyc3RfYnVmZmVyOwogCQkqbGFzdF9idWZmZXIgPSBw YXJ0LT5sYXN0X2J1ZmZlcjsKQEAgLTI5MywzICs0ODgsMTcgQEAgQnVmZmVyUGFydGl0aW9u R2V0KGludCBpZHgsIGludCAqbnVtX2J1ZmZlcnMsCiAKIAllbG9nKEVSUk9SLCAiaW52YWxp ZCBwYXJ0aXRpb24gaW5kZXgiKTsKIH0KKwordm9pZAorQnVmZmVyUGFydGl0aW9uc1BhcmFt cyhpbnQgKm51bV9ub2RlcywgaW50ICpudW1fcGFydGl0aW9ucywKKwkJCQkJICAgaW50ICpu dW1fcGFydGl0aW9uc19wZXJfbm9kZSkKK3sKKwlpZiAobnVtX25vZGVzKQorCQkqbnVtX25v ZGVzID0gQnVmZmVyUGFydGl0aW9uc1JlZ2lzdHJ5LT5ubm9kZXM7CisKKwlpZiAobnVtX3Bh cnRpdGlvbnMpCisJCSpudW1fcGFydGl0aW9ucyA9IEJ1ZmZlclBhcnRpdGlvbnNSZWdpc3Ry eS0+bnBhcnRpdGlvbnM7CisKKwlpZiAobnVtX3BhcnRpdGlvbnNfcGVyX25vZGUpCisJCSpu dW1fcGFydGl0aW9uc19wZXJfbm9kZSA9IEJ1ZmZlclBhcnRpdGlvbnNSZWdpc3RyeS0+bnBh cnRpdGlvbnNfcGVyX25vZGU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYwppbmRleCBmZGI1YmFkNzkxMC4uNTNlZjUyMzllOGQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMTUsNiArMTUsMTUgQEAKICAqLwogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVNQQorI2luY2x1ZGUgPHNjaGVk Lmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgor I2luY2x1ZGUgPG51bWFpZi5oPgorI2VuZGlmCisKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNp bmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5k ZXggZjE1ZTc0MTk4YzUuLjJlNzFjMDQyODJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMjcyNCw2ICsyNzI0LDEyIEBACiAgIG1heCA9 PiAnSU5UX01BWCAvIDInLAogfSwKIAoreyBuYW1lID0+ICdzaGFyZWRfYnVmZmVyc19udW1h JywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAg PT4gJ1JFU09VUkNFU19NRU0nLAorICBzaG9ydF9kZXNjID0+ICdMb2NhdGUgcGFydGl0aW9u cyBvZiBzaGFyZWQgYnVmZmVycyAoYW5kIGRlc2NyaXB0b3JzKSB0byBOVU1BIG5vZGVzLics CisgIHZhcmlhYmxlID0+ICdzaGFyZWRfYnVmZmVyc19udW1hJywKKyAgYm9vdF92YWwgPT4g J2ZhbHNlJywKK30sCisKIHsgbmFtZSA9PiAnc2hhcmVkX21lbW9yeV9zaXplJywgdHlwZSA9 PiAnaW50JywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFMJywgZ3JvdXAgPT4gJ1BSRVNFVF9P UFRJT05TJywKICAgc2hvcnRfZGVzYyA9PiAnU2hvd3MgdGhlIHNpemUgb2YgdGhlIHNlcnZl clwncyBtYWluIHNoYXJlZCBtZW1vcnkgYXJlYSAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVz dCBNQikuJywKICAgZmxhZ3MgPT4gJ0dVQ19OT1RfSU5fU0FNUExFIHwgR1VDX0RJU0FMTE9X X0lOX0ZJTEUgfCBHVUNfVU5JVF9NQiB8IEdVQ19SVU5USU1FX0NPTVBVVEVEJywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBh YzM4Y2RkYWFmOS4uYzBmNzljNzc5Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTE0Miw2ICsxNDIsNyBAQAogI3RlbXBf YnVmZmVycyA9IDhNQiAgICAgICAgICAgICAgICAgICAgICMgbWluIDgwMGtCCiAjbWF4X3By ZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDAgICAgICAgICAgIyB6ZXJvIGRpc2FibGVzIHRoZSBm ZWF0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hh bmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjc2hhcmVkX2J1ZmZlcnNfbnVtYSA9IG9mZiAgICAg ICAgICAgICAgIyBOVU1BLWF3YXJlIHBhcnRpdGlvbmluZwogIyBDYXV0aW9uOiBpdCBpcyBu b3QgYWR2aXNhYmxlIHRvIHNldCBtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zIG5vbnplcm8g dW5sZXNzCiAjIHlvdSBhY3RpdmVseSBpbnRlbmQgdG8gdXNlIHByZXBhcmVkIHRyYW5zYWN0 aW9ucy4KICN3b3JrX21lbSA9IDRNQiAgICAgICAgICAgICAgICAgICAgICAgICAjIG1pbiA2 NGtCCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX251bWEuaCBiL3NyYy9pbmNs dWRlL3BvcnQvcGdfbnVtYS5oCmluZGV4IDFiNjY4ZmUxZDkxLi44ZmU0ZDRhYjdlMyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC9wZ19udW1hLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9ydC9wZ19udW1hLmgKQEAgLTE3LDYgKzE3LDEzIEBACiBleHRlcm4gUEdETExJTVBPUlQg aW50IHBnX251bWFfaW5pdCh2b2lkKTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVt YV9xdWVyeV9wYWdlcyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICoqcGFn ZXMsIGludCAqc3RhdHVzKTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgcGdfbnVtYV9nZXRf bWF4X25vZGUodm9pZCk7CitleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19udW1hX3BhZ2Vf c2l6ZSh2b2lkKTsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2lkIHBnX251bWFfbW92ZV90b19u b2RlKGNoYXIgKnN0YXJ0cHRyLCBjaGFyICplbmRwdHIsIGludCBub2RlKTsKK2V4dGVybiBQ R0RMTElNUE9SVCBpbnQgcGdfbnVtYV9iaW5kX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNo YXIgKmVuZHB0ciwgaW50IG5vZGUpOworCitleHRlcm4gUEdETExJTVBPUlQgaW50IG51bWFf ZmxhZ3M7CisKKyNkZWZpbmUJCU5VTUFfQlVGRkVSUwkJMHgwMQogCiAjaWZkZWYgVVNFX0xJ Qk5VTUEKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxz LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCBlNWE4ODdi OTk2OS4uZTk0NGNlZTJlOTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5o CkBAIC0zNjUsMTAgKzM2NSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJEZXNjCiAgKiBs aW5lIHNpemVkLgogICoKICAqIFhYWDogQXMgdGhpcyBpcyBwcmltYXJpbHkgbWF0dGVycyBp biBoaWdobHkgY29uY3VycmVudCB3b3JrbG9hZHMgd2hpY2gKLSAqIHByb2JhYmx5IGFsbCBh cmUgNjRiaXQgdGhlc2UgZGF5cywgYW5kIHRoZSBzcGFjZSB3YXN0YWdlIHdvdWxkIGJlIGEg Yml0Ci0gKiBtb3JlIG5vdGljZWFibGUgb24gMzJiaXQgc3lzdGVtcywgd2UgZG9uJ3QgZm9y Y2UgdGhlIHN0cmlkZSB0byBiZSBjYWNoZQotICogbGluZSBzaXplZCBvbiB0aG9zZS4gSWYg c29tZWJvZHkgZG9lcyBhY3R1YWwgcGVyZm9ybWFuY2UgdGVzdGluZywgd2UgY2FuCi0gKiBy ZWV2YWx1YXRlLgorICogcHJvYmFibHkgYWxsIGFyZSA2NGJpdCB0aGVzZSBkYXlzLiBXZSBm b3JjZSB0aGUgc3RyaWRlIHRvIGJlIGNhY2hlIGxpbmUKKyAqIHNpemVkIGV2ZW4gb24gMzJi aXQgc3lzdGVtcywgd2hlcmUgdGhlIHNwYWNlIHdhc3RhZ2UgaXMgYmUgYSBiaXQgbW9yZQor ICogbm90aWNlYWJsZSwgdG8gYWxsb3cgcGFydGl0aW9uaW5nIG9mIHNoYXJlZCBidWZmZXJz ICh3aGljaCByZXF1aXJlcyB0aGUKKyAqIG1lbW9yeSBwYWdlIGJlIGEgbXVsdGlwbGUgb2Yg YnVmZmVyIGRlc2NyaXB0b3IpLgogICoKICAqIE5vdGUgdGhhdCBsb2NhbCBidWZmZXIgZGVz Y3JpcHRvcnMgYXJlbid0IGZvcmNlZCB0byBiZSBhbGlnbmVkIC0gYXMgdGhlcmUncwogICog bm8gY29uY3VycmVudCBhY2Nlc3MgdG8gdGhvc2UgaXQncyB1bmxpa2VseSB0byBiZSBiZW5l ZmljaWFsLgpAQCAtMzc4LDcgKzM3OCw3IEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZlckRlc2MK ICAqIHBsYXRmb3JtIHdpdGggZWl0aGVyIDMyIG9yIDEyOCBieXRlIGxpbmUgc2l6ZXMsIGl0 J3MgZ29vZCB0byBhbGlnbiB0bwogICogYm91bmRhcmllcyBhbmQgYXZvaWQgZmFsc2Ugc2hh cmluZy4KICAqLwotI2RlZmluZSBCVUZGRVJERVNDX1BBRF9UT19TSVpFCShTSVpFT0ZfVk9J RF9QID09IDggPyA2NCA6IDEpCisjZGVmaW5lIEJVRkZFUkRFU0NfUEFEX1RPX1NJWkUJNjQK IAogdHlwZWRlZiB1bmlvbiBCdWZmZXJEZXNjUGFkZGVkCiB7CkBAIC00MTYsOCArNDE2LDEy IEBAIGV4dGVybiBQR0RMTElNUE9SVCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRl ZCAqQnVmZmVySU9DVkFycmF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIFdyaXRlYmFja0NvbnRl eHQgQmFja2VuZFdyaXRlYmFja0NvbnRleHQ7CiAKIGV4dGVybiBpbnQJQnVmZmVyUGFydGl0 aW9uQ291bnQodm9pZCk7Ci1leHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRpb25HZXQoaW50IGlk eCwgaW50ICpudW1fYnVmZmVycywKK2V4dGVybiB2b2lkIEJ1ZmZlclBhcnRpdGlvbkdldChp bnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCiAJCQkJCQkJICAgaW50ICpm aXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpOworZXh0ZXJuIHZvaWQgQnVmZmVyUGFy dGl0aW9uc0NhbGN1bGF0ZShpbnQgKm51bV9ub2RlcywgaW50ICpudW1fcGFydGl0aW9ucywK KwkJCQkJCQkJCSAgaW50ICpudW1fcGFydGl0aW9uc19wZXJfbm9kZSk7CitleHRlcm4gdm9p ZCBCdWZmZXJQYXJ0aXRpb25zUGFyYW1zKGludCAqbnVtX25vZGVzLCBpbnQgKm51bV9wYXJ0 aXRpb25zLAorCQkJCQkJCQkgICBpbnQgKm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKIAog LyogaW4gbG9jYWxidWYuYyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZmZlckRlc2MgKkxv Y2FsQnVmZmVyRGVzY3JpcHRvcnM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA3OWEzZjQ0 NzQ3YS4uMWNmMDllOGZiN2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTU4LDEwICsx NTgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVhZEJ1ZmZlcnNPcGVyYXRpb24gUmVhZEJ1ZmZl cnNPcGVyYXRpb247CiAvKgogICogaW5mb3JtYXRpb24gYWJvdXQgb25lIHBhcnRpdGlvbiBv ZiBzaGFyZWQgYnVmZmVycwogICoKKyAqIG51bWFfbm9kIHNwZWNpZmllcyBub2RlIGZvciB0 aGlzIHBhcnRpdGlvbiAoLTEgbWVhbnMgYWxsb2NhdGVkIG9uIGFueSBub2RlKQogICogZmly c3QvbGFzdCBidWZmZXIgLSB0aGUgdmFsdWVzIGFyZSBpbmNsdXNpdmUKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgQnVmZmVyUGFydGl0aW9uCiB7CisJaW50CQkJbnVtYV9ub2RlOwkJLyogTlVN QSBub2RlICgtMSBubyBub2RlKSAqLwogCWludAkJCW51bV9idWZmZXJzOwkvKiBudW1iZXIg b2YgYnVmZmVycyAqLwogCWludAkJCWZpcnN0X2J1ZmZlcjsJLyogZmlyc3QgYnVmZmVyIG9m IHBhcnRpdGlvbiAqLwogCWludAkJCWxhc3RfYnVmZmVyOwkvKiBsYXN0IGJ1ZmZlciBvZiBw YXJ0aXRpb24gKi8KQEAgLTE3MCw3ICsxNzIsOSBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJQ YXJ0aXRpb24KIC8qIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uIGFib3V0IGFsbCBwYXJ0aXRp b25zICovCiB0eXBlZGVmIHN0cnVjdCBCdWZmZXJQYXJ0aXRpb25zCiB7CisJaW50CQkJbm5v ZGVzOwkJCS8qIG51bWJlciBvZiBOVU1BIG5vZGVzICovCiAJaW50CQkJbnBhcnRpdGlvbnM7 CS8qIG51bWJlciBvZiBwYXJ0aXRpb25zICovCisJaW50CQkJbnBhcnRpdGlvbnNfcGVyX25v ZGU7CS8qIGZvciBjb252ZW5pZW5jZSAqLwogCUJ1ZmZlclBhcnRpdGlvbiBwYXJ0aXRpb25z W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IEJ1ZmZlclBhcnRpdGlvbnM7CiAKQEAgLTIw Niw2ICsyMTAsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgUGdBaW9IYW5kbGVDYWxs YmFja3MgYWlvX2xvY2FsX2J1ZmZlcl9yZWFkdl9jYjsKIAogLyogaW4gYnVmX2luaXQuYyAq LwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKkJ1ZmZlckJsb2NrczsKK2V4dGVybiBQR0RM TElNUE9SVCBib29sIHNoYXJlZF9idWZmZXJzX251bWE7CiAKIC8qIGluIGxvY2FsYnVmLmMg Ki8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTkxvY0J1ZmZlcjsKQEAgLTM5MCw2ICszOTUs OSBAQCBleHRlcm4gdm9pZCBNYXJrRGlydHlBbGxVbnBpbm5lZEJ1ZmZlcnMoaW50MzIgKmJ1 ZmZlcnNfZGlydGllZCwKIAkJCQkJCQkJCQlpbnQzMiAqYnVmZmVyc19hbHJlYWR5X2RpcnR5 LAogCQkJCQkJCQkJCWludDMyICpidWZmZXJzX3NraXBwZWQpOwogCisvKiBpbiBidWZfaW5p dC5jICovCitleHRlcm4gaW50CUJ1ZmZlckdldE5vZGUoQnVmZmVyIGJ1ZmZlcik7CisKIC8q IGluIGxvY2FsYnVmLmMgKi8KIGV4dGVybiB2b2lkIEF0UHJvY0V4aXRfTG9jYWxCdWZmZXJz KHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9wZ19udW1hLmMgYi9zcmMvcG9ydC9w Z19udW1hLmMKaW5kZXggODk1NDY2OTI3M2EuLjY2OTg1ZjMyZGIzIDEwMDY0NAotLS0gYS9z cmMvcG9ydC9wZ19udW1hLmMKKysrIGIvc3JjL3BvcnQvcGdfbnVtYS5jCkBAIC0xOCw2ICsx OCw5IEBACiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX251 bWEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCisKK2ludAludW1hX2ZsYWdz OwogCiAvKgogICogQXQgdGhpcyBwb2ludCB3ZSBwcm92aWRlIHN1cHBvcnQgb25seSBmb3Ig TGludXggdGhhbmtzIHRvIGxpYm51bWEsIGJ1dCBpbgpAQCAtMTE4LDYgKzEyMSw5NCBAQCBw Z19udW1hX2dldF9tYXhfbm9kZSh2b2lkKQogCXJldHVybiBudW1hX21heF9ub2RlKCk7CiB9 CiAKKy8qCisgKiBwZ19udW1hX21vdmVfdG9fbm9kZQorICoJCW1vdmUgbWVtb3J5IHRvIGRp ZmZlcmVudCBOVU1BIG5vZGVzIGluIGxhcmdlciBjaHVua3MKKyAqCisgKiBzdGFydHB0ciAt IHN0YXJ0IG9mIHRoZSByZWdpb24gKHNob3VsZCBiZSBhbGlnbmVkIHRvIHBhZ2Ugc2l6ZSkK KyAqIGVuZHB0ciAtIGVuZCBvZiB0aGUgcmVnaW9uIChkb2Vzbid0IG5lZWQgdG8gYmUgYWxp Z25lZCkKKyAqIG5vZGUgLSBub2RlIHRvIG1vdmUgdGhlIG1lbW9yeSB0bworICoKKyAqIFRo ZSAic3RhcnRwdHIiIGlzIGV4cGVjdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2Ygc3lzdGVtIG1l bW9yeSBwYWdlIHNpemUsIGFzCisgKiBkZXRlcm1pbmVkIGJ5IHBnX251bWFfcGFnZV9zaXpl LgorICoKKyAqIFhYWCBXZSBvbmx5IGV4cGVjdCB0byBkbyB0aGlzIGR1cmluZyBzdGFydHVw LCB3aGVuIHRoZSBzaGFyZWQgbWVtb3J5IGlzCisgKiBzdGlsbCBiZWluZyBzZXR1cC4KKyAq Lwordm9pZAorcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVu ZHB0ciwgaW50IG5vZGUpCit7CisJU2l6ZQkJc3ogPSAoZW5kcHRyIC0gc3RhcnRwdHIpOwor CisJQXNzZXJ0KChpbnQ2NCkgc3RhcnRwdHIgJSBwZ19udW1hX3BhZ2Vfc2l6ZSgpID09IDAp OworCisJLyoKKwkgKiBudW1hX3Rvbm9kZV9tZW1vcnkgZG9lcyBub3QgYWN0dWFsbHkgY2F1 c2UgYSBwYWdlIGZhdWx0LCBhbmQgdGh1cyBkb2VzCisJICogbm90IGxvY2F0ZSB0aGUgbWVt b3J5IG9uIHRoZSBub2RlLiBTbyBpdCdzIGZhc3QsIGF0IGxlYXN0IGNvbXBhcmVkIHRvCisJ ICogcGdfbnVtYV9xdWVyeV9wYWdlcywgYW5kIGRvZXMgbm90IG1ha2Ugc3RhcnR1cCBsb25n ZXIuIEJ1dCBpdCBhbHNvCisJICogbWVhbnMgdGhlIGV4cGVuc2l2ZSBwYXJ0IGhhcHBlbiBs YXRlciwgb24gdGhlIGZpcnN0IGFjY2Vzcy4KKwkgKi8KKwludW1hX3Rvbm9kZV9tZW1vcnko c3RhcnRwdHIsIHN6LCBub2RlKTsKK30KKworaW50CitwZ19udW1hX2JpbmRfdG9fbm9kZShj aGFyICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLCBpbnQgbm9kZSkKK3sKKwlpbnQJCQkJcmV0 OworCXN0cnVjdCBiaXRtYXNrICpub2RlbWFzazsKKworCWlmIChub2RlIDwgMCkKKwl7CisJ CWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJbm9kZW1hc2sgPSBudW1h X2FsbG9jYXRlX25vZGVtYXNrKCk7CisJaWYgKG5vZGVtYXNrID09IE5VTEwpCisJeworCQll cnJubyA9IEVOT01FTTsKKwkJcmV0dXJuIC0xOworCX0KKworCW51bWFfYml0bWFza19zZXRi aXQobm9kZW1hc2ssIG5vZGUpOworCisJLyoKKwkgKiBNUE9MX0JJTkQgcGxhY2VzIHRoZSBw YWdlcyBzdHJpY3RseSBvbiB0aGUgbm9kZSwgYW5kIE1QT0xfTUZfTU9WRSBtaWdyYXRlcwor CSAqIHBhZ2VzIGFscmVhZHkgZmF1bHRlZCBpbiB0byB0aGF0IG5vZGUuIElmIG1iaW5kKCkg ZmFpbHMsIGxlYXZlIHRoZSBkZWZhdWx0CisJICogcGxhY2VtZW50IGluIGVmZmVjdCwgYW5k IHJlcG9ydCB0aGUgZmFpbHVyZS4KKwkgKi8KKwlyZXQgPSBtYmluZChzdGFydHB0ciwgKGVu ZHB0ciAtIHN0YXJ0cHRyKSwKKwkJCQlNUE9MX0JJTkQsIG5vZGVtYXNrLT5tYXNrcCwgbm9k ZW1hc2stPnNpemUsIE1QT0xfTUZfTU9WRSk7CisKKwludW1hX2ZyZWVfbm9kZW1hc2sobm9k ZW1hc2spOworCisJcmV0dXJuIHJldDsKK30KKworU2l6ZQorcGdfbnVtYV9wYWdlX3NpemUo dm9pZCkKK3sKKwlTaXplCQlvc19wYWdlX3NpemU7CisJU2l6ZQkJaHVnZV9wYWdlX3NpemU7 CisKKyNpZmRlZiBXSU4zMgorCVNZU1RFTV9JTkZPIHN5c2luZm87CisKKwlHZXRTeXN0ZW1J bmZvKCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFnZVNpemU7Cisj ZWxzZQorCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyNlbmRpZgor CisJLyogYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0IHVzZWQsIHVubGVzcyBIVUdFX1BBR0VTX09G RiAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyAhPSBIVUdFX1BBR0VTX09GRikKKwkJR2V0 SHVnZVBhZ2VTaXplKCZodWdlX3BhZ2Vfc2l6ZSwgTlVMTCk7CisJZWxzZQorCQlodWdlX3Bh Z2Vfc2l6ZSA9IDA7CisKKwlyZXR1cm4gTWF4KG9zX3BhZ2Vfc2l6ZSwgaHVnZV9wYWdlX3Np emUpOworfQorCiAjZWxzZQogCiAvKiBFbXB0eSB3cmFwcGVycyAqLwpAQCAtMTQwLDQgKzIz MSwyNSBAQCBwZ19udW1hX2dldF9tYXhfbm9kZSh2b2lkKQogCXJldHVybiAwOwogfQogCit2 b2lkCitwZ19udW1hX21vdmVfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAqZW5kcHRy LCBpbnQgbm9kZSkKK3sKKwkvKiB3ZSBkb24ndCBleHBlY3QgdG8gZXZlciBnZXQgaGVyZSBp biBidWlsZHMgd2l0aG91dCBsaWJudW1hICovCisJQXNzZXJ0KGZhbHNlKTsKK30KKworaW50 CitwZ19udW1hX2JpbmRfdG9fbm9kZShjaGFyICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLCBp bnQgbm9kZSkKK3sKKwkvKiB3ZSBkb24ndCBleHBlY3QgdG8gZXZlciBnZXQgaGVyZSBpbiBi dWlsZHMgd2l0aG91dCBsaWJudW1hICovCisJQXNzZXJ0KGZhbHNlKTsKK30KKworU2l6ZQor cGdfbnVtYV9wYWdlX3NpemUodm9pZCkKK3sKKwkvKiB3ZSBkb24ndCBleHBlY3QgdG8gZXZl ciBnZXQgaGVyZSBpbiBidWlsZHMgd2l0aG91dCBsaWJudW1hICovCisJQXNzZXJ0KGZhbHNl KTsKK30KKwogI2VuZGlmCi0tIAoyLjU0LjAKCg== --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0004-clock-sweep-basic-partitioning.patch" Content-Disposition: attachment; filename="v20260624-0004-clock-sweep-basic-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSA4MjY1YjU1NmRlNjE4MDI5ODNhM2ZlZmMzMWUwZTJlMDcxYjQ1NmVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyIEp1biAyMDI2IDIyOjE2OjU1ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgNC83XSBjbG9jay1zd2VlcDogYmFzaWMgcGFydGl0aW9uaW5nCgpQYXJ0aXRp b25zIHRoZSAiY2xvY2stc3dlZXAiIGFsZ29yaXRobSB0byB3b3JrIG9uIGluZGl2aWR1YWwg cGFydGl0aW9ucywKb25lIGJ5IG9uZS4gRWFjaCBiYWNrZW5kIHByb2Nlc3MgaXMgbWFwcGVk IHRvIG9uZSAiaG9tZSIgcGFydGl0aW9uLCB3aXRoCmFuIGluZGVwZW5kZW50IGNsb2NrIGhh bmQuIFRoaXMgcmVkdWNlcyBjb250ZW50aW9uIGZvciB3b3JrbG9hZHMgd2l0aApzaWduaWZp Y2FudCBidWZmZXIgcHJlc3N1cmUuCgpUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgInBnX2J1ZmZl cmNhY2hlX3BhcnRpdGlvbnMiIHZpZXcgdG8gaW5jbHVkZQppbmZvcm1hdGlvbiBhYm91dCB0 aGUgY2xvY2stc3dlZXAgYWN0aXZpdHkuCgpOb3RlOiBUaGlzIG5lZWRzIHNvbWUgc29ydCBv ZiAiYmFsYW5jaW5nIiB3aGVuIG9uZSBvZiB0aGUgcGFydGl0aW9ucyBpcwptdWNoIGJ1c2ll ciB0aGFuIHRoZSByZXN0IChlLmcuIGJlY2F1c2UgdGhlcmUncyBhIHNpbmdsZSBiYWNrZW5k IGNvbnN1bWluZwphIGxvdCBvZiBidWZmZXJzIGZyb20gaXQpLgoKTm90ZTogVGhlcmUncyBh IHByb2JsZW0gd2l0aCBzb21lIHRlc3RzIHJ1bm5pbmcgb3V0IG9mIHVucGlubmVkIGJ1ZmZl cnMsCmR1ZSB0byAoaW50ZW50aW9uYWxseSkgc2V0dGluZyBzaGFyZWQgYnVmZmVycyB2ZXJ5 IGxvdy4gVGhhdCBoYXBwZW5zCmJlY2F1c2UgU3RyYXRlZ3lHZXRCdWZmZXIoKSBvbmx5IHNl YXJjaGVzIGEgc2luZ2xlIHBhcnRpdGlvbiwgYW5kIGl0CmhhcyBhIGNvdXBsZSBtb3JlIGlz c3Vlcy4KLS0tCiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbCAgICAgICAgICAg ICAgfCAgIDggKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFn ZXMuYyB8ICAzMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAg ICAgICAgIHwgMjAyICsrKysrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jICAgICAgICAgfCAzMzMgKysrKysrKysrKysrKysrKy0tCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvdGVz dC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbCAgICAgfCAgIDUgKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsKIDggZmls ZXMgY2hhbmdlZCwgNDg2IGluc2VydGlvbnMoKyksIDEwNCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEu OC5zcWwgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEu OC5zcWwKaW5kZXggYTZlNDlmZDE2NTIuLjkyMTc2ZmVkN2Y4IDEwMDY0NAotLS0gYS9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKKysrIGIv Y29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS43LS0xLjguc3FsCkBA IC0xNCw3ICsxNCwxMyBAQCBDUkVBVEUgVklFVyBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25z IEFTCiAJIG51bWFfbm9kZSBpbnRlZ2VyLAkJCS0tIE5VTUEgbm9kZSBvZiB0aGUgcGFydGl0 aW9vbgogCSBudW1fYnVmZmVycyBpbnRlZ2VyLAkJLS0gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4g dGhlIHBhcnRpdGlvbgogCSBmaXJzdF9idWZmZXIgaW50ZWdlciwJCS0tIGZpcnN0IGJ1ZmZl ciBvZiBwYXJ0aXRpb24KLQkgbGFzdF9idWZmZXIgaW50ZWdlcik7CQktLSBsYXN0IGJ1ZmZl ciBvZiBwYXJ0aXRpb24KKwkgbGFzdF9idWZmZXIgaW50ZWdlciwJCS0tIGxhc3QgYnVmZmVy IG9mIHBhcnRpdGlvbgorCisJIC0tIGNsb2Nrc3dlZXAgY291bnRlcnMKKwkgbnVtX3Bhc3Nl cyBiaWdpbnQsCQkJLS0gY2xvY2tzd2VlcCBwYXNzZXMKKwkgbmV4dF9idWZmZXIgaW50ZWdl ciwJCS0tIG5leHQgdmljdGltIGJ1ZmZlciBmb3IgY2xvY2tzd2VlcAorCSB0b3RhbF9hbGxv Y3MgYmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKHJ1bm5pbmcgdG90YWwpCisJIG51bV9h bGxvY3MgYmlnaW50KTsJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQogCiAt LSBEb24ndCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMuCiBSRVZPS0Ug QUxMIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBGUk9NIFBVQkxJ QzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVf cGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMu YwppbmRleCA0NmI2Yjg1YTJlMy4uYjA3ZmFmZGEwZDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTMxLDcgKzMxLDcgQEAK ICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX01BUktfRElSVFlfQUxMX0VMRU0gMwogCiAjZGVm aW5lIE5VTV9CVUZGRVJDQUNIRV9PU19QQUdFU19FTEVNCTMKLSNkZWZpbmUgTlVNX0JVRkZF UkNBQ0hFX1BBUlRJVElPTlNfRUxFTQk1CisjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9QQVJU SVRJT05TX0VMRU0JOQogCiBQR19NT0RVTEVfTUFHSUNfRVhUKAogCQkJCQkubmFtZSA9ICJw Z19idWZmZXJjYWNoZSIsCkBAIC05NjMsNiArOTYzLDE0IEBAIHBnX2J1ZmZlcmNhY2hlX3Bh cnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsK IAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDUsICJsYXN0 X2J1ZmZlciIsCiAJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRF bnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA2LCAibnVtX3Bhc3NlcyIsCisJCQkJCQkg ICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChB dHRyTnVtYmVyKSA3LCAibmV4dF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDAp OworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgOCwgInRv dGFsX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0lu aXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA5LCAibnVtX2FsbG9jcyIsCisJCQkJ CQkgICBJTlQ4T0lELCAtMSwgMCk7CiAKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0gQmxlc3NU dXBsZURlc2ModHVwbGVkZXNjKTsKIApAQCAtOTg0LDEyICs5OTIsMjIgQEAgcGdfYnVmZmVy Y2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQlmaXJzdF9idWZmZXIs CiAJCQkJCWxhc3RfYnVmZmVyOwogCisJCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9jczsK KworCQl1aW50MzIJCWNvbXBsZXRlX3Bhc3NlcywKKwkJCQkJbmV4dF92aWN0aW1fYnVmZmVy LAorCQkJCQlidWZmZXJfYWxsb2NzOworCiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNB Q0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9Q QVJUSVRJT05TX0VMRU1dOwogCiAJCUJ1ZmZlclBhcnRpdGlvbkdldChpLCAmbnVtYV9ub2Rl LCAmbnVtX2J1ZmZlcnMsCiAJCQkJCQkgICAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIp OwogCisJCUNsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGksCisJCQkJCQkJCSAgICZjb21w bGV0ZV9wYXNzZXMsICZuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCSAgICZidWZmZXJf dG90YWxfYWxsb2NzLCAmYnVmZmVyX2FsbG9jcyk7CisKIAkJdmFsdWVzWzBdID0gSW50MzJH ZXREYXR1bShpKTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKIApAQCAtMTAwNSw2ICsxMDIzLDE4 IEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJdmFs dWVzWzRdID0gSW50MzJHZXREYXR1bShsYXN0X2J1ZmZlcik7CiAJCW51bGxzWzRdID0gZmFs c2U7CiAKKwkJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1bShjb21wbGV0ZV9wYXNzZXMpOwor CQludWxsc1s1XSA9IGZhbHNlOworCisJCXZhbHVlc1s2XSA9IEludDMyR2V0RGF0dW0obmV4 dF92aWN0aW1fYnVmZmVyKTsKKwkJbnVsbHNbNl0gPSBmYWxzZTsKKworCQl2YWx1ZXNbN10g PSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl90b3RhbF9hbGxvY3MpOworCQludWxsc1s3XSA9IGZh bHNlOworCisJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0oYnVmZmVyX2FsbG9jcyk7CisJ CW51bGxzWzhdID0gZmFsc2U7CisKIAkJLyogQnVpbGQgYW5kIHJldHVybiB0aGUgdHVwbGUu ICovCiAJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKChUdXBsZURlc2MpIGZ1bmNjdHgtPnVz ZXJfZmN0eCwgdmFsdWVzLCBudWxscyk7CiAJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERhdHVt KHR1cGxlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggZDZjMGNj MWY2ZDQuLjdiZWRhZjg5ODdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwpAQCAtMzgyNiwzMyArMzgyNiwzNCBAQCBCdWZmZXJTeW5jKGludCBmbGFncykKIH0KIAog LyoKLSAqIEJnQnVmZmVyU3luYyAtLSBXcml0ZSBvdXQgc29tZSBkaXJ0eSBidWZmZXJzIGlu IHRoZSBwb29sLgotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHBlcmlvZGljYWxseSBieSB0aGUg YmFja2dyb3VuZCB3cml0ZXIgcHJvY2Vzcy4KKyAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdl ZW4gY2FsbHMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRlZ3kgcG9pbnQncworICog YWR2YW5jZSByYXRlIGFuZCBhdm9pZCBzY2FubmluZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVy cy4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgaXQncyBhcHByb3ByaWF0ZSBmb3IgdGhlIGJn d3JpdGVyIHByb2Nlc3MgdG8gZ28gaW50bwotICogbG93LXBvd2VyIGhpYmVybmF0aW9uIG1v ZGUuICAoVGhpcyBoYXBwZW5zIGlmIHRoZSBzdHJhdGVneSBjbG9jay1zd2VlcAotICogaGFz IGJlZW4gImxhcHBlZCIgYW5kIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBoYXZlIG9jY3VycmVk IHJlY2VudGx5LAotICogb3IgaWYgdGhlIGJnd3JpdGVyIGhhcyBiZWVuIGVmZmVjdGl2ZWx5 IGRpc2FibGVkIGJ5IHNldHRpbmcKLSAqIGJnd3JpdGVyX2xydV9tYXhwYWdlcyB0byAwLikK KyAqIFhYWCBEb2VzIGl0IGFjdHVhbGx5IG1ha2Ugc2Vuc2UgdG8gc3BsaXQgYWxsIG9mIHRo aXMgaW5mb3JtYXRpb24gcGVyCisgKiBwYXJ0aXRpb24/IEZvciBleGFtcGxlLCBkb2VzIHBl ci1wYXJ0aXRpb24gYWR2YW5jZSByYXRlIG1lYW4gYW55dGhpbmc/CisgKiBNYXliZSB3ZSBz aG91bGQgaGF2ZSBhIGdsb2JhbCBhZHZhbmNlIHJhdGU/IEFsdGhvdWdoLCBpZiB3ZSB3YW50 IHRvCisgKiBrZWVwIGVub3VnaCBjbGVhbiBidWZmZXJzIGluIGVhY2ggcGFydGl0aW9uLCBt YXliZSBoYXZpbmcgcGVyLXBhcnRpdGlvbgorICogcmF0ZXMgbWFrZXMgc2Vuc2UuCiAgKi8K LWJvb2wKLUJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQordHlw ZWRlZiBzdHJ1Y3QgQnVmZmVyU3luY1BhcnRpdGlvbgoreworCWludAlwcmV2X3N0cmF0ZWd5 X2J1Zl9pZDsKKwl1aW50MzIgcHJldl9zdHJhdGVneV9wYXNzZXM7CisJaW50CW5leHRfdG9f Y2xlYW47CisJdWludDMyIG5leHRfcGFzc2VzOworfSBCdWZmZXJTeW5jUGFydGl0aW9uOwor CitzdGF0aWMgQnVmZmVyU3luY1BhcnRpdGlvbiAqc2F2ZWRfaW5mbyA9IE5VTEw7CitzdGF0 aWMgYm9vbCBzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7CisKK3N0YXRpYyBib29sCitCZ0J1 ZmZlclN5bmNQYXJ0aXRpb24oV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCwgaW50IG51 bV9wYXJ0aXRpb25zLAorCQkJCQkgIGludCBwYXJ0aXRpb24sIGludCByZWNlbnRfYWxsb2Nf cGFydGl0aW9uLAorCQkJCQkgIEJ1ZmZlclN5bmNQYXJ0aXRpb24gKnNhdmVkKQogewogCS8q IGluZm8gb2J0YWluZWQgZnJvbSBmcmVlbGlzdC5jICovCiAJaW50CQkJc3RyYXRlZ3lfYnVm X2lkOwogCXVpbnQzMgkJc3RyYXRlZ3lfcGFzc2VzOwotCXVpbnQzMgkJcmVjZW50X2FsbG9j OwotCi0JLyoKLQkgKiBJbmZvcm1hdGlvbiBzYXZlZCBiZXR3ZWVuIGNhbGxzIHNvIHdlIGNh biBkZXRlcm1pbmUgdGhlIHN0cmF0ZWd5Ci0JICogcG9pbnQncyBhZHZhbmNlIHJhdGUgYW5k IGF2b2lkIHNjYW5uaW5nIGFscmVhZHktY2xlYW5lZCBidWZmZXJzLgotCSAqLwotCXN0YXRp YyBib29sIHNhdmVkX2luZm9fdmFsaWQgPSBmYWxzZTsKLQlzdGF0aWMgaW50CXByZXZfc3Ry YXRlZ3lfYnVmX2lkOwotCXN0YXRpYyB1aW50MzIgcHJldl9zdHJhdGVneV9wYXNzZXM7Ci0J c3RhdGljIGludAluZXh0X3RvX2NsZWFuOwotCXN0YXRpYyB1aW50MzIgbmV4dF9wYXNzZXM7 CiAKIAkvKiBNb3ZpbmcgYXZlcmFnZXMgb2YgYWxsb2NhdGlvbiByYXRlIGFuZCBjbGVhbi1i dWZmZXIgZGVuc2l0eSAqLwogCXN0YXRpYyBmbG9hdCBzbW9vdGhlZF9hbGxvYyA9IDA7CkBA IC0zODgwLDI1ICszODgxLDE2IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3 Yl9jb250ZXh0KQogCWxvbmcJCW5ld19zdHJhdGVneV9kZWx0YTsKIAl1aW50MzIJCW5ld19y ZWNlbnRfYWxsb2M7CiAKKwkvKiBidWZmZXIgcmFuZ2UgZm9yIHRoZSBjbG9ja3N3ZWVwIHBh cnRpdGlvbiAqLworCWludAkJCWZpcnN0X2J1ZmZlcjsKKwlpbnQJCQludW1fYnVmZmVyczsK KwogCS8qCiAJICogRmluZCBvdXQgd2hlcmUgdGhlIGNsb2NrLXN3ZWVwIGN1cnJlbnRseSBp cywgYW5kIGhvdyBtYW55IGJ1ZmZlcgogCSAqIGFsbG9jYXRpb25zIGhhdmUgaGFwcGVuZWQg c2luY2Ugb3VyIGxhc3QgY2FsbC4KIAkgKi8KLQlzdHJhdGVneV9idWZfaWQgPSBTdHJhdGVn eVN5bmNTdGFydCgmc3RyYXRlZ3lfcGFzc2VzLCAmcmVjZW50X2FsbG9jKTsKLQotCS8qIFJl cG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRvIHBnc3RhdCAqLwotCVBlbmRpbmdCZ1dyaXRl clN0YXRzLmJ1Zl9hbGxvYyArPSByZWNlbnRfYWxsb2M7Ci0KLQkvKgotCSAqIElmIHdlJ3Jl IG5vdCBydW5uaW5nIHRoZSBMUlUgc2NhbiwganVzdCBzdG9wIGFmdGVyIGRvaW5nIHRoZSBz dGF0cwotCSAqIHN0dWZmLiAgV2UgbWFyayB0aGUgc2F2ZWQgc3RhdGUgaW52YWxpZCBzbyB0 aGF0IHdlIGNhbiByZWNvdmVyIHNhbmVseQotCSAqIGlmIExSVSBzY2FuIGlzIHR1cm5lZCBi YWNrIG9uIGxhdGVyLgotCSAqLwotCWlmIChiZ3dyaXRlcl9scnVfbWF4cGFnZXMgPD0gMCkK LQl7Ci0JCXNhdmVkX2luZm9fdmFsaWQgPSBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQor CXN0cmF0ZWd5X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0YXJ0KHBhcnRpdGlvbiwgJnN0cmF0 ZWd5X3Bhc3NlcywKKwkJCQkJCQkJCQkmZmlyc3RfYnVmZmVyLCAmbnVtX2J1ZmZlcnMpOwog CiAJLyoKIAkgKiBDb21wdXRlIHN0cmF0ZWd5X2RlbHRhID0gaG93IG1hbnkgYnVmZmVycyBo YXZlIGJlZW4gc2Nhbm5lZCBieSB0aGUKQEAgLTM5MTAsMTcgKzM5MDIsMTcgQEAgQmdCdWZm ZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJICovCiAJaWYgKHNhdmVk X2luZm9fdmFsaWQpCiAJewotCQlpbnQzMgkJcGFzc2VzX2RlbHRhID0gc3RyYXRlZ3lfcGFz c2VzIC0gcHJldl9zdHJhdGVneV9wYXNzZXM7CisJCWludDMyCQlwYXNzZXNfZGVsdGEgPSBz dHJhdGVneV9wYXNzZXMgLSBzYXZlZC0+cHJldl9zdHJhdGVneV9wYXNzZXM7CiAKLQkJc3Ry YXRlZ3lfZGVsdGEgPSBzdHJhdGVneV9idWZfaWQgLSBwcmV2X3N0cmF0ZWd5X2J1Zl9pZDsK LQkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nlc19kZWx0YSAqIE5CdWZmZXJzOwor CQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9pZCAtIHNhdmVkLT5wcmV2X3N0cmF0 ZWd5X2J1Zl9pZDsKKwkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nlc19kZWx0YSAq IG51bV9idWZmZXJzOwogCiAJCUFzc2VydChzdHJhdGVneV9kZWx0YSA+PSAwKTsKIAotCQlp ZiAoKGludDMyKSAobmV4dF9wYXNzZXMgLSBzdHJhdGVneV9wYXNzZXMpID4gMCkKKwkJaWYg KChpbnQzMikgKHNhdmVkLT5uZXh0X3Bhc3NlcyAtIHN0cmF0ZWd5X3Bhc3NlcykgPiAwKQog CQl7CiAJCQkvKiB3ZSdyZSBvbmUgcGFzcyBhaGVhZCBvZiB0aGUgc3RyYXRlZ3kgcG9pbnQg Ki8KLQkJCWJ1ZnNfdG9fbGFwID0gc3RyYXRlZ3lfYnVmX2lkIC0gbmV4dF90b19jbGVhbjsK KwkJCWJ1ZnNfdG9fbGFwID0gc3RyYXRlZ3lfYnVmX2lkIC0gc2F2ZWQtPm5leHRfdG9fY2xl YW47CiAjaWZkZWYgQkdXX0RFQlVHCiAJCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGFoZWFk OiBiZ3cgJXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIGxhcD0lZCIsCiAJCQkJIG5l eHRfcGFzc2VzLCBuZXh0X3RvX2NsZWFuLApAQCAtMzkyOCwxMSArMzkyMCwxMSBAQCBCZ0J1 ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lf ZGVsdGEsIGJ1ZnNfdG9fbGFwKTsKICNlbmRpZgogCQl9Ci0JCWVsc2UgaWYgKG5leHRfcGFz c2VzID09IHN0cmF0ZWd5X3Bhc3NlcyAmJgotCQkJCSBuZXh0X3RvX2NsZWFuID49IHN0cmF0 ZWd5X2J1Zl9pZCkKKwkJZWxzZSBpZiAoc2F2ZWQtPm5leHRfcGFzc2VzID09IHN0cmF0ZWd5 X3Bhc3NlcyAmJgorCQkJCSBzYXZlZC0+bmV4dF90b19jbGVhbiA+PSBzdHJhdGVneV9idWZf aWQpCiAJCXsKIAkJCS8qIG9uIHNhbWUgcGFzcywgYnV0IGFoZWFkIG9yIGF0IGxlYXN0IG5v dCBiZWhpbmQgKi8KLQkJCWJ1ZnNfdG9fbGFwID0gTkJ1ZmZlcnMgLSAobmV4dF90b19jbGVh biAtIHN0cmF0ZWd5X2J1Zl9pZCk7CisJCQlidWZzX3RvX2xhcCA9IG51bV9idWZmZXJzIC0g KHNhdmVkLT5uZXh0X3RvX2NsZWFuIC0gc3RyYXRlZ3lfYnVmX2lkKTsKICNpZmRlZiBCR1df REVCVUcKIAkJCWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJh dGVneSAldS0ldSBkZWx0YT0lbGQgbGFwPSVkIiwKIAkJCQkgbmV4dF9wYXNzZXMsIG5leHRf dG9fY2xlYW4sCkBAIC0zOTUyLDkgKzM5NDQsOSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNr Q29udGV4dCAqd2JfY29udGV4dCkKIAkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9i dWZfaWQsCiAJCQkJIHN0cmF0ZWd5X2RlbHRhKTsKICNlbmRpZgotCQkJbmV4dF90b19jbGVh biA9IHN0cmF0ZWd5X2J1Zl9pZDsKLQkJCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2Vz OwotCQkJYnVmc190b19sYXAgPSBOQnVmZmVyczsKKwkJCXNhdmVkLT5uZXh0X3RvX2NsZWFu ID0gc3RyYXRlZ3lfYnVmX2lkOworCQkJc2F2ZWQtPm5leHRfcGFzc2VzID0gc3RyYXRlZ3lf cGFzc2VzOworCQkJYnVmc190b19sYXAgPSBudW1fYnVmZmVyczsKIAkJfQogCX0KIAllbHNl CkBAIC0zOTY4LDE1ICszOTYwLDE2IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lkKTsK ICNlbmRpZgogCQlzdHJhdGVneV9kZWx0YSA9IDA7Ci0JCW5leHRfdG9fY2xlYW4gPSBzdHJh dGVneV9idWZfaWQ7Ci0JCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQlidWZz X3RvX2xhcCA9IE5CdWZmZXJzOworCQlzYXZlZC0+bmV4dF90b19jbGVhbiA9IHN0cmF0ZWd5 X2J1Zl9pZDsKKwkJc2F2ZWQtPm5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOworCQli dWZzX3RvX2xhcCA9IG51bV9idWZmZXJzOwogCX0KIAogCS8qIFVwZGF0ZSBzYXZlZCBpbmZv IGZvciBuZXh0IHRpbWUgKi8KLQlwcmV2X3N0cmF0ZWd5X2J1Zl9pZCA9IHN0cmF0ZWd5X2J1 Zl9pZDsKLQlwcmV2X3N0cmF0ZWd5X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQlzYXZl ZF9pbmZvX3ZhbGlkID0gdHJ1ZTsKKwlzYXZlZC0+cHJldl9zdHJhdGVneV9idWZfaWQgPSBz dHJhdGVneV9idWZfaWQ7CisJc2F2ZWQtPnByZXZfc3RyYXRlZ3lfcGFzc2VzID0gc3RyYXRl Z3lfcGFzc2VzOworCS8qIFhYWCB0aGlzIG5lZWRzIHRvIGhhcHBlbiBvbmx5IGFmdGVyIGFs bCBwYXJ0aXRpb25zICovCisJLyogc2F2ZWRfaW5mb192YWxpZCA9IHRydWU7ICovCiAKIAkv KgogCSAqIENvbXB1dGUgaG93IG1hbnkgYnVmZmVycyBoYWQgdG8gYmUgc2Nhbm5lZCBmb3Ig ZWFjaCBuZXcgYWxsb2NhdGlvbiwgaWUsCkBAIC0zOTg0LDkgKzM5NzcsOSBAQCBCZ0J1ZmZl clN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKgogCSAqIElmIHRoZSBz dHJhdGVneSBwb2ludCBkaWRuJ3QgbW92ZSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZW5zaXR5 IGVzdGltYXRlCiAJICovCi0JaWYgKHN0cmF0ZWd5X2RlbHRhID4gMCAmJiByZWNlbnRfYWxs b2MgPiAwKQorCWlmIChzdHJhdGVneV9kZWx0YSA+IDAgJiYgcmVjZW50X2FsbG9jX3BhcnRp dGlvbiA+IDApCiAJewotCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxvYXQpIHN0cmF0ZWd5X2Rl bHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2M7CisJCXNjYW5zX3Blcl9hbGxvYyA9IChmbG9h dCkgc3RyYXRlZ3lfZGVsdGEgLyAoZmxvYXQpIHJlY2VudF9hbGxvY19wYXJ0aXRpb247CiAJ CXNtb290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAtIHNtb290aGVkX2RlbnNp dHkpIC8KIAkJCXNtb290aGluZ19zYW1wbGVzOwogCX0KQEAgLTM5OTYsNyArMzk4OSw3IEBA IEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqIHN0cmF0 ZWd5IHBvaW50IGFuZCB3aGVyZSB3ZSd2ZSBzY2FubmVkIGFoZWFkIHRvLCBiYXNlZCBvbiB0 aGUgc21vb3RoZWQKIAkgKiBkZW5zaXR5IGVzdGltYXRlLgogCSAqLwotCWJ1ZnNfYWhlYWQg PSBOQnVmZmVycyAtIGJ1ZnNfdG9fbGFwOworCWJ1ZnNfYWhlYWQgPSBudW1fYnVmZmVycyAt IGJ1ZnNfdG9fbGFwOwogCXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0gKGZsb2F0KSBidWZzX2Fo ZWFkIC8gc21vb3RoZWRfZGVuc2l0eTsKIAogCS8qCkBAIC00MDA0LDEwICszOTk3LDEwIEBA IEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCSAqIGEgdHJ1 ZSBhdmVyYWdlIHdlIHdhbnQgYSBmYXN0LWF0dGFjaywgc2xvdy1kZWNsaW5lIGJlaGF2aW9y OiB3ZQogCSAqIGltbWVkaWF0ZWx5IGZvbGxvdyBhbnkgaW5jcmVhc2UuCiAJICovCi0JaWYg KHNtb290aGVkX2FsbG9jIDw9IChmbG9hdCkgcmVjZW50X2FsbG9jKQotCQlzbW9vdGhlZF9h bGxvYyA9IHJlY2VudF9hbGxvYzsKKwlpZiAoc21vb3RoZWRfYWxsb2MgPD0gKGZsb2F0KSBy ZWNlbnRfYWxsb2NfcGFydGl0aW9uKQorCQlzbW9vdGhlZF9hbGxvYyA9IHJlY2VudF9hbGxv Y19wYXJ0aXRpb247CiAJZWxzZQotCQlzbW9vdGhlZF9hbGxvYyArPSAoKGZsb2F0KSByZWNl bnRfYWxsb2MgLSBzbW9vdGhlZF9hbGxvYykgLworCQlzbW9vdGhlZF9hbGxvYyArPSAoKGZs b2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uIC0gc21vb3RoZWRfYWxsb2MpIC8KIAkJCXNt b290aGluZ19zYW1wbGVzOwogCiAJLyogU2NhbGUgdGhlIGVzdGltYXRlIGJ5IGEgR1VDIHRv IGFsbG93IG1vcmUgYWdncmVzc2l2ZSB0dW5pbmcuICovCkBAIC00MDM0LDcgKzQwMjcsNyBA QCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAkgKiB0aGUg QkdXIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgc2Nhbl93aG9sZV9wb29sIHRpbWU7IHNs aWNlIHRoZQogCSAqIGJ1ZmZlciBwb29sIGludG8gdGhhdCBtYW55IHNlY3Rpb25zLgogCSAq LwotCW1pbl9zY2FuX2J1ZmZlcnMgPSAoaW50KSAoTkJ1ZmZlcnMgLyAoc2Nhbl93aG9sZV9w b29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKKwltaW5fc2Nhbl9idWZmZXJz ID0gKGludCkgKG51bV9idWZmZXJzIC8gKHNjYW5fd2hvbGVfcG9vbF9taWxsaXNlY29uZHMg LyBCZ1dyaXRlckRlbGF5KSk7CiAKIAlpZiAodXBjb21pbmdfYWxsb2NfZXN0IDwgKG1pbl9z Y2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdCkpCiAJewpAQCAtNDA1OSwyMCAr NDA1MiwyMCBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAkvKiBFeGVjdXRlIHRoZSBMUlUgc2NhbiAqLwogCXdoaWxlIChudW1fdG9fc2NhbiA+IDAg JiYgcmV1c2FibGVfYnVmZmVycyA8IHVwY29taW5nX2FsbG9jX2VzdCkKIAl7Ci0JCWludAkJ CXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xlYW4sIHRydWUsCisJCWlu dAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKHNhdmVkLT5uZXh0X3RvX2NsZWFuLCB0 cnVlLAogCQkJCQkJCQkJCQkgICB3Yl9jb250ZXh0KTsKIAotCQlpZiAoKytuZXh0X3RvX2Ns ZWFuID49IE5CdWZmZXJzKQorCQlpZiAoKytzYXZlZC0+bmV4dF90b19jbGVhbiA+PSAoZmly c3RfYnVmZmVyICsgbnVtX2J1ZmZlcnMpKQogCQl7Ci0JCQluZXh0X3RvX2NsZWFuID0gMDsK LQkJCW5leHRfcGFzc2VzKys7CisJCQlzYXZlZC0+bmV4dF90b19jbGVhbiA9IGZpcnN0X2J1 ZmZlcjsKKwkJCXNhdmVkLT5uZXh0X3Bhc3NlcysrOwogCQl9CiAJCW51bV90b19zY2FuLS07 CiAKIAkJaWYgKHN5bmNfc3RhdGUgJiBCVUZfV1JJVFRFTikKIAkJewogCQkJcmV1c2FibGVf YnVmZmVycysrOwotCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0gYmd3cml0ZXJfbHJ1X21heHBh Z2VzKQorCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0gKGJnd3JpdGVyX2xydV9tYXhwYWdlcyAv IG51bV9wYXJ0aXRpb25zKSkKIAkJCXsKIAkJCQlQZW5kaW5nQmdXcml0ZXJTdGF0cy5tYXh3 cml0dGVuX2NsZWFuKys7CiAJCQkJYnJlYWs7CkBAIC00MDg2LDcgKzQwNzksNyBAQCBCZ0J1 ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIAogI2lmZGVmIEJHV19E RUJVRwogCWVsb2coREVCVUcxLCAiYmd3cml0ZXI6IHJlY2VudF9hbGxvYz0ldSBzbW9vdGhl ZD0lLjJmIGRlbHRhPSVsZCBhaGVhZD0lZCBkZW5zaXR5PSUuMmYgcmV1c2FibGVfZXN0PSVk IHVwY29taW5nX2VzdD0lZCBzY2FubmVkPSVkIHdyb3RlPSVkIHJldXNhYmxlPSVkIiwKLQkJ IHJlY2VudF9hbGxvYywgc21vb3RoZWRfYWxsb2MsIHN0cmF0ZWd5X2RlbHRhLCBidWZzX2Fo ZWFkLAorCQkgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiwgc21vb3RoZWRfYWxsb2MsIHN0cmF0 ZWd5X2RlbHRhLCBidWZzX2FoZWFkLAogCQkgc21vb3RoZWRfZGVuc2l0eSwgcmV1c2FibGVf YnVmZmVyc19lc3QsIHVwY29taW5nX2FsbG9jX2VzdCwKIAkJIGJ1ZnNfdG9fbGFwIC0gbnVt X3RvX3NjYW4sCiAJCSBudW1fd3JpdHRlbiwKQEAgLTQxMTYsOCArNDEwOSw4MyBAQCBCZ0J1 ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKICNlbmRpZgogCX0KIAor CS8qIGNhbiB0aGlzIHBhcnRpdGlvbiBoaWJlcm5hdGUgKi8KKwlyZXR1cm4gKGJ1ZnNfdG9f bGFwID09IDAgJiYgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiA9PSAwKTsKK30KKworLyoKKyAq IEJnQnVmZmVyU3luYyAtLSBXcml0ZSBvdXQgc29tZSBkaXJ0eSBidWZmZXJzIGluIHRoZSBw b29sLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHBlcmlvZGljYWxseSBieSB0aGUgYmFja2dy b3VuZCB3cml0ZXIgcHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgaXQncyBhcHBy b3ByaWF0ZSBmb3IgdGhlIGJnd3JpdGVyIHByb2Nlc3MgdG8gZ28gaW50bworICogbG93LXBv d2VyIGhpYmVybmF0aW9uIG1vZGUuICAoVGhpcyBoYXBwZW5zIGlmIHRoZSBzdHJhdGVneSBj bG9jay1zd2VlcAorICogaGFzIGJlZW4gImxhcHBlZCIgYW5kIG5vIGJ1ZmZlciBhbGxvY2F0 aW9ucyBoYXZlIG9jY3VycmVkIHJlY2VudGx5LAorICogb3IgaWYgdGhlIGJnd3JpdGVyIGhh cyBiZWVuIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHNldHRpbmcKKyAqIGJnd3JpdGVyX2xy dV9tYXhwYWdlcyB0byAwLikKKyAqLworYm9vbAorQmdCdWZmZXJTeW5jKFdyaXRlYmFja0Nv bnRleHQgKndiX2NvbnRleHQpCit7CisJLyogaW5mbyBvYnRhaW5lZCBmcm9tIGZyZWVsaXN0 LmMgKi8KKwl1aW50MzIJCXJlY2VudF9hbGxvYzsKKwl1aW50MzIJCXJlY2VudF9hbGxvY19w YXJ0aXRpb247CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisKKwkvKiBhc3N1bWUgd2UgY2Fu IGhpYmVybmF0ZSwgYW55IHBhcnRpdGlvbiBjYW4gc2V0IHRvIGZhbHNlICovCisJYm9vbAkJ aGliZXJuYXRlID0gdHJ1ZTsKKworCS8qIGdldCB0aGUgbnVtYmVyIG9mIGNsb2Nrc3dlZXAg cGFydGl0aW9ucywgYW5kIHRvdGFsIGFsbG9jIGNvdW50ICovCisJU3RyYXRlZ3lTeW5jUHJl cGFyZSgmbnVtX3BhcnRpdGlvbnMsICZyZWNlbnRfYWxsb2MpOworCisJLyogYWxsb2NhdGUg c3BhY2UgZm9yIHBlci1wYXJ0aXRpb24gaW5mb3JtYXRpb24gYmV0d2VlbiBjYWxscyAqLwor CWlmIChzYXZlZF9pbmZvID09IE5VTEwpCisJeworCQkvKgorCQkgKiBYWFggTm90IGdyZWF0 IGl0J3MgdXNpbmcgbWFsbG9jKCksIGJ1dCBob3cgZWxzZSB0byBhbGxvY2F0ZSBhCisJCSAq IHZhcmlhYmxlLWxlbmd0aCBhcnJheT8KKwkJICovCisJCXNhdmVkX2luZm8gPSBtYWxsb2Mo c2l6ZW9mKEJ1ZmZlclN5bmNQYXJ0aXRpb24pICogbnVtX3BhcnRpdGlvbnMpOworCX0KKwor CS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRvIHBnc3RhdCAqLworCVBlbmRpbmdC Z1dyaXRlclN0YXRzLmJ1Zl9hbGxvYyArPSByZWNlbnRfYWxsb2M7CisKKwkvKiBhdmVyYWdl IGFsbG9jIGJ1ZmZlcnMgcGVyIHBhcnRpdGlvbiAqLworCXJlY2VudF9hbGxvY19wYXJ0aXRp b24gPSAocmVjZW50X2FsbG9jIC8gbnVtX3BhcnRpdGlvbnMpOworCisJLyoKKwkgKiBJZiB3 ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1c3Qgc3RvcCBhZnRlciBkb2luZyB0 aGUgc3RhdHMKKwkgKiBzdHVmZi4gIFdlIG1hcmsgdGhlIHNhdmVkIHN0YXRlIGludmFsaWQg c28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5lbHkKKwkgKiBpZiBMUlUgc2NhbiBpcyB0dXJu ZWQgYmFjayBvbiBsYXRlci4KKwkgKi8KKwlpZiAoYmd3cml0ZXJfbHJ1X21heHBhZ2VzIDw9 IDApCisJeworCQlzYXZlZF9pbmZvX3ZhbGlkID0gZmFsc2U7CisJCXJldHVybiB0cnVlOwor CX0KKworCS8qCisJICogbm93IHByb2Nlc3MgdGhlIGNsb2Nrc3dlZXAgcGFydGl0aW9ucywg b25lIGJ5IG9uZSwgdXNpbmcgdGhlIHNhbWUKKwkgKiBjbGVhbnVwIHRoYXQgd2UgdXNlZCBm b3IgYWxsIGJ1ZmZlcnMKKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgcmFuZG9taXpl IHRoZSBvcmRlciBvZiBwYXJ0aXRpb25zIGEgYml0LCBzbyB0aGF0IHdlCisJICogZG9uJ3Qg c3RhcnQgZnJvbSBwYXJ0aXRpb24gMCBhbGwgdGhlIHRpbWU/IFBlcmhhcHMgbm90IGVudGly ZWx5LCBidXQgYXQKKwkgKiBsZWFzdCBwaWNrIGEgcmFuZG9tIHN0YXJ0aW5nIHBvaW50Pwor CSAqLworCWZvciAoaW50IHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IG51bV9wYXJ0aXRp b25zOyBwYXJ0aXRpb24rKykKKwl7CisJCS8qIGhpYmVybmF0ZSBpZiBhbGwgcGFydGl0aW9u cyBjYW4gaGliZXJuYXRlICovCisJCWhpYmVybmF0ZSAmPSBCZ0J1ZmZlclN5bmNQYXJ0aXRp b24od2JfY29udGV4dCwgbnVtX3BhcnRpdGlvbnMsCisJCQkJCQkJCQkJICAgcGFydGl0aW9u LCByZWNlbnRfYWxsb2NfcGFydGl0aW9uLAorCQkJCQkJCQkJCSAgICZzYXZlZF9pbmZvW3Bh cnRpdGlvbl0pOworCX0KKworCS8qIG5vdyB0aGF0IHdlJ3ZlIHNjYW5uZWQgYWxsIHBhcnRp dGlvbnMsIG1hcmsgdGhlIGNhY2hlZCBpbmZvIGFzIHZhbGlkICovCisJc2F2ZWRfaW5mb192 YWxpZCA9IHRydWU7CisKIAkvKiBSZXR1cm4gdHJ1ZSBpZiBPSyB0byBoaWJlcm5hdGUgKi8K LQlyZXR1cm4gKGJ1ZnNfdG9fbGFwID09IDAgJiYgcmVjZW50X2FsbG9jID09IDApOworCXJl dHVybiBoaWJlcm5hdGU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJl ZWxpc3QuYwppbmRleCA1M2VmNTIzOWU4ZC4uMmQ1NjU3OTY4MmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMzYsMTcgKzM2LDI4IEBACiAKIAogLyoK LSAqIFRoZSBzaGFyZWQgZnJlZWxpc3QgY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqIEluZm9y bWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dlZXAgKG9uIGEgc3Vi c2V0IG9mIGJ1ZmZlcnMpLgorICoKKyAqIFhYWCBTaG91bGQgYmUgY2FyZWZ1bCB0byBhbGln biB0aGlzIHRvIGNhY2hlbGluZXMsIGV0Yy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAkv KiBTcGlubG9jazogcHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAqLwotCXNsb2NrX3QJCWJ1 ZmZlcl9zdHJhdGVneV9sb2NrOworCXNsb2NrX3QJCWNsb2NrX3N3ZWVwX2xvY2s7CisKKwkv KiByYW5nZSBmb3IgdGhpcyBjbG9jayBzd2VlcCBwYXJ0aXRpb24gKi8KKwlpbnQzMgkJbm9k ZTsKKwlpbnQzMgkJZmlyc3RCdWZmZXI7CisJaW50MzIJCW51bUJ1ZmZlcnM7CiAKIAkvKgog CSAqIGNsb2NrLXN3ZWVwIGhhbmQ6IGluZGV4IG9mIG5leHQgYnVmZmVyIHRvIGNvbnNpZGVy IGdyYWJiaW5nLiBOb3RlIHRoYXQKIAkgKiB0aGlzIGlzbid0IGEgY29uY3JldGUgYnVmZmVy IC0gd2Ugb25seSBldmVyIGluY3JlYXNlIHRoZSB2YWx1ZS4gU28sIHRvCiAJICogZ2V0IGFu IGFjdHVhbCBidWZmZXIsIGl0IG5lZWRzIHRvIGJlIHVzZWQgbW9kdWxvIE5CdWZmZXJzLgor CSAqCisJICogWFhYIFRoaXMgaXMgcmVsYXRpdmUgdG8gZmlyc3RCdWZmZXIsIHNvIG5lZWRz IHRvIGJlIG9mZnNldCBwcm9wZXJseS4KKwkgKgorCSAqIFhYWCBmaXJzdEJ1ZmZlciArIChu ZXh0VmljdGltQnVmZmVyICUgbnVtQnVmZmVycykKIAkgKi8KIAlwZ19hdG9taWNfdWludDMy IG5leHRWaWN0aW1CdWZmZXI7CiAKQEAgLTU3LDExICs2OCwzMiBAQCB0eXBlZGVmIHN0cnVj dAogCXVpbnQzMgkJY29tcGxldGVQYXNzZXM7IC8qIENvbXBsZXRlIGN5Y2xlcyBvZiB0aGUg Y2xvY2stc3dlZXAgKi8KIAlwZ19hdG9taWNfdWludDMyIG51bUJ1ZmZlckFsbG9jczsJLyog QnVmZmVycyBhbGxvY2F0ZWQgc2luY2UgbGFzdCByZXNldCAqLwogCisJLyogcnVubmluZyB0 b3RhbCBvZiBhbGxvY3MgKi8KKwlwZ19hdG9taWNfdWludDY0IG51bVRvdGFsQWxsb2NzOwor Cit9IENsb2NrU3dlZXA7CisKKy8qCisgKiBUaGUgc2hhcmVkIGZyZWVsaXN0IGNvbnRyb2wg aW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJLyogU3BpbmxvY2s6IHBy b3RlY3RzIHRoZSB2YWx1ZXMgYmVsb3cgKi8KKwlzbG9ja190CQlidWZmZXJfc3RyYXRlZ3lf bG9jazsKKwogCS8qCiAJICogQmd3b3JrZXIgcHJvY2VzcyB0byBiZSBub3RpZmllZCB1cG9u IGFjdGl2aXR5IG9yIC0xIGlmIG5vbmUuIFNlZQogCSAqIFN0cmF0ZWd5Tm90aWZ5QmdXcml0 ZXIuCiAJICovCiAJaW50CQkJYmd3cHJvY25vOworCisJLyogY2FjaGVkIGluZm8gYWJvdXQg ZnJlZWxpc3QgcGFydGl0aW9uaW5nICovCisJaW50CQkJbnVtX25vZGVzOworCWludAkJCW51 bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJLyog Y2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCisJQ2xvY2tTd2VlcAlzd2VlcHNbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwogCiAvKiBQb2ludGVy cyB0byBzaGFyZWQgc3RhdGUgKi8KQEAgLTEwOCw2ICsxNDAsNyBAQCBzdGF0aWMgQnVmZmVy RGVzYyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CiAJCQkJCQkJCQkgdWludDY0ICpidWZfc3RhdGUpOwogc3RhdGljIHZvaWQgQWRkQnVmZmVy VG9SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCUJ1ZmZlckRl c2MgKmJ1Zik7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKTsK IAogLyoKICAqIENsb2NrU3dlZXBUaWNrIC0gSGVscGVyIHJvdXRpbmUgZm9yIFN0cmF0ZWd5 R2V0QnVmZmVyKCkKQEAgLTExOSw2ICsxNTIsNyBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMgog Q2xvY2tTd2VlcFRpY2sodm9pZCkKIHsKIAl1aW50MzIJCXZpY3RpbTsKKwlDbG9ja1N3ZWVw ICpzd2VlcCA9IENob29zZUNsb2NrU3dlZXAoKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBt b3ZlIGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNz ZXMKQEAgLTEyNiwxNCArMTYwLDE0IEBAIENsb2NrU3dlZXBUaWNrKHZvaWQpCiAJICogYXBw YXJlbnQgb3JkZXIuCiAJICovCiAJdmljdGltID0KLQkJcGdfYXRvbWljX2ZldGNoX2FkZF91 MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CisJCXBnX2F0b21p Y19mZXRjaF9hZGRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CiAKLQlpZiAo dmljdGltID49IE5CdWZmZXJzKQorCWlmICh2aWN0aW0gPj0gc3dlZXAtPm51bUJ1ZmZlcnMp CiAJewogCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmljdGltOwogCiAJCS8qIGFsd2F5 cyB3cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlwdG9ycyAqLwotCQl2aWN0 aW0gPSB2aWN0aW0gJSBOQnVmZmVyczsKKwkJdmljdGltID0gdmljdGltICUgc3dlZXAtPm51 bUJ1ZmZlcnM7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGhlIG9uZSB0aGF0IGp1c3QgY2F1 c2VkIGEgd3JhcGFyb3VuZCwgZm9yY2UKQEAgLTE1OSwxOSArMTkzLDExOCBAQCBDbG9ja1N3 ZWVwVGljayh2b2lkKQogCQkJCSAqIGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cgb2YgbmV4 dFZpY3RpbUJ1ZmZlcnMsIGJ1dCB0aGF0J3MKIAkJCQkgKiBoaWdobHkgdW5saWtlbHkgYW5k IHdvdWxkbid0IGJlIHBhcnRpY3VsYXJseSBoYXJtZnVsLgogCQkJCSAqLwotCQkJCVNwaW5M b2NrQWNxdWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJ CQkJU3BpbkxvY2tBY3F1aXJlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAKLQkJCQl3 cmFwcGVkID0gZXhwZWN0ZWQgJSBOQnVmZmVyczsKKwkJCQl3cmFwcGVkID0gZXhwZWN0ZWQg JSBzd2VlcC0+bnVtQnVmZmVyczsKIAotCQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFy ZV9leGNoYW5nZV91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwKKwkJ CQlzdWNjZXNzID0gcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+bmV4 dFZpY3RpbUJ1ZmZlciwKIAkJCQkJCQkJCQkJCQkJICZleHBlY3RlZCwgd3JhcHBlZCk7CiAJ CQkJaWYgKHN1Y2Nlc3MpCi0JCQkJCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMr KzsKLQkJCQlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0 ZWd5X2xvY2spOworCQkJCQlzd2VlcC0+Y29tcGxldGVQYXNzZXMrKzsKKwkJCQlTcGluTG9j a1JlbGVhc2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAkJCX0KIAkJfQogCX0KLQly ZXR1cm4gdmljdGltOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UndmUgY2FsY3VsYXRlZCBh IGJ1ZmZlciBpbiB0aGUgcmFuZ2Ugb2YgdGhlIHBhcnRpdGlvbi4gQnVmZmVyCisJICogSURz IGFyZSAxLWJhc2VkLCB3ZSdyZSBjYWxjdWxhdGluZyAwLWJhc2VkIGluZGV4ZXMuCisJICov CisJQXNzZXJ0KCh2aWN0aW0gPj0gMCkgJiYgKHZpY3RpbSA8IHN3ZWVwLT5udW1CdWZmZXJz KSk7CisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHZp Y3RpbSkpOworCisJcmV0dXJuIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHZpY3RpbTsKK30KKwor LyoKKyAqIENsb2NrU3dlZXBQYXJ0aXRpb25JbmRleAorICoJCXBpY2sgdGhlIGNsb2NrLXN3 ZWVwIHBhcnRpdGlvbiB0byB1c2UgYmFzZWQgb24gUElEIGFuZCBOVU1BIG5vZGUKKyAqCisg KiBXaXRoIGxpYm51bWEsIHVzZSB0aGUgTlVNQSBub2RlIGFuZCBQSUQgdG8gcGljayB0aGUg cGFydGl0aW9uLiBPdGhlcndpc2UKKyAqIHVzZSBqdXN0IFBJRCAoYXMgaWYgdGhlcmUncyBh IHNpbmdsZSBOVU1BIG5vZGUpLgorICoKKyAqIFhYWCBUaGlzIHNob3VsZCBhbHNvIGNoZWNr IGlmIGJ1ZmZlcnMgYXJlIE5VTUEtcGFydGl0aW9uZWQsIG5vdCBqdXN0IGlmCisgKiBjb21w aWxlZCB3aXRoIGxpYm51bWEuCisgKi8KK3N0YXRpYyBpbnQKK0Nsb2NrU3dlZXBQYXJ0aXRp b25JbmRleCh2b2lkKQoreworCWludAkJbm9kZSA9IDAsCisJCQlpbmRleDsKKwlwaWRfdAlw aWQgPSBNeVByb2NQaWQ7OworCisJQXNzZXJ0KFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnMgPT0KKwkJICAgKFN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVzICogU3RyYXRlZ3lD b250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSkpOworCisJLyoKKwkgKiBJZiBidWZm ZXJzIGFyZSBOVU1BLXBhcnRpdGlvbmVkLCBkZXRlcm1pbmUgdGhlIHBhcnRpdGlvbiB1c2lu ZyB0aGUgTlVNQQorCSAqIG5vZGUgYW5kIFBJRC4gV2l0aG91dCBOVU1BIGFzc3VtZSBldmVy eXRoaW5nIGlzIGEgc2luZ2xlIE5VTUEgbm9kZSAwLCBhbmQKKwkgKiB3ZSBwaWNrIHRoZSBw YXJ0aXRpb24gYmFzZWQgb24gUElELgorCSAqLworI2lmZGVmIFVTRV9MSUJOVU1BCisJaWYg KHNoYXJlZF9idWZmZXJzX251bWEpCisJeworCQlpbnQJCWNwdTsKKworCQkvKiBYWFggZG8g d2UgbmVlZCB0byBjaGVjayBzY2hlZF9nZXRjcHUgaXMgYXZhaWxhYmxlLCBzb21laG93PyAq LworCQlpZiAoKGNwdSA9IHNjaGVkX2dldGNwdSgpKSA8IDApCisJCQllbG9nKEVSUk9SLCAi c2NoZWRfZ2V0Y3B1IGZhaWxlZDogJW0iKTsKKworCQlub2RlID0gbnVtYV9ub2RlX29mX2Nw dShjcHUpOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBXZSBzaG91bGQndCBnZXQgdW5leHBl Y3RlZCBOVU1BIG5vZGVzLCBub3QgY29uc2lkZXJlZCB3aGVuIHNldHRpbmcgdXAgdGhlCisJ ICogYnVmZmVyIHBhcnRpdGlvbnMuIEl0IGNvdWxkIGhhcHBlbiBpZiB0aGUgYWxsb3dlZCBO VU1BIG5vZGVzIGdldCBhZGp1c3RlZAorCSAqIGF0IHJ1bnRpbWUsIGJ1dCBhdCB0aGlzIHBv aW50IHdlIGp1c3QgY3JlYXRlIHBhcnRpdGlvbnMgZm9yIGFsbCBleGlzdGluZworCSAqIG5v ZGVzLiBXZSBjb3VsZCBwbGFuIGZvciBhbGxvd2VkIHBhcnRpdGlvbnMsIGJ1dCB0aGVuIHdo YXQgaWYgdGhvc2UgZ2V0CisJICogZGlzYWJsZWQsIGFuZCB0aGUgdXNlciBhbGxvd3Mgc29t ZSBvdGhlciBwYXJ0aXRpb25zPworCSAqLworCWlmICgobm9kZSA8IDApIHx8IChub2RlID4g U3RyYXRlZ3lDb250cm9sLT5udW1fbm9kZXMpKQorCQllbG9nKEVSUk9SLCAibm9kZSBvdXQg b2YgcmFuZ2U6ICVkID4gJXUiLCBub2RlLCBTdHJhdGVneUNvbnRyb2wtPm51bV9ub2Rlcyk7 CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgcGFydGl0aW9uIGluZGV4LiBOb2RlcyBoYXZl IHRoZSBzYW1lIG51bWJlciBvZiBwYXJ0aXRpb25zLAorCSAqIGFuZCB3ZSB1c2UgdGhlIFBJ RCB0byBwaWNrIG9uZSBvZiB0aG9zZSAoZm9yIGEgZ2l2ZW4gbm9kZSkuIElmIHRoZXJlJ3MK KwkgKiBvbmx5IGEgc2luZ2xlIHBhcnRpdGlvbiBwZXIgbm9kZSwgd2UgY2FuIGlnbm9yZSBQ SUQgYW5kIHVzZSBub2RlIGRpcmVjdGx5LgorCSAqLworCWlmIChTdHJhdGVneUNvbnRyb2wt Pm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID09IDEpCisJeworCQkvKiBmYXN0LXBhdGggKi8K KwkJaW5kZXggPSBub2RlOworCX0KKwllbHNlCisJeworCQkvKiB1c2UgUElEIHRvIHBpY2sg b25lIG9mIG5vZGUncyBwYXJ0aXRpb25zICovCisJCWluZGV4ID0gKG5vZGUgKiBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKQorCQkJKyAocGlkICUgU3RyYXRl Z3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSk7CisJfQorCisJLyogc2hvdWxk IGhhdmUgYSB2YWxpZCBwYXJ0aXRpb24gaW5kZXggKi8KKwlBc3NlcnQoKGluZGV4ID49IDAp ICYmIChpbmRleCA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCXJl dHVybiBpbmRleDsKK30KKworLyoKKyAqIENob29zZUNsb2NrU3dlZXAKKyAqCQlwaWNrIGEg Y2xvY2tzd2VlcCBwYXJ0aXRpb24gYmFzZWQgb24gTlVNQSBub2RlIGFuZCBQSUQKKyAqCisg KiBQaWNrIGEgcGFydGl0aW9uIG1hcHBlZCB0byB0aGUgTlVNQSBub2RlIHRoZSBiYWNrZW5k IGlzIGN1cnJlbnRseSBydW5uaW5nCisgKiBvbiwgYW5kIHVzZSBQSUQgaWYgdGhlcmUgYXJl IG11bHRpcGxlIHBhcnRpdGlvbnMgcGVyIG5vZGUuIFdpdGhvdXQgTlVNQQorICogc3VwcG9y dGVkL2VuYWJsZWQsIHVzZSBqdXN0IFBJRC4KKyAqCisgKiBYWFggTWF5YmUgd2Ugc2hvdWxk IGRvIGJvdGggdGhlIHRvdGFsIGFuZCAicGVyIGdyb3VwIiBjb3VudHMgYSBwb3dlciBvZgor ICogdHdvPyBUaGF0J2QgYWxsb3cgdXNpbmcgc2hpZnRzIGluc3RlYWQgb2YgZGl2aXNpb25z IGluIHRoZSBjYWxjdWxhdGlvbiwKKyAqIGFuZCB0aGF0J3MgY2hlYXBlci4gQnV0IGhvdyB3 b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVtYmVyIG9mIG5vZGVzPworICovCitzdGF0aWMg Q2xvY2tTd2VlcCAqCitDaG9vc2VDbG9ja1N3ZWVwKHZvaWQpCit7CisJaW50CQkJaW5kZXgg PSBDbG9ja1N3ZWVwUGFydGl0aW9uSW5kZXgoKTsKKworCXJldHVybiAmU3RyYXRlZ3lDb250 cm9sLT5zd2VlcHNbaW5kZXhdOwogfQogCiAvKgpAQCAtMjQyLDEwICszNzUsMzcgQEAgU3Ry YXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAq YnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkgKiBXZSBjb3VudCBidWZmZXIgYWxsb2NhdGlv biByZXF1ZXN0cyBzbyB0aGF0IHRoZSBiZ3dyaXRlciBjYW4gZXN0aW1hdGUKIAkgKiB0aGUg cmF0ZSBvZiBidWZmZXIgY29uc3VtcHRpb24uICBOb3RlIHRoYXQgYnVmZmVycyByZWN5Y2xl ZCBieSBhCiAJICogc3RyYXRlZ3kgb2JqZWN0IGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjb3Vu dGVkIGhlcmUuCisJICoKKwkgKiBYWFggSXQncyBub3QgcXVpdGUgcmlnaHQgd2UgY2FsbCBD aG9vc2VDbG9ja1N3ZWVwIHR3aWNlIC0gbm93LCBhbmQgdGhlbgorCSAqIGEgY291cGxlIGxp bmVzIGxhdGVyICh0aHJvdWdoIENsb2NrU3dlZXBUaWNrKS4gSWYgdGhlIHByb2Nlc3MgbW92 ZXMKKwkgKiBiZXR3ZWVuIENQVXMgLyBOVU1BIG5vZGVzIGluIGJldHdlZW4sIHRoZXNlIGNh bGwgbWF5IHBpY2sgZGlmZmVyZW50CisJICogcGFydGl0aW9ucywgY29uZnVzaW5nIHRoZSBs b2dpYyBhIGJpdC4KIAkgKi8KLQlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmU3RyYXRlZ3lD b250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDEpOworCXBnX2F0b21pY19mZXRjaF9hZGRfdTMy KCZDaG9vc2VDbG9ja1N3ZWVwKCktPm51bUJ1ZmZlckFsbG9jcywgMSk7CiAKLQkvKiBVc2Ug dGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlciAqLwor CS8qCisJICogVXNlIHRoZSAiY2xvY2sgc3dlZXAiIGFsZ29yaXRobSB0byBmaW5kIGEgZnJl ZSBidWZmZXIKKwkgKgorCSAqIFhYWCBOb3RlIHRoYXQgQ2xvY2tTd2VlcFRpY2soKSBpcyBO VU1BLWF3YXJlLCBpLmUuIGl0IG9ubHkgbG9va3MgYXQKKwkgKiBidWZmZXJzIGZyb20gYSBz aW5nbGUgcGFydGl0aW9uLCBhbGlnbmVkIHdpdGggdGhlIE5VTUEgbm9kZS4gVGhhdCBtZWFu cworCSAqIGEgcHJvY2VzcyAic3dlZXBzIiBvbmx5IGEgZnJhY3Rpb24gb2YgYnVmZmVycywg ZXZlbiBpZiB0aGUgb3RoZXIgYnVmZmVycworCSAqIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcyBm b3IgZXZpY3Rpb24uIE1heWJlIHRoZXJlIHNob3VsZCBiZSBzb21lIGxvZ2ljIHRvCisJICog InN0ZWFsIiBidWZmZXJzIGZyb20gb3RoZXIgcGFydGl0aW9ucyBvciBvdGhlciBub2Rlcz8K KwkgKgorCSAqIFhYWCBUaGlzIG9ubHkgc2VhcmNoZXMgYSBzaW5nbGUgcGFydGl0aW9uLCB3 aGljaCBjYW4gcmVzdWx0IGluICJubworCSAqIHVucGlubmVkIGJ1ZmZlcnMgYXZhaWxhYmxl IiBldmVuIGlmIHRoZXJlIGFyZSBidWZmZXJzIGluIG90aGVyCisJICogcGFydGl0aW9ucy4g TmVlZHMgdG8gc2NhbiBwYXJ0aXRpb25zIGlmIG5lZWRlZCwgYXMgYSBmYWxsYmFjay4KKwkg KgorCSAqIFhYWCBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSBzaG91bGQgaGF2ZSBtdWx0aXBs ZSBiZ3dyaXRlcnMsIG9uZSBmb3IgZWFjaAorCSAqIG5vZGUsIG9yIHdvdWxkIG9uZSBiZ3dy aXRlciBzdGlsbCBoYW5kbGUgYWxsIG5vZGVzPworCSAqCisJICogWFhYIEFsc28sIHRoZSB0 cnljb3VudGVyIHNob3VsZCBub3QgYmUgc2V0IHRvIE5CdWZmZXJzLCBidXQgdG8gYnVmZmVy CisJICogY291bnQgZm9yIHRoYXQgb25lIHBhcnRpdGlvbi4gSW4gZmFjdCwgdGhpcyBzaG91 bGQgbm90IGNhbGwgQ2xvY2tTd2VlcFRpY2sKKwkgKiBmb3IgZXZlcnkgaXRlcmF0aW9uLiBU aGUgY2FsbCBpcyBsaWtlbHkgcXVpdGUgZXhwZW5zaXZlIChkb2VzIGEgbG90CisJICogb2Yg c3R1ZmYpLCBhbmQgYWxzbyBtYXkgcmV0dXJuIGEgZGlmZmVyZW50IHBhcnRpdGlvbiBvbiBl YWNoIGNhbGwuCisJICogV2Ugc2hvdWxkIGp1c3QgZG8gaXQgb25jZSwgYW5kIHRoZW4gZG8g dGhlIGZvcig7OykgbG9vcC4gQW5kIHRoZW4KKwkgKiBtYXliZSBhZHZhbmNlIHRvIHRoZSBu ZXh0IHBhcnRpdGlvbiwgdW50aWwgd2Ugc2NhbiB0aHJvdWdoIGFsbCBvZiB0aGVtLgorCSAq LwogCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQogCXsKQEAgLTMyNSw2ICs0 ODUsNDggQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAl9CiB9CiAKKy8qCisgKiBT dHJhdGVneVN5bmNQcmVwYXJlIC0tIHByZXBhcmUgZm9yIHN5bmMgb2YgYWxsIHBhcnRpdGlv bnMKKyAqCisgKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjbG9ja3N3ZWVwIHBhcnRpdGlv bnMsIGFuZCBjYWxjdWxhdGUgdGhlIHJlY2VudAorICogYnVmZmVycyBhbGxvY3MgKGFzIGEg c3VtIG9mIGFsbCB0aGUgcGFydGl0aW9ucykuIFRoaXMgYWxsb3dzIEJnQnVmZmVyU3luYwor ICogdG8gY2FsY3VsYXRlIGF2ZXJhZ2UgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHBlciBwYXJ0 aXRpb24gZm9yIHRoZSBuZXh0CisgKiBzeW5jIGN5Y2xlLgorICoKKyAqIEluIGFkZGl0aW9u IGl0IHJldHVybnMgdGhlIGNvdW50IG9mIHJlY2VudCBidWZmZXIgYWxsb2NzLCB3aGljaCBp cyBhIHRvdGFsCisgKiBzdW1tZWQgZnJvbSBhbGwgcGFydGl0aW9ucy4gVGhlIGFsbG9jIGNv dW50cyBhcmUgcmVzZXQgYWZ0ZXIgYmVpbmcgcmVhZCwKKyAqIGFzIHRoZSBwYXJ0aXRpb25z IGFyZSB3YWxrZWQuCisgKi8KK3ZvaWQKK1N0cmF0ZWd5U3luY1ByZXBhcmUoaW50ICpudW1f cGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYykKK3sKKwkqbnVtX2J1Zl9hbGxvYyA9IDA7 CisJKm51bV9wYXJ0cyA9IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7CisKKwkv KgorCSAqIFdlIGxvY2sgdGhlIHBhcnRpdGlvbnMgb25lIGJ5IG9uZSwgc28gbm90IGV4YWNs eSBpbiBzeW5jLCBidXQgdGhhdAorCSAqIHNob3VsZCBiZSBmaW5lLiBXZSdyZSBvbmx5IGxv b2tpbmcgZm9yIGhldXJpc3RpY3MgYW55d2F5LgorCSAqLworCWZvciAoaW50IGkgPSAwOyBp IDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJQ2xvY2tT d2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07CisKKwkJLyogWFhY IERvIHdlIG5lZWQgdGhlIGxvY2ssIGlmIHdlJ3JlIG9ubHkgYWNjZXNzaW5nIGF0b21pY3M/ IFN1cmVseSBub3QuICovCisJCS8qIFhYWCBBcmUgd2UgZXZlciBjYWxsaW5nIHRoaXMgd2l0 aG91dCBudW1fYnVmX2FsbG9jPyAqLworCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9j a19zd2VlcF9sb2NrKTsKKwkJaWYgKG51bV9idWZfYWxsb2MpCisJCXsKKwkJCXVpbnQzMglh bGxvY3MgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2Nz LCAwKTsKKworCQkJLyogaW5jbHVkZSB0aGUgY291bnQgaW4gdGhlIHJ1bm5pbmcgdG90YWwg Ki8KKwkJCXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3Ms IGFsbG9jcyk7CisKKwkJCSpudW1fYnVmX2FsbG9jICs9IGFsbG9jczsKKwkJfQorCQlTcGlu TG9ja1JlbGVhc2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwl9Cit9CisKIC8qCiAg KiBTdHJhdGVneVN5bmNTdGFydCAtLSB0ZWxsIEJnQnVmZmVyU3luYyB3aGVyZSB0byBzdGFy dCBzeW5jaW5nCiAgKgpAQCAtMzMyLDM3ICs1MzQsNDQgQEAgU3RyYXRlZ3lHZXRCdWZmZXIo QnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29s ICpmcm9tX3IKICAqIEJnQnVmZmVyU3luYygpIHdpbGwgcHJvY2VlZCBjaXJjdWxhcmx5IGFy b3VuZCB0aGUgYnVmZmVyIGFycmF5IGZyb20gdGhlcmUuCiAgKgogICogSW4gYWRkaXRpb24s IHdlIHJldHVybiB0aGUgY29tcGxldGVkLXBhc3MgY291bnQgKHdoaWNoIGlzIGVmZmVjdGl2 ZWx5Ci0gKiB0aGUgaGlnaGVyLW9yZGVyIGJpdHMgb2YgbmV4dFZpY3RpbUJ1ZmZlcikgYW5k IHRoZSBjb3VudCBvZiByZWNlbnQgYnVmZmVyCi0gKiBhbGxvY3MgaWYgbm9uLU5VTEwgcG9p bnRlcnMgYXJlIHBhc3NlZC4gIFRoZSBhbGxvYyBjb3VudCBpcyByZXNldCBhZnRlcgotICog YmVpbmcgcmVhZC4KKyAqIHRoZSBoaWdoZXItb3JkZXIgYml0cyBvZiBuZXh0VmljdGltQnVm ZmVyKS4KKyAqCisgKiBUaGlzIG9ubHkgY29uc2lkZXJzIGEgc2luZ2xlIGNsb2Nrc3dlZXAg cGFydGl0aW9uLCBhcyBCZ0J1ZmZlclN5bmMgbG9va3MKKyAqIGF0IHRoZW0gb25lIGJ5IG9u ZS4KICAqLwogaW50Ci1TdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3Nl cywgdWludDMyICpudW1fYnVmX2FsbG9jKQorU3RyYXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRp dGlvbiwgdWludDMyICpjb21wbGV0ZV9wYXNzZXMsCisJCQkJICBpbnQgKmZpcnN0X2J1ZmZl ciwgaW50ICpudW1fYnVmZmVycykKIHsKIAl1aW50MzIJCW5leHRWaWN0aW1CdWZmZXI7CiAJ aW50CQkJcmVzdWx0OworCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+ c3dlZXBzW3BhcnRpdGlvbl07CiAKLQlTcGluTG9ja0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJv bC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwotCW5leHRWaWN0aW1CdWZmZXIgPSBwZ19hdG9t aWNfcmVhZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlcik7Ci0JcmVz dWx0ID0gbmV4dFZpY3RpbUJ1ZmZlciAlIE5CdWZmZXJzOworCUFzc2VydCgocGFydGl0aW9u ID49IDApICYmIChwYXJ0aXRpb24gPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25z KSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwlu ZXh0VmljdGltQnVmZmVyID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bmV4dFZpY3Rp bUJ1ZmZlcik7CisJcmVzdWx0ID0gbmV4dFZpY3RpbUJ1ZmZlciAlIHN3ZWVwLT5udW1CdWZm ZXJzOworCisJKmZpcnN0X2J1ZmZlciA9IHN3ZWVwLT5maXJzdEJ1ZmZlcjsKKwkqbnVtX2J1 ZmZlcnMgPSBzd2VlcC0+bnVtQnVmZmVyczsKIAogCWlmIChjb21wbGV0ZV9wYXNzZXMpCiAJ ewotCQkqY29tcGxldGVfcGFzc2VzID0gU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3Nl czsKKwkJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVwLT5jb21wbGV0ZVBhc3NlczsKIAogCQkv KgogCQkgKiBBZGRpdGlvbmFsbHkgYWRkIHRoZSBudW1iZXIgb2Ygd3JhcGFyb3VuZHMgdGhh dCBoYXBwZW5lZCBiZWZvcmUKIAkJICogY29tcGxldGVQYXNzZXMgY291bGQgYmUgaW5jcmVt ZW50ZWQuIEMuZi4gQ2xvY2tTd2VlcFRpY2soKS4KIAkJICovCi0JCSpjb21wbGV0ZV9wYXNz ZXMgKz0gbmV4dFZpY3RpbUJ1ZmZlciAvIE5CdWZmZXJzOworCQkqY29tcGxldGVfcGFzc2Vz ICs9IG5leHRWaWN0aW1CdWZmZXIgLyBzd2VlcC0+bnVtQnVmZmVyczsKIAl9CisJU3Bpbkxv Y2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAKLQlpZiAobnVtX2J1Zl9h bGxvYykKLQl7Ci0JCSpudW1fYnVmX2FsbG9jID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigm U3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDApOwotCX0KLQlTcGluTG9ja1Jl bGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwotCXJldHVy biByZXN1bHQ7CisJLyogWFhYIGJ1ZmZlciBJRHMgc3RhcnQgYXQgMSwgd2UncmUgY2FsY3Vs YXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoMSArIHN3 ZWVwLT5maXJzdEJ1ZmZlciArIHJlc3VsdCkpOworCisJcmV0dXJuIHN3ZWVwLT5maXJzdEJ1 ZmZlciArIHJlc3VsdDsKIH0KIAogLyoKQEAgLTM5NCw4ICs2MDMsMTQgQEAgU3RyYXRlZ3lO b3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKQogc3RhdGljIHZvaWQKIFN0cmF0ZWd5Q3Rs U2htZW1SZXF1ZXN0KHZvaWQgKmFyZykKIHsKKwlpbnQJCQludW1fcGFydGl0aW9uczsKKwor CS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ1ZmZlciBwYXJ0aXRpb25zICovCisJQnVmZmVyUGFy dGl0aW9uc0NhbGN1bGF0ZShOVUxMLCAmbnVtX3BhcnRpdGlvbnMsIE5VTEwpOworCiAJU2ht ZW1SZXF1ZXN0U3RydWN0KC5uYW1lID0gIkJ1ZmZlciBTdHJhdGVneSBTdGF0dXMiLAotCQkJ CQkgICAuc2l6ZSA9IHNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpLAorCQkJCQkgICAu c2l6ZSA9IG9mZnNldG9mKEJ1ZmZlclN0cmF0ZWd5Q29udHJvbCwgc3dlZXBzKSArCisJCQkJ CQkJbXVsX3NpemUobnVtX3BhcnRpdGlvbnMsIHNpemVvZihDbG9ja1N3ZWVwKSksCiAJCQkJ CSAgIC5wdHIgPSAodm9pZCAqKikgJlN0cmF0ZWd5Q29udHJvbAogCQkpOwogfQpAQCAtNDA4 LDEyICs2MjMsNDIgQEAgU3RyYXRlZ3lDdGxTaG1lbUluaXQodm9pZCAqYXJnKQogewogCVNw aW5Mb2NrSW5pdCgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CiAK LQkvKiBJbml0aWFsaXplIHRoZSBjbG9jay1zd2VlcCBwb2ludGVyICovCi0JcGdfYXRvbWlj X2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0aW1CdWZmZXIsIDApOworCS8q IFJlbWVtYmVyIHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyAqLworCUJ1ZmZlclBhcnRpdGlv bnNQYXJhbXMoJlN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVzLAorCQkJCQkJICAgJlN0cmF0 ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMsCisJCQkJCQkgICAmU3RyYXRlZ3lDb250cm9s LT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBjbG9j ayBzd2VlcCBwb2ludGVycyAoZm9yIGFsbCBwYXJ0aXRpb25zKSAqLworCWZvciAoaW50IGkg PSAwOyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJ aW50CQkJbm9kZSwKKwkJCQkJbnVtX2J1ZmZlcnMsCisJCQkJCWZpcnN0X2J1ZmZlciwKKwkJ CQkJbGFzdF9idWZmZXI7CisKKwkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpXS5jbG9ja19zd2VlcF9sb2NrKTsKIAotCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8K LQlTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzID0gMDsKLQlwZ19hdG9taWNfaW5p dF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxsb2NzLCAwKTsKKwkJcGdfYXRv bWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5uZXh0VmljdGltQnVm ZmVyLCAwKTsKKworCQkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYnVmZmVyIHBhcnRpdGlvbiAq LworCQlCdWZmZXJQYXJ0aXRpb25HZXQoaSwgJm5vZGUsICZudW1fYnVmZmVycywKKwkJCQkJ CSAgICZmaXJzdF9idWZmZXIsICZsYXN0X2J1ZmZlcik7CisKKwkJLyoKKwkJICogRklYTUUg VGhpcyBtYXkgbm90IHF1aXRlIHJpZ2h0LCBiZWNhdXNlIGlmIE5CdWZmZXJzIGlzIG5vdCBh CisJCSAqIHBlcmZlY3QgbXVsdGlwbGUgb2YgbnVtQnVmZmVycywgdGhlIGxhc3QgcGFydGl0 aW9uIHdpbGwgaGF2ZQorCQkgKiBudW1CdWZmZXJzIHNldCB0b28gaGlnaC4gYnVmX2luaXQg aGFuZGxlcyB0aGlzIGJ5IHRyYWNraW5nIHRoZQorCQkgKiByZW1haW5pbmcgbnVtYmVyIG9m IGJ1ZmZlcnMsIGFuZCBub3Qgb3ZlcmZsb3dpbmcuCisJCSAqLworCQlTdHJhdGVneUNvbnRy b2wtPnN3ZWVwc1tpXS5ub2RlID0gbm9kZTsKKwkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV0ubnVtQnVmZmVycyA9IG51bV9idWZmZXJzOworCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVw c1tpXS5maXJzdEJ1ZmZlciA9IGZpcnN0X2J1ZmZlcjsKKworCQkvKiBDbGVhciBzdGF0aXN0 aWNzICovCisJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0g MDsKKwkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5u dW1CdWZmZXJBbGxvY3MsIDApOworCQlwZ19hdG9taWNfaW5pdF91NjQoJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2ldLm51bVRvdGFsQWxsb2NzLCAwKTsKKwl9CiAKIAkvKiBObyBwZW5k aW5nIG5vdGlmaWNhdGlvbiAqLwogCVN0cmF0ZWd5Q29udHJvbC0+Ymd3cHJvY25vID0gLTE7 CkBAIC03NzcsMyArMTAyMiwyMyBAQCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwgQnVmZmVyRGVzYyAqYnVmLCBib29sIGZyb21fcgogCiAJ cmV0dXJuIHRydWU7CiB9CisKK3ZvaWQKK0Nsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGlu dCBpZHgsCisJCQkJCQkgICB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpuZXh0 X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkgICB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3Ms IHVpbnQzMiAqYnVmZmVyX2FsbG9jcykKK3sKKwlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJh dGVneUNvbnRyb2wtPnN3ZWVwc1tpZHhdOworCisJQXNzZXJ0KChpZHggPj0gMCkgJiYgKGlk eCA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCS8qIGdldCB0aGUg Y2xvY2tzd2VlcCBzdGF0cyAqLworCSpjb21wbGV0ZV9wYXNzZXMgPSBzd2VlcC0+Y29tcGxl dGVQYXNzZXM7CisJKm5leHRfdmljdGltX2J1ZmZlciA9IHBnX2F0b21pY19yZWFkX3UzMigm c3dlZXAtPm5leHRWaWN0aW1CdWZmZXIpOworCisJKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9t aWNfcmVhZF91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MpOworCSpidWZmZXJfdG90YWxf YWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTY0KCZzd2VlcC0+bnVtVG90YWxBbGxvY3MpOwor CisJLyogY2FsY3VsYXRlIHRoZSBhY3R1YWwgYnVmZmVyIElEICovCisJKm5leHRfdmljdGlt X2J1ZmZlciA9IHN3ZWVwLT5maXJzdEJ1ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUg c3dlZXAtPm51bUJ1ZmZlcnMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMu aAppbmRleCBlOTQ0Y2VlMmU5MS4uNWFiMGNlZTQyODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmX2ludGVybmFscy5oCkBAIC01OTMsNyArNTkzLDkgQEAgZXh0ZXJuIEJ1ZmZlckRlc2Mg KlN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogZXh0 ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsKIAot ZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3Nlcywg dWludDMyICpudW1fYnVmX2FsbG9jKTsKK2V4dGVybiB2b2lkIFN0cmF0ZWd5U3luY1ByZXBh cmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYyk7CitleHRlcm4gaW50 CVN0cmF0ZWd5U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVpbnQzMiAqY29tcGxldGVfcGFz c2VzLAorCQkJCQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbnVtX2J1ZmZlcnMpOwog ZXh0ZXJuIHZvaWQgU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKTsKIAog LyogYnVmX3RhYmxlLmMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDFjZjA5ZThmYjdj Li5lMGJiNGNjMWRmMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC00MTAsNiArNDEwLDEx IEBAIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRlZ3lCdWZmZXJDb3VudChCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSk7CiBleHRlcm4gaW50CUdldEFjY2Vzc1N0cmF0ZWd5UGlu TGltaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwogCiBleHRlcm4gdm9pZCBG cmVlQWNjZXNzU3RyYXRlZ3koQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOworZXh0 ZXJuIHZvaWQgQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlkeCwKKwkJCQkJCQkJ CSAgIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLAorCQkJCQkJCQkJICAgdWludDMyICpuZXh0 X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCQkgICB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxv Y3MsCisJCQkJCQkJCQkgICB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpOwogCiAKIC8qIGlubGlu ZSBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0 cmVhbV9yZWdyZXNzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jl c3MucGwKaW5kZXggYWU5NzcyOTc4NDkuLmY2OGUwOGU1Njk3IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbAorKysgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzAyN19zdHJlYW1fcmVncmVzcy5wbApAQCAtMTgsNiArMTgsMTEgQEAgJG5v ZGVfcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVj dGlvbnMnLCAnMjUnKTsKICRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLAogCSdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKIAorIyBUaGUg ZGVmYXVsdCBpcyAxTUIsIHdoaWNoIGlzIG5vdCBlbm91Z2ggd2l0aCBjbG9jay1zd2VlcCBw YXJ0aXRpb25pbmcuCisjIEluY3JlYXNlIHRvIDMyTUIsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0 ICJubyB1bnBpbm5lZCBidWZmZXJzIi4KKyRub2RlX3ByaW1hcnktPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLAorCSdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsKKwogIyBFbmFi bGUgcGdfc3RhdF9zdGF0ZW1lbnRzIHRvIGZvcmNlIHRlc3RzIHRvIGRvIHF1ZXJ5IGp1bWJs aW5nLgogIyBwZ19zdGF0X3N0YXRlbWVudHMubWF4IHNob3VsZCBiZSBsYXJnZSBlbm91Z2gg dG8gaG9sZCBhbGwgdGhlIGVudHJpZXMKICMgb2YgdGhlIHJlZ3Jlc3Npb24gZGF0YWJhc2Uu CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQ1ZmM5MWZjYjk3Li5hNDYxNzQ4 MWY3YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQ1MSw2ICs0NTEsNyBA QCBDbGllbnRDZXJ0TmFtZQogQ2xpZW50Q29ubmVjdGlvbkluZm8KIENsaWVudERhdGEKIENs aWVudFNvY2tldAorQ2xvY2tTd2VlcAogQ2xvbmVQdHJUeXBlCiBDbG9zZVBvcnRhbFN0bXQK IENsb3NlUHRyVHlwZQotLSAKMi41NC4wCgo= --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0005-clock-sweep-balancing-of-allocations.patch" Content-Disposition: attachment; filename*0="v20260624-0005-clock-sweep-balancing-of-allocations.patch" Content-Transfer-Encoding: base64 RnJvbSA0ZWQ0Y2Y4NjY5YTZmMzc5ZWJiZjM5YTIyODM3MDQ5MzFkNGIzMjc5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyIEp1biAyMDI2IDIyOjI4OjEwICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgNS83XSBjbG9jay1zd2VlcDogYmFsYW5jaW5nIG9mIGFsbG9jYXRpb25zCgpJ ZiBiYWNrZW5kcyBvbmx5IGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSB0aGUgImhvbWUiIHBhcnRp dGlvbiwgdGhhdCBtYXkKY2F1c2Ugc2lnbmlmaWNhbnQgbWlzYmFsYW5jZS4gU29tZSBwYXJ0 aXRpb25zIG1pZ2h0IGJlIG92ZXJ1c2VkLCB3aGlsZQpvdGhlciBwYXJ0aXRpb25zIHdvdWxk IGJlIGxlZnQgdW51c2VkLiBJbiBvdGhlciB3b3Jkcywgc2hhcmVkIGJ1ZmZlcnMKd291bGQg bm90IGJlIHVzZWQgZWZmaWNpZW50bHkuCgpXZSB3YW50IGFsbCBwYXJ0aXRpb25zIHRvIGJl IHVzZWQgYWJvdXQgdGhlIHNhbWUsIGkuZS4gc2VydmUgYWJvdXQgdGhlCnNhbWUgbnVtYmVy IG9mIGFsbG9jYXRpb25zLiBUbyBhY2hpZXZlIHRoYXQsIGFsbG9jYXRpb25zIGZyb20gcGFy dGl0aW9ucwp0aGF0IGFyZSAidG9vIGJ1c3kiIG1heSBnZXQgcmVkaXJlY3RlZCB0byBvdGhl ciBwYXJ0aXRpb25zLiBUaGUgc3lzdGVtCmNvdW50cyBhbGxvY2F0aW9ucyByZXF1ZXN0ZWQg ZnJvbSBlYWNoIHBhcnRpdGlvbiwgY2FsY3VsYXRlcyB0aGUgImZhaXIKc2hhcmUiIChhdmVy YWdlIHBlciBwYXJ0aXRpb24pLCBhbmQgdGhlbiByZWRpcmVjdHNleGNlc3MgYWxsb2NhdGlv bnMgdG8Kb3RoZXIgcGFydGl0aW9ucy4KCkVhY2ggcGFydGl0aW9uIGdldHMgYSBzZXQgb2Yg Y29lZmZpY2llbnRzIGRldGVybWluaW5nIHRoZSBmcmFjdGlvbiBvZgphbGxvY2F0aW9ucyB0 byByZWRpcmVjdCB0byBvdGhlciBwYXJ0aXRpb25zLiBUaGUgY29lZmZpY2llbnRzIG1heSBi ZQppbnRlcnByZXRlZCBhcyBhICJidWRnZXQiIGZvciBlYWNoIG9mIHRoZSBwYXJ0aXRpb24s IGkuZS4gdGhlIG51bWJlciBvZgphbGxvY2F0aW9ucyB0byBzZXJ2ZSBmcm9tIHRoYXQgcGFy dGl0aW9uLCBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0CnBhcnRpdGlvbiAoaW4gYSByb3Vu ZC1yb2JpbiBtYW5uZXIpLgoKQWxsIG9mIHRoaXMgaXMgdGllZCB0byB0aGUgcGFydGl0aW9u IHdoZXJlIHRoZSBhbGxvY2F0aW9uIHdhcyByZXF1ZXN0ZWQuCkVhY2ggcGFydGl0aW9uIGhh cyBhIHNlcGFyYXRlIHNldCBvZiBjb2VmZmljaWVudHMuCgpXZSBtaWdodCBhbHNvIHRyZWF0 IHRoZSBjb2VmZmljaWVudHMgYXMgcHJvYmFiaWxpdGllcywgYW5kIHVzZSBQUk5HIHRvCmRl dGVybWluZSB3aGVyZSB0byBkaXJlY3QgaW5kaXZpZHVhbCByZXF1ZXN0cy4gQnV0IGEgUFJO RyBzZWVtcyBmYWlybHkKZXhwZW5zaXZlLCBhbmQgdGhlIGJ1ZGdldCBhcHByb2FjaCB3b3Jr cyB3ZWxsLgoKV2UgaW50ZW50aW9uYWxseSBrZWVwIHRoZSAiYnVkZ2V0IiBmYWlybHkgbG93 LCB3aXRoIHRoZSBzdW0gZm9yIGEgZ2l2ZW4KcGFydGl0aW9uIDEwMC4gVGhhdCBtZWFucyB3 ZSBnZXQgdG8gdGhlIHNhbWUgcGFydGl0aW9uIGFmdGVyIG9ubHkgMTAwCmFsbG9jYXRpb25z LCBrZWVwaW5nIGl0IG1vcmUgYmFsYW5jZWQuIEl0IHdvdWxkbid0IGJlIGhhcmQgdG8gbWFr ZSB0aGUKYnVkZ2V0cyBoaWdoZXIgKGUuZy4gbWF0Y2hpbmcgdGhlIG51bWJlciBvZiBhbGxv Y2F0aW9ucyBwZXIgcm91bmQpLCBidXQKaXQgbWlnaHQgYWxzbyBtYWtlIHRoZSBiZWhhdmlv ciBsZXNzIHNtb290aCAobG9uZyBwZXJpb2Qgb2YgYWxsb2NhdGlvbnMKZnJvbSBlYWNoIHBh cnRpdGlvbikuCgpUaGlzIGlzIHZlcnkgc2ltcGxlL2NoZWFwLCBhbmQgb3ZlciBtYW55IGFs bG9jYXRpb25zIGl0IGhhcyB0aGUgc2FtZQplZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBh Y3Rpdml0eSBpdCBtYXkgZGl2ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKbWF0dGVyIG11Y2gg KHdlIGNhcmUgYWJvdXQgaGlnaC1hY3Rpdml0eSBwZXJpb2RzIG11Y2ggbW9yZSkuCi0tLQog Li4uL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwgICAgICAgICAgICAgIHwgICA1ICst CiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgNDMg Ky0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgICAgICAgICB8ICAg MyArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jICAgICAgICAgfCA0 MjggKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaCAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAg ICAgICAgICAgICAgICAgIHwgIDEyICstCiA2IGZpbGVzIGNoYW5nZWQsIDQ3MSBpbnNlcnRp b25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwgYi9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKaW5kZXggOTIxNzZmZWQ3Zjgu LjQzZDJlODRmOWQyIDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZS0tMS43LS0xLjguc3FsCkBAIC0yMCw3ICsyMCwxMCBAQCBDUkVBVEUg VklFVyBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEFTCiAJIG51bV9wYXNzZXMgYmlnaW50 LAkJCS0tIGNsb2Nrc3dlZXAgcGFzc2VzCiAJIG5leHRfYnVmZmVyIGludGVnZXIsCQktLSBu ZXh0IHZpY3RpbSBidWZmZXIgZm9yIGNsb2Nrc3dlZXAKIAkgdG90YWxfYWxsb2NzIGJpZ2lu dCwJCS0tIGhhbmRsZWQgYWxsb2NzIChydW5uaW5nIHRvdGFsKQotCSBudW1fYWxsb2NzIGJp Z2ludCk7CQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVudCBjeWNsZSkKKwkgbnVtX2FsbG9j cyBiaWdpbnQsCQkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCisJIHRvdGFs X3JlcV9hbGxvY3MgYmlnaW50LAktLSByZXF1ZXN0ZWQgYWxsb2NzIChydW5uaW5nIHRvdGFs KQorCSBudW1fcmVxX2FsbG9jcyBiaWdpbnQsCQktLSBoYW5kbGVkIGFsbG9jcyAoY3VycmVu dCBjeWNsZSkKKwkgd2VpZ2h0cyBpbnRbXSk7CQkJLS0gYmFsYW5jaW5nIHdlaWdodHMKIAog LS0gRG9uJ3Qgd2FudCB0aGVzZSB0byBiZSBhdmFpbGFibGUgdG8gcHVibGljLgogUkVWT0tF IEFMTCBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKCkgRlJPTSBQVUJM SUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl X3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2Vz LmMKaW5kZXggYjA3ZmFmZGEwZDkuLmYyNmIyMzMyYzFkIDEwMDY0NAotLS0gYS9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9w Z19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0xNSw2ICsxNSw4IEBA CiAjaW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50 ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ1dGls cy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgogCkBAIC0zMSw3ICsz Myw3IEBACiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9NQVJLX0RJUlRZX0FMTF9FTEVNIDMK IAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfT1NfUEFHRVNfRUxFTQkzCi0jZGVmaW5lIE5V TV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JOQorI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfUEFSVElUSU9OU19FTEVNCTEyCiAKIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5u YW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTk0MCw2ICs5NDIsOCBAQCBwZ19idWZmZXJj YWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlpZiAoU1JGX0lTX0ZJUlNU Q0FMTCgpKQogCXsKKwkJVHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5ID0gbG9va3VwX3R5cGVf Y2FjaGUoSU5UNE9JRCwgMCk7CisKIAkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgp OwogCiAJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxsb2NhdGluZyBzdHVmZiB0byBiZSB1 c2VkIGluIGxhdGVyIGNhbGxzICovCkBAIC05NzEsNiArOTc1LDEyIEBAIHBnX2J1ZmZlcmNh Y2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgIElOVDhPSUQsIC0x LCAwKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDks ICJudW1fYWxsb2NzIiwKIAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEwLCAidG90YWxfcmVxX2FsbG9j cyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxMSwgIm51bV9yZXFfYWxsb2NzIiwKKwkJCQkJCSAg IElOVDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0 dHJOdW1iZXIpIDEyLCAid2VpZ3RocyIsCisJCQkJCQkgICB0eXBlbnRyeS0+dHlwYXJyYXks IC0xLCAwKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBs ZWRlc2MpOwogCkBAIC05OTIsMTEgKzEwMDIsMTcgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0 aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQlmaXJzdF9idWZmZXIsCiAJCQkJCWxhc3Rf YnVmZmVyOwogCi0JCXVpbnQ2NAkJYnVmZmVyX3RvdGFsX2FsbG9jczsKKwkJdWludDY0CQli dWZmZXJfdG90YWxfYWxsb2NzLAorCQkJCQlidWZmZXJfdG90YWxfcmVxX2FsbG9jczsKIAog CQl1aW50MzIJCWNvbXBsZXRlX3Bhc3NlcywKIAkJCQkJbmV4dF92aWN0aW1fYnVmZmVyLAot CQkJCQlidWZmZXJfYWxsb2NzOworCQkJCQlidWZmZXJfYWxsb2NzLAorCQkJCQlidWZmZXJf cmVxX2FsbG9jczsKKworCQlpbnQJCSAgICp3ZWlnaHRzOworCQlEYXR1bQkgICAqZHdlaWdo dHM7CisJCUFycmF5VHlwZSAgKmFycmF5OwogCiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZF UkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNI RV9QQVJUSVRJT05TX0VMRU1dOwpAQCAtMTAwNSw4ICsxMDIxLDE2IEBAIHBnX2J1ZmZlcmNh Y2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgICZmaXJzdF9idWZm ZXIsICZsYXN0X2J1ZmZlcik7CiAKIAkJQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaSwK LQkJCQkJCQkJICAgJmNvbXBsZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZlciwKLQkJ CQkJCQkJICAgJmJ1ZmZlcl90b3RhbF9hbGxvY3MsICZidWZmZXJfYWxsb2NzKTsKKwkJCQkJ CQkJICZjb21wbGV0ZV9wYXNzZXMsICZuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCSAm YnVmZmVyX3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9hbGxvY3MsCisJCQkJCQkJCSAmYnVmZmVy X3RvdGFsX3JlcV9hbGxvY3MsICZidWZmZXJfcmVxX2FsbG9jcywKKwkJCQkJCQkJICZ3ZWln aHRzKTsKKworCQlkd2VpZ2h0cyA9IHBhbGxvY19hcnJheShEYXR1bSwgZnVuY2N0eC0+bWF4 X2NhbGxzKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jY3R4LT5tYXhfY2FsbHM7IGkr KykKKwkJCWR3ZWlnaHRzW2ldID0gSW50MzJHZXREYXR1bSh3ZWlnaHRzW2ldKTsKKworCQlh cnJheSA9IGNvbnN0cnVjdF9hcnJheV9idWlsdGluKGR3ZWlnaHRzLCBmdW5jY3R4LT5tYXhf Y2FsbHMsIElOVDRPSUQpOwogCiAJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CiAJ CW51bGxzWzBdID0gZmFsc2U7CkBAIC0xMDM1LDYgKzEwNTksMTUgQEAgcGdfYnVmZmVyY2Fj aGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbOF0gPSBJbnQ2NEdl dERhdHVtKGJ1ZmZlcl9hbGxvY3MpOwogCQludWxsc1s4XSA9IGZhbHNlOwogCisJCXZhbHVl c1s5XSA9IEludDY0R2V0RGF0dW0oYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MpOworCQludWxs c1s5XSA9IGZhbHNlOworCisJCXZhbHVlc1sxMF0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9y ZXFfYWxsb2NzKTsKKwkJbnVsbHNbMTBdID0gZmFsc2U7CisKKwkJdmFsdWVzWzExXSA9IFBv aW50ZXJHZXREYXR1bShhcnJheSk7CisJCW51bGxzWzExXSA9IGZhbHNlOworCiAJCS8qIEJ1 aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBs ZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOwogCQly ZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zm1nci5jCmluZGV4IDdiZWRhZjg5ODdhLi42MWJlMDVhNjhkNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTQxMzUsNiArNDEzNSw5IEBAIEJnQnVm ZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCS8qIGFzc3VtZSB3ZSBj YW4gaGliZXJuYXRlLCBhbnkgcGFydGl0aW9uIGNhbiBzZXQgdG8gZmFsc2UgKi8KIAlib29s CQloaWJlcm5hdGUgPSB0cnVlOwogCisJLyogdHJpZ2dlciBwYXJ0aXRpb24gcmViYWxhbmNp bmcgZmlyc3QgKi8KKwlTdHJhdGVneVN5bmNCYWxhbmNlKCk7CisKIAkvKiBnZXQgdGhlIG51 bWJlciBvZiBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGFuZCB0b3RhbCBhbGxvYyBjb3VudCAq LwogCVN0cmF0ZWd5U3luY1ByZXBhcmUoJm51bV9wYXJ0aXRpb25zLCAmcmVjZW50X2FsbG9j KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3Qu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggMmQ1NjU3 OTY4MmUuLmE1NDNmYjEyYjIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMKQEAgLTM1LDYgKzM1LDI2IEBACiAjZGVmaW5lIElOVF9BQ0NFU1NfT05DRSh2YXIp CSgoaW50KSgqKCh2b2xhdGlsZSBpbnQgKikmKHZhcikpKSkKIAogCisvKgorICogWFhYIFdl IG5lZWQgdG8gbWFrZSBDbG9ja1N3ZWVwIGZpeGVkLXNpemUsIHNvIHRoYXQgd2UgY2FuIGhh dmUgYW4gYXJyYXkKKyAqIGluIHNoYXJlZCBtZW1vcnkuIFRoZSBlYXNpZXN0IHdheSBpcyB0 byBwaWNrIGEgc3VmZmljaWVudGx5IGhpZ2ggdmFsdWUKKyAqIHRoYXQgbm8gc3lzdGVtIHdp bGwgYWN0dWFsbHkgbmVlZC4gMzIgc2VlbXMgaGlnaCBlbm91Z2guCisgKgorICogWFhYIFdl IHNob3VsZCBlbmZvcmNlIHRoaXMgaW4gYnVmbWdyLmMsIHdoZW4gaW5pdGlhbGl6aW5nIHRo ZSBwYXJ0aXRpb25zLgorICovCisjZGVmaW5lIE1BWF9CVUZGRVJfUEFSVElUSU9OUwkJMzIK KworLyoKKyAqIENvZWZmaWNpZW50IHVzZWQgdG8gY29tYmluZSB0aGUgb2xkIGFuZCBuZXcg YmFsYW5jZSBjb2VmZmljaWVudHMsIHVzaW5nCisgKiB3ZWlnaHRlZCBhdmVyYWdlLCBzbyB0 aGF0IHdlIGRvbid0IGZsYXAgdG9vIG11Y2guIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUK KyAqIG1vcmUgdGhlIG9sZCB2YWx1ZSBhZmZlY3RzIHRoZSByZXN1bHQuCisgKgorICogWFhY IERvZXNuJ3QgdGhpcyBvYnNjdXJlIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB3ZWlnaHRzIGFz IHByb2JhYmlsaXRpZXMgdG8KKyAqIGFsbG9jYXRlIGZyb20gYSBnaXZlbiBwYXJ0aXRpb24/ IERvZXMgaXQgc3RpbGwgc3VtIHRvIDEwMCU/IEkgZG9uJ3QgdGhpbmsKKyAqIHNvLCBpdCdz IGp1c3QgYSBmcmFjdGlvbiBvZiBhbGxvY2F0aW9ucyB0byBnbyBmcm9tIGEgZ2l2ZW4gcGFy dGl0aW9uLgorICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUKKwog LyoKICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2NrU3dl ZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTY4LDkgKzg4LDMyIEBAIHR5 cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUgY3lj bGVzIG9mIHRoZSBjbG9jay1zd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVmZmVy QWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAKKwkv KgorCSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGlz IHBhcnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8ga2Vl cCBhbGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBudW1S ZXF1ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9mIGFsbG9jcyAqLwogCXBn X2F0b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRvbWljX3VpbnQ2NCBudW1U b3RhbFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0cyB0byBiYWxhbmNlIGJ1 ZmZlciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25zLiBFYWNoCisJICogcGFy dGl0aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwgZGV0ZXJtaW5pbmcgd2hh dCBmcmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZnJvbSB0aGF0IHBhcnRp dGlvbi4gU28gWzc1LCAxNSwgNSwgNV0gd291bGQKKwkgKiBtZWFuIDc1JSBhbGxvY2F0aW9u cyBzaG91bGQgZ28gZnJvbSBwYXJ0aXRpb24gMCwgMTUlIGZyb20gcGFydGl0aW9uCisJICog MSwgYW5kIDUlIGZyb20gcGFydGl0aW9ucyAyJjMuIEVhY2ggcGFydGl0aW9uIGdldHMgYSBk aWZmZXJlbnQgdmVjdG9yCisJICogb2Ygd2VpZ2h0cy4KKwkgKgorCSAqIEJhY2tlbmRzIHVz ZSB0aGUgYnVkZ2V0IGZyb20gaXQncyAiaG9tZSIgcGFydGl0aW9uLCBzbyB0aGF0IGEgYnVz eQorCSAqIHBhcnRpdGlvbnMgKHdpdGggYSBsb3Qgb2YgcHJvY2Vzc2VzIG9uIHRoYXQgTlVN QSBub2RlIGV0Yy4pIHNwcmVhZAorCSAqIHRoZSBhbGxvY2F0aW9ucyBldmVubHkuCisJICoK KwkgKiBYWFggQWxsb2NhdGUgYSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdv cmtpbmcgd2l0aCBhcnJheSBvZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWlu dDgJCWJhbGFuY2VbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAog LyoKQEAgLTE0MCw3ICsxODMsNjYgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZy b21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQ2 NCAqYnVmX3N0YXRlKTsKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGlj IENsb2NrU3dlZXAgKkNob29zZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2Vl cCAqQ2hvb3NlQ2xvY2tTd2VlcChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2Vl cCBhbGxvY2F0aW9uIGJhbGFuY2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMg ZnJvbSBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMgYQorICog YnVkZ2V0IGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZnJvbSBvdGhlciBwYXJ0aXRpb25zLiBB IHByb2Nlc3MgdGhhdAorICogImV4aGF1c3RzIiBhIGJ1ZGdldCBpbiBpdCdzIGhvbWUgcGFy dGl0aW9uIGdldHMgcmVkaXJlY3RlZCB0byB0aGUgb3RoZXIKKyAqIHBhcnRpdGlvbnMsIGRy aXZlbiBieSB0aGUgYnVkZ2V0cy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgYSBwYXJ0aXRpb24g bWF5IGhhdmUgYnVkZ2V0IFsyNSwgMjUsIDI1LCAyNV0sIHdoaWNoIG1lYW5zCisgKiBlYWNo IG9mIHRoZSA0IHBhcnRpdGlvbnMgc2hvdWxkIGdldCAxLzQgb2YgYWxsb2NhdGlvbnMuIE9y IHRoZSBidWdldAorICogY2FuIGJlIFs1MCwgNTAsIDAsIDBdLCB3aGljaCBtZWFucyBhbGwg YWxsb2NhdGlvbnMgd2lsbCBnbyB0byB0aGUgZmlyc3QKKyAqIHR3byBwYXJ0aXRpb25zIChv bmUgb2YgdGhlbSBiZWluZyB0aGUgImhvbWUiIG9uZSk7CisgKgorICogV2UgY291bGQgZG8g dGhhdCBiYXNlZCBvbiBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgZm9yIG5vdyB3 ZQorICogc2ltcGx5IHRyZWF0IHRoZSB2YWx1ZXMgYXMgYSBidWRnZXQsIGkuZS4gYSBudW1i ZXIgb2YgYWxsb2NhdGlvbnMgdG8KKyAqIHNlcnZlIGZyb20gb3RoZXIgcGFydGl0aW9ucywg YW5kIG1vdmUgaW4gcm91bmQtcm9iaW4gd2F5LgorICoKKyAqIFRoaXMgaXMgdmVyeSBzaW1w bGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2NhdGlvbnMgaXQgaGFzIHRoZSBzYW1lCisg KiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBhY3Rpdml0eSBpdCBtYXkgZGl2ZXJnZSwg YnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBtdWNoICh3ZSBjYXJlIGFib3V0IGhpZ2gt YWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgorICoKKyAqIFdlIGludGVudGlvbmFsbHkg a2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywgd2l0aCB0aGUgc3VtIGZvciBhIGdpdmVu CisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5zIHdlIGdldCB0byB0aGUgc2FtZSBwYXJ0 aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9jYXRpb25zLCBrZWVwaW5nIGl0IG1vcmUg YmFsYW5jZWQuIFdlIGNhbiBtYWtlIHRoZSBidWRnZXRzIGhpZ2hlcgorICogKHNheSwgdG8g bWF0Y2ggdGhlIGV4cGVjdGVkIG51bWJlciBvZiBhbGxvY2F0aW9ucywgaS5lLiBib3V0IHRo ZSBhdmVyYWdlCisgKiBudW1iZXIgb2YgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcGFzdCBpbnRl cnZhbCkuIE9yIG1heWJlIGNvbmZpZ3VyYWJsZS4KKyAqCisgKiBYWFggV2Ugc2hvdWxkIGFs d2F5cyBzdGFydCBhbGxvY2F0aW5nIGZyb20gdGhlICJob21lIiBwYXJ0aXRpb24sIGkuZS4K KyAqIGZyb20gZnJvbSBpdCwgYW5kIG9ubHkgdGhlbiByZWRpcmVjdCB0byBvdGhlciBwYXJ0 aXRpb25zLgorICoKKyAqIFhYWCBJdCBwcm9iYWJseSBpcyBub3QgZ3JlYXQgYWxsIHRoZSBw cm9jZXNzZXMgZnJvbSB0aGF0ICJob21lIgorICogcGFydGl0aW9uIGFyZSBjb29yZGluYXRl ZCwgYW5kIG1vdmUgdG8gYmV0d2VlbiBwYXJ0aXRpb25zIGF0IGFib3V0IHRoZQorICogc2Ft ZSB0aW1lLiBOb3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IHRoaXMuCisgKgorICogWFhYIFdl IHNob3VsZCBhbHNvIHByZWZlciBvdGhlciBwYXJ0aXRpb25zIGZyb20gdGhlIHNhbWUgTlVN QSBub2RlIChpZgorICogdGhlcmUgYXJlIHNvbWUpLiBQcm9iYWJseSBieSBzZXR0aW5nIHRo ZSBidWRnZXRzLgorICoKKyAqIEZJWE1FIEV4cGxhaW4gYXQgd2hpY2ggcG9pbnQgYXJlIHRo ZSBidWRnZXRzIHJlY2FsY3VsYXRlZCwgYnkgd2hpY2gKKyAqIHByb2Nlc3MsIGFuZCBob3cg dGhhdCBhZmZlY3RzIG90aGVyIHByb2Nlc3NlcyBhbGxvY2F0aW5nIGJ1ZmZlcnMuCisgKi8K KworLyoKKyAqIFRoZSAib3B0aW1hbCIgY2xvY2stc3dlZXAgcGFydGl0aW9uLiBBZnRlciBh IGJhY2tlbmQgZ2V0cyBtb3ZlZCB0byBhCisgKiBkaWZmZXJlbnQgTlVNQSBub2RlLCB3ZSBy ZXN0YXJ0IHRoZSBiYWxhbmNpbmcgc28gdGhhdCBpdCB1c2VzIHRoZQorICogY29ycmVjdCAi YnVkZ2V0IiBmcm9tIHRoZSBuZXcgaG9tZSBwYXJ0aXRpb24uCisgKi8KK3N0YXRpYyBpbnQg Y2xvY2tzd2VlcF9wYXJ0aXRpb25faG9tZSA9IC0xOworCisvKgorICogVGhlIHBhcnRpdGlv biB0aGUgYmFja2VuZCBpcyBjdXJyZW50bHkgYWxsb2NhdGluZyBmcm9tIChlaXRoZXIgdGhl CisgKiBob21lIG9uZSwgb3Igb25lIG9mIHRoZSByZWRpcmVjdGVkIG9uZXMpLgorICovCitz dGF0aWMgaW50IGNsb2Nrc3dlZXBfcGFydGl0aW9uX2N1cnJlbnQgPSAtMTsKKworLyoKKyAq IFRoZSBudW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IHBh cnRpdGlvbi4KKyAqLworc3RhdGljIGludCBjbG9ja3N3ZWVwX3BhcnRpdGlvbl9idWRnZXQg PSAwOwogCiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3Ry YXRlZ3lHZXRCdWZmZXIoKQpAQCAtMTUyLDcgKzI1NCw3IEBAIHN0YXRpYyBpbmxpbmUgdWlu dDMyCiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwotCUNsb2Nr U3dlZXAgKnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAgKnN3ZWVw ID0gQ2hvb3NlQ2xvY2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3Zl IGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMK QEAgLTMwMCwxMSArNDAyLDY4IEBAIENsb2NrU3dlZXBQYXJ0aXRpb25JbmRleCh2b2lkKQog ICogYW5kIHRoYXQncyBjaGVhcGVyLiBCdXQgaG93IHdvdWxkIHRoYXQgZGVhbCB3aXRoIG9k ZCBudW1iZXIgb2Ygbm9kZXM/CiAgKi8KIHN0YXRpYyBDbG9ja1N3ZWVwICoKLUNob29zZUNs b2NrU3dlZXAodm9pZCkKK0Nob29zZUNsb2NrU3dlZXAoYm9vbCBiYWxhbmNlKQogeworCS8q IFdoYXQncyB0aGUgIm9wdGltYWwiIHBhcnRpdGlvbiBmb3IgdGhpcyBiYWNrZW5kPyAqLwog CWludAkJCWluZGV4ID0gQ2xvY2tTd2VlcFBhcnRpdGlvbkluZGV4KCk7CisJQ2xvY2tTd2Vl cCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaW5kZXhdOworCisJLyoKKwkg KiBXYXMgdGhlIHByb2Nlc3MgbWlncmF0ZWQgdG8gYSBkaWZmZXJlbnQgTlVNQSBub2RlPyBJ ZiB0aGUgaG9tZSBwYXJ0aXRpb24KKwkgKiBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlc2V0IHRo ZSBidWRnZXQgYW5kIHN0YXJ0IG92ZXIsIHNvIHRoYXQgd2UgY29ycmVjdGx5CisJICogcHJl ZmVyICJuZWFyYnkiIHBhcnRpdGlvbnMgZXRjLgorCSAqCisJICogWFhYIENvdWxkIHRoaXMg YmUgYSBwcm9ibGVtIHdoZW4gcHJvY2Vzc2VzIG1vdmUgYWxsIHRoZSB0aW1lPyBJIGRvbid0 CisJICogdGhpbmsgc28gLSBpZiBhIHByb2Nlc3MgbW92ZXMgYmV0d2VlbiBtYW55IHBhcnRp dGlvbnMsIHRoYXQgYWxvbmUgd2lsbAorCSAqIHNwcmVhZCB0aGUgYWxsb2NhdGlvbnMgb3Zl ciBwYXJ0aXRpb25zLiBTaW1pbGFybHksIGlmIHRoZXJlIGFyZSBtYW55CisJICogcHJvY2Vz c2VzLCB0aGF0IHNob3VsZCBtYWtlIGl0IGV2ZW4gbW9yZSBldmVuLgorCSAqLworCWlmIChj bG9ja3N3ZWVwX3BhcnRpdGlvbl9ob21lICE9IGluZGV4KQorCXsKKwkJY2xvY2tzd2VlcF9w YXJ0aXRpb25faG9tZSA9IGluZGV4OworCQljbG9ja3N3ZWVwX3BhcnRpdGlvbl9jdXJyZW50 ID0gaW5kZXg7CisJCWNsb2Nrc3dlZXBfcGFydGl0aW9uX2J1ZGdldCA9IHN3ZWVwLT5iYWxh bmNlW2luZGV4XTsKKwl9CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBhIHZhbGlkIHBhcnRpdGlv biAqLworCUFzc2VydChjbG9ja3N3ZWVwX3BhcnRpdGlvbl9ob21lICE9IC0xKTsKKwlBc3Nl cnQoY2xvY2tzd2VlcF9wYXJ0aXRpb25fY3VycmVudCAhPSAtMSk7CisJQXNzZXJ0KGNsb2Nr c3dlZXBfcGFydGl0aW9uX2J1ZGdldCA+PSAwKTsKKworCS8qCisJICogV2hlbiBiYWxhbmNp bmcgYWxsb2NhdGlvbnMsIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9ucyB0byBvdGhlciBwYXJ0 aXRpb25zCisJICogYWNjb3JkaW5nIHRvIHRoZSBidWRnZXRzLiBXZSBtb3ZlIHRocm91Z2gg cGFydGl0aW9ucyBpbiBhIHJvdW5kLXJvYmluIHdheSwKKwkgKiBhZnRlciBhbGxvY2F0aW5n IHRoZSAiYnVkZ2V0IiBvZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IG9uZS4KKwkg Ki8KKwlpZiAoYmFsYW5jZSkKKwl7CisJCS8qCisJCSAqIFJhbiBvdXQgb2YgYnVkZ2V0IGZy b20gdGhlIGN1cnJlbnQgcGFydGl0aW9uPyBNb3ZlIHRvIHRoZSBuZXh0IG9uZQorCQkgKiB3 aXRoIG5vbi16ZXJvIGJ1ZGdldC4KKwkJICovCisJCXdoaWxlIChjbG9ja3N3ZWVwX3BhcnRp dGlvbl9idWRnZXQgPT0gMCkKKwkJeworCQkJLyogd3JhcCBhcm91bmQgYXQgdGhlIGVuZCAq LworCQkJY2xvY2tzd2VlcF9wYXJ0aXRpb25fY3VycmVudCsrOworCQkJaWYgKGNsb2Nrc3dl ZXBfcGFydGl0aW9uX2N1cnJlbnQgPj0gU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9u cykKKwkJCQljbG9ja3N3ZWVwX3BhcnRpdGlvbl9jdXJyZW50ID0gMDsKKworCQkJY2xvY2tz d2VlcF9wYXJ0aXRpb25fYnVkZ2V0CisJCQkJPSBzd2VlcC0+YmFsYW5jZVtjbG9ja3N3ZWVw X3BhcnRpdGlvbl9jdXJyZW50XTsKKwkJfQogCi0JcmV0dXJuICZTdHJhdGVneUNvbnRyb2wt PnN3ZWVwc1tpbmRleF07CisJCS8qIGFjY291bnQgZm9yIHRoZSBjdXJyZW50IGFsbG9jYXRp b24gKi8KKwkJLS1jbG9ja3N3ZWVwX3BhcnRpdGlvbl9idWRnZXQ7CisKKwkJLyoKKwkJICog QWNjb3VudCBmb3IgdGhlIGFsbG9jYXRpb24gaW4gdGhlICJob21lIiBwYXJ0aXRpb24sIHNv IHRoYXQgdGhlIG5leHQKKwkJICogcm91bmQgb2YgcmViYWxhbmNpbmcgKHJlY2FsY3VsYXRp bmcgdGhlIGJ1ZGdldHMpIGtub3dzIGFib3V0IHRoZQorCQkgKiBhbGxvY2F0aW9uIHRyYWZm aWMgaW4gdmFyaW91cyBwYXJ0aXRpb25zLgorCQkgKi8KKwkJcGdfYXRvbWljX2ZldGNoX2Fk ZF91MzIoJnN3ZWVwLT5udW1SZXF1ZXN0ZWRBbGxvY3MsIDEpOworCX0KKworCXJldHVybiAm U3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbY2xvY2tzd2VlcF9wYXJ0aXRpb25fY3VycmVudF07 CiB9CiAKIC8qCkBAIC0zODEsNyArNTQwLDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9t X3IKIAkgKiBiZXR3ZWVuIENQVXMgLyBOVU1BIG5vZGVzIGluIGJldHdlZW4sIHRoZXNlIGNh bGwgbWF5IHBpY2sgZGlmZmVyZW50CiAJICogcGFydGl0aW9ucywgY29uZnVzaW5nIHRoZSBs b2dpYyBhIGJpdC4KIAkgKi8KLQlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmQ2hvb3NlQ2xv Y2tTd2VlcCgpLT5udW1CdWZmZXJBbGxvY3MsIDEpOworCXBnX2F0b21pY19mZXRjaF9hZGRf dTMyKCZDaG9vc2VDbG9ja1N3ZWVwKGZhbHNlKS0+bnVtQnVmZmVyQWxsb2NzLCAxKTsKIAog CS8qCiAJICogVXNlIHRoZSAiY2xvY2sgc3dlZXAiIGFsZ29yaXRobSB0byBmaW5kIGEgZnJl ZSBidWZmZXIKQEAgLTQ4NSw2ICs2NDQsMjI5IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJv bV9yCiAJfQogfQogCisvKgorICogU3RyYXRlZ3lTeW5jQmFsYW5jZQorICoJCXVwZGF0ZSBw YXJ0aXRpb24gYnVkZ2V0cywgdG8gYmFsYW5jZSB0aGUgYnVmZmVyIGFsbG9jYXRpb25zCisg KgorICogV2Ugd2FudCB0byBnaXZlIHByZWZlcmVuY2UgdG8gYWxsb2NhdGluZyBidWZmZXJz IG9uIHRoZSBzYW1lIE5VTUEgbm9kZSwKKyAqIGJ1dCB0aGF0IG1pZ2h0IGxlYWQgdG8gaW1i YWxhbmNlIC0gYSBzaW5nbGUgcHJvY2VzcyB3b3VsZCBvbmx5IHVzZSBhCisgKiBmcmFjdGlv biBvZiBzaGFyZWQgYnVmZmVycy4gV2UgZG9uJ3Qgd2FudCB0aGF0LCB3ZSB3YW50IHRvIHV0 aWxpemUgdGhlCisgKiB3aG9sZSBzaGFyZWQgYnVmZmVycy4gVGhlIG51bWJlciBvZiBhbGxv Y2F0aW9ucyBpbiBlYWNoIHBhcnRpdGlvbiBtYXkKKyAqIGFsc28gY2hhbmdlIG92ZXIgdGlt ZSwgc28gd2UgbmVlZCB0byBhZGFwdCB0byB0aGF0LgorICoKKyAqIFRvIGFsbG93IHRoaXMg ImFkYXB0aXZlIGJhbGFuY2luZyIsIGVhY2ggcGFydGl0aW9uIGhhcyBhIHNldCBvZiB3ZWln aHRzLAorICogZGV0ZXJtaW5pbmcgd2hhdCBmcmFjdGlvbiBvZiBhbGxvY2F0aW9ucyB0byBk aXJlY3QgdG8gb3RoZXIgcGFydGl0aW9ucy4KKyAqIEZvciBzaW1wbGljaXR5IHRoZSBjb2Vm ZmljaWVudHMgYXJlIGludGVnZXJzIDAtMTAwLCBleHByZXNzaW5nIHRoZQorICogcGVyY2Vu dGFnZSBvZiBhbGxvY2F0aW9ucyByZWRpcmVjdGVkIHRvIHRoYXQgcGFydGl0aW9uLgorICoK KyAqIENvbnNpZGVyIGZvciBleGFtcGxlIHdlaWdodHMgWzUwLCAyNSwgMjUsIDBdIGZvciBv bmUgb2YgNCBwYXJ0aXRpb25zLgorICogVGhpcyBtZWFucyA1MCUgb2YgYWxsb2NhdGlvbnMg d2lsbCBiZSByZWRpcmVjdGVkIHRvIHBhcnRpdGlvbiAwLCAyNSUKKyAqIHRvIHBhcnRpdGlv bnMgMSBhbmQgMiwgYW5kIG5vIGFsbG9jYXRpb25zIHdpbGwgZ28gdG8gcGFydGl0aW9uIDMu CisgKgorICogVGhpcyBtZWFucyBhbiBhbGxvY2F0aW9uIG1heSBiZSByZXF1ZXN0ZWQgaW4g cGFydGl0aW9uIEEgKGkuZS4gdGhlCisgKiBob21lIHBhcnRpdGlvbiBvZiB0aGUgcHJvY2Vz cyByZXF1ZXN0aW5nIGl0KSwgYnV0IGVuZCB1cCBhbGxvY2F0aW5nCisgKiB0aGUgYnVmZmVy IGluIHBhcnRpdGlvbiBCLiBXZSBoYXZlIGEgY291bnRlciBmb3IgYm90aCAtIHRoZSBudW1i ZXIgb2YKKyAqIGFsbG9jYXRpb25zIHJlcXVlc3RlZCBpbiBhIHBhcnRpdGlvbiwgYW5kIHRo ZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMKKyAqIGFjdHVhbGx5IGhhbmRsZWQgYnkgdGhhdCBw YXJ0aXRpb24uIFRoZSBmb3JtZXIgaXMgdXNlZCBmb3IgY2FsY3VsYXRpbmcKKyAqIHdlaWdo dHMsIHRoZSBsYXR0ZXIgaXMgdXNlZCBvbmx5IGZvciBtb25pdG9yaW5nLgorICoKKyAqIFRo ZSBiYWxhbmNpbmcgaGFwcGVucyBpbiBpbnRlcnZhbHMgLSBpdCBhZGp1c3RzIGZ1dHVyZSBh bGxvY2F0aW9ucworICogYmFzZWQgb24gc3RhdHMgYWJvdXQgcmVjZW50IGFsbG9jYXRpb25z LCBuYW1lbHk6CisgKgorICogLSBudW1CdWZmZXJBbGxvY3MgLSBudW1iZXIgb2YgYWxsb2Nh dGlvbnMgc2VydmVkIGJ5IGEgcGFydGl0aW9uCisgKgorICogLSBudW1SZXF1ZXN0ZWRBbGxv Y3MgLSBudW1iZXIgb2YgYWxsb2NhdGlvcyByZXF1ZXN0ZWQgaW4gYSBwYXJ0aXRpb24KKyAq CisgKiBXZSdyZSB0cnlpbmcgdG8gc21vb3RoIG51bUJ1ZmZlckFsbG9jcyBpbiB0aGUgbmV4 dCBpbnRlcnZhbCwgYmFzZWQgb24KKyAqIG51bVJlcXVlc3RlZEFsbG9jcyBtZWFzdXJlZCBp biB0aGUgbGFzdCBpbnRlcnZhbC4KKyAqCisgKiBUaGUgYmFsYW5jaW5nIGFsZ29yaXRobSB3 b3JrcyBsaWtlIHRoaXM6CisgKgorICogLSB0aGUgdGFyZ2V0IChhdmVyYWdlIG51bWJlciBv ZiBhbGxvY2F0aW9ucyBwZXIgcGFydGl0aW9uKSBpcyBjYWxjdWxhdGVkCisgKiAgIGZyb20g dG90YWwgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHJlcXVlc3RlZCBpbiB0aGUgbGFzdCBpbnRl cnZhYWwKKyAqCisgKiAtIHBhcnRpdGlvbnMgZ2V0IGRpdmlkZWQgaW50byB0d28gZ3JvdXBz IC0gdGhvc2Ugd2l0aCBtb3JlIGFsbG9jYXRpb24KKyAqICAgcmVxdWVzdHMgdGhhbiB0aGUg dGFyZ2V0LCBhbmQgdGhvc2Ugd2l0aCBmZXdlciByZXF1ZXN0cworICoKKyAqIC0gd2UgImRp c3RyaWJ1dGUiIHRoZSBkZWx0YSAod2hpY2ggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgZ3Jv dXBzKQorICogICBiZXR3ZWVuIHRoZSBncm91cHMgKG9uZSBoYXMgbW9yZSwgdGhlIG90aGVy IGZld2VyKQorICoKKyAqIFBhcnRpdGlvbnMgd2l0aCAobmFsbG9jcyA+IGF2Z19uYWxsb2Nz KSByZWRpcmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMsCisgKiB3aXRoIGVhY2ggdGFyZ2V0 IGFsbG9jYXRpb24gZ2V0dGluZyBhIHByb3BvcnRpb25hbCBwYXJ0ICh3aXRoIHJlc3BlY3QK KyAqIHRvIHRoZSB0b3RhbCBkZWx0YSkuCisgKgorICogWFhYIEN1cnJlbnRseSB0aGlzIGRv ZXMgbm90IGdpdmUgcHJlZmVyZW5jZSB0byBvdGhlciBwYXJ0aXRpb25zIG9uIHRoZQorICog c2FtZSBOVU1BIG5vZGUgKHJlZGlyZWN0IHRvIGl0IGZpcnN0KSwgYnV0IGl0IGNvdWxkLgor ICovCit2b2lkCitTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCit7CisJLyogc25hcHNob3Qg b2YgYWxsb2NhdGlvbiByZXF1ZXN0cyBmb3IgcGFydGl0aW9ucyAqLworCXVpbnQzMglhbGxv Y3NbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKKworCXVpbnQzMgl0b3RhbF9hbGxvY3MgPSAw LAkvKiB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlvbnMgKi8KKwkJCWF2Z19hbGxvY3MsCQkJ LyogYXZlcmFnZSBhbGxvY2F0aW9ucyAocGVyIHBhcnRpdGlvbikgKi8KKwkJCWRlbHRhX2Fs bG9jcyA9IDA7CS8qIHN1bSBvZiBhbGxvY3MgYWJvdmUgYXZlcmFnZSAqLworCisJLyoKKwkg KiBDb2xsZWN0IHRoZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMgcmVxdWVzdGVkIGluIHRoZSBw YXN0IGludGVydmFsLgorCSAqIFdoaWxlIGF0IGl0LCByZXNldCB0aGUgY291bnRlciB0byBz dGFydCB0aGUgbmV3IGludGVydmFsLgorCSAqCisJICogWFhYIFdlIGxvY2sgdGhlIHBhcnRp dGlvbnMgb25lIGJ5IG9uZSwgc28gdGhpcyBpcyBub3QgYSBwZXJmZWN0bHkKKwkgKiBjb25z aXN0ZW50IHNuYXBzaG90IG9mIHRoZSBjb3VudHMsIGFuZCB0aGUgcmVzZXRzIGhhcHBlbiBi ZWZvcmUgd2UKKwkgKiB1cGRhdGUgdGhlIHdlaWdodHMgdG9vLiBCdXQgd2UncmUgb25seSBs b29raW5nIGZvciBoZXVyaXN0aWNzLCBzbworCSAqIHRoaXMgc2hvdWxkIGJlIGdvb2QgZW5v dWdoLgorCSAqCisJICogWFhYIEEgc2ltaWxhciBpc3N1ZSBhcHBsaWVzIHRvIHRoZSBjb3Vu dGVyIHJlc2V0IGxhdGVyIC0gd2UgaGF2ZW4ndAorCSAqIHVwZGF0ZWQgdGhlIHdlaWdodHMg eWV0LCBzbyBzb21lIG9mIHRoZSByZXF1ZXN0cyBjb3VudGVkIGZvciB0aGUgbmV4dAorCSAq IGludGVydmFsIHdpbGwgYmUgcmVkaXJlY3RlZCBwZXIgY3VycmVudCB3ZWlnaHRzLiBTaG91 bGQgYmUgZmluZSwgaXQncworCSAqIGp1c3QgYW4gYXBwcm94aW1hdGUgaGV1cmlzdGljcywg YW5kIHRoZXJlIHNob3VsZCBiZSB2ZXJ5IGZldyByZXF1ZXN0cyBpbgorCSAqIGJldHdlZW4u IEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHJlc2V0IHRoZSByZXF1ZXN0IGNvdW50ZXJzIHdo ZW4gc2V0dGluZworCSAqIHRoZSBuZXcgd2VpZ2h0cywgYW5kIGp1c3QgaWdub3JlIHRoZSBj b3VwbGUgcmVxdWVzdHMgaW4gYmV0d2Vlbi4KKwkgKgorCSAqIFhYWCBEb2VzIHRoaXMgbmVl ZCB0byB3b3JyeSBhYm91dCB0aGUgY29tcGxldGVQYXNzZXMgdG9vPworCSAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQor CXsKKwkJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07 CisKKwkJLyogbm8gbmVlZCBmb3IgYSBzcGlubG9jayAqLworCQlhbGxvY3NbaV0gPSBwZ19h dG9taWNfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+bnVtUmVxdWVzdGVkQWxsb2NzLCAwKTsKKwor CQkvKiBhZGQgdGhlIGFsbG9jcyB0byBydW5uaW5nIHRvdGFsICovCisJCXBnX2F0b21pY19m ZXRjaF9hZGRfdTY0KCZzd2VlcC0+bnVtVG90YWxSZXF1ZXN0ZWRBbGxvY3MsIGFsbG9jc1tp XSk7CisKKwkJdG90YWxfYWxsb2NzICs9IGFsbG9jc1tpXTsKKwl9CisKKwkvKiBDYWxjdWxh dGUgdGhlICJmYWlyIHNoYXJlIiBvZiBhbGxvY2F0aW9ucyBwZXIgcGFydGl0aW9uLiAqLwor CWF2Z19hbGxvY3MgPSAodG90YWxfYWxsb2NzIC8gU3RyYXRlZ3lDb250cm9sLT5udW1fcGFy dGl0aW9ucyk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgImRlbHRhIiBmcm9tIGJhbGFu Y2VkIHN0YXRlIGZvciBlYWNoIHBhcnRpdGlvbiwgaS5lLiBob3cKKwkgKiBtYW55IG1vcmUv ZmV3ZXIgYWxsb2NhdGlvbnMgaXQgaGFuZGxlZCByZWxhdGl2ZSB0byB0aGUgYXZlcmFnZS4K KwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnM7IGkrKykKKwl7CisJCWlmIChhbGxvY3NbaV0gPiBhdmdfYWxsb2NzKQorCQkJZGVs dGFfYWxsb2NzICs9IChhbGxvY3NbaV0gLSBhdmdfYWxsb2NzKTsKKwl9CisKKwkvKgorCSAq IFNraXAgcmViYWxhbmNpbmcgd2hlbiB0aGVyZSdzIG5vdCBlbm91Z2ggYWN0aXZpdHksIGFu ZCBqdXN0IGtlZXAgdGhlCisJICogY3VycmVudCB3ZWlnaHRzLgorCSAqCisJICogWFhYIFRo ZSB0aHJlc2hvbGQgb2YgMTAwIGFsbG9jYXRpb24gaXMgcHJldHR5IGFyYml0cmFyeS4KKwkg KgorCSAqIFhYWCBNYXliZSBhIGJldHRlciBzdHJhdGVneSB3b3VsZCBiZSB0byBzbG93bHkg cmV0dXJuIHRvIHRoZSBkZWZhdWx0CisJICogd2VpZ2h0cywgd2l0aCBlYWNoIHBhcnRpdGlv biBhbGxvY2F0aW9uIG9ubHkgZnJvbSBpdHNlbGY/CisJICoKKwkgKiBYWFggTWF5YmUgd2Ug c2hvdWxkbid0IGV2ZW4gcmVzZXQgdGhlIGNvdW50ZXJzIGluIHRoaXMgY2FzZT8gQnV0IGl0 CisJICogc2hvdWxkIG5vdCBtYXR0ZXIsIGlmIHRoZSBhY3Rpdml0eSBpcyBsb3cuCisJICov CisJaWYgKGF2Z19hbGxvY3MgPCAxMDApCisJeworCQllbG9nKERFQlVHMSwgInJlYmFsYW5j ZSBza2lwcGVkOiBub3QgZW5vdWdoIGFsbG9jYXRpb25zIChhbGxvY3M6ICV1KSIsCisJCQkg YXZnX2FsbG9jcyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIExpa2V3aXNlLCBza2lw IHJlYmFsYW5jaW5nIGlmIHRoZSBtaXNiYWxhbmNlIGlzIG5vdCBzaWduaWZpY2FudC4gV2UK KwkgKiBjb25zaWRlciBpdCBhY2NlcHRhYmxlIGlmIHRoZSBhbW91bnQgb2YgYWxsb2NhdGlv bnMgd2UnZCBuZWVkIHRvCisJICogcmVkaXN0cmlidXRlIGlzIGxlc3MgdGhhbiAxMCUgb2Yg dGhlIGF2ZXJhZ2UuCisJICoKKwkgKiBYWFggQWdhaW4sIHRoZXNlIHRocmVzaG9sZCBhcmUg cmF0aGVyIGFyYml0cmFyeS4gQW5kIG1heWJlIHdlIHNob3VsZAorCSAqIGRvIHRoZSByYWJh bGFuY2luZyBpbiB0aGlzIGNhc2UgYW55d2F5LCBpdCdzIGxpa2VseSBjaGVhcCBhbmQgb24g YSBiaWcKKwkgKiBzeXN0ZW0gMTAlIGNhbiBiZSBxdWl0ZSBhIGxvdC4KKwkgKi8KKwlpZiAo ZGVsdGFfYWxsb2NzIDwgKGF2Z19hbGxvY3MgKiAwLjEpKQorCXsKKwkJZWxvZyhERUJVRzEs ICJyZWJhbGFuY2Ugc2tpcHBlZDogZGVsdGEgd2l0aGluIGxpbWl0IChkZWx0YTogJXUsIHRo cmVzaG9sZDogJXUpIiwKKwkJCSBkZWx0YV9hbGxvY3MsICh1aW50MzIpIChhdmdfYWxsb2Nz ICogMC4xKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBhY3R1YWwgcmViYWxh bmNpbmcKKwkgKgorCSAqIFBhcnRpdGlvbiB3aXRoIGZld2VyIHRoYW4gYXZlcmFnZSBhbGxv Y2F0aW9ucywgc2hvdWxkIG5vdCByZWRpcmVjdCBhbnkKKwkgKiBhbGxvY2F0aW9ucyB0byBv dGhlciBwYXJ0aXRpb25zLiBTbyBqdXN0IHVzZSB3ZWlnaHRzIHdpdGggYSBzaW5nbGUKKwkg KiBub24temVybyB3ZWlnaHQgZm9yIHRoZSBwYXJ0aXRpb24gaXRzZWxmLgorCSAqCisJICog UGFydGl0aW9uIHdpdGggbW9yZSB0aGFuIGF2ZXJhZ2UgYWxsb2NhdGlvbnMsIHNob3VsZCBu b3QgcmVjZWl2ZSBhbnkKKwkgKiByZWRpcmVjdGVkIGFsbG9jYXRpb25zLCBhbmQgaW5zdGVh ZCBpdCBzaG91bGQgcmVkaXJlY3QgZXhjZXNzIGFsbG9jYXRpb25zCisJICogdG8gb3RoZXIg cGFydGl0aW9ucy4KKwkgKgorCSAqIFRoZSByZWRpc3RyaWJ1dGlvbiBpcyAicHJvcG9ydGlv bmFsIiAtIGlmIHRoZSBleGNlc3MgYWxsb2NhdGlvbnMgb2YgYQorCSAqIHBhcnRpdGlvbiBy ZXByZXNlbnQgMTAlIG9mIHRoZSAiZGVsdGEiLCB0aGVuIGVhY2ggcGFydGl0aW9uIHRoYXQK KwkgKiBuZWVkcyBtb3JlIGFsbG9jYXRpb25zIHdpbGwgZ2V0IDEwJSBvZiB0aGUgZ2FwIGZy b20gaXQuCisJICoKKwkgKiBYWFggV2Ugc2hvdWxkIGFkZCBoeXN0ZXJlc2lzLCBzbyB0aGF0 IGl0IGRvZXMgbm90IG9zY2lsbGF0ZSBvciBzb21ldGhpbmcKKwkgKiBsaWtlIHRoYXQuIE1h eWJlIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRiBhbHJlYWR5IGRvZXMgdGhhdD8KKwkgKgor CSAqIFhYWCBJZGVhbGx5LCB0aGUgYWx0ZXJuYXRpdmUgcGFydGl0aW9ucyB0byB1c2UgZmly c3Qgd291bGQgYmUgdGhlIG90aGVyCisJICogcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUgbm9k ZSAoaWYgYW55KS4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJv bC0+bnVtX3BhcnRpdGlvbnM7IGkrKykKKwl7CisJCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0 cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldOworCQl1aW50OAkJYmFsYW5jZVtNQVhfQlVGRkVS X1BBUlRJVElPTlNdOworCisJCS8qIGxvY2ssIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUg YmFsYW5jZSB3ZWlnaHRzICovCisJCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3 ZWVwX2xvY2spOworCisJCS8qIHJlc2V0IHRoZSB3ZWlnaHRzIHRvIHN0YXJ0IGZyb20gc2Ny YXRjaCAqLworCQltZW1zZXQoYmFsYW5jZSwgMCwgc2l6ZW9mKHVpbnQ4KSAqIE1BWF9CVUZG RVJfUEFSVElUSU9OUyk7CisKKwkJLyogZG9lcyB0aGlzIHBhcnRpdGlvbiBoYXMgZmV3ZXIg b3IgbW9yZSB0aGFuIGF2Z19hbGxvY3M/ICovCisJCWlmIChhbGxvY3NbaV0gPCBhdmdfYWxs b2NzKQorCQl7CisJCQkvKiBmZXdlciAtIGRvbid0IHJlZGlyZWN0IGFueSBhbGxvY2F0aW9u cyBlbHNld2hlcmUgKi8KKwkJCWJhbGFuY2VbaV0gPSAxMDA7CisJCX0KKwkJZWxzZQorCQl7 CisJCQkvKgorCQkJICogbW9yZSAtIHJlZGlzdHJpYnV0ZSB0aGUgZXhjZXNzIGFsbG9jYXRp b25zCisJCQkgKgorCQkJICogRWFjaCAidGFyZ2V0IiBwYXJ0aXRpb24gKHdpdGggbGVzcyB0 aGFuIGF2Z19hbGxvY3MpIHNob3VsZCBnZXQKKwkJCSAqIGEgZnJhY3Rpb24gcHJvcG9ydGlv bmFsIHRvIChleGNlc3MvZGVsdGEpIGZyb20gdGhpcyBvbmUuCisJCQkgKi8KKworCQkJLyog ZnJhY3Rpb24gb2YgdGhlICJ0b3RhbCIgZGVsdGEgKi8KKwkJCWRvdWJsZQlkZWx0YV9mcmFj ID0gKGFsbG9jc1tpXSAtIGF2Z19hbGxvY3MpICogMS4wIC8gZGVsdGFfYWxsb2NzOworCisJ CQkvKiBrZWVwIGp1c3QgZW5vdWdoIGFsbG9jYXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAq LworCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAqIGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOwor CisJCQkvKiByZWRpcmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMgKi8KKwkJCWZvciAoaW50 IGogPSAwOyBqIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaisrKQorCQkJ eworCQkJCS8qIEhvdyBtYW55IGFsbG9jYXRpb25zIHRvIHJlY2VpdmUgZnJvbSBpLXRoIHBh cnRpdGlvbj8gKi8KKwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3MgPSBkZWx0YV9mcmFjICog KGF2Z19hbGxvY3MgLSBhbGxvY3Nbal0pOworCisJCQkJLyogaWdub3JlIHBhcnRpdGlvbnMg dGhhdCBkb24ndCBuZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlvbnMgKi8KKwkJCQlpZiAoYWxs b2NzW2pdID4gYXZnX2FsbG9jcykKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBmcmFjdGlv biB0byByZWRpcmVjdCAqLworCQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiByZWNlaXZlX2Fs bG9jcyAvIGFsbG9jc1tpXSkgKyAwLjU7CisJCQl9CisJCX0KKworCQkvKiBjb21iaW5lIHRo ZSBvbGQgYW5kIG5ldyB3ZWlnaHRzIChoeXN0ZXJlc2lzKSAqLworCQlmb3IgKGludCBqID0g MDsgaiA8IE1BWF9CVUZGRVJfUEFSVElUSU9OUzsgaisrKQorCQl7CisJCQlzd2VlcC0+YmFs YW5jZVtqXQorCQkJCT0gQ0xPQ0tTV0VFUF9ISVNUT1JZX0NPRUZGICogc3dlZXAtPmJhbGFu Y2Vbal0gKworCQkJCSAgKDEuMCAtIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRikgKiBiYWxh bmNlW2pdOworCQl9CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBf bG9jayk7CisJfQorfQorCiAvKgogICogU3RyYXRlZ3lTeW5jUHJlcGFyZSAtLSBwcmVwYXJl IGZvciBzeW5jIG9mIGFsbCBwYXJ0aXRpb25zCiAgKgpAQCAtNjU3LDcgKzEwMzksMjEgQEAg U3RyYXRlZ3lDdGxTaG1lbUluaXQodm9pZCAqYXJnKQogCQkvKiBDbGVhciBzdGF0aXN0aWNz ICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsK IAkJcGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1C dWZmZXJBbGxvY3MsIDApOworCQlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldLm51bVJlcXVlc3RlZEFsbG9jcywgMCk7CiAJCXBnX2F0b21pY19pbml0 X3U2NCgmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDApOwor CQlwZ19hdG9taWNfaW5pdF91NjQoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLm51bVRv dGFsUmVxdWVzdGVkQWxsb2NzLCAwKTsKKworCQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSB3 ZWlnaHRzIC0gc3RhcnQgYnkgYWxsb2NhdGluZyAxMDAlIGJ1ZmZlcnMgZnJvbQorCQkgKiB0 aGUgY3VycmVudCBub2RlIC8gcGFydGl0aW9uLgorCQkgKi8KKwkJZm9yIChpbnQgaiA9IDA7 IGogPCBNQVhfQlVGRkVSX1BBUlRJVElPTlM7IGorKykKKwkJeworCQkJaWYgKGkgPT0gaikK KwkJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2ldID0gMTAwOworCQkJ ZWxzZQorCQkJCVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldLmJhbGFuY2Vbal0gPSAwOwor CQl9CiAJfQogCiAJLyogTm8gcGVuZGluZyBub3RpZmljYXRpb24gKi8KQEAgLTEwMjUsOCAr MTQyMSwxMCBAQCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwgQnVmZmVyRGVzYyAqYnVmLCBib29sIGZyb21fcgogCiB2b2lkCiBDbG9ja1N3 ZWVwUGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAotCQkJCQkJICAgdWludDMyICpjb21wbGV0 ZV9wYXNzZXMsIHVpbnQzMiAqbmV4dF92aWN0aW1fYnVmZmVyLAotCQkJCQkJICAgdWludDY0 ICpidWZmZXJfdG90YWxfYWxsb2NzLCB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpCisJCQkJCQkg dWludDMyICpjb21wbGV0ZV9wYXNzZXMsIHVpbnQzMiAqbmV4dF92aWN0aW1fYnVmZmVyLAor CQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywgdWludDMyICpidWZmZXJfYWxs b2NzLAorCQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX3JlcV9hbGxvY3MsIHVpbnQzMiAq YnVmZmVyX3JlcV9hbGxvY3MsCisJCQkJCQkgaW50ICoqd2VpZ2h0cykKIHsKIAlDbG9ja1N3 ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpZHhdOwogCkBAIC0xMDM0 LDExICsxNDMyLDIxIEBAIENsb2NrU3dlZXBQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCiAK IAkvKiBnZXQgdGhlIGNsb2Nrc3dlZXAgc3RhdHMgKi8KIAkqY29tcGxldGVfcGFzc2VzID0g c3dlZXAtPmNvbXBsZXRlUGFzc2VzOworCisJLyogY2FsY3VsYXRlIHRoZSBhY3R1YWwgYnVm ZmVyIElEICovCiAJKm5leHRfdmljdGltX2J1ZmZlciA9IHBnX2F0b21pY19yZWFkX3UzMigm c3dlZXAtPm5leHRWaWN0aW1CdWZmZXIpOworCSpuZXh0X3ZpY3RpbV9idWZmZXIgPSBzd2Vl cC0+Zmlyc3RCdWZmZXIgKyAoKm5leHRfdmljdGltX2J1ZmZlciAlIHN3ZWVwLT5udW1CdWZm ZXJzKTsKIAotCSpidWZmZXJfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+ bnVtQnVmZmVyQWxsb2NzKTsKIAkqYnVmZmVyX3RvdGFsX2FsbG9jcyA9IHBnX2F0b21pY19y ZWFkX3U2NCgmc3dlZXAtPm51bVRvdGFsQWxsb2NzKTsKKwkqYnVmZmVyX2FsbG9jcyA9IHBn X2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm51bUJ1ZmZlckFsbG9jcyk7CiAKLQkvKiBjYWxj dWxhdGUgdGhlIGFjdHVhbCBidWZmZXIgSUQgKi8KLQkqbmV4dF92aWN0aW1fYnVmZmVyID0g c3dlZXAtPmZpcnN0QnVmZmVyICsgKCpuZXh0X3ZpY3RpbV9idWZmZXIgJSBzd2VlcC0+bnVt QnVmZmVycyk7CisJKmJ1ZmZlcl90b3RhbF9yZXFfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRf dTY0KCZzd2VlcC0+bnVtVG90YWxSZXF1ZXN0ZWRBbGxvY3MpOworCSpidWZmZXJfcmVxX2Fs bG9jcyA9IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm51bVJlcXVlc3RlZEFsbG9jcyk7 CisKKwkvKiByZXR1cm4gdGhlIHdlaWdodHMgaW4gYSBuZXdseSBhbGxvY2F0ZWQgYXJyYXkg Ki8KKwkqd2VpZ2h0cyA9IHBhbGxvY19hcnJheShpbnQsIFN0cmF0ZWd5Q29udHJvbC0+bnVt X3BhcnRpdGlvbnMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgU3RyYXRlZ3lDb250cm9sLT5u dW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJKCp3ZWlnaHRzKVtpXSA9IChpbnQpIHN3ZWVw LT5iYWxhbmNlW2ldOworCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgK aW5kZXggNWFiMGNlZTQyODEuLjg4NzMxNGQ0M2Y0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaApAQCAtNTkzLDYgKzU5Myw3IEBAIGV4dGVybiBCdWZmZXJEZXNjICpT dHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIGV4dGVy biBib29sIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LAogCQkJCQkJCQkgQnVmZmVyRGVzYyAqYnVmLCBib29sIGZyb21fcmluZyk7CiAKK2V4 dGVybiB2b2lkIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9pZCk7CiBleHRlcm4gdm9pZCBTdHJh dGVneVN5bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1aW50MzIgKm51bV9idWZfYWxsb2Mp OwogZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydChpbnQgcGFydGl0aW9uLCB1aW50MzIg KmNvbXBsZXRlX3Bhc3NlcywKIAkJCQkJCQkgIGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKm51 bV9idWZmZXJzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IGUwYmI0Y2MxZGYxLi4wMjgz M2IxOWIwYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC00MTEsMTEgKzQxMSwxMyBAQCBl eHRlcm4gaW50CUdldEFjY2Vzc1N0cmF0ZWd5UGluTGltaXQoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3kpOwogCiBleHRlcm4gdm9pZCBGcmVlQWNjZXNzU3RyYXRlZ3koQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwogZXh0ZXJuIHZvaWQgQ2xvY2tTd2VlcFBhcnRp dGlvbkdldEluZm8oaW50IGlkeCwKLQkJCQkJCQkJCSAgIHVpbnQzMiAqY29tcGxldGVfcGFz c2VzLAotCQkJCQkJCQkJICAgdWludDMyICpuZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCQkJ CQkgICB1aW50NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsCi0JCQkJCQkJCQkgICB1aW50MzIg KmJ1ZmZlcl9hbGxvY3MpOwotCisJCQkJCQkJCQkgdWludDMyICpjb21wbGV0ZV9wYXNzZXMs CisJCQkJCQkJCQkgdWludDMyICpuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkJCQkgdWlu dDY0ICpidWZmZXJfdG90YWxfYWxsb2NzLAorCQkJCQkJCQkJIHVpbnQzMiAqYnVmZmVyX2Fs bG9jcywKKwkJCQkJCQkJCSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9yZXFfYWxsb2NzLAorCQkJ CQkJCQkJIHVpbnQzMiAqYnVmZmVyX3JlcV9hbGxvY3MsCisJCQkJCQkJCQkgaW50ICoqd2Vp Z2h0cyk7CiAKIC8qIGlubGluZSBmdW5jdGlvbnMgKi8KIAotLSAKMi41NC4wCgo= --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0006-clock-sweep-scan-all-partitions.patch" Content-Disposition: attachment; filename="v20260624-0006-clock-sweep-scan-all-partitions.patch" Content-Transfer-Encoding: base64 RnJvbSBmYWZhOWJhNTRjMDIwMWNlYzEwODRmNTU4Y2RhZDI4NWI1ZmM5MDNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyIEp1biAyMDI2IDIyOjM5OjM4ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNjA2MjQgNi83XSBjbG9jay1zd2VlcDogc2NhbiBhbGwgcGFydGl0aW9ucwoKV2hlbiBs b29raW5nIGZvciBhIGZyZWUgYnVmZmVyLCBzY2FuIGFsbCBjbG9jay1zd2VlcCBwYXJ0aXRp b25zLCBub3QKanVzdCB0aGUgImhvbWUiIG9uZS4gQWxsIGJ1ZmZlcnMgaW4gdGhlIGhvbWUg cGFydGl0aW9uIG1heSBiZSBwaW5uZWQsIGluCndoaWNoIGNhc2Ugd2Ugc2hvdWxkIG5vdCBm YWlsLiBJbnN0ZWFkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHBhcnRpdGlvbiwKaW4gYSByb3Vu ZC1yb2JpbiB3YXksIGFuZCBvbmx5IGZhaWwgYWZ0ZXIgc2Nhbm5pbmcgdGhyb3VnaCBhbGwg b2YgdGhlbS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jICAg ICB8IDgzICsrKysrKysrKysrKysrKystLS0tLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAy N19zdHJlYW1fcmVncmVzcy5wbCB8ICA1IC0tCiAyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2Vy dGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jCmluZGV4IGE1NDNmYjEyYjIxLi4xYWMxZTNlMzQ5MCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC0xODQsNiArMTg0LDkgQEAgc3RhdGlj IEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LAogc3RhdGljIHZvaWQgQWRkQnVmZmVyVG9SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCUJ1ZmZlckRlc2MgKmJ1Zik7CiBzdGF0aWMgQ2xvY2tT d2VlcCAqQ2hvb3NlQ2xvY2tTd2VlcChib29sIGJhbGFuY2UpOworc3RhdGljIEJ1ZmZlckRl c2MgKlN0cmF0ZWd5R2V0QnVmZmVyUGFydGl0aW9uKENsb2NrU3dlZXAgKnN3ZWVwLAorCQkJ CQkJCQkJCQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJCQkg IHVpbnQ2NCAqYnVmX3N0YXRlKTsKIAogLyoKICAqIGNsb2Nrc3dlZXAgYWxsb2NhdGlvbiBi YWxhbmNpbmcKQEAgLTI1MSwxMCArMjU0LDkgQEAgc3RhdGljIGludCBjbG9ja3N3ZWVwX3Bh cnRpdGlvbl9idWRnZXQgPSAwOwogICogaWQgb2YgdGhlIGJ1ZmZlciBub3cgdW5kZXIgdGhl IGhhbmQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdWludDMyCi1DbG9ja1N3ZWVwVGljayh2b2lk KQorQ2xvY2tTd2VlcFRpY2soQ2xvY2tTd2VlcCAqc3dlZXApCiB7CiAJdWludDMyCQl2aWN0 aW07Ci0JQ2xvY2tTd2VlcCAqc3dlZXAgPSBDaG9vc2VDbG9ja1N3ZWVwKHRydWUpOwogCiAJ LyoKIAkgKiBBdG9taWNhbGx5IG1vdmUgaGFuZCBhaGVhZCBvbmUgYnVmZmVyIC0gaWYgdGhl cmUncyBzZXZlcmFsIHByb2Nlc3NlcwpAQCAtNDg2LDcgKzQ4OCw4IEBAIFN0cmF0ZWd5R2V0 QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0 ZSwgYm9vbCAqZnJvbV9yCiB7CiAJQnVmZmVyRGVzYyAqYnVmOwogCWludAkJCWJnd3Byb2Nu bzsKLQlpbnQJCQl0cnljb3VudGVyOworCUNsb2NrU3dlZXAgKnN3ZWVwLAorCQkJICAgKnN3 ZWVwX3N0YXJ0OwkJLyogc3RhcnRpbmcgY2xvY2stc3dlZXAgcGFydGl0aW9uICovCiAKIAkq ZnJvbV9yaW5nID0gZmFsc2U7CiAKQEAgLTU0NSwzMyArNTQ4LDYxIEBAIFN0cmF0ZWd5R2V0 QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0 ZSwgYm9vbCAqZnJvbV9yCiAJLyoKIAkgKiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3Jp dGhtIHRvIGZpbmQgYSBmcmVlIGJ1ZmZlcgogCSAqCi0JICogWFhYIE5vdGUgdGhhdCBDbG9j a1N3ZWVwVGljaygpIGlzIE5VTUEtYXdhcmUsIGkuZS4gaXQgb25seSBsb29rcyBhdAotCSAq IGJ1ZmZlcnMgZnJvbSBhIHNpbmdsZSBwYXJ0aXRpb24sIGFsaWduZWQgd2l0aCB0aGUgTlVN QSBub2RlLiBUaGF0IG1lYW5zCi0JICogYSBwcm9jZXNzICJzd2VlcHMiIG9ubHkgYSBmcmFj dGlvbiBvZiBidWZmZXJzLCBldmVuIGlmIHRoZSBvdGhlciBidWZmZXJzCi0JICogYXJlIGJl dHRlciBjYW5kaWRhdGVzIGZvciBldmljdGlvbi4gTWF5YmUgdGhlcmUgc2hvdWxkIGJlIHNv bWUgbG9naWMgdG8KLQkgKiAic3RlYWwiIGJ1ZmZlcnMgZnJvbSBvdGhlciBwYXJ0aXRpb25z IG9yIG90aGVyIG5vZGVzPwotCSAqCi0JICogWFhYIFRoaXMgb25seSBzZWFyY2hlcyBhIHNp bmdsZSBwYXJ0aXRpb24sIHdoaWNoIGNhbiByZXN1bHQgaW4gIm5vCi0JICogdW5waW5uZWQg YnVmZmVycyBhdmFpbGFibGUiIGV2ZW4gaWYgdGhlcmUgYXJlIGJ1ZmZlcnMgaW4gb3RoZXIK LQkgKiBwYXJ0aXRpb25zLiBOZWVkcyB0byBzY2FuIHBhcnRpdGlvbnMgaWYgbmVlZGVkLCBh cyBhIGZhbGxiYWNrLgotCSAqCi0JICogWFhYIFdvdWxkIHRoYXQgYWxzbyBtZWFuIHdlIHNo b3VsZCBoYXZlIG11bHRpcGxlIGJnd3JpdGVycywgb25lIGZvciBlYWNoCi0JICogbm9kZSwg b3Igd291bGQgb25lIGJnd3JpdGVyIHN0aWxsIGhhbmRsZSBhbGwgbm9kZXM/Ci0JICoKLQkg KiBYWFggQWxzbywgdGhlIHRyeWNvdW50ZXIgc2hvdWxkIG5vdCBiZSBzZXQgdG8gTkJ1ZmZl cnMsIGJ1dCB0byBidWZmZXIKLQkgKiBjb3VudCBmb3IgdGhhdCBvbmUgcGFydGl0aW9uLiBJ biBmYWN0LCB0aGlzIHNob3VsZCBub3QgY2FsbCBDbG9ja1N3ZWVwVGljawotCSAqIGZvciBl dmVyeSBpdGVyYXRpb24uIFRoZSBjYWxsIGlzIGxpa2VseSBxdWl0ZSBleHBlbnNpdmUgKGRv ZXMgYSBsb3QKLQkgKiBvZiBzdHVmZiksIGFuZCBhbHNvIG1heSByZXR1cm4gYSBkaWZmZXJl bnQgcGFydGl0aW9uIG9uIGVhY2ggY2FsbC4KLQkgKiBXZSBzaG91bGQganVzdCBkbyBpdCBv bmNlLCBhbmQgdGhlbiBkbyB0aGUgZm9yKDs7KSBsb29wLiBBbmQgdGhlbgotCSAqIG1heWJl IGFkdmFuY2UgdG8gdGhlIG5leHQgcGFydGl0aW9uLCB1bnRpbCB3ZSBzY2FuIHRocm91Z2gg YWxsIG9mIHRoZW0uCisJICogU3RhcnQgd2l0aCB0aGUgInByZWZlcnJlZCIgcGFydGl0aW9u LCBhbmQgdGhlbiBwcm9jZWVkIGluIGEgcm91bmQtcm9iaW4KKwkgKiBtYW5uZXIuIElmIHdl IGN5Y2xlIGJhY2sgdG8gdGhlIHN0YXJ0aW5nIHBhcnRpdGlvbiwgaXQgbWVhbnMgbm9uZSBv ZiB0aGUKKwkgKiBwYXJ0aXRpb25zIGhhcyB1bnBpbm5lZCBidWZmZXJzLgogCSAqLwotCXRy eWNvdW50ZXIgPSBOQnVmZmVyczsKKwlzd2VlcCA9IENob29zZUNsb2NrU3dlZXAodHJ1ZSk7 CisJc3dlZXBfc3RhcnQgPSBzd2VlcDsKKwlmb3IgKDs7KQorCXsKKwkJYnVmID0gU3RyYXRl Z3lHZXRCdWZmZXJQYXJ0aXRpb24oc3dlZXAsIHN0cmF0ZWd5LCBidWZfc3RhdGUpOworCisJ CS8qIGZvdW5kIGEgYnVmZmVyIGluIHRoZSAic3dlZXAiIHBhcnRpdGlvbiwgd2UncmUgZG9u ZSAqLworCQlpZiAoYnVmICE9IE5VTEwpCisJCQlyZXR1cm4gYnVmOworCisJCS8qCisJCSAq IFRyeSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgcGFydGl0aW9uLCByb3VuZC1yb2JpbiAoaWYg bGFzdCBwYXJ0aXRpb24sCisJCSAqIHdyYXAgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcpLgor CQkgKgorCQkgKiBYWFggVGhpcyBpcyBhIGJpdCB1Z2x5LCB0aGVyZSBtdXN0IGJlIGEgYmV0 dGVyIHdheSB0byBhZHZhbmNlIHRvIHRoZQorCQkgKiBuZXh0IHBhcnRpdGlvbi4KKwkJICov CisJCWlmIChzd2VlcCA9PSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbU3RyYXRlZ3lDb250 cm9sLT5udW1fcGFydGl0aW9ucyAtIDFdKQorCQkJc3dlZXAgPSBTdHJhdGVneUNvbnRyb2wt PnN3ZWVwczsKKwkJZWxzZQorCQkJc3dlZXArKzsKKworCQkvKiB3ZSd2ZSBzY2FubmVkIGFs bCBwYXJ0aXRpb25zICovCisJCWlmIChzd2VlcCA9PSBzd2VlcF9zdGFydCkKKwkJCWJyZWFr OworCX0KKworCS8qIHdlIHNob3VsZG4ndCBnZXQgaGVyZSBpZiB0aGVyZSBhcmUgdW5waW5u ZWQgYnVmZmVycyAqLworCWVsb2coRVJST1IsICJubyB1bnBpbm5lZCBidWZmZXJzIGF2YWls YWJsZSIpOworfQorCisvKgorICogU3RyYXRlZ3lHZXRCdWZmZXJQYXJ0aXRpb24KKyAqCQln ZXQgYSBmcmVlIGJ1ZmZlciBmcm9tIGEgc2luZ2xlIGNsb2NrLXN3ZWVwIHBhcnRpdGlvbgor ICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZnJlZSAodW5waW5uZWQpIGJ1 ZmZlcnMgaW4gdGhlIHBhcnRpdGlvbi4KKyovCitzdGF0aWMgQnVmZmVyRGVzYyAqCitTdHJh dGVneUdldEJ1ZmZlclBhcnRpdGlvbihDbG9ja1N3ZWVwICpzd2VlcCwgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgICB1aW50NjQgKmJ1Zl9zdGF0ZSkKK3sKKwlC dWZmZXJEZXNjICpidWY7CisJaW50CQkJdHJ5Y291bnRlcjsKKworCXRyeWNvdW50ZXIgPSBz d2VlcC0+bnVtQnVmZmVyczsKIAlmb3IgKDs7KQogCXsKIAkJdWludDY0CQlvbGRfYnVmX3N0 YXRlOwogCQl1aW50NjQJCWxvY2FsX2J1Zl9zdGF0ZTsKIAotCQlidWYgPSBHZXRCdWZmZXJE ZXNjcmlwdG9yKENsb2NrU3dlZXBUaWNrKCkpOworCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlw dG9yKENsb2NrU3dlZXBUaWNrKHN3ZWVwKSk7CiAKIAkJLyoKIAkJICogQ2hlY2sgd2hldGhl ciB0aGUgYnVmZmVyIGNhbiBiZSB1c2VkIGFuZCBwaW4gaXQgaWYgc28uIERvIHRoaXMKQEAg LTU5OSw3ICs2MzAsNyBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQkJCQkgKiBv bmUgZXZlbnR1YWxseSwgYnV0IGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGZhaWwgdGhhbgog CQkJCQkgKiB0byByaXNrIGdldHRpbmcgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KIAkJ CQkJICovCi0JCQkJCWVsb2coRVJST1IsICJubyB1bnBpbm5lZCBidWZmZXJzIGF2YWlsYWJs ZSIpOworCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02 MTgsNyArNjQ5LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkJCQlpZiAocGdf YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTY0KCZidWYtPnN0YXRlLCAmb2xkX2J1Zl9zdGF0 ZSwKIAkJCQkJCQkJCQkJCSAgIGxvY2FsX2J1Zl9zdGF0ZSkpCiAJCQkJewotCQkJCQl0cnlj b3VudGVyID0gTkJ1ZmZlcnM7CisJCQkJCXRyeWNvdW50ZXIgPSBzd2VlcC0+bnVtQnVmZmVy czsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVj b3ZlcnkvdC8wMjdfc3RyZWFtX3JlZ3Jlc3MucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAy N19zdHJlYW1fcmVncmVzcy5wbAppbmRleCBmNjhlMDhlNTY5Ny4uYWU5NzcyOTc4NDkgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCisr KyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI3X3N0cmVhbV9yZWdyZXNzLnBsCkBAIC0xOCwx MSArMTgsNiBAQCAkbm9kZV9wcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOwogJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsCiAJJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAx MCcpOwogCi0jIFRoZSBkZWZhdWx0IGlzIDFNQiwgd2hpY2ggaXMgbm90IGVub3VnaCB3aXRo IGNsb2NrLXN3ZWVwIHBhcnRpdGlvbmluZy4KLSMgSW5jcmVhc2UgdG8gMzJNQiwgc28gdGhh dCB3ZSBkb24ndCBnZXQgIm5vIHVucGlubmVkIGJ1ZmZlcnMiLgotJG5vZGVfcHJpbWFyeS0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCi0JJ3NoYXJlZF9idWZmZXJzID0gMzJN QicpOwotCiAjIEVuYWJsZSBwZ19zdGF0X3N0YXRlbWVudHMgdG8gZm9yY2UgdGVzdHMgdG8g ZG8gcXVlcnkganVtYmxpbmcuCiAjIHBnX3N0YXRfc3RhdGVtZW50cy5tYXggc2hvdWxkIGJl IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcwogIyBvZiB0aGUgcmVncmVz c2lvbiBkYXRhYmFzZS4KLS0gCjIuNTQuMAoK --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: text/x-patch; charset=UTF-8; name="v20260624-0007-Add-parttioned-clocksweep-and-NUMA-goodies.patch" Content-Disposition: attachment; filename*0="v20260624-0007-Add-parttioned-clocksweep-and-NUMA-goodies.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmNWI3YjY3MzM0MTkxODZlNTZiMDZlZDFkOGI2ZGE3ZTM0OTg0YzJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRl cnByaXNlZGIuY29tPgpEYXRlOiBUaHUsIDExIEp1biAyMDI2IDEyOjM4OjQzICswMjAwClN1 YmplY3Q6IFtQQVRDSCB2MjAyNjA2MjQgNy83XSBBZGQgcGFydHRpb25lZCBjbG9ja3N3ZWVw IGFuZCBOVU1BIGdvb2RpZXMuCgoxLiBBZGQgdGhyZWUgY2xvY2tzd2VlcCBHVUNzIHRvIGFs bG93IG1hbmlwdWxhdGlvbiBvZiBwYXJ0aXRvbmVkIGNsb2Nrc3dlZXAKICAgaW4gcnVudGlt ZS4KMi4gQWRkIHBnX2J1ZmZlcmNhY2hlX3NldF93ZWlnaHRzKGludCwgaW50W10pIHRvIGFs dGVyIHBhcnRpdGlvbiBhbGxvY3MgKHdpdGgKICAgY2xvY2tzd2VlcF9iYWxhbmNlX3JlY2Fs Yz1vZmYpLgozLiBBZGQgZGVidWdfbnVtYV9ub2RlIEdVQyB0byBwaW4gdG8gTlVNQSBub2Rl LgotLS0KIC4uLi9wZ19idWZmZXJjYWNoZS0tMS43LS0xLjguc3FsICAgICAgICAgICAgICB8 ICA3ICsrCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMg fCAzNyArKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAg ICAgICAgIHwgODYgKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgNTcgKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAzMSArKysrKysrCiBzcmMv aW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgNiArKwogNyBm aWxlcyBjaGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44 LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44 LnNxbAppbmRleCA0M2QyZTg0ZjlkMi4uOWQ4ZjQ5Njk1NTUgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbAorKysgYi9j b250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKQEAg LTI1LDkgKzI1LDE2IEBAIENSRUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMg QVMKIAkgbnVtX3JlcV9hbGxvY3MgYmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJl bnQgY3ljbGUpCiAJIHdlaWdodHMgaW50W10pOwkJCS0tIGJhbGFuY2luZyB3ZWlnaHRzCiAK Ky0tIFJlZ2lzdGVyIHRoZSBmdW5jdGlvbiB0byBzZXQgY2xvY2stc3dlZXAgYmFsYW5jZSB3 ZWlnaHRzLgorQ1JFQVRFIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3NldF9wYXJ0aXRpb24o SU4gcGFydGl0aW9uIGludCwgSU4gd2VpZ2h0cyBpbnRbXSkKK1JFVFVSTlMgdm9pZAorQVMg J01PRFVMRV9QQVRITkFNRScsICdwZ19idWZmZXJjYWNoZV9zZXRfcGFydGl0aW9uJworTEFO R1VBR0UgQyBWT0xBVElMRSBQQVJBTExFTCBVTlNBRkU7CisKIC0tIERvbid0IHdhbnQgdGhl c2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04g cGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVCTElDOwogUkVWT0tFIEFMTCBP TiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBP TiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9zZXRfcGFydGl0aW9uKGludCwgaW50W10pIEZS T00gUFVCTElDOwogCiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hl X3BhcnRpdGlvbnMoKSBUTyBwZ19tb25pdG9yOwogR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZl cmNhY2hlX3BhcnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVm ZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwppbmRleCBmMjZiMjMzMmMxZC4uMmEx YjdjYjc1NDkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNh Y2hlX3BhZ2VzLmMKQEAgLTgxLDYgKzgxLDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShwZ19i dWZmZXJjYWNoZV9tYXJrX2RpcnR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVy Y2FjaGVfbWFya19kaXJ0eV9yZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1 ZmZlcmNhY2hlX21hcmtfZGlydHlfYWxsKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNh Y2hlX3NldF9wYXJ0aXRpb24pOwogCiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkg b25jZSBwZXIgYmFja2VuZCBwcm9jZXNzIGxpZmV0aW1lICovCkBAIC0xMDc3LDMgKzEwNzgs MzkgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCWVs c2UKIAkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogfQorCisvKgorICogU2V0IHRoZSBj bG9jay1zd2VlcCBiYWxhbmNlIHdlaWdodHMgZm9yIGEgc2luZ2xlIHBhcnRpdGlvbi4KKyAq LworRGF0dW0KK3BnX2J1ZmZlcmNhY2hlX3NldF9wYXJ0aXRpb24oUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlpbnQJCQlwYXJ0aXRpb24gPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJQXJyYXlU eXBlICAqYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7CisJRGF0dW0JICAgKmVs ZW1zOworCWJvb2wJICAgKm51bGxzOworCWludAkJCW5lbGVtczsKKwlpbnQJCSAgICp3ZWln aHRzOworCisJaWYgKEFSUl9ORElNKGFycmF5KSA+IDEpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygid2VpZ2h0cyBtdXN0IGJlIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IikpKTsKKwor CWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oYXJyYXksIElOVDRPSUQsICZlbGVtcywgJm51 bGxzLCAmbmVsZW1zKTsKKworCXdlaWdodHMgPSBwYWxsb2NfYXJyYXkoaW50LCBuZWxlbXMp OworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJeworCQlpZiAobnVsbHNb aV0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygid2VpZ2h0cyBtdXN0IG5vdCBjb250 YWluIE5VTEwgdmFsdWVzIikpKTsKKworCQl3ZWlnaHRzW2ldID0gRGF0dW1HZXRJbnQzMihl bGVtc1tpXSk7CisJfQorCisJQ2xvY2tTd2VlcFNldFdlaWdodHMocGFydGl0aW9uLCB3ZWln aHRzLCBuZWxlbXMpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCmluZGV4IDFhYzFlM2UzNDkwLi5lNjc3YzcxZTBiMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC01NSw2ICs1NSwy NiBAQAogICovCiAjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRgkwLjUKIAorLyoK KyAqIEdVQ3MgY29udHJvbGxpbmcgdGhlIE5VTUEtYXdhcmUgY2xvY2stc3dlZXAgYmVoYXZp b3IuCisgKgorICogY2xvY2tzd2VlcF9iYWxhbmNlIC0gd2hlbiBlbmFibGVkLCBhbGxvY2F0 aW9ucyBtYXkgZ2V0IHJlZGlyZWN0ZWQgYmV0d2VlbgorICogY2xvY2stc3dlZXAgcGFydGl0 aW9ucyB0byBrZWVwIHRoZW0gYmFsYW5jZWQgKHNlZSBTdHJhdGVneVN5bmNCYWxhbmNlKS4K KyAqCisgKiBjbG9ja3N3ZWVwX2JhbGFuY2VfcmVjYWxjIC0gd2hlbiBlbmFibGVkLCB0aGUg YmFsYW5jZSB3ZWlnaHRzIGFyZQorICogcGVyaW9kaWNhbGx5IHJlY2FsY3VsYXRlZCAoc2Vl IFN0cmF0ZWd5U3luY0JhbGFuY2UpLiBEaXNhYmxpbmcgdGhpcyBrZWVwcworICogdGhlIGN1 cnJlbnQgd2VpZ2h0cywgZS5nLiBvbmVzIGNvbmZpZ3VyZWQgbWFudWFsbHkgdXNpbmcKKyAq IHBnX2J1ZmZlcmNhY2hlX3NldF9wYXJ0aXRpb24oKSwgd2hpbGUgc3RpbGwgdXNpbmcgdGhl bSB0byBiYWxhbmNlCisgKiBhbGxvY2F0aW9ucyAoaWYgY2xvY2tzd2VlcF9iYWxhbmNlIGlz IGVuYWJsZWQpLgorICoKKyAqIGNsb2Nrc3dlZXBfc2Nhbl9hbGxfcGFydGl0aW9ucyAtIHdo ZW4gZW5hYmxlZCwgbG9va2luZyBmb3IgYSBmcmVlIGJ1ZmZlcgorICogc2NhbnMgYWxsIGNs b2NrLXN3ZWVwIHBhcnRpdGlvbnMgKGluIGEgcm91bmQtcm9iaW4gd2F5KSwgbm90IGp1c3Qg dGhlCisgKiBiYWNrZW5kJ3MgImhvbWUiIHBhcnRpdGlvbi4KKyAqLworYm9vbAkJY2xvY2tz d2VlcF9iYWxhbmNlID0gdHJ1ZTsKK2Jvb2wJCWNsb2Nrc3dlZXBfYmFsYW5jZV9yZWNhbGMg PSB0cnVlOworYm9vbAkJY2xvY2tzd2VlcF9zY2FuX2FsbF9wYXJ0aXRpb25zID0gdHJ1ZTsK KwogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24gb2YgdGhlIENsb2Nr U3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTQzNiw4ICs0NTYsMTEg QEAgQ2hvb3NlQ2xvY2tTd2VlcChib29sIGJhbGFuY2UpCiAJICogV2hlbiBiYWxhbmNpbmcg YWxsb2NhdGlvbnMsIHJlZGlyZWN0IHRoZSBhbGxvY2F0aW9ucyB0byBvdGhlciBwYXJ0aXRp b25zCiAJICogYWNjb3JkaW5nIHRvIHRoZSBidWRnZXRzLiBXZSBtb3ZlIHRocm91Z2ggcGFy dGl0aW9ucyBpbiBhIHJvdW5kLXJvYmluIHdheSwKIAkgKiBhZnRlciBhbGxvY2F0aW5nIHRo ZSAiYnVkZ2V0IiBvZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBjdXJyZW50IG9uZS4KKwkgKgor CSAqIEJhbGFuY2luZyBjYW4gYmUgZGlzYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgY2xv Y2tzd2VlcF9iYWxhbmNlIEdVQywgaW4KKwkgKiB3aGljaCBjYXNlIGFsbG9jYXRpb25zIGFs d2F5cyBzdGF5IGluIHRoZSBiYWNrZW5kJ3MgImhvbWUiIHBhcnRpdGlvbi4KIAkgKi8KLQlp ZiAoYmFsYW5jZSkKKwlpZiAoYmFsYW5jZSAmJiBjbG9ja3N3ZWVwX2JhbGFuY2UpCiAJewog CQkvKgogCQkgKiBSYW4gb3V0IG9mIGJ1ZGdldCBmcm9tIHRoZSBjdXJyZW50IHBhcnRpdGlv bj8gTW92ZSB0byB0aGUgbmV4dCBvbmUKQEAgLTU1MSw2ICs1NzQsMTAgQEAgU3RyYXRlZ3lH ZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0 YXRlLCBib29sICpmcm9tX3IKIAkgKiBTdGFydCB3aXRoIHRoZSAicHJlZmVycmVkIiBwYXJ0 aXRpb24sIGFuZCB0aGVuIHByb2NlZWQgaW4gYSByb3VuZC1yb2JpbgogCSAqIG1hbm5lci4g SWYgd2UgY3ljbGUgYmFjayB0byB0aGUgc3RhcnRpbmcgcGFydGl0aW9uLCBpdCBtZWFucyBu b25lIG9mIHRoZQogCSAqIHBhcnRpdGlvbnMgaGFzIHVucGlubmVkIGJ1ZmZlcnMuCisJICoK KwkgKiBTY2FubmluZyBvZiB0aGUgb3RoZXIgcGFydGl0aW9ucyBjYW4gYmUgZGlzYWJsZWQg YXQgcnVudGltZSB1c2luZyB0aGUKKwkgKiBjbG9ja3N3ZWVwX3NjYW5fYWxsX3BhcnRpdGlv bnMgR1VDLiBJbiB0aGF0IGNhc2Ugd2Ugb25seSBzY2FuIHRoZQorCSAqIGJhY2tlbmQncyAi aG9tZSIgcGFydGl0aW9uLCBhbmQgZmFpbCBpZiBpdCBoYXMgbm8gdW5waW5uZWQgYnVmZmVy cy4KIAkgKi8KIAlzd2VlcCA9IENob29zZUNsb2NrU3dlZXAodHJ1ZSk7CiAJc3dlZXBfc3Rh cnQgPSBzd2VlcDsKQEAgLTU2Miw2ICs1ODksMTAgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpm cm9tX3IKIAkJaWYgKGJ1ZiAhPSBOVUxMKQogCQkJcmV0dXJuIGJ1ZjsKIAorCQkvKiBkb24n dCBsb29rIGF0IG90aGVyIHBhcnRpdGlvbnMgdW5sZXNzIGFsbG93ZWQgdG8gKi8KKwkJaWYg KCFjbG9ja3N3ZWVwX3NjYW5fYWxsX3BhcnRpdGlvbnMpCisJCQlicmVhazsKKwogCQkvKgog CQkgKiBUcnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IHBhcnRpdGlvbiwgcm91bmQtcm9iaW4g KGlmIGxhc3QgcGFydGl0aW9uLAogCQkgKiB3cmFwIGFyb3VuZCB0byB0aGUgYmVnaW5uaW5n KS4KQEAgLTczOSw2ICs3NzAsOSBAQCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCQlh dmdfYWxsb2NzLAkJCS8qIGF2ZXJhZ2UgYWxsb2NhdGlvbnMgKHBlciBwYXJ0aXRpb24pICov CiAJCQlkZWx0YV9hbGxvY3MgPSAwOwkvKiBzdW0gb2YgYWxsb2NzIGFib3ZlIGF2ZXJhZ2Ug Ki8KIAorCWlmICghY2xvY2tzd2VlcF9iYWxhbmNlIHx8ICFjbG9ja3N3ZWVwX2JhbGFuY2Vf cmVjYWxjKQorCQlyZXR1cm47CisKIAkvKgogCSAqIENvbGxlY3QgdGhlIG51bWJlciBvZiBh bGxvY2F0aW9ucyByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgaW50ZXJ2YWwuCiAJICogV2hpbGUg YXQgaXQsIHJlc2V0IHRoZSBjb3VudGVyIHRvIHN0YXJ0IHRoZSBuZXcgaW50ZXJ2YWwuCkBA IC0xNDgxLDMgKzE1MTUsNTMgQEAgQ2xvY2tTd2VlcFBhcnRpdGlvbkdldEluZm8oaW50IGlk eCwKIAkJKCp3ZWlnaHRzKVtpXSA9IChpbnQpIHN3ZWVwLT5iYWxhbmNlW2ldOwogCX0KIH0K KworLyoKKyAqIENsb2NrU3dlZXBTZXRXZWlnaHRzIG92ZXJyaWRlIHRoZSBjbG9jay1zd2Vl cCBiYWxhbmNlIHdlaWdodHMgb2YgYSBzaW5nbGUKKyAqIHBhcnRpdGlvbi4KKyAqLwordm9p ZAorQ2xvY2tTd2VlcFNldFdlaWdodHMoaW50IHBhcnRpdGlvbiwgaW50ICp3ZWlnaHRzLCBp bnQgbndlaWdodHMpCit7CisJQ2xvY2tTd2VlcCAqc3dlZXA7CisKKwkvKgorCSAqIERpc2Fs bG93IG1hbnVhbCB3ZWlnaHRzIHdoaWxlIHRoZSBhdXRvbWF0aWMgcmVjYWxjdWxhdGlvbiBp cyBlbmFibGVkLCBhcworCSAqIFN0cmF0ZWd5U3luY0JhbGFuY2Ugd291bGQganVzdCByZWNv bXB1dGUgKGFuZCBvdmVyd3JpdGUpIHRoZW0uCisJICovCisJaWYgKGNsb2Nrc3dlZXBfYmFs YW5jZV9yZWNhbGMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiY2Fubm90 IHNldCBjbG9jay1zd2VlcCB3ZWlnaHRzIHdoaWxlIGRlYnVnX2Nsb2Nrc3dlZXBfYmFsYW5j ZV9yZWNhbGMgaXMgZW5hYmxlZCIpLAorCQkJCSBlcnJoaW50KCJTZXQgZGVidWdfY2xvY2tz d2VlcF9iYWxhbmNlX3JlY2FsYyB0byBvZmYgYmVmb3JlIHNldHRpbmcgdGhlIHdlaWdodHMg bWFudWFsbHkuIikpKTsKKworCWlmICgocGFydGl0aW9uIDwgMCkgfHwgKHBhcnRpdGlvbiA+ PSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJjbG9jay1zd2VlcCBwYXJ0aXRpb24gJWQgb3V0IG9mIHJhbmdlIiwgcGFydGl0 aW9uKSwKKwkJCQkgZXJyaGludCgiVGhlcmUgYXJlICVkIGNsb2NrLXN3ZWVwIHBhcnRpdGlv bnMsIG51bWJlcmVkIGZyb20gMC4iLAorCQkJCQkJIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3Bh cnRpdGlvbnMpKSk7CisKKwlpZiAobndlaWdodHMgIT0gU3RyYXRlZ3lDb250cm9sLT5udW1f cGFydGl0aW9ucykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJudW1iZXIgb2Ygd2VpZ2h0 cyAoJWQpIGRvZXMgbm90IG1hdGNoIG51bWJlciBvZiBjbG9jay1zd2VlcCBwYXJ0aXRpb25z ICglZCkiLAorCQkJCQkJbndlaWdodHMsIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlv bnMpKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG53ZWlnaHRzOyBpKyspCisJeworCQlp ZiAoKHdlaWdodHNbaV0gPCAwKSB8fCAod2VpZ2h0c1tpXSA+IDEwMCkpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJIGVycm1zZygiY2xvY2stc3dlZXAgd2VpZ2h0ICVkIG91dCBvZiByYW5nZSIs CisJCQkJCQkJd2VpZ2h0c1tpXSksCisJCQkJCSBlcnJoaW50KCJFYWNoIHdlaWdodCBtdXN0 IGJlIGJldHdlZW4gMCBhbmQgMTAwLiIpKSk7CisJfQorCisJc3dlZXAgPSAmU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbcGFydGl0aW9uXTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAt PmNsb2NrX3N3ZWVwX2xvY2spOworCWZvciAoaW50IGogPSAwOyBqIDwgbndlaWdodHM7IGor KykKKwkJc3dlZXAtPmJhbGFuY2Vbal0gPSAodWludDgpIHdlaWdodHNbal07CisJU3Bpbkxv Y2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKaW5kZXggZGJlZjczNGE5M2YuLjAyNzg3MDYyYzgzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgogI2luY2x1 ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKKyNp bmNsdWRlIDxudW1hLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlnbG9iYWwgdmFy aWFibGVzCkBAIC0xMTAsNiArMTExLDkgQEAgaW50CQkJY2xpZW50X2Nvbm5lY3Rpb25fY2hl Y2tfaW50ZXJ2YWwgPSAwOwogLyogZmxhZ3MgZm9yIG5vbi1zeXN0ZW0gcmVsYXRpb24ga2lu ZHMgdG8gcmVzdHJpY3QgdXNlICovCiBpbnQJCQlyZXN0cmljdF9ub25zeXN0ZW1fcmVsYXRp b25fa2luZDsKIAorLyogTlVNQSBub2RlIHRvIHBpbiB0aGUgYmFja2VuZCB0byBhdCBxdWVy eSBzdGFydDsgLTEgZGlzYWJsZXMgcGlubmluZyAqLworaW50CQkJZGVidWdfbnVtYV9ub2Rl ID0gLTE7CisKIC8qCiAgKiBJbmNsdWRlIHNpZ25hbCBzZW5kZXIgUElEL1VJRCBpbiB0aGUg c2VydmVyIGxvZyB3aGVuIGF2YWlsYWJsZQogICogKFNBX1NJR0lORk8pLiBUaGUgY2FsbGVy IG11c3Qgc3VwcGx5IHRoZSBhbHJlYWR5LWNhcHR1cmVkIHBpZCBhbmQgdWlkCkBAIC0xMDIw LDYgKzEwMjQsNTMgQEAgcGdfcGxhbl9xdWVyaWVzKExpc3QgKnF1ZXJ5dHJlZXMsIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiB9CiAKIAorLyoKKyAq IHByb2Nlc3NfZGVidWdfbnVtYV9ub2RlCisgKgorICogSWYgdGhlIGRlYnVnX251bWFfbm9k ZSBHVUMgaXMgc2V0ICg+PSAwKSwgcGluIHRoaXMgYmFja2VuZCB0byBydW4gb24gdGhlCisg KiBDUFVzIG9mIHRoZSByZXF1ZXN0ZWQgTlVNQSBub2RlLiAgLTEgZGlzYWJsZXMgaXQgKGRl ZmF1bHQpCisgKi8KK3N0YXRpYyB2b2lkCitwcm9jZXNzX2RlYnVnX251bWFfbm9kZSh2b2lk KQoreworI2lmZGVmIFVTRV9MSUJOVU1BCisJc3RhdGljIGludAlhcHBsaWVkX251bWFfbm9k ZSA9IC0xOworCisJaWYgKGRlYnVnX251bWFfbm9kZSA9PSBhcHBsaWVkX251bWFfbm9kZSkK KwkJcmV0dXJuOworCisJLyogTm90aGluZyB3ZSBjYW4gZG8gaWYgdGhlIGtlcm5lbC9saWJy YXJ5IGhhcyBubyBOVU1BIHN1cHBvcnQuICovCisJaWYgKG51bWFfYXZhaWxhYmxlKCkgPCAw KQorCXsKKwkJYXBwbGllZF9udW1hX25vZGUgPSBkZWJ1Z19udW1hX25vZGU7CisJCXJldHVy bjsKKwl9CisKKwlpZiAoZGVidWdfbnVtYV9ub2RlIDwgMCkKKwl7CisJCS8qIFBpbm5pbmcg ZGlzYWJsZWQ6IGFsbG93IHJ1bm5pbmcgb24gYWxsIG5vZGVzIGFnYWluLiAqLworCQludW1h X3J1bl9vbl9ub2RlX21hc2sobnVtYV9hbGxfbm9kZXNfcHRyKTsKKwl9CisJZWxzZSBpZiAo ZGVidWdfbnVtYV9ub2RlID4gbnVtYV9tYXhfbm9kZSgpKQorCXsKKwkJZXJlcG9ydChXQVJO SU5HLAorCQkJCShlcnJtc2coImRlYnVnX251bWFfbm9kZSAlZCBleGNlZWRzIHRoZSBoaWdo ZXN0IGF2YWlsYWJsZSBOVU1BIG5vZGUgJWQsIGlnbm9yaW5nIiwKKwkJCQkJCWRlYnVnX251 bWFfbm9kZSwgbnVtYV9tYXhfbm9kZSgpKSkpOworCX0KKwllbHNlIGlmIChudW1hX3J1bl9v bl9ub2RlKGRlYnVnX251bWFfbm9kZSkgIT0gMCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywK KwkJCQkoZXJybXNnKCJjb3VsZCBub3QgcGluIGJhY2tlbmQgdG8gTlVNQSBub2RlICVkOiAl bSIsCisJCQkJCQlkZWJ1Z19udW1hX25vZGUpKSk7CisJfQorCWVsc2UKKwkJZWxvZyhERUJV RzEsICJwaW5uZWQgYmFja2VuZCB0byBOVU1BIG5vZGUgJWQiLCBkZWJ1Z19udW1hX25vZGUp OworCisJYXBwbGllZF9udW1hX25vZGUgPSBkZWJ1Z19udW1hX25vZGU7CisjZW5kaWYKK30K KworCiAvKgogICogZXhlY19zaW1wbGVfcXVlcnkKICAqCkBAIC0xMDQ0LDYgKzEwOTUsOSBA QCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAKIAlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIHF1ZXJ5X3N0cmluZyk7CiAKKwkv KiBQaW4gdGhlIGJhY2tlbmQgdG8gdGhlIGNvbmZpZ3VyZWQgTlVNQSBub2RlLCBpZiByZXF1 ZXN0ZWQuICovCisJcHJvY2Vzc19kZWJ1Z19udW1hX25vZGUoKTsKKwogCVRSQUNFX1BPU1RH UkVTUUxfUVVFUllfU1RBUlQocXVlcnlfc3RyaW5nKTsKIAogCS8qCkBAIC0yMTg1LDYgKzIy MzksOSBAQCBleGVjX2V4ZWN1dGVfbWVzc2FnZShjb25zdCBjaGFyICpwb3J0YWxfbmFtZSwg bG9uZyBtYXhfcm93cykKIAogCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklO Rywgc291cmNlVGV4dCk7CiAKKwkvKiBQaW4gdGhlIGJhY2tlbmQgdG8gdGhlIGNvbmZpZ3Vy ZWQgTlVNQSBub2RlLCBpZiByZXF1ZXN0ZWQuICovCisJcHJvY2Vzc19kZWJ1Z19udW1hX25v ZGUoKTsKKwogCWZvcmVhY2gobGMsIHBvcnRhbC0+c3RtdHMpCiAJewogCQlQbGFubmVkU3Rt dCAqc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYyk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDJlNzFjMDQyODJjLi5iNzJm Y2U0YjkyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQKQEAgLTY0MSw2ICs2NDEsMjcgQEAKICAgYm9vdF92YWwgPT4gJ0RFRkFVTFRfQVNTRVJU X0VOQUJMRUQnLAogfSwKIAoreyBuYW1lID0+ICdkZWJ1Z19jbG9ja3N3ZWVwX2JhbGFuY2Un LCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAn REVWRUxPUEVSX09QVElPTlMnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIGJhbGFuY2lu ZyBvZiBidWZmZXIgYWxsb2NhdGlvbnMgYmV0d2VlbiBjbG9jay1zd2VlcCBwYXJ0aXRpb25z LicsCisgIGZsYWdzID0+ICdHVUNfTk9UX0lOX1NBTVBMRScsCisgIHZhcmlhYmxlID0+ICdj bG9ja3N3ZWVwX2JhbGFuY2UnLAorICBib290X3ZhbCA9PiAndHJ1ZScKK30sCisKK3sgbmFt ZSA9PiAnZGVidWdfY2xvY2tzd2VlcF9iYWxhbmNlX3JlY2FsYycsIHR5cGUgPT4gJ2Jvb2wn LCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9O UycsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcGVyaW9kaWMgcmVjYWxjdWxhdGlvbiBv ZiBjbG9jay1zd2VlcCBwYXJ0aXRpb24gYmFsYW5jZSB3ZWlnaHRzLicsCisgIGZsYWdzID0+ ICdHVUNfTk9UX0lOX1NBTVBMRScsCisgIHZhcmlhYmxlID0+ICdjbG9ja3N3ZWVwX2JhbGFu Y2VfcmVjYWxjJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnCit9LAorCit7IG5hbWUgPT4gJ2Rl YnVnX2Nsb2Nrc3dlZXBfc2Nhbl9hbGxfcGFydGl0aW9ucycsIHR5cGUgPT4gJ2Jvb2wnLCBj b250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycs CisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgc2Nhbm5pbmcgYWxsIGNsb2NrLXN3ZWVwIHBh cnRpdGlvbnMgd2hlbiBsb29raW5nIGZvciBhIGZyZWUgYnVmZmVyLicsCisgIGZsYWdzID0+ ICdHVUNfTk9UX0lOX1NBTVBMRScsCisgIHZhcmlhYmxlID0+ICdjbG9ja3N3ZWVwX3NjYW5f YWxsX3BhcnRpdGlvbnMnLAorICBib290X3ZhbCA9PiAndHJ1ZScKK30sCisKIHsgbmFtZSA9 PiAnZGVidWdfY29weV9wYXJzZV9wbGFuX3RyZWVzJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRl eHQgPT4gJ1BHQ19TVVNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCiAgIHNo b3J0X2Rlc2MgPT4gJ1NldCB0aGlzIHRvIGZvcmNlIGFsbCBwYXJzZSBhbmQgcGxhbiB0cmVl cyB0byBiZSBwYXNzZWQgdGhyb3VnaCBjb3B5T2JqZWN0KCksIHRvIGZhY2lsaXRhdGUgY2F0 Y2hpbmcgZXJyb3JzIGFuZCBvbWlzc2lvbnMgaW4gY29weU9iamVjdCgpLicsCiAgIGZsYWdz ID0+ICdHVUNfTk9UX0lOX1NBTVBMRScsCkBAIC02OTMsNiArNzE0LDE2IEBACiAgIG9wdGlv bnMgPT4gJ2RlYnVnX2xvZ2ljYWxfcmVwbGljYXRpb25fc3RyZWFtaW5nX29wdGlvbnMnLAog fSwKIAoreyBuYW1lID0+ICdkZWJ1Z19udW1hX25vZGUnLCB0eXBlID0+ICdpbnQnLCBjb250 ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdERVZFTE9QRVJfT1BUSU9OUycsCisg IHNob3J0X2Rlc2MgPT4gJ1BpbnMgdGhlIGJhY2tlbmQgdG8gdGhlIGdpdmVuIE5VTUEgbm9k ZSBhdCBxdWVyeSBzdGFydC4nLAorICBsb25nX2Rlc2MgPT4gJy0xICh0aGUgZGVmYXVsdCkg ZGlzYWJsZXMgcGlubmluZy4nLAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAor ICB2YXJpYWJsZSA9PiAnZGVidWdfbnVtYV9ub2RlJywKKyAgYm9vdF92YWwgPT4gJy0xJywK KyAgbWluID0+ICctMScsCisgIG1heCA9PiAnSU5UX01BWCcsCit9LAorCiB7IG5hbWUgPT4g J2RlYnVnX3BhcmFsbGVsX3F1ZXJ5JywgdHlwZSA9PiAnZW51bScsIGNvbnRleHQgPT4gJ1BH Q19VU0VSU0VUJywgZ3JvdXAgPT4gJ0RFVkVMT1BFUl9PUFRJT05TJywKICAgc2hvcnRfZGVz YyA9PiAnRm9yY2VzIHRoZSBwbGFubmVyXCdzIHVzZSBwYXJhbGxlbCBxdWVyeSBub2Rlcy4n LAogICBsb25nX2Rlc2MgPT4gJ1RoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGUg cGFyYWxsZWwgcXVlcnkgaW5mcmFzdHJ1Y3R1cmUgYnkgZm9yY2luZyB0aGUgcGxhbm5lciB0 byBnZW5lcmF0ZSBwbGFucyB0aGF0IGNvbnRhaW4gbm9kZXMgdGhhdCBwZXJmb3JtIHR1cGxl IGNvbW11bmljYXRpb24gYmV0d2VlbiB3b3JrZXJzIGFuZCB0aGUgbWFpbiBwcm9jZXNzLics CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21p c2NhZG1pbi5oCmluZGV4IGJmMzhhYTZiYWEyLi45NTkwZjdhYzQ2NyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK QEAgLTIxNSw2ICsyMTUsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBNeURhdGFiYXNl SGFzTG9naW5FdmVudFRyaWdnZXJzOwogCiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBzaG1l bV9wb3B1bGF0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIHNobWVtX2ludGVybGVhdmU7 CitleHRlcm4gUEdETExJTVBPUlQgaW50IGRlYnVnX251bWFfbm9kZTsKIAogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmbWdyLmgKaW5kZXggMDI4MzNiMTliMGMuLmI1YzM4NzNhY2FlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmbWdyLmgKQEAgLTE5MCw2ICsxOTAsMTEgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IGludCBiZ3dyaXRlcl9scnVfbWF4cGFnZXM7CiBleHRlcm4gUEdETExJTVBPUlQgZG91Ymxl IGJnd3JpdGVyX2xydV9tdWx0aXBsaWVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgdHJh Y2tfaW9fdGltaW5nOwogCisvKiBpbiBmcmVlbGlzdC5jICovCitleHRlcm4gUEdETExJTVBP UlQgYm9vbCBjbG9ja3N3ZWVwX2JhbGFuY2U7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBj bG9ja3N3ZWVwX2JhbGFuY2VfcmVjYWxjOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgY2xv Y2tzd2VlcF9zY2FuX2FsbF9wYXJ0aXRpb25zOworCiAjZGVmaW5lIERFRkFVTFRfRUZGRUNU SVZFX0lPX0NPTkNVUlJFTkNZIDE2CiAjZGVmaW5lIERFRkFVTFRfTUFJTlRFTkFOQ0VfSU9f Q09OQ1VSUkVOQ1kgMTYKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgZWZmZWN0aXZlX2lvX2Nv bmN1cnJlbmN5OwpAQCAtNDE4LDYgKzQyMyw3IEBAIGV4dGVybiB2b2lkIENsb2NrU3dlZXBQ YXJ0aXRpb25HZXRJbmZvKGludCBpZHgsCiAJCQkJCQkJCQkgdWludDY0ICpidWZmZXJfdG90 YWxfcmVxX2FsbG9jcywKIAkJCQkJCQkJCSB1aW50MzIgKmJ1ZmZlcl9yZXFfYWxsb2NzLAog CQkJCQkJCQkJIGludCAqKndlaWdodHMpOworZXh0ZXJuIHZvaWQgQ2xvY2tTd2VlcFNldFdl aWdodHMoaW50IHBhcnRpdGlvbiwgaW50ICp3ZWlnaHRzLCBpbnQgbndlaWdodHMpOwogCiAv KiBpbmxpbmUgZnVuY3Rpb25zICovCiAKLS0gCjIuNTQuMAoK --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: application/x-compressed-tar; name="numa-scripts.tgz" Content-Disposition: attachment; filename="numa-scripts.tgz" Content-Transfer-Encoding: base64 H4sIAAAAAAAAA+1XbW8iNxDO1/hXTKkpkMosu7yVRkTKlaoXKderEvKhqqrVvnhhm31jbS5R m/73jr0suXAQaNRcW2kfRfGsx35mbM8Mdr5M2mJ+9KroIIaDnmrNYb/zcavQNzu9I7NvmYN+ X/0ddUzTGppH0HldtwoshXRygCOZxo54Ztw+/f8UX35hLEVuuGFi8OQDuI6YEyK4BMYJeXNz cTmZXFyNa8Y8jbmh98Bwl2HkCybjLBA1MjmfnqshRpxI4843kmXsMMmFFMwyfEc65Kfz6Vv7 /eVkTJVEyG0YRU4UAVsAG0GWCjnLuYCHB5D5kpM8BnYVgJ5Krr87v/x+bGGUIM3V9GJ68f7H 67GJn5Obq3P1NR50yNUNdvYJ4fdZmktQZsa0dN5AnyXXS/yWlr4QMr0e0yYa4fB1/ed6XPdZ /W39Xf26RUh864c50Ok1IdnM9iS6OtH+QJiEEs6UylBiO0pnYJ19ZaJpb55CQ8ydnPu2uwwC ngsYgzn44U0Dzs70dKNc6yJqe2kSrCaFqR1zOU99HI/yMg+T2b45sXNvZ06O28gjO3bCRPLE STxu36X5bWG687c4VvPsjOf2zJFznh9CMV/OOHLMuDKYJodYvHMiW4S/872bQ7xsqwLaxifn wiLIZvo0VDZLxbnljLyc43n7Lqjw3DEmm7k88ebAQmACqI4/YAz3SYYyTBOhorgMxOeJdnqY ZjvmkCDNIccoA9oUfAEmUBXarVPwU0KO13Fp0Bw/1WBXDS4CHHTmqdq6lqy11F1LvbXUX0uD tTRcmTrenkrU3UyjY+3GQrnhpctEQhoEWD5KGq31lNaEb6Brrfu1QllVOpyD0fOoOw4D+AVq 1K3BeAy1Yn01+FXViI/61wverbJQdQoYzklBXDIrfTEyTTaHHGOUyTDBUlR8BiEp20LAwNyM SR2oT51/zoROh9rTamHr3VBpVNuZE0/9OCwJaL4ZZsVkJC3il3noCo+4J+EEgjyNkcbGM8Q9 mIkarFnKLkZdRheMekyv8RPiMoMSYO8gy3mmVgksALpoK6NsCrSs3spptE89YL9hiDCGZAzn BOH9eGVW9Ty1uEq70q+Vwb1uHZCPO/ZKZpj2TTyIDBoo4yE1DjD+AM7dLTT+yLCgS6DdPxut MoAcCTtX1z7ZMhO7hMpH3NSzZ6aqMdxfWUnQ5ztPrXTfhE2D5qOrMfdDRzE97/OaZ84dX3lJ m83EsFot7JJOGKkus+TMPGn1X0jZ26QsGYcvZDzp7uYcvZRz1DfwjrKTdvRS2tE2WvJYUij+ PLiYZyqhilShKl5pcYpA9c7rZlg0o1UzKjMAi80ykqLtiQ8FsZ8mXEulsGqLRv//t++wFV4O /aOtyvIr2lCPvMHu91/H7JfvP6vXxYcfvv+Gg2H1/vscUE+9Ax4Cp/pNiG8MN+J2mPj8XnhY UMbq6qZ0+vagY6lptspLhP5ltB1P94vTqk78B1Fc11+3AOzNf0z2x/zHcaZldntV/n8O/JP5 f7I98VdPQjDL8+5UpaBChQoVKlSoUKFChQoVKlSoUKFChc+CvwCjWBp7ACgAAA== --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: application/pdf; name="numa- median latency.pdf" Content-Disposition: attachment; filename="numa- median latency.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjQKJSDi48/TCjMKMApvYmoKPDwKL1R5cGUKL0NhdGFsb2cKL05hbWVzCjw8Cj4+ Ci9QYWdlTGFiZWxzCjw8Ci9OdW1zClsKMAo8PAovUwovRAovU3QKMQo+PgpdCj4+Ci9PdXRs aW5lcwoyCjAKUgovUGFnZXMKMQowClIKPj4KZW5kb2JqCjQKMApvYmoKPDwKL0NyZWF0b3IK KP7/AEcAbwBvAGcAbABlACAAUwBoAGUAZQB0AHMpCi9UaXRsZQoo/v8AVQBuAHQAaQB0AGwA ZQBkACAAcwBwAHIAZQBhAGQAcwBoAGUAZQB0KQo+PgplbmRvYmoKNQowCm9iago8PAovVHlw ZQovUGFnZQovUGFyZW50CjEKMApSCi9NZWRpYUJveApbCjAKMAo3OTIKNjEyCl0KL0NvbnRl bnRzCjYKMApSCi9SZXNvdXJjZXMKNwowClIKL0Fubm90cwo5CjAKUgovR3JvdXAKPDwKL1MK L1RyYW5zcGFyZW5jeQovQ1MKL0RldmljZVJHQgo+Pgo+PgplbmRvYmoKNgowCm9iago8PAov RmlsdGVyCi9GbGF0ZURlY29kZQovTGVuZ3RoCjgKMApSCj4+CnN0cmVhbQp4nL1cTY8ctxFt IJdgTgFWszv7cQ7igzZNskk2r4Esy04CR8paDmD5FMMxDNmBjQD5++FHFVnVS/bMsmejxWr7 zdS+x4/i6yJ7pF924n7cha+X6cII6X/+86fdL7vx3ur4Vr7wL4/3ZnazHBW+xaAPQL7w09n7 SRhjpp0Yp3vlWRYB8Dsvg2b8y7+t1IzoIyIlTITxVQYg7ofd17ufIyV+//qvoDG7SCpN+JnQ R0BK6IjoFUb8sPved222kx7dHK7cJIQ1vpP3TurJjTLwxyGLf8VmW0QfEcmE4ov0GqKeoCLH 1I9RIvgIwKjCS68hKGnoUTgzBg1tzWRHE+YUXvMSciQa2PaR9gSYUyADTMdpMxtpYw+Cjnbh yobO5K4YSbpiJOkKjn4MY8DILLKYY2iRpE03kjY9z/ooHiHC69vph8POkypNDr0I/Zl0lDJz JJijltIFfQQkBcyMeYwwErWkCGO1GDMtfQrEWVfaErFpsoQiIaRPkRxxMZs6NgUFked/1vMs lZ6C2jQZoqaVIRwJIX+K5GjRNRy7OaSwcDZchlyYZxW0tNJEy0hNGBJC9hTJ0UJrjJ2Iw1gm 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 Phqznp6J2enxmcbZm5SCNVlhPuOaFFKernPdryOFOF3nYoOOc0cm+9A7JXmLKydzxi0uMbAq 7yaTKQbW5O42x2JgTe7eQlHPNs3i2VudDazJ3FsLWSvRDKrc/fVbNrCzj0auss6eecTAKtxn NJZiYCfoHLYY2HhkqLqNJXvW2anj1tPYZ30eXOffvPmss27ZfAqD67PK3b8+iROevdWklGu0 ujc3yH6zwXyz3QkbzL1FItlvnrnNpJQ7M3PZbzaSY99PXcyvwr00v8tzVG8n6PQfgZCd6Ak6 G8y8mNdc+3j25p1olXXLToOYV5X7LOZ19lYT82q0evM+tNnm3sIl70PPPhq5jDs7cy7jzs5c zKtBve++s5XDsgb1ZXcpXoq15oD0U2Ox1qTuvbmVDaYaa5+X3r7BrPOe50S/zd27xosztbl7 V3lxpjr3dmdqt7m3YENnajNvdaY2c+9yQWdqM/duXbMztagv+/eu6EzPQJ0rqRr3Gc/1ciV1 ig6rDN/6r/8B04pe4QplbmRzdHJlYW0KZW5kb2JqCjgKMApvYmoKMzU4NwplbmRvYmoKOQow Cm9iagpbCl0KZW5kb2JqCjcKMApvYmoKPDwKL0ZvbnQKPDwKL0ZvbnQwCjEwCjAKUgovRm9u dDEKMTEKMApSCj4+Ci9QYXR0ZXJuCjw8Cj4+Ci9YT2JqZWN0Cjw8Cj4+Ci9FeHRHU3RhdGUK PDwKPj4KL1Byb2NTZXQKWwovUERGCi9UZXh0Ci9JbWFnZUIKL0ltYWdlQwovSW1hZ2VJCl0K Pj4KZW5kb2JqCjEwCjAKb2JqCjw8Ci9UeXBlCi9Gb250Ci9TdWJ0eXBlCi9UeXBlMAovQmFz ZUZvbnQKL01VRlVaWStBcmlhbC1JdGFsaWNNVAovRW5jb2RpbmcKL0lkZW50aXR5LUgKL0Rl c2NlbmRhbnRGb250cwpbCjEyCjAKUgpdCi9Ub1VuaWNvZGUKMTMKMApSCj4+CmVuZG9iagox MQowCm9iago8PAovVHlwZQovRm9udAovU3VidHlwZQovVHlwZTAKL0Jhc2VGb250Ci9NVUZV WlkrQXJpYWxNVAovRW5jb2RpbmcKL0lkZW50aXR5LUgKL0Rlc2NlbmRhbnRGb250cwpbCjE2 CjAKUgpdCi9Ub1VuaWNvZGUKMTcKMApSCj4+CmVuZG9iagoxMwowCm9iago8PAovRmlsdGVy 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 sTRGOYj9Pl5uHycoZzpNRbwcFZlOG+UkFiznMcpB7ILlYt3kMcp5Yt2XlWvHHublMjhBubgP qJ1Rrl3cB83K7T/sKS3Z7/GE2zpslDkcbMtfaBRxuVAk2WUUwVZxGUVcTDCKlF0qkhUq0qmp SCejJ5FdKuMKlrG5w2VsvCfvf/WZ2MfrLZ3KZWVw5X4T9akqHhOksdqsXsa62xJ6bU88TK/y X6B7q/wWTx+/1dOHiorijf+yR4nwK0hSAV66Z3L80sTDErFdRukIJNtCWVm9s3rzLEgvz7Lz /5IxlBW/tGdy4mG2K5SlITkSfTQb57x58/Gh+NKpJU1/5oY+80N0HpX7M4aV+4uGjKrcr6ql fl9NSRXSOofTrNbSBv1oMLETEgt5oig2FWxKM5tDBcGNRwdlskEulo8hVHnnYijoqDkH5801 ntig/x8FIh2ACmVuZHN0cmVhbQplbmRvYmoKMTIKMApvYmoKPDwKL1R5cGUKL0ZvbnQKL1N1 YnR5cGUKL0NJREZvbnRUeXBlMgovQmFzZUZvbnQKL01VRlVaWStBcmlhbC1JdGFsaWNNVAov Q0lEU3lzdGVtSW5mbwo8PAovUmVnaXN0cnkKKEFkb2JlKQovT3JkZXJpbmcKKFVDUykKL1N1 cHBsZW1lbnQKMAo+PgovRm9udERlc2NyaXB0b3IKMTQKMApSCi9DSURUb0dJRE1hcAovSWRl bnRpdHkKL0RXCjU1NgovVwpbCjAKWwo3NTAKMAowCjI3NwpdCjQKMTkKMAoyMApbCjU1Ngpd CjIxCjM3CjAKMzgKWwo3MjIKMAowCjYxMApdCjQyCjY3CjAKNjgKNjkKNTU2CjcwClsKNTAw CjU1Ngo1NTYKMAowCjU1NgoyMjIKMAowCjIyMgo4MzMKNTU2CjAKMAo1NTYKMzMzCjUwMAoy NzcKNTU2Cl0KODkKOTEKMAo5MgpbCjUwMApdCl0KPj4KZW5kb2JqCjE0CjAKb2JqCjw8Ci9U eXBlCi9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUKL01VRlVaWStBcmlhbC1JdGFsaWNNVAov RmxhZ3MKNjgKL0ZvbnRCQm94ClsKLTUxNwotMzI0CjEzNTgKOTk3Cl0KL0FzY2VudAo3MjgK L0Rlc2NlbnQKLTIwNwovSXRhbGljQW5nbGUKLTEyLjAKL0NhcEhlaWdodAo3MTUKL1N0ZW1W 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 RCJFRDpHYqRTAh0jNsj2gw27sakLazXSuhrJ1tVINqkRoUSz6w6YmXkfvxziWqG4Xijeomvi dc5EBHWNk4HT5eTORnZ7IlDsFwrGLxSMXygYf11SYlIjvzyRkScy80RmnsjMq8vQF+KRjEQG z1jX7XndtgmDJjY0TrbYtxbv2VNaLQaRPCpN1wi7Vr1gPsyv+kmnSNvqi8V66Lt4uvMMmJKW 3krntFZAbOa82Z8cOPjFrDkr1jafeuut5lO3X7Z81vRlq6ZdvrLPBetGL9365I1LHpUyO947 c9Pb72+adk/HTs+u3J8Cxg7e9ns2ZvrNN02asuLm06mh64Y/Un/jtq36fhxJdjbaw017wYmi EqXhyPCrT2EBxTOqSroYuJwWUfa6hA9O8SwKZQjZ7CCeUdVMCpcsp0W4vS59s2/XmQxqzOvS DOhnrTYdnrKG0TnJd6Nrckrwt1+1tCJwIlFADO53Cw53i80Vt9/dKW4tyHY6wo7hDsnhSIcR jImFpN3lVsYy8o9yaQ1Ok/dsvLpYWIliMX/I/CSNLrK0f3uuZSOiVSfOeHyJQuHyuYVQ/0yr Z7fVpqmi1g0lSvoEL/Imopd4L45Ok2Z75wQvj14bvD57TfCW7PXex4L7g194P4mciqSd793g fdIr9elYq/AO5C1GUbb8ORElUpA93DGJXMMQNcleG6Ga7V3UibAuY2FdfML6Lk94HysFq5Zt pWGmbKuebSVr7T7bTVzXiTyAhA9dAMEO+UKO8k2q4Xe3yJE74ebudfGz5AgttSZDmgS1OIm6 pYbq+ay66kcuYYtX2Jf3KOlAVhopoPh43GK7MMaEkKg74fOe9C6ePPr6ET1Zz6fn7DnNjIdu O37dtf/Y8sTb/MWHFy5qeGzx9ZvZaNe1V1y05K/zbP5xs5jpr+8z1/rmj5q/af60eedvDkgl 9+959oE1aKpRSi5MfSaH5L5QAL341kQns91cGLAHCzvaCwtL7T0zemX2KbygsNpeXTjTPqOw putq+/KO6733Bx+zZxSofC48r8/U7eJHAtsK9gSeLng2cKTgzxl/KzBVeBnpQDKdyliPh54G obl7kN4cTqGwL+yPdyosKZVLO10gD+40zlQVn2aaEb/KtgJXpN/Zv4u7e5U4mOwqyivxFeek +yd1nNuRdwwVOcodtzk2OlIOw0bHdsfXyJqNuIi2qp4rsbKDeJoMl4O6kEN7eQ4hTg6FxM0R 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 K4qEQlgkOySKsCCERJEQC4oi484UKdKKrGopskq0JLEzZUJqGftRvYz9KJaJ/7s/U/vH42zn eVVTJlZOjVbWRCunImqSt1w13Z+svywS2TGlijIiSSlWc9mU6UQnT01WRadWJKdEKyI7zpv4 E9kTKfu8aMUOmFg5ZvyOiYmpFQ3nJc6rjE6uqNo5aERJr7PaWtXSVsmIn3jZCHpZCbU1qNdP ZPei7EHUVi9qqxe1NSgxSLQFgsdHjN9hgv5VAyaqdCe3WpBfazJzqvp7XfP6CuY9L8d/Q+Y+ 9Fa2gjVelbRF+yftCMrq3K9zP8pCmaIsByY7tSz/DeflZO5jW7UsFya7o/0hvvDKuivBXzmj Qv2vDn8waeGVNODqM173cz+YV5lMTK6oWwgwJFk4ekiyfOSE8TuMRkytoU9K9tHTrNbKxtRB NbELJvahRElqKUhpZZRmNmsFfzz/V2p0AElBPX96J0tks4VQVyUls4eM4agKxkzAb504Yfw+ 9KXIPNRV4QfWsTir09+hdTse1/7paaBv1rHwSi2kjcVCjao1sUqdPiQtPzRY8ZYRW4gvhP8P RDh57gplbmRzdHJlYW0KZW5kb2JqCjE2CjAKb2JqCjw8Ci9UeXBlCi9Gb250Ci9TdWJ0eXBl Ci9DSURGb250VHlwZTIKL0Jhc2VGb250Ci9NVUZVWlkrQXJpYWxNVAovQ0lEU3lzdGVtSW5m bwo8PAovUmVnaXN0cnkKKEFkb2JlKQovT3JkZXJpbmcKKFVDUykKL1N1cHBsZW1lbnQKMAo+ PgovRm9udERlc2NyaXB0b3IKMTgKMApSCi9DSURUb0dJRE1hcAovSWRlbnRpdHkKL0RXCjU1 NgovVwpbCjAKWwo3NTAKXQoxCjcKMAo4ClsKODg5Cl0KOQoxNQowCjE2ClsKMzMzCjAKMApd CjE5CjI4CjU1NgoyOQo2NwowCjY4ClsKNTU2CjAKNTAwCjAKNTU2CjI3NwpdCjc0Cjc5CjAK ODAKWwo4MzMKNTU2CjU1NgowCjAKMzMzCjUwMAoyNzcKNTU2Cl0KXQo+PgplbmRvYmoKMTgK MApvYmoKPDwKL1R5cGUKL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZQovTVVGVVpZK0FyaWFs TVQKL0ZsYWdzCjQKL0ZvbnRCQm94ClsKLTY2NAotMzI0CjIwMDAKMTAwNQpdCi9Bc2NlbnQK NzI4Ci9EZXNjZW50Ci0yMTAKL0l0YWxpY0FuZ2xlCjAKL0NhcEhlaWdodAo3MTYKL1N0ZW1W CjgwCi9Gb250RmlsZTIKMTkKMApSCj4+CmVuZG9iagoyMAowCm9iagozMDAKZW5kb2JqCjIx CjAKb2JqCjEyNzcwCmVuZG9iagoyMgowCm9iagoyOTgKZW5kb2JqCjIzCjAKb2JqCjE4MzMy CmVuZG9iagoxCjAKb2JqCjw8Ci9UeXBlCi9QYWdlcwovS2lkcwpbCjUKMApSCl0KL0NvdW50 CjEKPj4KZW5kb2JqCnhyZWYKMCAyNAowMDAwMDAwMDAyIDY1NTM1IGYgCjAwMDAwMzc4MDgg MDAwMDAgbiAKMDAwMDAwMDAwMCAwMDAwMCBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAw MDAxNDIgMDAwMDAgbiAKMDAwMDAwMDI1NSAwMDAwMCBuIAowMDAwMDAwNDIwIDAwMDAwIG4g CjAwMDAwMDQxMjAgMDAwMDAgbiAKMDAwMDAwNDA4MSAwMDAwMCBuIAowMDAwMDA0MTAxIDAw MDAwIG4gCjAwMDAwMDQyNzYgMDAwMDAgbiAKMDAwMDAwNDQyNyAwMDAwMCBuIAowMDAwMDE3 NzkzIDAwMDAwIG4gCjAwMDAwMDQ1NzEgMDAwMDAgbiAKMDAwMDAxODE4NCAwMDAwMCBuIAow MDAwMDA0OTQ3IDAwMDAwIG4gCjAwMDAwMzcxNzQgMDAwMDAgbiAKMDAwMDAxODM5MiAwMDAw MCBuIAowMDAwMDM3NTI3IDAwMDAwIG4gCjAwMDAwMTg3NjYgMDAwMDAgbiAKMDAwMDAzNzcy NCAwMDAwMCBuIAowMDAwMDM3NzQ0IDAwMDAwIG4gCjAwMDAwMzc3NjYgMDAwMDAgbiAKMDAw MDAzNzc4NiAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9TaXplCjI0Ci9Sb290CjMKMApSCi9JbmZv CjQKMApSCj4+CnN0YXJ0eHJlZgozNzg2NwolJUVPRgo= --------------xDGiXotXhDZtLw3h0Nc02iS7 Content-Type: application/pdf; name="numa - tps.pdf" Content-Disposition: attachment; filename="numa - tps.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjQKJSDi48/TCjMKMApvYmoKPDwKL1R5cGUKL0NhdGFsb2cKL05hbWVzCjw8Cj4+ Ci9QYWdlTGFiZWxzCjw8Ci9OdW1zClsKMAo8PAovUwovRAovU3QKMQo+PgpdCj4+Ci9PdXRs aW5lcwoyCjAKUgovUGFnZXMKMQowClIKPj4KZW5kb2JqCjQKMApvYmoKPDwKL0NyZWF0b3IK KP7/AEcAbwBvAGcAbABlACAAUwBoAGUAZQB0AHMpCi9UaXRsZQoo/v8AVQBuAHQAaQB0AGwA ZQBkACAAcwBwAHIAZQBhAGQAcwBoAGUAZQB0KQo+PgplbmRvYmoKNQowCm9iago8PAovVHlw ZQovUGFnZQovUGFyZW50CjEKMApSCi9NZWRpYUJveApbCjAKMAo3OTIKNjEyCl0KL0NvbnRl bnRzCjYKMApSCi9SZXNvdXJjZXMKNwowClIKL0Fubm90cwo5CjAKUgovR3JvdXAKPDwKL1MK L1RyYW5zcGFyZW5jeQovQ1MKL0RldmljZVJHQgo+Pgo+PgplbmRvYmoKNgowCm9iago8PAov RmlsdGVyCi9GbGF0ZURlY29kZQovTGVuZ3RoCjgKMApSCj4+CnN0cmVhbQp4nM1bXW8dtxFd oC/FfWphyZJsP+bBLmCFH7vk7mOLJE3SFq0T1Sng5KFokASBkjZpgf798mOGnNksqevZe4Na iL1HGp3DHQ4Ph7s3Pxz0rTrEr5f5wmkT/v3Hd4cfDurWT+lH5SJ8W926ZfZaawc/YjAEIF/8 d3G32ns1u4NW9laNbg5Eqxj4tZdRNv0VfmyNRnSPyGqXYPouAxD3zeGzw/eJEv/78euoMS+J 1MzzLaJ7QFZPCdErjPjm8FW4u9mPk1rmeLWMWnsXEnG7mGlclIn8KWvprzRshegekckofZNe Q9RbqCS6cB/KILgH4GzlpdcQlDUmpRenosbk3eiVi9MK3wsSRhENHLuidwLMOZABprNMbnbG pzuIOtMSr3y8mXIrzpBbcYbcCmY/hTHgTBFZzTGMyNChO0OHXmZd6Z8gwhuK2S5GTz5OREy+ XuKlT1cuSc0+EcxJy/qxoHtARsPMpEiOMBISNc/GTjZe1Tm3JVHWWyI1OkUIMkLyHMlRU4rM zmSCcKqvcVqI1jQ6wpARsudIjt7qtqZxIlLOGkKQEZLnSI7WUqPV1ieB9GdMyybp+ijmrCZi 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 7J17YMzSOZwn8wDz5f7O6MTZqH7UIBav7uJHm8Q7jK74UWPE0oag+tGJidPpz/mzvq3d5hee /2rPtckq78OJy22Pd4/LqflBbun6Kz7XZJb3XeoBZmk+is+dfMyk72rUh7jvqj7XYBYv7uJz m8RPxM1+9bkG8X6f2yTecVArPtcgFvdd1Y3mrY9N7z4BbrLKq42cAE/MTDquUzOjE23ynugE 2Biz+FkUOlFzzFKPKx3XyZmJE514BqsTbS8S+bouTrRJfAonaqRivxOdmricAK3a+pjy/hPg Nu+eiqtutM29wzNKZ3T6UaMftZmlPVf1o1Y+pFs2+tHpx4x+1GaWujM+kTr9DBY/2qZ+uv8E uE38ZMdBDfyoVRjiVKAftVJBVuCr8PU/ZBeVXwplbmRzdHJlYW0KZW5kb2JqCjgKMApvYmoK MzQ5NAplbmRvYmoKOQowCm9iagpbCl0KZW5kb2JqCjEwCjAKb2JqCjw8Ci9DQQoxLjAKL2Nh CjEuMAo+PgplbmRvYmoKNwowCm9iago8PAovRm9udAo8PAovRm9udDEKMTEKMApSCi9Gb250 MgoxMgowClIKPj4KL1BhdHRlcm4KPDwKPj4KL1hPYmplY3QKPDwKPj4KL0V4dEdTdGF0ZQo8 PAovQWxwaGEwCjEwCjAKUgo+PgovUHJvY1NldApbCi9QREYKL1RleHQKL0ltYWdlQgovSW1h Z2VDCi9JbWFnZUkKXQo+PgplbmRvYmoKMTEKMApvYmoKPDwKL1R5cGUKL0ZvbnQKL1N1YnR5 cGUKL1R5cGUwCi9CYXNlRm9udAovTVVGVVpZK0FyaWFsLUl0YWxpY01UCi9FbmNvZGluZwov SWRlbnRpdHktSAovRGVzY2VuZGFudEZvbnRzClsKMTMKMApSCl0KL1RvVW5pY29kZQoxNAow ClIKPj4KZW5kb2JqCjEyCjAKb2JqCjw8Ci9UeXBlCi9Gb250Ci9TdWJ0eXBlCi9UeXBlMAov QmFzZUZvbnQKL01VRlVaWStBcmlhbE1UCi9FbmNvZGluZwovSWRlbnRpdHktSAovRGVzY2Vu ZGFudEZvbnRzClsKMTcKMApSCl0KL1RvVW5pY29kZQoxOAowClIKPj4KZW5kb2JqCjE0CjAK b2JqCjw8Ci9GaWx0ZXIKL0ZsYXRlRGVjb2RlCi9MZW5ndGgKMjEKMApSCj4+CnN0cmVhbQp4 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 6qp97GFB6uv2SQXskerholwqqKqvr8HSGO0g9o+Ido8Ignbm16lStKNK8+tGO5lF2vmNdhC7 SLsUL/mNdv4U71ntMtnDol2+IGjnep8yjXaZrvdbtdux319dtcPvjz1rv9Fmf+RZoQqjiceD Jj6P0QRbxWM08TBuNOl3pklhtEnnliadjZ4kdqaNJ9ImwRtrkyB6Cvyhn0l9AoHqaUJWhtbt MFOf+r5jIjRFm9XLWPeE1F5b0vfTy+Ib6IH6UJy/T8jq70OVlW7jTz+Z4kMmFKmAaN3T516a vl8mts1oHY/ihGhVYe/C3qIK0iuqbOJP0kar3Et7+tL3s23RKg3FDvTRapzz5s3HD7mrp1W1 /M6N/syP0nlUE8ofUROqHDa6boeqVoeCjVX1KOsSK7Naq5v0Q5HCziisEIWS1NKwpcxiiTYE Nx4bUsCGeFgZhlAfmIuhoKPWHJw317hig/4feMOEagplbmRzdHJlYW0KZW5kb2JqCjEzCjAK b2JqCjw8Ci9UeXBlCi9Gb250Ci9TdWJ0eXBlCi9DSURGb250VHlwZTIKL0Jhc2VGb250Ci9N VUZVWlkrQXJpYWwtSXRhbGljTVQKL0NJRFN5c3RlbUluZm8KPDwKL1JlZ2lzdHJ5CihBZG9i ZSkKL09yZGVyaW5nCihVQ1MpCi9TdXBwbGVtZW50CjAKPj4KL0ZvbnREZXNjcmlwdG9yCjE1 CjAKUgovQ0lEVG9HSURNYXAKL0lkZW50aXR5Ci9EVwo1NTYKL1cKWwowClsKNzUwCjAKMAoy NzcKXQo0CjM1CjAKMzYKWwo2NjYKXQozNwozOQowCjQwClsKNjY2CjAKNzc3Cl0KNDMKNTIK MAo1MwpbCjcyMgpdCjU0CjU2CjAKNTcKWwo2NjYKXQo1OAo2NwowCjY4CjY5CjU1Ngo3MApb CjUwMAowCjU1NgoyNzcKMAo1NTYKMjIyCjAKMAoyMjIKODMzCl0KODEKODQKNTU2Cjg1ClsK MzMzCjUwMAoyNzcKNTU2Cl0KODkKOTEKMAo5MgpbCjUwMApdCl0KPj4KZW5kb2JqCjE1CjAK b2JqCjw8Ci9UeXBlCi9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUKL01VRlVaWStBcmlhbC1J dGFsaWNNVAovRmxhZ3MKNjgKL0ZvbnRCQm94ClsKLTUxNwotMzI0CjEzNTgKOTk3Cl0KL0Fz Y2VudAo3MjgKL0Rlc2NlbnQKLTIwNwovSXRhbGljQW5nbGUKLTEyLjAKL0NhcEhlaWdodAo3 MTUKL1N0ZW1WCjgwCi9Gb250RmlsZTIKMTYKMApSCj4+CmVuZG9iagoxOAowCm9iago8PAov RmlsdGVyCi9GbGF0ZURlY29kZQovTGVuZ3RoCjIzCjAKUgo+PgpzdHJlYW0KeJxlUstuwyAQ vPMVHNNDZMB22koWUpWqkg99qG4/wIF1ilRjhJ2D/754t0mTFAns2Z3ZXQ1k2/qx9m7i2Vsc TAMT75y3EcbhEA3wHeydZ1Jx68z0i/A0fRtYlsTNPE7Q174bWFXx7D0lxynOfPVghx3csOw1 WojO7/nqc9sk3BxC+IYe/MQF05pb6FKh5za8tD3wDGXr2qa8m+Z10vwxPuYAXCGWNIwZLIyh NRBbvwdWibQ0r57S0gy8vcoLUu06golw/JXHjPlqI9a5S3WEUKUmGsbVpT7lpUCalMS2GoM5 BQ1+cqHPO6nrTkWBtI1EbbEhlJ/3zf/1LWi84p7YJWpLGqZUFKRhypKCJLhVF8MsFi03efLf HGJM1uN1o+eL287D6UWEISwq3D/yTK2yCmVuZHN0cmVhbQplbmRvYmoKMjAKMApvYmoKPDwK L0ZpbHRlcgovRmxhdGVEZWNvZGUKL0xlbmd0aAoyNAowClIKPj4Kc3RyZWFtCnic7b0JeBRV 1jd+7q3q6r27urP0kk66k05CSAOBEJZAJM0SQNlXEyQSVllElqCiogSVVVDUcUNlG1REHZqw GJAZmFFxRBFnXGbcUXEflPFlmFEh/T/nVlUIcWHmfd//833P9yThV+eudW/de7a7RIEBgBXq QAJ18jULIptCf/kKUx4CUEZPm3vF7Jevq1qH4ZOIq6648rppd//w3ggAZw1AsTp96sQpx1IP /Q2gfC7W6TodE7yd03MwvhXjudNnL1g4ocuZsRh/GaDLlCvnTJ7I7xq8CuDqjhifPnviwrne Xc46gG33Y/nI3PlT5+a9OeQAxhsA7L8z7YMAImh6DAJyPvgBkp8hPifaOCP5OeUT5V9i7QYd AFvhKTYDnoID8Ad2Emtth72wC/4IPuiH37UIfgXLQYFxmLISRuKvCdN/xQLJXVAEm3AcNsER LHsp3AT7IJ35k1/AYlgqvYa1loITcqA3DIc5sIYNTl4N4+ED+RboBoPhKpjL6pKVyduTdyW3 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 4c7sAcOR4YeeOsfv8+aXadpHbZaoHWWdi58dWjG136fz0AqhKKA8DKFzP484ABXaCIXC5UhN yU91eDKY15mWwYCOz5cYWuonF+r4Q+cX4qTLJxbsnqinRLNbIoQBDC3fVPzozGvuC990eP22 ndHxveb+alfllMFLesj59wydMKly3/Y9Z9vwh6+c0OOeLWfv4/ULFw5fd+fZtzRJkj5FSUpn O+IpJklJ4VvVBvVj6bOUk9LpFEWmhW4Ostx1KrtffdV/zJ/0yxFLqis13RsyIY+lO21Ol8Nl MK3LkDjh0YeFhOT648Rx/jhNhL2AwvZUmiY7MYeHpsouPG97jihBNe00XfZUmiuMf6cxh91G M0bLxLhwGezxzl1LknaG/+xD/aQL25V0LUn4T/r5XP9Gf8J/0C/7Jd45LV3wTbrgoXTBPel5 TKwSPB6hFb83blB8H/cJBhL9AZtgHVlnne/pdgWGuOAYWXAMNerFXpykS5QReBV9LxmG+sQ6 s+lHuNJlqC/Jy26eEdMWoqhIkWfKy094SpnOKOmKx2qz2Mw2SVHzPYorg7ltXp1hCpfQTRZk SsEYujvdjCuWb776vZpNw1XbrsJZA2sfk/Pv214xd0jxjWdr+bKrZve+6+Wz+2ld2Q+9lzY4 804IsAN70sQxcIq2byl29z6PT6VQQGR4zbaAY4Ay0DJWqbJcocywWErUHt4e6V38Feog76D0 Cv9403jrSLXaW50+0j/bNNs6RZ3tnZ0+xX8tS7MqJudl0mjTaNtljiulqaaptisdNl9INntQ UaUaHJNquJ+ptLmWQjOWmpshTuMzBOuYmy64mP3Ca1D11JNilSYC+nGCth1p1lwfEUC3KDev pKOZgVk1R9AhOXdW0ukD1FZUYjY5Nhh2CXZxObR1p+DmXHC4yJh6hWIRDj6EBHcI10XXH0Jb gjgvgDg2R4qJg3B69CtLYj8KOgXJudEvKzXnBHRtqk/HqqvP5w/j/hJazXl0DGodZRplnWSa ZJVZdZW4+ZcijgxAP0BovonXb8vK599h6Td8ddsHjSf21i9fVr9z6fJ6nsLa3H5N44dnj3x1 M8tizpdfevlPz790GJl4KbLGIeQKD7wfH1KUwlSZReUSua88Sp4mL5AVq8ditVidKR6rEyQL s4fI0IDNWrDWwiw5kRSWwnPOu7qlXeYS4nYwrrYUFdIbuuj9K+5pJnqKGNzz9HW6kD5FjK5Y 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 oyLjK/eyb9nJin572d+JVFXulXqxbytGUrrUq19V1aAGNlaUgwj7O5ZDjvm7KGdBw0zlIGLJ 0sqt08rlYX0sl0sEy1mtkCfK5VmtopzMqNyO2tyKfjtyc0UZXwRqRZlaX6R5mcN5WCYvT5RJ r4PDoszh9Doqk+glioRCWCQrJIqwIIREkRALiiJjzxUp0ousbCqyUrQksXNlQloZ5zGjjPMY lon9uz9T+8RibGfPqsnjK6ZGK2qiFVMRNYnbrpnuT9RNikR2TK6ijEhCyq+ZNHk60YlTE1XR qf0Sk6P9Ijt6jv+J7PGU3TPabweMrxhduWN8fGq/+p7xnhXRif2qdg4YXtLtvLZWNrVVMvwn XjacXlZCbQ3o9hPZ3Sh7ALXVjdrqRm0NiA8QbYHg8eGVOyzQp6rveI3u5HYb8mtNRnZVn3R1 bi/BvD2z/Tdl7ENvZSvYY1UJR7RPwomgrPa92/emLJQpynJhslvP8t/UMztjH9uqZ6mY7In2 gdiCq2uvBn/FjH7av1r8waQFV9OAa89Y7c/9YF5FIj6xX+0CgEGJwlGDEuUjxlXuMJsxtYY+ KdHDSLPbKxqSB7XEDpjYgxIlqakgpZVRmtWqF/zx/F+t074kBXX8mZ0snsUWQG2VlMgaNJqj Khg9Dr91/LjKfehLkXmorcIPrGUxVmu8Q+92LKb/r6eBvtnAgqv1kD4WC3Sq1cQqtcaQNP3Q YMWaRmwBvhD+P2Mdg1wKZW5kc3RyZWFtCmVuZG9iagoxNwowCm9iago8PAovVHlwZQovRm9u dAovU3VidHlwZQovQ0lERm9udFR5cGUyCi9CYXNlRm9udAovTVVGVVpZK0FyaWFsTVQKL0NJ RFN5c3RlbUluZm8KPDwKL1JlZ2lzdHJ5CihBZG9iZSkKL09yZGVyaW5nCihVQ1MpCi9TdXBw bGVtZW50CjAKPj4KL0ZvbnREZXNjcmlwdG9yCjE5CjAKUgovQ0lEVG9HSURNYXAKL0lkZW50 aXR5Ci9EVwo1NTYKL1cKWwowClsKNzUwCl0KMQo3CjAKOApbCjg4OQpdCjkKMTUKMAoxNgpb CjMzMwoyNzcKMApdCjE5CjI4CjU1NgoyOQo2NwowCjY4ClsKNTU2CjAKNTAwCjAKNTU2CjI3 NwpdCjc0Cjc5CjAKODAKWwo4MzMKNTU2CjU1NgowCjAKMzMzCjUwMAoyNzcKNTU2Cl0KXQo+ PgplbmRvYmoKMTkKMApvYmoKPDwKL1R5cGUKL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZQov TVVGVVpZK0FyaWFsTVQKL0ZsYWdzCjQKL0ZvbnRCQm94ClsKLTY2NAotMzI0CjIwMDAKMTAw NQpdCi9Bc2NlbnQKNzI4Ci9EZXNjZW50Ci0yMTAKL0l0YWxpY0FuZ2xlCjAKL0NhcEhlaWdo dAo3MTYKL1N0ZW1WCjgwCi9Gb250RmlsZTIKMjAKMApSCj4+CmVuZG9iagoyMQowCm9iagoz MDgKZW5kb2JqCjIyCjAKb2JqCjEzNzQyCmVuZG9iagoyMwowCm9iagozMDMKZW5kb2JqCjI0 CjAKb2JqCjE4MzgyCmVuZG9iagoxCjAKb2JqCjw8Ci9UeXBlCi9QYWdlcwovS2lkcwpbCjUK MApSCl0KL0NvdW50CjEKPj4KZW5kb2JqCnhyZWYKMCAyNQowMDAwMDAwMDAyIDY1NTM1IGYg CjAwMDAwMzg4NDYgMDAwMDAgbiAKMDAwMDAwMDAwMCAwMDAwMCBmIAowMDAwMDAwMDE2IDAw MDAwIG4gCjAwMDAwMDAxNDIgMDAwMDAgbiAKMDAwMDAwMDI1NSAwMDAwMCBuIAowMDAwMDAw NDIwIDAwMDAwIG4gCjAwMDAwMDQwNjUgMDAwMDAgbiAKMDAwMDAwMzk4OCAwMDAwMCBuIAow MDAwMDA0MDA4IDAwMDAwIG4gCjAwMDAwMDQwMjcgMDAwMDAgbiAKMDAwMDAwNDIzNiAwMDAw MCBuIAowMDAwMDA0Mzg3IDAwMDAwIG4gCjAwMDAwMTg3MzMgMDAwMDAgbiAKMDAwMDAwNDUz MSAwMDAwMCBuIAowMDAwMDE5MTY1IDAwMDAwIG4gCjAwMDAwMDQ5MTUgMDAwMDAgbiAKMDAw MDAzODIxMCAwMDAwMCBuIAowMDAwMDE5MzczIDAwMDAwIG4gCjAwMDAwMzg1NjUgMDAwMDAg biAKMDAwMDAxOTc1MiAwMDAwMCBuIAowMDAwMDM4NzYyIDAwMDAwIG4gCjAwMDAwMzg3ODIg MDAwMDAgbiAKMDAwMDAzODgwNCAwMDAwMCBuIAowMDAwMDM4ODI0IDAwMDAwIG4gCnRyYWls ZXIKPDwKL1NpemUKMjUKL1Jvb3QKMwowClIKL0luZm8KNAowClIKPj4Kc3RhcnR4cmVmCjM4 OTA1CiUlRU9GCg== --------------xDGiXotXhDZtLw3h0Nc02iS7--