Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGIgM-00C25I-VS for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 15:10:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vGIgL-00EcGS-Ta for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 15:10:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGIgL-00EcGJ-3M for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 15:10:48 +0000 Received: from mail-il1-x131.google.com ([2607:f8b0:4864:20::131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGIgI-005QGr-0U for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 15:10:47 +0000 Received: by mail-il1-x131.google.com with SMTP id e9e14a558f8ab-4332381ba9bso35434655ab.1 for ; Tue, 04 Nov 2025 07:10:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762269045; x=1762873845; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=TzXvRtIRAiP/MnjJUZiBv1MQMzwTDiS5ju/B1pv0NEs=; b=G/u7rQ/4YhMciYgpwHiWTGTqrdysqmfL8wG6YSoZBtXQcFjTjvflTbwViV/E38EPy/ LHHLJWbZsSsYj/a9LwE6rdE0xgYwvQ2j8nfiQwE+fXTCyMtcAwqBCx0vGgoFpiNtYTuk In2zBF4qQwqSil20xf+VYvA+TmY9VEnMSa0LZfKD4hH4t2aEDDZ19BD1xMQI5tejYyB8 CNY62z9pgdCEfQwlEtUF3F3lm/d+Lzdm3J+RpwubO9cLsNVeG1MLclbEYrKHQouKfl1K v/tdr9c5hAb6+xImbZkwGOOxl8Pi2DHWjudtUstGdSTcQZ8gvVhiE0D/7ap+NXOUS3Uo 7oIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762269045; x=1762873845; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TzXvRtIRAiP/MnjJUZiBv1MQMzwTDiS5ju/B1pv0NEs=; b=W5LAyCt1cPKzabPJoqxwRe5dAEfWRbWQzhH7lgu64Pf0SuIE1LrH7N9t++DSxNjzi/ 3Tx+ZytC0cAejosOxz45qLFV4wh7uRe5o5ZASa2UbMMjICRJR1NyVb3OMQG3aDQX7VWX sABTCiZpnLKxgwWB9J8KTAne+MH7gpjH6FaRKIp2GSLiFSKQkeIu/Pu/i/2vegByChwB XMtSfHnSjAc/wBlNBX4Q1DC9V7uhm49X8hi4fwq5C8AE3xMK0o6+0TqTpEwmqdJ2tBls uN4A+HfE35lOwquqNxrvbfgi1ZzMDTql4J5RH8c3cMq9N0PlcGtl6fm+c+Csj4GPQeje dQ0A== X-Forwarded-Encrypted: i=1; AJvYcCUUd/H9UwaJ2QJ2eJmCqMpXLhAp9iDs3KNWGHqCdQzTWs+Kb40E7vrT9s0RdJ4U/ufopqtUsimROZAyZT3E@lists.postgresql.org X-Gm-Message-State: AOJu0YxymWx/0JxgLf0Xf0PLAVdsOF71jjTUeFi6o4UOmWRdx4xiX2JJ TmxeOzqul4LxsSXzJo506YzwJu+f7585QZjzMiT0ZAiJK/cbZN3nRkgGl+IhrCKtXQC8acA0lmA pMSzAKErs9663Ojh919LWbYbVIoui54OZ4VmOBMDCBEGe X-Gm-Gg: ASbGncv9q38LeIy9hIOFoYnG2b3I4O9AQH9NDFZDhqv4MKirNKfd2Jq8dxKzsmZDVQs aKGiIxufi9+gQIygGYLqi6h5SeX5xN5lYQ/7yvwy8GANewFY/15JfNxcZD6sqX9t9Ihep0tSoI/ SVOMGvK5ra6wSZFKcI2wiVZhbz4S4UAJQc9u0ohAoWVTLZ/WTi1l2SwJrnNTbKhaMe9Pw2ZSQ9s BeIaTDVgSYJEHx7uy9QTT2trCw+R19TD84U9dbVu4fLrxiAXucx4y48Z+k1cFVuDLILJp7IhTja 9flL/o+Nbd2MVThjmQCvevy/Xg6+ZyWDWXp9bS24aVNph4P1d6HiCnnW3WME X-Google-Smtp-Source: AGHT+IH5OjqUOYKwJGv5ef4pWH/Bi78R/io1ZjPeVhMA7s6+9UvAIuEj/Qm/DELyUhtJtb9qkJPQ0kjiOR3BjAGQwnY= X-Received: by 2002:a05:6e02:1c25:b0:430:9f96:23ce with SMTP id e9e14a558f8ab-4330d12ca48mr211003415ab.8.1762269045151; Tue, 04 Nov 2025 07:10:45 -0800 (PST) MIME-Version: 1.0 References: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> In-Reply-To: From: Alexander Korotkov Date: Tue, 4 Nov 2025 17:10:31 +0200 X-Gm-Features: AWmQ_blKIqtMjq7EzyBZ_2N0a3ptXEi770oA5mJQWxbhkwuact7aNyQzP6VVdXk Message-ID: Subject: Re: POC: make mxidoff 64 bits To: Maxim Orlov Cc: Heikki Linnakangas , wenhui qiu , Ashutosh Bapat , Postgres hackers Content-Type: multipart/mixed; boundary="0000000000006f85360642c63cc7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006f85360642c63cc7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Oct 30, 2025 at 6:17=E2=80=AFPM Maxim Orlov wro= te: > On Thu, 30 Oct 2025 at 12:10, Heikki Linnakangas wrote: >> >> >> Oh I see, the 'base' is not necessarily the base offset of the first >> multixact on the page, it's the base offset of the first multixid that >> is written to the page. And the (short) offsets can be negative. That's >> a frighteningly clever encoding scheme. One upshot of that is that WAL >> redo might get construct the page with a different 'base'. I guess that >> works, but it scares me. Could we come up with a more deterministic sche= me? >> > Definitely! The most stable approach is the one we had before, which > used actual 64-bit offsets in the SLRU. To be honest, I'm completely > happy with it. After all, what's most important for me is to have 64-bit > xids in Postgres, and this patch is a step towards that goal. Yes, but why can't we have an encoding scheme which would both be deterministic and provide compression? The attached is what I meant in [1]. It's based on v19 and provide deterministic conversion of each 8 of 64-bit offsets into a chunks containing 64-bit base and 7 of 24-bit increments. I didn't touch pg_upgrade code though. Links. 1. https://www.postgresql.org/message-id/CAPpHfdtPybyMYBj-x3-Z5%3D4bj_vhYk2= R0nezfy%3DVjcz4QBMDgw%40mail.gmail.com ------ Regards, Alexander Korotkov Supabase --0000000000006f85360642c63cc7 Content-Type: application/octet-stream; name="v21-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v21-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkpffe50 RnJvbSBiNTcxNDcwMWE3NTgzZWMwODVmZjVlYWQwNGI2NWM3YTZhZGRhYTliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDEvM10g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0LWJpdCBtdWx0aXRy YW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0aGUKMl4zMiBsaW1pdCBv biB0aGVpciB0b3RhbCBudW1iZXIuCgpPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtb3ZlIGlzIGlu ZXZpdGFibGUgaW4gaW5jcmVhc2VkIGRpc2Mgc3BhY2UKdXRpbGlzYXRpb24uICBGb3J0dW5hdGVs eSwgbXVsdGl0cmFuc2FjdGlvbiBvZmZzZXRzIHJpc2UgbW9ub3RvbmljYWxseQphbmQgd2l0aG91 dCBnYXBzLiAgVG8gY29uc2VydmUgZGlzYyBzcGFjZSBjb25zdW1lZCBieSBzZWdtZW50cywgd2UK d3JpdGUgZW5jb2RlIGVhY2ggOCB2YWx1ZXMgYXMgY2h1bmtzIGNvbnRhaW5pbmcgOC1ieXRlcyBi YXNlIGFuZCA3IG9mCjMtYnl0ZXMgaW5jcmVtZW50cy4KCkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9y bG92bWdAZ21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYyAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgfCA0 NTIgKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyAgICAg ICB8ICAgNCArLQogc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jICAgfCAg IDIgKy0KIHNyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyAgICAgICAgIHwgICA2ICst CiBzcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsICAgICAgICB8ICAgMiArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiAxMSBmaWxlcyBjaGFu Z2VkLCAyMDIgaW5zZXJ0aW9ucygrKSwgMjc5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzY2EwNTgyZGIzNi4uMDUyZGQwYTRjZTUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKQEAgLTY1LDcgKzY1LDcgQEAg bXVsdGl4YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQog CQl4bF9tdWx0aXhhY3RfY3JlYXRlICp4bHJlYyA9ICh4bF9tdWx0aXhhY3RfY3JlYXRlICopIHJl YzsKIAkJaW50CQkJaTsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBu bWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBv ZmZzZXQgJSIgUFJJdTY0ICIgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCiAJCQkJCQkgeGxy ZWMtPm1vZmYsIHhscmVjLT5ubWVtYmVycyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1l bWJlcnM7IGkrKykKIAkJCW91dF9tZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAt NzQsNyArNzQsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiAJewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKnhscmVjID0gKHhsX211 bHRpeGFjdF90cnVuY2F0ZSAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZz ZXRzIFsldSwgJXUpLCBtZW1iZXJzIFsldSwgJXUpIiwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICJvZmZzZXRzIFsldSwgJXUpLCBtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpIiwK IAkJCQkJCSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJ IHhscmVjLT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBjZDZjMmEyZjY1MC4uNDQxMDM0ZjU5 MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCkBAIC02Niw3ICs2Niw3 IEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ CUNoZWNrUG9pbnQgKmNoZWNrcG9pbnQgPSAoQ2hlY2tQb2ludCAqKSByZWM7CiAKIAkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJyZWRvICVYLyUwOFg7ICIKLQkJCQkJCSAidGxpICV1OyBwcmV2IHRs aSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsg b2Zmc2V0ICV1OyAiCisJCQkJCQkgInRsaSAldTsgcHJldiB0bGkgJXU7IGZwdyAlczsgd2FsX2xl dmVsICVzOyB4aWQgJXU6JXU7IG9pZCAldTsgbXVsdGkgJXU7IG9mZnNldCAlIiBQUkl1NjQgIjsg IgogCQkJCQkJICJvbGRlc3QgeGlkICV1IGluIERCICV1OyBvbGRlc3QgbXVsdGkgJXUgaW4gREIg JXU7ICIKIAkJCQkJCSAib2xkZXN0L25ld2VzdCBjb21taXQgdGltZXN0YW1wIHhpZDogJXUvJXU7 ICIKIAkJCQkJCSAib2xkZXN0IHJ1bm5pbmcgeGlkICV1OyAlcyIsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDlkNWYxMzBhZjdlLi4xZjU5NTg3YzQyZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTg5LDIxICs4OSwzMSBAQAogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIAordHlwZWRlZiBpbnQzMiBTaG9ydE11bHRpWGFj dE9mZnNldDsJLyogZm9yIGEgZGlzayBzdG9yYWdlICovCisKIC8qCiAgKiBEZWZpbmVzIGZvciBN dWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMg aXMKICAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgogICoKLSAqIE5vdGU6IGJl Y2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhG RkZGRkZGRiwKLSAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBh dAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQg bnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NM UlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGlj ZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICog c2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11 bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCisgKiBUaGVyZSBhcmUgdHdvIGtleSBmYWN0b3Jz IHdoeSB1dGlsaXNpbmcgc3RyYWlnaHRmb3J3YXJkIDY0LWJpdCBvZmZzZXQgdmFsdWVzCisgKiBm b3IgaXMgd2FzdGVmdWwgaW4gdGVybXMgb2YgZGlzYyBzcGFjZSB1c2FnZToKKyAqIDEpIG9mZnNl dCB2YWx1ZXMgYXJlIHJlY29yZGVkIGluIGFzY2VuZGluZyBvcmRlciBhbmQgbm90IG92ZXJ3cml0 dGVuOworICogMikgdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIEJMQ0tTWiBpcyAzMmssIHdoaWNoIGNh biBzdG9yZSB1cCB0byAyXjEzIDMyLWJpdAorICogICAgaXRlbXMgb24gYSBzaW5nbGUgcGFnZTsg IHRodXMsIHdpdGggTUFYX0JBQ0tFTkRTIGxpbWl0ZWQgdG8gMl4xOC0xIHdlIGhhdmUKKyAqICAg IDJeMTMgKiAoMl4xOC0xKSB3aGljaCBpcyBsZXNzIDJeMzEgYW5kIGZpdHMgMzItYml0cy4KKyAq CisgKiBJbiBvdGhlciB3b3JkcywgbWF4ICJkaXN0YW5jZSIgZm9yIG9mZnNldHMgb24gYSBzaW5n bGUgcGFnZSBpcyBub3QgZXhlZWRlZAorICogMzItYml0cy4gIFRvIG9wdGltaXNlIGRpc2Mgc3Bh Y2UgYWxsb2NhdGlvbiwgd2UgZW1wbG95IHRoZSBmb2xsb3dpbmcgc2NoZW1lLgorICogT24gZWFj aCBwYWdlLCB0aGUgYmFzaWMgNjQtYml0IG9mZnNldCwga25vd24gYXMgdGhlIHBhZ2UgYmFzZSwg aXMgbG9jYXRlZAorICogZmlyc3QuICBOZXh0LCB0aGVyZSBhcmUgMzItYml0IGRlbHRhcyByZWxh dGl2ZSB0byB0aGUgYmFzZSBlbGVtZW50IGFyZQorICogcGxhY2VkLiAgVGh1cywgdGhlIHJlcXVp cmVkIG9mZnNldCBmb3IgdGhlIDAtdGggZWxlbWVudCBpcyB0aGUgcGFnZSdzCisgKiBiYXNlOyB0 aGUgdmFsdWUgZm9yIGVhY2ggc3Vic2VxdWVudCBvZmZzZXQgb24gdGhlIHNhbWUgcGFnZSBpcyBj YWxjdWxhdGVkCisgKiBieSBhZGRpbmcgaXQgdG8gdGhlIHBhZ2UgYmFzZSAoMC10aCkgZWxlbWVu dC4KICAqLwogCi0vKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNl dCkpCisvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCwgOCBieXRlcyBmb3IgdGhlIGJh c2UgKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UJCVwKKwkoKEJMQ0tTWiAt IHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSAvIHNpemVvZihTaG9ydE11bHRpWGFjdE9mZnNldCkp CiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFj dElkIG11bHRpKQpAQCAtMjA4LDEwICsyMTgsMTQgQEAgTVhPZmZzZXRUb01lbWJlck9mZnNldChN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQogCQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNh Y3Rpb25JZCk7CiB9CiAKLS8qIE11bHRpeGFjdCBtZW1iZXJzIHdyYXBhcm91bmQgdGhyZXNob2xk cy4gKi8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRAkJKE1heE11bHRp WGFjdE9mZnNldCAvIDIpCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9M RAlcCi0JKE1heE11bHRpWGFjdE9mZnNldCAtIE1heE11bHRpWGFjdE9mZnNldCAvIDQpCisvKgor ICogTXVsdGl4YWN0IG1lbWJlcnMgd2FybmluZyB0aHJlc2hvbGQuCisgKgorICogSWYgZGlmZmVy ZW5jZSBiZXR0d2VlbiBuZXh0T2Zmc2V0IGFuZCBvbGRlc3RPZmZzZXQgZXhjZWVkIHRoaXMgdmFs dWUsIHdlCisgKiB0cmlnZ2VyIGF1dG92YWN1dW1pbiBvcmRlciB0byByZWxlYXNlIHRoZSBkaXNr IHNwYWNlLCByZWR1Y2UgdGFibGUgYmxvYXQgaWYKKyAqIHBvc3NpYmxlLgorICovCisjZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQJCVVJTlQ2NENPTlNUKDB4RkZGRkZG RkYpCiAKIHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQKIFByZXZpb3VzTXVsdGlYYWN0SWQoTXVs dGlYYWN0SWQgbXVsdGkpCkBAIC0yMjgsNiArMjQyLDEyOCBAQCBzdGF0aWMgU2xydUN0bERhdGEg TXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKICNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVs dGlYYWN0T2Zmc2V0Q3RsRGF0YSkKICNkZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVsdGlY YWN0TWVtYmVyQ3RsRGF0YSkKIAordHlwZWRlZiBzdHJ1Y3QKK3sKKwlNdWx0aVhhY3RPZmZzZXQJ CQliYXNlOworCXVpbnQ4CQkJCQlvZmZzZXRzWzddWzNdOworfSBNdWx0aXhhY3RFbmNvZGVkQ2h1 bms7CisKKy8qCisgKiBUbyBhdm9pZCBkaXZpbmcgZGVlcCBpbnRvIGFkZHJlc3MgYXJpdGhtZXRp Yywgd2UgZGVjbGFyZSBhbiBhdXhpbGlhcnkKKyAqIHN0cnVjdHVyZSB0aGF0IGFjY2VzcyB0aGUg TXVsdGlYYWN0T2Zmc2V0IFNMUlUgcGFnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0 T2Zmc2V0U0xSVVBhZ2UKK3sKKwlNdWx0aXhhY3RFbmNvZGVkQ2h1bmsJY2h1bmtzW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07Cit9IE11bHRpWGFjdE9mZnNldFNMUlVQYWdlOworCisjZGVmaW5lIEJB U0VfSElHSF9CSVQgKChVSU5UNjRDT05TVCgxKSA8PCA2MykpCisjZGVmaW5lIE9GRlNFVF9ISUdI X0JJVCAoMSA8PCAyMykKKworc3RhdGljIGlubGluZSB2b2lkCitNdWx0aXhhY3RDaHVua0VuY29k ZShNdWx0aVhhY3RPZmZzZXQgdmFsdWVzWzhdLCBNdWx0aXhhY3RFbmNvZGVkQ2h1bmsgKmNodW5r KQoreworCU11bHRpWGFjdE9mZnNldAkJCXByZXZWYWx1ZTsKKwlpbnQJCWk7CisKKwlBc3NlcnQo KHZhbHVlc1swXSAmIEJBU0VfSElHSF9CSVQpID09IDApOworCisJaWYgKHZhbHVlc1swXSAhPSAw KQorCXsKKwkJY2h1bmstPmJhc2UgPSB2YWx1ZXNbMF0gfCBCQVNFX0hJR0hfQklUOworCQlwcmV2 VmFsdWUgPSB2YWx1ZXNbMF07CisJfQorCWVsc2UKKwl7CisJCWNodW5rLT5iYXNlID0gcHJldlZh bHVlID0gMDsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCXsKKwkJdWludDY0CQlk aWZmOworCisJCWlmICh2YWx1ZXNbaV0gPT0gMCkKKwkJeworCQkJY2h1bmstPm9mZnNldHNbaSAt IDFdWzBdID0gY2h1bmstPm9mZnNldHNbaSAtIDFdWzFdID0gY2h1bmstPm9mZnNldHNbaSAtIDFd WzJdID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNodW5rLT5iYXNlID09IDApCisJ CQlwcmV2VmFsdWUgPSBjaHVuay0+YmFzZSA9IHZhbHVlc1tpXTsKKworCQlkaWZmID0gKHZhbHVl c1tpXSAtIHByZXZWYWx1ZSk7CisJCXByZXZWYWx1ZSA9IHZhbHVlc1tpXTsKKworCQlBc3NlcnQo ZGlmZiA8IE9GRlNFVF9ISUdIX0JJVCk7CisJCWRpZmYgfD0gT0ZGU0VUX0hJR0hfQklUOworCisJ CWNodW5rLT5vZmZzZXRzW2kgLSAxXVswXSA9IGRpZmYgJiAweEZGOworCQljaHVuay0+b2Zmc2V0 c1tpIC0gMV1bMV0gPSAoZGlmZiA+PiA4KSAmIDB4RkY7CisJCWNodW5rLT5vZmZzZXRzW2kgLSAx XVsyXSA9IChkaWZmID4+IDE2KSAmIDB4RkY7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K011bHRpeGFjdENodW5rRGVjb2RlKE11bHRpWGFjdE9mZnNldCB2YWx1ZXNbOF0sIE11bHRpeGFj dEVuY29kZWRDaHVuayAqY2h1bmspCit7CisJTXVsdGlYYWN0T2Zmc2V0CQlwcmV2VmFsdWUgPSBj aHVuay0+YmFzZTsKKwlpbnQJCQlpOworCisJaWYgKGNodW5rLT5iYXNlICYgQkFTRV9ISUdIX0JJ VCkKKwl7CisJCXByZXZWYWx1ZSA9IHZhbHVlc1swXSA9IGNodW5rLT5iYXNlIC0gQkFTRV9ISUdI X0JJVDsKKwl9CisJZWxzZQorCXsKKwkJdmFsdWVzWzBdID0gMDsKKwkJcHJldlZhbHVlID0gY2h1 bmstPmJhc2U7CisJfQorCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKwl7CisJCXVpbnQ2NAkJ ZGlmZjsKKworCQlkaWZmID0gY2h1bmstPm9mZnNldHNbaSAtIDFdWzBdIHwgKGNodW5rLT5vZmZz ZXRzW2kgLSAxXVsxXSA8PCA4KSB8IChjaHVuay0+b2Zmc2V0c1tpIC0gMV1bMl0gPDwgMTYpOwor CisJCWlmIChkaWZmID09IDApCisJCXsKKwkJCXZhbHVlc1tpXSA9IDA7CisJCX0KKwkJZWxzZQor CQl7CisJCQlBc3NlcnQoZGlmZiAmIE9GRlNFVF9ISUdIX0JJVCk7CisJCQl2YWx1ZXNbaV0gPSBw cmV2VmFsdWUgKyAoZGlmZiAtIE9GRlNFVF9ISUdIX0JJVCk7CisJCQlwcmV2VmFsdWUgPSB2YWx1 ZXNbaV07CisJCX0KKwl9CisKK30KKworc3RhdGljIGlubGluZSBNdWx0aVhhY3RPZmZzZXQKK01Y T2Zmc2V0UmVhZChpbnQgZW50cnlubywgaW50IHNsb3RubykKK3sKKwlNdWx0aVhhY3RPZmZzZXRT TFJVUGFnZSAqcGFnZSA9CisJCShNdWx0aVhhY3RPZmZzZXRTTFJVUGFnZSAqKSBNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlNdWx0aVhhY3RPZmZzZXQg dmFsdWVzWzhdOworCisJTXVsdGl4YWN0Q2h1bmtEZWNvZGUodmFsdWVzLCAmcGFnZS0+Y2h1bmtz W2VudHJ5bm8gLyA4XSk7CisKKwlyZXR1cm4gdmFsdWVzW2VudHJ5bm8gJSA4XTsKK30KKworCitz dGF0aWMgaW5saW5lIHZvaWQKK01YT2Zmc2V0V3JpdGUoaW50IGVudHJ5bm8sIGludCBzbG90bm8s IE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKnBh Z2UgPQorCQkoTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5z aGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJTXVsdGlYYWN0T2Zmc2V0IHZhbHVlc1s4XTsK KworCU11bHRpeGFjdENodW5rRGVjb2RlKHZhbHVlcywgJnBhZ2UtPmNodW5rc1tlbnRyeW5vIC8g OF0pOworCXZhbHVlc1tlbnRyeW5vICUgOF0gPSBvZmZzZXQ7CisJTXVsdGl4YWN0Q2h1bmtFbmNv ZGUodmFsdWVzLCAmcGFnZS0+Y2h1bmtzW2VudHJ5bm8gLyA4XSk7Cit9CisKIC8qCiAgKiBNdWx0 aVhhY3Qgc3RhdGUgc2hhcmVkIGFjcm9zcyBhbGwgYmFja2VuZHMuICBBbGwgdGhpcyBzdGF0ZSBp cyBwcm90ZWN0ZWQKICAqIGJ5IE11bHRpWGFjdEdlbkxvY2suICAoV2UgYWxzbyB1c2UgU0xSVSBi YW5rJ3MgbG9jayBvZiBNdWx0aVhhY3RPZmZzZXQgYW5kCkBAIC0yNjgsOSArNDA0LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0U3RhdGVEYXRhCiAJTXVsdGlYYWN0SWQgbXVsdGlTdG9wTGlt aXQ7CiAJTXVsdGlYYWN0SWQgbXVsdGlXcmFwTGltaXQ7CiAKLQkvKiBzdXBwb3J0IGZvciBtZW1i ZXJzIGFudGktd3JhcGFyb3VuZCBtZWFzdXJlcyAqLwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXRT dG9wTGltaXQ7CS8qIGtub3duIGlmIG9sZGVzdE9mZnNldEtub3duICovCi0KIAkvKgogCSAqIFRo aXMgaXMgdXNlZCB0byBzbGVlcCB1bnRpbCBhIG11bHRpeGFjdCBvZmZzZXQgaXMgd3JpdHRlbiB3 aGVuIHdlIHdhbnQKIAkgKiB0byBjcmVhdGUgdGhlIG5leHQgb25lLgpAQCAtNDAxLDggKzUzNCw2 IEBAIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBv ZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3RhdGljIHZvaWQg RXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKIHN0YXRpYyB2b2lkIEV4 dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMp Owotc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBi b3VuZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsIHVpbnQzMiBkaXN0YW5j ZSk7CiBzdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApOwog c3RhdGljIGJvb2wgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRp WGFjdE9mZnNldCAqcmVzdWx0KTsKIHN0YXRpYyB2b2lkIFdyaXRlTVRydW5jYXRlWGxvZ1JlYyhP aWQgb2xkZXN0TXVsdGlEQiwKQEAgLTkxMSw3ICsxMDQyLDYgQEAgUmVjb3JkTmV3TXVsdGlYYWN0 KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogCWludDY0CQlwcmV2 X3BhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJCXNsb3RubzsKLQlNdWx0aVhhY3RPZmZz ZXQgKm9mZnB0cjsKIAlpbnQJCQlpOwogCUxXTG9jawkgICAqbG9jazsKIAlMV0xvY2sJICAgKnBy ZXZsb2NrID0gTlVMTDsKQEAgLTkzMCwxMCArMTA2MCw4IEBAIFJlY29yZE5ld011bHRpWGFjdChN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkgKiB0YWtlIHRoZSB0 cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4KIAkg Ki8KIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vu bywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0 T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRyICs9IGVudHJ5 bm87CiAKLQkqb2ZmcHRyID0gb2Zmc2V0OworCU1YT2Zmc2V0V3JpdGUoZW50cnlubywgc2xvdG5v LCBvZmZzZXQpOwogCiAJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xv dG5vXSA9IHRydWU7CiAKQEAgLTExNTUsNzggKzEyODMsNiBAQCBHZXROZXdNdWx0aVhhY3RJZChp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCWVsc2UKIAkJKm9mZnNldCA9 IG5leHRPZmZzZXQ7CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFnYWluc3Qgb3ZlcnJ1 biBvZiB0aGUgbWVtYmVycyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQotCSAqIGZvbGxvd2luZyBy dWxlczoKLQkgKgotCSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3RvcExpbWl0LCByZWZ1c2UgdG8g Z2VuZXJhdGUgbW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUgY2xvc2UgdG8gb2Zmc2V0U3RvcExp bWl0LCBlbWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFyYml0cmFyaWx5LCB3ZSBzdGFydCBlbWl0 dGluZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNlZ21lbnRzIG9yIGxlc3MKLQkgKiBmcm9tIG9m ZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5vdGUgd2UgaGF2ZW4ndCB1cGRhdGVkIHRoZSBzaGFy ZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBmYWlsIGF0IHRoaXMKLQkgKiBwb2ludCwgdGhlIG11bHRp eGFjdCBJRCB3ZSBncmFiYmVkIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0IGd1eS4KLQkg KgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5nIGF1dG92YWN1dW0g cnVucyBoZXJlOiB0aGUKLQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRpbmdzIHdvdWxkIGhhdmUg dG8gYmUgcmVkdWNlZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAqIGVmZmVjdC4KLQkgKi0tLS0t LS0tLS0KLQkgKi8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VHTUVOVFMJMjAKLQlpZiAoTXVsdGlY YWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3Jh cChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LCBuZXh0T2Zmc2V0LAotCQkJCQkJCQkg bm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb2Zm c2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8KLQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxf U1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29k ZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2coIm11bHRpeGFj dCBcIm1lbWJlcnNcIiBsaW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJkZXRhaWxfcGx1cmFsKCJU aGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVtYmVycywgYnV0 IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJlci4iLAotCQkJ CQkJCQkgICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVt YmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJl cnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9m ZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1lbWJlcnMsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3RhdGUt Pm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJyaGludCgiRXhlY3V0 ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lEICV1IHdpdGggcmVk dWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAotCQkJCQkJIE11bHRpWGFjdFN0 YXRlLT5vbGRlc3RNdWx0aVhhY3REQikpKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIg d2Ugc2hvdWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFjdGlvbiwgdG8gcHJldmVudCBtZW1iZXJz Ci0JICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEgbXVjaCBsYXJnZXIgd2luZG93IHRvIHRyaWdn ZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVzdCB0aGUgd2FybmluZyBsaW1pdC4gVGhlIHdhcm5p bmcgaXMganVzdCBhIG1lYXN1cmUgb2YgbGFzdCByZXNvcnQgLQotCSAqIHRoaXMgaXMgaW4gbGlu ZSB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQncyBiZWhhdmlvdXIuCi0JICovCi0JaWYgKCFNdWx0 aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFjdFN0YXRlLT5uZXh0 T2Zmc2V0IC0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBNVUxUSVhBQ1RfTUVN QkVSX1NBRkVfVEhSRVNIT0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lkIHN3YW1waW5nIHRo ZSBwb3N0bWFzdGVyIHdpdGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92YWMKLQkJICogcmVx dWVzdCBvbmx5IHdoZW4gY3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBXaXRoIGRlZmF1bHQK LQkJICogY29tcGlsYXRpb24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0ZXIgNTBrIG1lbWJl cnMuICBUaGlzIHN0aWxsCi0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2VzIGJlZm9yZSB3ZSBn ZXQgaW50byByZWFsIHRyb3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zmc2V0VG9NZW1iZXJQYWdl KG5leHRPZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgIT0KLQkJCShNWE9mZnNldFRv TWVtYmVyUGFnZShuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVO VCkpCi0JCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFDX0xBVU5D SEVSKTsKLQl9Ci0KLQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0J CU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0 LAotCQkJCQkJCQkgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzICsgTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UICogT0ZGU0VUX1dBUk5fU0VH TUVOVFMpKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFN X0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJhc2Ugd2l0aCBPSUQg JXUgbXVzdCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVtYmVyIGlzIHVz ZWQiLAotCQkJCQkJCSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJl Zm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJCQkJCQkgICBNdWx0 aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJzLAotCQkJ CQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJCQkJCQkgICBNdWx0 aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJzKSwKLQkJ CQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRoYXQgZGF0YWJh c2Ugd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZVwiIGFuZCBc InZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIpKSk7Ci0KIAlF eHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCiAJLyoKQEAgLTEy NTUsNyArMTMxMSw4IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0 T2Zmc2V0ICpvZmZzZXQpCiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCi0J ZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0ICV1IiwgcmVz dWx0LCAqb2Zmc2V0KTsKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJldHVybmluZyAl dSBvZmZzZXQgJSIgUFJJdTY0LCByZXN1bHQsCisJCQkJKm9mZnNldCk7CiAJcmV0dXJuIHJlc3Vs dDsKIH0KIApAQCAtMTI5NCw3ICsxMzUxLDYgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRp WGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCWludDY0CQlwcmV2X3Bh Z2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJCXNsb3RubzsKLQlNdWx0aVhhY3RPZmZzZXQg Km9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0aDsKIAlpbnQJ CQl0cnVlbGVuZ3RoOwpAQCAtMTQxOCw5ICsxNDc0LDggQEAgcmV0cnk6CiAJTFdMb2NrQWNxdWly ZShsb2NrLCBMV19FWENMVVNJVkUpOwogCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVs dGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7CisKKwlvZmZzZXQg PSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKIAogCUFzc2VydChvZmZzZXQgIT0gMCk7 CiAKQEAgLTE0NjcsOSArMTUyMiw3IEBAIHJldHJ5OgogCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIHRtcE1YYWN0KTsKIAkJfQog Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9mZnB0ciArPSBlbnRyeW5vOwotCQluZXh0TVhP ZmZzZXQgPSAqb2ZmcHRyOworCQluZXh0TVhPZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywg c2xvdG5vKTsKIAogCQlpZiAobmV4dE1YT2Zmc2V0ID09IDApCiAJCXsKQEAgLTE5NzMsNyArMjAy Niw3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCQkJCSAgInBnX211bHRpeGFjdC9tZW1i ZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJICBMV1RSQU5DSEVf TVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJF UiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVM cnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KIAogCS8qIElu aXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KQEAgLTIxNDksOSArMjIwMiwyNCBA QCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVTSVZF KTsKIAkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8sIHRydWUsIG5leHRNWGFjdCk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVs dGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9mZnB0ciAr PSBlbnRyeW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChlbnRyeW5vICogc2l6 ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKKwkJaWYgKGVudHJ5bm8gPT0gMCkKKwkJCU1lbVNldChv ZmZwdHIsIDAsIEJMQ0tTWik7CisJCWVsc2UKKwkJeworCQkJU2hvcnRNdWx0aVhhY3RPZmZzZXQg Km9mZjMycHRyOworCisJCQlvZmYzMnB0ciA9IChTaG9ydE11bHRpWGFjdE9mZnNldCAqKSAob2Zm cHRyICsgMSk7CisJCQlvZmYzMnB0ciArPSBlbnRyeW5vOworCisJCQkvKgorCQkJICogS25vd2lu ZyB0aGF0IG9mZnB0ciBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLAorCQkJ ICogYWRkcmVzcyBhcml0aG1ldGljIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYW1vdW50 IG9mCisJCQkgKiBieXRlcyByZW1haW5pbmcuCisJCQkgKi8KKwkJCU1lbVNldChvZmYzMnB0ciwg MCwKKwkJCQkgICBCTENLU1ogLSAoKChjaGFyICopIG9mZjMycHRyIC0gKGNoYXIgKikgb2ZmcHRy KSkpOworCQl9CiAKIAkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xv dG5vXSA9IHRydWU7CiAJCUxXTG9ja1JlbGVhc2UobG9jayk7CkBAIC0yMjIzLDcgKzIyOTEsNyBA QCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0ZG93biwKIAlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVidWdfZWxvZzYoREVCVUcyLAotCQkJCSJNdWx0 aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0T2Zmc2V0ICV1LCBvbGRlc3RN dWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRpWGFjdDogY2hlY2twb2ludCBpcyBuZXh0TXVs dGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIsIG9sZGVzdE11bHRpICV1IGluIERCICV1IiwK IAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVsdGksICpvbGRlc3RN dWx0aURCKTsKIH0KIApAQCAtMjI1OCw3ICsyMzI2LDcgQEAgdm9pZAogTXVsdGlYYWN0U2V0TmV4 dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIAkJCQkJICBNdWx0aVhhY3RPZmZzZXQgbmV4 dE11bHRpT2Zmc2V0KQogewotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGlu ZyBuZXh0IG11bHRpIHRvICV1IG9mZnNldCAldSIsCisJZGVidWdfZWxvZzQoREVCVUcyLCAiTXVs dGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICUiIFBSSXU2NCwKIAkJCQlu ZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RHZW5M b2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBuZXh0TXVs dGk7CkBAIC0yNDQ5LDcgKzI1MTcsNyBAQCBNdWx0aVhhY3RBZHZhbmNlTmV4dE1YYWN0KE11bHRp WGFjdElkIG1pbk11bHRpLAogCX0KIAlpZiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlY YWN0U3RhdGUtPm5leHRPZmZzZXQsIG1pbk11bHRpT2Zmc2V0KSkKIAl7Ci0JCWRlYnVnX2Vsb2cz KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNldCB0byAldSIsCisJCWRlYnVn X2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNldCB0byAlIiBQUklV NjQsCiAJCQkJCW1pbk11bHRpT2Zmc2V0KTsKIAkJTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQg PSBtaW5NdWx0aU9mZnNldDsKIAl9CkBAIC0yNjMzLDE1ICsyNzAxLDEzIEBAIEdldE9sZGVzdE11 bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFnZ3Jlc3NpdmVseSB3 ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgotICogd3JhcGFyb3Vu ZC4KKyAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHZhY3V1bSBmb3IgbWVtYmVyIG9yIG5vdC4K ICAqCiAgKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdzIHRoZSBvbGRlc3QgbWVtYmVyIG9mZnNl dCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKICAqIGluZm8gaW4gTXVsdGlYYWN0U3RhdGUsIHdoZXJl IGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1biBvZiBvbGQgZGF0YQogICogaW4gdGhl IG1lbWJlcnMgU0xSVSBhcmVhLgogICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBl bWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2UKLSAqIG90aGVyd2lzZS4K KyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBhdXRvdmFjdXVtIGlzIHJlcXVpcmVkIGFu ZCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sCiBTZXRPZmZzZXRWYWN1dW1MaW1p dChib29sIGlzX3N0YXJ0dXApCkBAIC0yNjUzLDggKzI3MTksNiBAQCBTZXRPZmZzZXRWYWN1dW1M aW1pdChib29sIGlzX3N0YXJ0dXApCiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAJYm9v bAkJb2xkZXN0T2Zmc2V0S25vd24gPSBmYWxzZTsKIAlib29sCQlwcmV2T2xkZXN0T2Zmc2V0S25v d247Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0b3BMaW1pdCA9IDA7Ci0JTXVsdGlYYWN0T2Zm c2V0IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAKIAkvKgogCSAqIE5COiBIYXZlIHRvIHByZXZlbnQg Y29uY3VycmVudCB0cnVuY2F0aW9uLCB3ZSBtaWdodCBvdGhlcndpc2UgdHJ5IHRvCkBAIC0yNjY5 LDcgKzI3MzMsNiBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJbmV4 dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwogCXByZXZPbGRlc3RPZmZzZXRL bm93biA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93bjsKIAlwcmV2T2xkZXN0T2Zm c2V0ID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldDsKLQlwcmV2T2Zmc2V0U3RvcExpbWl0 ID0gTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdDsKIAlBc3NlcnQoTXVsdGlYYWN0U3Rh dGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsK IApAQCAtMjcwMCwxMSArMjc2Myw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3Rh cnR1cCkKIAkJb2xkZXN0T2Zmc2V0S25vd24gPQogCQkJZmluZF9tdWx0aXhhY3Rfc3RhcnQob2xk ZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpOwogCi0JCWlmIChvbGRlc3RPZmZzZXRLbm93 bikKLQkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQkoZXJybXNnX2ludGVybmFsKCJvbGRlc3QgTXVs dGlYYWN0SWQgbWVtYmVyIGlzIGF0IG9mZnNldCAldSIsCi0JCQkJCQkJCQkgb2xkZXN0T2Zmc2V0 KSkpOwotCQllbHNlCisJCWlmICghb2xkZXN0T2Zmc2V0S25vd24pCiAJCQllcmVwb3J0KExPRywK IAkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFy ZSBkaXNhYmxlZCBiZWNhdXNlIG9sZGVzdCBjaGVja3BvaW50ZWQgTXVsdGlYYWN0ICV1IGRvZXMg bm90IGV4aXN0IG9uIGRpc2siLAogCQkJCQkJCW9sZGVzdE11bHRpWGFjdElkKSkpOwpAQCAtMjcx NywyNCArMjc3Niw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAkg KiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJlYS4gV2UgY2FuIG9u bHkgZG8gc28gaWYgdGhlCiAJICogb2xkZXN0IG9mZnNldCBpcyBrbm93biB0aG91Z2guCiAJICov Ci0JaWYgKG9sZGVzdE9mZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNrIHRvIHN0YXJ0IG9m IHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0ID0gb2xkZXN0 T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElYQUNUX01FTUJFUlNf UEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyogYWx3YXlzIGxlYXZl IG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwotCQlvZmZzZXRTdG9w TGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19QRVJfU0VH TUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlzX3N0YXJ0dXApCi0J CQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5k IHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0J CQkJKGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0IG1lbWJlciBzdG9wIGxpbWl0IGlzIG5vdyAl dSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJCQkJCQkgb2Zmc2V0U3RvcExpbWl0LCBvbGRl c3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9mZnNldEtub3duKQor CWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCiAJewogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQg dG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhhdmUgYQpAQCAtMjc0 NCw2OSArMjc4NiwxOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJ CSAqLwogCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0OwogCQlvbGRlc3RPZmZzZXRL bm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAJ fQogCiAJLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQgdmFsdWVzICovCiAJTFdMb2NrQWNxdWlyZShN dWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RP ZmZzZXQgPSBvbGRlc3RPZmZzZXQ7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3du ID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCA9 IG9mZnNldFN0b3BMaW1pdDsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJ LyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5jeSBhdXRvdmFjdXVtPwlJZiB3ZSdyZSBub3Qg c3VyZSwgYXNzdW1lIHllcy4KKwkgKiBEbyB3ZSBuZWVkIGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5v dCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwogCXJldHVybiAhb2xkZXN0T2Zmc2V0S25vd24gfHwK LQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhS RVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFkZGluZyAiZGlzdGFuY2UiIHRv ICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIuCi0gKgotICogV2UgdXNlIHRoaXMg dG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGlzICJ3cmFwcGluZyBhcm91bmQiIHRo ZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRoZSBuYW1lLiAgVGhlIHJlYXNvbiB3ZSBkb24n dCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICogMl4zMS1tb2R1bG8gYXJpdGhtZXRpYyBoZXJl IGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgd2hvbGUgb2YKLSAqIHRoZSAy XjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dpbmcgZm9yIG1vcmUgbXVsdGl4YWN0cyB0aGFuIHdvdWxk IGZpdAotICogb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0T2Zmc2V0V291 bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LAot CQkJCQkJIHVpbnQzMiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgZmluaXNoOwotCi0J LyoKLQkgKiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2VkIChzZWUgR2V0TXVs dGlYYWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3JhcHMgYXJvdW5kIHRo ZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwotCWZpbmlzaCA9IHN0 YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5pc2grKzsKLQotCS8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxseSBncmVh dGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1ZSBudW1lcmljYWxseSBi ZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8LS0tLVMtLS0tQi0tLS0+ Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlOVF9NQVgpCi0JICoJCSBb LS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0tLV0gPSBGIHdyYXBwZWQgcGFzdCBC Ci0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxseSBsZXNzIHRoYW4gdGhl IHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAqIFVJTlRfTUFYIHdyYXBhcm91bmQgb2NjdXJz IHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFsbCB2YWx1ZXMgaW4KLQkgKiBiZXR3ZWVuIGFy ZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1CLS0tLVMtLS0tPgotCSAqCVstLS0pCQkJID0gRiBu b3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3cmFwcGVkIHBhc3QgVUlOVF9NQVgpCi0JICoJCSBbLS0t KQkJID0gRiB3cmFwcGVkIHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJICBbLS0tLV0gPSBG IG5vdCB3cmFwcGVkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChzdGFydCA8IGJvdW5k YXJ5KQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8IHN0YXJ0OwotCWVs c2UKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBzdGFydDsKKwkJKG5l eHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNI T0xEKTsKIH0KIAogLyoKQEAgLTI4MjUsNyArMjgxNyw2IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0 KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlpbnQ2NAkJcGFn ZW5vOwogCWludAkJCWVudHJ5bm87CiAJaW50CQkJc2xvdG5vOwotCU11bHRpWGFjdE9mZnNldCAq b2ZmcHRyOwogCiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXApOwogCkBA IC0yODQzLDkgKzI4MzQsOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0 aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAKIAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNp bXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIG11bHRpKTsKLQlvZmZwdHIgPSAo TXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7CisKKwlv ZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKKwogCUxXTG9ja1JlbGVhc2Uo U2ltcGxlTHJ1R2V0QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKTsKIAogCSpy ZXN1bHQgPSBvZmZzZXQ7CkBAIC0yODkzLDczICsyODg0LDYgQEAgR2V0TXVsdGlYYWN0SW5mbyh1 aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhl IG11bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIgdGhhbiBldmVyeSBk YXRtaW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB2 YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1 cmUgd2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBh dCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAqIHRoaXMgd2lsbCBhbHNvIGJl IHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMuCi0gKiBI b3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVycywgd2UgbWln aHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVu b3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIgcmVsbWlu bXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3ZSdkIGhhdmUgbm8K LSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3JlYXRpbmcgb3BlcmF0 aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwgaWYgbW9yZSB0aGFu IGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2UgaXMKLSAqIHVzZWQsIHdl IGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBh bmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBtdWx0aXhhY3Rz IGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRv dmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxt aW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJl bW92aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBt ZW1iZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFn Z3Jlc3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1 dG92YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVt cyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBiZWNh dXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUgdGFibGUg YW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZl Ci0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJl dHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVlemVfbWF4 X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFibGUgd2lsbCBmcmVl emUgZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQKLU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVz aG9sZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNldCBtZW1iZXJzOwotCXVpbnQzMgkJbXVsdGl4 YWN0czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhhY3RzOwotCWRvdWJsZQkJZnJhY3Rpb247Ci0J aW50CQkJcmVzdWx0OwotCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwotCU11bHRpWGFj dE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0KLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVy IHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0TXVsdGlY YWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVz dE9mZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9u IGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0JaWYgKG1lbWJlcnMg PD0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJuIGF1dG92YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRlIGEgdGFyZ2V0IGZv ciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0aXhhY3RzCi0JICog d2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQgb24gaG93IGZhciB3 ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQuCi0JICovCi0J ZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJF U0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRCAtIE1VTFRJWEFD VF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZpY3RpbV9tdWx0aXhhY3RzID0gbXVsdGl4YWN0 cyAqIGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24gY291bGQgYmUgPiAxLjAsIGJ1dCBsb3dlc3Qg cG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCi0JaWYgKHZpY3RpbV9tdWx0aXhhY3RzID4g bXVsdGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVzdWx0ID0gbXVsdGl4YWN0cyAtIHZpY3RpbV9t dWx0aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0byBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZlciBtYWtlCi0JICogYXV0b3ZhY3V1bSBsZXNzIGFn Z3Jlc3NpdmUgdGhhbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUuCi0JICovCi0JcmV0dXJuIE1pbihy ZXN1bHQsIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsKLX0KLQogdHlwZWRl ZiBzdHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlzdGluZ1BhZ2U7CkBA IC0zMTU5LDcgKzMwODMsNyBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRl c3RNdWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAKIAllbG9nKERFQlVHMSwgInBlcmZvcm1p bmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRz IHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCSAibWVtYmVycyBbJXUs ICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCisJCSAi bWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIg UFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCSBvbGRlc3RNdWx0aSwgbmV3T2xkZXN0TXVsdGks CiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChvbGRlc3RNdWx0aSksCiAJCSBNdWx0aVhh Y3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSksCkBAIC0zMjkwLDcgKzMyMTQsNyBA QCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhh Y3RJZCBtdWx0aTIpCiBzdGF0aWMgYm9vbAogTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlY YWN0T2Zmc2V0IG9mZnNldDEsIE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQogewotCWludDMyCQlk aWZmID0gKGludDMyKSAob2Zmc2V0MSAtIG9mZnNldDIpOworCWludDY0CQlkaWZmID0gKGludDY0 KSAob2Zmc2V0MSAtIG9mZnNldDIpOwogCiAJcmV0dXJuIChkaWZmIDwgMCk7CiB9CkBAIC0zMzg3 LDcgKzMzMTEsNyBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAog CQllbG9nKERFQlVHMSwgInJlcGxheWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkJICJv ZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0 ICIpLCAiCi0JCQkgIm1lbWJlcnMgWyV1LCAldSksIG1lbWJlcnMgc2VnbWVudHMgWyUiIFBSSXg2 NCAiLCAlIiBQUkl4NjQgIikiLAorCQkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0 ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKIAkJCSB4 bHJlYy5zdGFydFRydW5jT2ZmLCB4bHJlYy5lbmRUcnVuY09mZiwKIAkJCSBNdWx0aVhhY3RJZFRv T2Zmc2V0U2VnbWVudCh4bHJlYy5zdGFydFRydW5jT2ZmKSwKIAkJCSBNdWx0aVhhY3RJZFRvT2Zm c2V0U2VnbWVudCh4bHJlYy5lbmRUcnVuY09mZiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dyZWNvdmVyeS5jCmluZGV4IDBhNWFlNTA1MGM0Li41YTRiMmM4YjM4NyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTg4NSw3ICs4ODUsNyBAQCBJ bml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1 dGRvd25fcHRyLAogCQkJCQkJCSBVNjRGcm9tRnVsbFRyYW5zYWN0aW9uSWQoY2hlY2tQb2ludC5u ZXh0WGlkKSwKIAkJCQkJCQkgY2hlY2tQb2ludC5uZXh0T2lkKSkpOwogCWVyZXBvcnQoREVCVUcx LAotCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlY YWN0T2Zmc2V0OiAldSIsCisJCQkoZXJybXNnX2ludGVybmFsKCJuZXh0IE11bHRpWGFjdElkOiAl dTsgbmV4dCBNdWx0aVhhY3RPZmZzZXQ6ICUiIFBSSXU2NCwKIAkJCQkJCQkgY2hlY2tQb2ludC5u ZXh0TXVsdGksIGNoZWNrUG9pbnQubmV4dE11bHRpT2Zmc2V0KSkpOwogCWVyZXBvcnQoREVCVUcx LAogCQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IHVuZnJvemVuIHRyYW5zYWN0aW9uIElEOiAl dSwgaW4gZGF0YWJhc2UgJXUiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBlZDAzZTNiZDUwZC4u MjU5ZWY2MGJkMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2 YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1z LAogCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQg bWF5IGJlIGxlc3MgaWYgd2UgYXJlCiAJICogc2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFj ZS4KIAkgKi8KLQllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gTXVsdGlYYWN0 TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CisJZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4 X2FnZSA9IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwogCiAJLyoKIAkgKiBB bG1vc3QgcmVhZHkgdG8gc2V0IGZyZWV6ZSBvdXRwdXQgcGFyYW1ldGVyczsgY2hlY2sgaWYgT2xk ZXN0WG1pbiBvcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCA1OWVjNDVhNGU5 Ni4uMjEyZTZlM2IxM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC0xMTUx LDcgKzExNTEsNyBAQCBkb19zdGFydF93b3JrZXIodm9pZCkKIAogCS8qIEFsc28gZGV0ZXJtaW5l IHRoZSBvbGRlc3QgZGF0bWlubXhpZCB3ZSB3aWxsIGNvbnNpZGVyLiAqLwogCXJlY2VudE11bHRp ID0gUmVhZE5leHRNdWx0aVhhY3RJZCgpOwotCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRp IC0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CisJbXVsdGlGb3JjZUxpbWl0ID0g cmVjZW50TXVsdGkgLSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAlpZiAo bXVsdGlGb3JjZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJbXVsdGlGb3JjZUxpbWl0IC09 IEZpcnN0TXVsdGlYYWN0SWQ7CiAKQEAgLTE5MzksNyArMTkzOSw3IEBAIGRvX2F1dG92YWN1dW0o dm9pZCkKIAkgKiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwg YnV0IG1heSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIg c3BhY2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRp WGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXpl X21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAogCS8qCiAJ ICogRmluZCB0aGUgcGdfZGF0YWJhc2UgZW50cnkgYW5kIHNlbGVjdCB0aGUgZGVmYXVsdCBmcmVl emUgYWdlcy4gV2UgdXNlCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2Nv bnRyb2xkYXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKaW5k ZXggMTBkZTA1OGNlOTEuLjUyOTUxMDhhZGUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NvbnRy b2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19j b250cm9sZGF0YS5jCkBAIC0yNjQsNyArMjY0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE9pZCk7CiAJcHJpbnRm KF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVcbiIpLAogCQkgICBD b250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlwcmludGYoXygiTGF0ZXN0 IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiksCisJcHJpbnRmKF8oIkxhdGVz dCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJSIgUFJJdTY0ICJcbiIpLAogCQkgICBD b250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAlwcmludGYoXygi TGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiksCiAJCSAgIENvbnRy b2xGaWxlLT5jaGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19yZXNldHdhbC9wZ19yZXNldHdhbC5jIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdh bC5jCmluZGV4IGE4OWQ3MmZjNWNmLi40ZTVlZWNlZDg5ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19yZXNldHdhbC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVz ZXR3YWwuYwpAQCAtMjY3LDcgKzI2Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAogCQkJY2FzZSAnTyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teG9mZiA9IHN0cnRvdWwo b3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRfbXhvZmYgPSBzdHJ0b3U2NChvcHRhcmcsICZl bmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8 fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50 IGZvciBvcHRpb24gJXMiLCAiLU8iKTsKQEAgLTc0Myw3ICs3NDMsNyBAQCBQcmludENvbnRyb2xW YWx1ZXMoYm9vbCBndWVzc2VkKQogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0 T2lkKTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlYYWN0SWQ6ICAl dVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7Ci0JcHJp bnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXBy aW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAi XG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsK IAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiks CiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdFhpZCk7CkBAIC04MTcsNyAr ODE3LDcgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQpCiAKIAlpZiAoc2V0X214b2ZmICE9 IC0xKQogCXsKLQkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAgICAgICAgICAgICAg ICAgJXVcbiIpLAorCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAg ICAgICAlIiBQUkl1NjQgIlxuIiksCiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5u ZXh0TXVsdGlPZmZzZXQpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90 LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKaW5kZXgg ZDZiYmJkMGNlZGEuLjE2YjVhNjIzOTAwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2Fs L3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwK QEAgLTIxMyw3ICsyMTMsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVkLCVkIiwgaGV4KCRm aWxlc1swXSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxlc1stMV0pKTsKIAog QGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZzZXRzJyk7Ci0kbXVsdCA9 IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogKCRibGNrc3ogLSA4KSAvIDQ7CiAjIC0t bXVsdGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNtZCwKICAgJy0tbXVs dGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCmluZGV4 IDgyZTRiYjkwZGQ1Li4xNmEwNzcyMzA4OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaApAQCAtMjgs NyArMjgsNyBAQAogCiAjZGVmaW5lIE11bHRpWGFjdElkSXNWYWxpZChtdWx0aSkgKChtdWx0aSkg IT0gSW52YWxpZE11bHRpWGFjdElkKQogCi0jZGVmaW5lIE1heE11bHRpWGFjdE9mZnNldAkoKE11 bHRpWGFjdE9mZnNldCkgMHhGRkZGRkZGRikKKyNkZWZpbmUgTWF4TXVsdGlYYWN0T2Zmc2V0CVVJ TlQ2NENPTlNUKDB4RkZGRkZGRkZGRkZGRkZGRikKIAogLyoKICAqIFBvc3NpYmxlIG11bHRpeGFj dCBsb2NrIG1vZGVzICgic3RhdHVzIikuICBUaGUgZmlyc3QgZm91ciBtb2RlcyBhcmUgZm9yCkBA IC0xNDcsNyArMTQ3LDYgQEAgZXh0ZXJuIHZvaWQgTXVsdGlYYWN0U2V0TmV4dE1YYWN0KE11bHRp WGFjdElkIG5leHRNdWx0aSwKIGV4dGVybiB2b2lkIE11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3Qo TXVsdGlYYWN0SWQgbWluTXVsdGksCiAJCQkJCQkJCQkgIE11bHRpWGFjdE9mZnNldCBtaW5NdWx0 aU9mZnNldCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZhbmNlT2xkZXN0KE11bHRpWGFjdElk IG9sZGVzdE11bHRpLCBPaWQgb2xkZXN0TXVsdGlEQik7Ci1leHRlcm4gaW50CU11bHRpWGFjdE1l bWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbXVsdGl4YWN0X3R3b3Bo YXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2IGluZm8sCiAJCQkJCQkJ CQkgICB2b2lkICpyZWNkYXRhLCB1aW50MzIgbGVuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2MuaCBiL3NyYy9pbmNsdWRlL2MuaAppbmRleCA3NTdkZmZmNDc4Mi4uYmM5MmE2ZjQ1NjUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2MuaAorKysgYi9zcmMvaW5jbHVkZS9jLmgKQEAgLTY3MCw3 ICs2NzAsNyBAQCB0eXBlZGVmIHVpbnQzMiBTdWJUcmFuc2FjdGlvbklkOwogLyogTXVsdGlYYWN0 SWQgbXVzdCBiZSBlcXVpdmFsZW50IHRvIFRyYW5zYWN0aW9uSWQsIHRvIGZpdCBpbiB0X3htYXgg Ki8KIHR5cGVkZWYgVHJhbnNhY3Rpb25JZCBNdWx0aVhhY3RJZDsKIAotdHlwZWRlZiB1aW50MzIg TXVsdGlYYWN0T2Zmc2V0OwordHlwZWRlZiB1aW50NjQgTXVsdGlYYWN0T2Zmc2V0OwogCiB0eXBl ZGVmIHVpbnQzMiBDb21tYW5kSWQ7CiAKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --0000000000006f85360642c63cc7 Content-Type: application/octet-stream; name="v21-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v21-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkpffef1 RnJvbSA4ZjVlODhiMjA0MWUwNjJhNTljZWFmNjkyODgwODIxZDIzMTZkZDBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMSAyLzNd IEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMKCkF1dGhvcjogTWF4 aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtraSBMaW5uYWthbmdhcyA8 aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jIHwgIDM1ICstLQogc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlICAgICAgICAgICAgfCAg IDMgKwogc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDMgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYyAgICAgfCAyNTMgKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oICAgICB8ICAzMSArKysK IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMgICAgIHwgMjk2ICsrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmggICAgIHwg IDMxICsrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgfCAxMDggKysr KysrKystCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oICAgICAgICB8ICAgNSArCiBz cmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jICAgICAgICAgICB8IDI0MCArKysrKysrKysrKysr KysrKysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAgICAgICAgICAgfCAgMzAgKysr CiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKaW5kZXggMWY1OTU4N2M0MmUuLjZhODY1YmEyMDU5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMTM1Myw3ICsxMzUzLDYgQEAgR2V0TXVsdGlY YWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJz LAogCWludAkJCXNsb3RubzsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0 aDsKLQlpbnQJCQl0cnVlbGVuZ3RoOwogCU11bHRpWGFjdElkIG9sZGVzdE1YYWN0OwogCU11bHRp WGFjdElkIG5leHRNWGFjdDsKIAlNdWx0aVhhY3RJZCB0bXBNWGFjdDsKQEAgLTE0NTIsMTUgKzE0 NTEsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFj dE1lbWJlciAqKm1lbWJlcnMsCiAJICogd2UgaGF2ZSBqdXN0IGZvciB0aGlzOyB0aGUgcHJvY2Vz cyBpbiBjaGFyZ2Ugd2lsbCBzaWduYWwgdGhlIENWIGFzIHNvb24KIAkgKiBhcyBpdCBoYXMgZmlu aXNoZWQgd3JpdGluZyB0aGUgbXVsdGl4YWN0IG9mZnNldC4KIAkgKgotCSAqIDMuIEJlY2F1c2Ug R2V0TmV3TXVsdGlYYWN0SWQgaW5jcmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRv Ci0JICogaGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2lu dCBvZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mg b2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9p bnQsIG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGluY3JlbWVu dD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0 aAotCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5k IHplcm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEg bXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKLQkgKiByZWFkIGEgemVybyBmcm9t IHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KLQkgKgogCSAqIFRoaXMgaXMgYWxs IHByZXR0eSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29y bmVyCiAJICogY2FzZXMsIHNvIGl0IHNlZW1zIGJldHRlciB0aGFuIGhvbGRpbmcgdGhlIE11bHRp WGFjdEdlbkxvY2sgZm9yIGEgbG9uZwogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0 aW9uLgpAQCAtMTU0NCw2ICsxNTM0LDkgQEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShsb2NrKTsK IAlsb2NrID0gTlVMTDsKIAorCS8qIEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxk IG5vdCBoYXBwZW4gKi8KKwlBc3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgogCSAqIElmIHdlIHNs ZXB0IGFib3ZlLCBjbGVhbiB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIgbmVlZGVkLgogCSAqLwpA QCAtMTU1Miw3ICsxNTQ1LDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICop IHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7CiAKLQl0cnVlbGVuZ3Ro ID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBp KyssIG9mZnNldCsrKQogCXsKQEAgLTE1OTAsMzYgKzE1ODIsMjcgQEAgcmV0cnk6CiAJCXhhY3Rw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKIAotCQlpZiAoIVRyYW5zYWN0aW9uSWRJ c1ZhbGlkKCp4YWN0cHRyKSkKLQkJewotCQkJLyogQ29ybmVyIGNhc2UgMzogd2UgbXVzdCBiZSBs b29raW5nIGF0IHVudXNlZCBzbG90IHplcm8gKi8KLQkJCUFzc2VydChvZmZzZXQgPT0gMCk7Ci0J CQljb250aW51ZTsKLQkJfQorCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIp KTsKIAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlic2hp ZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwogCQlmbGFnc3B0ciA9ICh1aW50 MzIgKikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsg ZmxhZ3NvZmYpOwogCi0JCXB0clt0cnVlbGVuZ3RoXS54aWQgPSAqeGFjdHB0cjsKLQkJcHRyW3Ry dWVsZW5ndGhdLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9Y QUNUX0JJVE1BU0s7Ci0JCXRydWVsZW5ndGgrKzsKKwkJcHRyW2ldLnhpZCA9ICp4YWN0cHRyOwor CQlwdHJbaV0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hB Q1RfQklUTUFTSzsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKGxvY2spOwogCi0JLyogQSBtdWx0aXhp ZCB3aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLwotCUFzc2VydCh0cnVlbGVu Z3RoID4gMCk7Ci0KIAkvKgogCSAqIENvcHkgdGhlIHJlc3VsdCBpbnRvIHRoZSBsb2NhbCBjYWNo ZS4KIAkgKi8KLQltWGFjdENhY2hlUHV0KG11bHRpLCB0cnVlbGVuZ3RoLCBwdHIpOworCW1YYWN0 Q2FjaGVQdXQobXVsdGksIGxlbmd0aCwgcHRyKTsKIAogCWRlYnVnX2Vsb2czKERFQlVHMiwgIkdl dE1lbWJlcnM6IG5vIGNhY2hlIGZvciAlcyIsCi0JCQkJbXhpZF90b19zdHJpbmcobXVsdGksIHRy dWVsZW5ndGgsIHB0cikpOworCQkJCW14aWRfdG9fc3RyaW5nKG11bHRpLCBsZW5ndGgsIHB0cikp OwogCSptZW1iZXJzID0gcHRyOwotCXJldHVybiB0cnVlbGVuZ3RoOworCXJldHVybiBsZW5ndGg7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUgYi9zcmMv YmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKaW5kZXggNjlmY2Y1OTNjYWUuLjQyOTk1ZDUzYjBiIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ191 cGdyYWRlL01ha2VmaWxlCkBAIC0xOCwxMSArMTgsMTQgQEAgT0JKUyA9IFwKIAlmaWxlLm8gXAog CWZ1bmN0aW9uLm8gXAogCWluZm8ubyBcCisJbXVsdGl4YWN0X25ldy5vIFwKKwltdWx0aXhhY3Rf b2xkLm8gXAogCW9wdGlvbi5vIFwKIAlwYXJhbGxlbC5vIFwKIAlwZ191cGdyYWRlLm8gXAogCXJl bGZpbGVudW1iZXIubyBcCiAJc2VydmVyLm8gXAorCXNscnVfaW8ubyBcCiAJdGFibGVzcGFjZS5v IFwKIAl0YXNrLm8gXAogCXV0aWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUv bWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKaW5kZXggYWM5OTJm MGQxNGIuLjNlNDZjNDUxMmNmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24u YnVpbGQKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCkBAIC04LDExICs4LDE0 IEBAIHBnX3VwZ3JhZGVfc291cmNlcyA9IGZpbGVzKAogICAnZmlsZS5jJywKICAgJ2Z1bmN0aW9u LmMnLAogICAnaW5mby5jJywKKyAgJ211bHRpeGFjdF9uZXcuYycsCisgICdtdWx0aXhhY3Rfb2xk LmMnLAogICAnb3B0aW9uLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ191cGdyYWRlLmMnLAog ICAncmVsZmlsZW51bWJlci5jJywKICAgJ3NlcnZlci5jJywKKyAgJ3NscnVfaW8uYycsCiAgICd0 YWJsZXNwYWNlLmMnLAogICAndGFzay5jJywKICAgJ3V0aWwuYycsCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRp eGFjdF9uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDdhNThh NzVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25l dy5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogbXVsdGl4YWN0X25ldy5jCisgKgorICogUmV3 cml0ZSBwcmUtdjE5IG11bHRpeGFjdHMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJpdCBNdWx0aVhh Y3RPZmZzZXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwor ICovCisKKyNpbmNsdWRlICJtdWx0aXhhY3RfbmV3LmgiCisKKy8qCisgKiBOT1RFOiBCZWxvdyBh cmUgYSBidW5jaCBvZiBkZWZpbml0aW9ucyBhbmQgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgdGhh dCBhcmUKKyAqIGNvcHktcGFzdGVkIGZyb20gbXVsdGl4YWN0LmMKKyAqLwordHlwZWRlZiBpbnQz MiBTaG9ydE11bHRpWGFjdE9mZnNldDsKKworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZz ZXQsIDggYnl0ZXMgZm9yIHRoZSBiYXNlICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BF Ul9QQUdFCQlcCisJKChCTENLU1ogLSBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkgLyBzaXplb2Yo U2hvcnRNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJ ZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFj dElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBl ciB4YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1C RVJfQklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRF CQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1C RVJfQklUU19QRVJfWEFDVCkgLSAxKQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdz IGFyZSB0aGVyZSBpbiBhIGdyb3VwPyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BF Ul9HUk9VUAkJNAorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAor CShNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJf QllURSkKKy8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVS X0dST1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1og LyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNf UEVSX1BBR0UJXAorCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQorCisvKgorICogQmVjYXVzZSB0aGUgbnVtYmVyIG9m IGl0ZW1zIHBlciBwYWdlIGlzIG5vdCBhIGRpdmlzb3Igb2YgdGhlIGxhc3QgaXRlbQorICogbnVt YmVyIChtZW1iZXIgMHhGRkZGRkZGRiksIHRoZSBsYXN0IHNlZ21lbnQgZG9lcyBub3QgdXNlIHRo ZSBtYXhpbXVtIG51bWJlcgorICogb2YgcGFnZXMsIGFuZCBtb3Jlb3ZlciB0aGUgbGFzdCB1c2Vk IHBhZ2UgdGhlcmVpbiBkb2VzIG5vdCB1c2UgdGhlIHNhbWUKKyAqIG51bWJlciBvZiBpdGVtcyBh cyBwcmV2aW91cyBwYWdlcy4gIChBbm90aGVyIHdheSB0byBzYXkgaXQgaXMgdGhhdCB0aGUKKyAq IDB4RkZGRkZGRkYgbWVtYmVyIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0 IHBhZ2UsIHNvIHRoZSBwYWdlCisgKiBoYXMgc29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0 ZW0uKQorICoKKyAqIFRoaXMgY29uc3RhbnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRo ZSBsYXN0IHBhZ2Ugb2YgdGhlIGxhc3Qgc2VnbWVudC4KKyAqLworI2RlZmluZSBNQVhfTUVNQkVS U19JTl9MQVNUX01FTUJFUlNfUEFHRSBcCisJCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfUEFHRSkgKyAxKSkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJl ciBpcyB0byBiZSBmb3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJl clBhZ2UoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElY QUNUX01FTUJFUlNfUEVSX1BBR0U7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRo aW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGlu ZSBpbnQKK01YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQorewor CU11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUFNfUEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9N RU1CRVJHUk9VUF9TSVpFOworCisJcmV0dXJuIGJ5dGVvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQorewor CWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUDsKKwlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1C RVJfQklUU19QRVJfWEFDVDsKKworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qIExvY2F0aW9uIChi eXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIg Ki8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9m ZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElY QUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09m ZnNldChvZmZzZXQpICsKKwkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1i ZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKKy8qCisgKiBUbyBhdm9p ZCBkaXZpbmcgZGVlcCBpbnRvIGFkZHJlc3MgYXJpdGhtZXRpYywgd2UgZGVjbGFyZSBhbiBhdXhp bGlhcnkKKyAqIHN0cnVjdHVyZSB0aGF0IGFjY2VzcyB0aGUgTXVsdGlYYWN0T2Zmc2V0IFNMUlUg cGFnZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UKK3sKKwlN dWx0aVhhY3RPZmZzZXQJCQliYXNlOworCVNob3J0TXVsdGlYYWN0T2Zmc2V0CW9mZnNldFtGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOworfSBNdWx0aVhhY3RPZmZzZXRTTFJVUGFnZTsKKworc3RhdGlj IGlubGluZSB2b2lkCitNWE9mZnNldFdyaXRlKGNoYXIgKmJ1ZiwgaW50IGVudHJ5bm8sIE11bHRp WGFjdE9mZnNldCBvZmZzZXQpCit7CisJTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKnBhZ2UgPSAo TXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKikgYnVmOworCisJaWYgKHBhZ2UtPmJhc2UgIT0gMCkK KwkJcGFnZS0+b2Zmc2V0W2VudHJ5bm9dID0gb2Zmc2V0IC0gcGFnZS0+YmFzZTsKKwllbHNlCisJ eworCQlwYWdlLT5iYXNlID0gb2Zmc2V0OworCQlwYWdlLT5vZmZzZXRbZW50cnlub10gPSAwOwor CX0KKworCS8qCisJICogV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuaW5pdGVkIHZh bHVlIGFuZCBub3QgeWV0IHdyaXR0ZW4gb2Zmc2V0LgorCSAqIFNlZSBjYXNlIDIgaW4gR2V0TXVs dGlYYWN0SWRNZW1iZXJzLgorCSAqCisJICogU28sIG1hcmsgdGhpcyBvZmZzZXQgaW5pdGVkLgor CSAqLworCXBhZ2UtPm9mZnNldFtlbnRyeW5vXSBePSAweDgwMDAwMDAwOworfQorCitNdWx0aVhh Y3RXcml0ZXIgKgorQWxsb2NNdWx0aVhhY3RXcml0ZShjaGFyICpwZ2RhdGEsIE11bHRpWGFjdElk IGZpcnN0TXVsdGksCisJCQkJCU11bHRpWGFjdE9mZnNldCBmaXJzdE9mZnNldCkKK3sKKwlNdWx0 aVhhY3RXcml0ZXIgKnN0YXRlID0gc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOwor CWNoYXIJCQkJZGlyW01BWFBHUEFUSF0gPSB7MH07CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gZmly c3RNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNldCA9IGZpcnN0T2Zmc2V0OworCisJcGdfc3ByaW50 ZihkaXIsICIlcy9wZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIHBnZGF0YSk7CisJc3RhdGUtPm9mZnNl dCA9IEFsbG9jU2xydVdyaXRlKGRpciwgZmFsc2UpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9w Z19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1Ns cnVXcml0ZShkaXIsIHRydWUgLyogdXNlIGxvbmcgc2VnbWVudCBuYW1lcyAqLyk7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKKy8qCisgKiBTaW1wbGlmaWVkIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRp bmcgc2VydmVyIGZ1bmN0aW9uCisgKi8KK011bHRpWGFjdElkCitHZXROZXdNdWx0aVhhY3RJZChN dWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zm c2V0KQoreworCU11bHRpWGFjdElkCQlyZXN1bHQ7CisKKwkvKiBIYW5kbGUgd3JhcGFyb3VuZCBv ZiB0aGUgbmV4dE1YYWN0IGNvdW50ZXIgKi8KKwlpZiAoc3RhdGUtPm5leHRNWGFjdCA8IEZpcnN0 TXVsdGlYYWN0SWQpCisJCXN0YXRlLT5uZXh0TVhhY3QgPSBGaXJzdE11bHRpWGFjdElkOworCisJ LyogQXNzaWduIHRoZSBNWElEICovCisJcmVzdWx0ID0gc3RhdGUtPm5leHRNWGFjdDsKKworCS8q IFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92ZS4gKi8KKwkqb2Zm c2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIEFkdmFuY2UgY291bnRlcnMuICBB cyBpbiBHZXROZXdUcmFuc2FjdGlvbklkKCksIHRoaXMgbXVzdCBub3QgaGFwcGVuCisJICogdW50 aWwgYWZ0ZXIgZmlsZSBleHRlbnNpb24gaGFzIHN1Y2NlZWRlZCEKKwkgKgorCSAqIFdlIGRvbid0 IGNhcmUgYWJvdXQgTXVsdGlYYWN0SWQgd3JhcGFyb3VuZCBoZXJlOyBpdCB3aWxsIGJlIGhhbmRs ZWQgYnkKKwkgKiB0aGUgbmV4dCBpdGVyYXRpb24uICBCdXQgbm90ZSB0aGF0IG5leHRNWGFjdCBt YXkgYmUgSW52YWxpZE11bHRpWGFjdElkCisJICogb3IgdGhlIGZpcnN0IHZhbHVlIG9uIGEgc2Vn bWVudC1iZWdpbm5pbmcgcGFnZSBhZnRlciB0aGlzIHJvdXRpbmUKKwkgKiBleGl0cywgc28gYW55 b25lIGVsc2UgbG9va2luZyBhdCB0aGUgdmFyaWFibGUgbXVzdCBiZSBwcmVwYXJlZCB0byBkZWFs CisJICogd2l0aCBlaXRoZXIgY2FzZS4gIFNpbWlsYXJseSwgbmV4dE9mZnNldCBtYXkgYmUgemVy bywgYnV0IHdlIHdvbid0IHVzZQorCSAqIHRoYXQgYXMgdGhlIGFjdHVhbCBzdGFydCBvZmZzZXQg b2YgdGhlIG5leHQgbXVsdGl4YWN0LgorCSAqLworCShzdGF0ZS0+bmV4dE1YYWN0KSsrOworCisJ c3RhdGUtPm5leHRPZmZzZXQgKz0gbm1lbWJlcnM7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KgorICogV3JpdGUgYSBuZXcgbXVsdGl4YWN0IHdpdGggbWVtYmVycy4KKyAqCisgKiBTaW1wbGlm aWVkIHZlcnNpb24gb2YgdGhlIGNvcnJlc3BvZGluZyBzZXJ2ZXIgZnVuY3Rpb24sIGhlbmNlIHRo ZSBuYW1lLgorICovCit2b2lkCitSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0V3JpdGVyICpz dGF0ZSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKKwkJCQkgICBNdWx0aVhhY3RJZCBtdWx0aSwg aW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCit7CisJaW50NjQJCXBhZ2Vu bzsKKwlpbnQ2NAkJcHJldl9wYWdlbm87CisJaW50CQkJZW50cnlubywKKwkJCQlpOworCWNoYXIJ ICAgKmJ1ZjsKKworCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwll bnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVX cml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlNWE9mZnNldFdyaXRlKGJ1 ZiwgZW50cnlubywgb2Zmc2V0KTsKKworCXByZXZfcGFnZW5vID0gLTE7CisKKwlmb3IgKGkgPSAw OyBpIDwgbm1lbWJlcnM7IGkrKywgb2Zmc2V0KyspCisJeworCQlUcmFuc2FjdGlvbklkICptZW1i ZXJwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJCXVpbnQzMgkJZmxhZ3N2YWw7CisJCWlu dAkJCWJzaGlmdDsKKwkJaW50CQkJZmxhZ3NvZmY7CisJCWludAkJCW1lbWJlcm9mZjsKKworCQlB c3NlcnQobWVtYmVyc1tpXS5zdGF0dXMgPD0gTXVsdGlYYWN0U3RhdHVzVXBkYXRlKTsKKworCQlw YWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpOworCQltZW1iZXJvZmYgPSBNWE9m ZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7CisJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdz T2Zmc2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNl dCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJeworCQkJYnVmID0gU2xydVdy aXRlU3dpdGNoUGFnZShzdGF0ZS0+bWVtYmVycywgcGFnZW5vKTsKKwkJCXByZXZfcGFnZW5vID0g cGFnZW5vOworCQl9CisKKwkJbWVtYmVycHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1l bWJlcm9mZik7CisKKwkJKm1lbWJlcnB0ciA9IG1lbWJlcnNbaV0ueGlkOworCisJCWZsYWdzcHRy ID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYpOworCisJCWZsYWdzdmFsID0gKmZsYWdzcHRy OworCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAx KSA8PCBic2hpZnQpOworCQlmbGFnc3ZhbCB8PSAobWVtYmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0 KTsKKwkJKmZsYWdzcHRyID0gZmxhZ3N2YWw7CisJfQorfQorCit2b2lkCitGcmVlTXVsdGlYYWN0 V3JpdGUoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSkKK3sKKwlGcmVlU2xydVdyaXRlKHN0YXRlLT5v ZmZzZXQpOworCUZyZWVTbHJ1V3JpdGUoc3RhdGUtPm1lbWJlcnMpOworCisJcGZyZWUoc3RhdGUp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaCBiL3Ny Yy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjMzZDVkMWI4MjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9uZXcuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogbXVsdGl4 YWN0X25ldy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaAor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL211bHRp eGFjdC5oIgorCisjaW5jbHVkZSAic2xydV9pby5oIgorCit0eXBlZGVmIHN0cnVjdCBNdWx0aVhh Y3RXcml0ZXIKK3sKKwlNdWx0aVhhY3RJZAkJCW5leHRNWGFjdDsKKwlNdWx0aVhhY3RPZmZzZXQJ CW5leHRPZmZzZXQ7CisKKwlTbHJ1U2VnU3RhdGUJICAgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUJ ICAgKm1lbWJlcnM7Cit9IE11bHRpWGFjdFdyaXRlcjsKKworZXh0ZXJuIE11bHRpWGFjdFdyaXRl ciAqQWxsb2NNdWx0aVhhY3RXcml0ZShjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCU11bHRpWGFj dElkIGZpcnN0TXVsdGksCisJCQkJCQkJCQkJCU11bHRpWGFjdE9mZnNldCBmaXJzdE9mZnNldCk7 CitleHRlcm4gTXVsdGlYYWN0SWQgR2V0TmV3TXVsdGlYYWN0SWQoTXVsdGlYYWN0V3JpdGVyICpz dGF0ZSwgaW50IG5tZW1iZXJzLAorCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KTsK K2V4dGVybiB2b2lkIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJCQkJCSAgIE11bHRpWGFjdElkIG11bHRpLCBpbnQg bm1lbWJlcnMsCisJCQkJCQkJICAgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKTsKK2V4dGVybiB2 b2lkIEZyZWVNdWx0aVhhY3RXcml0ZShNdWx0aVhhY3RXcml0ZXIgKndyaXRlcik7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jIGIvc3JjL2Jpbi9wZ191cGdy YWRlL211bHRpeGFjdF9vbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNmNjMzg0ZDJjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVs dGl4YWN0X29sZC5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogbXVsdGl4YWN0X29sZC5jCisg KgorICogUmV3cml0ZSBwcmUtdjE5IG11bHRpeGFjdHMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJp dCBNdWx0aVhhY3RPZmZzZXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFj dF9vbGQuYworICovCisKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisKKyNpbmNsdWRlICJw Z191cGdyYWRlLmgiCisKKy8qCisgKiBOT1RFOiBiZWxvdyBhcmUgYSBidW5jaCBvZiBkZWZpbml0 aW9ucyBhbmQgc2ltcGxlIHN0dGFpYyBpbmxpbmUgZnVuY3Rpb25zCisgKiB0aGF0IGFyZSBjb3B5 LXBhc3RlZCBmcm9tIG11bHRpeGFjdC5jIGZyb20gdmVyc2lvbiAxOC4gIFRoZSBvbmx5IGRpZmZl cmVuY2UKKyAqIGlzIHRoYXQgd2UgdXNlIHRoZSBPbGRNdWx0aVhhY3RPZmZzZXQgdHlwZSBlcXVh bCB0byB1aW50MzIgaW5zdGVhZCBvZgorICogTXVsdGlYYWN0T2Zmc2V0IHdoaWNoIGJlY2FtZSB1 aW50NjQuCisgKi8KKworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgYW5kIDggYnl0 ZXMgcGVyIGJhc2UgZm9yIGVhY2ggcGFnZS4gKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNf UEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihPbGRNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMg aW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkK K3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK011bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0 aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKwor LyoKKyAqIFRoZSBzaXR1YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3 ZSBzdG9yZSBvbmUgYnl0ZSBvZgorICogYWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJh bnNhY3Rpb25JZC4gIFRvIGRvIHRoaXMgd2l0aG91dCBnZXR0aW5nCisgKiBpbnRvIGFsaWdubWVu dCBpc3N1ZXMsIHdlIHN0b3JlIGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQorICog Y29ycmVzcG9uZGluZyA0IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2Ug Y2FsbCBhICJncm91cCIsIGFuZAorICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAg VGh1cywgd2l0aCA4a0IgQkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKKyAqIHBlciBwYWdlLiAg VGhpcyB3YXN0ZXMgMTIgYnl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0 eSAoYW5kCisgKiBwZXJmb3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KKyAq CisgKiBOb3RlIHRoYXQgdGhlICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQs IG5vdCBhcnJheSBpbmRleGVzLCBzbworICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcg ImNoYXIgKiIgcG9pbnRlcnMuCisgKi8KKy8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwg c28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8KKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QJCQk4CisjZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKKyNk ZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QpIC0gMSkKKworLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhl cmUgaW4gYSBncm91cD8gKi8KKyNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJ CTQKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElY QUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisv KiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNU X01FTUJFUkdST1VQX1NJWkUgXAorCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkK KyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF CVwKKwkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9NRU1CRVJHUk9VUCkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBm b3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoT2xkTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJF UlNfUEVSX1BBR0U7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkg b2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01Y T2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU9sZE11bHRp WGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJH Uk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNf UEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJH Uk9VUF9TSVpFOworCisJcmV0dXJuIGJ5dGVvZmY7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9m ZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE9sZE11bHRpWGFjdE9mZnNl dCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNl dChvZmZzZXQpICsKKwkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJf aW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQorewor CWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUDsKKwlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1C RVJfQklUU19QRVJfWEFDVDsKKworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qCisgKiBDb25zdHJ1 Y3QgcmVhZGVyIG9mIG9sZCBtdWx0aXhhY3RzLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2Vk IG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgY2FsbHMgaW4gdGhpcyBtb2R1bGUuCisgKi8K K09sZE11bHRpWGFjdFJlYWRlciAqCitBbGxvY09sZE11bHRpWGFjdFJlYWQoY2hhciAqcGdkYXRh LCBNdWx0aVhhY3RJZCBuZXh0TXVsdGksCisJCQkJCSAgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRP ZmZzZXQpCit7CisJT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSA9IHN0YXRlID0gcGdfbWFsbG9j KHNpemVvZigqc3RhdGUpKTsKKwljaGFyCQkJCWRpcltNQVhQR1BBVEhdID0gezB9OworCisJc3Rh dGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRPZmZz ZXQ7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9vZmZzZXRzIiwgcGdkYXRh KTsKKwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1UmVhZChkaXIpOworCisJcGdfc3ByaW50Zihk aXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMg PSBBbGxvY1NscnVSZWFkKGRpcik7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBUaGlz IGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoKSBz ZXJ2ZXIgZnVuY3Rpb24uCisgKgorICogLSBPbmx5IHJldHVybiB0aGUgdXBkYXRpbmcgbWVtYmVy LCBpZiBhbnkuIFVwZ3JhZGUgb25seSBjYXJlcyBhYm91dCB0aGUKKyAqICAgdXBkYXRlcnMuIElm IHRoZXJlIGlzIG5vIHVwZGF0aW5nIG1lbWJlciwgcmV0dXJuIHRoZSBmaXJzdCBsb2NraW5nLW9u bHkKKyAqICAgbWVtYmVyLiBXZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gcmVwcmVzZW50ICJubyBt ZW1iZXJzIiwgYnV0IHdlIGFsc28gZG9uJ3QKKyAqICAgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhl IGxvY2tpbmcgbWVtYmVycy4KKyAqCisgKiAtIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQg bG9ja2luZyBhbmQgc29tZSBjb3JuZXIgY2FzZXMgYmVjYXVzZSB0aGVyZSdzCisgKiAgIG5vIGNv bmN1cnJlbnQgYWN0aXZpdHkuCisgKi8KK3ZvaWQKK0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVt YmVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LCBNdWx0aVhhY3RTdGF0dXMgKnN0YXR1cykKK3sKKwlN dWx0aVhhY3RJZAkJbmV4dE1YYWN0LAorCQkJCQluZXh0T2Zmc2V0LAorCQkJCQl0bXBNWGFjdDsK KwlpbnQ2NAkJCXBhZ2VubywKKwkJCQkJcHJldl9wYWdlbm87CisJaW50CQkJCWVudHJ5bm8sCisJ CQkJCWxlbmd0aDsKKwljaGFyCQkgICAqYnVmOworCU9sZE11bHRpWGFjdE9mZnNldCAqb2ZmcHRy LAorCQkJCQkJb2Zmc2V0OworCVRyYW5zYWN0aW9uSWQJcmVzdWx0X3hpZCA9IEludmFsaWRUcmFu c2FjdGlvbklkOworCWJvb2wJCQlyZXN1bHRfaXN1cGRhdGUgPSBmYWxzZTsKKworCW5leHRNWGFj dCA9IHN0YXRlLT5uZXh0TVhhY3Q7CisJbmV4dE9mZnNldCA9IHN0YXRlLT5uZXh0T2Zmc2V0Owor CisJLyoKKwkgKiBTZWUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzIGluIG11bHRpeGFjdC5jCisJICoK KwkgKiBGaW5kIG91dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHdlIG5lZWQgdG8gc3RhcnQgcmVhZGlu ZyBNdWx0aVhhY3RNZW1iZXJzCisJICogYW5kIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUg bXVsdGl4YWN0LiAgV2UgZGV0ZXJtaW5lIHRoZSBsYXR0ZXIgYXMKKwkgKiB0aGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIHRoaXMgbXVsdGl4YWN0J3Mgc3RhcnRpbmcgb2Zmc2V0IGFuZCB0aGUgbmV4dAor CSAqIG9uZSdzLiAgSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHRvIHdvcnJ5 IGFib3V0OgorCSAqCisJICogMS4gVGhpcyBtdWx0aXhhY3QgbWF5IGJlIHRoZSBsYXRlc3Qgb25l IGNyZWF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlcmUgaXMKKwkgKiBubyBuZXh0IG9uZSB0byBsb29r IGF0LiAgSW4gdGhpcyBjYXNlIHRoZSBuZXh0T2Zmc2V0IHZhbHVlIHdlIGp1c3QKKwkgKiBzYXZl ZCBpcyB0aGUgY29ycmVjdCBlbmRwb2ludC4KKwkgKgorCSAqIDIuIFRoZSBuZXh0IG11bHRpeGFj dCBtYXkgc3RpbGwgYmUgaW4gcHJvY2VzcyBvZiBiZWluZyBmaWxsZWQgaW4uLi4KKwkgKiBUaGlz IGNhbm5vdCBoYXBwZW4gZHVyaW5nIHVwZ3JhZGUuCisJICoKKwkgKiAzLiBCZWNhdXNlIEdldE5l d011bHRpWGFjdElkIGluY3JlbWVudHMgb2Zmc2V0IHplcm8gdG8gb2Zmc2V0IG9uZSB0bworCSAq IGhhbmRsZSBjYXNlICMyLCB0aGVyZSBpcyBhbiBhbWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Yg b2Zmc2V0CisJICogd3JhcGFyb3VuZC4gIElmIHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNl dCBpcyBvbmUsIGlzIHRoYXQgb3VyCisJICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBv ciBkaWQgaXQgZW5kIGF0IHplcm8gd2l0aCBhIHN1YnNlcXVlbnQKKwkgKiBpbmNyZW1lbnQ/ICBX ZSBoYW5kbGUgdGhpcyB1c2luZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKKwkg KiBtZW1iZXIgc2xvdCB3YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6ZXJv IGlzbid0IGEgdmFsaWQKKwkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBhIG11bHRp eGFjdCBtZW1iZXIuICBUaGVyZWZvcmUsIGlmIHdlCisJICogcmVhZCBhIHplcm8gZnJvbSB0aGUg bWVtYmVycyBhcnJheSwganVzdCBpZ25vcmUgaXQuCisJICovCisKKwlwYWdlbm8gPSBNdWx0aVhh Y3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRF bnRyeShtdWx0aSk7CisKKwlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwg cGFnZW5vKTsKKwlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0ICopIGJ1ZjsKKwlvZmZwdHIg Kz0gZW50cnlubzsKKwlvZmZzZXQgPSAqb2ZmcHRyOworCisJQXNzZXJ0KG9mZnNldCAhPSAwKTsK KworCS8qCisJICogVXNlIHRoZSBzYW1lIGluY3JlbWVudCBydWxlIGFzIEdldE5ld011bHRpWGFj dElkKCksIHRoYXQgaXMsIGRvbid0CisJICogaGFuZGxlIHdyYXBhcm91bmQgZXhwbGljaXRseSB1 bnRpbCBuZWVkZWQuCisJICovCisJdG1wTVhhY3QgPSBtdWx0aSArIDE7CisKKwlpZiAobmV4dE1Y YWN0ID09IHRtcE1YYWN0KQorCXsKKwkJLyogQ29ybmVyIGNhc2UgMTogdGhlcmUgaXMgbm8gbmV4 dCBtdWx0aXhhY3QgKi8KKwkJbGVuZ3RoID0gbmV4dE9mZnNldCAtIG9mZnNldDsKKwl9CisJZWxz ZQorCXsKKwkJT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRNWE9mZnNldDsKKworCQkvKiBoYW5kbGUg d3JhcGFyb3VuZCBpZiBuZWVkZWQgKi8KKwkJaWYgKHRtcE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJ ZCkKKwkJCXRtcE1YYWN0ID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCQlwcmV2X3BhZ2VubyA9IHBh Z2VubzsKKworCQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZSh0bXBNWGFjdCk7CisJ CWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkodG1wTVhhY3QpOworCisJCWlmIChw YWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUt Pm9mZnNldCwgcGFnZW5vKTsKKworCQlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0ICopIGJ1 ZjsKKwkJb2ZmcHRyICs9IGVudHJ5bm87CisJCW5leHRNWE9mZnNldCA9ICpvZmZwdHI7CisKKwkJ LyoKKwkJICogQ29ybmVyIGNhc2UgMjogbmV4dCBtdWx0aXhhY3QgaXMgc3RpbGwgYmVpbmcgZmls bGVkIGluLCB0aGlzIG11c3QKKwkJICogbm90IGhhcHBlbiBkdXJpbmcgdXBncmFkZS4KKwkJICov CisJCUFzc2VydChuZXh0TVhPZmZzZXQgIT0gMCk7CisKKwkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0 IC0gb2Zmc2V0OworCX0KKworCXByZXZfcGFnZW5vID0gLTE7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBsZW5ndGg7IGkrKywgb2Zmc2V0KyspCisJeworCQlUcmFuc2FjdGlvbklkICp4YWN0cHRyOwor CQl1aW50MzIJICAgKmZsYWdzcHRyOworCQlpbnQJCQlmbGFnc29mZjsKKwkJaW50CQkJYnNoaWZ0 OworCQlpbnQJCQltZW1iZXJvZmY7CisJCU11bHRpWGFjdFN0YXR1cyBzdDsKKworCQlwYWdlbm8g PSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpOworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRv TWVtYmVyT2Zmc2V0KG9mZnNldCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJ eworCQkJYnVmID0gU2xydVJlYWRTd2l0Y2hQYWdlKHN0YXRlLT5tZW1iZXJzLCBwYWdlbm8pOwor CQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CisJCX0KKworCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9u SWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisJCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhh Y3RwdHIpKQorCQl7CisJCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQg dW51c2VkIHNsb3QgemVybyAqLworCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJ YnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKwkJZmxhZ3NwdHIgPSAo dWludDMyICopIChidWYgKyBmbGFnc29mZik7CisKKwkJc3QgPSAoKmZsYWdzcHRyID4+IGJzaGlm dCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOworCisJCS8qIFZlcmlmeSB0aGF0IHRoZXJl IGlzIGEgc2luZ2xlIHVwZGF0ZSBYaWQgYW1vbmcgdGhlIGdpdmVuIG1lbWJlcnMuICovCisJCWlm IChJU1VQREFURV9mcm9tX214c3RhdHVzKHN0KSkKKwkJeworCQkJaWYgKHJlc3VsdF9pc3VwZGF0 ZSkKKwkJCQlwZ19mYXRhbCgibXVsdGl4YWN0ICV1IGhhcyBtb3JlIHRoYW4gb25lIHVwZGF0aW5n IG1lbWJlciIsCisJCQkJCQkgbXVsdGkpOworCQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCQkJ cmVzdWx0X2lzdXBkYXRlID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICghVHJhbnNhY3Rpb25JZElz VmFsaWQocmVzdWx0X3hpZCkpCisJCQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJfQorCisJLyog QSBtdWx0aXhpZCB3aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLworCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1bHRfeGlkKSk7CisKKwkqcmVzdWx0ID0gcmVzdWx0 X3hpZDsKKwkqc3RhdHVzID0gcmVzdWx0X2lzdXBkYXRlID8gTXVsdGlYYWN0U3RhdHVzVXBkYXRl IDoKKwkJCQkJCQkJTXVsdGlYYWN0U3RhdHVzRm9yS2V5U2hhcmU7Cit9CisKKy8qCisgKiBGcmVl cyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVlT2xkTXVsdGlYYWN0UmVhZGVy KE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUpCit7CisJRnJlZVNscnVSZWFkKHN0YXRlLT5vZmZz ZXQpOworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+bWVtYmVycyk7CisKKwlwZnJlZShzdGF0ZSk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oIGIvc3JjL2Jp bi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uOGQ0NjU5YmE2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvbXVsdGl4YWN0X29sZC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBtdWx0aXhhY3Rf b2xkLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oCisgKi8K KworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0 LmgiCisjaW5jbHVkZSAic2xydV9pby5oIgorCit0eXBlZGVmIHVpbnQzMiBPbGRNdWx0aVhhY3RP ZmZzZXQ7CisKK3R5cGVkZWYgc3RydWN0IE9sZE11bHRpWGFjdFJlYWRlcgoreworCU11bHRpWGFj dElkCQkJbmV4dE1YYWN0OworCU9sZE11bHRpWGFjdE9mZnNldAluZXh0T2Zmc2V0OworCisJU2xy dVNlZ1N0YXRlCSAgICpvZmZzZXQ7CisJU2xydVNlZ1N0YXRlCSAgICptZW1iZXJzOworfSBPbGRN dWx0aVhhY3RSZWFkZXI7CisKK2V4dGVybiBPbGRNdWx0aVhhY3RSZWFkZXIgKkFsbG9jT2xkTXVs dGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCQkgTXVsdGlYYWN0SWQgbmV4dE11 bHRpLAorCQkJCQkJCQkJCQkJIE9sZE11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0KTsKK2V4dGVy biB2b2lkIEdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKE9sZE11bHRpWGFjdFJlYWRlciAq c3RhdGUsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RJZCBtdWx0aSwKKwkJCQkJCQkJCQkgIFRyYW5z YWN0aW9uSWQgKnJlc3VsdCwKKwkJCQkJCQkJCQkgIE11bHRpWGFjdFN0YXR1cyAqc3RhdHVzKTsK K2V4dGVybiB2b2lkIEZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpy ZWFkZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyBiL3Ny Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKaW5kZXggNDkwZTk4ZmEyNmYuLjU0MzJjMDNh MmIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jCisrKyBiL3Ny Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRl ICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xk LmgiCisjaW5jbHVkZSAibXVsdGl4YWN0X25ldy5oIgogCiAvKgogICogTWF4aW11bSBudW1iZXIg b2YgcGdfcmVzdG9yZSBhY3Rpb25zIChUT0MgZW50cmllcykgdG8gcHJvY2VzcyB3aXRoaW4gb25l CkBAIC03NjksNiArNzcxLDgyIEBAIGNvcHlfc3ViZGlyX2ZpbGVzKGNvbnN0IGNoYXIgKm9sZF9z dWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIpCiAJY2hlY2tfb2soKTsKIH0KIAorLyoKKyAq IENvbnZlcnQgcGdfbXVsdGl4YWN0L29mZnNldCBhbmQgL21lbWJlcnMgdG8gbmV3IGZvcm1hdCB3 aXRoIDY0LWJpdCBvZmZzZXRzLgorICovCitzdGF0aWMgdm9pZAorY29udmVydF9tdWx0aXhhY3Rz KE11bHRpWGFjdElkICpuZXdfbnh0bXVsdGksIE11bHRpWGFjdE9mZnNldCAqbmV3X254dG14b2Zm KQoreworCU11bHRpWGFjdElkCQkJb2xkZXN0X211bHRpLAorCQkJCQkJbmV4dF9tdWx0aTsKKwlP bGRNdWx0aVhhY3RSZWFkZXIgKm9sZF9yZWFkZXI7CisJTXVsdGlYYWN0V3JpdGVyCSAgICpuZXdf d3JpdGVyOworCisJb2xkX3JlYWRlciA9IEFsbG9jT2xkTXVsdGlYYWN0UmVhZChvbGRfY2x1c3Rl ci5wZ2RhdGEsCisJCQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0 bXVsdGksCisJCQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhv ZmYpOworCW5ld193cml0ZXIgPSBBbGxvY011bHRpWGFjdFdyaXRlKG5ld19jbHVzdGVyLnBnZGF0 YSwKKwkJCQkJCQkJCSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aSwK KwkJCQkJCQkJCSAxIC8qIHNlZSBiZWxvdyAqLyk7CisKKwlvbGRlc3RfbXVsdGkgPSBvbGRfY2x1 c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aTsKKwluZXh0X211bHRpID0gb2xkX2Ns dXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCisJLyogaGFuZGxlIHdyYXBhcm91 bmQgKi8KKwlpZiAobmV4dF9tdWx0aSA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCW5leHRfbXVsdGkg PSBGaXJzdE11bHRpWGFjdElkOworCisJLyoKKwkgKiBSZWFkIG11bHRpeGlkcyBmcm9tIG9sZCBm aWxlcyBvbmUgYnkgb25lLCBhbmQgd3JpdGUgdGhlbSBiYWNrIGluIHRoZSBuZXcKKwkgKiBmb3Jt YXQuCisJICoKKwkgKiBUaGUgbG9ja2luZy1vbmx5IFhJRHMgdGhhdCBtYXkgYmUgcGFydCBvZiBt dWx0aS14aWRzIGRvbid0IG1hdHRlciBhZnRlcgorCSAqIHVwZ3JhZGUsIGFzIHRoZXJlIGNhbiBi ZSBubyB0cmFuc2FjdGlvbnMgcnVubmluZyBhY3Jvc3MgdXBncmFkZS4gIFNvIGFzCisJICogYSBs aXR0bGUgb3B0aW1pemF0aW9uLCB3ZSBvbmx5IHJlYWQgb25lIG1lbWJlciBmcm9tIGVhY2ggbXVs dGl4aWQ6IHRoZQorCSAqIG9uZSB1cGRhdGluZyBvbmUsIG9yIGlmIHRoZXJlIHdhcyBubyB1cGRh dGUsIGFyYml0cmFyaWx5IHRoZSBmaXJzdAorCSAqIGxvY2tpbmcgeGlkLgorCSAqLworCWZvciAo TXVsdGlYYWN0SWQgbXVsdGkgPSBvbGRlc3RfbXVsdGk7IG11bHRpICE9IG5leHRfbXVsdGk7KQor CXsKKwkJVHJhbnNhY3Rpb25JZAkJeGlkOworCQlNdWx0aVhhY3RTdGF0dXMJCXN0YXR1czsKKwkJ TXVsdGlYYWN0TWVtYmVyCQltZW1iZXI7CisJCU11bHRpWGFjdElkCQkJbmV3X211bHRpIFBHX1VT RURfRk9SX0FTU0VSVFNfT05MWTsKKwkJTXVsdGlYYWN0T2Zmc2V0CQlvZmZzZXQ7CisKKwkJLyog UmVhZCB0aGUgb2xkIG11bHRpeGlkICovCisJCUdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVy KG9sZF9yZWFkZXIsIG11bHRpLCAmeGlkLCAmc3RhdHVzKTsKKworCQkvKiBXcml0ZSBpdCBvdXQg aW4gbmV3IGZvcm1hdCAqLworCQltZW1iZXIueGlkID0geGlkOworCQltZW1iZXIuc3RhdHVzID0g c3RhdHVzOworCQluZXdfbXVsdGkgPSBHZXROZXdNdWx0aVhhY3RJZChuZXdfd3JpdGVyLCAxLCAm b2Zmc2V0KTsKKworCQlBc3NlcnQobmV3X211bHRpID09IG11bHRpKTsKKworCQlSZWNvcmROZXdN dWx0aVhhY3QobmV3X3dyaXRlciwgb2Zmc2V0LCBtdWx0aSwgMSwgJm1lbWJlcik7CisKKwkJbXVs dGkrKzsKKwkJLyogaGFuZGxlIHdyYXBhcm91bmQgKi8KKwkJaWYgKG11bHRpIDwgRmlyc3RNdWx0 aVhhY3RJZCkKKwkJCW11bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsKKwl9CisKKwkvKgorCSAqIFVw ZGF0ZSB0aGUgbmV4dE1YYWN0L09mZnNldCB2YWx1ZXMgaW4gdGhlIGNvbnRyb2wgZmlsZSB0byBt YXRjaCB3aGF0IHdlCisJICogd3JvdGUuICBUaGUgbmV4dE1YYWN0IHNob3VsZCBiZSB1bmNoYW5n ZWQsIGJ1dCBiZWNhdXNlIHdlIGlnbm9yZWQgdGhlCisJICogbG9ja2luZyBYSURzIG1lbWJlcnMs IHRoZSBuZXh0T2Zmc2V0IHdpbGwgYmUgZGlmZmVyZW50LgorCSAqLworCUFzc2VydChuZXdfd3Jp dGVyLT5uZXh0TVhhY3QgPT0gbmV4dF9tdWx0aSk7CisKKwkqbmV3X254dG11bHRpID0gbmV4dF9t dWx0aTsKKwkqbmV3X254dG14b2ZmID0gbmV3X3dyaXRlci0+bmV4dE9mZnNldDsKKworCS8qIFJl bGVhc2UgcmVzb3VyY2VzICovCisJRnJlZU11bHRpWGFjdFdyaXRlKG5ld193cml0ZXIpOworCUZy ZWVPbGRNdWx0aVhhY3RSZWFkZXIob2xkX3JlYWRlcik7Cit9CisKIHN0YXRpYyB2b2lkCiBjb3B5 X3hhY3RfeGxvZ194aWQodm9pZCkKIHsKQEAgLTgxNiw4ICs4OTQsMjggQEAgY29weV94YWN0X3hs b2dfeGlkKHZvaWQpCiAJaWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVM VElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCiAJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRh LmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQogCXsKLQkJY29weV9z dWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211bHRpeGFjdC9vZmZzZXRz Iik7Ci0JCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3QvbWVtYmVycyIsICJwZ19tdWx0 aXhhY3QvbWVtYmVycyIpOworCQlNdWx0aVhhY3RJZAkJbmV3X254dG11bHRpID0gb2xkX2NsdXN0 ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCQlNdWx0aVhhY3RPZmZzZXQgbmV3X254 dG14b2ZmID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmOworCisJCS8q CisJCSAqIElmIHRoZSBvbGQgc2VydmVyIGlzIGJlZm9yZSB0aGUgTVVMVElYQUNUT0ZGU0VUX0ZP Uk1BVENIQU5HRV9DQVRfVkVSCisJCSAqIGl0IG11c3QgaGF2ZSAzMi1iaXQgbXVsdGl4aWQgb2Zm c2V0cywgdGh1cyBpdCBzaG91bGQgYmUgY29udmVydGVkLgorCQkgKi8KKwkJaWYgKG9sZF9jbHVz dGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NB VF9WRVIgJiYKKwkJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNU T0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQorCQl7CisJCQlyZW1vdmVfbmV3X3N1YmRpcigi cGdfbXVsdGl4YWN0L21lbWJlcnMiLCBmYWxzZSk7CisJCQlyZW1vdmVfbmV3X3N1YmRpcigicGdf bXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CisKKwkJCXByZXBfc3RhdHVzKCJDb252ZXJ0aW5n IHBnX211bHRpeGFjdC9vZmZzZXRzIHRvIDY0LWJpdCIpOworCQkJY29udmVydF9tdWx0aXhhY3Rz KCZuZXdfbnh0bXVsdGksICZuZXdfbnh0bXhvZmYpOworCQkJY2hlY2tfb2soKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsICJw Z19tdWx0aXhhY3Qvb2Zmc2V0cyIpOworCQkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFj dC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CisJCX0KIAogCQlwcmVwX3N0YXR1 cygiU2V0dGluZyBuZXh0IG11bHRpeGFjdCBJRCBhbmQgb2Zmc2V0IGZvciBuZXcgY2x1c3RlciIp OwogCkBAIC04MjYsMTAgKzkyNCw4IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCQkgKiBj b3VudGVycyBoZXJlIGFuZCB0aGUgb2xkZXN0IG11bHRpIHByZXNlbnQgb24gc3lzdGVtLgogCQkg Ki8KIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJ ICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICV1IC1tICV1LCV1IFwiJXNcIiIsCi0JCQkJICBuZXdf Y2x1c3Rlci5iaW5kaXIsCi0JCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0 bXhvZmYsCi0JCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJ CQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICUiIFBSSXU2NCAiIC1tICV1LCV1IFwiJXNcIiIs CisJCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsIG5ld19ueHRteG9mZiwgbmV3X254dG11bHRpLAog CQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29sZHN0TXVsdGksCiAJCQkJICBu ZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQljaGVja19vaygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z191cGdyYWRlL3BnX3VwZ3JhZGUuaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgK aW5kZXggZTg2MzM2ZjRiZTkuLjEyN2IyY2IwMGZhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Vw Z3JhZGUvcGdfdXBncmFkZS5oCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgK QEAgLTExNCw2ICsxMTQsMTEgQEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxlc1tdOwogICovCiAj ZGVmaW5lIE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDEzMDEyMzEKIAorLyoKKyAq IFN3aWN0aCBmcm9tIDMyLWJpdCB0byA2NC1iaXQgZm9yIG11bHRpeGlkIG9mZnNldHMuCisgKi8K KyNkZWZpbmUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDk5OTk5OTk5OQor CiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNpemUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEs CiAgKiBjb21taXQgNWY5M2MzNzgwNWU3NDg1NDg4NDgwOTE2YjQ1ODVlMDk4ZDNjYzg4MwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYyBiL3NyYy9iaW4vcGdfdXBncmFk ZS9zbHJ1X2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlODIz MTk5MzAzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwpA QCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIHNscnVfaW8uYworICoKKyAqIFJvdXRpbmVzIGZvciBy ZWFkaW5nIGFuZCB3cml0aW5nIFNMUlUgZmlsZXMgZHVyaW5nIHVwZ3JhZGUuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog c3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19m ZS5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKyNp bmNsdWRlICJzbHJ1X2lvLmgiCisKKyNpbmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMu aCIKKyNpbmNsdWRlICJwb3J0L3BnX2lvdmVjLmgiCisKKy8qCisgKiBTdGF0ZSBmb3IgcmVhZGlu ZyBvciB3cml0aW5nIGFuIFNMUlUsIHdpdGggYSBvbmUgcGFnZSBidWZmZXIuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFNscnVTZWdTdGF0ZQoreworCWJvb2wJCXdyaXRpbmc7CisJYm9vbAkJbG9uZ19z ZWdtZW50X25hbWVzOworCisJY2hhcgkgICAqZGlyOworCWNoYXIJICAgKmZuOworCWludAkJCWZk OworCWludDY0CQlzZWdubzsKKwl1aW50NjQJCXBhZ2VubzsKKworCVBHQWxpZ25lZEJsb2NrIGJ1 ZjsKK30gU2xydVNlZ1N0YXRlOworCitzdGF0aWMgaW5saW5lIFNscnVTZWdTdGF0ZSAqCitBbGxv Y1NscnVTZWdTdGF0ZShjaGFyICpkaXIpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IHBnX21h bGxvYyhzaXplb2YoKnN0YXRlKSk7CisKKwlzdGF0ZS0+c2Vnbm8gPSAtMTsKKwlzdGF0ZS0+cGFn ZW5vID0gMDsKKwlzdGF0ZS0+ZGlyID0gcHN0cmR1cChkaXIpOworCXN0YXRlLT5mZCA9IC0xOwor CXN0YXRlLT5mbiA9IE5VTEw7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAorU2xydUZsdXNoKFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGlvdmVjCWlv dmVjID0geworCQkuaW92X2Jhc2UgPSAmc3RhdGUtPmJ1ZiwKKwkJLmlvdl9sZW4gPSBCTENLU1os CisJfTsKKwlvZmZfdAkJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJCXJl dHVybjsKKworCW9mZnNldCA9IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVO VCkgKiBCTENLU1o7CisKKwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRlLT5mZCwgJmlv dmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwi JXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZv ciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFs bCBvdGhlciByZWFkIGNhbGxzIGluIHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgor QWxsb2NTbHJ1UmVhZChjaGFyICpkaXIpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9j U2xydVNlZ1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+d3JpdGluZyA9IGZhbHNlOworCisJcmV0dXJu IHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZlbiBwYWdlIGZvciByZWFkaW5nLgorICoKKyAq IFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9tIG9yZGVyLgorICovCitjaGFyICoKK1NscnVS ZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWlu dDY0IHNlZ25vOworCisJQXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8qIHJlYWQgb25seSBtb2Rl ICovCisKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5v KQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOworCWlmIChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAo c3RhdGUtPnNlZ25vICE9IC0xKQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUt PmZkID0gLTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7 CisJCX0KKworCQkvKiBPcGVuIG5ldyBzZWdtZW50ICovCisJCXN0YXRlLT5mbiA9IHBzcHJpbnRm KCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2lnbmVkIGludCkgc2Vnbm8pOworCQlpZiAoKHN0 YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4p OworCX0KKworCXN0YXRlLT5zZWdubyA9IHNlZ25vOworCisJeworCQlzdHJ1Y3QgaW92ZWMJaW92 ZWMgPSB7CisJCQkuaW92X2Jhc2UgPSAmc3RhdGUtPmJ1ZiwKKwkJCS5pb3ZfbGVuID0gQkxDS1Na LAorCQl9OworCQlvZmZfdAkJCW9mZnNldCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSAqIEJMQ0tTWjsKKworCQlpZiAocGdfcHJlYWR2KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBv ZmZzZXQpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0i LCBzdGF0ZS0+Zm4pOworCisJCXN0YXRlLT5wYWdlbm8gPSBwYWdlbm87CisJfQorCisJcmV0dXJu IHN0YXRlLT5idWYuZGF0YTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCByZWFkZXIu CisgKi8KK3ZvaWQKK0ZyZWVTbHJ1UmVhZChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCUFzc2Vy dCghc3RhdGUtPndyaXRpbmcpOwkvKiByZWFkIG9ubHkgbW9kZSAqLworCisJY2xvc2Uoc3RhdGUt PmZkKTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KKworLyoKKyAqIE9wZW4gdGhlIGdpdmVuIHBhZ2Ug Zm9yIHdyaXRpbmcuCisgKgorICogTk9URTogVGhpcyB1c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5n IHRvIGEgbmV3IHNlZ21lbnQsIHNvIHRoaXMgYXNzdW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQg aXMgd3JpdHRlbiBpbiBmdWxsIGJlZm9yZSBtb3Zpbmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisg KiBsaW1pdGF0aW9uIHdvdWxkIGJlIGVhc3kgdG8gbGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRz IHRoZSB1c2FnZSBwYXR0ZXJuIG9mCisgKiBjdXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgor U2xydVdyaXRlU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQor eworCWludDY0CXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlvZmZf dAlvZmZzZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+ cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCW9mZnNldCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UKSAqIEJMQ0tTWjsKKworCVNscnVGbHVzaChzdGF0ZSk7CisJbWVtc2V0KHN0YXRl LT5idWYuZGF0YSwgMCwgQkxDS1NaKTsKKworCWlmIChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJ eworCQlpZiAoc3RhdGUtPnNlZ25vICE9IC0xKQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOwor CQkJc3RhdGUtPmZkID0gLTE7CisKKwkJCXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5m biA9IE5VTEw7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIHNlZ21lbnQgKi8KKwkJaWYgKHN0YXRl LT5sb25nX3NlZ21lbnRfbmFtZXMpCisJCXsKKwkJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25v IDw9IElOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkZGRkYpKTsKKwkJCXN0YXRlLT5mbiA9IHBzcHJp bnRmKCIlcy8lMDE1IiBQUklYNjQsIHN0YXRlLT5kaXIsIHNlZ25vKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkYp KTsKKwkJCXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2ln bmVkIGludCkgc2Vnbm8pOworCQl9CisKKwkJaWYgKChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRlLT5m biwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IFBHX0JJTkFSWSwKKwkJCQkJCQkgIHBnX2Zp bGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRl IGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisJCX0KKworCQlzdGF0ZS0+c2Vnbm8gPSBz ZWdubzsKKworCQlpZiAob2Zmc2V0ID4gMCAmJiBwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZkLCBv ZmZzZXQsIDApIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6 ICVtIiwgc3RhdGUtPmZuKTsKKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCisJcmV0 dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1IHdyaXRlciBmb3Ig ZGlyLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwg b3RoZXIgd3JpdGUgY2FsbHMgaW4gdGhpcyBtb2R1bGUuCisgKi8KK1NscnVTZWdTdGF0ZSAqCitB bGxvY1NscnVXcml0ZShjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNs cnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndy aXRpbmcgPSB0cnVlOworCXN0YXRlLT5sb25nX3NlZ21lbnRfbmFtZXMgPSBsb25nX3NlZ21lbnRf bmFtZXM7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQg d3JpdGVyLgorICovCit2b2lkCitGcmVlU2xydVdyaXRlKFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7 CisJQXNzZXJ0KHN0YXRlLT53cml0aW5nKTsKKworCVNscnVGbHVzaChzdGF0ZSk7CisKKwljbG9z ZShzdGF0ZS0+ZmQpOworCXBnX2ZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z191cGdyYWRlL3NscnVfaW8uaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkyMGI4YWU4MmUyCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaApAQCAtMCwwICsxLDMwIEBACisv KgorICogc2xydV9pby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAor ICovCisKKy8qCisgKiBTb21lIGtpbmQgb2YgaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEgcGFy dGljdWxhciBTTFJVIHNlZ21lbnQuICBUaGUgaWRlYSBpcworICogdG8gc3BlY2lmeSB0aGUgc2Vn bWVudCBhbmQgcGFnZSBudW1iZXIgYW5kIHRoZW4gbW92ZSB0aHJvdWdoIHRoZSBwYWdlcy4KKyAq LworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworLyoKKyAqIFNlZSBhY2Nlc3Mvc2xydS5o CisgKgorICogQ29weSBoZXJlLCBzaW5jZSBzbHJ1LmggY291bGQgbm90IGJlIGluY2x1ZGVkIGlu IGZlIGNvZGUuCisgKi8KKyNkZWZpbmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAzMgorCit0eXBl ZGVmIHN0cnVjdCBTbHJ1U2VnU3RhdGUgU2xydVNlZ1N0YXRlOworCitleHRlcm4gU2xydVNlZ1N0 YXRlICpBbGxvY1NscnVSZWFkKGNoYXIgKmRpcik7CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0 Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQg RnJlZVNscnVSZWFkKFNscnVTZWdTdGF0ZSAqc3RhdGUpOworCitleHRlcm4gU2xydVNlZ1N0YXRl ICpBbGxvY1NscnVXcml0ZShjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKTsKK2V4 dGVybiBjaGFyICpTbHJ1V3JpdGVTd2l0Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2 NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRl KTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --0000000000006f85360642c63cc7 Content-Type: application/octet-stream; name="v21-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename="v21-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhkpffeg2 RnJvbSA1N2ExNjBmMzdlMjliNGU2NmI4MDFkMDFmZTQ0MmMxYzA5MjRhNGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYyMSAzLzNd IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3YWwKCi0tLQogc3JjL2Jpbi9w Z19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Qv MDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwM19teG9mZi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3 YWwvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5 MDgzMmIyMjk5Li4xZTJkZmIzOGE1YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCkBAIC0yNSw2 ICsyNSw3IEBAIHRlc3RzICs9IHsKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMu cGwnLAogICAgICAgJ3QvMDAyX2NvcnJ1cHRlZC5wbCcsCisgICAgICAndC8wMDNfbXhvZmYucGwn LAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAz X214b2ZmLnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2MxYjdmYTFkMzMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCkBAIC0wLDAgKzEsMTcwIEBA CisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug TWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworc3ViIG14YWN0X2VhdGVyCit7 CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gc2hpZnQ7CisKKwkkbm9kZS0+c3RhcnQ7 CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRFIFRBQkxFICR7dGJsfSAo SSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQpICIgLgorCQkiICAgICAgIFdJVEggKEFV VE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJCSJJTlNFUlQgSU5UTyAke3RibH0gU0VMRUNU IEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMoMSwgNTApIEc7Iik7CisKKwkjIGNvbnN1bWUgYXJv dW5kIDEwayBtdWx0aXhhY3Qtb2Zmc2V0ZnMKKwlteSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBk YXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xp ZW50cykKKwl7CisJCW15ICRjb25uID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn KTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMs ICRjb25uKTsKKwl9CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJ bXkgJGNvbm4gPSAkY29ubmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVy eV9zYWZlKCJDT01NSVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlm ICgkaSAlICR1cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJ CQkJIlVQREFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAx ICIgLgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkk Y29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBTSEFS RSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJeworCQkkY29u bi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworfQorCitzdWIgbmV4dF9teG9mZgorewor CW15ICRub2RlID0gc2hpZnQ7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0KKwkgIHJ1bl9jb21t YW5kKFsgJ3BnX2NvbnRyb2xkYXRhJywgJG5vZGUtPmRhdGFfZGlyIF0pOworCW15IEBjb250cm9s X2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlteSAkbmV4dF9teG9mZiA9IHVuZGVmOwor CisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7CisJCWlmICgkXyA9fiAvXkxhdGVzdCBjaGVj a3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OlxzKiguKikkL21nKQorCQl7CisJCQkkbmV4dF9teG9m ZiA9ICQxOworCQkJbGFzdDsKKwkJfQorCX0KKwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91 bmQgaW4gY29udHJvbCBmaWxlXG4iCisJCXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKwor CXJldHVybiAkbmV4dF9teG9mZjsKK30KKworc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUg PSBzaGlmdDsKKwlteSAkb2Zmc2V0ID0gc2hpZnQ7CisJCSRvZmZzZXQgPSBNYXRoOjpCaWdJbnQt Pm5ldygkb2Zmc2V0KTsKKworCSMgR2V0IGJsb2NrIHNpemUKKwlteSAkb3V0ID0gKHJ1bl9jb21t YW5kKFsgJ3BnX3Jlc2V0d2FsJywgJy0tZHJ5LXJ1bicsICRub2RlLT5kYXRhX2RpciBdKSlbMF07 CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15 ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJ3Bn X3Jlc2V0d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOworCXB1c2ggQGNtZCwg Jy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldC0+YXNfaGV4KCk7CisJY29tbWFuZF9vayhc QGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5IHBn X211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3og LyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTAxNVgiLCAkb2Zmc2V0IC8gJG11 bHQ7CisKKwlteSBAZGQgPSAoJ2RkJyk7CisJcHVzaCBAZGQsICJpZj0vZGV2L3plcm8iOworCXB1 c2ggQGRkLCAib2Y9IiAuICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVsdGl4YWN0L21lbWJlcnMv IiAuICRzZWduYW1lOworCXB1c2ggQGRkLCAiYnM9JGJsY2tzeiI7CisJcHVzaCBAZGQsICJjb3Vu dD0zMiI7CisJY29tbWFuZF9vayhcQGRkLCAnZmlsbCBlbXB0eSBtdWx0aXhhY3QtbWVtYmVycycp OworfQorCitteSAoJG9mZjEsICRvZmYyKTsKKworIyBzdGFydCBmcm9tIGRlZmF1bHRzCitteSAk bm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEt PmluaXQ7Ciskb2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUxKTsKK214YWN0X2VhdGVyKCRub2RlMSwg IkZPTyIpOworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMSk7Citub3RlICI+IHN0YXJ0IGZyb20g JG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IGZyb20gYmVmb3JlIDMyLWJp dCB3cmFwYXJvdW5kCitteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J25vZGUyJyk7Ciskbm9kZTItPmluaXQ7CityZXNldF9teG9mZigkbm9kZTIsIDB4RkZGRjAwMDAp OworJG9mZjEgPSBuZXh0X214b2ZmKCRub2RlMik7CitteGFjdF9lYXRlcigkbm9kZTIsICJGT08i KTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTIpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYx LCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBuZWFyIDMyLWJpdCB3cmFwYXJvdW5k CitteSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUzJyk7Cisk bm9kZTMtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTMsIDB4RkZGRkVDNzcpOworJG9mZjEgPSBu ZXh0X214b2ZmKCRub2RlMyk7CitteGFjdF9lYXRlcigkbm9kZTMsICJGT08iKTsKKyRvZmYyID0g bmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBh dCAkb2ZmMlxuIjsKKworIyBzdGFydCBvdmVyIDMyLWJpdCB3cmFwYXJvdW5kCitteSAkbm9kZTQg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGU0Jyk7Ciskbm9kZTQtPmluaXQ7 CityZXNldF9teG9mZigkbm9kZTQsICcweEZGRkZGRkZGMDAwMCcpOworJG9mZjEgPSBuZXh0X214 b2ZmKCRub2RlNCk7CitteGFjdF9lYXRlcigkbm9kZTQsICJGT08iKTsKKyRvZmYyID0gbmV4dF9t eG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5pc2hlZCBhdCAkb2Zm MlxuIjsKKworIyBjaGVjayBpbnZhcmlhbnQKKyRub2RlMS0+c3RhcnQ7Ciskbm9kZTItPnN0YXJ0 OworJG5vZGUzLT5zdGFydDsKKyRub2RlNC0+c3RhcnQ7CisKK215ICR2YXIxID0gJG5vZGUxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjIgPSAkbm9kZTItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMyA9ICRub2RlMy0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXI0ID0gJG5vZGU0LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworb2soJHZhcjEgZXEgJHZhcjIgZXEgJHZh cjMgZXEgJHZhcjQsCisJJ2NoZWNrIHRhYmxlIGludmFyaWFudCBpbiBhbGwgbm9kZXMnKTsKKwor JG5vZGU0LT5zdG9wOworJG5vZGUzLT5zdG9wOworJG5vZGUyLT5zdG9wOworJG5vZGUxLT5zdG9w OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --0000000000006f85360642c63cc7--