Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8Wuk-000cuD-1Q for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 05:17:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8Wuj-009shk-1A for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 05:17:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w8Wuh-009sha-33 for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 05:17:49 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8Wud-00000000Ipo-27xx for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 05:17:47 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-43cfa33a983so973829f8f.1 for ; Thu, 02 Apr 2026 22:17:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775193462; cv=none; d=google.com; s=arc-20240605; b=DAxeXFYVc+HYHT3VRUf30mUb3KTuC+GGjOgJNlbQ/Q38dyAqBmsgKFLN5Lw48k0DHN v/nvqyMIgeLHugeKVPuZD3EeMu46lVyH48Rk9W7nVoC3KLwMkIlBdQYnTqnjmKyNKeG3 M6DjQbt+ajQevpPdUHgzoTmsSucSV2c/BFi59MHS7N+5f2YjLO66mwYb0M2UiwEJhngc LlXDPm1KwlhrA4wvXp1yIJsmB0EpckFAD2+z7UTU4LONOI9ZrXUoguTLgK+8fJH9U7uZ oNfxqcCG/zxKBJZjSYn8S84p6xey7LjokQ16rgKDNJtW//OZTbLtFIItNqa64oOqV964 wxcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=UBE/8BSA0Fujriqa1JT0AG7BKcjgABiAd6DTPM7RX10=; fh=GE2/sB2bO7s29JDBw27LqEBewqovebBUwsvhkrMD9Og=; b=DTKxhuN8Nu4Blp3jClel+SUEM9d0f4/ZEOhNisCmLS5OrEofJwgDN8ghP36Cz9iKP3 ApccJeCFMl7619OKWWjNb8XTe6akej5FDoCIn4GJp18JQvkQ4lYGlMlEW8d5uDmzDCcU WfBAVlP10bCXXLouP9PG3NXWIkfL6pSWSlmPdtrNbjJeQ2kNvlIvFKJRmK2jdWiSpwKi Sv+Do74C1MP0ktwsXIGgqSnfvBYLZZlglCfJFXIJIp4JTdQfZRrU6ayOZG2/GIH9Gq/7 gnu+NMBHTfCDocGwK1Me4/hMSt50C7KxgZyLo7ci/aIjSmeX5IO/l2wkI3t3+CsxIUIv Enhw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1775193462; x=1775798262; 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=UBE/8BSA0Fujriqa1JT0AG7BKcjgABiAd6DTPM7RX10=; b=Lz2+05RyRUJJ8XNYGVC8TSFtzrzhMcmdisEBkxGILINWnw7P3E1EVmQ1yauCHDn2x3 +FUazMawDP2W38NYOv7m2wyg+ribGPf+Yk/jb1Sgh8pllaIsfjNYc65LeiDJv6U22hqi 7gS38W3Lw6CdPGeJUP32+Rx34xjFn+hBdkAOVqVdl9mavufnKJj68z+NrvNhYIBD6M4W olKjO4aChi5w7JSbtL6xSe2o+YK2OIewyZNMNb/LiRfXtjqhQ7fVdNPyy9fNyvu6ywMM 1GAoTBiwIM3KYpPPnLUh5K6BMH/jLQjK6lp87F29V9e+v8KuYq2fcIi9T03dofRXNhxo Vq5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775193462; x=1775798262; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=UBE/8BSA0Fujriqa1JT0AG7BKcjgABiAd6DTPM7RX10=; b=Y4BqmnmtSGlFgzTJuVNvGZKaKGuzEABEj44/Hftk4ZeaEmXk+P0e2MklTkmTlqKEt9 0zgwLf4EMyYvP77m/iRf9aWmgkVpVyaly6RWDC5DUEqcamjebB6LSCL57k6GYzy6ySag rX30jaHND+7URPTqr/c8dBPBuy3jhyLzMu58eeaKzx7RbzxCwehKzkybDVhZEc8d/DZF 4fBVTFTMqFuG4tVieMXdZsf+97ImLP5h10Lv/BwGCMQDYU5XHrOUVn8/BZA1d/P9txq1 C4JyY/xCxtcjp4E9iHcLn5aD/j0KzCTGd9NCSCxCbQh2kRNWiDhVSxaq/cIhoOShqrCN gFOQ== X-Forwarded-Encrypted: i=1; AJvYcCXkVkdtQqyPetDdu4iOyqaYYYHJDAcNy5w/aw+gf7FEanaW0ZQd2CssPXoMDw3VOovV8Q1B2YRJtmxUhruy@lists.postgresql.org X-Gm-Message-State: AOJu0Ywg0Op9u/b0vVNq4n4GmaOb/weFXK2bHtmt8t1FgUuRBmcqpTpv Q1JG8r+WXZkEE124k/aU4evxqyW6R4Q+yi1A6NQXhoxnzZpg6XjVy3h6S7kQFYXZqe/I7emwuMD REsQLGRxNQjJ/b4iiGIbNfFWPrSPljz3fjcp6sxTI/w== X-Gm-Gg: AeBDieshvzMd632l/Mo3ul694c3mjnLbx9zwnGlm+CyF97HvCxJN5UFlD2vptq9qb0u R8JOtfDzQa8Jqye6dLRZ2o5Rs6H2m94stiN5wxkmRg3XiXmeU5c00XGL9PJpV7sSazraRsdVCJM 7IQQR90Cl9SF8HiaE9ZXdxvrIs1BMqVndrza1QTuH02QutYgA4PxwTX3x1OyLvuYsOeJ/zuXPfW bj8C2NfzrMS30n7bmpOH0Rb7UTYNARqk4Uf0vbTRP8Xq6luL5fJDSdzrAP+dCWKSCVhuCv3uL9m /cA4i/Nm2Cl575+KrlrypKBt6JqKQQ/vkZcFMXF1eAGcp4hw2/9WNQ== X-Received: by 2002:a05:6000:2902:b0:43c:ef70:d69a with SMTP id ffacd0b85a97d-43d29309c97mr2521103f8f.50.1775193461386; Thu, 02 Apr 2026 22:17:41 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Fri, 3 Apr 2026 01:17:14 -0400 X-Gm-Features: AQROBzAIicVwq7SQkw07e1laXPeR5di_GPt8jxewUQtlX_NgsfwtugbdsUP34TI Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000aca165064e876fb1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aca165064e876fb1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 6:50=E2=80=AFPM Peter Geoghegan wrote: > Attached is v20, which does things this way. Now it's completely clear > that the scan's batch ring buffer is fully controlled by the table AM. Attached is v21, which advances things in the direction established in v20. It also fixes bitrot -- we no longer carry certain read stream related patches from Andres that were committed since I posted v20 a couple of days ago. > There are now only 2 remaining indexbatch.c functions that get called > from indexam.c. Since these are both trivial, highly generic > functions, restructuring things so that heapam would call these two > seemed unnecessary. I changed my mind about this: I now think it's better if indexam.c never directly calls indexbatch.c. Just for flexibility and extensibility. That's how it's done in v21. In v21, the code in indexbatch.c is about 80% table AM code, 20% index AM code -- nothing more. That seems a bit cleaner to me, because the table AM knowing that the batchringbuf must have already been initialized on its behalf is no longer requires (nothing like that is required). The table AM fully owns batchringbuf, and initializes it for itself where needed. This means I've had to add a new table AM callback to take a mark, which isn't strictly necessary for heapam -- the heapam implementation just calls the relevant indexbatch.c routine, which in practice handles everything that's needed by heapam on its own. My guess is that Andres will slightly prefer things that way, since of course it's possible that some external table AM will need non-trivial code just to take a mark (restoring a mark has to be a bit more complicated to account for the read stream, which is why v20 already had one). We're losing 2 callbacks from the index AM API (for mark/restore), but gaining 2 very similar ones in the table AM API. We now expect the table AM's index_fetch_begin callback to set IndexScanDescData.xs_getnext_slot for the scan itself -- another thing that happens in the table AM rather than in indexam.c in v21. That way we don't need 4 extra TableAmRoutine callbacks (one for every combination of amgettuple, amgetbatch, index-only, plain). I don't think requiring exactly 4 slot-based variants set within TableAmRoutine, as was the case with the last several patch versions, was sensible. In v21, the table AM can provide as few or as many callbacks as it likes (obviously at least one callback must exist). This works fine, provided the table AM is sure that the callback will be correct for the duration of that particular scan, based on what is known about the scan when it begins. (In practice this means the table AM exploiting knowledge of whether the scan is index-only or plain, or whether it's amgettuple or amgetbatch -- but other variations might make sense in the future.) --=20 Peter Geoghegan --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0012-Hacky-implementation-of-making-read_stream_reset.patch" Content-Disposition: attachment; filename="v21-0012-Hacky-implementation-of-making-read_stream_reset.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614r4 RnJvbSA4MTg0NmFiMTc5NzAxODU3ZmE1MzUzZDAxZTk0NTYxNTc4MjI2NjY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAx Mi8xNV0gSGFja3kgaW1wbGVtZW50YXRpb24gb2YgbWFraW5nCiByZWFkX3N0cmVhbV9yZXNldCgp L2VuZCgpIG5vdCB3YWl0IGZvciBJTwoKTm90IHdhaXRpbmcgZm9yIElPIGR1cmluZyByZWFkX3N0 cmVhbV9yZXNldCgpIGNhbiBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlCmluIGNhc2VzIHdo ZXJlIHJlYWQgc3RyZWFtcyBhcmUgZnJlcXVlbnRseSByZXNldCBiZWZvcmUgdGhlIGVuZCBpcwpy ZWFjaGVkLiBDdXJyZW50IHVzZXJzIGRvIG5vdCBjb21tb25seSBkbyB0aGF0LCBidXQgdGhlIHVw Y29taW5nIHdvcmsgdG8gdXNlIGEKcmVhZCBzdHJlYW0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tz IGFzIHBhcnQgb2YgaW5kZXggc2NhbnMgY2FuIGRvIHNvCmZyZXF1ZW50bHkgaW4gc29tZSBxdWVy eSBwYXR0ZXJucy4gRS5nLiBpZiB0aGVyZSBpcyBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lcgpz aWRlIG9mIGEgbmVzdGVkIGxvb3AuCgpGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBwcm9i bGVtYXRpYyB0aG91Z2gsIGFzIHRoZXJlIGlzIG5vdGhpbmcgZm9yY2luZwp0aGUgZGlzY2FyZGVk IElPcyB0byBldmVyIGJlIGNvbXBsZXRlZCBpZiB0aGUgYmFja2VuZCBnb2VzIGlkbGUuIFRoYXQn cyBhdCB0aGUKdmVyeSBsZWFzdCBwcm9ibGVtYXRpYyBiZWNhdXNlIGl0IGxlYWRzIHRvIHRoZSB1 bmRlcmx5aW5nIGJ1ZmZlcnMgY29udGludWluZwp0byBiZSBwaW5uZWQgYW5kIHRoZSBJT3Mgc2hv d2luZyB1cCBpbiB0aGUgcGdfYWlvcyB2aWV3LgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvLmggICAgICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYyAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp by5oCmluZGV4IGVjNTQzYjc4NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2Fpby5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICsz MjgsNyBAQCBleHRlcm4gaW50CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsK IGV4dGVybiB2b2lkIHBnYWlvX3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4g Ym9vbCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4g dm9pZCBwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA4ZjdlMjY2 MDcuLjFhOTZhOGE5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTAsNiArMTA1MCwzMyBA QCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNl OwogfQogCit2b2lkCitwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93 KQoreworCXVpbnQ2NAkJcmVmX2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9I YW5kbGUgKmlvaDsKKwlQZ0Fpb0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9f ZnJvbV93cmVmKGlvdywgJnJlZl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25l cl9wcm9jbm8gPT0gTXlQcm9jTnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJP UiwgIm5vdCB5b3UiKTsKKworCWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2Vu ZXJhdGlvbiwgJnN0YXRlKSkKKwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBp b2gsCisJCQkJICAgImRpc2NhcmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9y ZXR1cm4pOworCisJaWYgKGlvaC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3du ZXIoJmlvaC0+cmVzb3duZXJfbm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9z dHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggNGI3 ZGI0YWIzLi5kMDVlNGZhZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpA QCAtNTI0LDcgKzUyNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCQkoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJp bmVfbGltaXQgfHwKIAkJIChzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ ZGlzdGFuY2UgJiYKIAkJICBzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJl YW0tPmRpc3RhbmNlID09IDApICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0 cmVhbS0+aW9zX2luX3Byb2dyZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9z dGFydF9wZW5kaW5nX3JlYWQoc3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3Ry ZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3 b3JzdCBjYXNlIHdlIGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkg KiB0aW1lLgogCSAqLwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJl YW0tPmRpc3RhbmNlID09IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8 fCBzdHJlYW0tPmRpc3RhbmNlIDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJ cGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJ CUFzc2VydChzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZl cl9pbmRleCk7CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVh bS0+ZGlzdGFuY2UgPT0gMCkKKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVy biBJbnZhbGlkQnVmZmVyOwogCiAJCS8qCkBAIC05MzAsNyArOTMwLDcgQEAgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQog CQkvKiBFbmQgb2Ygc3RyZWFtIHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDApCiAJCXsKLQkJCUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNz ZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJ fQogCX0KQEAgLTk1OCw3ICs5NTgsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5p b3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0 X2J1ZmZlcl9pbmRleF0pOwogCi0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJl YW0tPmlvc1tpb19pbmRleF0ub3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVu IHJlc2V0LCBkb24ndCBldmVuIHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0 LgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9f d3JlZl92YWxpZCgmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZf ZGlzY2FyZF9yZXN1bHQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlw Z2Fpb193cmVmX2NsZWFyKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9 CisJCQllbHNlCisJCQkJV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3Ap OworCisJCQluZWVkZWRfd2FpdCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVk X3dhaXQgPSBXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0K IAogCQlBc3NlcnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MtLTsKQEAgLTExNTIsNyArMTE3Miw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJl YWRTdHJlYW0gKnN0cmVhbSkKIAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBh aGVhZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7 CiAKIAkvKiBGb3JnZXQgYnVmZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUu ICovCiAJc3RyZWFtLT5idWZmZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0g CjIuNTMuMAoK --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0015-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v21-0015-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614d1 RnJvbSBiZWUxNTU4ZWQxYmUwYjI2MzNlNWIzZTczMzNhYjExMTQ4NmU5OGQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAx NS8xNV0gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDVjNjQ1NzAwMi4uNWRiYzUwNTQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODI3OCw3ICs4Mjc4LDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTgzNzcsNyArODM3NywyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODg2Niw3ICs4ODgyLDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTg5MTcsNyArODkzMyw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0013-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Disposition: attachment; filename="v21-0013-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614n3 RnJvbSBhODdjODAxNGI2M2MzMWQ2OTJjMmIxYTM1N2Q1NjBhMzVkMzhjYzliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTI6MjU6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAx My8xNV0gV0lQOiByZWFkIHN0cmVhbTogU3BsaXQgZGVjaXNpb24gYWJvdXQgbG9vayBhaGVhZAog Zm9yIEFJTyBhbmQgY29tYmluaW5nCgpQcmV2aW91cyBjb21taXRzIGNhdXNlZCBhIHJlZ3Jlc3Np b24gZHVlIHRvIHRoZSB0aGlzIGNvbmZsYXRpb24uIFRoaXMgaXMgYQpmaXJzdCBhdHRlbXB0IGF0 IGZpeGluZyB0aGUgcHJvYmxlbS4gIE5lZWRzIHNpZ25pZmljYW50IHJlb3JkZXJpbmcgYW5kCnNw bGl0dGluZyBpZiBpdCB3b3JrcyBvdXQuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0MiArKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCBkMDVlNGZhZDQuLmFkYjU1NDI5OSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OCwxMCArOTgsMTQgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJbWF4X3Bpbm5lZF9idWZmZXJzOwogCWludDE2CQlmb3J3 YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7Ci0JaW50MTYJCWRpc3RhbmNl OworCS8qIGxpbWl0IG9mIGhvdyBmYXIgdG8gcmVhZCBhaGVhZCBmb3IgSU8gY29tYmluaW5nICov CisJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CisJLyogbGltaXQgb2YgaG93IGZhciB0byByZWFk IGFoZWFkIGZvciBzdGFydGluZyBJTyBlYXJseSAqLworCWludDE2CQlyZWFkYWhlYWRfZGlzdGFu Y2U7CiAJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwotCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9yZWFk YWhlYWRfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogCWludAkJ CXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRo b2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJ TkcgKi8KQEAgLTMzMiw4ICszMzYsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo UmVhZFN0cmVhbSAqc3RyZWFtKQogCiAJCS8qIFNocmluayBkaXN0YW5jZTogbm8gbW9yZSBsb29r LWFoZWFkIHVudGlsIGJ1ZmZlcnMgYXJlIHJlbGVhc2VkLiAqLwogCQluZXdfZGlzdGFuY2UgPSBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgYnVmZmVyX2xpbWl0OwotCQlpZiAoc3RyZWFtLT5kaXN0 YW5jZSA+IG5ld19kaXN0YW5jZSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2UgPSBuZXdfZGlzdGFuY2U7 CisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IG5ld19kaXN0YW5jZSkKKwkJCXN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwogCiAJCS8qIFVubGVzcyB3 ZSBoYXZlIG5vdGhpbmcgdG8gZ2l2ZSB0aGUgY29uc3VtZXIsIHN0b3AgaGVyZS4gKi8KIAkJaWYg KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPiAwKQpAQCAtMzc0LDEyICszNzgsMjMgQEAgcmVhZF9z dHJlYW1fc3RhcnRfcGVuZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJICogcGVyZm9y bSBJTyBhc3luY2hyb25vdXNseSB3aGVuIHN0YXJ0aW5nIG91dCB3aXRoIGEgc21hbGwgbG9vay1h aGVhZAogCQkgKiBkaXN0YW5jZS4KIAkJICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAm JiBzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKQorCQlpZiAoc3RyZWFtLT5pb3NfaW5fcHJv Z3Jlc3MgPT0gMCkKIAkJewotCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9 PSAwKQotCQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKLQkJCWVsc2UKKwkJCWlmIChzdHJlYW0tPmRp c3RhbmNlX2RlY2F5X2hvbGRvZmYgPiAwKQogCQkJCXN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9s ZG9mZi0tOworCQkJZWxzZQorCQkJeworCQkJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA+IDEpCisJCQkJCXN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlLS07CisKKwkJCQkvKgorCQkJ CSAqIFhYWDogU2hvdWxkIHdlIGFjdHVhbGx5IHJlZHVjZSB0aGlzIGF0IGFueSB0aW1lIG90aGVy IHRoYW4KKwkJCQkgKiBhIHJlc2V0PyBGb3Igbm93IHdlIGhhdmUgdG8sIGFzIHRoaXMgaXMgYWxz byBhIGNvbmRpdGlvbgorCQkJCSAqIGZvciByZS1lbmFibGluZyBmYXN0X3BhdGguCisJCQkJICov CisJCQkJaWYgKHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA+IDEpCisJCQkJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZS0tOworCQkJfQogCQl9CiAJfQogCWVsc2UKQEAgLTQ0MCw2ICs0NTUsMTAx IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJ cmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBTaG91bGQgd2UgY29udGludWUgdG8gcGVyZm9ybSBs b29rIGFoZWFkPyAgVGhlIGxvb2sgYWhlYWQgbWF5IGFsbG93IHVzIHRvCisgKiBtYWtlIHRoZSBw ZW5kaW5nIElPIGxhcmdlciB2aWEgSU8gY29tYmluaW5nIG9yIHRvIGlzc3VlIG1vcmUgcmVhZCBh aGVhZC4KKyAqLworc3RhdGljIGJvb2wKK3JlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKFJl YWRTdHJlYW0gKnN0cmVhbSkKK3sKKwkvKiBuZXZlciBzdGFydCBtb3JlIElPcyB0aGFuIG91ciBj YXAgKi8KKwlpZiAoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPj0gc3RyZWFtLT5tYXhfaW9zKQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1v Zi1zdHJlYW0sIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2Ug PD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbmV2ZXIgcGluIG1vcmUgYnVmZmVycyB0aGFu IGFsbG93ZWQgKi8KKwlpZiAoc3RyZWFtLT5waW5uZWRfYnVmZmVycyArIHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogQWxsb3cgbG9va2luZyBmdXJ0aGVyIGFoZWFkIGlmIHdlIGhhdmUg YW4gdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYQorCSAqIGxhcmdlciBJTywgdGhlIElPIGlzIG5v dCB5ZXQgYmlnIGVub3VnaCBhbmQgd2UgZG9uJ3QgeWV0IGhhdmUgSU8gaW4KKwkgKiBmbGlnaHQu ICBOb3RlIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGV2ZW4gaWYgd2UgYXJlIHJlYWNoaW5nIHRoZQor CSAqIHJlYWRhaGVhZCBsaW1pdCAoYnV0IG5vdCB0aGUgYnVmZmVyIHBpbiBsaW1pdCkuCisJICoK KwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgY2FzZXMgd2hlcmUgZWl0aGVyIGVmZmVjdGl2ZV9p b19jb25jdXJyZW5jeSBpcworCSAqIGxvdyBvciB3ZSBuZXZlciBuZWVkIHRvIHdhaXQgZm9yIElP IGFuZCB0aHVzIGFyZSBub3QgaW5jcmVhc2luZyB0aGUKKwkgKiBkaXN0YW5jZS4gV2l0aG91dCB0 aGlzIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGxvdHMgb2Ygc21hbGwgSU9zLgorCSAqLworCWlmIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID4gMCAmJgorCQlzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDAgJiYKKwkJc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IG1v cmUgcmVhZGFoZWFkIGlmIHRoYXQnZCBwdXQgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGRvaW5nCisJ ICogcmVhZGFoZWFkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFt LT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA+PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFdlIGRvbid0IHN0 YXJ0IHRoZSBwZW5kaW5nIHJlYWQganVzdCBiZWNhdXNlIHdlJ3ZlIGhpdCB0aGUgZGlzdGFuY2Ug bGltaXQsCisgKiBwcmVmZXJyaW5nIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0 byBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6ZQorICogb25jZSBtb3JlIGJ1ZmZlcnMgaGF2ZSBi ZWVuIGNvbnN1bWVkLiAgQnV0IHRoaXMgaXMgbm90IGRlc2lyYWJsZSBpbiBhbGwKKyAqIHNpdHVh dGlvbnMgLSBzZWUgYmVsb3cuCisgKi8KK3N0YXRpYyBib29sCityZWFkX3N0cmVhbV9zaG91bGRf aXNzdWVfbm93KFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlpbnQxNgkJcGVuZGluZ19yZWFkX25i bG9ja3MgPSBzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzOworCisJLyogbm8gSU8gdG8gaXNz dWUgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIgY2FwICovCisJaWYgKHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID49IHN0cmVhbS0+bWF4X2lvcykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1vZi1zdHJlYW0sIHN0YXJ0 IHRoZSByZWFkCisJICogaW1tZWRpYXRlbHkuIFRoZXJlJ3Mgbm8gZGVmZXJyaW5nIGl0IGZvciBs YXRlci4KKwkgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBpb19jb21iaW5l X2xpbWl0LCB0aGVyZSdzIG5vIGNoYW5jZSBvZiBncm93aW5nCisJICogdGhlIHJlYWQgZnVydGhl ci4KKwkgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5pb19jb21iaW5l X2xpbWl0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNhbWUgaWYgY2FwcGVkIG5vdCBieSBpb19j b21iaW5lX2xpbWl0IGJ1dCBjb21iaW5lX2Rpc3RhbmNlICovCisJaWYgKHN0cmVhbS0+Y29tYmlu ZV9kaXN0YW5jZSA+IDAgJiYKKwkJcGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgd2UgY3VycmVudGx5 IGhhdmUgbm8gcmVhZHMgaW4gZmxpZ2h0IG9yIHByZXBhcmVkLCBpc3N1ZSB0aGUgSU8gb25jZQor CSAqIHdlIHN0b3BwZWQgbG9va2luZyBhaGVhZC4gVGhpcyBlbnN1cmVzIHRoZXJlJ3MgYWx3YXlz IGF0IGxlYXN0IG9uZSBJTworCSAqIHByZXBhcmVkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5l ZF9idWZmZXJzID09IDAgJiYKKwkJIXJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0cmVh bSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZAog cmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7CkBAIC00NTIsMTQg KzU2MiwxMyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlp ZiAoc3RyZWFtLT5iYXRjaF9tb2RlKQogCQlwZ2Fpb19lbnRlcl9iYXRjaG1vZGUoKTsKIAotCXdo aWxlIChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA8IHN0cmVhbS0+bWF4X2lvcyAmJgotCQkgICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0 cmVhbS0+ZGlzdGFuY2UpCisJd2hpbGUgKHJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0 cmVhbSkpCiAJewogCQlCbG9ja051bWJlciBibG9ja251bTsKIAkJaW50MTYJCWJ1ZmZlcl9pbmRl eDsKIAkJdm9pZAkgICAqcGVyX2J1ZmZlcl9kYXRhOwogCi0JCWlmIChzdHJlYW0tPnBlbmRpbmdf cmVhZF9uYmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCkKKwkJaWYgKHJlYWRfc3Ry ZWFtX3Nob3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJewogCQkJcmVhZF9zdHJlYW1fc3RhcnRf cGVuZGluZ19yZWFkKHN0cmVhbSk7CiAJCQljb250aW51ZTsKQEAgLTQ3OSw3ICs1ODgsOCBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYgKGJsb2NrbnVt ID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVhbS4gKi8KLQkJ CXN0cmVhbS0+ZGlzdGFuY2UgPSAwOworCQkJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAw OworCQkJc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKQEAg LTUxMSwyMSArNjIxLDEzIEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCX0KIAogCS8qCi0JICogV2UgZG9uJ3Qgc3RhcnQgdGhlIHBlbmRpbmcgcmVhZCBqdXN0 IGJlY2F1c2Ugd2UndmUgaGl0IHRoZSBkaXN0YW5jZQotCSAqIGxpbWl0LCBwcmVmZXJyaW5nIHRv IGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0byBmdWxsCi0JICogaW9fY29tYmluZV9s aW1pdCBzaXplIG9uY2UgbW9yZSBidWZmZXJzIGhhdmUgYmVlbiBjb25zdW1lZC4gIEhvd2V2ZXIs Ci0JICogaWYgd2UndmUgYWxyZWFkeSByZWFjaGVkIGlvX2NvbWJpbmVfbGltaXQsIG9yIHdlJ3Zl IHJlYWNoZWQgdGhlCi0JICogZGlzdGFuY2UgbGltaXQgYW5kIHRoZXJlIGlzbid0IGFueXRoaW5n IHBpbm5lZCB5ZXQsIG9yIHRoZSBjYWxsYmFjayBoYXMKLQkgKiBzaWduYWxlZCBlbmQtb2Ytc3Ry ZWFtLCB3ZSBzdGFydCB0aGUgcmVhZCBpbW1lZGlhdGVseS4gIE5vdGUgdGhhdCB0aGUKLQkgKiBw ZW5kaW5nIHJlYWQgY2FuIGV4Y2VlZCB0aGUgZGlzdGFuY2UgZ29hbCwgaWYgdGhlIGxhdHRlciB3 YXMgcmVkdWNlZAotCSAqIGFmdGVyIGhpdHRpbmcgdGhlIHBlci1iYWNrZW5kIGJ1ZmZlciBsaW1p dC4KKwkgKiBDaGVjayBpZiB0aGUgcGVuZGluZyByZWFkIHNob3VsZCBiZSBpc3N1ZWQgbm93LCBv ciBpZiB3ZSBzaG91bGQgZ2l2ZSBpdAorCSAqIGFub3RoZXIgY2hhbmNlIHRvIGdyb3cgdG8gdGhl IGZ1bGwgc2l6ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGVuZGluZyByZWFkIGNhbiBleGNl ZWQgdGhlIGRpc3RhbmNlIGdvYWwsIGlmIHRoZSBsYXR0ZXIKKwkgKiB3YXMgcmVkdWNlZCBhZnRl ciBoaXR0aW5nIHRoZSBwZXItYmFja2VuZCBidWZmZXIgbGltaXQuCiAJICovCi0JaWYgKHN0cmVh bS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPiAwICYmCi0JCShzdHJlYW0tPnBlbmRpbmdfcmVhZF9u YmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCB8fAotCQkgKHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5kaXN0YW5jZSAmJgotCQkgIHN0cmVhbS0+cGlubmVk X2J1ZmZlcnMgPT0gMCkgfHwKLQkJIHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkgJiYKLQkJc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPCBzdHJlYW0tPm1heF9pb3MpCisJaWYgKHJlYWRfc3RyZWFtX3No b3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGluZ19yZWFk KHN0cmVhbSk7CiAKIAkvKgpAQCAtNTM0LDcgKzYzNiw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdl IGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAq LwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPnJl YWRhaGVhZF9kaXN0YW5jZSA8PSAwKTsKIAogCWlmIChzdHJlYW0tPmJhdGNoX21vZGUpCiAJCXBn YWlvX2V4aXRfYmF0Y2htb2RlKCk7CkBAIC03MjQsMTAgKzgyNiwxNyBAQCByZWFkX3N0cmVhbV9i ZWdpbl9pbXBsKGludCBmbGFncywKIAkgKiBkb2luZyBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6 ZWQgcmVhZHMuCiAJICovCiAJaWYgKGZsYWdzICYgUkVBRF9TVFJFQU1fRlVMTCkKLQkJc3RyZWFt LT5kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVkX2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9s aW1pdCk7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVk X2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCk7CisJCXN0cmVhbS0+Y29tYmluZV9k aXN0YW5jZSA9IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdDsKKwl9CiAJZWxzZQotCQlzdHJlYW0t PmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFu Y2U7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDE7CisJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJfQorCXN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVzdW1lX2NvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2U7CiAKIAkvKgogCSAqIFNpbmNlIHdl IGFsd2F5cyBhY2Nlc3MgdGhlIHNhbWUgcmVsYXRpb24sIHdlIGNhbiBpbml0aWFsaXplIHBhcnRz IG9mCkBAIC04MjYsNyArOTM1LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MgPT0gMCk7CiAJCUFzc2VydChzdHJlYW0tPmZvcndhcmRlZF9idWZmZXJzID09 IDApOwogCQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAxKTsKLQkJQXNzZXJ0KHN0 cmVhbS0+ZGlzdGFuY2UgPT0gMSk7CisJCUFzc2VydChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9PSAxKTsKIAkJQXNzZXJ0KHN0cmVhbS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCk7CiAJ CUFzc2VydChzdHJlYW0tPnBlcl9idWZmZXJfZGF0YV9zaXplID09IDApOwogCQlBc3NlcnQoc3Ry ZWFtLT5pbml0aWFsaXplZF9idWZmZXJzID4gc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4KTsK QEAgLTkwMCw3ICsxMDA5LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAq c3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1v cmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLwotCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CisJ CQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZm ZXJfaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRf YnVmZmVycyA9IDA7CiAJCQlzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0gPSBJ bnZhbGlkQnVmZmVyOwpAQCAtOTE2LDcgKzEwMjUsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChz dHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7 CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1 cm4gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKgpAQCAtOTMwLDcgKzEwMzksNyBAQCByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEp CiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8gKi8KIAkJaWYgKHN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMCkKIAkJewotCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CisJCQlB c3NlcnQoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxp ZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1MSw3ICsxMDYwLDYgQEAgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlzdHJl YW0tPmlvc1tzdHJlYW0tPm9sZGVzdF9pb19pbmRleF0uYnVmZmVyX2luZGV4ID09IG9sZGVzdF9i dWZmZXJfaW5kZXgpCiAJewogCQlpbnQxNgkJaW9faW5kZXggPSBzdHJlYW0tPm9sZGVzdF9pb19p bmRleDsKLQkJaW50MzIJCWRpc3RhbmNlOwkvKiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGNsYW1w ZWQgYmVsb3cgKi8KIAkJYm9vbAkJbmVlZGVkX3dhaXQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRo YXQgd2Ugc3RpbGwgYWdyZWUgb24gdGhlIGJ1ZmZlcnMuICovCkBAIC05NjIsNyArMTA3MCw3IEBA IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9i dWZmZXJfZGF0YSkKIAkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiByZXNldCwgZG9uJ3QgZXZl biB3YWl0IGZvciB0aGUgSU8sIGp1c3QKIAkJICogZGlzY2FyZCBpdC4KIAkJICovCi0JCWlmIChz dHJlYW0tPmRpc3RhbmNlIDwgMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDwg MCkKIAkJewogCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5v cC5pb193cmVmKSAmJgogCQkJCSFzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuZm9yZWlnbl9pbykK QEAgLTEwMTEsMTEgKzExMTksMzggQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkgKiB0aGUgc3RyZWFtLCBhcyBz dHJlYW0tPmRpc3RhbmNlID09IDAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mCiAJCSAqIGhhdmlu ZyByZWFjaGVkIHRoZSBlbmQuCiAJCSAqLwotCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDAgJiYg bmVlZGVkX3dhaXQpCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IDAgJiYgbmVl ZGVkX3dhaXQpCiAJCXsKLQkJCWRpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZSAqIDI7Ci0JCQlk aXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOwotCQkJ c3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkJLyogd2lkZXIgdGVtcG9yYXJ5IHZhbHVl LCBkdWUgdG8gb3ZlZmxvdyByaXNrICovCisJCQlpbnQzMgkJcmVhZGFoZWFkX2Rpc3RhbmNlOwor CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSAqIDI7 CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBNaW4ocmVhZGFoZWFkX2Rpc3RhbmNlLCBzdHJlYW0t Pm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IHJl YWRhaGVhZF9kaXN0YW5jZTsKKwkJfQorCisJCS8qCisJCSAqIFdoZXRoZXIgd2UgbmVlZGVkIHRv IHdhaXQgb3Igbm90LCBhbGxvdyBmb3IgbW9yZSBJTyBjb21iaW5pbmcgaWYgd2UKKwkJICogbmVl ZGVkIHRvIGRvIElPLiBUaGUgcmVhc29uIHRvIGRvIHNvIGluZGVwZW5kZW50IG9mIG5lZWRpbmcg dG8gd2FpdAorCQkgKiBpcyB0aGF0IHdoZW4gdGhlIGRhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIGtl cm5lbCBwYWdlIGNhY2hlLCBJTworCQkgKiBjb21iaW5pbmcgcmVkdWNlcyB0aGUgc3lzY2FsbCAv IGRpc3BhdGNoIG92ZXJoZWFkLCBtYWtpbmcgaXQKKwkJICogd29ydGh3aGlsZSByZWdhcmRsZXNz IG9mIG5lZWRpbmcgdG8gd2FpdC4KKwkJICoKKwkJICogSXQgaXMgYWxzbyBpbXBvcnRhbnQgd2l0 aCBpb191cmluZyBhcyBpdCB3aWxsIG5ldmVyIHNpZ25hbCB0aGUgbmVlZAorCQkgKiB0byB3YWl0 IGZvciByZWFkcyBpZiBhbGwgdGhlIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZXJlIGFy ZQorCQkgKiBoZXVyaXN0aWNzIHRvIGRlYWwgd2l0aCB0aGF0IGluIG1ldGhvZF9pb191cmluZy5j LCBidXQgdGhleSBvbmx5CisJCSAqIHdvcmsgd2hlbiB0aGUgSU8gZ2V0cyBsYXJnZSBlbm91Z2gu CisJCSAqLworCQlpZiAoc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID4gMCAmJgorCQkJc3RyZWFt LT5jb21iaW5lX2Rpc3RhbmNlIDwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KQorCQl7CisJCQkv KiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGR1ZSB0byBvdmVmbG93IHJpc2sgKi8KKwkJCWludDMy CQljb21iaW5lX2Rpc3RhbmNlOworCisJCQljb21iaW5lX2Rpc3RhbmNlID0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlICogMjsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBNaW4oY29tYmluZV9kaXN0 YW5jZSwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KTsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBN aW4oY29tYmluZV9kaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3Ry ZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gY29tYmluZV9kaXN0YW5jZTsKIAkJfQogCiAJCS8qCkBA IC0xMDk0LDEwICsxMjI5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0g KnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAogI2lmbmRlZiBSRUFEX1NUUkVBTV9E SVNBQkxFX0ZBU1RfUEFUSAogCS8qIFNlZSBpZiB3ZSBjYW4gdGFrZSB0aGUgZmFzdCBwYXRoIGZv ciBhbGwtY2FjaGVkIHNjYW5zIG5leHQgdGltZS4gKi8KKwkvKgorCSAqIEZJWE1FOiBJdCdzIHdh eSB0b28gZWFzeSB0byB3cm9uZ2x5IGZhc3QgcGF0aC4gSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MK KwkgKiBzZXZlcmFsIHByZS1leGlzdGluZyBjYXNlcyB3aGVyZSBpdCB0cmlnZ2VycyBiZWNhdXNl IHdlIGFyZSBub3QgaXNzdWluZworCSAqIGFkZGl0aW9uYWwgcHJlZmV0Y2hpbmcgKGUuZy4gYmVj YXVzZSBvZiBhIHNtYWxsCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5KSBhbmQgdGh1cyBz dHJlYW0tPnBpbm5lZF9idWZmZXJzIHN0YXlzIGF0IDEKKwkgKiBhZnRlciByZWFkX3N0cmVhbV9s b29rX2FoZWFkKCkuCisJICovCiAJaWYgKHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDAgJiYK IAkJc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9PSAwICYmCiAJCXN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMSAmJgotCQlzdHJlYW0tPmRpc3RhbmNlID09IDEgJiYKKwkJc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPT0gMSAmJgorCQlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2UgPT0gMSAm JgogCQlzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID09IDAgJiYKIAkJc3RyZWFtLT5wZXJf YnVmZmVyX2RhdGFfc2l6ZSA9PSAwKQogCXsKQEAgLTExNDMsOCArMTI4Niw5IEBAIHJlYWRfc3Ry ZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSAq c3RyYXRlZ3kpCiBCbG9ja051bWJlcgogcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogewotCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZTsKLQlz dHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPnJlc3VtZV9yZWFkYWhlYWRfZGlzdGFuY2Ug PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rp c3RhbmNlID0gc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlID0gMDsKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCkBAIC0xMTU2LDcg KzEzMDAsOCBAQCByZWFkX3N0cmVhbV9wYXVzZShSZWFkU3RyZWFtICpzdHJlYW0pCiB2b2lkCiBy ZWFkX3N0cmVhbV9yZXN1bWUoUmVhZFN0cmVhbSAqc3RyZWFtKQogewotCXN0cmVhbS0+ZGlzdGFu Y2UgPSBzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPmNvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogfQogCiAvKgpAQCAt MTE3Miw3ICsxMzE3LDggQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQog CUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwotCXN0cmVhbS0+ ZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IC0xOworCXN0cmVh bS0+Y29tYmluZV9kaXN0YW5jZSA9IC0xOwogCiAJLyogRm9yZ2V0IGJ1ZmZlcmVkIGJsb2NrIG51 bWJlciBhbmQgZmFzdCBwYXRoIHN0YXRlLiAqLwogCXN0cmVhbS0+YnVmZmVyZWRfYmxvY2tudW0g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC0xMjA0LDggKzEzNTAsMTAgQEAgcmVhZF9zdHJlYW1f cmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVz cyA9PSAwKTsKIAogCS8qIFN0YXJ0IG9mZiBhc3N1bWluZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlz dHJlYW0tPmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ ZGlzdGFuY2U7CisJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAxOworCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJc3RyZWFtLT5yZXN1bWVfcmVhZGFoZWFkX2Rpc3RhbmNlID0g c3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2U7CisJc3RyZWFtLT5yZXN1bWVfY29tYmluZV9kaXN0 YW5jZSA9IHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZTsKIAlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSAwOwogfQogCi0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Disposition: attachment; filename="v21-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig61450 RnJvbSAwZDJmYjg3YWI2NDUzOWI2NGZjZTk0OGQ3ODI5ZDc4YTBjZWVlOGY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMSBBcHIgMjAyNiAxNzo0NDo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDAxLzE1XSBS ZW5hbWUgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGFyZ3VtZW50IGZvcgogY2xhcml0eS4KClJl bmFtZSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUncyBjYWxsX2FnYWluIGFyZ3VtZW50IHRvIGhl YXBfY29udGludWUsCmZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBwb2ludGVkLXRvIHZhcmlhYmxl IG5hbWUgKEluZGV4U2NhbkRlc2NEYXRhJ3MKeHNfaGVhcF9jb250aW51ZSBmaWVsZCkuCgpQcmVw YXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBtb3ZlIGluZGV4IHNjYW4g cmVsYXRlZApoZWFwYW0gZnVuY3Rpb25zIGludG8gdGhlaXIgb3duIGZpbGUuCgpBdXRob3I6IFBl dGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFu ZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5 anhvYWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTAgKysrKyst LS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAxYmU4ZWE0ODQuLmRj N2RiNTg4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0x MjYsNyArMTI2LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCSBib29sICpj YWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBi b29sICphbGxfZGVhZCkKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAo QnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CkBAIC0xMzUsNyArMTM1LDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAog CUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCiAJLyogV2UgY2FuIHNraXAgdGhl IGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlp ZiAoISpjYWxsX2FnYWluKQorCWlmICghKmhlYXBfY29udGludWUpCiAJewogCQkvKiBTd2l0Y2gg dG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCiAJCUJ1ZmZl cgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKQEAgLTE2MSw3ICsxNjEsNyBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCQkJ CQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwKIAkJCQkJ CQkJCQkJYWxsX2RlYWQsCi0JCQkJCQkJCQkJCSEqY2FsbF9hZ2Fpbik7CisJCQkJCQkJCQkJCSEq aGVhcF9jb250aW51ZSk7CiAJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOwogCUxv Y2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKQEAgLTE3MSw3 ICsxNzEsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAJCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBjYW4gbW9yZSB0 aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAogCQkgKiBjaGFpbiBiZSB2aXNpYmxlLgogCQkgKi8K LQkJKmNhbGxfYWdhaW4gPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJKmhlYXBf Y29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAogCQlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7CiAJCUV4ZWNTdG9yZUJ1ZmZl ckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOwpA QCAtMTc5LDcgKzE3OSw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAllbHNlCiAJewogCQkvKiBXZSd2ZSByZWFjaGVkIHRoZSBl bmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmNhbGxfYWdhaW4gPSBmYWxzZTsKKwkJKmhlYXBf Y29udGludWUgPSBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci0tIAoyLjUz LjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0014-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v21-0014-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614j2 RnJvbSBjZDg3YzhmNWUzNTA1MGI3NmZjYmE4N2ZjZWJlZGVjNGQ4ZTJhYmZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAx NC8xNV0gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzAu LmRlZWM4M2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTQsNiArMjE0 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggMWE5NmE4YTlhLi5mMGI0YTY1MjIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01NzEsNiArNTcxLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MTAsMjMgKzYyMCwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTExNzksNiArMTIwNCwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjAuLmMyMDk1ZWY3NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xODQsNiArMTg0LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQpCiAK IAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lvcywg MCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOworCQlD b25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgmYnMt PmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4 IDZiZTgwZDJkYS4uOTQ3MTM1YTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk3LDYgKzE5Nyw3IEBAIEFCSV9jb21wYXRpYmls aXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBMRVRJ T04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9fSU9f U1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJT19J T19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5nLiIK IEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEgaW9f dXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byByZWFk IGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0011-read_stream-Only-increase-distance-when-waiting-.patch" Content-Disposition: attachment; filename="v21-0011-read_stream-Only-increase-distance-when-waiting-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614t5 RnJvbSA1ZDNmOWY4ODA1ZTRlYTI2MDAyNzEwZDRmOTBjNjYyMTVhNjhjNTYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDEx LzE1XSByZWFkX3N0cmVhbTogT25seSBpbmNyZWFzZSBkaXN0YW5jZSB3aGVuIHdhaXRpbmcKIGZv ciBJTwoKVGhpcyBhdm9pZHMgaW5jcmVhc2luZyB0aGUgZGlzdGFuY2UgdG8gdGhlIG1heGltdW0g aW4gY2FzZXMgd2hlcmUgdGhlIElPCnN1YnN5c3RlbSBpcyBhbHJlYWR5IGtlZXBpbmcgdXAuIFRo aXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IKcGVyZm9ybWFuY2UgZm9yIHR3byByZWFz b25zOgoKLSBQaW5uaW5nIGEgbG90IG9mIGJ1ZmZlcnMgaXMgbm90IGNoZWFwLiBJZiBhZGRpdGlv bmFsIHBpbnMgYWxsb3cgdXMgdG8gYXZvaWQKICBJTyB3YWl0cywgaXQncyBkZWZpbml0ZWx5IHdv cnRoIGl0LCBidXQgaWYgd2UgY2FuIGFscmVhZHkgZG8gYWxsIHRoZQogIG5lY2Vzc2FyeSByZWFk YWhlYWQgYXQgYSBkaXN0YW5jZSBvZiAxNiwgcmVhZGluZyBhaGVhZCA1MTIgYnVmZmVycyBjYW4K ICBpbmNyZWFzZSB0aGUgQ1BVIG92ZXJoZWFkIHN1YnN0YW50aWFsbHkuICBUaGlzIGlzIHBhcnRp Y3VsYXJseSBub3RpY2VhYmxlCiAgd2hlbiB0aGUgdG8tYmUtcmVhZCBibG9ja3MgYXJlIGFscmVh ZHkgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLgoKLSBJZiB0aGUgcmVhZCBzdHJlYW0gaXMgcmVh ZCB0byBjb21wbGV0aW9uLCByZWFkaW5nIGluIGRhdGEgZWFybGllciB0aGFuCiAgbmVlZGVkIGlz IG9mIGxpbWl0ZWQgY29uc2VxdWVuY2VzLCBsZWF2aW5nIGFzaWRlIHRoZSBDUFUgY29zdHMgbWVu dGlvbmVkCiAgYWJvdmUuIEJ1dCBpZiB0aGUgcmVhZCBzdHJlYW0gd2lsbCBub3QgYmUgZnVsbHkg Y29uc3VtZWQsIGUuZy4gYmVjYXVzZSBpdCBpcwogIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVz dGVkIGxvb3Agam9pbiwgdGhlIGFkZGl0aW9uYWwgSU8gY2FuIGJlIGEgc2VyaW91cwogIHBlcmZv cm1hbmNlIGlzc3VlLiBUaGlzIGlzIG5vdCB0aGF0IGNvbW1vbmx5IGEgcHJvYmxlbSBmb3IgY3Vy cmVudCByZWFkCiAgc3RyZWFtIHVzZXJzLCBidXQgdGhlIHVwY29taW5nIHdvcmssIHRvIHVzZSBh IHJlYWQgc3RyZWFtIHRvIGZldGNoIHRhYmxlCiAgcGFnZXMgYXMgcGFydCBvZiBhbiBpbmRleCBz Y2FuLCBmcmVxdWVudGx5IGVuY291bnRlcnMgdGhpcy4KCk5vdGUgdGhhdCB0aGlzIGNvbW1pdCB3 b3VsZCBoYXZlIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIGRvd25zaWRlcyB3aXRob3V0CmVhcmxp ZXIgY29tbWl0cy4gSW4gcGFydGljdWxhciB0aGUgZWFybGllciBjb21taXQgdG8gYXZvaWQgZGVj cmVhc2luZyB0aGUKcmVhZGFoZWFkIGRpc3RhbmNlIHdoZW4gdGhlcmUgd2FzIHJlY2VudCBJTyBp cyBjcnVjaWFsLCBhcyBvdGhlcndpc2Ugd2UgdmVyeQpvZnRlbiB3b3VsZCBlbmQgdXAgbm90IHJl YWRpbmcgYWhlYWQgYWdncmVzc2l2ZWx5IGVub3VnaCBhbnltb3JlIHdpdGggdGhpcwpjb21taXQs IGR1ZSB0byBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSBsZXNzIG9mdGVuLgoKQXV0aG9yOgpSZXZp ZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgfCAzOSArKysrKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDMxZjllMzVk ZS4uNGI3ZGI0YWIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk1 MiwyMiArOTUyLDUxIEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCWludDE2CQlpb19pbmRleCA9IHN0cmVh bS0+b2xkZXN0X2lvX2luZGV4OwogCQlpbnQzMgkJZGlzdGFuY2U7CS8qIHdpZGVyIHRlbXBvcmFy eSB2YWx1ZSwgY2xhbXBlZCBiZWxvdyAqLworCQlib29sCQluZWVkZWRfd2FpdDsKIAogCQkvKiBT YW5pdHkgY2hlY2sgdGhhdCB3ZSBzdGlsbCBhZ3JlZSBvbiB0aGUgYnVmZmVycy4gKi8KIAkJQXNz ZXJ0KHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5i dWZmZXJzW29sZGVzdF9idWZmZXJfaW5kZXhdKTsKIAotCQlXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVh bS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOwogCiAJCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA+IDApOwogCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcy0tOwogCQlpZiAoKytzdHJlYW0t Pm9sZGVzdF9pb19pbmRleCA9PSBzdHJlYW0tPm1heF9pb3MpCiAJCQlzdHJlYW0tPm9sZGVzdF9p b19pbmRleCA9IDA7CiAKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5 IGFmdGVyIHdlIGRvIEkvTy4gKi8KLQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsK LQkJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIHN0cmVhbS0+bWF4X3Bpbm5lZF9idWZmZXJzKTsK LQkJc3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkvKgorCQkgKiBJZiB0aGUgSU8gd2Fz IGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIHdlIHdpbGwgbmV2ZXIgc2VlCisJCSAqIFdhaXRSZWFk QnVmZmVycygpIGJsb2NrLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIHdoZW4KKwkJICog ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAgaXMgdXNlZCwgYXMgYWxsIElPIHdpbGwgYmUKKwkJ ICogc3luY2hyb25vdXMuIFdpdGhvdXQgdHJlYXRpbmcgc3luY2hyb25vdXMgSU8gYXMgaGF2aW5n IHdhaXRlZCwgd2UnZAorCQkgKiBuZXZlciBhbGxvdyB0aGUgZGlzdGFuY2UgdG8gZ2V0IGxhcmdl IGVub3VnaCB0byBhbGxvdyBmb3IgSU8KKwkJICogY29tYmluaW5nLCByZXN1bHRpbmcgaW4gYmFk IHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mbGFn cyAmIFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKQorCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwor CisJCS8qCisJCSAqIEhhdmUgdGhlIGxvb2stYWhlYWQgZGlzdGFuY2UgcmFtcCB1cCByYXBpZGx5 IGFmdGVyIHdlIG5lZWRlZCB0bworCQkgKiB3YWl0IGZvciBJTy4gV2Ugb25seSBpbmNyZWFzZSB0 aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwKKwkJICogdG8gYXZvaWQgaW5jcmVh c2luZyB0aGUgZGlzdGFuY2UgZnVydGhlciB0aGFuIG5lY2Vzc2FyeSwgYXMgbG9va2luZworCQkg KiBhaGVhZCB0b28gZmFyIGNhbiBiZSBjb3N0bHksIGJvdGggZHVlIHRvIHRoZSBjb3N0IG9mIHVu bmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1ZmZlcnMgYW5kIGR1ZSB0byBkb2luZyBJ T3MgdGhhdCBtYXkgbmV2ZXIgYmUKKwkJICogY29uc3VtZWQgaWYgdGhlIHN0cmVhbSBpcyBlbmRl ZC9yZXNldCBiZWZvcmUgY29tcGxldGlvbi4KKwkJICoKKwkJICogSWYgd2UgZGlkIG5vdCBuZWVk IHRvIHdhaXQsIHRoZSBjdXJyZW50IGRpc3RhbmNlIHdhcyBldmlkZW50bHkKKwkJICogc3VmZmlj aWVudC4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIGlmIHdl IGFscmVhZHkgcmVhY2hlZCB0aGUgZW5kIG9mCisJCSAqIHRoZSBzdHJlYW0sIGFzIHN0cmVhbS0+ ZGlzdGFuY2UgPT0gMCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogaGF2aW5nIHJlYWNo ZWQgdGhlIGVuZC4KKwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMCAmJiBuZWVkZWRf d2FpdCkKKwkJeworCQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsKKwkJCWRpc3Rh bmNlID0gTWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJl YW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCX0KIAogCQkvKgogCQkgKiBBcyB3ZSBuZWVkZWQg SU8sIHByZXZlbnQgZGlzdGFuY2UgZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKLS0gCjIu NTMuMAoK --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v21-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig61507 RnJvbSA5MzkwNmYwMGZmMWVkNmEwNWNjZWU2ODllN2MxYzM1ZWUwMzFlYzRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMSAwOS8xNV0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBvciBvdmVyZmxvdyBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUKQU0gdGhlIGFiaWxp dHkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5n Cmhhc2ggaW5kZXggc2NhbnMuCgpiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgYWx3YXlzIHRydWUg ZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMgKHNpbmNlIGhhc2gKZG9lc24ndCBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgYW5kIGFsd2F5cyB1c2VzIGFuIE1WQ0Mgc25hcHNob3QpLCBzbwp0aGUgYnVm ZmVyIHBpbiBpbnRlcmxvY2sgaGVsZCBvbiBlYWNoIGJhdGNoIGlzIGFsd2F5cyBkcm9wcGVkIGF0 IHVubG9jawp0aW1lIC0tIGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbiByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0uICBUaGlzIGRpZmZlcnMKZnJvbSBoYXNoJ3MgcHJldmlvdXMgYXBwcm9hY2ggb2Yg aG9sZGluZyBvbiB0byBhIHBpbiBmb3IgYXQgbGVhc3QgYXMKbG9uZyBhcyB0aGUgc2NhbiB3YXMg c3RvcHBlZCBvbiB0aGUgcGlubmVkIGluZGV4IHBhZ2UuCgpHdWFyYW50ZWVpbmcgdGhhdCByZXR1 cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMKZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLCB3 aGVyZQp0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55IHBpbnMgb24gaGVh cCBwYWdlcy4gIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZAphcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvIHByZXZlbnQgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4KbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLiAgTm90 ZSwgaG93ZXZlciwKdGhhdCBoYXNoIHN0aWxsIGhvbGRzIG9uIHRvIHBpbnMgbmVlZGVkIGZvciBp dHMgb3duIGludGVybmFsIHB1cnBvc2VzCihlLmcuLCBpdCdsbCBzdGlsbCBob2xkIG9udG8gYSBw aW4gZHVyaW5nIGEgYnVja2V0IHNwbGl0KS4KCmhhc2hraWxsaXRlbXNiYXRjaCAodGhlIGhhc2gg aW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoCmludGVyZmFjZSkgcGVy Zm9ybXMgTFBfREVBRCBtYXJraW5nIG9mIGRlYWQgaW5kZXggZW50cmllcywgd2hpbGUKZm9sbG93 aW5nIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyB0byB0aGUgb2xkIGFwcHJvYWNoLiAgSXQgcmVs aWVzIG9uCmNvbXBhcmluZyB0aGUgYmF0Y2gncyBzYXZlZCBMU04gYWdhaW5zdCB0aGUgY3VycmVu dCBwYWdlIExTTiB0byBkZXRlY3QKY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgZmFrZSBMU04gc3VwcG9ydApmb3IgdW5sb2dnZWQgcmVsYXRpb25z LiAgUHJlcGFyYXRvcnkgY29tbWl0IGU1ODM2ZjdiIGFkZGVkIHRoYXQgc3VwcG9ydAp0byB0aGUg aGFzaCBpbmRleCBBTS4KCmhhc2h1bmd1YXJkYmF0Y2ggaXMgYWxzbyBwcm92aWRlZCwgZXZlbiB0 aG91Z2ggaXQgaXMgbm90IGN1cnJlbnRseQpleGVyY2lzZWQ6IGhhc2ggZG9lcyBub3Qgc3VwcG9y dCBpbmRleC1vbmx5IHNjYW5zIChhbmQgYWx3YXlzIHVzZXMgYW4KTVZDQyBzbmFwc2hvdCksIHNv IGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBhbHdheXMgdHJ1ZSBmb3IgaGFzaCBpbmRleApzY2Fu cyB3aXRoIGhlYXBhbSAoYXMgbm90ZWQgYWxyZWFkeSwgaW4gcHJhY3RpY2UgZXZlcnkgYmF0Y2gn cyBsb2NrIGFuZApwaW4gYXJlIHJlbGVhc2VkIGF0IHVubG9jayB0aW1lIGR1cmluZyBoYXNoIHNj YW5zKS4gIFRoZSBjYWxsYmFjayBpcyBhCnJlcXVpcmVtZW50IGZvciBhbWdldGJhdGNoIGluZGV4 IEFNcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog VG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FI Mi1Xem1ZcWhhY0JIMTYxcGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDgxICsr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8IDIxMCArKysrKysrKysrLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIHwgMzQ1ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNl cnRpb25zKCspLCA1MDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li42 ZDYyYzYxYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gK IAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRl ZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hP X1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hh dCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRh CiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAg aXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0 aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBpbmRleCBwYWdlJ3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyog aW5kZXggcGFnZSdzIGJsb2NrIG51bWJlciAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyog aW5kZXggcGFnZSdzIGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyog aW5kZXggcGFnZSdzIHJpZ2h0IHNpYmxpbmcgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRl ZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQs IHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJy ZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBv dmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93 IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMg b3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCku ICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0J ICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQg ZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50 cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1 cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkg Ki8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov Ci0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hT Y2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1Qg Ki8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2Nh bnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5j dXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1 ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNW YWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNj YW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1Zikp LCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVm aW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9z KS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRC bG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2Fu cG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNj YW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorLyogQWNjZXNzIHRoZSBoYXNo LXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICov CisjZGVmaW5lIEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxf YmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgSGFzaEJhdGNoRGF0YSkKIAogLyoKICAqCUhh c2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4K QEAgLTE3OCwxNSArMTQwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJ ICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICov CiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBp ZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpr aWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwot CWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICov Ci0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFu ZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0Rh dGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVl RGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAt MzY4LDExICszMjEsMTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERh dHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVj a1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IElu ZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNo Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQg aGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVy biBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5 cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBoYXNodW5n dWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0 ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJ CQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDAyLDkg QEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1l dGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFz aHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hf bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0 LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4g aGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQzNCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFz aF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1 CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRf bmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQs CiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJu IHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMg Ki8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1 cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIg YWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1 Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBu ZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3Bs aXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2Up IHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVw IHRvIG5leHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3Ms IGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUg c2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChi dXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhl IGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBh bGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0 Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRv IHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3Vn aCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUg c2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxk CisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGlu KSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNr ZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50 LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBh Y3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3Ig Y29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMg b3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJz ZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8g bWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFy Y2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBp dGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQt bG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGls ZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFs bG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXgg cGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBz Y2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGlu IG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0 aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywg aGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBp ZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGlu CitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hl cyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcg Y29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdp dGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9z aXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBi dWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9u IHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQg YnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxp dCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMg YnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggMmUzMmJlMjMzLi42NWYzOGM5M2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMKQEAgLTExMywxMCArMTEzLDEwIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVn aW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFt Z2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAotCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0 dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW1raWxsaXRl bXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gaGFzaHVu Z3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCkBAIC0yOTksNTMgKzI5OSwy OCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxs LAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhl IHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2gg b2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9z c3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVj ayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBz Y2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVj dGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0J ICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsK LQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRv IHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkg Ki8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMs IHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBs ZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBh dCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5k ZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2Ft ZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBk b24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJ ICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJ CXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFn ZSk7CisJCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQkJCWlmIChzby0+ bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tz by0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQl9CisJCV9oYXNoX2Ry b3BzY2FuYnVmKHJlbCwgc28pOwogCi0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4K LQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0 aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQly ZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJl dHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24g J2RpcicpICovCisJcmV0dXJuIF9oYXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0K IAogCkBAIC0zNTUsMjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mg c2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7 CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVz ID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hh c2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3 aGlsZSAoYmF0Y2ggIT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWZvciAoaW50IGl0ZW1JbmRleCA9IGJhdGNoLT5m aXJzdEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5k ZXgrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRl eF0udGFibGVUaWQsIDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCiAJCS8qCi0JCSAqIF9o YXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRy aWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBU aGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhl IHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KKwkJICogX2hhc2hfbmV4dCByZWxlYXNlcyB0aGUg cHJpb3IgYmF0Y2ggZm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9yZQorCQkgKiBhbGxvY2F0aW5nIHRo ZSBuZXh0IG9uZSwgc28gb25seSBvbmUgYmF0Y2ggaXMgZXZlciB1c2VkIGF0IGEgdGltZQogCQkg Ki8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7 Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg YmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM5NiwxNyArMzcxLDE2IEBAIGhhc2hi ZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9 IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hT Y2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0g SW52YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVm ZmVyOwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19i dWNfc3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtp bGxlZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0g TWF4SW5kZXhUdXBsZXNQZXJQYWdlOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0g TUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29y a3NwYWNlID0gMDsKIAogCXJldHVybiBzY2FuOwogfQpAQCAtNDIxLDE4ICszOTUsOCBAQCBoYXNo cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdl LCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDAp Ci0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJl bCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFz aF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0K IAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fu a2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBz Y2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQ0 MSw2ICs0MDUsMTExIEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNj YW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0K IAorLyoKKyAqCWhhc2hraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXgg dHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAoraGFzaGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXRE YXRhKHNjYW4sIGJhdGNoKTsKKwlCdWZmZXIJCWJ1ZjsKKwlQYWdlCQlwYWdlOworCUhhc2hQYWdl T3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCW1heG9mZjsKKwlib29s CQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCUFz c2VydChiYXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgaGFz aGJhdGNoLT5jdXJyUGFnZSwgSEFTSF9SRUFELAorCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExI X09WRVJGTE9XX1BBR0UpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7 CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBs YXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9o YXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOworCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW1heG9mZiA9 IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0 Y2gtPmRlYWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsg aSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+ ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF07CisKKwkJb2ZmbnVtID0gY3Vyckl0ZW0tPmluZGV4T2Zmc2V0OworCisJ CUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCisJCXsK KwkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOworCQkJSW5kZXhU dXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKKworCQkJ aWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vyckl0ZW0tPnRhYmxlVGlk KSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCisJ CQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJ ZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWlu Zy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQorCQkJ CQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLwor CQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJ CQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9mZm51 bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2luY2Ug dGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBX aGVuZXZlcgorCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBh Z2UncworCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNl IGp1c3QgYSBoaW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcpCisJeworCQlvcGFxdWUt Pmhhc2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJCUJ1ZmZlckZpbmlzaFNl dEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tfcGFnZToKKwlfaGFzaF9y ZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJaGFzaHVuZ3VhcmRiYXRjaCgpIC0tIERyb3Ag YmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxs ZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4g aGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgor ICovCit2b2lkCitoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCit7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0 RGF0YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBp ZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlh dGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlSZWxlYXNlQnVmZmVy KGhhc2hiYXRjaC0+YnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93 biBhIHNjYW4KICAqLwpAQCAtNDUwLDE3ICs1MTksOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNj YW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVl KHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBA QCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkg KiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1v ZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4g SGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBs ZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3Mu IFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBf ZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50 IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNv LCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9n Z2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgog CSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFz aF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ry b3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ry b3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhp cyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdl Ci0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZv ciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2Yg YSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2Nh bmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGlu IHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNv LT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5j dXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2Ug Ki8KKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9k cm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9i dWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5 IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxp ZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmlt YXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1Zh bGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBz by0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAq LwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYo cmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7 Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0g ZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYuLmE2ODEyYzZhMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4 U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2 ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2Nh bkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNj YW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBh Z2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4 dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2gg b2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3Jp YmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxv Y2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRl bSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNj cmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1 cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNl dCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlz IHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJh dGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVy d2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0 aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoK LSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdp dGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxk IG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRo ZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hf bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRj aCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNo U2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0g SGFzaEJhdGNoR2V0RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubzsK IAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJh dGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBj dXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBu ZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUK LQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3 ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2Rl IG11c3QgZGVhbCB3aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVz LgorCSAqIEEgYmF0Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdz IHNjYW4gZGlyZWN0aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJp b3JiYXRjaC0+ZGlyID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRv IHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2Vu IGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxh c3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQor CQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5uZXh0UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewot CQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9X X1BBR0UpOwotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJ ZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1 ZTsKLQkJfQotCX0KKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRo ZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiBy ZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBt b3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRj aHJpbmcpCisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOwor CisJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8q IEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxf YmF0Y2hfYWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAq LworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1 ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0J CWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJ ewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7 CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBM SF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJy UG9zLnByZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0J CQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAg TEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2Ug YWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJ CQkgKiBvcGVyYXRpb24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBh Y3F1aXJlZAotCQkJCSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNv X2J1Y2tldF9idWYgfHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikK LQkJCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVs c2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1h aW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAor CQkgKiBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVy ZS4KKwkJICovCisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYg PT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1 Zik7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQg bG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uo c2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28p OwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7 CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5V TEw7CiAJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2Fu LT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBS ZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAq LworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3Jl YWRwcmV2KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0g RmluZCB0aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQg dGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUg Zmlyc3QgaXRlbSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQot ICoJCWluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0 aCB0aGUgc2NhbgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2gg b2YgaXRlbXMgKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0 aGUgaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRo CisgKgkJdGhlIHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBp ZiB0aGUgcGFnZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVy ZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBp cyBhIGJ1Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5k IGRhdGEgYWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJl ZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQg dG8gdGhlIGhlYXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwg ZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3Ro ZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVy IG1hdGNoZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAq Ci0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwg d2l0aCBwaW4gaGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhl bGQgb24gb3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9u IHRoZSBidWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVj a2V0IHBhZ2UsIGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9v bAorSW5kZXhTY2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAg LTI5Niw3ICsyODMsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUg b3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0 Y2g7CiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVt ZW50KQpAQCAtMzI2LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChj dXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxM OwogCiAJLyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBk byB0aGlzIGJlZm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNo X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9y ZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIg d2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJ bnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBB bGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9i YXRjaF9hbGxvYyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlp bmcgdGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBw YWdlIGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9y ZWFkcGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRl bUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRl bS0+aGVhcFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEg dmFsaWQgdHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250 YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFz aF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNv LT5jdXJyUG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQg aW5kZXggcGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRo ZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBp ZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisg Kgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRj aGluZyBpdGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8g dGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNh dGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5n IGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0 aW9uIGRpcikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1Ziwg U2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhh c2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0 YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFn ZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50 MTYJCWl0ZW1JbmRleDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1 ZikpOwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVS RkxPV19QQUdFKTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQ YWdlR2V0T3BhcXVlKHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJy UG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1 ZiA9IGJ1ZjsKKwloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVm KTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0K IAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlv biBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwg c28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJ CQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJ LyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJl bnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhl IGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICog Q291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0 cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAq IElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90 IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3Mu YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBz by0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9j a051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxr bm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJ CWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVm OwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHBy ZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtu b3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5n IHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBk b24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hh c2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0J CQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFn ZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tO dW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlk KGJ1ZikpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1 ZjsKKwkJCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwog CQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0 ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRj aC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9 CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBv c2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9s YXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRl eCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAor CQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVw bGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFu eSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhl IHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0 aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRj aGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRo ZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlf aGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5o YXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25v OwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlp ZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsK LQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0J CQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2 aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93 IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0 aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9u J3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNo X2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJ CSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Js a25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChi dWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7 CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJ fQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3Mu bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVt SW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0g aXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAx OwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8 Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoK KwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUg Zm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWlu aW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBz by0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19z cGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxr bm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwor CQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBv ciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJ CSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFu IGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQg KGJ5IHRoZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tl dF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFz ZWQuCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNoLT5idWYpOworCisJCS8q IENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnBy ZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gtPm5leHRQYWdlID0gb3Bh cXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQ YWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0g b3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9z LmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ug b3BhcXVlLT5oYXNob19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJ CWhhc2hiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJaGFzaGJh dGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChz by0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCS8qIHdlIHNh dmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAqLworCWluZGV4YW1fdXRp bF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVmKTsKKworCUFzc2VydChi YXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAK IC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4 IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVh ZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdl LgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5E aXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlv biBkaXIsCisJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsK QEAgLTY0MCw3ICs1ODgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJ CQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9o YXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2 ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsK IAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2MzUsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgt LTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hh c2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZl aXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJ ewpAQCAtNzA2LDEzICs2NTQsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0g aW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0 ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1f aGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3Nh dmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRl bSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVh cFRpZCA9IGl0dXAtPnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOwog CWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQg PSAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggMDgxYWRiYzg4Li4zMzFk NWY0ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtMTYsNyArMTYsNiBAQAog CiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5o IgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgpAQCAtMzMsNyArMzIsNyBAQCBfaGFzaF9jaGVja3F1YWwoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFR1cGxlIGl0dXApCiAJLyoKIAkgKiBDdXJyZW50bHksIHdlIGNhbid0IGNoZWNrIGFueSBv ZiB0aGUgc2NhbiBjb25kaXRpb25zIHNpbmNlIHdlIGRvIG5vdAogCSAqIGhhdmUgdGhlIG9yaWdp bmFsIGluZGV4IGVudHJ5IHZhbHVlIHRvIHN1cHBseSB0byB0aGUgc2tfZnVuYy4gQWx3YXlzCi0J ICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hnZXR0dXBsZSBhbHJlYWR5IHNldCB0 aGUgcmVjaGVjayBmbGFnCisJICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hnZXRi YXRjaCBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCiAJICogdG8gbWFrZSB0aGUgbWFpbiBp bmRleHNjYW4gY29kZSBkbyBpdC4KIAkgKi8KICNpZmRlZiBOT1RfVVNFRApAQCAtNTA1LDEyOSAr NTA0LDMgQEAgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWws IEJ1Y2tldCBvbGRfYnVja2V0LAogCiAJcmV0dXJuIG5ld19idWNrZXQ7CiB9Ci0KLS8qCi0gKiBf aGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2Nh biBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkLgotICoKLSAqIHNjYW4tPm9wYXF1 ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFi b3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVy YWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAw KS4KLSAqCi0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdlIGFu ZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIuICBO b3RlIHRoYXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RFQUQg c3RhdHVzICh3aGljaCBpcyBvbmx5IGEgaGludCkuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhh dmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHBpbgotICog b24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNjYW5Qb3NJc1Bpbm5lZChz by0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFz c3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxldGUuCi0gKgotICogVGhl cmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQgYXQgdGhlIHRpbWUgVkFD VVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xlYW51cCBsb2NrIG9uIHRo ZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBhIHBpbi4gIEEgc2NhbiBj YW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZQotICog YnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwgYnV0IGl0IGNhbiBuZXZl ciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBsb2NrcyB0aGUgbmV4dCBw YWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBwcmV2aW91cyBvbmUuICBU aGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNjaWRlbnRhbGx5Ci0gKiBr aWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1bnJlbGF0ZWQgdHVwbGUu Ci0gKi8KLXZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUhh c2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJlciBibGtubzsKLQlCdWZm ZXIJCWJ1ZjsKLQlQYWdlCQlwYWdlOwotCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlPZmZzZXRO dW1iZXIgb2ZmbnVtLAotCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2ls bGVkOwotCWludAkJCWk7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JYm9vbAkJ aGF2ZVBpbiA9IGZhbHNlOwotCi0JQXNzZXJ0KHNvLT5udW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQo c28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNoU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBzY2FuIHN0YXRlLCBzbyB3 ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICogcGFnZXMuCi0JICovCi0J c28tPm51bUtpbGxlZCA9IDA7Ci0KLQlibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOwotCWlm IChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qCi0JCSAqIFdlIGFs cmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBidWZmZXIsIHNvLCBhbGwgd2UgbmVlZCB0byBkbyBpcwot CQkgKiBhY3F1aXJlIGxvY2sgb24gaXQuCi0JCSAqLwotCQloYXZlUGluID0gdHJ1ZTsKLQkJYnVm ID0gc28tPmN1cnJQb3MuYnVmOwotCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUp OwotCX0KLQllbHNlCi0JCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQs IExIX09WRVJGTE9XX1BBR0UpOwotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFx dWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0 TnVtYmVyKHBhZ2UpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQotCXsKLQkJ aW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KLQkJb2ZmbnVtID0g Y3Vyckl0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQ b3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0p OwotCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJdGVtSWQJCWlpZCA9IFBh Z2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0KLQkJCWlmIChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT5oZWFwVGlkKSkKLQkJCXsKLQkJCQlpZiAoIWtp bGxlZHNvbWV0aGluZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFVzZSB0aGUgaGludCBiaXQg aW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJCSAqIHVwZGF0ZSB0aGUgcGFn ZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQotCQkJCQkgKiBhcmUgbm90 IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KLQkJCQkJICovCi0JCQkJCWlm ICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQotCQkJCQkJZ290byB1bmxvY2tfcGFnZTsK LQkJCQl9Ci0KLQkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlp ZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2Yg aW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQo b2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxh dGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBXaGVuZXZlcgotCSAqIHdlIG1hcmsg YW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2UncwotCSAqIExIX1BBR0VfSEFT X0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LgotCSAqLwot CWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmhhc2hvX2ZsYWcgfD0gTEhfUEFH RV9IQVNfREVBRF9UVVBMRVM7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwg dHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoc28tPmhhc2hzb19idWNrZXRfYnVmID09 IHNvLT5jdXJyUG9zLmJ1ZiB8fAotCQloYXZlUGluKQotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9z LmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQllbHNlCi0JCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1 Zik7Ci19CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbAppbmRleCAzN2I3NTM2MWUuLjhkZDA4ZDI1NiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s CkBAIC04NDUsNyArODQ1LDggQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAg PGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5jdGlvbj4pLiAgTm90ZSBhbHNv IHRoYXQKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb25zIG11c3Qg bmV2ZXIgbW9kaWZ5IHRoZQogICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxk PiBwYXJhbWV0ZXIuICBUaGUgY29yZQotICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgPGZpbGVuYW1l PnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5hbWU+ c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHByb3Zp ZGUKICAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIApAQCAtOTIxLDggKzkyMiw4IEBAIGFta2ls bGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgPHBhcmE+CiAgICBXaGlsZSBpbXBs ZW1lbnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25h bCwKICAgIGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgYXMgaXQgYWxs b3dzIGZ1dHVyZSBzY2FucyB0byBza2lwCi0gICBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuICBU aGUgY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kIHRoYXQgY3VycmVudGx5Ci0gICBzdXBwb3J0IDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSkgaW1wbGVtZW50cworICAga25v d24tZGVhZCBpbmRleCBlbnRyaWVzLiAgQm90aCBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRo YXQgY3VycmVudGx5CisgICBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g KEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKICAgIGFy ZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuCiAgICBU aGUgdGFibGUgQU0gbWF5IGNhbGwKQEAgLTk2NSw4ICs5NjYsOCBAQCBhbWtpbGxpdGVtc2JhdGNo IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgTm90ZSB0 aGF0IHRoaXMgTFNOIGNvbXBhcmlzb24gdGVjaG5pcXVlIHJlcXVpcmVzCiAgICB0aGUgaW5kZXgg QU0gdG8gdXNlIGZha2UgKG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykgTFNOcyBvbiBpdHMgcGFn ZXMgZm9yCiAgICByZWxhdGlvbnMgd2hlcmUgV0FMIGlzIG5vdCBnZW5lcmF0ZWQsIHNpbmNlIHJl YWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbgotICAgdGhhdCBjYXNlLiAgU2VlIHRoZSBCLXRy ZWUgaW5kZXggaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlCi0gICBleGFtcGxlIG9mIHRo aXMgdGVjaG5pcXVlLiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgZmFrZSBM U05zCisgICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJlZSBhbmQgaGFzaCBpbmRleCBpbXBsZW1l bnRhdGlvbnMgZm9yIHJlZmVyZW5jZQorICAgZXhhbXBsZXMgb2YgdGhpcyB0ZWNobmlxdWUuICBB biBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExTTnMKICAgIGNhbiBzdGls bCBwcm92aWRlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIGJ1dCBzaG91 bGQgc2ltcGx5CiAgICBkbyBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9uIGRvZXMgbm90IGdlbmVy YXRlIFdBTCAoaS5lLiwgd2hlbgogICAgPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwvZnVu Y3Rpb24+IGlzIGZhbHNlKSwgc2luY2UgdGhlIExTTiBjb21wYXJpc29uCkBAIC05OTMsOSArOTk0 LDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGxlYWYgcGFnZSwg d2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CiAgICA8Y29tbWFuZD5W QUNVVU08L2NvbW1hbmQ+LgogICAgRm9ybWFsbHksIGFuIGluZGV4IEFNIG1heSBob2xkIGEgZGlm ZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBsZQotICAgaW50ZXJsb2NrcywgaW4g aXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIHRoZSBidWlsdC1pbgot ICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ ICZtZGFzaDsgQi10cmVlCi0gICAmbWRhc2g7IGhvbGRzIGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBT ZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgorICAgaW50ZXJsb2NrcywgaW4gaXRz IHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQtaW4KKyAg IGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAm bWRhc2g7IEItdHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1ZmZlciBw aW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgogICAgZm9yIGRldGFpbHMg b24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMgZnVuY3Rp b24KICAgIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBndWFyZGVkIGJhdGNo LgogICA8L3BhcmE+CkBAIC0xMDY1LDggKzEwNjYsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1 cmluZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CiAgICBzY2FucyB0aGUgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFN CiAgICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBp dC4gIFNlZQotICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKLSAgIHJlZmVy ZW5jZSBleGFtcGxlLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFu ZCByZXVzZWQgYnkKKyAgIDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rp b24+X2hhc2hfbmV4dDwvZnVuY3Rpb24+IGZvcgorICAgcmVmZXJlbmNlIGV4YW1wbGVzLiAgVGhl IHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKICAgIHRo ZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9uPiBjYWxs LCBhdm9pZGluZwogICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24gZHVyaW5nIHRoZSBiaXRt YXAgc2Nhbi4KICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyM2UwNDNj YzAuLjJlZTZkNTgwZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMTAsNiArMTIx MCw3IEBAIEhhc2gKIEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxsb2NGdW5jCitI YXNoQmF0Y2hEYXRhCiBIYXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxldGVTdHJlYW1Qcml2YXRl CiBIYXNoQ29tcGFyZUZ1bmMKQEAgLTEyMzEsOCArMTIzMiw2IEBAIEhhc2hQYWdlU3RhdAogSGFz aFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0 YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVG dW5jCi0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v21-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig61528 RnJvbSBjYmFhM2U5N2U2OWE4YTljY2Y3ZTQ3ZDA1YTBiNWYzNWMxZmM0YWNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwOC8xNV0g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3aGljaCBpbnRyb2R1Y2Vk IHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgYWR2YW5j ZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1ZmZpY2llbnRseSBtYW55 IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApzdHJlYW0ncyB0YXJnZXQg cHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0IGluZGV4IHByZWZldGNo aW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFyZ2UgcmFuZ2Ugc2NhbnMg dGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMgMzB4CmZhc3RlciB3aXRo IGxvY2FsIFNTRHMgd2hlbiBidWZmZXJlZCBJL08gaXMgdXNlZCwgYW5kIDUweCBmYXN0ZXIgb3Ig bW9yZQp3aXRoIGhpZ2hlci1sYXRlbmN5IHN0b3JhZ2Ugc3VjaCBhcyBuZXR3b3JrLWF0dGFjaGVk IGJsb2NrIGRldmljZXMsCndoZXJlIHRoZSBiZW5lZml0IG9mIGhpZGluZyBJL08gbGF0ZW5jeSB0 aHJvdWdoIHByZWZldGNoaW5nIGlzIGV2ZW4KZ3JlYXRlci4KCkEgbmV3IEdVQyAoZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCkgY29udHJvbHMgdGhlIHVzZSBvZiBpbmRleApwcmVmZXRjaGluZy4g IFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgJ29uJywgc28gYWxsIHBsYWluIGluZGV4IHNjYW5zIHVz ZQpwcmVmZXRjaGluZyB3aGVyZSBzdXBwb3J0IGV4aXN0cy4gIEFsbCBpbmRleC1vbmx5IHNjYW5z IHdpbGwgYWxzbyB1c2UKcHJlZmV0Y2hpbmcgYXV0b21hdGljYWxseSB3aGVyZSBzdXBwb3J0ZWQg KG9uY2UgdGhlIHNjYW4gc3RhcnRzIHRvCnJlcXVpcmUgYSBzaWduaWZpY2FudCBudW1iZXIgb2Yg aGVhcCBmZXRjaGVzKS4KCkFuIGltcG9ydGFudCBnb2FsIG9mIHRoZSBhbWdldGJhdGNoIGRlc2ln biBpcyB0byBlbmFibGUgdGhlIHRhYmxlIEFNJ3MKcmVhZCBzdHJlYW0gY2FsbGJhY2sgdG8gYWR2 YW5jZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24gdXNpbmcgVElEcyB0aGF0CmFwcGVhciBvbiBhIGxl YWYgcGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGxlYWYK cGFnZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRoIHNjYW5zIG9mIGluZGV4ZXMgd2hlcmUgZWFjaCBs ZWFmIHBhZ2UKaGFwcGVucyB0byBoYXZlIHJlbGF0aXZlbHkgZmV3IGRpc3RpbmN0IGhlYXAgYmxv Y2tzIGFtb25nIGl0cyBtYXRjaGluZwpUSURzIChhcyB3ZWxsIGFzIHdpdGggc2NhbnMgd2l0aCBs ZWFmIHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGZldwp0b3RhbCBtYXRjaGluZyBpdGVtcyku ICBJbmRleCBzY2FucyBjYW4gaGF2ZSBhcyBtYW55IGFzIDY0IG9wZW4gYmF0Y2hlcywKd2hpY2gg dGVzdGluZyBoYXMgc2hvd24gdG8gYmUgYWJvdXQgdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2Fu IGV2ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBhcmUgbWFpbnRhaW5lZCBpbiBzY2FuIG9yZGVyIHVz aW5nIGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRhdGEgc3RydWN0dXJlLgoKSW4gcmFyZSBjYXNlcyB3 aGVyZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMgcXVhc2ktYXJiaXRyYXJ5IGxpbWl0IG9mIDY0LAp0 aGUgcmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJpbHkgcGF1c2VkIHVzaW5nIHRoZSByZWFkIHN0cmVh bSBwYXVzaW5nCm1lY2hhbmlzbSBhZGRlZCBieSBjb21taXQgMzgyMjljYjkuICBQcmVmZXRjaGlu ZyAodmlhIHRoZSByZWFkIHN0cmVhbSkKaXMgcmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBv c2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMgY3VycmVudCBvcGVuCmJhdGNoIGFuZCB0aGVuIGZy ZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBmcm9tIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZwpidWZm ZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvciBzY2Fu cyB0byBob2xkCm9wZW4gbW9yZSB0aGFuIGFib3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNp cmVkIEkvTyBwcmVmZXRjaApkaXN0YW5jZS4KClRoZSBoZXVyaXN0aWMgdXNlZCB0byBkZWNpZGUg d2hlbiB0byBiZWdpbiBwcmVmZXRjaGluZyBkZWxheXMKaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNj YW4ncyByZWFkIHN0cmVhbSB1bnRpbCB0aGUgc2NhbiB0cmFuc2l0aW9ucyBmcm9tCml0cyBmaXJz dCBiYXRjaCB0byBpdHMgc2Vjb25kIGJhdGNoLiAgRWFjaCBiYXRjaCBjb3JyZXNwb25kcyB0byBt YXRjaGluZwpUSURzIGZyb20gYSBzaW5nbGUgaW5kZXggbGVhZiBwYWdlLCBzbyBwcmVmZXRjaGlu ZyBvbmx5IGJlZ2lucyBvbmNlIHRoZQpzY2FuIHJlYWRzIGZyb20gaXRzIHNlY29uZCBsZWFmIHBh Z2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcKaXRlbS4gIEEgc2VsZWN0aXZlIGlu ZGV4IHNjYW4gdGhhdCB0b3VjaGVzIG9ubHkgb25lIGxlYWYgcGFnZSBuZXZlcgpyZWFjaGVzIHRo ZSBzZWNvbmQgYmF0Y2gsIHNvIHRoZSBoZXVyaXN0aWMgY29ycmVjdGx5IGF2b2lkcyBwcmVmZXRj aGluZwpvdmVyaGVhZC4gIFRoZSBwaWN0dXJlIGZvciBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzIGlz IG1peGVkLgoKVGhlIHNhbWUgcHJpbmNpcGxlIGFwcGxpZXMgdG8gbmVzdGxvb3AgaW5uZXIgaW5k ZXggc2NhbnMgd2l0aCB2ZXJ5IHRpZ2h0CmxpbWl0cyAoZS5nLiwgYSBjb3JyZWxhdGVkIHN1YnF1 ZXJ5IHdpdGggTElNSVQgMSksIHdoZXJlIGVhY2ggcmVzY2FuCnJlYWRzIGZyb20gb25seSBhIHNp bmdsZSBsZWFmIHBhZ2U6IHRoZSBoZXVyaXN0aWMgYXZvaWRzIHRoZSBjb3N0IG9mCnJlcGVhdGVk bHkgcmVzZXR0aW5nIGEgcmVhZCBzdHJlYW0gYWNyb3NzIG1hbnkgcmVzY2Fucy4gIE9uIHRoZSBv dGhlcgpoYW5kLCBzb21lIHNlbGVjdGl2ZSBzY2FucyB0aGF0IGFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd291bGQKZ2VudWluZWx5IGJlbmVmaXQgZnJvbSBwcmVmZXRjaGluZywg YnV0IG5ldmVyIGdldCBhcyBmYXIgYXMgcmVhY2hpbmcKdGhlaXIgc2Vjb25kIGJhdGNoIC0tIGEg bWlzc2VkIG9wcG9ydHVuaXR5LCB3aGVyZSB0aGUgaGV1cmlzdGljIGlzCm92ZXJseSBjYXV0aW91 cy4KCkNvbnZlcnNlbHksIHRoZSBoZXVyaXN0aWMgaXMgbm90IGNhdXRpb3VzIGVub3VnaCB3aXRo IHNsaWdodGx5IGxlc3MKc2VsZWN0aXZlIG5lc3Rsb29wIGlubmVyIHNjYW5zIChlLmcuLCBMSU1J VCAzIHdpdGhpbiBhIExBVEVSQUwgam9pbikuClRoZXNlIHJlc2NhbnMgbWF5IHNwYW4gdHdvIGxl YWYgcGFnZXMsIGp1c3QgYmFyZWx5IGNyb3NzaW5nIHRoZQpzZWNvbmQtYmF0Y2ggdGhyZXNob2xk LCB3aGlsZSBzdGlsbCBvbmx5IG5lZWRpbmcgdG8gZmV0Y2ggdHdvIG9yIHRocmVlCmhlYXAgcGFn ZXMgLS0gbm90IGVub3VnaCBmb3IgcHJlZmV0Y2hpbmcgdG8gcmVhbGlzdGljYWxseSBoZWxwIG9y IHBheQpmb3IgaXRzZWxmIG9uIGFueSBpbmRpdmlkdWFsIHJlc2Nhbi4gIFN1Y2ggcXVlcmllcyBh cmUgcmVncmVzc2VkIGJ5IHRoZQp3b3JrIGZyb20gdGhpcyBjb21taXQgKHJlbGF0aXZlIHRvIFBv c3RncmVTUUwgMTgpLCB0aG91Z2ggb25seSB3aGVuIHRoZQpzY2FuIGhhcyB0byByZWFkIGhlYXAg cGFnZXMgZnJvbSBzdG9yYWdlLgoKQWRkaW5nIGEgc21hcnRlciBoZXVyaXN0aWMgdGhhdCBhZGRy ZXNzZXMgYm90aCBzaG9ydGNvbWluZ3MgcmVtYWlucyBhcwp3b3JrIGZvciBhIGZ1dHVyZSByZWxl YXNlLiAgUGFzc2luZyBkb3duIGFuIEV4ZWNTZXRUdXBsZUJvdW5kIHN0eWxlIGhpbnQKYW5kIHVz aW5nIHRoYXQgaGludCB0byBpbmZsdWVuY2UgaG93IHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBp dHMKZGlzdGFuY2Ugc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcHByb2FjaC4KCkF1dGhvcjogVG9t YXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bi b3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpS ZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0 ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgg ICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDM4ICsrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jICAgIHwgNDU2ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDM2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMTYgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgIDY2ICsrLQogZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0ICAgICAgICB8ICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwgNjM5IGluc2VydGlvbnMo KyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1N2M1YzZiNWYuLmE4MDEw MjZiNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTM1LDYgKzEzNSwxOSBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAkvKiBQbGFpbiBpbmRleCBzY2FuIHhzX2xhc3RpbmJsb2Nr IG9wdGltaXphdGlvbiAqLwogCWJvb2wJCXhzX2xhc3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0 aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCiAKKwkvKgorCSAqIFJlYWQgc3RyZWFtIHN0 YXRlIGZvciBwcmVmZXRjaGluZyAob25seSB1c2VkIGR1cmluZyBhbWdldGJhdGNoIHNjYW5zKS4K KwkgKgorCSAqIFRoZSByZWFkIHN0cmVhbSBtb3ZlcyBhaGVhZCBvZiB0aGUgc2NhbidzIGN1cnJl bnQgcG9zaXRpb24gdXNpbmcgaXRzCisJICogb3duIHByZWZldGNoaW5nIHBvc2l0aW9uIChwZXIg Y29udmVudGlvbnMgc3VwcG9ydGVkIGJ5IGluZGV4YmF0Y2guYykuCisJICogVGhlIHJlYWQgc3Ry ZWFtIGlzIGFsbG9jYXRlZCBlYXJseSBpbiB0aGUgc2NhbiwgYW5kIHJlc2V0IG9uIHJlc2Nhbgor CSAqIChhbmQgd2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcykuCisJICovCisJYm9vbAkJ eHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQgYmF0Y2ggaXMgcmVhZD8gKi8KKwlTY2Fu RGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpcjsJLyogaW5kZXggc2NhbiBkaXJlY3Rpb24gKi8K KwlCbG9ja051bWJlciB4c19wcmVmZXRjaF9ibG9jazsJLyogbGFzdCBibG9jayByZXR1cm5lZCB0 byB4c19yZWFkX3N0cmVhbSAqLworCVJlYWRTdHJlYW0gKnhzX3JlYWRfc3RyZWFtOyAvKiBwcmVm ZXRjaGluZyByZWFkIHN0cmVhbSAqLworCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaW5kZXhiYXRjaC5oCmluZGV4IDU1NzA4OWVkOS4uNzIwMzg0MWY3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9pbmRleGJhdGNoLmgKQEAgLTQzLDYgKzQzLDcgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9p bml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBv cy52YWxpZCA9IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9 IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlz Y2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKQEAgLTY0LDE2ICs2NSwxNiBAQCBl eHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKQogLyoKICAqIEZldGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1h dGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhlIGZpcnN0KS4KICAqCi0gKiBDYWxsZWQg d2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNzZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkg aGFzIG5vIG1vcmUKLSAqIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv bi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCi0gKiBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxs IGhlcmUgZm9yIHRoZSBzY2FuLgorICogQ2FsbGVkIHdoZW4gY2FsbGVyJ3MgY3VycmVudCBzY2Fu QmF0Y2gvcHJlZmV0Y2hCYXRjaCAocGFzc2VkIHRvIHVzIGFzCisgKiBwcmlvckJhdGNoKSBoYXMg bm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxs ZXIKKyAqIHBhc3NlcyBhIE5VTEwgcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZv ciB0aGUgc2Nhbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3Nl ZCBieSBjYWxsZXIgaW4gdGhlIGdpdmVuIHNjYW4KICAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVu IHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhhdCBkaXJlY3Rpb24uCiAgKgogICogVGhp cyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVy LiAgV2UgZG9uJ3QKICAqIGZyZWUgYW55IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxl ZnQgdXAgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIKLSAqIGlzIGFsc28gcmVzcG9uc2libGUg Zm9yIGFkdmFuY2luZyB0aGVpciBwb3NpdGlvbi4KKyAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9y IGFkdmFuY2luZyB0aGVpciBzY2FuUG9zL3ByZWZldGNoUG9zIHBvc2l0aW9uLgogICovCiBzdGF0 aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuQmF0Y2gKIHRhYmxlYW1fdXRp bF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAwNTdjMGQyYTQuLjU1YTE2OTM5NiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCkBAIC0yMTUsNiArMjE1LDEwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQg YW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCiAJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5k ZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KIAkgKiBk ZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidz IHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxhciwgZHVyaW5nIHByZWZldGNoaW5nIHRoZSBy ZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMKKwkgKiB0aGUgZW5kLW9mLXNjYW4gdmlhIHBy ZWZldGNoQmF0Y2guICB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaCgpCisJICogY2hlY2tz IHRoZXNlIGZsYWdzIHNvIHRoYXQgdGhlIHNjYW4gc2lkZSBkb2Vzbid0IHJlcGVhdCB0aGUgc2Ft ZQorCSAqIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0IGxhdGVyIHJlYWNoZXMgdGhhdCBiYXRjaCBh cyBzY2FuQmF0Y2guCiAJICovCiAJYm9vbAkJa25vd25FbmRCYWNrd2FyZDsKIAlib29sCQlrbm93 bkVuZEZvcndhcmQ7CkBAIC0yNjYsMTEgKzI3MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5 IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91dAogICogdGhl IHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBp bnRvIHRoZSBmdXR1cmUuCiAgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9y ZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKiBJbmRleCBzY2FucyBzb21l dGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkgc2V2ZXJhbCBkb3plbiBiYXRjaGVzIGluIG9yZGVy CisgKiB0byBtYWludGFpbiBhbiBvcHRpbWFsIEkvTyBwcmVmZXRjaCBkaXN0YW5jZSAoZm9yIHJl YWRpbmcgdGFibGUgYmxvY2tzKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVy CiB7CiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZb XSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQg cG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIHByZWZldGNoUG9zOwkvKiBwcmVmZXRjaGlu ZyBwb3NpdGlvbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3Jl IHBvc2l0aW9uICovCiAKIAkvKiBtYXJrUG9zJ3MgYmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZlciB3 aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCkBAIC01MDgsNiArNTE1LDM3IEBAIGluZGV4 X3NjYW5fYmF0Y2hfYmFzZShJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiAJcmV0dXJuIChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0 OwogfQogCisvKgorICogQ29tcGFyZSB0d28gYmF0Y2ggcmluZyBwb3NpdGlvbnMgaW4gdGhlIGdp dmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgaWYgcG9zMSBpcyBi ZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRpdmUgaWYgcG9zMSBpcworICogYWhlYWQgb2Yg cG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2luZGV4X3NjYW5fcG9zX2NtcChCYXRjaFJp bmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MyLAorCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJhdGNoZGlmZjsKKworCUFzc2VydChwb3MxLT52 YWxpZCAmJiBwb3MyLT52YWxpZCk7CisKKwliYXRjaGRpZmYgPSAoaW50OCkgKHBvczEtPmJhdGNo IC0gcG9zMi0+YmF0Y2gpOworCWlmIChiYXRjaGRpZmYgIT0gMCkKKwl7CisJCS8qIFJlc29sdmUg Y29tcGFyaXNvbiB1c2luZyBkaWZmZXJpbmcgYmF0Y2ggb2Zmc2V0cyAqLworCQlyZXR1cm4gYmF0 Y2hkaWZmOworCX0KKworCS8qCisJICogUmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGl0ZW1zW10t d2lzZSBpbmRleGVzIGZyb20gY2FsbGVyJ3MgcG9zaXRpb25zLAorCSAqIHNpbmNlIGJvdGggcG9z aXRpb25zIHBvaW50IHRvIHRoZSBzYW1lIHJpbmcgYnVmZmVyIGJhdGNoCisJICovCisJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcmV0dXJuIHBvczEtPml0ZW0gLSBw b3MyLT5pdGVtOworCWVsc2UKKwkJcmV0dXJuIHBvczItPml0ZW0gLSBwb3MxLT5pdGVtOworfQor CiAvKgogICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4K ICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2YiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKIGV4 dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc29ydDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCBlYzJhZmJkYjQuLjM1OWMy OGRiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAt MTksNiArMTksNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIK ICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIApAQCAtNjcsNiArNjgsMTQgQEAg c3RhdGljIHZvaWQgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRl c2Mgc2NhbiwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKIAkJCQkJCQkJCQkJ ICBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCiAJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAq cG9zKTsKK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVz ZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVm KTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9j b25zaWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJ CQkgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nhbik7CitzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFt X2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkJ CQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJCQkJCQl2b2lkICpwZXJf YnVmZmVyX2RhdGEpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJh Y2tzIGZvciBoZWFwIEFNCkBAIC05Myw2ICsxMDIsMTAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCS8qIHhzX2xhc3RpbmJsb2Nr IG9wdGltaXphdGlvbiBzdGF0ZSAqLwogCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsK IAorCS8qIFJlYWQgc3RyZWFtIHN0YXRlIChvdGhlciBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgY2Fs bGJhY2spICovCisJQXNzZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVu dFNjYW5EaXJlY3Rpb24pOworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPT0gTlVMTCk7 CisKIAkvKiBSZXNvbHZlIHdoaWNoIGdldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2Ug Zm9yIHRoaXMgc2NhbiAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1n ZXRiYXRjaCAhPSBOVUxMKQogCXsKQEAgLTE2Miw2ICsxNzUsMTUgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBh biBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nhbi0+eHNfdm1faXRlbXMg PSAxOwogCisJLyogRGVmZW5zaXZlbHkgZG8gYW4gdW5jb25kaXRpb25hbCByZWFkIHN0cmVhbSBk aXJlY3Rpb24gcmVzZXQgKi8KKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gTm9Nb3ZlbWVu dFNjYW5EaXJlY3Rpb247CisKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNj YW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVh ZF9zdHJlYW0pOworCX0KKwogCS8qIFJlc2V0IGJhdGNoIHJpbmcgYnVmZmVyIHN0YXRlICovCiAJ aWYgKHNjYW4tPnVzZWJhdGNocmluZykKIAkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChz Y2FuLCBmYWxzZSk7CkBAIC0xODYsNiArMjA4LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJ bmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVy KSkKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCisJaWYgKGhzY2FuLT54 c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fZW5kKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7 CisKIAkvKiBGcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcyAqLwogCWlmIChzY2FuLT51 c2ViYXRjaHJpbmcpCiAJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fZW5kKHNjYW4pOwpAQCAtMjE0 LDcgKzIzOSwxMSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCiAJQXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CiAKLQkodm9pZCkgaHNjYW47CisJ aWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwl7CisJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxz ZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwl9CiAKIAl0 YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKHNjYW4pOwogfQpAQCAtNDk5LDcgKzUy OCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiByZWwsCiAJCWlm IChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4t PnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54 c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0g d2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRo b3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICovCisJCWlm IChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UKKwkJCWhz Y2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCiAJ CSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCkBAIC03 NzYsNiArODEyLDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJQXNzZXJ0KHNjYW5Qb3Mt PnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CiAJQXNzZXJ0KGFs bF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAorCS8qIEhhbmRsZSBy ZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAqLwor CWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9u KQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJzdCBjYWxs ICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAhPSBkaXJl Y3Rpb24pKQorCQloZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KGhzY2FuLCBkaXJlY3Rpb24s IGJhdGNocmluZ2J1Zik7CisKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcg bG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CiAJICogbWF0Y2hpbmcg aXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCkBAIC03ODUsNyArODI3LDcgQEAgaGVhcGFtX2lu ZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4KIAl7CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5C YXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVmZmVyLiAg V2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJl IChjYW4ndCBkbyB0aGlzIHdpdGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlwZ19hc3N1bWUo YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC04MTYsNiAr ODU4LDE3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCXJldHVybiBOVUxMOwogCX0KIAor CWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCAmJiAhaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsK KwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOworCisJCS8q CisJCSAqIE5vdCB1c2luZyBhIHJlYWQgc3RyZWFtIHRvIGRvIGluZGV4IHByZWZldGNoaW5nLiAg RGVjaWRlIHdoZXRoZXIgdG8KKwkJICogc3RhcnQgb25lIG5vdy4KKwkJICovCisJCWhlYXBhbV9p bmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CisJfQorCiAJLyoKIAkgKiBB ZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2Yg bmV3CiAJICogc2NhbkJhdGNoLgpAQCAtODMxLDYgKzg4NCw3IEBAIGhlYXBhbV9pbmRleF9nZXRu ZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEg KmhzY2FuCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNo KHNjYW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlCYXRjaFJp bmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwogCiAJ CUFzc2VydChoZWFkQmF0Y2ggIT0gc2NhbkJhdGNoKTsKIAkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+ aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKQEAgLTgzOCwxMiArODkyLDQ3IEBAIGhlYXBh bV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuCiAJCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5s ZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNo KHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgYWJvdXQgdG8gcmVsZWFz ZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkKKwkJICogcG9pbnRzIHRvLCBq dXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBTZWUgdGhlIGNvbW1lbnRzIGFib3V0CisJCSAq IHByZWZldGNoUG9zL3NjYW5Qb3Mgd2l0aGluIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Js b2NrIGZvciBhbgorCQkgKiBleHBsYW5hdGlvbi4KKwkJICoKKwkJICogVGhpcyBoYW5kbGluZyBp cyBhcHByb3hpbWF0ZWx5IHRoZSBvcHBvc2l0ZSBvZiByZXN1bWluZyBhIHBhdXNlZAorCQkgKiBy ZWFkIHN0cmVhbTogdGhpcyBoZWxwcyB0aGUgc2NhbiBkZWFsIHdpdGggcHJlZmV0Y2hQb3MgZmFs bGluZworCQkgKiBiZWhpbmQgc2NhblBvcywgd2hlcmVhcyBwYXVzaW5nIGlzIHVzZWQgd2hlbiBz Y2FuUG9zIGhhcyBmYWxsZW4KKwkJICogYmVoaW5kICh2ZXJ5IGZhciBiZWhpbmQpIHByZWZldGNo UG9zLgorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJcHJlZmV0Y2hQb3Mt PmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQorCQkJcHJlZmV0Y2hQb3MtPnZhbGlk ID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAo ZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KIAkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsK KworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNlZCkpCisJCXsKKwkJCS8qCisJCQkgKiBo ZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBwYXVzZWQgdGhlIHNjYW4ncyByZWFkIHN0 cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91dCBvZiBmcmVlIGJhdGNoIHNsb3RzLiAg Tm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9uZSBzdWNoIHNsb3QsIHdlIGNhbiByZXN1 bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICogdGhlcmUncyBub3cgc3BhY2UgZm9yIGhl YXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRvIHN0b3JlCisJCQkgKiBvbmUgbW9yZSBi YXRjaCkuCisJCQkgKi8KKwkJCUFzc2VydChwcmVmZXRjaFBvcy0+YmF0Y2ggIT0gc2NhblBvcy0+ YmF0Y2gpOworCQkJQXNzZXJ0KHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJCSAgIGluZGV4X3Nj YW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkpOworCQkJQXNzZXJ0KGlu ZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywgZGlyZWN0aW9uKSA+IDApOwor CQkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJCQlyZWFkX3N0cmVh bV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBm YWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBi ZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7 CiAKIAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBoc2Nhbiwg ZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywgYWxsX3Zpc2libGUp OwpAQCAtOTUwLDYgKzEwMzksMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAgKiAoaW1wb3J0 YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwg YW5kIHRoZQogICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCiAgKgorICogSW4g bm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRvIGd1YXJkIG1vcmUgdGhhbiBvbmUg YmF0Y2ggYXQgYQorICogdGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyByZXN0cmlj dGlvbiBpcyB0byBhdm9pZCB1bmludGVuZGVkCisgKiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVh ZCBzdHJlYW0sIHdoaWNoIGhhcyBpdHMgb3duIHN0cmF0ZWd5IGZvciBrZWVwaW5nCisgKiB0aGUg bnVtYmVyIG9mIHBpbnMgaGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLiAgKFVuZ3Vh cmRpbmcgdmlhCisgKiB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgb2Z0ZW4gbWVhbnMgcmVs ZWFzaW5nIGEgYnVmZmVyIHBpbiBvbiBhbgorICogaW5kZXggcGFnZSwgd2hpY2ggY291bnRzIGFn YWluc3QgdGhlIHNhbWUgc2hhcmVkIHBpbiBsaW1pdC4pCisgKgogICogT25jZSB3ZSd2ZSByZXNv bHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQog ICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdp dGggcmVzcGVjdCB0bwogICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBn dWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKQEAgLTEwODYsMyArMTE4MiwzNTcg QEAgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJZWxzZQogCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBz Y2FuLT5tYXhpdGVtc2JhdGNoOwogfQorCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGluIGluZGV4 IHNjYW4gZGlyZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAqIFJlc2V0 cyB0aGUgcmVhZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBjb250aW51 aW5nIHRvIGFncmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBhbHJlYWR5 IGNvbnN1bWVkIHVzaW5nIHByZWZldGNoUG9zLgorICoKKyAqIE5vdGU6IGlmZiB0aGUgc2NhbiBf Y29udGludWVzXyBpbiB0aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseSBzdGVwcworICog b2ZmIHNjYW5CYXRjaCB0byBhbiBlYXJsaWVyIGluZGV4IHBhZ2UsIHRhYmxlYW1fdXRpbF9mZXRj aF9uZXh0X2JhdGNoIHdpbGwKKyAqIGRlYWwgd2l0aCBpdC4gIEJ1dCB0aGF0IG1pZ2h0IG5ldmVy IGhhcHBlbjsgdGhlIHNjYW4gbWlnaHQgeWV0IGNoYW5nZQorICogZGlyZWN0aW9uIGFnYWluIChv ciBqdXN0IGVuZCBiZWZvcmUgcmV0dXJuaW5nIG1vcmUgaXRlbXMpLgorICovCitzdGF0aWMgcGdf bm9pbmxpbmUgdm9pZAoraGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkg QmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYpCit7CisJLyogUmVzZXQgcmVhZCBzdHJlYW0g c3RhdGUgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisJaHNj YW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBkaXJl Y3Rpb247CisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNjYW4tPnhz X3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0p OworfQorCisvKgorICogRGVjaWRlIHdoZXRoZXIgdG8gc3RhcnQgYSByZWFkIHN0cmVhbSBmb3Ig aGVhcCBibG9jayBwcmVmZXRjaGluZyBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uCisgKgorICog Q2FsbGVkIGVhY2ggdGltZSBhIG5ldyBiYXRjaCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBpbmRleCBB TSwgYmFycmluZyB0aGUKKyAqIGZpcnN0IHRpbWUgdGhhdCBoYXBwZW5zLiAgV2UgZGVsYXkgaW5p dGlhbGl6aW5nIHRoZSBzdHJlYW0gdW50aWwgcmVhZGluZworICogZnJvbSB0aGUgc2NhbidzIHNl Y29uZCBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBvbgorICog c3RhcnRpbmcgYSByZWFkIHN0cmVhbSBmb3IgdmVyeSBzZWxlY3RpdmUgaW5kZXggc2NhbnMuCisg KgorICogV2UgYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdlJ3JlIHVuYWJs ZSB0byB1bmd1YXJkICh1bnBpbikKKyAqIGVhY2ggYmF0Y2gncyBidWZmZXJzIHJpZ2h0IGF3YXkg KG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZSBub3QKKyAqIHByZXBhcmVkIHRvIHNl bnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZCAocmVhZAor ICogc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1cywgYW5k IGtub3dzIG5vdGhpbmcKKyAqIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdlcy93aXRoaW4g YmF0Y2hlcykuCisgKgorICogV2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGR1 cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgaGF2ZW4ndAorICogZG9uZSBhbnkgaGVhcCBmZXRj aGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55IGN5Y2xlcyBvbgorICogYWxsb2Nh dGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQgbmVlZCB0byBw ZXJmb3JtCisgKiBoZWFwIGZldGNoZXMuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pCit7CisJQXNz ZXJ0KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5nYnVm LnByZWZldGNoUG9zLnZhbGlkKTsKKworCWlmIChzY2FuLT5NVkNDU2NhbiAmJiBlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoICYmCisJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVtYmVy KQkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPQor CQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwK KwkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJ ICAgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2ssCisJCQkJCQkJCQkgICBzY2FuLCAw KTsKKwkvKiBlbHNlIGRvbid0IHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNoaW5nIChu b3QgeWV0LCBhdCBsZWFzdCkgKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBibG9jayB0 byB0aGUgcmVhZCBzdHJlYW0gd2hlbiBwZXJmb3JtaW5nIGluZGV4IHByZWZldGNoaW5nLgorICoK KyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3Bvcy4KKyAqIFdlIGRvbid0IGdldCBjYWxsZWQgdW50aWwgdGhlIGZp cnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGNhbGwsIHdoZW4gYQorICogaGVhcCBibG9jayBp cyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisg KgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0 Y2hQb3MuICBJdCBpcyB0eXBpY2FsCisgKiBmb3IgcHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5 IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzCisgKiB1c2VkIHRvIHRy YWNrIHRoZSBuZXh0IFRJRCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHdpbGwg cmV0dXJuCisgKiB0byB0aGUgc2NhbiAoYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGNhbGxl ZCkuICBIb3dldmVyLCB0aGF0IGlzbid0IGEKKyAqIHN0cmljdCBwcmVjb25kaXRpb24gKHRob3Vn aCBhcyBleHBsYWluZWQgYmVsb3cgd2UgaW1wbGVtZW50IGEgc2NoZW1lCisgKiBlc3NlbnRpYWxs eSBlcXVpdmFsZW50IHRvIG1ha2luZyBpdCBhIHN0cmljdCBwcmVjb25kaXRpb24pLiAgVGhlcmUg aXMgYQorICogdHJ1ZSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJldHVy biB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MuCisgKi8KK3N0 YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0 cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJ CQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJ bmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUJh dGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRj aFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaFJp bmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOworCVNj YW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2Rp cjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2FuUG9zID0g ZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiBwcmVm ZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0IG9uZSBi YXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24KKwkgKiBt dXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hf Y291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgJiYgaW5kZXhfc2Nhbl9i YXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1Nj YW4pOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KHhzX3JlYWRfc3RyZWFt X2RpciAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIEhhbmRsZSBpbml0 aWFsaXphdGlvbiBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLCB3aGVuIHByZWZldGNoUG9zIGlzbid0 CisJICogeWV0IHZhbGlkIChhbHNvIGhhbmRsZXMgdGhlIHByZWZldGNoUG9zIDwgc2NhblBvcyBl ZGdlIGNhc2UpLgorCSAqCisJICogSWYgcHJlZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGluaXRpYWxp emVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5kaWNhdGVzCisJICogdGhhdCB0aGlzIGlzIHRoZSBm aXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2Nhbi4gIFdlIGluaXRpYWxpemUKKwkgKiBw cmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVudCBzY2FuUG9zLCBzaW5jZSB0aGUgY3VycmVudCBz Y2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNob3VsZCBoYXZlIGl0cyBibG9jayBudW1iZXIgcmV0 dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJICogZmlyc3QuICBXaGVuIHRoaXMgaGFwcGVucywg aXQncyBsaWtlbHkgdGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdldCBhaGVhZAorCSAqIG9mIHNjYW5Q b3MgdmVyeSBzb29uLCBhZnRlciB0aGUgX25leHRfIGNhbGwgaGVyZSByZXR1cm5zLgorCSAqCisJ ICogVGhlcmUncyBhbHNvIGFuIGVkZ2UgY2FzZSB0aGF0IHdlIGhhbmRsZSB1c2luZyBleGFjdGx5 IHRoZSBzYW1lIHN0ZXBzLgorCSAqIEl0J3MgcG9zc2libGUgZm9yIHByZWZldGNoUG9zIHRvICJm YWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QgaW4gYQorCSAqIHRyaXZpYWwgc2Vuc2U6IGlm IG1hbnkgYWRqYWNlbnQgbWF0Y2hpbmcgaXRlbXMgY29udGFpbiBUSURzIHRoYXQgYWxsCisJICog cG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRh a2UgcHJlZmV0Y2hQb3MKKwkgKiAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB3ZSdy ZSBhY3R1YWxseSBjYWxsZWQpLiAgQSBzaW1pbGFyCisJICogaXNzdWUgYXJpc2VzIGR1cmluZyBp bmRleC1vbmx5IHNjYW5zIHRoYXQgcmVxdWlyZSBvbmx5IGEgZmV3IGhlYXAKKwkgKiBmZXRjaGVz OiB3ZSdsbCB0ZW5kIHRvIGJlIGNhbGxlZCBmYXIgbGVzcyBvZnRlbiB0aGFuIHdlJ2QgYmUgY2Fs bGVkCisJICogZHVyaW5nIGFuIGVxdWl2YWxlbnQgcGxhaW4gaW5kZXggc2NhbiBkdWUgdG8gYWxs LXZpc2libGUgaXRlbXMuICBBbgorCSAqIGFsbC12aXNpYmxlIGl0ZW0gd2lsbCBhZHZhbmNlIHNj YW5Qb3MsIGJ1dCBjYW4ndCB0cmlnZ2VyIGEgY2FsbCB0byBoZXJlCisJICogKGp1c3QgbGlrZSBh biBpdGVtIHRoYXQgcG9pbnRzIHRvIHRoZSBzYW1lIGhlYXAgYmxvY2sgdGhhdCB0aGUgcHJldmlv dXMKKwkgKiBpdGVtIGFsc28gcG9pbnRlZCB0bykuCisJICoKKwkgKiBUaGlzIHNjaGVtZSBwcm9k dWNlcyBleGFjdGx5IHRoZSBzYW1lIGJsb2NrIHByZWZldGNoIHJlcXVlc3RzIGFzIGEKKwkgKiBz Y2hlbWUgdGhhdCByZXF1aXJlcyBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHRv IGFjdGl2ZWx5CisJICogZW5zdXJlIHRoYXQgInByZWZldGNoUG9zIDwgc2NhblBvcyIgY2FuIG5l dmVyIGhhcHBlbi4gIFRoYXQgaXNuJ3QgYQorCSAqIHN0cmljdCBwcmVjb25kaXRpb24gZm9yIHRo aXMgZnVuY3Rpb24gYmVjYXVzZSBtYWtpbmcgaXQgZXhwbGljaXQgd291bGQKKwkgKiBpbXBvc2Ug YSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9uIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MgZnJlZXMgYSBiYXRjaCB0aGF0CisJICogcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLCBpdCdsbCBh dCBsZWFzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGZvciB1cy4KKwkgKiBUaGlzIHJlbW92ZXMg YW55IGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhpbmQKKwkg KiBzY2FuUG9zLmJhdGNoIHRoYXQgaXQgd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0byBiZSBh aGVhZCBvZiBzY2FuUG9zCisJICogaW5zdGVhZCBvZiBiZWhpbmQgaXQpLiAgSW4gb3RoZXIgd29y ZHMsIGluIGEgY2VydGFpbiBzZW5zZSB3ZSBhY3R1YWxseQorCSAqIF9jYW5fIHRydXN0IGhlYXBh bV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgdG8gbm90IGxldCBwcmVmZXRjaFBvcworCSAq IGZhbGwgYmVoaW5kIHNjYW5Qb3M6IGl0IGNhbid0IGhhcHBlbiBhdCB0aGUgYmF0Y2ggZ3JhbnVs YXJpdHkgKG9ubHkgYXQKKwkgKiB0aGUgaXRlbS90dXBsZSBncmFudWxhcml0eSwgd2hpY2ggd2Ug Y2FuIGFsd2F5cyBjb3BlIHdpdGggaGVyZSkuCisJICovCisJaWYgKCFwcmVmZXRjaFBvcy0+dmFs aWQgfHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9zLCBzY2FuUG9zLCB4c19yZWFk X3N0cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNjYW5Qb3M7CisJCWZyb21TY2FuUG9z ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2b2lkIGtlZXBpbmcgYW55IGJhdGNoIGd1 YXJkZWQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50LAorCQkgKiB0byBhdm9pZCB1bmRlc2lyYWJs ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtLiBTZWUKKwkJICogY29t bWVudCBhbmQgYXNzZXJ0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYmVsb3cuCisJCSAqLwor CQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKgorCQkJICogTWFrZSBoZWFwYW1f aW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMKKwkJCSAqIGVhZ2Vy bHkKKwkJCSAqLworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsK KworCQkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBpcyB1bmd1YXJk ZWQgKi8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNo UG9zLT5iYXRjaCk7CisJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJeworCQkJ CUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBwcmVmZXRjaEJh dGNoKTsKKworCQkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5C YXRjaCAqLworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19y ZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJ CQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9CisJfQorCisJcHJlZmV0Y2hCYXRj aCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKworCS8qCisJ ICogSWYgcHJlZmV0Y2hQb3Mgd2Fzbid0IGp1c3QgaW5pdGlhbGl6ZWQgdXNpbmcgc2NhblBvcywg d2UncmUgZGlyZWN0bHkKKwkgKiBwaWNraW5nIHVwIHByZWZldGNoaW5nIHdoZXJlIHRoZSBsYXN0 IGNhbGwgaGVyZSBsZWZ0IG9mZi4gIEFzc2VydCB0aGF0CisJICogeHNfcHJlZmV0Y2hfYmxvY2sg bWF0Y2hlcyB0aGUgbGFzdCBpdGVtIHdlIHJldHVybmVkIGFzIGV4cGVjdGVkLgorCSAqCisJICog Tm90ZTogd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBhIHhzX3ByZWZldGNoX2Jsb2NrIGZpZWxkIGF0 IGFsbDsgd2UgY291bGQKKwkgKiBqdXN0IHRha2UgdGhlIGxhc3QgYmxvY2sgd2UgcmV0dXJuZWQg ZnJvbSBwcmVmZXRjaFBvcyBkaXJlY3RseSBpbnN0ZWFkLgorCSAqIEJ1dCBtYWludGFpbmluZyB4 c19wcmVmZXRjaF9ibG9jayBleHBsaWNpdGx5IGlzIHNsaWdodGx5IG1vcmUgcm9idXN0LgorCSAq IEl0IGdpdmVzIHVzIGEgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IGNhbGwgaGVyZSBs ZWZ0IHByZWZldGNoUG9zCisJICogaW4gYSBjb25zaXN0ZW50IHN0YXRlIChlLmcuLCB3aGVuIHRo ZSByZWFkIHN0cmVhbSBoYWQgdG8gYmUgcGF1c2VkKS4KKwkgKi8KKyNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCisJaWYgKCFmcm9tU2NhblBvcykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICps YXN0aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCUJs b2NrTnVtYmVyIGxhc3RfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZsYXN0aXRl bS0+dGFibGVUaWQpOworCisJCUFzc2VydChsYXN0X2Jsb2NrID09IGhzY2FuLT54c19wcmVmZXRj aF9ibG9jayk7CisJfQorI2VuZGlmCisKKwlmb3IgKDs7KQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0 ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJCS8qCisJCSAqIFdl IG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHVuZ3VhcmRpbmcgdGhl IGJhdGNoLAorCQkgKiBlaXRoZXIgd2l0aGluIHRoZSBpbmRleCBBTSBvciBoZXJlICh3aGVuIHdl IGVhZ2VybHkgbG9hZCBhbGwgb2YgdGhlCisJCSAqIGJhdGNoJ3MgdmlzaWJpbGl0eSBpbmZvcm1h dGlvbiBkdXJpbmcgYW4gaW5kZXgtb25seSBzY2FuKS4gIFRoZQorCQkgKiBpbmRleCBBTSB3b24n dCBob2xkIG9udG8gVElEIGludGVybG9jayBidWZmZXIgcGlucywga2VlcGluZyB0aGUKKwkJICog YWJzb2x1dGUgbnVtYmVyIG9mIHBpbnMgaGVsZCB0byBhIG1pbmltdW0uCisJCSAqCisJCSAqIFRo aXMgaXMgZGVmZW5zaXZlLiAgVGhlIHJlYWQgc3RyZWFtIHRyaWVzIHRvIGJlIGNhcmVmdWwgYWJv dXQgbm90CisJCSAqIHBpbm5pbmcgdG9vIG1hbnkgYnVmZmVycywgYW5kIHRoYXQncyBoYXJkZXIg dG8gZG8gcmVsaWFibHkgaWYgdGhlcmUKKwkJICogYXJlIHZhcmlhYmxlIG51bWJlcnMgb2YgcGlu cyB0YWtlbiB3aXRob3V0IHN1Y2ggY2FyZS4KKwkJICovCisJCUFzc2VydCghcHJlZmV0Y2hCYXRj aC0+aXNHdWFyZGVkKTsKKwkJaWYgKGZyb21TY2FuUG9zKQorCQl7CisJCQkvKgorCQkJICogRG9u J3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVmZXRjaFBvcyB3YXMganVzdCBpbml0aWFsaXplZAor CQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xsIHJldHVybiB0aGUgc2NhblBvcyBpdGVtJ3MgaGVh cCBibG9jaworCQkJICogZGlyZWN0bHkgb24gdGhlIGZpcnN0IGNhbGwgaGVyZS4gIEluIG90aGVy IHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAqIHRoZSBoZWFwIGJsb2NrIGZyb20gVElEIHBhc3Nl ZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbAorCQkJICogYXQgdGhlIHBvaW50IHdo ZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkgKiBmaXJz dCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4gKEFzIGV4cGxhaW5lZCBhYm92ZSwgd2UgYWxzbyBlbmQg dXAKKwkJCSAqIGhlcmUgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIHRvIHJlYWRfc3RyZWFtX25leHRf YnVmZmVyIGZvbGxvd2luZworCQkJICogcHJlZmV0Y2hQb3MgZmFsbGluZyBiZWhpbmQgc2NhblBv cy9iZWluZyBpbnZhbGlkYXRlZCBmb3IgdXMuKQorCQkJICovCisJCQlmcm9tU2NhblBvcyA9IGZh bHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZhbmNlKHhzX3JlYWRfc3Ry ZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpKQorCQl7CisJ CQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0Y2guICBUcnkgdG8g YWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgorCQkJICovCisJCQlpZiAo dW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFsbCBhdmFpbGFibGUKKwkJ CQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2UuCisJCQkJ ICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVzaW5nIHRoZSByZWFk IHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHdpbGwg cmVzdW1lIHRoZSByZWFkCisJCQkJICogc3RyZWFtIGxhdGVyLCB0aG91Z2ggb25seSBhZnRlciBz Y2FuUG9zIGhhcyBjb25zdW1lZCBhbGwKKwkJCQkgKiByZW1haW5pbmcgaXRlbXMgZnJvbSBzY2Fu QmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRoZSBjdXJyZW50CisJCQkJICogaGVhZCBiYXRjaCB3aWxs IGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UKKwkJCQkgKiBoZXJl IGJ5IHVzKS4KKwkJCQkgKgorCQkJCSAqIEluIHByYWN0aWNlIHdlIGhhcmRseSBldmVyIG5lZWQg dG8gZG8gdGhpcy4gIEl0IHdvdWxkIGJlCisJCQkJICogcG9zc2libGUgdG8gYXZvaWQgdGhlIG5l ZWQgdG8gcGF1c2UgdGhlIHJlYWQgc3RyZWFtIGJ5CisJCQkJICogZHluYW1pY2FsbHkgYWxsb2Nh dGluZyBzbG90cywgYnV0IHRoYXQgd291bGQgYWRkIGNvbXBsZXhpdHkKKwkJCQkgKiBmb3Igbm8g cmVhbCBiZW5lZml0LiAgSXQgYWxzbyBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvCisJCQkJICog aW1wb3NlIHNvbWUgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgdGhhdAorCQkJ CSAqIHByZWZldGNoUG9zIGNhbiBnZXQgYWhlYWQgb2Ygc2NhblBvcyBieSAoZXNwZWNpYWxseSBp biB0aGUKKwkJCQkgKiBjYXNlIG9mIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIHdlIG9mdGVuIHdv bid0IGhhdmUgYW55CisJCQkJICogaGVhcCBibG9jayB0byByZXR1cm4gZnJvbSBtb3N0IG9mIHRo ZSBzY2FuJ3MgYmF0Y2hlcykuCisJCQkJICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7 CisKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSByZXR1cm5pbmcsIGFkdmFuY2UgcHJlZmV0Y2hQb3Mg aW4gdGhlIG9wcG9zaXRlCisJCQkJICogZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCBieSB0aGUg c2Nhbi4gIFRoaXMgdW5kb2VzIHRoZQorCQkJCSAqIGVmZmVjdHMgb2YgdGhlIG1vc3QgcmVjZW50 IGFkdmFuY2UuICBXZSdyZSBub3QgZ29pbmcgdG8KKwkJCQkgKiByZXR1cm4gYW55IGJsb2NrLCBz byBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIGxlYXZlCisJCQkJICogcHJlZmV0Y2hQb3Mg aW4gYSBzdGF0ZSBjb25zaXN0ZW50IHdpdGggdGhhdC4KKwkJCQkgKi8KKwkJCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZCh4c19yZWFkX3N0cmVhbV9kaXIpKQorCQkJCXsKKwkJCQkJQXNzZXJ0 KHByZWZldGNoUG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtICsgMSk7CisJCQkJ CXByZWZldGNoUG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW07CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVmZXRjaEJh dGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJCQkJcHJlZmV0Y2hQb3MtPml0ZW0gPSBwcmVmZXRjaEJh dGNoLT5maXJzdEl0ZW07CisJCQkJfQorCisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0 cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4 dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCQkgIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJ CQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNoUG9zKTsK KwkJCWlmICghcHJlZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vIG1vcmUgYmF0 Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQKKwkJCQkgKiB0 aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWlyZSBoYXZlIG5vdyBiZWVuIHJldHVybmVkCisJCQkJICov CisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24g cHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRl eF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJIHByZWZl dGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJ CXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoc2NhbiwgcHJl ZmV0Y2hCYXRjaCk7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5IGluZm8g Zm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNjYW4tPnhzX3ZtX2l0ZW1zID09 IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJp bGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0 Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9CisKKwkJ LyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJ RCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAor CQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNo KSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49IHByZWZl dGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0gcHJlZmV0 Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVmZXRjaFBv cyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3Ms IHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChzY2FuLT54 c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hf ZGF0YShzY2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1tw cmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJCWlmIChoYmF0 Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lC TEUpCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwtdmlzaWJsZSAtLSBkb24n dCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaXRlbSA9ICZwcmVm ZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Jsb2NrID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCWlmIChwcmVm ZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8qCisJCQkg KiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0ncyBUSUQn cyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUgc2FtZSBw cmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJCQkgKi8K KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2NrIG51bWJl ciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2Nr ID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisKKwlyZXR1 cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNo LmMKaW5kZXggZTNjZGY4ZGNkLi5mYTljY2RhYTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYwpAQCAtNSwxNSArNSwyMiBAQAogICoKICAqIFRoaXMgbW9kdWxlIHByb3ZpZGVz IHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBzY2FucywKICAq IHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBw ZXIgcGFnZSBpbiBhIHNpbmdsZQotICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBv d25lZCBieSB0aGUgdGFibGUgQU0uCisgKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlz IG93bmVkIGJ5IHRoZSB0YWJsZSBBTSwgdHlwaWNhbGx5IG1haW50YWluZWQKKyAqIGFsb25nc2lk ZSBhIHJlYWQgc3RyZWFtIHVzZWQgZm9yIHByZWZldGNoaW5nIHRhYmxlIGJsb2Nrcy4KICAqCi0g KiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5kZXgg c2NhbiBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtl eSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLiAgVGhpcworICogYWxsb3dzIHRoZSB0YWJsZSBBTSB0 byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQKKyAqIHN0 cmVhbSBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9ja3MgcmVm ZXJlbmNlZCBieSBpbmRleAorICogcGFnZXMgdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBNb3N0IGZ1bmN0aW9ucyBo ZXJlIGFyZSB0YWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKSwgY2FsbGVkIGJ5CiAg KiB0YWJsZSBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBtYW5hZ2Ug dGhlIGJhdGNoIHJpbmcKICAqIGJ1ZmZlcidzIGxpZmVjeWNsZSBhbmQgcG9zaXRpb25hbCBzdGF0 ZSwgYW5kIGhlbHAgd2l0aCBjZXJ0YWluIGFzcGVjdHMgb2YKICAqIHJlc291cmNlIG1hbmFnZW1l bnQuICBUaGUgdGFibGUgQU0gdXNlcyBzY2FuUG9zIChhbmQgaXRzIHNjYW5CYXRjaCBiYXRjaCkK LSAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4K KyAqIHRvIHJldHVybiBpdGVtcyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4g IFRhYmxlIEFNcyB0aGF0CisgKiBzdXBwb3J0IGluZGV4IEkvTyBwcmVmZXRjaGluZyB1c2UgcHJl ZmV0Y2hQb3MgKGFuZCBpdHMgcHJlZmV0Y2hCYXRjaCBiYXRjaCkKKyAqIGJ5IGltcGxlbWVudGlu ZyBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrIHRoYXQgY29uc3VtZXMgaXRlbXMgd2VsbCBhaGVhZCBv ZgorICogc2NhblBvcy4KICAqCiAgKiBUaGVyZSBhcmUgYWxzbyBzb21lIGluZGV4IEFNIHV0aWxp dGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkgaW5kZXgKICAqIEFNcyB0aGF0IGltcGxl bWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRvIGhlbHAgbWFuYWdlIHJlc291cmNlcyBs aWtlCkBAIC01NSw2ICs2Miw3IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pCiAJYm9vbAkJbWFya0JhdGNoRnJlZWQgPSBmYWxz ZTsKIAogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1 Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFs aWQgPSBmYWxzZTsKIAogCS8qIEVuc3VyZSBiYXRjaF9mcmVlIHdvbid0IHNraXAgdGhlIG9sZCBt YXJrQmF0Y2ggaW4gdGhlIGxvb3AgYmVsb3cgKi8KQEAgLTE3MCw3ICsxNzgsMTIgQEAgdGFibGVh bV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0aGUgY3Vy cmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJkIGFsbCBi YXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAotICogZXhj ZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRj aC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVu dCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBUaGUg cmVhZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUgYXJlCisgKiByZXNldCBi eSB0aGUgY2FsbGVyICh3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJlc2V0cyB0aGF0 IHN0YXRlKS4KKyAqIFRoaXMgYXBwcm9hY2gga2VlcHMgdGhpbmdzIHNpbXBsZSBmb3IgdGFibGUg QU1zOiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3aXRoCisgKiBiYXRjaGVzIGlzIHRoZXJlYnkgYWJs ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rpb24KKyAq IG5ldmVyIGNoYW5nZXMgaXMgdGhlIG9ubHkgY2FzZS4KICAqLwogdm9pZAogdGFibGVhbV91dGls X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC0xODUsNiArMTk4 LDE0IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwogCUFzc2VydChtYXJrUG9zLT52YWxp ZCk7CiAKKwkvKgorCSAqIFJlc3RvcmluZyBhIG1hcmsgYWx3YXlzIHJlcXVpcmVzIHN0b3BwaW5n IHByZWZldGNoaW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJICogdG8gdGhlIGhhbmRsaW5nIHRhYmxl IEFNcyBpbXBsZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVwbGUtbGV2ZWwgY2hhbmdlCisJICogaW4g dGhlIHNjYW4ncyBkaXJlY3Rpb24uICBUaGUgcmVhZCBzdHJlYW0gbXVzdCBoYXZlIGFscmVhZHkg YmVlbiByZXNldAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZpYSB0YWJsZV9pbmRleF9mZXRjaF9yZXNl dCkuCisJICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCiAJ aWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCiAJewogCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFk eSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLwpAQCAtMjQ5LDYgKzI3 MCwxMyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKICAqIHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcg c2NhbiBkaXJlY3Rpb24uICBUaGlzCiAgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZm aWNpZW50LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIHdoYXQKICAqIG91Z2h0IHRvIGJl IGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBy ZXNldCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBUaGF0Cisg KiBuZWVkcyB0byBoYXBwZW4gYXMgc29vbiBhcyB0aGUgc2NhbiByZXF1ZXN0cyBhIHR1cGxlIGlu IHdoYXRldmVyIHNjYW4KKyAqIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZS10by1jdXJyZW50LiAgV2Ug b25seSBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlCisgKiBzY2FuIGJhY2tzIHVwIGJ5IGVu b3VnaCBpdGVtcyB0byBjcm9zcyBhIGJhdGNoIGJvdW5kYXJ5ICh3aGVuIHRoZSBzY2FuCisgKiBy ZXN1bWVzIHNjYW5uaW5nIGluIGl0cyBvcmlnaW5hbCBkaXJlY3Rpb24vZW5kcyBiZWZvcmUgY3Jv c3NpbmcgYSBib3VuZGFyeSwKKyAqIHRoZXJlIGlzbid0IGFueSBuZWVkIHRvIGNhbGwgaGVyZSku CiAgKi8KIHZvaWQKIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRl c2Mgc2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDFjNTc1ZTU2 Zi4uNmZjYjgxNWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0 Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsK IGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0 cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7 CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfc29ydCA9IHRydWU7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGU1NTZiODg0 NC4uZTMzNzNkMjg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRh dApAQCAtOTMxLDYgKzkzMSwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5h bWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4 dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNo b3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRl eC1vbmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwK KwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9 PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0 X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4n LAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDJjNWU5OGQxZC4uOGZkMjQzYmNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MjAsNiAr NDIwLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2Nh biA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJl ZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgog I2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGZkYjc3ZGYwZi4uMmM2OGE4MjNh IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC01NzEyLDYgKzU3MTIsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNz PSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFiZWw9ImVu YWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBz Y2FuIGFuZCBpbmRleC1vbmx5IHNjYW4KKyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZldGNoaW5n IGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAgICAgcGFn ZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhl IGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFy YT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVy aWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0 eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDJi NDg3MjhjNS4uMzdiNzUzNjFlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1n ZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwogICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkg cmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQotICAgc2luZ2xlIGlu ZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hp Y2ggdGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisg ICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2Vz cyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQg cGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGlu ZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRh YmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNo IHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9m IHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KICAgPC9wYXJh PgogCiAgIDxwYXJhPgpAQCAtMTAwNSw3ICsxMDA4LDggQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4 U2NhbkRlc2Mgc2NhbiwKICAgIGZyZWUgdGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChm b3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+CiAgICBhbmQvb3Ig PGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGFyZSBjYWxsZWQpLiAgSXQgbXVzdCBhbHNv IGtlZXAgdGhlCiAgICBudW1iZXIgb2YgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwsIHRv IGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncwotICAgYnVmZmVyIHBpbiBsaW1pdC4KKyAg IGJ1ZmZlciBwaW4gbGltaXQgKHdoaWNoIGlzIHNoYXJlZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJl YWQgc3RyZWFtCisgICBmb3IgaW5kZXggc2NhbiBwcmVmZXRjaGluZykuCiAgIDwvcGFyYT4KIAog ICA8cGFyYT4KQEAgLTEzODAsNiArMTM4NCw2MCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBh cmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBvciB2aWNl IHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25l IEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5u aW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFNIENvbnNpZGVyYXRpb25zIGZvciBCYXRj aCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgc2VjdGlvbiBpcyBwcmlt YXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8bGluayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nl c3MgbWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAgIFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwKKyAgICB0aGUgdGFi bGUgQU0gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0 aGUKKyAgICA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0 cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IGFuZCBmb3IgY29udHJvbGxpbmcg d2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBhZ2VzIGFyZSByZWxlYXNlZC4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3Rm aWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0 ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQgaXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNo IHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUgZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVz dCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBs ZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xv dDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgY29kZSBtYXkgYWxzbworICAgIG1vZGlmeSB0aGlzIGZp ZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1Y2ggYXMgbWFyay9yZXN0b3JlLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2VkCisgICAgZm9yIEkvTyBwcmVmZXRjaGlu Zy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBpbml0aWFsaXppbmcgaXQgZnJvbQorICAg IDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0g Y2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJs b2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJlIHdlbGwKKyAgICBhaGVhZCBvZiB0aGUg Y3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZl dGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8 L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAg ICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYg bmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFu Y2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpvcgorICAgIGdvYWwgb2YgdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRoZQorICAg IHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9t IHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRj aCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgQm90aCA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5w cmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGFyZSBjb250cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBh bmQKKyAgICBjb3JlIGNvZGU7IGluZGV4IGFjY2VzcyBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNz IG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAgICBmaWVsZHMuICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC88L2ZpbGVuYW1lPgorICAgIGltcGxlbWVudGF0aW9uIGZvciBh IHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgZGV0 YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRp bmcgdGhlCisgICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0Zmll bGQ+IHBvbGljeSBhbmQgdGhlCisgICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlv bj4gY2FsbGJhY2ssIHNlZQorICAgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCisg ICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4 LWxvY2tpbmciPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9z cmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXggOWNjZjViNzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0u c2dtbApAQCAtMTI5LDYgKzEyOSwxNCBAQCBteV90YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKICAgb3B0aW9uYWwpLCB0aGUgYmxvY2sgbnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9j YWxpdHkuCiAgPC9wYXJhPgogCisgPHBhcmE+CisgIFRhYmxlIGFjY2VzcyBtZXRob2RzIGNhbiBz dXBwb3J0IG9yZGVyZWQgaW5kZXggc2NhbnMgdXNpbmcgdGhlCisgIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBTZWUgYWxzbworICA8eHJlZiBsaW5rZW5kPSJpbmRl eC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRhaWxzIG9uIGludGVyZmFjaW5nIHdpdGgKKyAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBhY2Nlc3MgbWV0aG9kcywgYW5k IG1hbmFnaW5nIHRoZQorICBzY2FuJ3MgcG9zaXRpb24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAg IEZvciBjcmFzaCBzYWZldHksIGFuIEFNIGNhbiB1c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtl bmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9hY3JvbnltPjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxl bWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJi NTZhNTguLjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQK QEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAg ICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9p bmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAg ICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9t ZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAg ICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBn X3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAg ICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgog IGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dz KQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJp b3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwg ZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41 My4wCgo= --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0010-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Disposition: attachment; filename="v21-0010-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig614w6 RnJvbSBlM2Q3NjIxNGJkMzcyZGJkMmE3ODAyYzQzNDdhZjI3OTc0NTI2OWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDEw LzE1XSBhaW86IGlvX3VyaW5nOiBUcmlnZ2VyIGFzeW5jIHByb2Nlc3NpbmcgZm9yIGxhcmdlCiBJ T3MKCmlvX21ldGhvZD1pb191cmluZyBoYXMgYSBoZXVyaXN0aWMgdG8gdHJpZ2dlciBhc3luY2hy b25vdXMgcHJvY2Vzc2luZyBvZiBJT3MKb25jZSB0aGUgSU8gZGVwdGguIFRoYXQgaGV1cmlzdGlj IGlzIGltcG9ydGFudCB3aGVuIGRvaW5nIGJ1ZmZlcmVkIElPIGZyb20gdGhlCmtlcm5lbCBwYWdl IGNhY2hlLCB0byBhbGxvdyBwYXJhbGxlbGl6aW5nIG9mIHRoZSBtZW1vcnkgY29weSwgYXMgb3Ro ZXJ3aXNlCmlvX21ldGhvZD1pb191cmluZyB3b3VsZCBiZSBhIGxvdCBzbG93ZXIgdGhhbiBpb19t ZXRob2Q9d29ya2VyIGluIHRoYXQgY2FzZS4KCkFuIHVwY29taW5nIGNvbW1pdCB3aWxsIG1ha2Ug cmVhZF9zdHJlYW0uYyBvbmx5IGluY3JlYXNlIHRoZSByZWFkYWhlYWQKZGlzdGFuY2UgaWYgd2Ug bmVlZGVkIHRvIHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBJZiB0by1iZS1yZWFkIGRhdGEgaXMg aW4gdGhlCmtlcm5lbCBwYWdlIGNhY2hlLCBpb191cmluZyB3aWxsIHN5bmNocm9ub3VzbHkgZXhl Y3V0ZSBJTywgdW5sZXNzIHRoZSBJTyBpcwpmbGFnZ2VkIGFzIGFzeW5jLiAgVGhlcmVmb3JlIHRo ZSBhZm9yZW1lbnRpb25lZCBjaGFuZ2UgaW4gcmVhZF9zdHJlYW0uYwpoZXVyaXN0aWMgd291bGQg bGVhZCB0byBhIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBpb191cmlu Zwp3aGVuIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUsIGFzIHdlIHdvdWxkIG5ldmVyIHJlYWNo IGEgZGVlcCBlbm91Z2ggcXVldWUgdG8KYWN0dWFsbHkgdHJpZ2dlciB0aGUgZXhpc3RpbmcgaGV1 cmlzdGljLgoKUGFyYWxsZWxpemluZyB0aGUgY29weSBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzIG1h aW5seSBpbXBvcnRhbnQgd2hlbiBkb2luZyBhCmxvdCBvZiBJTywgd2hpY2ggY29tbW9ubHkgaXMg b25seSBwb3NzaWJsZSB3aGVuIGRvaW5nIGxhcmdlbHkgc2VxdWVudGlhbCBJTy4KClRoZSByZWFz b24gd2UgZG9uJ3QganVzdCBtYXJrIGFsbCBpb191cmluZyBJT3MgYXMgYXN5bmNocm9ub3VzIGlz IHRoYXQgdGhlCmRpc3BhdGNoIHRvIGEga2VybmVsIHRocmVhZCBoYXMgb3ZlcmhlYWQuIFRoaXMg b3ZlcmhlYWQgaXMgbW9zdGx5IG5vdGljZWFibGUKd2l0aCBzbWFsbCByYW5kb20gSU9zIHdpdGgg YSBsb3cgcXVldWUgZGVwdGgsIGFzIGluIHRoYXQgY2FzZSB0aGUgZ2FpbiBmcm9tCnBhcmFsbGVs aXppbmcgdGhlIG1lbW9yeSBjb3B5IGlzIHNtYWxsIGFuZCB0aGUgbGF0ZW5jeSBjb3N0IGhpZ2gu CgpUaGUgZmFjdHMgZnJvbSB0aGUgdHdvIHByaW9yIHBhcmFncmFwaHMgc2hvdyBhIHdheSBvdXQ6 IFVzZSB0aGUgc2l6ZSBvZiB0aGUgSU8KaW4gYWRkaXRpb24gdG8gdGhlIGRlcHRoIG9mIHRoZSBx dWV1ZSB0byB0cmlnZ2VyIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLgoKT25lIG1pZ2h0IHRoaW5r IHRoYXQganVzdCB1c2luZyB0aGUgSU8gc2l6ZSBtaWdodCBiZSBlbm91Z2gsIGJ1dApleHBlcmlt ZW50YXRpb24gaGFzIHNob3duIHRoYXQgbm90IHRvIGJlIHRoZSBjYXNlIC0gd2l0aCBkZWVwIGxv b2stYWhlYWQKZGlzdGFuY2VzIGJlaW5nIGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIG1lbW9yeSBj b3B5IGlzIGltcG9ydGFudCBldmVuIHdpdGgKc21hbGxlciBJT3MuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA5MCArKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmlu Zy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggMzk5 ODRkZjMxLi4wYzhmZTQ1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF9pb191cmluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191 cmluZy5jCkBAIC00MDksNyArNDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0 KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0 cnVjdCBpb191cmluZyAqdXJpbmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+ aW9fdXJpbmdfcmluZzsKLQlpbnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZw Z2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lv cyA8PSBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdh aW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFn ZWRfaW9zKQogCiAJCXBnYWlvX2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5n X3NxX2Zyb21faW8oaW9oLCBzcWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElP IGluIHByb2Nlc3MgY29udGV4dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBn b29kLCBhcyBpdCByZWR1Y2VzIGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQot CQkgKiBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBw YWdlIGNhY2hlIGFuZAotCQkgKiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVn cm91bmQsIGFzIGl0IGNhbid0IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMg aXMgcG9zc2libGUgd2hlbiB1c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEg bG90IG9mIGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkg KiB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlp bmcuIGlvX3VyaW5nCi0JCSAqIGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIg dGhyZWFkcyBpbnN0ZWFkLgotCQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQg d2UgYWxyZWFkeSBoYXZlIElPcyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBi ZWluZyBzdWJtaXR0ZWQsIHdlIHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRo ZSBJTyBpbiB0aGUgYmFja2dyb3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcg SU9zCi0JCSAqIGJlaW5nIHN1Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBj b250ZXh0IGhhcyBsb3dlcgotCQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9i ZWZvcmUgPiA0ICYmIChpb2gtPmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJp bmdfc3FlX3NldF9mbGFncyhzcWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3Jl Kys7CiAJfQogCiAJd2hpbGUgKHRydWUpCkBAIC03MDEsMTAgKzY3OSw2NCBAQCBwZ2Fpb191cmlu Z19jaGVja19vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKQogCUxX TG9ja1JlbGVhc2UoJm93bmVyX2NvbnRleHQtPmNvbXBsZXRpb25fbG9jayk7CiB9CiAKKy8qCisg KiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNzIGNvbnRleHQgaWYgcG9zc2libGUuIFRo YXQncyBnZW5lcmFsbHkgZ29vZCwKKyAqIGFzIGl0IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcu IFdoZW4gcGVyZm9ybWluZyBhIGxvdCBvZiBidWZmZXJlZCBJTyB0aGF0CisgKiBtZWFucyB0aGF0 IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZCB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMg aW4gdGhlCisgKiBmb3JlZ3JvdW5kLCBhcyBpdCBjYW4ndCBiZSBvZmZsb2FkZWQgdG8gRE1BIGhh cmR3YXJlIGFzIGlzIHBvc3NpYmxlIHdoZW4KKyAqIHVzaW5nIGRpcmVjdCBJTy4gV2hlbiBleGVj dXRpbmcgYSBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhpcyBjYXVzZXMgaW9fdXJpbmcKKyAqIHRvIGJl IHNsb3dlciB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhl CisgKiBjb3B5aW5nLiBpb191cmluZyBjYW4gYmUgdG9sZCB0byBvZmZsb2FkIHdvcmsgdG8gd29y a2VyIHRocmVhZHMgaW5zdGVhZC4KKyAqCisgKiBJZiB0aGUgSU9zIGFyZSBzbWFsbCwgd2Ugb25s eSBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MgaW50byB0aGUKKyAqIGJhY2tncm91bmQgaWYg dGhlcmUgaXMgYSBsb3Qgb2YgSU8sIGFzIG90aGVyd2lzZSB0aGUgb3ZlcmhlYWQgZnJvbSBjb250 ZXh0CisgKiBzd2l0Y2hpbmcgaXMgaGlnaGVyIHRoYW4gdGhlIGdhaW4uCisgKgorICogSWYgSU9z IGFyZSBsYXJnZSwgdGhlcmUgaXMgYmVuZWZpdCBmcm9tIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5n IGF0IGxvd2VyCisgKiBxdWV1ZSBkZXB0aHMsIGFzIElPIGxhdGVuY3kgaXMgbGVzcyBvZiBhIGNy dWNpYWwgZmFjdG9yIGFuZCBwYXJhbGxlbGl6aW5nCisgKiBtZW1vcnkgY29waWVzIGlzIG1vcmUg aW1wb3J0YW50LiAgSW4gYWRkaXRpb24sIGl0IGlzIGltcG9ydGFudCB0byB0cmlnZ2VyCisgKiBh c3luY2hyb25vdXMgcHJvY2Vzc2luZyBldmVuIGF0IGxvdyBxdWV1ZSBkZXB0aCwgYXMgd2l0aCBm b3JlZ3JvdW5kCisgKiBwcm9jZXNzaW5nIHdlIG1pZ2h0IG5ldmVyIGFjdHVhbGx5IHJlYWNoIGRl ZXAgZW5vdWdoIElPIGRlcHRocyB0byB0cmlnZ2VyCisgKiBhc3luY2hyb25vdXMgcHJvY2Vzc2lu Zywgd2hpY2ggaW4gdHVybiB3b3VsZCBkZXByaXZlIHJlYWRhaGVhZCBjb250cm9sCisgKiBsb2dp YyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgZGVlcGVyIGxvb2stYWhlYWQgZGlzdGFu Y2Ugd291bGQgYmUKKyAqIGFkdmFudGFnZW91cy4KKyAqCisgKiBXZSBoYXZlIGRvbmUgc29tZSBi YXNpYyBiZW5jaG1hcmtpbmcgdG8gdmFsaWRhdGUgdGhlIHRocmVzaG9sZHMgdXNlZCwgYnV0Cisg KiBpdCdzIHF1aXRlIHBsYXVzaWJsZSB0aGF0IHRoZXJlIGFyZSBiZXR0ZXIgdmFsdWVzLgorICov CitzdGF0aWMgYm9vbAorcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYyhQZ0Fpb0hhbmRsZSAq aW9oLCBzaXplX3QgaW9fc2l6ZSkKK3sKKwkvKgorCSAqIFdpdGggRElPIHRoZXJlJ3Mgbm8gYmVu ZWZpdCBmcm9tIGZvcmNpbmcgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFzCisJICogaW9fdXJp bmcgd2lsbCBuZXZlciBwcm9jZXNzIElPIGNvbXBsZXRpb25zIGluIHRoZSBmb3JlZ3JvdW5kLiBU aGUKKwkgKiBrZXJuZWwgd2lsbCB1c2Ugd29ya2VyIHRocmVhZHMgd2hlcmUgYXBwcm9wcmlhdGUu CisJICovCisJaWYgKCEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBPbmNlIHRoZSBJTyBxdWV1ZSBkZXB0aCBpcyBub3QgdGhhdCBz aGFsbG93IGFueW1vcmUsIHRoZSBvdmVyaGVhZCBvZgorCSAqIGRpc3BhdGNoaW5nIHRvIHRoZSBi YWNrZ3JvdW5kIGlzIGEgbGVzcyBzaWduaWZpY2FudCBmYWN0b3IuCisJICovCisJaWYgKGRjbGlz dF9jb3VudCgmcGdhaW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcykgPiA0KQorCQlyZXR1cm4g dHJ1ZTsKKworCS8qCisJICogSWYgdGhlIElPIGlzIGxhcmdlciwgdGhlIGdhaW5zIGZyb20gcGFy YWxsZWxpemluZyB0aGUgbWVtb3J5IGNvcHkgYXJlCisJICogbGFyZ2VyIGFuZCB0eXBpY2FsbHkg dGhlIGltcGFjdCBvZiB0aGUgbGF0ZW5jeSBpcyBzbWFsbGVyLgorCSAqLworCWlmIChpb19zaXpl ID49IChCTENLU1ogKiA0KSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK IHN0YXRpYyB2b2lkCiBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0 cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKIAlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzaXplX3QJ CWlvX3NpemUgPSAwOwogCiAJc3dpdGNoICgoUGdBaW9PcCkgaW9oLT5vcCkKIAl7CkBAIC03MTcs NiArNzQ5LDggQEAgcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1 Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJCQkJCSAgIGlvdi0+aW92X2Jhc2UsCiAJCQkJCQkJ CSAgIGlvdi0+aW92X2xlbiwKIAkJCQkJCQkJICAgaW9oLT5vcF9kYXRhLnJlYWQub2Zmc2V0KTsK KworCQkJCWlvX3NpemUgPSBpb3YtPmlvdl9sZW47CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MjYsNyArNzYwLDEzIEBAIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8oUGdBaW9IYW5kbGUgKmlvaCwg c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogCQkJCQkJCQkJaW9oLT5vcF9kYXRhLnJlYWQuaW92 X2xlbmd0aCwKIAkJCQkJCQkJCWlvaC0+b3BfZGF0YS5yZWFkLm9mZnNldCk7CiAKKwkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92Kysp CisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVuOwogCQkJfQorCisJCQlpZiAocGdhaW9fdXJp bmdfc2hvdWxkX3VzZV9hc3luYyhpb2gsIGlvX3NpemUpKQorCQkJCWlvX3VyaW5nX3NxZV9zZXRf ZmxhZ3Moc3FlLCBJT1NRRV9BU1lOQyk7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgUEdBSU9fT1Bf V1JJVEVWOgpAQCAtNzQ3LDYgKzc4NywxMiBAQCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlv SGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJCSBpb2gtPm9w X2RhdGEud3JpdGUuaW92X2xlbmd0aCwKIAkJCQkJCQkJCSBpb2gtPm9wX2RhdGEud3JpdGUub2Zm c2V0KTsKIAkJCX0KKworCQkJLyoKKwkJCSAqIEZvciBub3cgZG9uJ3QgdHJpZ2dlciB1c2Ugb2Yg SU9TUUVfQVNZTkMgZm9yIHdyaXRlcywgaXQncyBub3QKKwkJCSAqIGNsZWFyIHRoZXJlIGlzIGEg cGVyZm9ybWFuY2UgYmVuZWZpdCBpbiBkb2luZyBzby4KKwkJCSAqLworCiAJCQlicmVhazsKIAog CQljYXNlIFBHQUlPX09QX0lOVkFMSUQ6Ci0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v21-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig61559 RnJvbSAxZmUxN2UxMGU0MDJhODdkN2E5MDdjMzdiNjU4NDliYTc2M2U1OTI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwNy8xNV0g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0YSB0aGF0IHRyYWNrcyB3 aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sg d2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGlu IGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVy IGNhbGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cyBiZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBi cmVhayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRo ZSByZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRo IGNhbiBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hp Y2ggaXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQg YW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJl ZCB0byB0aGUgc2xvdApvbiB0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBS ZWxlYXNlQnVmZmVyIGFzIHBhcnQgb2YKbW92aW5nIG9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9j aykuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbQp3aGVyZSB0aGUgY29kZSBwYXRo IGluIHF1ZXN0aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdwpjYWxscyBt b3JlIG9mdGVuIHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMg YmVlbgp0aWVkIHRvIHRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBk ZWNpZGUgdG8gcmVsZWFzZSB0aGUKYnVmZmVyIGFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUgd2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBm b3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5k IGxvY2tlZCB0aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNy QnVmZmVyUmVmQ291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3Vn Z2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZG VHR6X3Z3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBiYmUzOWE1 NzcuLjU3YzVjNmI1ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMyLDYgKzEzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRv IHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4 c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KKwlib29sCQl4c19sYXN0aW5ibG9jazsgLyog bGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCiB9IEluZGV4RmV0 Y2hIZWFwRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYwppbmRleCA5MDA4NzZlMTguLmVjMmFmYmRiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtOTAsNiArOTAsOSBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpCiAJQXNzZXJ0KGhzY2Fu LT54c192bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyKTsKIAloc2Nhbi0+eHNfdm1faXRlbXMgPSAx OwogCisJLyogeHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uIHN0YXRlICovCisJQXNzZXJ0KCFo c2Nhbi0+eHNfbGFzdGluYmxvY2spOworCiAJLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3Qg aW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8KIAlpZiAoc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKIAl7CkBAIC00ODUsNiArNDg4 LDE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKFJlbGF0aW9uIHJlbCwKIAkJLyog UmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAqLwogCQlo c2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwogCisJCS8qCisJ CSAqIERyb3AgdGhlIHhzX2JsayBwaW4gaW5kZXBlbmRlbnRseSBoZWxkIG9uIGJ5IHNsb3QgKGlm IGFueSkgbm93LAorCQkgKiBiZWZvcmUgY2FsbGluZyBSZWxlYXNlQnVmZmVyLiAgVGhpcyBhdm9p ZHMgZXhwZW5zaXZlIGNhbGxzIHRvCisJCSAqIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdyBj YXVzZWQgYnkgRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlCisJCSAqIGZhaWxpbmcgdG8gaGl0IHRo ZSBiYWNrZW5kJ3MgY2FjaGUgZm9yIHRoZSByZWxlYXNlIG9mIHRoZSBvbGQgcGluLgorCQkgKi8K KwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhz X2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKQEAgLTUyMiw3ICs1 MzMsMzMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoUmVsYXRpb24gcmVsLAogCQkq aGVhcF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3Qt PnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVy SGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisK KwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBi bG9jayB3aXRoaW4gdGhlIGJhdGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0 aGUgc2xvdCByYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBw aW4gY291bnQuICBUaGlzIHNhdmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICog YW5kIFJlbGVhc2VCdWZmZXIgY2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxl YXNlIGl0cworCQkgKiBwaW4gb24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBi bG9jayBhbnl3YXkuCisJCSAqCisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBoZWFwX2Nv bnRpbnVlIGlzIGZhbHNlLCBzaW5jZSBvdGhlcndpc2UKKwkJICogdGhlIGNhbGxlciB3aWxsIG5l ZWQgeHNfY2J1ZiB0byByZW1haW4gdmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlp ZiAoaHNjYW4tPnhzX2xhc3RpbmJsb2NrICYmICEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJRXhl Y1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAor CQkJCQkJCQkJCSAgIGhzY2FuLT54c19jYnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxp ZEJ1ZmZlcjsKKwkJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8q CisJCQkgKiBOb3RlOiB0aGUgcGluIG5vdyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0 byBiZSByZWxlYXNlZAorCQkJICogb24gdGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGlj aXQgRXhlY0NsZWFyVHVwbGUuICBUaGlzCisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tl bmQncyBwcml2YXRlIHJlZmNvdW50IGNhY2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhl Y1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJ CQkJIGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQogCXsKQEAgLTgzNSwxMCArODcyLDQyIEBA IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAogCiAJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCiAJewor CQlpbnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKwogCQkvKgogCQkgKiBQbGFpbiBp bmRleCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUg Y3VycmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2Nr LiAgV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwKKwkJICogY2FuIHRy YW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZSBzbG90IGluc3RlYWQgb2YgaW5jcmVtZW50aW5n IHRoZQorCQkgKiBwaW4gY291bnQsIHNhdmluZyBhIHBhaXIgb2YgSW5jckJ1ZmZlclJlZkNvdW50 L1JlbGVhc2VCdWZmZXIgY2FsbHMuCisJCSAqCisJCSAqIE5vdGU6IFdlIGNhbm5vdCBkbyB0aGlz IGZvciBpbmRleC1vbmx5IHNjYW5zIGJlY2F1c2UgYWxsLXZpc2libGUKKwkJICogaXRlbXMgYXJl IHNraXBwZWQgYnkgYm90aCB0aGUgc2NhbiBhbmQgdGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrLiBJ dAorCQkgKiBkb2Vzbid0IHNlZW0gd29ydGggdGhlIHRyb3VibGUgb2YgcmVhc29uaW5nIGFib3V0 IHRoZXNlIGlzc3VlcywKKwkJICogc2luY2UgdGhlIG9wdGltaXphdGlvbiBvbmx5IGhlbHBzIHdo ZW4gaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZC4KKwkJICoKKwkJICogTm90ZTogV2UgZGVsaWJl cmF0ZWx5IGRvbid0IGNvbnNpZGVyIHRoZSBiYXRjaCBhZnRlciBzY2FuQmF0Y2gsCisJCSAqIGJl Y2F1c2UgZG9pbmcgc28gd291bGQgYWRkIGNvbXBsZXhpdHkgZm9yIGxpdHRsZSBiZW5lZml0LiAg SXQncworCQkgKiBva2F5IGlmIHhzX2xhc3RpbmJsb2NrIGlzIHNwdXJpb3VzbHkgc2V0IHRvIGZh bHNlLgogCQkgKi8KIAkJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3Mt Pml0ZW0gKyAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA8PSBzY2FuQmF0Y2gtPmxhc3RJdGVt KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+aXRlbSAtIDE7CisJ CQloYXNOZXh0ID0gKG5leHRJdGVtID49IHNjYW5CYXRjaC0+Zmlyc3RJdGVtKTsKKwkJfQorCisJ CWhzY2FuLT54c19sYXN0aW5ibG9jayA9IGhhc05leHQgJiYKKwkJCUl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIoJnNjYW5CYXRjaC0+aXRlbXNbbmV4dEl0ZW1dLnRhYmxlVGlkKSAhPQorCQkJSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfaGVhcHRpZCk7CisKIAkJcmV0dXJuICZz Y2FuLT54c19oZWFwdGlkOwogCX0KIApAQCAtODQ3LDcgKzkxNiw3IEBAIGhlYXBhbV9pbmRleF9y ZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEg KmhzY2FuLAogCSAqCiAJICogQWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggY2FsbGVyIGFsc28gbmVl ZHMuCiAJICovCi0JQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPnhz X3dhbnRfaXR1cCAmJiAhaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKIAlzY2FuLT54c19pdHVwID0g KEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKwogCQkJCQkJCQkgIHNjYW5CYXRj aC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOwogCi0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v21-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig615810 RnJvbSBhYWZmY2JiYTBlYzlhNTJjMDUwYWI2YWUzMzJlMzFlMDY5NTQxNTMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwNi8xNV0g QWRkIGludGVyZmFjZXMgdGhhdCBlbmFibGUgaW5kZXggcHJlZmV0Y2hpbmcuCgpBZGQgYSBuZXcg YW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNzIG1l dGhvZHMKdG8gaW1wbGVtZW50IHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5z IHRoYXQgcmV0dXJuIGluZGV4CmVudHJpZXMgaW4gYmF0Y2hlcyBjb21wcmlzaW5nIGFsbCBtYXRj aGluZyBpdGVtcyBmcm9tIGFuIGluZGV4IHBhZ2UsCnJhdGhlciB0aGFuIG9uZSBtYXRjaCBhdCBh IHRpbWUuICBBbHNvIHN3aXRjaCBuYnRyZWUgb3ZlciBmcm9tCmFtZ2V0dHVwbGUgdG8gdGhlIG5l dyBhbWdldGJhdGNoIGludGVyZmFjZS4KClRoaXMgZXhwYW5kcyB0aGUgc2xvdC1iYXNlZCB0YWJs ZSBBTSBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FCmZyb20gdHdvIGNhbGxiYWNrcyAo Zm9yIGFtZ2V0dHVwbGUgcGxhaW4gYW5kIGluZGV4LW9ubHkgc2NhbnMpIHRvIGZvdXIsCmFkZGlu ZyBhbWdldGJhdGNoIHZhcmlhbnRzIGZvciBib3RoIHNjYW4gdHlwZXMuICBUaGUgYW1nZXRiYXRj aAppbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhpcyBhcHByb2FjaCB0byBpbmRl eCBzY2FuczogdGhlCnRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVkZ2Ugb2Ygd2hpY2ggVElEcyB3 aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuCmluIHRoZSBuZWFyIGZ1dHVyZSB0byBwZXJmb3Jt IEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUKYWRkZWQgYnkgYW4gdXBjb21p bmcgY29tbWl0LgoKV2l0aCBhbWdldGJhdGNoLCBhIHNjYW4tbGV2ZWwgcG9saWN5IGRldGVybWlu ZXMgd2hldGhlciBlYWNoIGJhdGNoJ3MKaW5kZXggcGFnZSBidWZmZXIgcGluIGlzIGRyb3BwZWQg ZWFnZXJseSBieSB0aGUgaW5kZXggQU0gKGZvciBwbGFpbgpzY2FucyB3aXRoIGFuIE1WQ0Mgc25h cHNob3QsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNlbGYgcHJldmVudHMgVElECnJlY3ljbGluZyBw cm9ibGVtcykgb3IgcmV0YWluZWQgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBU SUQKcmVjeWNsaW5nIGJ5IFZBQ1VVTS4gIFRoZSBpbnRlcmxvY2sgaXMgcmV0YWluZWQgZm9yIG5v bi1NVkNDIHNjYW5zIGFuZApmb3IgaW5kZXgtb25seSBzY2FucywgYW5kIGlzIGRyb3BwZWQgYnkg dGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3CmFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdoZW4gaXQg aXMgc2FmZSB0byBkbyBzby4gKEFjdHVhbGx5LCBpbmRleCBBTXMKYXJlIHVzdWFsbHkgYWJsZSB0 byBkcm9wIHRoZSBwaW4gYXQgdGhlIHNhbWUgdGltZSB0aGF0IHRoZXkgcmVsZWFzZSB0aGUKbG9j ay4gIEluIHByYWN0aWNlLCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgaXMgb25seSByZWFs bHkgbmVlZGVkCmR1cmluZyBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSBkcm9wcGluZyB0aGUgcGlu IGludGVybG9jayBtaWdodCBuZWVkIHRvCmJlIGRlbGF5ZWQgZXZlciBzbyBzbGlnaHRseSwgYXMg ZXhwbGFpbmVkIGJlbG93LikKClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRk ZWQgdG8gbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdv cmsgd2l0aCBhbGwgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIChMUF9ERUFEIG1hcmtpbmcgb2YgaW5kZXggZW50cmllcyBtdXN0IGJlIHBlcmZvcm1l ZApieSBpbXBsZW1lbnRpbmcgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3aGlj aCBoYXMgYQpkb2N1bWVudGVkIGNvbnRyYWN0IGRlc2NyaWJpbmcgaG93IGluZGV4IEFNcyBtdXN0 IHJlYXNvbiBhYm91dApjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcpLiAgU2NhbnMgY2FuIGFsd2F5 cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQgdGhlIHNjYW4g dXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGluIG9wdGltaXph dGlvbiwgd2hpY2ggaGFkIG5vIHdheSBvZiBkb2luZyB0aGlzIHNhZmVseSBkdXJpbmcKaW5kZXgt b25seSBzY2FucyBkdWUgdG8gaG93IGFtZ2V0dHVwbGUgd29ya3MsIGFuZCBvbmx5IGdhaW5lZCBz dXBwb3J0CmZvciBzY2FucyBvZiB1bmxvZ2dlZCByZWxhdGlvbnMgaW4gcmVjZW50IGNvbW1pdCA4 YTg3OTExOSkuCgpUaGUgb2xkIGFtbWFya3BvcyBhbmQgYW1yZXN0cnBvcyBpbmRleCBBTSBjYWxs YmFja3MgYXJlIHJlbW92ZWQuICBXaXRoCmFtZ2V0YmF0Y2gsIG1hcmsvcmVzdG9yZSBvZiBzY2Fu IHBvc2l0aW9ucyBpcyBtYW5hZ2VkIGJ5IHRoZSB0YWJsZSBBTSwKd2l0aCBoZWxwIGZyb20gaW5k ZXhiYXRjaC5jIHV0aWxpdHkgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBiZWluZwpkZWxlZ2F0ZWQg dG8gdGhlIGluZGV4IEFNLiAgQWxsIGFtZ2V0YmF0Y2gtY2FwYWJsZSBpbmRleCBBTXMgaW5oZXJl bnRseQpzdXBwb3J0IG1hcmsvcmVzdG9yZSB3aXRob3V0IG5lZWRpbmcgdG8gaW1wbGVtZW50IGl0 IHRoZW1zZWx2ZXMuICBUYWJsZQpBTXMgbXVzdCBwcm92aWRlIHRoZSBuZXcgaW5kZXhfZmV0Y2hf bWFya3BvcyBhbmQgaW5kZXhfZmV0Y2hfcmVzdHJwb3MKY2FsbGJhY2tzIHRvIG1ha2UgYWxsIHRo aXMgd29yay4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNo aW5nIHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRl eCBzY2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdz IGl0IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFu eSBidWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2Ug YnVmZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGlu ZGV4IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlv bnMgYmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNp ZGUgaXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4K CkluIHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdl IGJ1ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGlu ZGV4LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3Ag YW50aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0 aGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVz LgpUaGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9y aXR5IHRvIGRlY2lkZQp3aGVuIHRvIGRyb3AgaW5kZXggcGFnZSBwaW5zL3VuZ3VhcmQgYmF0Y2hl cywgc28gdGhpcyBjYW4gYmUgY29uc2lkZXJlZAphIGhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRh aWwgKGluZGV4IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBz dGlsbCBhbGxvd3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9y ZQp0aGFuIG9uZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBp bmRleC1vbmx5IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xk cyBvcGVuIHNldmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWlu IGFuIGFkZXF1YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCBzdXBwb3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudAplaXRoZXIgdGhl IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIG9yIHRoZSBhbWdldHR1cGxlIGludGVyZmFjZSAobm90IGJv dGgpLgpBbiB1cGNvbWluZyBwYXRjaCB3aWxsIGFkZCBzdXBwb3J0IGZvciBhbWdldGJhdGNoIHRv IHRoZSBoYXNoIGluZGV4IEFNLgpCdXQgdGhlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3Rp bGwgYmUgdXNlZCBieSB0aGUgR2lTVCBhbmQgU1AtR2lTVAppbmRleCBBTXMgZm9yIG5vdy4gIEJv dGggc2hhcmUgYSBzZXQgb2YgcHJvYmxlbXMgdGhhdCBtYWtlIGl0IHVuY2xlYXIKaG93IHRvIGdv IGFib3V0IGFkZGluZyBzdXBwb3J0LgoKQm90aCBBTXMgcmVjb25zdHJ1Y3QgaW5kZXggZGF0YSBh cyBIZWFwVHVwbGVzIHZpYSBoZWFwX2Zvcm1fdHVwbGUgZHVyaW5nCmluZGV4LW9ubHkgc2NhbnMs IHBlcmZvcm1pbmcgcmV0YWlsIHBhbGxvYyBhbGxvY2F0aW9ucyB0aGF0IGFyZQppbmNvbXBhdGli bGUgd2l0aCB0aGUgZmxhdCwgZml4ZWQtc2l6ZSwgcmVjeWNsYWJsZSBwZXItYmF0Y2ggbWVtb3J5 Cm1vZGVsIHRoYXQgYW1nZXRiYXRjaCdzIGN1cnJUdXBsZXMgd29ya3NwYWNlIHJlcXVpcmVzLiAg TW9yZW92ZXIsIGJvdGgKQU1zIGhhdmUga25vd24gYnVncyBpbnZvbHZpbmcgYnVmZmVyIHBpbiBt YW5hZ2VtZW50IGR1cmluZyBpbmRleC1vbmx5CnNjYW5zOiB0aGV5IHJlbGVhc2UgaW5kZXggbGVh ZiBwYWdlIHBpbnMgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuCmhvbGRpbmcgdGhlbSBhcyBhbiBp bnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLApjcmVh dGluZyBhIHJhY2UgY29uZGl0aW9uIGluIHdoaWNoIFZBQ1VVTSBjYW4gcmVtb3ZlIGEgaGVhcCB0 dXBsZSBhbmQKdGhlbiBtYXJrIGl0cyBwYWdlIGFsbC12aXNpYmxlIHdoaWxlIHRoZSBpbmRleC1v bmx5IHNjYW4gc3RpbGwgaG9sZHMgYQpyZWZlcmVuY2UgdG8gdGhlIG5vdy1yZWN5Y2xlZCBUSUQg WzFdLiAgVGhlc2UgaW5kZXggQU1zIGNhbm5vdCBhZG9wdAphbWdldGJhdGNoIHdpdGhvdXQgZmly c3QgZml4aW5nIHRoZSBwaW4taGFuZGxpbmcgZGVmaWNpZW5jeSB0aGF0IHRoZXkKYWxyZWFkeSBo YXZlIHVuZGVyIGFtZ2V0dHVwbGUgKGl0J3Mgbm90IGNsZWFyIGhvdyB0byBmaXggdGhlIHByb2Js ZW0Kd2l0aGluIHRoZSBjb25maW5lcyBvZiB0aGUgY3VycmVudCBhbWdldHR1cGxlIGRlc2lnbiwg bGV0IGFsb25lIGluIGEgd2F5CnRoYXQncyBjb21wYXRpYmxlIHdpdGggYW1nZXRiYXRjaCkuCgpb MV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6JTNEamppTkw5RkNoOEMxTC1HVUgxNWY0V0ZU V3ViMnglMkJfTnVjbmdjRERjSEt3JTQwbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogVG9tYXMgVm9u ZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0Lmll PgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdl ZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBl bnRlcnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZWZhYzMyMzgt NmYzNC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCi0tLQogc3JjL2luY2x1ZGUv YWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDM3ICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oICAgICAgICAgICAgICAgfCAyMDIgKysrKysKIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE5MCArKy0tLQogc3JjL2luY2x1ZGUv YWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMzQ1ICsrKysrKysrLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgICAgIHwgIDc3ICstCiBzcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5nZXQuYyAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICAgIHwgNTE4ICsrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAgNDkgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8IDcyNiArKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSAr CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgICAgICAgICAgfCAgNzQgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAxMyArLQog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgICAgIHwgMjA3ICsrKy0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAgICAgfCA0NjkgKysr KystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8 IDU2NyArKysrKystLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5j ICAgICAgICAgIHwgMjQ1IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9n LmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBp LmMgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyAgICAgICAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jICAg ICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAg ICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAg ICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5j ICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAgICAgICAg ICAgfCAgIDggKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAg ICB8ICAgNiArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAg IHwgNTI0ICsrKysrKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwg ICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5k ZXhfYW0uYyAgIHwgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgICAgICAgfCAgMTIgKy0KIDQyIGZpbGVzIGNoYW5nZWQsIDMxMTggaW5zZXJ0aW9ucygrKSwg MTI5NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mv aW5kZXhiYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkLi45YmQzMTQxZmMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE5IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBs ZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVm IEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJ ICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBtYXJrIGRlYWQgaXRlbXMgaW4gaW5k ZXggcGFnZSAqLwordHlwZWRlZiB2b2lkICgqYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbikgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisK Ky8qIGRyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJl bnQgVkFDVVVNIHJlY3ljbGluZyAqLwordHlwZWRlZiB2b2lkICgqYW11bmd1YXJkYmF0Y2hfZnVu Y3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFt Z2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElE Qml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTgsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRi aXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAq LwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFt bWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFy a2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0 IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgq YW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVz IC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMjAsMTIgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2Nh bjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFt Z2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJh dGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxs aXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBh bXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBh bWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRz Y2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0J YW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9z cmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVy ZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0 aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2Fu IGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggZGI2MmUwY2ExLi5hZTU4N2Y4ZGUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCkBAIC05Niw2ICs5Niw3IEBAIHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0 ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1 Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5C YXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRh ICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0 YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGUxOGM4ZjQwNC4u YmJlMzlhNTc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMjksOSArMTI5LDM5IEBAIHR5cGVkZWYg c3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJsb2NrTnVtYmVyIHhzX2JsazsKIAogCS8qIEZv ciB2aXNpYmlsaXR5IG1hcCBjaGVja3MgKGluZGV4LW9ubHkgc2NhbnMgYW5kIG9uLWFjY2VzcyBw cnVuaW5nKSAqLwotCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CisJQnVmZmVyCQl4c192bWJ1ZmZlcjsJ LyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCisJaW50CQkJeHNfdm1faXRlbXM7CS8qICMgaXRl bXMgdG8gcmVzb2x2ZSB2aXNpYmlsaXR5IGluZm8gZm9yICovCisKIH0gSW5kZXhGZXRjaEhlYXBE YXRhOwogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgaGVhcCB0YWJsZSBB TS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2Fu QmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiBmaXhlZC1zaXplIHRhYmxlIEFNIG9wYXF1ZSBhcmVh IG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcEJhdGNo RGF0YQoreworCXVpbnQ4CSAgICp2aXNJbmZvOwkJLyogcGVyLWl0ZW0gdmlzaWJpbGl0eSBmbGFn cywgb3IgTlVMTCAqLworfSBIZWFwQmF0Y2hEYXRhOworCisvKgorICogUGVyLWl0ZW0gdmlzaWJp bGl0eSBmbGFncyBzdG9yZWQgaW4gSGVhcEJhdGNoRGF0YS52aXNJbmZvIGFycmF5CisgKi8KKyNk ZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0ZW0gaW4gVk0/ ICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyogYmxvY2sgaXMg a25vd24gYWxsLXZpc2libGU/ICovCisKKy8qCisgKiBBY2Nlc3MgdGhlIGhlYXAtcHJpdmF0ZSBm aXhlZC1zaXplIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGFuIGFsbG9jYXRlZAorICogSW5k ZXhTY2FuQmF0Y2gsIHVzaW5nIGNhbGxlcidzIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIKKyAqLwor c3RhdGljIGlubGluZSBIZWFwQmF0Y2hEYXRhICoKK2hlYXBfYmF0Y2hfZGF0YShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGhlYXBhbSdzIGZpeGVkLXNp emUgc3BhY2UgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYWxsb2MnZCBhcmVhICovCisJcmV0dXJu IChIZWFwQmF0Y2hEYXRhICopIGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCk7Cit9 CisKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCiB0eXBl ZGVmIGVudW0KIHsKQEAgLTQzMiw4ICs0NjIsMTMgQEAgZXh0ZXJuIFRyYW5zYWN0aW9uSWQgaGVh cF9pbmRleF9kZWxldGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwKIC8qIGluIGhlYXAvaGVhcGFtX2lu ZGV4c2Nhbi5jICovCiBleHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFn cyk7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkg IGJvb2wgbmV3X2FsbG9jKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJ bmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJ bmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX21hcmtw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBC dWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJ CQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4 YmF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjU1NzA4OWVkOQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTAs MCArMSwyMDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guaAorICoJ ICBCYXRjaC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRj aCBpbnRlcmZhY2UuCisgKgorICogUHJvdmlkZXMgZnVuY3Rpb25zIHVzZWQgYnkgdGFibGUgQU1z IHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuJ3MgcG9zaXRpb25hbAorICogc3RhdGUgKHN0b3JlZCBp biBJbmRleFNjYW5EZXNjLmJhdGNocmluZ2J1ZiksIGFuZCB0byBtYW5hZ2UgdW5kZXJseWluZwor ICogcmVzb3VyY2VzIHN1Y2ggYXMgbWVtb3J5IGFuZCBidWZmZXIgcGlucy4gIEFsc28gcHJvdmlk ZXMgdmFyaW91cyB1dGlsaXR5CisgKiBmdW5jdGlvbnMgdXNlZCBieSBpbmRleCBBTXMgZm9yIGJh dGNoIHJlc291cmNlIG1hbmFnZW1lbnQuCisgKgorICogVGhpcyBtb2R1bGUgZG9lcyBub3QgcHJv dmlkZSBlbGVtZW50YXJ5IG9wZXJhdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGUKKyAqIHNjYW4n cyByaW5nIGJ1ZmZlciAoZS5nLiwgZm9yIGFwcGVuZGluZyBhIGJhdGNoKS4gIFRob3NlIGFyZSBp bXBsZW1lbnRlZCBhcworICogaW5saW5lIGZ1bmN0aW9ucyBkZWZpbmVkIGJlc2lkZSBJbmRleFNj YW5EZXNjIGFuZCBJbmRleFNjYW5CYXRjaC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIElOREVYQkFUQ0hfSAorI2RlZmluZSBJTkRFWEJB VENIX0gKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9nZW5h bS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKworLyoKKyAqIHV0aWxpdGllcyBjYWxsZWQgYnkg dGFibGUgQU1zCisgKi8KKworLyoKKyAqIFNldHMgdXAgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHN0 cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgorICogQ2FsbGVkIGZyb20gdGFi bGUgQU0ncyBpbmRleF9mZXRjaF9iZWdpbiBjYWxsYmFjayBkdXJpbmcgYW1nZXRiYXRjaCBzY2Fu cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2luaXQo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9z LnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxz ZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNo cmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOworCXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAw OworCisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gdHJ1ZTsKK30KKworZXh0ZXJuIHZvaWQgdGFibGVh bV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2Nhbik7 CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3Jl X3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3NjYW5i YXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1f dXRpbF9zY2FucG9zX2tpbGxpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0 YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKgorICogRmV0Y2ggdGhlIG5l eHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgor ICoKKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBh cyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQorICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVu IHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKKyAqIHByaW9yQmF0Y2ggb24g dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKgorICogUmV0dXJucyB0aGUgbmV4 dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZlbiBzY2FuCisgKiBk aXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoYXQg ZGlyZWN0aW9uLgorICoKKyAqIFRoaXMgaXMgd2hlcmUgYmF0Y2hlcyBhcmUgYXBwZW5kZWQgdG8g dGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4gIFdlIGRvbid0CisgKiBmcmVlIGFueSBiYXRjaGVzIGhl cmUsIHRob3VnaDsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSBjYWxsZXIuICBUaGUgY2FsbGVyCisg KiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBhZHZhbmNpbmcgdGhlaXIgcG9zaXRpb24uCisgKi8K K3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAordGFibGVh bV91dGlsX2ZldGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gsIEJhdGNoUmlu Z0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJQmF0Y2hS aW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gJnNjYW4t PmJhdGNocmluZ2J1ZjsKKworCWlmICghcHJpb3JCYXRjaCkKKwl7CisJCS8qIEZpcnN0IGNhbGwg Zm9yIHRoZSBzY2FuICovCisJCUFzc2VydChwb3MgPT0gJmJhdGNocmluZ2J1Zi0+c2NhblBvcyk7 CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHByaW9yQmF0Y2gtPmRpciAhPSBkaXJlY3Rpb24pKQor CXsKKwkJLyoKKwkJICogV2UgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24gYWNy b3NzIGJhdGNoZXMuICBQcmVwYXJlCisJCSAqIHNjYW4ncyBiYXRjaHJpbmdidWYgc3RhdGUgZm9y IHVzIHRvIGdldCB0aGUgbmV4dCBiYXRjaCBmb3IgdGhlCisJCSAqIG9wcG9zaXRlIHNjYW4gZGly ZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCB3aGVuIHByaW9yQmF0Y2ggd2FzCisJCSAqIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisJCSAqLworCQl0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5n ZShzY2FuKTsKKworCQkvKiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJh dGNoICovCisJCUFzc2VydChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsK KwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2Ug aWYgKGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJ CS8qIE5leHQgYmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBwb3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0Y2gt PmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOwor CQlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlyZXR1cm4g YmF0Y2g7CisJfQorCisJLyoKKwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBmb3IgY2FsbGluZyBh bWdldGJhdGNoLgorCSAqCisJICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJlIGZvciB0aGUgbGFz dCB2YWxpZCBiYXRjaCBjdXJyZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZmZXIgKGJhdGNoZXMg bXVzdCBzdGF5IGluIHNjYW4gb3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBzaG91bGQKKwkg KiBoYXZlIGFscmVhZHkgcmV0dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQgYmF0Y2ggZWFybGll ci4KKwkgKi8KKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CisJQXNzZXJ0 KCFwcmlvckJhdGNoIHx8CisJCSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMCAm JiBwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9zY2FuX2JhdGNoKHNj YW4sIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRjaCkpOworCisJLyoK KwkgKiBCZWZvcmUgd2UgY2FsbCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBpZiBwcmlvckJhdGNo IGlzIGFscmVhZHkga25vd24KKwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3aXRoIG1hdGNoaW5n IGl0ZW1zIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJpb3JCYXRjaCAmJgor CQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8KKwkJIHByaW9yQmF0Y2gtPmtu b3duRW5kRm9yd2FyZCA6CisJCSBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdl dGJhdGNoKHNjYW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlm IChiYXRjaCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgaW5kZXggQU0gKi8K KwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5maXJz dEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVu ZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nh bl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCS8qCisJCSAqIFRoZW9yZXRpY2FsbHkg d2Ugc2hvdWxkIHNldCBrbm93bkVuZEZvcndhcmQva25vd25FbmRCYWNrd2FyZCB0bworCQkgKiBm YWxzZSAod2hpY2hldmVyIGlzIHVzZWQgd2hlbiBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVj dGlvbikKKwkJICogd2hlbiB0aGlzIGlzIHRoZSBzY2FuJ3MgZmlyc3QgcmV0dXJuZWQgYmF0Y2gu ICBXZSBkb24ndCBib3RoZXIKKwkJICogYmVjYXVzZSB0aGUgaW5kZXggQU0gc2hvdWxkIGFsd2F5 cyByZWNvcmQgdGhhdCBmYWN0IGluIGl0cyBvd24KKwkJICogb3BhcXVlIGFyZWEuICAoVGhlc2Ug ZmllbGRzIG9ubHkgZXhpc3QgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGluZGV4CisJCSAqIEFNcyBz ZXR0aW5nIF9hbnlfIGZpZWxkIGZyb20gYW55IHByaW9yYmF0Y2ggdGhhdCB3ZSBwYXNzIHRvIHRo ZW0uCisJCSAqIEJlc2lkZXMsIGl0IHdvdWxkIGJlIGN1bWJlcnNvbWUgZm9yIGluZGV4IEFNcyB0 byBrZWVwIHRyYWNrIG9mCisJCSAqIHdoaWNoIGJhdGNoIGlzIHRoZSBjdXJyZW50IGFtZ2V0YmF0 Y2ggY2FsbCdzIG9yaWdpbmFsIHByaW9yYmF0Y2guKQorCQkgKi8KKwl9CisJZWxzZQorCXsKKwkJ LyogYW1nZXRiYXRjaCByZXR1cm5lZCBOVUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJ CQkvKgorCQkJICogVGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0 aGUgY3VycmVudCBzY2FuCisJCQkgKiBkaXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAg UmVtZW1iZXIgdGhhdCBwcmlvckJhdGNoIGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1h dGNoaW5nIGl0ZW1zLgorCQkJICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJl Y3Rpb24pKQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9IHRydWU7CisJCQllbHNl CisJCQkJcHJpb3JCYXRjaC0+a25vd25FbmRCYWNrd2FyZCA9IHRydWU7CisJCX0KKwl9CisKKwkv KiB4c19oaXR1cCBpc24ndCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMg Ki8KKwlBc3NlcnQoIXNjYW4tPnhzX2hpdHVwKTsKKworCXJldHVybiBiYXRjaDsKK30KKworLyoK KyAqIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zCisgKi8KK2V4dGVybiB2b2lkIGluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCSAgQnVmZmVyIGJ1Zik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5k ZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKKworLyoKKyAqIFV0aWxpdHkgbWFjcm8gZm9yIGFjY2Vzc2luZyB0aGUgaW5k ZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGRhdGEuCisgKgorICogRWFjaCBiYXRjaCBhbGxvY2F0 aW9uIHBsYWNlcyB0aGUgaW5kZXggQU0gb3BhcXVlIGFyZWEgYXQgYSBmaXhlZCBuZWdhdGl2ZQor ICogb2Zmc2V0IGZyb20gdGhlIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKHNlZSBpbmRleGFtX3V0 aWxfYmF0Y2hfYWxsb2MpLgorICogVGhpcyBtYWNybyByZXR1cm5zIGEgdHlwZWQgcG9pbnRlciB0 byB0aGF0IGFyZWEsIGFzc2VydGluZyB0aGF0IGV2ZXJ5Ym9keQorICogaGFzIHRoZSBzYW1lIGlk ZWEgYWJvdXQgd2hlcmUgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGlzIGluIHBhc3NpbmcuCisg Ki8KKyNkZWZpbmUgaW5kZXhhbV91dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIHR5 cGUpIFwKKwkoQXNzZXJ0TWFjcm8oKHNjYW4pLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9PSBN QVhBTElHTihzaXplb2YodHlwZSkpKSwgXAorCSAoKHR5cGUgKikgKChjaGFyICopIChiYXRjaCkg LSBNQVhBTElHTihzaXplb2YodHlwZSkpKSkpCisKKyNlbmRpZgkJCQkJCQkvKiBJTkRFWEJBVENI X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYTc1MDNjNTcuLjRjNGNkOTdlNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBOQlRSRUVfSAogCiAjaW5jbHVkZSAi YWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRl ICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19hbV9kLmgiCkBAIC05MjQsMTEyICs5MjUsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFZh Y3V1bVBvc3RpbmdEYXRhCiAKIHR5cGVkZWYgQlRWYWN1dW1Qb3N0aW5nRGF0YSAqQlRWYWN1dW1Q b3N0aW5nOwogCi0vKgotICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBz dGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KLSAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJv Y2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKLSAqIGRldGFp bHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBs b2NhdGlvbgotICogb2YgdGhlIHNjYW4sIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFya2Vk IGxvY2F0aW9uLCBpZiBhbnkuICAoV2UgdXNlCi0gKiBCVFNjYW5Qb3NEYXRhIHRvIHJlcHJlc2Vu dCB0aGUgZGF0YSBuZWVkZWQgZm9yIGVhY2ggb2YgY3VycmVudCBhbmQgbWFya2VkCi0gKiBsb2Nh dGlvbnMuKQlJbiBhZGRpdGlvbiB3ZSBjYW4gcmVtZW1iZXIgc29tZSBrbm93bi1raWxsZWQgaW5k ZXggZW50cmllcwotICogdGhhdCBtdXN0IGJlIG1hcmtlZCBiZWZvcmUgd2UgY2FuIG1vdmUgb2Zm IHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0 aW1lOiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkKLSAqIGFsbCB0aGUg bWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UgYW5kIHNhdmUgdGhlbSBpbiBCVFNjYW5Qb3NEYXRh LCB0aGVuCi0gKiByZWxlYXNlIHRoZSByZWFkLWxvY2sgd2hpbGUgcmV0dXJuaW5nIHRoZSBpdGVt cyB0byB0aGUgY2FsbGVyIGZvcgotICogcHJvY2Vzc2luZy4gIFRoaXMgYXBwcm9hY2ggbWluaW1p emVzIGxvY2svdW5sb2NrIHRyYWZmaWMuICBXZSBtdXN0IGFsd2F5cwotICogZHJvcCB0aGUgbG9j ayB0byBtYWtlIGl0IG9rYXkgZm9yIGNhbGxlciB0byBwcm9jZXNzIHRoZSByZXR1cm5lZCBpdGVt cy4KLSAqIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBhbHNvIHJlbGVhc2UgdGhlIHBpbiBkdXJpbmcg dGhpcyB3aW5kb3cgd2lsbCB2YXJ5LgotICogV2UgZHJvcCB0aGUgcGluICh3aGVuIHNvLT5kcm9w UGluKSB0byBhdm9pZCBibG9ja2luZyBwcm9ncmVzcyBieSBWQUNVVU0KLSAqIChzZWUgbmJ0cmVl L1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2Fm ZSkuCi0gKiBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9u IHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlCi0gKiBtb3Zpbmcgb24gdG8gaXRzIHNpYmxpbmcgcGFn ZS4KLSAqCi0gKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRo ZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAotICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ug b25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJbmRleFR1cGxlcyBnbwotICogaW50 byBhIHNlcGFyYXRlIHdvcmtzcGFjZSBhcnJheTsgZWFjaCBCVFNjYW5Qb3NJdGVtIHN0b3JlcyBp dHMgdHVwbGUncwotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFycmF5LiAgUG9zdGluZyBsaXN0IHR1 cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAotICogYWxsb3dpbmcgdGhlIHNhbWUga2V5 IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUgcG9zdGluZyBsaXN0Ci0gKiB0dXBs ZS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1i ZXIgYWJvdXQgZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBU SUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7 CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotCUxvY2F0aW9uSW5kZXgg dHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBhbnkg Ki8KLX0gQlRTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zRGF0YQotewot CUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkg Ki8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRv IF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFnZSByZWZlcmVu Y2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFn ZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyBy aWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4g c28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNhdmVkIHBvc2l0 aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRpcjsKLQotCS8q Ci0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1cGxlT2Zmc2V0 IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0ZWQgdHVwbGUg c3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0OwotCi0JLyoK LQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUg bWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQg b2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJCW1vcmVMZWZ0 OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5 cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0 KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUK LQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFu ZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1l bnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEg Y3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgot CSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10g Ki8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwot CWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JQlRT Y2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICov Ci19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwot Ci0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYp IFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsgXAotCQlSZWxl YXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVm ZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzY2Fu cG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSkgXAotCQkJ QlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJUU2Nh blBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1Zh bGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9z KS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkK LSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCi0KIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNl IGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVk ZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiB7CkBAIC0xMDUwLDYgKzk0NSw0MyBAQCB0eXBlZGVm IHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJyYXkn cyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKiBQZXItYmF0 Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3Qg QlRCYXRjaERhdGEKK3sKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBsZWFmIHBhZ2UncyBidWZmZXIgcGlu ICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBsZWFmIHBhZ2UncyBibG9jayBudW1iZXIg Ki8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGxlYWYgcGFnZSdzIGxlZnQgc2libGluZyAq LworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbGVhZiBwYWdlJ3MgcmlnaHQgc2libGluZyAq LworCWJvb2wJCW1vcmVMZWZ0OwkJLyogbW9yZSBwYWdlcyBvZiBpbnRlcmVzdCB0byB0aGUgbGVm dD8gKi8KKwlib29sCQltb3JlUmlnaHQ7CQkvKiBtb3JlIHBhZ2VzIG9mIGludGVyZXN0IHRvIHRo ZSByaWdodD8gKi8KK30gQlRCYXRjaERhdGE7CisKKy8qIEFjY2VzcyB0aGUgYnRyZWUtcHJpdmF0 ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZp bmUgQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0 X2FtZGF0YShzY2FuLCBiYXRjaCwgQlRCYXRjaERhdGEpCisKKy8qCisgKiBCVFNjYW5PcGFxdWVE YXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgor ICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXBy b2Nlc3Nfa2V5cygpIGZvcgorICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBp bmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBh c3N1bXB0aW9ucyBhYm91dCBob3cgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAq IHByb2dyZXNzIG9mIHRoZSBpbmRleCBzY2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNl IChzZWUgX2J0X3JlYWRwYWdlCisgKiBhbmQgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3 ZSBkb24ndCBhY3R1YWxseSB0cmFjayBhbnl0aGluZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2Nh biBwb3NpdGlvbiBpbiB0aGlzIG9wYXF1ZSBzdHJ1Y3QuCisgKgorICogSW5kZXggc2NhbnMgd29y ayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUgYW1nZXRiYXRjaCBjb250cmFj dDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeSBhbGwgdGhlIG1h dGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJuIHRoZW0gaW4gYSBuZXdseSBh bGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJlYWQtbG9jaworICogdXNpbmcg YW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9j ay91bmxvY2sKKyAqIHRyYWZmaWMuICBfYnRfbmV4dCBpcyBwYXNzZWQgcHJpb3JiYXRjaCwgd2hp Y2ggaGFzIGEgQlRCYXRjaERhdGEgYXJlYSB0aGF0CisgKiB0ZWxscyB1cyB3aGljaCBwYWdlIGlz IG5leHQgaW4gbGluZSB0byBiZSByZWFkIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbgorICog KHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQgdG8gYnRnZXRiYXRjaCBieSBj b3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdl IHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90 aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgUG9zdGluZyBsaXN0IHR1cGxl cworICogc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwgYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRv IGJlIHVzZWQgZm9yIGVhY2ggVElEIGluCisgKiB0aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBl ZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQg YnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAtMTA2NiwzMiArOTk4LDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8q IGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAg Km9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAq LwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQg Zm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAo a2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0 ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJ bnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29s CQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAq LwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBh cmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQg bWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0 IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICov Ci0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8K LQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwot Ci0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMg Y3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2Vl cCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVz dCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwot CSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1J bmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJ LyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFz dCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkv KiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBt YXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVm IEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsKQEAgLTExNjAsMTQgKzEwNjYsMTcgQEAg ZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpp c251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gU2l6ZSBidGVzdGltYXRlcGFyYWxsZWxz Y2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lk IGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQpOwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBs ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNj YW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJIEluZGV4U2Nh bkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4g aW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBl eHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwg aW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwor ZXh0ZXJuIHZvaWQgYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGJ0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4 dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0 cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRl cm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICpp bmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJ CQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcxLDggKzExODAs OSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHJlYWRwYWdlLmMKICAqLwot ZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0 ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg bmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0s CisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tl eXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50CV9i dF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVycHJvYywKIAkJCQkJCQkJICAgYm9v bCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEyODcsMTUgKzExOTcsMTUg QEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBy ZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2Vzcywg Ym9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2Vy dChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMy IF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBP ZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJ bmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZl ciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0 bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwog ICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRl eFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNj YW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsK IGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJu IHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4 IDk4NmI0ZjVmMy4uMDU3YzBkMmE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTEyNiw2ICsxMjYs MTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBh cmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKKwkvKiBUYWJsZSBBTSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAo TUFYQUxJR04nZCksIHNldCBieSBBTSAqLworCXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisK KwkvKiBQZXItaXRlbSB0cmFpbGluZyBkYXRhIHNpemUgaW4gZWFjaCBiYXRjaCAqLworCXVpbnQx NgkJYmF0Y2hfcGVyX2l0ZW1fc2l6ZTsKKwogCS8qCiAJICogQml0bWFzayBvZiBTY2FuT3B0aW9u cyBhZmZlY3RpbmcgdGhlIHJlbGF0aW9uLiBObyBTT19JTlRFUk5BTF9GTEFHUyBhcmUKIAkgKiBw ZXJtaXR0ZWQuCkBAIC0xMzMsMTMgKzEzOSwxODQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRj aFRhYmxlRGF0YQogCXVpbnQzMgkJZmxhZ3M7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8q CisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHdpdGhpbiB0aGUgc2NhbidzIHJp bmcgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQ b3NpdGlvbiByZWZlcmVuY2VzIGEgdmFsaWQgSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBl bnRyeT8gKi8KKwlib29sCQl2YWxpZDsKKworCS8qIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVm W10td2lzZSBpbmRleCB0byByZWxldmFudCBJbmRleFNjYW5CYXRjaCAqLworCXVpbnQ4CQliYXRj aDsKKworCS8qIEluZGV4U2NhbkJhdGNoLml0ZW1zW10td2lzZSBpbmRleCB0byByZWxldmFudCBC YXRjaE1hdGNoaW5nSXRlbSAqLworCWludAkJCWl0ZW07CisKK30gQmF0Y2hSaW5nSXRlbVBvczsK KworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJu ZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFi bGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBl ZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRp ZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgdGFibGUgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRl eE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRp b25JbmRleCB0dXBsZU9mZnNldDsJLyogaW5kZXggdHVwbGUncyBjdXJyVHVwbGVzIG9mZnNldCwg aWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUg YmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVy aW5nCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBFYWNoIGJhdGNoIGFsbG9jYXRpb24gaGFzIHRo ZSBmb2xsb3dpbmcgbWVtb3J5IGxheW91dDoKKyAqCisgKiAgIFt0YWJsZSBBTSBvcGFxdWUgYXJl YV0gICAgPC0gZml4ZWQtc2l6ZSwgLShiYXRjaF90YWJsZV9vZmZzZXQpIGZyb20gYmFzZQorICog ICBbaW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3Np emUpIGZyb20gYmFzZQorICogICBbSW5kZXhTY2FuQmF0Y2hEYXRhXSAgICAgIDwtIGJhc2UgcG9p bnRlciwgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaAorICogICBbaXRlbXNbbWF4aXRlbXNiYXRjaF1d CisgKiAgIFt0YWJsZSBBTSB0cmFpbGluZyBkYXRhXSAgPC0gcGVyLWl0ZW0gYXJlYSAoZS5nLiwg Zm9yIHZpc2liaWxpdHkgaW5mbykKKyAqICAgW2N1cnJUdXBsZXMgd29ya3NwYWNlXSAgICA8LSBp bmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGhlcmUgZm9yCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXgtb25seSBzY2FucyAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkK KyAqCisgKiBiYXRjaF90YWJsZV9vZmZzZXQgY29tYmluZXMgYm90aCBBTSBvcGFxdWUgc2l6ZXMg aW50byBhIHNpbmdsZSBvZmZzZXQgZnJvbQorICogdGhlIGJhdGNoIHBvaW50ZXIgdG8gdGhlIHRy dWUgYWxsb2NhdGlvbiBiYXNlLiAgVGhlIGluZGV4YmF0Y2guYyB1dGlsaXRpZXMKKyAqIHBmcmVl IGEgYmF0Y2ggYnkgcGFzc2luZyBwZnJlZSBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgaW5kZXhfc2Nh bl9iYXRjaF9iYXNlLgorICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGJhdGNoZXMg aGF2ZSBhIGZpeGVkIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uCisgKiBvZiBhbiBpbmRleCBzY2Fu IChzaW5jZSBiYXRjaGVzIGFyZSBjYWNoZWQgZm9yIHJldXNlKS4KKyAqCisgKiBUaGUgdGFibGUg QU0gY2FuIG92ZXJsYXkgYSBzbWFsbCBmaXhlZC1zaXplIHN0cnVjdCBhdCB0aGUgc3RhcnQgb2Yg dGhlCisgKiBhbGxvY2F0ZWQgc3BhY2UsIHdoaWNoIGl0IGFjY2Vzc2VzIHVzaW5nIGEgaW5kZXhf c2Nhbl9iYXRjaF9iYXNlIHNoaW0KKyAqIGFjY2Vzc29yIGZ1bmN0aW9uLiAgQ29udmVudGlvbiBm b3IgdGFibGUgQU1zIGlzIHRvIHN0b3JlIGEgcG9pbnRlciB0byBpdHMKKyAqIHBlci1pdGVtIGFy ZWEgaW4gdGhpcyBmaXhlZC1zaXplIGFyZWEgKGUuZy4sIGhlYXBhbSBzdG9yZXMgYSB2aXNJbmZv CisgKiBwb2ludGVyIGhlcmUpLCBpbiBhZGRpdGlvbiB0byBvdGhlciBpbmZvcm1hdGlvbiB0cmFj a2VkIGF0IHRoZSBiYXRjaCBsZXZlbC4KKyAqCisgKiBUaGUgaW5kZXggQU0gb3BhcXVlIGFyZWEg aXMgYWNjZXNzZWQgdmlhIGEgY3VzdG9tIGFjY2Vzc29yIHRoYXQgdXNlcyBhCisgKiBmaXhlZCBj b21waWxlLXRpbWUgY29uc3RhbnQgb2Zmc2V0IGZvciBlZmZpY2llbmN5IChhIGNvbnN0YW50IHRo YXQgaXMKKyAqIHRyYWNrZWQgaW4gdGhlIHNjYW4gZGVzY3JpcHRvciBhcyBiYXRjaF9pbmRleF9v cGFxdWVfc2l6ZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQorewor CS8qIEluZGV4IHBhZ2UncyBMU04sIG9wdGlvbmFsbHkgdXNlZCBieSBhbWtpbGxpdGVtc2JhdGNo IHJvdXRpbmVzICovCisJWExvZ1JlY1B0cglsc247CisKKwkvKiBzY2FuIGRpcmVjdGlvbiB3aGVu IHRoZSBpbmRleCBwYWdlIHdhcyByZWFkICovCisJU2NhbkRpcmVjdGlvbiBkaXI7CisKKwkvKgor CSAqIGtub3duRW5kQmFja3dhcmQgYW5kIGtub3duRW5kRm9yd2FyZCBpbmRpY2F0ZSB0aGF0IHRo aXMgYmF0Y2ggaXMgdGhlCisJICogbGFzdCBvbmUgd2l0aCBtYXRjaGluZyBpdGVtcyBpbiB0aGUg cmVsZXZhbnQgc2NhbiBkaXJlY3Rpb24uICBXaGVuCisJICogYW1nZXRiYXRjaCByZXR1cm5zIE5V TEwgZm9yIGEgZ2l2ZW4gZGlyZWN0aW9uLCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisJICogaXMg c2V0IG9uIHRoZSBwcmlvcmJhdGNoIHRoYXQgd2FzIHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBj YW5ub3Qga25vdworCSAqIHRoaXMgd2hlbiBhIGJhdGNoIGlzIGZpcnN0IHJldHVybmVkIGJ5IGFt Z2V0YmF0Y2g7IGl0IG9ubHkgYmVjb21lcworCSAqIGFwcGFyZW50IHdoZW4gd2UgdHJ5IGFuZCBm YWlsIHRvIGNvbnRpbnVlIHRoZSBzY2FuIHBhc3QgaXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0 YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2Ft ZQorCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRp dGlvbmFsIGluZGV4IHBhZ2VzIHRvCisJICogZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1h dGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIncyBwcmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtu b3duRW5kQmFja3dhcmQ7CisJYm9vbAkJa25vd25FbmRGb3J3YXJkOworCisJLyoKKwkgKiBCYXRj aCBzdGlsbCBob2xkcyBUSUQgcmVjeWNsaW5nIGludGVybG9jaz8KKwkgKi8KKwlib29sCQlpc0d1 YXJkZWQ7CisKKwkvKgorCSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAg T3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJh eSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkg KiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50 IGZvciBpbmRleCBBTXMKKwkgKiB0byBmaWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBzdGFy dGluZyBhdCB0aGUgbGFzdCBpdGVtIHNsb3QgYW5kCisJICogZmlsbGluZyBkb3dud2FyZHMuICBU aGlzIGlzIHdoeSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxh c3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKgorCSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQg YmVjYXVzZSBpdCdzIHNvbWV0aW1lcyBjb252ZW5pZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJl c2VudCBhbiBvdXQtb2YtYm91bmRzIHNwYWNlIGp1c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBp dCdzIDApLgorCSAqLworCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGlu IGl0ZW1zW10gKi8KKwlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRl bXNbXSAqLworCisJLyogaW5mbyBhYm91dCBkZWFkIGl0ZW1zLCBpZiBhbnkgKHBhbGxvYydkIHNl cGFyYXRlbHksIE5VTEwgaWYgdW51c2VkKSAqLworCWludAkJCW51bURlYWQ7CQkvKiBudW1iZXIg b2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLworCWludAkJICAgKmRlYWRJdGVtczsJCS8qIGl0 ZW1zW10td2lzZSBpbmRleGVzIG9mIGRlYWQgaXRlbXMgKi8KKworCS8qCisJICogSWYgd2UgYXJl IGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhpcyBpcyB0aGUgdHVwbGUgc3RvcmFnZSB3b3Jr c3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkg aXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICogc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBp bmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkuCisJICoKKwkgKiBjdXJyVHVwbGVzIHBv aW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9uIG9mIHRoaXMgYWxsb2NhdGlvbiwgcGFzdAor CSAqIGl0ZW1zW10gYW5kIGFueSB0YWJsZSBBTSB0cmFpbGluZyBkYXRhLiAgSXQgaXMgTlVMTCBm b3IgcGxhaW4gaW5kZXgKKwkgKiBzY2Fucy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJ LyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1z W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1zICovCit9IEluZGV4U2Nh bkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNj YW5CYXRjaDsKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFnZSBhbiBp bmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNlLiAgU2NhbnMg dXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoK KyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGFibGUgQU1zIHdpdGggYSB3YXkgdG8g cmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBfbXVsdGlwbGVf IGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAqIHRoZSB0YWJsZSBBTSBy ZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50byB0aGUgZnV0 dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRlciB3b3JrIGFz IGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdC dWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRj aGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3Mg cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0 b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9zJ3MgYmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZl ciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCisJSW5kZXhTY2FuQmF0Y2ggbWFya0Jh dGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0 aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJICogc2xvdCBpbiBiYXRjaGJ1ZltdLiAgVGhl IGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRzIEluZGV4U2NhbkJhdGNoCisJICogaXMgaGVh ZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSwgc2luY2UgdGhlc2UgaW5kZXhl cyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBhcml0aG1ldGljLiAgaGVhZEJhdGNoIG11c3Qg YmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhbkJhdGNoIChpLmUuIHRoZSBjdXJyZW50IHNj YW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7CisKKwkvKgorCSAqIG5leHRC YXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBfZW1wdHlfIHJpbmcgYnVmZmVyIGJhdGNoIHNs b3QgaW4KKwkgKiBiYXRjaGJ1ZltdLiAgQXMgd2l0aCBoZWFkQmF0Y2gsIHRoZSBhY3R1YWwgYmF0 Y2hidWZbXSBhcnJheSBwb3NpdGlvbiBpcworCSAqIG5leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01B WF9CQVRDSEVTIC0gMSkuICBBIG5ldyBiYXRjaCBjYW4gb25seSBiZQorCSAqIGFwcGVuZGVkIHRv IHRoaXMgcG9zaXRpb24vc2xvdCB3aGVuICFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoKS4KKwkgKgor CSAqIE5vdGU6IHRoZSBzY2FuJ3MgbW9zdCByZWNlbnRseSBhcHBlbmRlZCBiYXRjaCAoaXRzIHRh aWwgYmF0Y2gpIGlzCisJICogYWx3YXlzIGxvY2F0ZWQgYXQgKG5leHRCYXRjaCAtIDEpICYgKElO REVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4KKwkgKi8KKwl1aW50OAkJbmV4dEJhdGNoOworfSBC YXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8q CiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3Ro IGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4g IFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCi0gKiBhbWdldHR1cGxlLWJhc2VkIHNj YW5zLgorICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fucy4gIE90aGVycyBhcmUgb25seSB1c2VkIGlu IGFtZ2V0YmF0Y2gtYmFzZWQgc2NhbnMuCisgKgorICogVGhlIHJpbmcgYnVmZmVyIHVzZWQgYnkg YW1nZXRiYXRjaCBzY2FucyBpcyBzdG9yZWQgaGVyZSBhcyBhIGZpeGVkIGFycmF5IG9mCisgKiBw b2ludGVycyB0byBiYXRjaGVzLiAgV2UgbmVlZCBhIG1pbmltdW0gb2YgdHdvIHJpbmcgYnVmZmVy IGJhdGNoZXMgKGJ1dCB1c2UKKyAqIElOREVYX1NDQU5fTUFYX0JBVENIRVMpLCBzaW5jZSB0YWJs ZSBBTXMgb25seSByZW1vdmUgYSBiYXRjaCBhZnRlciB0aGV5J3ZlCisgKiBhbHJlYWR5IGNhbGxl ZCBhbWdldGJhdGNoIGFnYWluIGFuZCBhcHBlbmRlZCB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKi8K KyNkZWZpbmUgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUwkJNjQKKworU3RhdGljQXNzZXJ0RGVjbChJTkRFWF9TQ0FOX01BWF9CQVRDSEVT IDw9IFBHX1VJTlQ4X01BWCArIDEsCisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIG11c3Qg Zml0IGluIHVpbnQ4IHJpbmcgYnVmZmVyIGluZGV4ZXMiKTsKK1N0YXRpY0Fzc2VydERlY2woKElO REVYX1NDQU5fTUFYX0JBVENIRVMgJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpKSA9PSAw LAorCQkJCSAiSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOwor CiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogewogCS8qIHNjYW4gcGFyYW1ldGVy cyAqLwpAQCAtMTUwLDYgKzMyNywyNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0 YQogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRv cnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1 YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7 CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nl c3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nl c3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKworCS8qIHNjYW4ncyBhbWdldGJhdGNoIHN0YXRl IChvbmx5IHVzZWQgYnkgYW1nZXRiYXRjaC91c2ViYXRjaHJpbmcgc2NhbnMpICovCisJQmF0Y2hS aW5nQnVmZmVyIGJhdGNocmluZ2J1ZjsKKworCS8qCisJICogQXJyYXkgb2YgcG9pbnRlcnMgdG8g cmVjeWNsYWJsZSBiYXRjaGVzLCB1c2VkIGJ5IGFsbCBhbWdldGJhdGNoIHNjYW5zCisJICogYW5k IGJ5IGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRi YXRjaAorCSAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9C QVRDSEVTXTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGJhdGNoZXMsIHJlZmVyZW5jZWQg d2l0aGluIGJhdGNocmluZ2J1ZiAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoYnVmW0lOREVYX1ND QU5fTUFYX0JBVENIRVNdOworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVzZXMgYW1n ZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1lZGlhdGVVbmd1YXJkOwkv KiBlYWdlcmx5IGRyb3AgVElEIHJlY3ljbGluZworCQkJCQkJCQkJCSAqIGludGVybG9jaz8gKi8K KwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3RzIGluZGV4IHR1cGxlcyAq LwogCWJvb2wJCXhzX3RlbXBfc25hcDsJLyogdW5yZWdpc3RlciBzbmFwc2hvdCBhdCBzY2FuIGVu ZD8gKi8KIApAQCAtMTU4LDkgKzM1NSw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NE YXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVk IGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtp bGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLwotCi0JLyogaW5kZXgg YWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2b2lkCSAgICpvcGFxdWU7CQkJLyog YWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisJLyogeHNfc25hcHNob3QgdXNlcyBhbiBN VkNDIHNuYXBzaG90PyAqLworCWJvb2wJCU1WQ0NTY2FuOwogCiAJLyoKIAkgKiBJbnN0cnVtZW50 YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1zIGR1cmluZyBib3RoCkBA IC0xODYsNyArMzgyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAogCS8q CiAJICogUmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrLCB3aGljaCBp cyBzZXQgYnkKLQkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1n ZXR0dXBsZSBzY2FucworCSAqIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luIGF0IHRoZSBzdGFydCBv ZiBhbWdldGJhdGNoL2FtZ2V0dHVwbGUgc2NhbnMKIAkgKi8KIAlib29sCQkoKnhzX2dldG5leHRf c2xvdCkgKHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwKIAkJCQkJCQkJCVNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLApAQCAtMTk0LDYgKzM5MCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlz IG11c3QgYmUgcmVjaGVja2VkICovCiAKKwkvKiBiYXRjaCBzaXplIGluZm9ybWF0aW9uLCBzZXQg b25jZSBieSBpbmRleCBBTSBpbiBhbWJlZ2luc2NhbiAqLworCXVpbnQxNgkJbWF4aXRlbXNiYXRj aDsJLyogc2l6ZSBvZiBlYWNoIGJhdGNoJ3MgaXRlbXNbXSBhcnJheSAqLworCXVpbnQxNgkJYmF0 Y2hfaW5kZXhfb3BhcXVlX3NpemU7CS8qIE1BWEFMSUdOJ2QgaW5kZXggQU0gb3BhcXVlIHNpemUg Ki8KKwl1aW50MTYJCWJhdGNoX3R1cGxlc193b3Jrc3BhY2U7IC8qIGN1cnJUdXBsZXMgd29ya3Nw YWNlIHNpemUgKi8KKworCS8qIENvbXB1dGVkIG9mZnNldCwgdXNlZCB0byBnZXQgdGFibGUgQU0n cyBvcGFxdWUgYXJlYSBmcm9tIGEgYmF0Y2ggKi8KKwl1aW50MTYJCWJhdGNoX3RhYmxlX29mZnNl dDsKKwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0 aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQogCSAqIGV4cHJlc3Npb25zIG9mIHRoZSBsYXN0IHJl dHVybmVkIHR1cGxlLCBhY2NvcmRpbmcgdG8gdGhlIGluZGV4LiAgSWYKQEAgLTIzNyw0ICs0NDEs MTM1IEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZVRhYmxl U2xvdCAqc2xvdDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisvKgorICogSG93IG1hbnkgYmF0Y2hl cyBhcmUgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXI/CisgKi8KK3N0YXRpYyBp bmxpbmUgdWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2FuRGVzY0RhdGEgKnNj YW4pCit7CisJcmV0dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggLQor CQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoKKyAqIERvIHdlIGFs cmVhZHkgaGF2ZSBhIGJhdGNoIGxvYWRlZCBhdCAnaWR4JyBvZmZzZXQgaW4gc2NhbidzIHJpbmcg YnVmZmVyPworICoKKyAqIE5PVEU6IGEgc3RhbGUgYmF0Y2ggaWR4IGNhbiBhbGlhcyBhIGN1cnJl bnRseS1sb2FkZWQgcmFuZ2UgYWZ0ZXIgdWludDgKKyAqIG92ZXJmbG93LCBwcm9kdWNpbmcgYSBm YWxzZSBwb3NpdGl2ZS4gIEZhbHNlIG5lZ2F0aXZlcyBhcmUgbm90IHBvc3NpYmxlLgorICovCitz dGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2NhbkRlc2NE YXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0 Y2hyaW5nYnVmLmhlYWRCYXRjaCkgPj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNo cmluZ2J1Zi5uZXh0QmF0Y2gpIDwgMDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVkIHRoZSBt YXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4 X3NjYW5fYmF0Y2hfZnVsbChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gaW5k ZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTOworfQor CisvKgorICogUmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8KK3N0YXRp YyBpbmxpbmUgSW5kZXhTY2FuQmF0Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2FuRGVzY0Rh dGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQo c2NhbiwgaWR4KSk7CisKKwlyZXR1cm4gc2Nhbi0+YmF0Y2hidWZbaWR4ICYgKElOREVYX1NDQU5f TUFYX0JBVENIRVMgLSAxKV07Cit9CisKKy8qCisgKiBBcHBlbmQgZ2l2ZW4gYmF0Y2ggdG8gc2Nh bidzIGJhdGNoIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4X3Nj YW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm OworCXVpbnQ4CQluZXh0QmF0Y2ggPSByaW5nYnVmLT5uZXh0QmF0Y2g7CisKKwlBc3NlcnQoIWlu ZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CisKKwlzY2FuLT5iYXRjaGJ1ZltuZXh0QmF0Y2gg JiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYtPm5leHRC YXRjaCsrOworfQorCisvKgorICogUmV0dXJuIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSBvZiBh IGJhdGNoICh1c2VkIHRvIHBmcmVlIGJhdGNoZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAq CitpbmRleF9zY2FuX2JhdGNoX2Jhc2UoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCXJldHVybiAoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3Rh YmxlX29mZnNldDsKK30KKworLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRl bSBpbiB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0 aGUgcHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAorICogd2hlbiBzY2Fu bmluZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291 bGQgYmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3Jl IGl0ZW1zIGZyb20gdGhlIGJhdGNoIHJlbWFpbmluZyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJhdGNo UmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0 Y2gtPmxhc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRp cmVjdGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlmICgtLXBvcy0+aXRlbSA8IGJhdGNoLT5maXJz dEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQWR2YW5jZWQgd2l0aGluIGJhdGNo ICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBZHZhbmNlIGJhdGNoIHBvc2l0aW9uIHRv IHRoZSBzdGFydCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFdoZW4gd2UncmUgY2FsbGVkLCB0 aGlzIHBvc2l0aW9uIHNob3VsZCBwb2ludCB0byBhIGJhdGNoIHRoYXQgY2FsbGVyIGp1c3QKKyAq IGZpbmlzaGVkIGNvbnN1bWluZyBmcm9tLiAgV2hlbiB3ZSByZXR1cm4sIHRoaXMgcG9zaXRpb24g d2lsbCBwb2ludCB0bworICogbmV4dEJhdGNoLCB0aGUgbmV4dCBiYXRjaCBmcm9tIHRoZSByaW5n IGJ1ZmZlci4gIFdlJ2xsIGhhdmUgYWxzbyBzZXQgdGhlCisgKiBwb3NpdGlvbidzIGl0ZW0gb2Zm c2V0IHRvIG5leHRCYXRjaCdzIGZpcnN0IGl0ZW0gaW4gdGhlIGdpdmVuIGRpcmVjdGlvbgorICog KHdoaWNoIGlzIGFjdHVhbGx5IG5leHRCYXRjaCdzIF9sYXN0XyBpdGVtIHdoZW4gc2Nhbm5pbmcg YmFja3dhcmRzKS4KKyAqCisgKiBuZXh0QmF0Y2ggZG9lc24ndCBoYXZlIHRvIGJlIChhbmQgb2Z0 ZW4gaXNuJ3QpIHRoZSBtb3N0IHJlY2VudGx5IGFwcGVuZGVkCisgKiBiYXRjaCBpbiB0aGUgc2Nh bidzIHJpbmcgYnVmZmVyLiAgSXQgaXMgbWVyZWx5IHRoZSBuZXh0IGJhdGNoIGluIGxpbmUgdG8g YmUKKyAqIGNvbnN1bWVkIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2Ygb3VyIGNhbGxlci4KKyAq Lworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggbmV4dEJhdGNoLCBCYXRjaFJp bmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KG5leHRCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7 CisJQXNzZXJ0KG5leHRCYXRjaC0+Zmlyc3RJdGVtIDw9IG5leHRCYXRjaC0+bGFzdEl0ZW0pOwor CisJLyogSW5jcmVtZW50IGJhdGNoIChtaWdodCB3cmFwKSwgb3IgaW5pdGlhbGl6ZSBpdCB0byB6 ZXJvICovCisJaWYgKHBvcy0+dmFsaWQpCisJCXBvcy0+YmF0Y2grKzsKKwllbHNlCisJCXBvcy0+ YmF0Y2ggPSAwOworCisJcG9zLT52YWxpZCA9IHRydWU7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQlwb3MtPml0ZW0gPSBuZXh0QmF0Y2gtPmZpcnN0SXRlbTsK KwllbHNlCisJCXBvcy0+aXRlbSA9IG5leHRCYXRjaC0+bGFzdEl0ZW07Cit9CisKICNlbmRpZgkJ CQkJCQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGUwNWMwOWZkYi4uZGZk YmM5M2U2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1MiwxMCArNDUyLDExIEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogZmxhZ3MgaXMgYSBiaXRtYXNrIG9mIFNjYW5PcHRp b25zIGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNjYW4KIAkgKiBiZWhhdmlvci4gU2VlIHNj YW5fYmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXNzaW5nIHRoZXNlLgogCSAqCi0J ICogQ2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19n ZXRuZXh0X3Nsb3QgdG8KLQkgKiB0aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZCBjYWxsYmFjay4g IFR1cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYQotCSAqIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCgpLiAgTm8gc2VwYXJhdGUgc2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KLQkgKiB0 aGlzIHN0cnVjdCEKKwkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5n IHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIKKwkgKiAod2hlbiB0aGUgc2NhbidzIGluZGV4 IEFNIHN1cHBvcnRzIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSksIGFuZCBmb3IKKwkgKiBzZXR0 aW5nIEluZGV4U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvIHRoZSBhcHByb3ByaWF0ZSBzbG90 LWJhc2VkCisJICogY2FsbGJhY2suICBUdXBsZXMgY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuCisJICogTm8gc2VwYXJhdGUgc2xvdC1iYXNlZCBjYWxs YmFjayBleGlzdHMgaW4gdGhpcyBzdHJ1Y3QhCiAJICoKIAkgKiBJbiBwcmluY2lwbGUgYSBzaW5n bGUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIChzdG9yZWQgaGVyZSkgd291bGQKIAkgKiBzdWZm aWNlLCBidXQgdXNpbmcgc3BlY2lhbGl6ZWQgdmFyaWFudHMgYWxsb3dzIHRoZSB0YWJsZSBBTSB0 byBwcm92aWRlCkBAIC00NjcsMTAgKzQ2OCwzMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91 dGluZQogCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJl bnQvY29ycmVjdCB2ZXJzaW9uIG9mCiAJICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0 aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KIAkgKiBvbGRlciB2ZXJz aW9uIG9mIHRoZSB0dXBsZS4KKwkgKgorCSAqIENhbGxiYWNrIGFsc28gaW5pdGlhbGl6ZXMgdGhl IGJhdGNoX29wYXF1ZV9zaXplIGFuZCBiYXRjaF9wZXJfaXRlbV9zaXplCisJICogZmllbGRzIGlu IHRoZSByZXR1cm5lZCBzdHJ1Y3QsIHRvIGxldCB0aGUgY29yZSBjb2RlIGtub3cgaG93IG11Y2gK KwkgKiBtZW1vcnkgd2lsbCBiZSByZXF1aXJlZCBpbiB0aGUgb3BhcXVlIHRhYmxlIEFNIHBvcnRp b25zIG9mIGVhY2ggYmF0Y2gKKwkgKiBhbGxvY2F0aW9uIChkdXJpbmcgYW1nZXRiYXRjaCBpbmRl eCBzY2FucykuICBUYWJsZSBBTXMgY2FuIHN0b3JlIHRoaW5ncworCSAqIGxpa2UgcGVyLWl0ZW0g dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBpbiBlYWNoIGFsbG9jYXRlZCBiYXRjaC4gIFNlZQorCSAq IHJlbHNjYW4uaCBmb3IgZGV0YWlscy4KIAkgKi8KIAlzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0 YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJ CQkgIHVpbnQzMiBmbGFncyk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXIt YmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKgorCSAqIENh bGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVk IGJhdGNoLgorCSAqIFRhYmxlIEFNcyBzaG91bGQgc2V0IHVwIGl0cyBvcGFxdWUgYXJlYSAoYXQg YSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBiYXRjaCBwb2ludGVyKSBhbmQgYW55IHRy YWlsaW5nIHBlci1pdGVtIGRhdGEgKGUuZy4gdmlzaWJpbGl0eSBmbGFncykuCisJICoKKwkgKiAn bmV3X2FsbG9jJyBpcyB0cnVlIGZvciBmcmVzaGx5IHBhbGxvYydkIGJhdGNoZXMsIGZhbHNlIGZv ciBiYXRjaGVzCisJICogcmVjeWNsZWQgZnJvbSB0aGUgY2FjaGUuCisJICovCisJdm9pZAkJKCpp bmRleF9mZXRjaF9iYXRjaF9pbml0KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAg IEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJCSAgIGJvb2wgbmV3X2FsbG9jKTsKKwog CS8qCiAJICogUmVzZXQgaW5kZXggc2NhbiBmb3IgYSByZXNjYW4uICBSZXNldHMgdGFibGUtb3du ZWQgcmVzb3VyY2VzLgogCSAqLwpAQCAtNDgxLDYgKzUwMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBU YWJsZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKIAorCS8qCisJICogTWFyayB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uIHNv IGl0IGNhbiBiZSByZXN0b3JlZCBsYXRlcgorCSAqLworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfbWFy a3BvcykgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKgorCSAqIFJlc3RvcmUgYSBwcmV2aW91 c2x5IG1hcmtlZCBzY2FuIHBvc2l0aW9uCisJICovCisJdm9pZAkJKCppbmRleF9mZXRjaF9yZXN0 cnBvcykgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBD YWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxl cwogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTI3NCw2ICsxMzA2LDI4IEBAIHRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5oZWFwUmVsYXRpb24tPnJk X3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogfQogCisvKgorICogTWFyayB0aGUg Y3VycmVudCBzY2FuIHBvc2l0aW9uIHNvIGl0IGNhbiBiZSByZXN0b3JlZCBsYXRlcgorICovCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2ZldGNoX21hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJl bGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9tYXJrcG9zKHNjYW4pOworfQorCisvKgor ICogUmVzdG9yZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNj YW4pCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRp b24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc3RycG9zKHNjYW4pOworfQorCiAvKgogICog UmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2ggaGVsZCBpbiB0aGUg c2NhbidzIHVuZGVybHlpbmcKICAqIEluZGV4RmV0Y2hUYWJsZURhdGEuCkBAIC0xMjg2LDYgKzEz NDAsMjEgQEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2Fu LT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAor LyoKKyAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGlu IGEgYmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNo X2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJIGJvb2wgbmV3X2FsbG9jKQoreworCUFzc2Vy dChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFt LT5pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLAorCQkJCQkJCQkJCQkJCQkgICBu ZXdfYWxsb2MpOworfQorCiAvKgogICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRl eCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKICAqIHNwZWNpZmllZCBkaXJlY3Rp b24uICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5k CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDY5M2I4NzlmNy4uODU5OTFkNDQ3IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaApAQCAtMTQzNywxMiArMTQzNywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9w dEluZm8KIAlib29sCQlhbW9wdGlvbmFsa2V5OwogCWJvb2wJCWFtc2VhcmNoYXJyYXk7CiAJYm9v bAkJYW1zZWFyY2hudWxsczsKLQkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiYXRjaCAo b3IgZ2V0dHVwbGUpIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWNhbnBsYWluc2NhbjsKIAkvKiBk b2VzIEFNIGhhdmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0 bWFwOwogCWJvb2wJCWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBp bnRlcmZhY2U/ICovCisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJr PyAqLwogCWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJ LyogUmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0 aW1hdGUgbGlrZSB0aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggYmRiMzA3NTJlLi42 MmE4MjZkNGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5OCwxMCArMjk4LDEyIEBAIGJy aW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNj YW4sCiAJCS5hbXJlc2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJ LmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVu Z3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5h bWVuZHNjYW4gPSBicmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdl dC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhm NzAzM2Q2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBn aW5nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRv IHRoZSBtYWluIGluZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBk dXJpbmcgdGhlCiAJICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVz dCByZS1zZXQgdGhlIHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxp dHkgb2YgZHVwbGljYXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2Fu J3Qgc3VwcG9ydCB0aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291 bGQgbm90IGRvCi0JICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcg bGlzdCwgc2luY2UgY29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1p c3MgZW50cmllcyBlbnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0 dXBsZSBvciBhbWdldGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0 byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAq IGNvbmN1cnJlbnQgY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGly ZWx5LgogCSAqLwogCXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbnV0aWwuYwppbmRleCBmZTdiOTg0ZmYuLjcxMGYzZjljMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMKQEAgLTgyLDEwICs4MiwxMiBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0g Z2lucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3QuYwppbmRleCA4NTY1ZTIyNWIuLmE0ODRjOGIyYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAkJLmFtYmVnaW5zY2FuID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJl c2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVM TCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxM LAogCQkuYW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVu ZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5h bXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQku YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDhkOGNkMzBkYy4uMmUzMmJlMjMzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBo YXNocmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBo YXNoZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCA4ZTk2Zjkx ZTEuLjlhZjlkMTBhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CkBAIC0yNTU1LDggKzI1NTUsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBh bV9tZXRob2RzID0gewogCS5wYXJhbGxlbHNjYW5fcmVpbml0aWFsaXplID0gdGFibGVfYmxvY2tf cGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZSwKIAogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBh bV9pbmRleF9mZXRjaF9iZWdpbiwKKwkuaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCA9IGhlYXBhbV9p bmRleF9mZXRjaF9iYXRjaF9pbml0LAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2Vu ZCwKKwkuaW5kZXhfZmV0Y2hfbWFya3BvcyA9IGhlYXBhbV9pbmRleF9mZXRjaF9tYXJrcG9zLAor CS5pbmRleF9mZXRjaF9yZXN0cnBvcyA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcywKIAog CS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LAogCS50dXBsZV9pbnNlcnRfc3Bl Y3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IGZkNmY0ZmE5ZS4uOTAwODc2ZTE4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xNiwx MiArMTYsMTkgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vz cy9oZWFwYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgogI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNs dWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5h bC5oIgogCiAKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldGJhdGNoX25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworc3RhdGljIGJvb2wgaGVh cGFtX2luZGV4X29ubHlfYW1nZXRiYXRjaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CiBzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCiAJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKQEAgLTM4LDExICs0 NSwyOCBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5k ZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiByZQogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sCiAJCQkJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJ CQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRl eF9vbmx5KTsKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJCQkJCQkJ CQkJCSBib29sIGFtZ2V0YmF0Y2gpOwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5l IGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJ CQkJCQkJCQkJICAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCQkJCQkJCQkJCSAg IFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250 aW51ZSk7CisJCQkJCQkJCQkJCQkJCQkgICBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJCQkJ CQkJCQkJICAgYm9vbCBhbWdldGJhdGNoKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSBJdGVtUG9pbnRlciBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgKmFsbF92aXNpYmxlKTsKK3N0YXRpYyBpbmxpbmUgSXRl bVBvaW50ZXIgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNj YW4sCisJCQkJCQkJCQkJCQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJ CQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJICBJbmRleFNj YW5CYXRjaCBzY2FuQmF0Y2gsCisJCQkJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqc2Nh blBvcywKKwkJCQkJCQkJCQkJCQkJICBib29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgdm9pZCBo ZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIEluZGV4U2Nh bkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJCQkgIEhlYXBCYXRjaERhdGEgKmhiYXRjaCwKKwkJCQkJ CQkJCQkJICBCYXRjaFJpbmdJdGVtUG9zICpwb3MpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq IEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCkBAIC01NCwyNyArNzgsOTAgQEAgaGVh cGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQog ewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNo SGVhcERhdGEpOwogCisJaHNjYW4tPnhzX2Jhc2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElH TihzaXplb2YoSGVhcEJhdGNoRGF0YSkpOworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVt X3NpemUgPSBzaXplb2YodWludDgpOyAvKiB2aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLwogCWhzY2Fu LT54c19iYXNlLmZsYWdzID0gZmxhZ3M7Ci0JaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVy OworCisJLyogQ3VycmVudCBoZWFwIGJsb2NrIHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c19j YnVmID09IEludmFsaWRCdWZmZXIpOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0JaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKworCS8qIFZNIHJlbGF0 ZWQgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4tPnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIp OworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKIAkvKiBSZXNvbHZlIHdoaWNoIGdldG5leHRf c2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwotCWlmIChzY2FuLT54 c193YW50X2l0dXApCi0JCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5 X2FtZ2V0dHVwbGVfbmV4dDsKKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt Z2V0YmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggaW5kZXggQU0gKi8KKwkJaWYg KHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9p bmRleF9vbmx5X2FtZ2V0YmF0Y2hfbmV4dDsKKwkJZWxzZQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9z bG90ID0gaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0YmF0Y2hfbmV4dDsKKworCQkvKiBTZXQgdXAg c2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyIGluIHBhc3NpbmcgKi8KKwkJdGFibGVhbV91dGlsX2Jh dGNoc2Nhbl9pbml0KHNjYW4pOworCX0KIAllbHNlCi0JCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9 IGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldHR1cGxlX25leHQ7CisJeworCQkvKiBhbWdldHR1cGxl IGluZGV4IEFNICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQlzY2FuLT54c19nZXRu ZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV9hbWdldHR1cGxlX25leHQ7CisJCWVsc2UKKwkJ CXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldHR1cGxlX25l eHQ7CisJfQogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KIAorLyoKKyAqIEluaXRpYWxp emUgdGhlIGhlYXAgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKEhlYXBCYXRjaERh dGEpLgorICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcg b3IgcmVjeWNsZWQgYmF0Y2guCisgKi8KK3ZvaWQKK2hlYXBhbV9pbmRleF9mZXRjaF9iYXRjaF9p bml0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJICBi b29sIG5ld19hbGxvYykKK3sKKwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2Rh dGEoc2NhbiwgYmF0Y2gpOworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCWlmIChu ZXdfYWxsb2MpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgdmlzSW5mbyBwb2ludGVyIGlzIHN0b3Jl ZCBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgcGFsbG9jJ2QKKwkJCSAqIHNwYWNlLCBpbiB0aGUg Zml4ZWQtc2l6ZWQgdGFibGUgQU0gb3BhcXVlIGFyZWEuICB2aXNJbmZvIHBvaW50cworCQkJICog dG8ganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlLXNpemVkIGl0ZW1zW21heGl0ZW1z YmF0Y2hdCisJCQkgKiBhcnJheSAodG8gYSBzcGFjZSB0aGF0IGlzIGFsc28gc2l6ZWQgYWNjb3Jk aW5nIHRvIHdoYXRldmVyIHRoZQorCQkJICogaW5kZXggQU0gc2V0IG1heGl0ZW1zYmF0Y2ggdG8p LgorCQkJICovCisJCQlTaXplCQlpdGVtc0VuZDsKKworCQkJaXRlbXNFbmQgPSBNQVhBTElHTihv ZmZzZXRvZihJbmRleFNjYW5CYXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCQkJCXNpemVvZihCYXRj aE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWhiYXRjaC0+dmlzSW5m byA9ICh1aW50OCAqKSAoKGNoYXIgKikgYmF0Y2ggKyBpdGVtc0VuZCk7CisJCX0KKworCQkvKiBD bGVhciB2aXNpYmlsaXR5IGZsYWdzIChuZWVkZWQgZm9yIGJvdGggbmV3IGFuZCByZWN5Y2xlZCBi YXRjaGVzKSAqLworCQltZW1zZXQoaGJhdGNoLT52aXNJbmZvLCAwLCBzY2FuLT5tYXhpdGVtc2Jh dGNoKTsKKwl9CisJZWxzZQorCXsKKwkJaGJhdGNoLT52aXNJbmZvID0gTlVMTDsKKwl9Cit9CisK IHZvaWQKIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJ SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+ eHNfaGVhcGZldGNoOwogCi0JLyogUmVzZXRzIGFyZSBhIG5vLW9wICovCi0JKHZvaWQpIGhzY2Fu OworCS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9v a3VwcyAqLworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CisKKwkvKiBSZXNldCBiYXRjaCByaW5n IGJ1ZmZlciBzdGF0ZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1fdXRp bF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgZmFsc2UpOwogCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkg YXZvaWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4K QEAgLTk2LDkgKzE4MywzOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxlYXNl QnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwkvKiBGcmVlIGFsbCBiYXRjaCByZWxhdGVk IHJlc291cmNlcyAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1fdXRpbF9i YXRjaHNjYW5fZW5kKHNjYW4pOworCiAJcGZyZWUoaHNjYW4pOwogfQogCisvKgorICogU2F2ZSBi YXRjaCByaW5nIGJ1ZmZlcidzIGN1cnJlbnQgc2NhblBvcyBhcyBpdHMgbWFya1BvcworICovCit2 b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ QXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CisKKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21h cmtfcG9zKHNjYW4pOworfQorCisvKgorICogUmVzdG9yZSBiYXRjaCByaW5nIGJ1ZmZlcidzIG1h cmtQb3MgaW50byBpdHMgc2NhblBvcworICovCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKworCUFzc2VydChz Y2FuLT51c2ViYXRjaHJpbmcpOworCisJKHZvaWQpIGhzY2FuOworCisJdGFibGVhbV91dGlsX2Jh dGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKK30KKwogLyoKICAqCWhlYXBfaG90X3NlYXJjaF9i dWZmZXIJLSBzZWFyY2ggSE9UIGNoYWluIGZvciB0dXBsZSBzYXRpc2Z5aW5nIHNuYXBzaG90CiAg KgpAQCAtMjk5LDE2ICs0MTYsNDAgQEAgaGVhcGFtX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsIEl0 ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3QsCiAJcmV0dXJuIGZvdW5kOwogfQogCisv KiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0YmF0Y2gsIHBsYWluIGlu ZGV4IHNjYW4gKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9w bGFpbl9hbWdldGJhdGNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7 CisJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlB c3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7 CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNs b3QsIGZhbHNlLCB0cnVlKTsKK30KKworLyogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxi YWNrOiBhbWdldGJhdGNoLCBpbmRleC1vbmx5IHNjYW4gKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVf aG90IGJvb2wKK2hlYXBhbV9pbmRleF9vbmx5X2FtZ2V0YmF0Y2hfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2Fu LT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgdHJ1ZSk7Cit9CisKIC8qIHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBsZSwgcGxhaW4gaW5kZXggc2NhbiAqLwog c3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAogaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0dHVw bGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQlBc3NlcnQoIXNj YW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXAgJiYgIXNjYW4t PnVzZWJhdGNocmluZyk7CiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWdldHR1cGxlICE9IE5VTEwpOwogCi0JcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSk7CisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgZmFsc2UpOwogfQogCiAvKiB0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIGluZGV4LW9ubHkg c2NhbiAqLwpAQCAtMzE3LDEwICs0NTgsMTAgQEAgaGVhcGFtX2luZGV4X29ubHlfYW1nZXR0dXBs ZV9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQlBc3NlcnQoc2Nhbi0+ eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2FuLT51c2Vi YXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4s IGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSk7CisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBwZ19h dHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCkBAIC0zOTMsNyArNTM0LDcgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlX2ltcGwoUmVsYXRpb24gcmVsLAogfQogCiAvKgotICogQ29tbW9uIGlt cGxlbWVudGF0aW9uIGZvciBib3RoIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50 cy4KKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIGZvdXIgaGVhcGFtX2luZGV4Xypf Z2V0bmV4dF9zbG90IHZhcmlhbnRzLgogICoKICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1 cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcwogICogZm91 bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmll ZCBzbG90LgpAQCAtNDAyLDEyICs1NDMsMTMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2lt cGwoUmVsYXRpb24gcmVsLAogICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5 IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCiAgKiB0aHJvdWdoIGluZGV4 X2VuZHNjYW4pLgogICoKLSAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUt dGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKLSAqIGFsbG93aW5nIHRoZSBjb21waWxl ciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKiBUaGUgaW5kZXhf b25seSBhbmQgYW1nZXRiYXRjaCBwYXJhbWV0ZXJzIGFyZSBjb21waWxlLXRpbWUgY29uc3RhbnRz IGF0IGVhY2gKKyAqIGNhbGwgc2l0ZSwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxp emUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudDoKICAqLwogc3RhdGljIHBnX2F0dHJpYnV0ZV9h bHdheXNfaW5saW5lIGJvb2wKIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QsIGJvb2wgaW5kZXhfb25seSkKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJv b2wgaW5kZXhfb25seSwKKwkJCQkJCSAgYm9vbCBhbWdldGJhdGNoKQogewogCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRj aDsKIAlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CkBA IC00MjEsMTQgKzU2MywyMCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCWlmICghKmhlYXBfY29udGludWUp CiAJCXsKIAkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9 IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisJCQlpZiAoYW1nZXRiYXRjaCkK KwkJCQl0aWQgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKHNjYW4sIGhzY2Fu LAorCQkJCQkJCQkJCQkJCQkgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgaW5kZXhfb25seSA/ CisJCQkJCQkJCQkJCQkJCSAmYWxsX3Zpc2libGUgOiBOVUxMKTsKKwkJCWVsc2UKKwkJCQl0aWQg PSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwogCiAJCQkvKiBJZiB3ZSdyZSBv dXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwogCQkJaWYgKHRpZCA9PSBOVUxMKQog CQkJCWJyZWFrOwogCi0JCQkvKiBGb3IgaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2li aWxpdHkgbWFwICovCi0JCQlpZiAoaW5kZXhfb25seSkKKwkJCS8qIEZvciBub24tYmF0Y2ggaW5k ZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCisJCQlpZiAoaW5kZXhf b25seSAmJiAhYW1nZXRiYXRjaCkKIAkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNj YW4tPmhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKSwKIAkJCQkJCQkJCQkJICZoc2Nhbi0+eHNfdm1idWZmZXIpOwpAQCAtNDUzLDcgKzYwMSw3 IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRj aGVzKys7CiAKIAkJCQlpZiAoIWhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLCBz bG90LAotCQkJCQkJCQkJCQkgaGVhcF9jb250aW51ZSkpCisJCQkJCQkJCQkJCSBoZWFwX2NvbnRp bnVlLCBhbWdldGJhdGNoKSkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJCSAqIE5vIHZpc2libGUgdHVw bGUuICBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1pdApAQCAtNDg1LDcgKzYzMyw3 IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2 aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQogCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMg Z29vZCBlbm91Z2guCiAJCQkJICovCi0JCQkJQXNzZXJ0KCEoKmhlYXBfY29udGludWUgJiYgSXNN VkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQkJQXNzZXJ0KCEoKmhlYXBfY29u dGludWUgJiYgc2Nhbi0+TVZDQ1NjYW4pKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTUxMiw3 ICs2NjAsOCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgKiBlbnRyeS4gIElmIHdlIGRvbid0IGZpbmQg YW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZQogCQkJICogbmV4dCBUSUQgZnJvbSB0 aGUgaW5kZXguCiAJCQkgKi8KLQkJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBo c2Nhbiwgc2xvdCwgaGVhcF9jb250aW51ZSkpCisJCQlpZiAoaGVhcGFtX2luZGV4X2ZldGNoX2hl YXAoc2NhbiwgaHNjYW4sIHNsb3QsIGhlYXBfY29udGludWUsCisJCQkJCQkJCQkJYW1nZXRiYXRj aCkpCiAJCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CkBAIC01MzQsNyArNjgzLDggQEAgaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogaGVh cGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERh dGEgKmhzY2FuLAotCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmhlYXBfY29udGlu dWUpCisJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVhcF9jb250aW51ZSwKKwkJ CQkJCWJvb2wgYW1nZXRiYXRjaCkKIHsKIAlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwogCWJvb2wJ CWZvdW5kOwpAQCAtNTQ4LDE0ICs2OTgsMzIyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkJcGdzdGF0X2Nv dW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CiAKIAkvKgotCSAqIElmIHdlIHNj YW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwg aW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0 YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0 bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgotCSAqIHJlY292ZXJ5IGJlY2F1 c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgotCSAqIFJl bGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFp biBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIu ICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xh dGUKKwkgKiBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhT Y2FuKCkuCiAJICovCiAJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwl7CisJCWlmIChhbWdldGJhdGNoKQorCQl7 CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJdGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW0oc2Nh bik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGVsbCBhbWdldHR1cGxlLWJhc2Vk IGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRAorCQkJICogKHRoaXMgd2ls bCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dCBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkKKwkJ CSAqLworCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOworCQl9CisJfQogCiAJ cmV0dXJuIGZvdW5kOwogfQorCisvKgorICogR2V0IG5leHQgVElEIGZyb20gYmF0Y2ggcmluZyBi dWZmZXIsIG1vdmluZyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKiBBbHNvIHNldHMg KmFsbF92aXNpYmxlIGZvciBpdGVtIHdoZW4gY2FsbGVyIHBhc3NlcyBhIG5vbi1OVUxMIGFyZy4K KyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFw YW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s IGJvb2wgKmFsbF92aXNpYmxlKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNo cmluZ2J1Zi0+c2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBOVUxMOworCWJv b2wJCWhhZEV4aXN0aW5nU2NhbkJhdGNoOworCisJQXNzZXJ0KCFzY2FuUG9zLT52YWxpZCB8fCBi YXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJQXNzZXJ0KHNjYW5Q b3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CisJQXNzZXJ0 KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCS8qCisJICog Q2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0byBy ZXR1cm4gdGhlIG5leHQKKwkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZyb20K KwkgKi8KKwloYWRFeGlzdGluZ1NjYW5CYXRjaCA9IHNjYW5Qb3MtPnZhbGlkOworCWlmIChzY2Fu UG9zLT52YWxpZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRj aCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAgV2Ug cmVseSBvbiB0aGF0IGhlcmUuCisJCSAqLworCQlwZ19hc3N1bWUoYmF0Y2hyaW5nYnVmLT5oZWFk QmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJCWlmIChpbmRleF9zY2FuX3Bvc19hZHZhbmNl KGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKSkKKwkJCXJldHVybiBoZWFwYW1faW5kZXhf cmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkg ICBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7CisJfQor CisJLyoKKwkgKiBFaXRoZXIgcmFuIG91dCBvZiBpdGVtcyBmcm9tIG91ciBleGlzdGluZyBzY2Fu QmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVuCisJICogbG9hZGVkIHlldCAoYmVjYXVzZSB0aGlzIGlz IHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2NhbikuCisJICogVHJ5IHRvIGFk dmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBuZXh0IGJhdGNoIChvciBnZXQgdGhlIGZpcnN0IGJhdGNo KS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChzY2Fu LCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKworCWlmICgh c2NhbkJhdGNoKQorCXsKKwkJLyoKKwkJICogV2UncmUgZG9uZTsgbm8gbW9yZSBiYXRjaGVzIGlu IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgorCQkgKgorCQkgKiBOb3RlOiBzY2FuUG9zIGlz IGdlbmVyYWxseSBzdGlsbCB2YWxpZCBhdCB0aGlzIHBvaW50LiAgVGhlIHNjYW4KKwkJICogbWln aHQgc3RpbGwgYmFjayB1cCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgorCQkgKi8KKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyoKKwkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24g c2NhblBvcyB0byB0aGUgc3RhcnQgb2YgbmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWluZGV4 X3NjYW5fcG9zX25leHRiYXRjaChkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNz ZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7 CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgaGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1 ZmZlciAoZXhjZXB0IHdoZW4gdGhpcyBuZXcKKwkgKiBzY2FuQmF0Y2ggaXMgb3VyIG9ubHkgb25l KQorCSAqLworCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCkKKwl7CisJCUluZGV4U2NhbkJhdGNo IGhlYWRCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRjaHJp bmdidWYtPmhlYWRCYXRjaCk7CisKKwkJQXNzZXJ0KGhlYWRCYXRjaCAhPSBzY2FuQmF0Y2gpOwor CQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOworCisJ CS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJr QmF0Y2gpICovCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisK KwkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdz IG1hcmtCYXRjaCkgKi8KKwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKiBJ biBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVyJ3MgaGVh ZEJhdGNoICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJh dGNoKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhz Y2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLCBhbGxfdmlz aWJsZSk7Cit9CisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IHNjYW5Qb3Mvc2NhbkJhdGNoIGl0 ZW0ncyBUSUQgaW4gc2NhbidzIHhzX2hlYXB0aWQsIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0 byB0aGF0IFRJRC4gIFdoZW4gYWxsX3Zpc2libGUgaXNuJ3QgTlVMTCAoZHVyaW5nIGFuCisgKiBp bmRleC1vbmx5IHNjYW4pLCBhbHNvIHNldHMgaXRlbSdzIHZpc2liaWxpdHkgc3RhdHVzIGluICph bGxfdmlzaWJsZS4KKyAqCisgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIGhl bHBlciBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2lu ZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4sCisJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJ bmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Q b3MsCisJCQkJCQkJCWJvb2wgKmFsbF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRj aDsKKworCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgMSk7 CisKKwkvKiBTZXQgeHNfaGVhcHRpZCwgd2hpY2ggY2FsbGVyIChhbmQgY29yZSBleGVjdXRvcikg d2lsbCBuZWVkICovCisJc2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBv cy0+aXRlbV0udGFibGVUaWQ7CisKKwlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKKwl7CisJCS8q CisJCSAqIFBsYWluIGluZGV4IHNjYW4uCisJCSAqLworCQlBc3NlcnQoIXNjYW4tPnhzX3dhbnRf aXR1cCk7CisJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKgorCSAqIEluZGV4 LW9ubHkgc2Nhbi4KKwkgKgorCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGNhbGxlciBhbHNv IG5lZWRzLgorCSAqLworCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCXNjYW4tPnhzX2l0 dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2Nh bkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNl dCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3Nz aWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVtcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHNjYW4sIHNj YW5CYXRjaCk7CisJaWYgKCEoaGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9C QVRDSF9WSVNfQ0hFQ0tFRCkpCisJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShz Y2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCSAgc2NhblBvcyk7 CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2libGUgZm9yIGNhbGxlciAqLworCSphbGxfdmlz aWJsZSA9CisJCShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJ U19BTExfVklTSUJMRSkgIT0gMDsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKwor LyoKKyAqIE9idGFpbiB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIFRJRCBmcm9tIGNhbGxl cidzIGJhdGNoLgorICoKKyAqIENhbGxlZCBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleC1vbmx5IHNj YW5zLiAgV2UgYWx3YXlzIGNoZWNrIHRoZSB2aXNpYmlsaXR5CisgKiBvZiBjYWxsZXIncyBpdGVt IChhbiBvZmZzZXQgaW50byBjYWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkuICBXZSBtaWdo dAorICogYWxzbyBzZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBvdGhlciBpdGVtcyBmcm9tIGNhbGxl cidzIGJhdGNoIG1vcmUKKyAqIHByb2FjdGl2ZWx5IHdoZW4gdGhhdCBtYWtlcyBzZW5zZS4KKyAq CisgKiBXZSBrZWVwIHR3byBjb21wZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4gYmFsYW5jZSB3aGVu IGRldGVybWluaW5nIHdoZXRoZXIgdG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwgaXRlbXM6IHRoZSBu ZWVkIHRvIGtlZXAgdGhlIGNvc3Qgb2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNzCisgKiB1bmRlciBj b250cm9sIHdoZW4gbW9zdCBpdGVtcyB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGJ5IHRoZSBzY2Fu IGFueXdheQorICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lu cyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKKyAqIG5lZWQgdG8gdW5ndWFyZCBiYXRjaGVzIHBy b21wdGx5LgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0 ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKKyAqIHVuZ3VhcmQgaXQgYnkgY2FsbGluZyBh bXVuZ3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8KKyAqIGNvbmN1cnJl bnQgVkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3VhcmQgKHR5cGljYWxseSBhIGJ1ZmZlciBw aW4gb24gdGhlCisgKiBvcmlnaW5hdGluZyBpbmRleCBwYWdlKSBibG9ja3MgVkFDVVVNIGZyb20g YWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cAorICogbG9jayBvbiB0aGF0IHBhZ2UuICBD b3B5aW5nIHRoZSByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8gb3VyIGxvY2FsCisg KiBjYWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50IHVuc2FmZSBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmc6IGlmIGFueSBvZiB0aGVzZQorICogVElEcyBwb2ludCB0byBkZWFkIGhlYXAgdHVwbGVzLCBW QUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tCisgKiBhbWJ1bGtkZWxldGUgYW5kIG1h cmsgdGhlIHBvaW50ZWQtdG8gaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4gIFZBQ1VVTQorICog X2Nhbl8gZG8gc28gb25jZSB0aGUgYmF0Y2ggaXMgdW5ndWFyZGVkLCBidXQgdGhhdCdzIG9rYXk7 IHdlJ2xsIGJlIHdvcmtpbmcKKyAqIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBpbmZvIHRoYXQg aW5kaWNhdGVzIHRoYXQgdGhlIGRlYWQgVElEcyBhcmUgTk9UCisgKiBhbGwtdmlzaWJsZS4KKyAq CisgKiBXaGF0IGFib3V0IHRoZSBvcHBvc2l0ZSBjYXNlLCB3aGVyZSBhIHBhZ2Ugd2FzIGFsbC12 aXNpYmxlIHdoZW4gd2UgY2FjaGVkCisgKiB0aGUgVk0gYml0cyBidXQgdHVwbGVzIG9uIGl0IGFy ZSBkZWxldGVkIGFmdGVyd2FyZHM/ICBUaGF0IGlzIHNhZmUgdG9vOiBhbnkKKyAqIHR1cGxlIHRo YXQgd2FzIHZpc2libGUgdG8gYWxsIHdoZW4gd2UgcmVhZCB0aGUgVk0gbXVzdCBhbHNvIGJlIHZp c2libGUgdG8KKyAqIG91ciBNVkNDIHNuYXBzaG90LCBzbyBpdCBpcyBjb3JyZWN0IHRvIHNraXAg dGhlIGhlYXAgZmV0Y2ggZm9yIHRob3NlIFRJRHMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwYW1f aW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgSGVhcEJhdGNo RGF0YSAqaGJhdGNoLAorCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19o ZWFwZmV0Y2g7CisJaW50CQkJcG9zSXRlbSA9IHBvcy0+aXRlbTsKKwlib29sCQlhbGxiYXRjaGl0 ZW1zdmlzaWJsZTsKKwlCbG9ja051bWJlciBjdXJ2bWhlYXBibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKKwl1aW50OAkJY3Vydm1oZWFwYmxrZmxhZ3MgPSAwOworCisJQXNzZXJ0KGhiYXRjaCA9 PSBoZWFwX2JhdGNoX2RhdGEoc2NhbiwgYmF0Y2gpKTsKKworCS8qCisJICogVGhlIGJhdGNoIG11 c3Qgc3RpbGwgYmUgZ3VhcmRlZCB3aGVuZXZlciB3ZSdyZSBjYWxsZWQuCisJICoKKwkgKiBhbXVu Z3VhcmRiYXRjaCBjYW4ndCBiZSBjYWxsZWQgdW50aWwgd2UndmUgYWxyZWFkeSBzZXQgX2V2ZXJ5 XyBiYXRjaAorCSAqIGl0ZW0ncyB2aXNJbmZvW10gc3RhdHVzLCBidXQgaWYgd2UndmUgYWxyZWFk eSBkb25lIHNvIGZvciB0aGlzIGJhdGNoCisJICogdGhlbiBpdCBzaG91bGRuJ3QgZXZlciBnZXQg cGFzc2VkIHRvIHVzIGFnYWluIGJ5IHNvbWUgc3Vic2VxdWVudCBjYWxsLgorCSAqIChUaGlzIHJl bGllcyBvbiBpbmRleC1vbmx5IHNjYW5zIGFsd2F5cyBiZWluZyAhYmF0Y2hJbW1lZGlhdGVVbmd1 YXJkLikKKwkgKi8KKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCAmJiAhc2Nhbi0+YmF0Y2hJbW1l ZGlhdGVVbmd1YXJkKTsKKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5n ZSBvZiBpdGVtcywgaW4gc2NhbiBvcmRlci4KKwkgKgorCSAqIE5vdGU6IHZpc2liaWxpdHltYXBf Z2V0X3N0YXR1cyBkb2VzIG5vdCBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsCisJICog c28gdGhlIHJlc3VsdCBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIFNlZSB0aGUgIk1lbW9yeSBv cmRlcmluZworCSAqIGVmZmVjdHMiIGRpc2N1c3Npb24gYWJvdmUgdmlzaWJpbGl0eW1hcF9nZXRf c3RhdHVzIGZvciBhbiBleHBsYW5hdGlvbgorCSAqIG9mIHdoeSB0aGlzIGlzIG9rYXkuCisJICov CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWludAkJCWxh c3RTZXRJdGVtID0gTWluKGJhdGNoLT5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSArIGhz Y2FuLT54c192bV9pdGVtcyAtIDEpOworCisJCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBz ZXRJdGVtIDw9IGxhc3RTZXRJdGVtOyBzZXRJdGVtKyspCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRp ZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0udGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFw Ymxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCQl1aW50OAkJZmxhZ3M7 CisKKwkJCWlmIChoZWFwYmxrbm8gPT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJCQkJaGJhdGNo LT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3M7CisJCQkJY29udGludWU7CisJ CQl9CisKKwkJCWZsYWdzID0gSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRDsKKwkJCWlmIChWTV9BTExf VklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZl cikpCisJCQkJZmxhZ3MgfD0gSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJCWhiYXRj aC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdzID0gZmxhZ3M7CisJCQljdXJ2 bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwkJfQorCisJCWFsbGJhdGNoaXRlbXN2aXNpYmxlID0g bGFzdFNldEl0ZW0gPj0gYmF0Y2gtPmxhc3RJdGVtICYmCisJCQkocG9zSXRlbSA9PSBiYXRjaC0+ Zmlyc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEhF QVBfQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJbGFzdFNldEl0 ZW0gPSBNYXgoYmF0Y2gtPmZpcnN0SXRlbSwKKwkJCQkJCQkJCSAgcG9zSXRlbSAtIGhzY2FuLT54 c192bV9pdGVtcyArIDEpOworCisJCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVt ID49IGxhc3RTZXRJdGVtOyBzZXRJdGVtLS0pCisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZi YXRjaC0+aXRlbXNbc2V0SXRlbV0udGFibGVUaWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8g PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCQl1aW50OAkJZmxhZ3M7CisKKwkJ CWlmIChoZWFwYmxrbm8gPT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJCQkJaGJhdGNoLT52aXNJ bmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3M7CisJCQkJY29udGludWU7CisJCQl9CisK KwkJCWZsYWdzID0gSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRDsKKwkJCWlmIChWTV9BTExfVklTSUJM RShzY2FuLT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJ CQkJZmxhZ3MgfD0gSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEU7CisKKwkJCWhiYXRjaC0+dmlz SW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdzID0gZmxhZ3M7CisJCQljdXJ2bWhlYXBi bGtubyA9IGhlYXBibGtubzsKKwkJfQorCisJCWFsbGJhdGNoaXRlbXN2aXNpYmxlID0gbGFzdFNl dEl0ZW0gPD0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJKHBvc0l0ZW0gPT0gYmF0Y2gtPmxhc3RJ dGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRD SF9WSVNfQ0hFQ0tFRCkpOworCX0KKworCS8qCisJICogSXQncyBzYWZlIHRvIHVuZ3VhcmQgdGhl IGJhdGNoICh2aWEgYW11bmd1YXJkYmF0Y2gpIGFzIHNvb24gYXMgd2UndmUKKwkgKiByZXNvbHZl ZCB0aGUgdmlzaWJpbGl0eSBzdGF0dXMgb2YgYWxsIG9mIGl0cyBpdGVtcyAodW5sZXNzIHRoaXMg aXMgYQorCSAqIG5vbi1NVkNDIHNjYW4pCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXN2aXNpYmxl KQorCXsKKwkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEhFQVBf QkFUQ0hfVklTX0NIRUNLRUQpOworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5sYXN0 SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKworCQkvKgorCQkgKiBOb3RlOiBub2Rl SW5kZXhvbmx5c2Nhbi5jIG9ubHkgc3VwcG9ydHMgTVZDQyBzbmFwc2hvdHMsIGJ1dCB3ZQorCQkg KiBzdGlsbCBjb3BlIHdpdGggaW5kZXgtb25seSBzY2FuIGNhbGxlcnMgd2l0aCBvdGhlciBzbmFw c2hvdCB0eXBlcy4KKwkJICogVGhpcyBpcyBjZXJ0YWlubHkgbm90IHVuZXhwZWN0ZWQ7IHNlbGZ1 bmNzLmMgcGVyZm9ybXMgaW5kZXgtb25seQorCQkgKiBzY2FucyB0aGF0IHVzZSBTbmFwc2hvdE5v blZhY3V1bWFibGUuCisJCSAqLworCQlpZiAoc2Nhbi0+TVZDQ1NjYW4pCisJCQl0YWJsZWFtX3V0 aWxfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBFbHNlIGNoZWNr IHZpc2liaWxpdHkgZm9yIHR3aWNlIGFzIG1hbnkgaXRlbXMgbmV4dCB0aW1lLCBvciBhbGwgaXRl bXMuCisJICogV2UgY2hlY2sgYWxsIGl0ZW1zIGluIG9uZSBnbyBvbmNlIHdlJ3JlIHBhc3NlZCB0 aGUgc2NhbidzIGZpcnN0IGJhdGNoLgorCSAqLworCWVsc2UgaWYgKGhzY2FuLT54c192bV9pdGVt cyA8IChiYXRjaC0+bGFzdEl0ZW0gLSBiYXRjaC0+Zmlyc3RJdGVtKSkKKwkJaHNjYW4tPnhzX3Zt X2l0ZW1zICo9IDI7CisJZWxzZQorCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVt c2JhdGNoOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxl IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZk NjgxYjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9C SlMgPSBcCiAJYW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFt Lm8KKwlpbmRleGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikv c3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvYW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGVmYTAw NzAzMC4uYWJhOWUyYjQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1h cGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUsNiArNTUs MTEgQEAgR2V0SW5kZXhBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+ YW1yZXNjYW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBOVUxMKTsK IAorCS8qIEFzc2VydCB0aGF0IEFNIGRvZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9u IG9mIGNhbGxiYWNrcyAqLworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5V TEwgfHwgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQoKHJvdXRpbmUtPmFt Z2V0YmF0Y2ggIT0gTlVMTCkgPT0gKHJvdXRpbmUtPmFtdW5ndWFyZGJhdGNoICE9IE5VTEwpKTsK KwlBc3NlcnQocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVz ZXQgPT0gTlVMTCk7CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYwppbmRleCBhY2M5ZjNlNmEuLjE3ZWE5M2I0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKQEAgLTg5LDYgKzg5LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0g SW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2Fu LT5udW1iZXJPZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVy YnlzOworCXNjYW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0 YmF0Y2ggY2FsbGVycyAqLworCW1lbXNldCgmc2Nhbi0+YmF0Y2hjYWNoZSwgMCwgc2l6ZW9mKHNj YW4tPmJhdGNoY2FjaGUpKTsKIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBo ZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEyNiw2ICsx MjgsOSBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhz X2hpdHVwZGVzYyA9IE5VTEw7CiAKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7 CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdGFibGVf b2Zmc2V0ID0gMDsKIAlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsKIAogCXJldHVy biBzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggODY1NGFiOTg5Li4xODg3 MzUzMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMTMsNyArMTMsNyBAQAog ICogSU5URVJGQUNFIFJPVVRJTkVTCiAgKgkJaW5kZXhfb3BlbgkJLSBvcGVuIGFuIGluZGV4IHJl bGF0aW9uIGJ5IHJlbGF0aW9uIE9JRAogICoJCWluZGV4X2Nsb3NlCQktIGNsb3NlIGFuIGluZGV4 IHJlbGF0aW9uCi0gKgkJaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4 IHdpdGggYW1nZXR0dXBsZQorICoJCWluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBh biBpbmRleCB3aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoJCWluZGV4X2JlZ2luc2Nhbl9i aXRtYXAgLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldGJpdG1hcAogICoJCWlu ZGV4X3Jlc2NhbgktIHJlc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfZW5kc2Nh bgktIGVuZCBhIHNjYW4KQEAgLTI1NCw3ICsyNTQsNyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogfQogCiAvKgotICogaW5kZXhfYmVnaW5zY2FuIC0gc3Rh cnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQorICogaW5kZXhfYmVnaW5zY2Fu IC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiYXRjaC9hbWdldHR1cGxlCiAg KgogICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJsZSBsb2NrcyBvbiB0aGUgaGVhcCBh bmQgdGhlIGluZGV4LgogICovCkBAIC0zMzksNiArMzM5LDcgQEAgaW5kZXhfYmVnaW5zY2FuX2lu dGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlz Y2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNu YXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsK IAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAogCS8qCkBAIC0zNTAsNiArMzUxLDcg QEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwog CQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CiAJCXNjYW4tPnhzX2hlYXBf Y29udGludWUgPSBmYWxzZTsKKwkJc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkID0gKHNjYW4t Pk1WQ0NTY2FuICYmICFpbmRleF9vbmx5X3NjYW4pOwogCiAJCS8qIHByZXBhcmUgdG8gZmV0Y2gg aW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxl X2luZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKQEAgLTM1OCw2ICszNjAsMTQgQEAgaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKIAkJQXNzZXJ0KHNjYW4tPnhzX2dldG5leHRfc2xvdCAhPSBOVUxMKTsKIAl9 CiAKKwkvKgorCSAqIEJpdG1hcCBpbmRleCBzY2FucyBzaG91bGQgbmV2ZXIgdXNlIGEgYmF0Y2gg cmluZyBidWZmZXIgKHRob3VnaCBjYW4gdXNlCisJICogdGhlIHNjYW4ncyBiYXRjaCBjYWNoZSku ICBQbGFpbiBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkgc2NhbnMpCisJICogc2hvdWxkIG9u bHkgdXNlIGEgYmF0Y2ggcmluZyBidWZmZXIgd2l0aCBhbiBhbWdldGJhdGNoIGluZGV4IEFNLgor CSAqLworCUFzc2VydCghc2Nhbi0+eHNfaGVhcGZldGNoID8gIXNjYW4tPnVzZWJhdGNocmluZyA6 CisJCSAgIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSBz Y2FuLT51c2ViYXRjaHJpbmcpOworCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQwNSw2ICs0MTUs MTcgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJ Q0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAorCS8qCisJICogYW1nZXRiaXRtYXAg c2NhbnMgb2YgYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyBhbWdldGJhdGNoIG1ha2UgbGltaXRl ZAorCSAqIHVzZSBvZiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLiAgQ2hlY2sgZm9yIHRoYXQuCisJ ICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcgJiYgc2Nhbi0+YmF0Y2hjYWNoZVswXSAhPSBO VUxMKQorCXsKKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0 KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCQlw ZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nhbiwgc2Nhbi0+YmF0Y2hjYWNoZVswXSkpOwor CX0KKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxl IGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00MzMsMjQgKzQ1 NCwyNCBAQCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlTQ0FO X0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOworCUNIRUNLX1NDQU5f UFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtbWFya3BvcyhzY2FuKTsKKwl0YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zKHNjYW4pOwogfQog CiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2Nh biBwb3NpdGlvbgogICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwg c2NhbiBzdGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKKyAqIE5PVEU6IHRoaXMgb25seSByZXN0 b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBvZiB0aGUgdGFibGUgQU0uICBTZWUKICAq IGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KICAqCiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4g dGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBj b3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJl cyB0aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qgb25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBI T1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3Jh bnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQot ICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJn ZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5z IG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBp ZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgorICogc3RhdGUg YXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9u bHkgY3VycmVudAorICogdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2Rl TWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkKKyAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBw bGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcyBjb3VsZCBiZQorICogZml4 ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9ydGFudC4KICAqIC0t LS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZApAQCAtNDU5LDE2ICs0ODAsMTEgQEAgaW5kZXhfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc2Nh bi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCi0JLyog cmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICov Ci0JaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nh bik7Ci0KLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8K IAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhzY2FuKTsKKwl0YWJsZV9pbmRleF9mZXRjaF9yZXN0cnBv cyhzY2FuKTsKIH0KIAogLyoKQEAgLTY0MSw2ICs2NTcsNyBAQCBpbmRleF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCiAJU0NBTl9DSEVD S1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXR0dXBsZSk7CisJQXNzZXJ0KCFzY2FuLT51 c2ViYXRjaHJpbmcpOwogCiAJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hv dCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxp ZChSZWNlbnRYbWluKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmUzY2RmOGRjZAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw3MjYg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBCYXRjaC1i YXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cgaW5kZXggQU1zIHRv IHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEgc2luZ2xlCisgKiBj YWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTS4KKyAq CisgKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5k ZXggc2NhbiBvcmRlci4KKyAqCisgKiBNb3N0IGZ1bmN0aW9ucyBoZXJlIGFyZSB0YWJsZSBBTSB1 dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKSwgY2FsbGVkIGJ5CisgKiB0YWJsZSBBTXMgZHVyaW5n IGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBtYW5hZ2UgdGhlIGJhdGNoIHJpbmcKKyAq IGJ1ZmZlcidzIGxpZmVjeWNsZSBhbmQgcG9zaXRpb25hbCBzdGF0ZSwgYW5kIGhlbHAgd2l0aCBj ZXJ0YWluIGFzcGVjdHMgb2YKKyAqIHJlc291cmNlIG1hbmFnZW1lbnQuICBUaGUgdGFibGUgQU0g dXNlcyBzY2FuUG9zIChhbmQgaXRzIHNjYW5CYXRjaCBiYXRjaCkKKyAqIHRvIHJldHVybiBpdGVt cyBmcm9tIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBUaGVyZSBhcmUg YWxzbyBzb21lIGluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhhbV91dGlsXyopLCBjYWxsZWQgYnkg aW5kZXgKKyAqIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UsIHRv IGhlbHAgbWFuYWdlIHJlc291cmNlcyBsaWtlCisgKiBtZW1vcnksIGxvY2tzLCBhbmQgYnVmZmVy IHBpbnMuICBJbmRleCBBTXMgZnJlZSBhbmQgdW5sb2NrIGJhdGNoZXMgYXMKKyAqIGRlc2NyaWJl ZCBpbiBpbmRleGFtLnNnbWwuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv aW5kZXhiYXRjaC5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29t bW9uL2ludC5oIgorI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisKK3N0YXRpYyB2b2lkIGJhdGNo X2ZyZWUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJICAg Ym9vbCBhbGxvd19jYWNoZSk7CitzdGF0aWMgaW5saW5lIGJvb2wgYmF0Y2hfY2FjaGVfc3RvcmUo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitzdGF0aWMgaW50CWJh dGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CisKKy8qCisg KiBSZXNldCByaW5nIGJ1ZmZlciBhbmQgcmVsYXRlZCBwb3NpdGlvbmFsIHN0YXRlIHVzZWQgZHVy aW5nIGFuIGFtZ2V0YmF0Y2gKKyAqIGluZGV4IHNjYW4KKyAqLwordm9pZAordGFibGVhbV91dGls X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2NhbikKK3sKKwlC YXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJSW5k ZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJ bWFya0JhdGNoRnJlZWQgPSBmYWxzZTsKKworCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9 IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOworCisJLyogRW5z dXJlIGJhdGNoX2ZyZWUgd29uJ3Qgc2tpcCB0aGUgb2xkIG1hcmtCYXRjaCBpbiB0aGUgbG9vcCBi ZWxvdyAqLworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsKKworCWZvciAodWludDgg aSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo OyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZyZWVkID0g dHJ1ZTsKKworCQliYXRjaF9mcmVlKHNjYW4sIGJhdGNoLCAhZW5kc2Nhbik7CisJfQorCisJaWYg KCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0Y2gpKQorCQliYXRjaF9mcmVlKHNj YW4sIG1hcmtCYXRjaCwgIWVuZHNjYW4pOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAw OworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsKK30KKworLyoKKyAqIEZyZWUgcmVzb3Vy Y2VzIGF0IGVuZCBvZiBhIGJhdGNoIGluZGV4IHNjYW4uCisgKgorICogQ2FsbGVkIGJ5IHRhYmxl IEFNIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBlbmRpbmcsIHJpZ2h0IGJlZm9yZSB0aGUgb3duaW5n CisgKiBzY2FuIGRlc2NyaXB0b3IgZ29lcyBhd2F5LiAgQ2xlYW5zIHVwIGFsbCBiYXRjaCByZWxh dGVkIHJlc291cmNlcy4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoSW5k ZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIEZyZWUgYWxsIHJlbWFpbmluZyBsb2FkZWQgYmF0Y2hl cyAoZXZlbiBtYXJrQmF0Y2gpLCBieXBhc3NpbmcgY2FjaGUgKi8KKwl0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX3Jlc2V0KHNjYW4sIHRydWUpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9T Q0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNj YW4tPmJhdGNoY2FjaGVbaV07CisKKwkJaWYgKGNhY2hlZCA9PSBOVUxMKQorCQkJY29udGludWU7 CisKKwkJaWYgKGNhY2hlZC0+ZGVhZEl0ZW1zKQorCQkJcGZyZWUoY2FjaGVkLT5kZWFkSXRlbXMp OworCQlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgY2FjaGVkKSk7CisJfQorfQor CisvKgorICogU2V0IGEgbWFyayBmcm9tIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBDYWxsZWQg ZnJvbSB0aGUgdGFibGUgQU0ncyBpbmRleF9mZXRjaF9tYXJrcG9zIGNhbGxiYWNrLiAgU2F2ZXMg dGhlIGN1cnJlbnQKKyAqIHNjYW4gcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2ggc28gdGhh dCB0aGUgc2NhbiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcworICogcG9pbnQgbGF0ZXIsIHZpYSB0 YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcwor ICogcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRpbCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUg c2NhbiBlbmRzIChvciB1bnRpbAorICogdGhlIG1hcmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lk Cit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sK KwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJ QmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsK KwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJ bmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3Mt PmJhdGNoKTsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtC YXRjaDsKKwlib29sCQlmcmVlTWFya0JhdGNoOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsK KworCS8qCisJICogRnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSAtLSBidXQg b25seSBpZiBpdCBpc24ndCBvdXIKKwkgKiBzY2FuQmF0Y2ggKGRlZmVuc2l2ZWx5IG1ha2Ugc3Vy ZSB0aGF0IG1hcmtCYXRjaCBpc24ndCBzb21lIGxhdGVyCisJICogc3RpbGwtbmVlZGVkIGJhdGNo LCB0b28pCisJICovCisJaWYgKCFtYXJrQmF0Y2ggfHwgbWFya0JhdGNoID09IHNjYW5CYXRjaCkK Kwl7CisJCS8qIERlZmluaXRlbHkgbm8gbWFya0JhdGNoIHRoYXQgd2Ugc2hvdWxkIGZyZWUgbm93 ICovCisJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwl9CisJZWxzZSBpZiAobGlrZWx5KCFpbmRl eF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBtYXJrUG9zLT5iYXRjaCkpKQorCXsKKwkJLyogRGVm aW5pdGVseSBoYXZlIGEgbm8tbG9uZ2VyLWxvYWRlZCBtYXJrQmF0Y2ggdG8gZnJlZSAqLworCQlm cmVlTWFya0JhdGNoID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogaW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQgaW5kaWNhdGVzIHRoYXQgbWFya1Bvcy0+YmF0Y2ggaXMgbG9hZGVkLAor CQkgKiBidXQgYWZ0ZXIgdWludDggb3ZlcmZsb3cgYSBzdGFsZSBiYXRjaCBvZmZzZXQgY2FuIGFs aWFzIGEKKwkJICogY3VycmVudGx5LWxvYWRlZCByYW5nZSAoZmFsc2UgcG9zaXRpdmUpLiAgQ29u ZmlybSBieSBjaGVja2luZworCQkgKiB3aGV0aGVyIHRoZSBiYXRjaCBwb2ludGVyIGluIG1hcmtQ b3MtPmJhdGNoJ3Mgc2xvdCBzdGlsbCBtYXRjaGVzLgorCQkgKi8KKwkJZnJlZU1hcmtCYXRjaCA9 IChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSAhPSBtYXJrQmF0Y2gpOwor CX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gsIHNpbmNl IGl0IGlzbid0IGxvYWRlZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRjaHJpbmdi dWYtPm1hcmtCYXRjaCA9IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtCYXRjaCAq LworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0KKworCS8q IGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpz Y2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgor ICogUmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBDYWxsZWQgZnJvbSB0 aGUgdGFibGUgQU0ncyBpbmRleF9mZXRjaF9yZXN0cnBvcyBjYWxsYmFjay4gIFJlc3RvcmVzIHRo ZQorICogc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIHVzaW5nIHRhYmxlYW1fdXRpbF9iYXRjaHNj YW5fbWFya19wb3MgZWFybGllci4KKyAqIFRoZSBzY2FuJ3MgbWFya1BvcyBiZWNvbWVzIGl0cyBz Y2FuUG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3JlZCBhcworICogdGhlIGN1cnJlbnQg c2NhbkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hl cyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3 aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisg Ki8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNo cmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1 Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5t YXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0Jh dGNoOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg c2NhblBvcy0+YmF0Y2gpOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsKKwlBc3NlcnQoc2Nh bi0+eHNfaGVhcGZldGNoKTsKKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOworCisJaWYgKHNjYW5C YXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0 Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLworCQlBc3NlcnQoc2NhblBvcy0+YmF0 Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVt OworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0Y2ggaXMgYmVoaW5kIHNjYW5CYXRj aCwgYW5kIHNvIG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcgYnVmZmVyCisJICogYW55bW9yZS4g IFdlIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUgbWFyayB0aGUgaGFyZCB3YXk6IGJ5 CisJICogaW52YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hlcy4gIFRoaXMgaXMgc2lt aWxhciB0byB0aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGFu ZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0Y2gvaW5kZXggcGFnZSBib3VuZGFy aWVzIChzZWUgdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UpLgorCSAqCisJICogRmly c3QsIGZyZWUgYWxsIGJhdGNoZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhlIHJpbmcgYnVmZmVyLgor CSAqLworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNo cmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJQXNzZXJ0KGJhdGNoICE9IG1hcmtCYXRjaCk7 CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJ ICogTmV4dCAiYXBwZW5kIiBzdGFuZGFsb25lIG1hcmtCYXRjaCwgd2hpY2ggd2lsbCBiZWNvbWUg c2NhbkJhdGNoCisJICogKHNjYW5CYXRjaCBpcyBhbHdheXMgdGhlIHJpbmcgYnVmZmVyJ3MgaGVh ZEJhdGNoKQorCSAqLworCW1hcmtQb3MtPmJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPnNjYW5Q b3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IGJhdGNocmluZ2J1Zi0+ aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2Nh biwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdi dWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIEZpbmFsbHksIGNh bGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRlIGFueSBwcml2 YXRlCisJICogc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dy ZXNzCisJICovCisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0 KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJr QmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0Y2guZGVhZEl0ZW1zW10gbWlnaHQgYWxy ZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZCBtaWdodAorCSAqIHlldCBoYXZlIG1vcmUgZGVh ZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzIHByZXBhcmVkCisJICog Zm9yIHRoYXQuCisJICovCit9CisKKy8qCisgKiBIYW5kbGUgY3Jvc3MtYmF0Y2ggY2hhbmdlIGlu IHNjYW4gZGlyZWN0aW9uCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNIHdoZW4gaXRzIHNjYW4g Y2hhbmdlcyBkaXJlY3Rpb24gaW4gYSB3YXkgdGhhdAorICogbmVjZXNzaXRhdGVzIGJhY2tpbmcg dGhlIHNjYW4gdXAgdG8gYW4gaW5kZXggcGFnZSBvcmlnaW5hbGx5IGFzc29jaWF0ZWQKKyAqIHdp dGggYSBub3ctZnJlZWQgYmF0Y2guCisgKgorICogV2hlbiB3ZSByZXR1cm4sIGJhdGNocmluZ2J1 ZiB3aWxsIG9ubHkgY29udGFpbiBvbmUgYmF0Y2ggKHRoZSBjdXJyZW50CisgKiBoZWFkQmF0Y2gv c2NhbkJhdGNoKSBhbmQgd2lsbCBsb29rIGFzIGlmIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24gaGFk IGJlZW4KKyAqIHVzZWQgZnJvbSB0aGUgc3RhcnQuICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5IHBh c3MgdGhpcyBiYXRjaCB0byBhbWdldGJhdGNoCisgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2gg Y29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhpcworICogYXBwcm9hY2gg aXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZv ciB3aGF0CisgKiBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICov Cit2b2lkCit0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNj YW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5n YnVmOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaDsKKworCS8qCisJICogUmVsZWFzZSBiYXRj aGVzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgInRhaWwiIGJhdGNoLCB3b3JraW5nCisJICog YmFja3dhcmRzIHVudGlsIHRoZSBjdXJyZW50IGhlYWQgYmF0Y2ggKHdoaWNoIGlzIGFsc28gdGhl IGN1cnJlbnQKKwkgKiBzY2FuQmF0Y2gpIGlzIHRoZSBvbmx5IGJhdGNoIGhhc24ndCBiZWVuIGZy ZWVkCisJICovCisJd2hpbGUgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAxKQorCXsK KwkJdWludDgJCXRhaWxpZHggPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDE7CisJCUluZGV4 U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHRhaWxpZHgpOworCisJCUFz c2VydCh0YWlsaWR4ICE9IGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCk7CisKKwkJdGFibGVh bV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgdGFpbCk7CisJCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo LS07CisJfQorCisJLyogc2NhbkJhdGNoIGlzIG5vdyB0aGUgb25seSBiYXRjaCBzdGlsbCBsb2Fk ZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zLmJhdGNoKTsKKwlzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCS8qCisJICogRmxpcCBzY2FuQmF0Y2gncyBzY2FuIGRp cmVjdGlvbiB0byByZWZsZWN0IHRoZSByZXZlcnNhbC4gIEFsc28gcmVzZXQKKwkgKiBhbnkgaW5k ZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuIHByb2dyZXNzLgorCSAq LworCXNjYW5CYXRjaC0+ZGlyID0gLXNjYW5CYXRjaC0+ZGlyOworCWlmIChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtcG9zcmVzZXQoc2Nhbiwgc2NhbkJhdGNoKTsKK30KKworLyoKKyAqIFJlY29yZCB0 aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhl IGN1cnJlbnQgc2NhbkJhdGNoL3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGluCisgKiBzY2FuQmF0 Y2gncyBkZWFkSXRlbXMgYXJyYXkuICBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3aWxsIGxhdGVy IGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNoIGlzIGZyZWVkLgor ICovCit2b2lkCit0YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNj YW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYu c2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCWlmIChzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxM KQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0 ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gtPm51bURlYWQgPCBzY2FuLT5tYXhpdGVtc2JhdGNo KQorCQlzY2FuQmF0Y2gtPmRlYWRJdGVtc1tzY2FuQmF0Y2gtPm51bURlYWQrK10gPSBzY2FuUG9z LT5pdGVtOworfQorCisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEg YmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4IHNjYW4gaW1w bGVtZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNoIGFuZCB3aXNo ZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFdlIGNhbGwgYW11bmd1YXJkYmF0 Y2ggdG8gZHJvcCB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGUuZy4gYnVmZmVyCisgKiBw aW4pIHdoZW4gaXQgaGFzbid0IGJlZW4gZHJvcHBlZCB5ZXQuICBGb3IgcGxhaW4gTVZDQyBzY2Fu cyAod2hlcmUKKyAqIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQpLCB0aGUgaW50ZXJsb2Nr IHdhcyBhbHJlYWR5IGRyb3BwZWQgZWFnZXJseQorICogaW4gaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jaywgc28gd2Ugc2tpcCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbCBoZXJlLgorICogSW5kZXgt b25seSBzY2FucyBtdXN0IGRlbGF5IGRyb3BwaW5nIHRoZSBpbnRlcmxvY2sgdW50aWwgdmlzaWJp bGl0eSBpcworICogcmVzb2x2ZWQgZm9yIGFsbCBpdGVtcyBpbiB0aGUgYmF0Y2gsIHNvIGFtdW5n dWFyZGJhdGNoIG1heSBzdGlsbCBuZWVkIHRvCisgKiBhY3QgaGVyZS4gIEZvciBub24tTVZDQyBz bmFwc2hvdCBzY2FucywgdGhlIGludGVybG9jayBpcyBhbHdheXMgaGVsZAorICogdW50aWwgYW11 bmd1YXJkYmF0Y2ggZHJvcHMgaXQgaGVyZSAtLSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdpbGxp bmcgdG8KKyAqIHVuZ3VhcmQgYSBub24tTVZDQyBzY2FuJ3MgYmF0Y2guCisgKgorICogV2hlbiB0 aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURlYWQgPiAwKSBhbmQgdGhlIGluZGV4IEFNIHBy b3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBjYWxsIGl0IHRvIHNl dCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4CisgKiBwYWdlLiAgV2UgYWx3YXlzIHJlY3ljbGUg dGhlIGJhdGNoIG1lbW9yeSB2aWEgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICog Tm90ZTogQ2FsbGluZyBoZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNocmluZ2J1Zi5tYXJr QmF0Y2ggaXMgYSBuby1vcC4KKyAqIENhbGxlcnMgdGhhdCBkb24ndCB3YW50IHRoaXMgc2hvdWxk IHNldCBiYXRjaHJpbmdidWYubWFya0JhdGNoIHRvIE5VTEwKKyAqIGJlZm9yZSBjYWxsaW5nIHVz LiAgTm90ZSB0aGF0IG1hcmtCYXRjaCBoYXMgdG8gYmUgZXhwbGljaXRseSBmcmVlZC4KKyAqLwor dm9pZAordGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBQYXNzIHRocm91Z2ggdG8gaW1wbGVtZW50YXRpb24gZnVu Y3Rpb24sIHdpdGggYWxsb3dfY2FjaGU9dHJ1ZSAqLworCWJhdGNoX2ZyZWUoc2NhbiwgYmF0Y2gs IHRydWUpOworfQorCisvKgorICogRnJlZSBhIGJhdGNoLCBvcHRpb25hbGx5IGNhY2hpbmcgaXQg Zm9yIHJldXNlLgorICoKKyAqIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGltcGxlbWVudGF0aW9u IGZ1bmN0aW9uLiAgV2Ugc3BsaXQgb3V0IHRoZQorICogaW1wbGVtZW50YXRpb24gbGlrZSB0aGlz IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBnaXZlIGV4dGVybmFsIHRhYmxlIEFNCisgKiBjYWxs ZXJzIHRoZSBvcHRpb24gb2YgcGFzc2luZyBhbGxvd19jYWNoZT1mYWxzZS4KKyAqCisgKiBXaGVu IGFsbG93X2NhY2hlIGlzIHRydWUsIHdlIHRyeSB0byBzdG9yZSB0aGUgYmF0Y2ggaW4gdGhlIHNj YW4ncyBiYXRjaAorICogY2FjaGUgZm9yIGxhdGVyIHJldXNlLiAgV2hlbiBhbGxvd19jYWNoZSBp cyBmYWxzZSAodHlwaWNhbGx5IGJlY2F1c2UgdGhlCisgKiBzY2FuIGlzIHNodXR0aW5nIGRvd24p LCB3ZSBwZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggdW5jb25kaXRpb25hbGx5LgorICovCitzdGF0 aWMgdm9pZAorYmF0Y2hfZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoLCBib29sIGFsbG93X2NhY2hlKQoreworCUFzc2VydCghKHNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZCAmJiBiYXRjaC0+aXNHdWFyZGVkKSk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQg fHwgc2Nhbi0+TVZDQ1NjYW4pOworCisJLyogZG9uJ3QgZnJlZSBjYWxsZXIncyBiYXRjaCBpZiBp dCBpcyBzY2FuJ3MgY3VycmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+YmF0 Y2hyaW5nYnVmLm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyogRHJvcCBUSUQgcmVjeWNsaW5n IGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2ggYXMgbmVlZGVkICovCisJaWYgKCFzY2FuLT5i YXRjaEltbWVkaWF0ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3VhcmRlZCkKKwkJdGFibGVhbV91dGls X3VuZ3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJLyoKKwkgKiBMZXQgdGhlIGluZGV4IEFN IHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4IHBhZ2UsIGlmIGFwcGxpY2FibGUuCisJICoK KwkgKiBiYXRjaC5kZWFkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4g cmV0dXJuZWQgaXRlbXMgaW4uCisJICogV2UgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1l IGl0ZW0vVElEIHR3aWNlLgorCSAqCisJICogU29ydCBhbmQgdW5pcXVlLWlmeSBkZWFkSXRlbXNb XS4gIFRoYXQgd2F5IHRoZSBpbmRleCBBTSBjYW4gc2FmZWx5CisJICogYXNzdW1lIHRoYXQgaXRl bXMgd2lsbCBhbHdheXMgYmUgaW4gdGhlaXIgb3JpZ2luYWwgaW5kZXggcGFnZSBvcmRlci4KKwkg Ki8KKwlpZiAoYmF0Y2gtPm51bURlYWQgPiAwICYmCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoICE9IE5VTEwpCisJeworCQlpZiAoYmF0Y2gtPm51bURl YWQgPiAxKQorCQl7CisJCQlxc29ydChiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwg c2l6ZW9mKGludCksCisJCQkJICBiYXRjaF9jb21wYXJlX2ludCk7CisJCQliYXRjaC0+bnVtRGVh ZCA9IHF1bmlxdWUoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQsCisJCQkJCQkJCQkg c2l6ZW9mKGludCksIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJfQorCisJCXNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkv KgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlzIGFtZ2V0YmF0Y2ggc2Nh bidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRjaGVzIGZpcnN0ICh3aGVu IGNhbGxlciByZXF1ZXN0cyBpdCkKKwkgKi8KKwlpZiAoYWxsb3dfY2FjaGUgJiYgYmF0Y2hfY2Fj aGVfc3RvcmUoc2NhbiwgYmF0Y2gpKQorCQlyZXR1cm47CisKKwkvKiBqdXN0IHBmcmVlIHRoZSBj YWxsZXIncyBiYXRjaCAocGx1cyBiYXRjaCdzIGRlYWRJdGVtcywgaWYgYW55KSAqLworCWlmIChi YXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsKKwlwZnJlZShpbmRl eF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30KKworLyoKKyAqIERyb3AgdGhlIGJh dGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJhdGNoCisgKgorICog Q2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHdoYXRldmVyIGlu dGVybG9jayB0aGUgaW5kZXgKKyAqIEFNIGhvbGRzIHRvIHByZXZlbnQgdW5zYWZlIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gKHR5cGljYWxseSBhCisgKiBidWZmZXIgcGluIG9u IHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgaW4gYmF0Y2gncyBvcGFxdWUgYXJlYSkuCisgKi8KK3Zv aWQKK3RhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZm ICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtdW5ndWFyZGJhdGNoKHNjYW4sIGJhdGNoKTsKKworCWJhdGNoLT5p c0d1YXJkZWQgPSBmYWxzZTsKK30KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIGluZGV4IHBhZ2Ug YnVmZmVyIGxvY2sKKyAqCisgKiBVbmxvY2tzIHRoZSBnaXZlbiBidWZmZXIgaW4gcHJlcGFyYXRp b24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNo LiAgUGVyZm9ybXMgZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxsZXJzCisg KiBpbiBwYXNzaW5nLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25l IG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChv ciBmb3IgYW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElE cykuCisgKiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNh ZmUgZm9yIGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZv ciB0aGVtc2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFN cyB0aGF0IGltcGxlbWVudCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdldGJpdG1hcCB0byBj b25zaXN0ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNl CisgKiB0aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVs IGNvZGUuICBXZSBkcm9wIGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJhdGNoJ3Mg cGFnZSBvbiBiZWhhbGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqCisgKiBGb3IgYW1nZXRi YXRjaCBjYWxsZXJzLCB3aGVuIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQgKHBsYWluIE1W Q0MKKyAqIHNjYW5zKSwgd2UgYWxzbyByZWxlYXNlIHRoZSBwaW4gaGVyZSAodGhlIFRJRCByZWN5 Y2xpbmcgaW50ZXJsb2NrKSwgc28KKyAqIHRoYXQgbm8gbGF0ZXIgYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2lsbCBiZSBuZWVkZWQuICBPdGhlcndpc2UgdGhlIHRhYmxlCisgKiBBTSB3aWxsIGNh bGwgYW11bmd1YXJkYmF0Y2ggbGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgaW50ZXJs b2NrLgorICoKKyAqIEluZGV4IEFNcyB3aG9zZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBpcyBu b3QganVzdCBhIGJ1ZmZlciBwaW4sIG9yIHdob3NlCisgKiBhbXVuZ3VhcmRiYXRjaCBkb2VzIG5v dCBzaW1wbHkgcmVsZWFzZSBhIHBpbiwgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlIHRoaXMKKyAq IGZ1bmN0aW9uLiAgVGhleSBjYW4gaW1wbGVtZW50IHRoZWlyIG93biBlcXVpdmFsZW50LiAgU3Vj aCBpbmRleCBBTXMgYXJlIGFsc28KKyAqIGZyZWUgdG8gdXNlIHRoZSBiYXRjaCBMU04gZmllbGQg dGhlbXNlbHZlczsgdGhlaXIgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lCisgKiBjYW4gdXNlIHRo YXQgTFNOIGluIHRoZSB1c3VhbCB3YXksIG9yIGluIHdoYXRldmVyIHdheSB0aGUgQU0gZGVlbXMg bmVjZXNzYXJ5CisgKiAoY29yZSBjb2RlIHdpbGwgbm90IHVzZSBpdCBmb3IgYW55IG90aGVyIHB1 cnBvc2UpLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2gg bXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFN ICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9 IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyog YW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhl YXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNu IHNvIHRoYXQgYW1raWxsaXRlbXNiYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4g Y29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4K KwkJICogcGxhY2UuICBJdCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBM UF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkg KgorCQkgKiBQbGFpbiBNVkNDIHNjYW5zIChiYXRjaEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVs ZWFzZSB0aGUgcGluIG5vdywKKwkJICogZHJvcHBpbmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJs b2NrIHNvIHRoYXQgbm8gYW11bmd1YXJkYmF0Y2gKKwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVk ZWQgbGF0ZXIuICBUaGUgaW5kZXggQU0gY2FsbGVyIG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBv cGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVybi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0 ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGluOyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJ CSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIGludGVybG9jayB3aGVuIHJlYWR5LgorCQkg Ki8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQorCQl7CisJCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5k IHRoZSBwaW4gKi8KKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAoaG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAq LworCQkJVW5sb2NrQnVmZmVyKGJ1Zik7CisJCX0KKworCQkvKiBJZiB3ZSByZWxlYXNlZCBidWZm ZXIgcGluLCBiYXRjaCBpcyBub3cgdW5ndWFyZGVkICovCisJCWJhdGNoLT5pc0d1YXJkZWQgPSAh c2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkOworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJp dG1hcCAobm90IGFtZ2V0YmF0Y2gpIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uID09IE5VTEwpOworCisJCS8qIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLwor CQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBu ZXcgYmF0Y2gKKyAqCisgKiBVc2VkIGJ5IGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgYW1nZXRiYXRj aCBpbnRlcmZhY2UgKGJvdGggZHVyaW5nIGFtZ2V0YmF0Y2gKKyAqIGFuZCBhbWdldGJpdG1hcCBz Y2FucykuCisgKgorICogUmV0dXJucyBJbmRleFNjYW5CYXRjaCB3aXRoIHNwYWNlIHRvIGZpdCBz Y2FuLT5tYXhpdGVtc2JhdGNoLW1hbnkKKyAqIEJhdGNoTWF0Y2hpbmdJdGVtIGVudHJpZXMuICBU aGlzIHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLCBvcgorICogYSBiYXRj aCByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZSBtYW5hZ2VkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlLiAgU2VlCisgKiBjb21tZW50cyBhYm92ZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZS4KKyAqCisgKiBIb3VzZWtlZXBpbmcgZmllbGRzIChidWYsIGtub3duRW5kQmFja3dhcmQvRm9y d2FyZCwgZmlyc3RJdGVtLCBsYXN0SXRlbSwKKyAqIG51bURlYWQsIGRlYWRJdGVtcywgY3VyclR1 cGxlcykgYXJlIGluaXRpYWxpemVkIGhlcmUuICBUaGUgdGFibGUgQU0ncworICogYmF0Y2hfaW5p dCBjYWxsYmFjayBpcyBpbnZva2VkIGhlcmUgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGUgQU0gb3Bh cXVlIGFyZWEuCisgKiBUaGUgaW5kZXggQU0gY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxs aW5nIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlCisgKiBmaWVsZHMgYW5kIHRoZSBtYXRjaGluZyBp dGVtc1tdIGFycmF5LgorICoKKyAqIE9uY2UgdGhlIGJhdGNoIGhhcyB0aGUgcmVxdWlyZWQgbWF0 Y2hpbmcgaXRlbXMsIGNhbGxlciBzaG91bGQgZ2VuZXJhbGx5CisgKiBwYXNzIGl0IHRvIGluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2ssIGFoZWFkIG9mIGl0IGJlaW5nIHJldHVybmVkIHRocm91Z2gK KyAqIGluZGV4IEFNJ3MgYW1nZXRiYXRjaCByb3V0aW5lLiAgSWYgaXQgdHVybnMgb3V0IHRoYXQg dGhlIGJhdGNoIHdvbid0IG5lZWQKKyAqIHRvIGJlIHJldHVybmVkIGxpa2UgdGhpcyAoZS5nLiwg ZHVlIHRvIHRoZSBzY2FuIGhhdmluZyBubyBtb3JlIG1hdGNoZXMpLAorICogY2FsbGVyIHNob3Vs ZCBwYXNzIGl0cyBlbXB0eS91bnVzZWQgYmF0Y2ggdG8gaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2UuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlib29sCQlu ZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1dGUgYmF0Y2hfdGFibGVf b2Zmc2V0IG9uIGZpcnN0IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVzCisJICogdGhlIHRhYmxl IEFNIGFuZCBpbmRleCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmdsZSBvZmZzZXQgdGhhdCBj YW4gYmUKKwkgKiB1c2VkIHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIChhbmQgdGhl IHRydWUgYWxsb2NhdGlvbiBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNoIHBvaW50ZXIuCisJICov CisJaWYgKHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJCShzY2FuLT5iYXRjaF9p bmRleF9vcGFxdWVfc2l6ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFwZmV0Y2ggJiYgc2Nhbi0+ eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7CisJCXVpbnQxNgkJdGFi bGVfb3BhcXVlID0gc2Nhbi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+ YmF0Y2hfb3BhcXVlX3NpemUgOiAwOworCisJCXNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9IHRh YmxlX29wYXF1ZSArCisJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsKKwl9CisKKwkv KiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRoZSBjYWNoZSAqLworCWlm IChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1ND QU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSAh PSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNoICov CisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNoY2FjaGVb aV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPmJh dGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBm cm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQg b24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJ CSAqLworCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbMF07CisJCXNjYW4tPmJhdGNoY2FjaGVb MF0gPSBOVUxMOworCX0KKworCWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJ CVNpemUJCWJhc2Vfc3o7CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6Owor CQljaGFyCSAgICpyYXc7CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2gg cG9pbnRlciAqLworCQlwcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJ LyogSW5kZXhTY2FuQmF0Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9m ZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNo aW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRh dGEgYWZ0ZXIgaXRlbXNbXTogcGVyLWl0ZW0gZGF0YSAob3duZWQgYnkgdGFibGUgQU0pLAorCQkg KiB0aGVuIGN1cnJUdXBsZXMgd29ya3NwYWNlIChvd25lZCBieSBpbmRleCBBTSwgcmVhZCBieSB0 YWJsZSBBTSkKKwkJICovCisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCkKKwkJeworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhzX2hl YXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJhaWxpbmdfc3ogKz0gTUFY QUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJ CQlzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNoX3R1 cGxlc193b3Jrc3BhY2U7CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4X3N6ICsgTUFYQUxJR04o YmFzZV9zeikgKyB0cmFpbGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRj aCA9IChJbmRleFNjYW5CYXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisKKwkJLyogU2V0IHVwIGN1 cnJUdXBsZXMgcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwKQorCQl7CisJCQlT aXplCQlpdGVtc0VuZCA9IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6ZQkJdGFibGVUcmFpbGlu ZyA9IDA7CisKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFw ZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxlVHJhaWxpbmcgPSBNQVhB TElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCQkJ CSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gKGNoYXIgKikg YmF0Y2ggKyBpdGVtc0VuZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJZWxzZQorCQkJYmF0Y2gt PmN1cnJUdXBsZXMgPSBOVUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUgZGVhZEl0 ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hlcworCQkgKiBrZWVwIHRo ZWlyIGRlYWRJdGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ ZGVhZEl0ZW1zID0gTlVMTDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9CisKKwkvKiB4c193YW50 X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nh bi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwICYmCisJ CQkgYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBp bml0aWFsaXplIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQorCQl0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdf YWxsb2MpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmtub3duRW5k QmFja3dhcmQgPSBmYWxzZTsKKwliYXRjaC0+a25vd25FbmRGb3J3YXJkID0gZmFsc2U7CisJYmF0 Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+ bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9 CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5Cisg KiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3Ig cmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBz YWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJl YWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRj aGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGlu ZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBt dXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoLCB3aGljaCBjYWxscyBo ZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlm IGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0 byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisg KiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIg c2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBk b2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisg Ki8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJewor CQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRt YXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJ ICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJ ICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nh bi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBO VUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNjYW4tPmJh dGNoY2FjaGVbMF0gPSBiYXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0Y2ggc2Nh biBjYWxsZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJLyoK KwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4n cyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAorCSAqLwor CWlmIChiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIENh Y2hlIGZ1bGw7IGp1c3QgZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlpZiAoYmF0Y2gtPmRl YWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoaW5kZXhfc2Nhbl9i YXRjaF9iYXNlKHNjYW4sIGJhdGNoKSk7Cit9CisKKy8qCisgKiBUcnkgdG8gc3RvcmUgYSBiYXRj aCBpbiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIGZy ZWUgc2xvdCB3YXMgZm91bmQsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyBmdWxsLgorICovCitzdGF0 aWMgaW5saW5lIGJvb2wKK2JhdGNoX2NhY2hlX3N0b3JlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ldID09IE5VTEwp CisJCXsKKwkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybiB0cnVlOwor CQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogcXNvcnQgY29tcGFyaXNvbiBm dW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50CitiYXRjaF9jb21wYXJlX2lu dChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50CQkJYSA9ICooKGNvbnN0 IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7CisKKwlyZXR1cm4g cGdfY21wX3MzMihhLCBiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRl eCBkYTY0Y2I1OTUuLjgzZGZhM2YyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWls ZApAQCAtNSw0ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0 ZS5jJywKICAgJ2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiAp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IGNiOTIxY2EyZS4uYTM3ODY5YjcxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtMTc5LDE4ICsxNzksMTUgQEAgaG9sZCBvbiB0byB0 aGUgcGluICh1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBsZWFmIHBhZ2UpIHVudGlsIF9hZnRl cl8KIHRoZXkncmUgZG9uZSB2aXNpdGluZyB0aGUgaGVhcCAoZm9yIFRJRHMgZnJvbSBwaW5uZWQg bGVhZiBwYWdlKSBwcmV2ZW50cwogY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgVkFDVVVNIGNh bm5vdCBnZXQgYSBjb25mbGljdGluZyBjbGVhbnVwIGxvY2sKIHVudGlsIHRoZSBpbmRleCBzY2Fu IGlzIHRvdGFsbHkgZmluaXNoZWQgcHJvY2Vzc2luZyBpdHMgbGVhZiBwYWdlLgorVGhpcyBpcyBy ZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRoZSBhbWdldGJhdGNoCitp bnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwpLgogCi1UaGlz IGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0IHdoZW5ldmVyIHBvc3Np YmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3QgaG9sZCBvbnRvIHRoZWly IHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBpbmRleCBzY2FucyBtdXN0 IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBpcwotbW9yZSBjb21wbGlj YXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBzZWN0aW9uIG9uIG1ha2lu ZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0KLU9wcG9ydHVuaXN0aWMgaW5kZXgg dHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBhZ2UtbGV2ZWwKLW1vZGlm aWNhdGlvbnMgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcyBz YWZlIGJlY2F1c2UKLXRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5n IHBsYWNlIGxhdGVyIG9uIC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBUSURzIHJlY3ljbGFibGUu ICBTZWUgYWxzbyBzaW1wbGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAotZGVsZXRpb24sIGJlbG93 LgorT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBw YWdlLWxldmVsCittb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFu IGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHF1ZXN0 aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkKK1ZBQ1VVTSBjYW4gbWFr ZSBUSURzIHJlY3ljbGFibGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVNJ3MgY2xlYW51cCBsb2Nr CitzZXJ2ZXMgdG8gcHJvdGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2FucyBmcm9tIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90ZWN0IHRoZSBCLVRyZWUg c3RydWN0dXJlIGl0c2VsZi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3QgYWx3YXlzIGhlbGQsIGFu ZCBhIHBhZ2UgY2FuIGJlIHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUgZG9lcyBob2xkIGEgcGlu IG9uIGl0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3aWxsCkBAIC00NDAsNTQg KzQzNyw2IEBAIHdoZW5ldmVyIGl0IGlzIHN1YnNlcXVlbnRseSB0YWtlbiBmcm9tIHRoZSBGU00g Zm9yIHJldXNlLiAgVGhlIGRlbGV0ZWQKIHBhZ2UncyBjb250ZW50cyB3aWxsIGJlIG92ZXJ3cml0 dGVuIGJ5IHRoZSBzcGxpdCBvcGVyYXRpb24gKGl0IHdpbGwgYmVjb21lCiB0aGUgbmV3IHJpZ2h0 IHNpYmxpbmcgcGFnZSkuCiAKLU1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIGV4cGxhaW5lZCBpbiB0 aGUgZWFybGllciBzZWN0aW9uIGFib3V0IGRlbGV0aW5nIGluZGV4IHR1cGxlcyBkdXJpbmcKLVZB Q1VVTSwgd2UgaW1wbGVtZW50IGEgbG9ja2luZyBwcm90b2NvbCB0aGF0IGFsbG93cyBpbmRpdmlk dWFsIGluZGV4IHNjYW5zCi10byBhdm9pZCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBJbmRl eCBzY2FucyBvcHQtb3V0IChhbmQgc28gZHJvcCB0aGVpcgotbGVhZiBwYWdlIHBpbiB3aGVuIHZp c2l0aW5nIHRoZSBoZWFwKSB3aGVuZXZlciBpdCdzIHNhZmUgdG8gZG8gc28sIHRob3VnaC4KLURy b3BwaW5nIHRoZSBwaW4gZWFybHkgaXMgdXNlZnVsIGJlY2F1c2UgaXQgYXZvaWRzIGJsb2NraW5n IHByb2dyZXNzIGJ5Ci1WQUNVVU0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2l0 aCBpbmRleCBzY2FucyB1c2VkIGJ5IGN1cnNvcnMsCi1zaW5jZSBpZGxlIGN1cnNvcnMgc29tZXRp bWVzIHN0b3AgZm9yIHJlbGF0aXZlbHkgbG9uZyBwZXJpb2RzIG9mIHRpbWUuICBJbgotZXh0cmVt ZSBjYXNlcywgYSBjbGllbnQgYXBwbGljYXRpb24gbWF5IGhvbGQgb24gdG8gYW4gaWRsZSBjdXJz b3JzIGZvcgotaG91cnMgb3IgZXZlbiBkYXlzLiAgQmxvY2tpbmcgVkFDVVVNIGZvciB0aGF0IGxv bmcgY291bGQgYmUgZGlzYXN0cm91cy4KLQotSW5kZXggc2NhbnMgdGhhdCBkb24ndCBob2xkIG9u IHRvIGEgYnVmZmVyIHBpbiBhcmUgcHJvdGVjdGVkIGJ5IGhvbGRpbmcgYW4KLU1WQ0Mgc25hcHNo b3QgaW5zdGVhZC4gIFRoaXMgbW9yZSBsaW1pdGVkIGludGVybG9jayBwcmV2ZW50cyB3cm9uZyBh bnN3ZXJzCi10byBxdWVyaWVzLCBidXQgaXQgZG9lcyBub3QgcHJldmVudCBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcgaXRzZWxmIChvbmx5Ci1ob2xkaW5nIG9udG8gdGhlIGxlYWYgcGFnZSBwaW4g d2hpbGUgYWNjZXNzaW5nIHRoZSBoZWFwIGVuc3VyZXMgdGhhdCkuCi0KLUluZGV4LW9ubHkgc2Nh bnMgY2FuIG5ldmVyIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiwgc2luY2UgdGhleSBhcmUgdW5hYmxl IHRvCi10b2xlcmF0ZSBoYXZpbmcgYSByZWZlcmVuY2VkIFRJRCBiZWNvbWUgcmVjeWNsYWJsZS4g IEluZGV4LW9ubHkgc2NhbnMKLXR5cGljYWxseSBqdXN0IHZpc2l0IHRoZSB2aXNpYmlsaXR5IG1h cCAobm90IHRoZSBoZWFwIHByb3BlciksIGFuZCBzbyB3aWxsCi1ub3QgcmVsaWFibHkgbm90aWNl IHRoYXQgYW55IHN0YWxlIFRJRCByZWZlcmVuY2UgKGZvciBhIFRJRCB0aGF0IHBvaW50ZWQKLXRv IGEgZGVhZC10by1hbGwgaGVhcCBpdGVtIGF0IGZpcnN0KSB3YXMgY29uY3VycmVudGx5IG1hcmtl ZCBMUF9VTlVTRUQgaW4KLXRoZSBoZWFwIGJ5IFZBQ1VVTS4gIFRoaXMgY291bGQgZWFzaWx5IGFs bG93IFZBQ1VVTSB0byBzZXQgdGhlIHdob2xlIGhlYXAKLXBhZ2UgdG8gYWxsLXZpc2libGUgaW4g dGhlIHZpc2liaWxpdHkgbWFwIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICBBbiBNVkNDCi1zbmFw c2hvdCBpcyBvbmx5IHN1ZmZpY2llbnQgdG8gYXZvaWQgcHJvYmxlbXMgZHVyaW5nIHBsYWluIGlu ZGV4IHNjYW5zCi1iZWNhdXNlIHRoZXkgbXVzdCBhY2Nlc3MgZ3JhbnVsYXIgdmlzaWJpbGl0eSBp bmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFwCi1wcm9wZXIuICBBIHBsYWluIGluZGV4IHNjYW4gd2ls bCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCi1oZWFwIChpdGVtcyB0aGF0 IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5ZXQpIGFzICJub3QKLXZp c2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVyYWxseSBjb25zaWRlcmVk IGFsbC12aXNpYmxlLgotCi1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXggdHVwbGVzIGJ5IHRoZSBr aWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlvbgotKGRlc2NyaWJlZCBpbiBmdWxsIGluIHNpbXBs ZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRlZCBmb3IKLWluZGV4IHNj YW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11c3QgYmUgY2FyZWZ1bCB0 byBhdm9pZAotTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBs aWtlIGEga25vd24tZGVhZCBpbmRleAotdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJl IHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nIGNvbmN1cnJlbnQgVElECi1yZWN5Y2xpbmcuICBJdCdz IGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24gaW5zZXJ0ZWQgYQot bmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2gg aGFzIHRoZSBzYW1lCi1vcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRv IExQX0RFQUQtc2V0IHRoaXMgbmV3LAotdW5yZWxhdGVkIGluZGV4IHR1cGxlLgotCi1XZSBoYW5k bGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3Rl ZCBpbmRleAotc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55IGNoYW5nZSB0byB0 aGUgbGVhZiBwYWdlIGF0IGFsbAotaW1wbGllcyB0aGF0IGl0IHdhcyByZWFjaGVkIGJ5IGJ0YnVs a2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwotYnVmZmVyIHBpbiB3YXMgaGVs ZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQX0RFQUQgYml0cwot b24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExTTiBoYXMgY2hhbmdlZC4g IChUaGlzIGlzIHdoeSB3ZQotaW1wbGVtZW50ICJmYWtlIiBMU05zIGZvciB1bmxvZ2dlZCBpbmRl eCByZWxhdGlvbnMuKQotCiBGYXN0cGF0aCBGb3IgSW5kZXggSW5zZXJ0aW9uCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTczNCw3ICs2ODMsNyBAQCBvZiByZWFkZXJzIGNvdWxk IHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxl dmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVy aW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVw bGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhp cyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBs ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNl cnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNl cnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4g dGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cg dHVwbGUgTFBfREVBRCBiaXRzLCBidXQKQEAgLTc1Niw5ICs3MDUsOCBAQCBub24tTVZDQyBzY2Fu cyBpcyBub3QgcmVxdWlyZWQgb24gc3RhbmRieSBub2Rlcy4gV2Ugc3RpbGwgZ2V0IGEgZnVsbAog Y2xlYW51cCBsb2NrIHdoZW4gcmVwbGF5aW5nIFZBQ1VVTSByZWNvcmRzIGR1cmluZyByZWNvdmVy eSwgYnV0IHJlY292ZXJ5CiBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgZXZlcnkgbGVhZiBwYWdlIChv bmx5IHRob3NlIGxlYWYgcGFnZXMgdGhhdCBoYXZlCiBpdGVtcyB0byBkZWxldGUpIC0tIHRoYXQn cyBzdWZmaWNpZW50IHRvIGF2b2lkIGJyZWFraW5nIGluZGV4LW9ubHkgc2NhbnMKLWR1cmluZyBy ZWNvdmVyeSAoc2VlIHNlY3Rpb24gYWJvdmUgYWJvdXQgbWFraW5nIFRJRCByZWN5Y2xpbmcgc2Fm ZSkuIFRoYXQKLWxlYXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLiAoWFhY OiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5Ci10aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVy aW5nIHJlY292ZXJ5LikKK2R1cmluZyByZWNvdmVyeS4gVGhhdCBsZWF2ZXMgY29uY2VybiBvbmx5 IGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKyhYWFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkgdGhp cyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCiAKIE1WQ0Mgc25hcHNo b3QgcGxhaW4gaW5kZXggc2NhbnMgYXJlIGFsd2F5cyBzYWZlLCBmb3IgdGhlIHNhbWUgcmVhc29u cyB0aGF0CiB0aGV5J3JlIHNhZmUgZHVyaW5nIG9yaWdpbmFsIGV4ZWN1dGlvbi4gIEhlYXBUdXBs ZVNhdGlzZmllc1RvYXN0KCkgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpp bmRleCAwNTQ3MDM4NjEuLjAwNDZjODRkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMKQEAgLTEwNjAsNiArMTA2MCw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIg YnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4g IFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBl eHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTogX2J0X2JhdGNoX3Vu bG9jayBpbiBuYnRzZWFyY2guYyAoaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayB3cmFwcGVyCisg KiBmdW5jdGlvbikgaGFzIG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBsb2NrIGluc3RydW1lbnRh dGlvbi4KKyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdl KCkgd2l0aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJl ZCBpbiBfYnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICovCkBAIC0xMTAxLDEz ICsxMTA0LDE5IEBAIF9idF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogCSAq IEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBleHBl Y3RlZCB0byBiZQogCSAqIGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAgQ2hlY2sgdGhhdCBwcm9h Y3RpdmVseS4KIAkgKi8KLQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChCdWZmZXJHZXRQ YWdlKGJ1ZiksIEJMQ0tTWik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVE KHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIoKSBhc3NlcnRzIHRoYXQg cGluIGlzIGhlbGQgYnkgdGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CiAKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAlpZiAoIVJlbGF0aW9u VXNlc0xvY2FsQnVmZmVycyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZm ZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBh Z2UsIEJMQ0tTWik7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjM5YzY2MTQ5OCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBC VFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRw YWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVu dCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBw YWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1w aXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0 IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBO ZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3Rh dGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMg Ym9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9i dF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9z dGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJ CSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3Rpbmdp dGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVP ZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNo LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVt cyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkJ CQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZv aWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1J bmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRhYmxl VGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJ CQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2No ZWNrX2NvbXBhcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTEx MSwxNSArMTExLDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5 cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2Fk IGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3Jl YWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0 Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5j dXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAg QWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0 aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+ Y3VyclBvcyBhcmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBu ZXdiYXRjaC5idWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4g IEFsc28sIG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwor ICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Yg bmV3YmF0Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBX ZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4g dGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2Fu IGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwg aXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMu CiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlm IF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRj aGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0 IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFy cmF5cykuCkBAIC0xMzEsMTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNf d2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBh bnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8K IGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoID0gQlRC YXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVl IG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIzICsxNDUsMjAgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVz ID0gc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1 cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVy IGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRu ZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0Jc28tPmN1 cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3VyclBvcy5idWYpOwot CXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0Jc28tPmN1cnJQb3Mu bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0aW5nIHNvLT5jdXJy UG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8KLQlwc3RhdGUuZGly ID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCA9 IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRC bG9ja051bWJlcihidG5ld2JhdGNoLT5idWYpOworCWJ0bmV3YmF0Y2gtPnByZXZQYWdlID0gb3Bh cXVlLT5idHBvX3ByZXY7CisJYnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4 dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3Jl UmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikg Ki8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9y ZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcikgPyBidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBidG5ld2JhdGNoLT5t b3JlTGVmdCk7CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJ LyogaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg2LDE0IEBAIF9i dF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8gYmUgcmVhZCBi eSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MubmV4 dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxf cmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gt PmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1 cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRf cGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5wcmV2UGFnZSwKKwkJCQkJCQkJIGJ0 bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHNvLT5j dXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGljYXRlTG9ja1BhZ2Uo cmVsLCBwc3RhdGUuY3VycnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAogCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtMjEyLDExICsyMTAsMTEgQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUu ZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5k ZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7 CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1T Y2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRfcGFy YWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBv cy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJ CQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzgsMjYgQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJ CQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQll bHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNl dDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgZmly c3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJ CSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOwor CQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJ CQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8K IAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkr KykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZu dW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51 bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJ CQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4 Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzNywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVS aWdodCA9IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNz ZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQb3MuZmly c3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJ bmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKQEAgLTM2 MSwxMSArMzU4LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hl Y2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVk dWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5j dXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFs c2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJ CQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5l d2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00 NjYsMjcgKzQ2MywyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVy IGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgs IG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJ CQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWlu dAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1 cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRl bUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVt cyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3Nl dHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJ ICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAg aXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1l bWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAo aW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4 LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJ CQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJ CQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxl T2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBA IC01MDIsMTIgKzQ5OSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUK IAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVM ZWZ0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2Vy dChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsK LQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28t PmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNo LT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQ ZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBAIC01MjQsNyArNTIwLDcgQEAgX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBv ZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1 cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0 dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8q CkBAIC0xMDI3LDkwICsxMDIzLDkxIEBAIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0 aWMgdm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJ CSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oSW5k ZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s CisJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0 ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQo IUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsK IAotCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zm c2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwluZXdiYXRjaC0+aXRlbXNbaXRl bUluZGV4XS50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQog CXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0t PnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28t PmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7 Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQlu ZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJ bWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3op OworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBT ZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3Qg dHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAg U2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUg c2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRl eCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0 dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBw b3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGlu Z2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3Bh Y2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJu cyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFp biB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIElu ZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwog Ci0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxl VGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJy VHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRydW5jYXRlIHBvc3Rpbmcg bGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVwc3ogPSBCVHJlZVR1cGxl R2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhBTElHTihpdHVwc3opOwot CQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0J CWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1 cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCWJhc2Ug PSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJ bWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2ZWx5IHJlZHVjZSB3b3Jr IGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+dF9pbmZvICY9IH5JTkRF WF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJ cmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0 OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCisgKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50 IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5n aXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVudAotICogcG9zdGluZyBs aXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0 LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVl IGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3NhdmVwb3N0aW5n aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s Ci0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCkKK19idF9zYXZlcG9z dGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51 bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCkK IHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5k ZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07CisJaXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5k ZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1 cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdp bmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBs ZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OworCWlmIChuZXdiYXRj aC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAj ZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4MjEsMTQgKzI4MTgs MTUgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3Vt cHRpb24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1 c2VkIHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBh Z2UuCi0JICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHBy aW1pdGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRo ZSBkaXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogVGhlIHNjYW4gZGlyZWN0aW9u IG1pZ2h0IGJlIHJldmVyc2VkIGR1cmluZyB0aGUgbmV4dCBhbWdldGJhdGNoIGNhbGwsCisJICog YnV0IG5vdCBiZWZvcmUgYSBjYWxsIHRvIGJ0cG9zcmVzZXQgdGhhdCByZXNldHMgdGhlIGFycmF5 IGtleXMgdG8gdGhlCisJICogZmlyc3QgcG9zaXRpb25zL2VsZW1lbnRzIHVzZWQgd2hlbiBzY2Fu bmluZyBpbiB0aGlzIG90aGVyIGRpcmVjdGlvbi4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2Nh biA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5l ZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJ aWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9z Y2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxlIGRv ZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjg0MSw5ICsy ODM5LDggQEAgZW5kX3RvcGxldmVsX3NjYW46CiAJICogVGhpcyBlbmRzIHRoZSBlbnRpcmUgdG9w LWxldmVsIHNjYW4gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCiAJICoKIAkgKiBOb3Rl OiBUaGUgc2NhbidzIGFycmF5cyAoaW5jbHVkaW5nIGFueSBub24tcmVxdWlyZWQgYXJyYXlzKSBh cmUgbm93IGluCi0JICogdGhlaXIgZmluYWwgcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBzY2Fu IGRpcmVjdGlvbi4gIElmIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGhhcHBlbnMgdG8gY2hhbmdl LCB0aGVuIHRoZSBhcnJheXMgd2lsbCBhbHJlYWR5IGJlIGluIHRoZWlyCi0JICogZmlyc3QgcG9z aXRpb25zIGZvciB3aGF0IHdpbGwgdGhlbiBiZSB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4K KwkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u LiAgVGhpcyBpcyBqdXN0CisJICogZGVmZW5zaXZlLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVz Y2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+ bmVlZFByaW1TY2FuID0gZmFsc2U7CS8qIC4uLmFuZCBkb24ndCBjYWxsIF9idF9maXJzdCBhZ2Fp biAqLwpAQCAtMjkxMCwxNyArMjkwNyw5IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVt ZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJLyoKIAkgKiBUaGUg YXJyYXkga2V5cyBhcmUgbm93IGV4aGF1c3RlZC4KIAkgKgotCSAqIFJlc3RvcmUgdGhlIGFycmF5 IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKLQkg KiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJh dGNoZXQgaW4gdGhlCi0JICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhv dXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNj YW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1 bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBh Z2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdl IGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAq IHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVw bGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFs aWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHll dCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCisJICogRGVm ZW5zaXZlbHkgcmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgcG9zaXRpb25zIHRoZXkgd2Vy ZSBpbgorCSAqIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZSB3ZXJlIGNhbGxlZCAoaS5lLiB0byB0aGVp ciBmaW5hbCBwb3NpdGlvbnMgZm9yCisJICogdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLgog CSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYwppbmRleCA2ZDg3MGU0ZWIuLjc3YWYwOWY0YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCkBAIC0xNjEsMTEgKzE2MSwxMyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJ T05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVn aW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0 dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2gg PSBidGdldGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGJ0a2lsbGl0ZW1zYmF0Y2gsCisJ CS5hbXVuZ3VhcmRiYXRjaCA9IGJ0dW5ndWFyZGJhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdl dGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFy a3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9z cmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2Nh biwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDEzICsyMjYsMTMgQEAgYnRp bnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8q Ci0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJ YnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4g dGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVz OworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5o ZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAgLTI0Myw0NSArMjQ1LDIwIEBAIGJ0Z2V0dHVwbGUo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2Un dmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQg aW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBz byB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGlu IHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRo ZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJ CXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJh dGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENo ZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxl LgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgot CQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBz dWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4 IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1 c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4g dGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJl ZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1p emUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3Qg Zm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0 ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1h eFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJU cmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3Vy clBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0 Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQly ZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxl LCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwg cmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVy d2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3 aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAot CXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkxLDM4ICsyNjgsNDMg QEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0p CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUlu ZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRlbVBvaW50ZXIgaGVh cFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRp b24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIg cHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBh Z2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u KSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmly c3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJ RCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0 aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCWludAkJ CWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCXRh YmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJdGJtX2FkZF90 dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7 OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFn ZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0 KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQ b3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXpl ZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7 Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAo IV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJLyoKKwkJCQkJICog X2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycworCQkJ CQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlz CisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleCA9 IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJh dGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCS8qIFNh dmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQgPSAmc28t PmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOwotCQkJCXRibV9h ZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxlVGlkID0gJmJhdGNo LT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFi bGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBAIC0zNDksOCArMzMx LDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVj dChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZL ZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9m S2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwxOSArMzQ0LDExIEBA IGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNv LT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsKIAotCXNvLT5r aWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVtS2lsbGVkID0g MDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2NhbiB3aWxsIGJl IGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBsZSB3b3Jrc3Bh Y2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0JICogc2Nhbi0+ eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2UgdGhhdCdzIHNv IGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMgPSBOVUxMOwot Ci0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0KIAlzY2FuLT5v cGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsKKwlzY2FuLT5iYXRj aF9pbmRleF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNj YW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0K QEAgLTM5MCw2NCArMzYyLDE4NSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBs b2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9i dF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3Mp OwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdl IHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUg cmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBh IGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJv cCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJh Y2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBp biB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9w cGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlu cyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBz Y2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBj eWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1F IHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0J ICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4K LQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNN VkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQ cmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRl RGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsK LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUg dHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4g YW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8g c2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0 ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5k c2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3Vy clR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2Mo QkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7 Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkg JiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5r ZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVk UHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0 ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRf cHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRp dHRvICovCiB9CiAKKy8qCisgKglidGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1z JyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitidGtpbGxpdGVtc2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXRE YXRhKHNjYW4sIGJhdGNoKTsKKwlQYWdlCQlwYWdlOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CisJ T2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlPZmZzZXROdW1iZXIgbWF4b2ZmOworCWJvb2wJCWtpbGxl ZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNu OworCisJLyogVGFibGUgQU0gc2hvdWxkIGhhdmUgYWxyZWFkeSByZWxlYXNlZCBiYXRjaCBwYWdl J3MgcGluIGJ5IG5vdyAqLworCUFzc2VydChiYXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0g X2J0X2dldGJ1ZihyZWwsIGJ0YmF0Y2gtPmN1cnJQYWdlLCBCVF9SRUFEKTsKKworCWxhdGVzdGxz biA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVz dGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQs IGdpdmUgdXAgb24gaGludGluZyAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJu OworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJb3BhcXVlID0gQlRQYWdlR2V0 T3BhcXVlKHBhZ2UpOworCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7CisJbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBi YXRjaC0+ZGVhZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gt PmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVt c1tpdGVtSW5kZXhdOworCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0 OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXgg PD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49 IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCisJ CWlmIChvZmZudW0gPCBtaW5vZmYpCisJCQljb250aW51ZTsJCQkvKiBwdXJlIHBhcmFub2lhICov CisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VH ZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVw bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisJCQlib29sCQlraWxsdHVwbGUgPSBmYWxzZTsK KworCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cGxlKSkKKwkJCXsKKwkJCQlpbnQJCQlw aSA9IGkgKyAxOworCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0 dXBsZSk7CisJCQkJaW50CQkJajsKKworCQkJCWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisr KQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihp dHVwbGUsIGopOworCisJCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVtLT50 YWJsZVRpZCkpCisJCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCisK KwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0pOworCisJCQkJCS8qCisJ CQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCisJCQkJCSAqCisJCQkJCSAq IFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhlcmUK KwkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJpbmcgdGhlIHBvc3RpbmcgbGlz dCB0dXBsZQorCQkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFw IFRJRCBpbiBuZXh0CisJCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgorCQkJCQkgKgorCQkJCQkgKiBJ Ziwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCisJCQkJ CSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKKwkJCQkJ ICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QKKwkJ CQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0 dXBsZQorCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxl ZCkuCisJCQkJCSAqLworCQkJCQlpZiAocGkgPCBiYXRjaC0+bnVtRGVhZCkKKwkJCQkJCWtpdGVt ID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW3BpKytdXTsKKwkJCQl9CisKKwkJCQkv KgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91dGVybW9zdCBsb29wJ3MgaW50 IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQgcHJvY2Vzc2luZyBkZWFkIGl0ZW1zIHRoYXQgcmVs YXRlIHRvIHRoZSBzYW1lCisJCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMg bWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQorCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRo ZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKKwkJCQkgKiB3aWxsIGZhaWwgdG8g bWF0Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKKwkJCQkgKiBUSUQg aW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKKwkJCQkg KiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCisJCQkJICovCisJCQkJaWYgKGogPT0gbnBvc3Rpbmcp CisJCQkJCWtpbGx0dXBsZSA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmIChJdGVtUG9pbnRlckVx dWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT50YWJsZVRpZCkpCisJCQkJa2lsbHR1cGxlID0g dHJ1ZTsKKworCQkJLyoKKwkJCSAqIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24n dCBhbHJlYWR5LiAgU2luY2UgdGhpcworCQkJICogaGFwcGVucyB3aGlsZSBob2xkaW5nIGEgc2hh cmVkIGJ1ZmZlciBsb2NrLCBpdCdzIHBvc3NpYmxlIHRoYXQKKwkJCSAqIG11bHRpcGxlIHByb2Nl c3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMgc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcKKwkJCSAqIHRv IG11bHRpcGxlIGZ1bGwtcGFnZSBpbWFnZXMgYmVpbmcgc2VudCB0byBXQUwgKGlmCisJCQkgKiB3 YWxfbG9nX2hpbnRzIG9yIGRhdGEgY2hlY2tzdW1zIGFyZSBlbmFibGVkKSwgd2hpY2ggaXMKKwkJ CSAqIHVuZGVzaXJhYmxlLgorCQkJICovCisJCQlpZiAoa2lsbHR1cGxlICYmICFJdGVtSWRJc0Rl YWQoaWlkKSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCQl7CisJCQkJCS8q CisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2Ug Y2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBs b2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29u dGludWluZy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYp KQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBmb3VuZCB0aGUgaXRl bS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICovCisJCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJ CQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBz ZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0p OworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYg bmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuCisJICoKKwkgKiBXaGVuZXZlciB3ZSBtYXJrIGFu eXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBCVFBfSEFTX0dBUkJB R0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuICAoTm90ZSB0aGF0IHdlCisJ ICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4gIWhlYXBrZXlzcGFjZSBpbmRl eGVzLikKKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5idHBvX2Zs YWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKKwkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0 cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9idF9yZWxidWYocmVsLCBidWYpOwor fQorCisvKgorICoJYnR1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGlu ZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3 aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQg Y29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9pZAorYnR1bmd1YXJk YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCVEJh dGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKKworCS8qIFNo b3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICov CisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+ aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoYnRiYXRjaC0+YnVmKTsKK30KKwogLyoKICAq CWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NiwxMTYgKzU0OSw2 MyBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFu eSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+ Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3Np dGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0 b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEp OwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRl eHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVs ZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJ cGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJ cGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUg cGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJr cG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSBy ZXNldCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2Fs bGVkIGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBp cyBhYm91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5 IGtleSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9z aXRpb24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGls ZSBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkg dXNlZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxs IGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNh bGxpbmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0 aW5nIG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRp ciB3aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRj aCByZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p CitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0 Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwogCi0JLyogVGhl cmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMp CisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4 LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRo ZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAq IHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRo ZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBo YXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3Rh dGUgZm9yIHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQ cmltU2NhbiBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBz b2Z0CisJICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGlu IHRoZSBzYW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRo ZSBzb2Z0IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2Nh biB0byBzdGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJl Y292ZXIuCisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdp bGwgcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMg bmVlZGVkIGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJp bWl0aXZlIHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkg dmFsdWVzCisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFn ZSB3ZSdsbCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5 IGtleSBzdGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0 IGdldCBjb25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNw YWNlCisJICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVy bXMgb2YgdGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxs eS4gIEJ1dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2Us IHRoZSBzY2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBv cy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVS aWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bv cyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBv cygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0 cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQot CXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2lu Y2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkg KgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNv LT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRl bUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRo ZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFu ZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVu J3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRp bmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBp dC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7 Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFy ayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5t YXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJ ICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bv cy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBs ZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAg c28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJy YXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJh eUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3Mu ZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQot CQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQlidGJhdGNoLT5tb3Jl TGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5k ID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4 MSwxNSArOTIxLDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxv Y2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgot CSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQg c3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0 aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBz IGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkg KiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBh Z2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3Mp OwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK LQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM5LDggKzEwNzAsNiBAQCBfYnRfcGFyYWxs ZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsK IAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNj YW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi5jMDg5ZWMzOGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIzLDQ5IEBACiAjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworc3RhdGljIGlubGlu ZSB2b2lkIF9idF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCwKKwkJCQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJp Z2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJ CQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlp bnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVs LCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hf cG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJl ciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRl c2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFk Zmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJ CQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIg bGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsK K3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9m Zm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJ CSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRh dGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxv Y2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gg X2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkJCSAgIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8qCi0gKglfYnRfZHJvcF9s b2NrX2FuZF9tYXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0tIG5idHJlZSB3cmFw cGVyIGZvciBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAqIFVubG9jayBzby0+Y3Vy clBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAq IERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWly aW5nIGEgY2xlYW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFsZ3JpbmQgaW5zdHJ1 bWVudGF0aW9uIGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQor X2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo LCBCdWZmZXIgYnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3Ag dGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQ b3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdl CQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28g dGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1cnJl bnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgot CSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3VyclBvcy5i dWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFnZSwg QkxDS1NaKTsKKyNlbmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRj aCwgYnVmKTsKKworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICghUmVsYXRpb25Vc2Vz TG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklORF9NQUtFX01FTV9O T0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04NjAsMjYgKzg1Niwy NSBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3QoKSAt LSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZpbmQg dGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2ZXIg YWJvdXQgdGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9ucywg YW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0gKgkJ aWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNm aWVzIHRoZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3Mg ZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBo YXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9j a3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0g KgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUg cGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8g c2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVy aW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxlYWYg cGFnZSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVhc3QK KyAqCQlvbmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRoZSBz Y2FuIGtleS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2ggd2l0 aCB0aGF0IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0 Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBp bnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJ ZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2ZW4g c2NhbiBkaXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1 cm5pbmcgTlVMTCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisgKiBlbmQgb2YgdGhlIHRv cC1sZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8KKyAq IGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJlcXVpcmVkLgog ICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFbXSBz Y2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5cyAo c2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhpcyBy b3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHVz ZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wKK0lu ZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODkyLDgg Kzg4NywxMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsKIAlCbG9j a051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJsa25vOwor CUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaDsK IAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRl IHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0 Y2hfYWxsb2Moc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmly c3RiYXRjaCk7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBhbmQgZWxpbWluYXRl IGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA5LDcgKzkwOCw4IEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJQXNz ZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCXJl dHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC05MTgsNyArOTE4LDEwIEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChz Y2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2Fu LCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCXsKKwkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBO VUxMOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8K Kwl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9y IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzgsMTEgKzk0MSw5IEBAIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlBc3NlcnQoIXNvLT5u ZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9y ZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQly ZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0 Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJl dHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRy dWUpOwogCX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyNDMsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBjYWxscyBfYnRfcmVhZGZp cnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxlbCBzY2FuLgogCSAqLwog CWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNjYW4sIGRpcik7CisJCXJl dHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsKIAogCS8qCiAJICogV2Ug d2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1 cCBhbgpAQCAtMTUwMiw3ICsxNTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0 IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3Ry YXRfdG90YWw6ICVkIiwgKGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJ cmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTE1MTAsOSArMTUxMSw5IEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNl bHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCV9idF9zZWFyY2gocmVsLCBO VUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxzZSk7CisJX2J0X3Nl YXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCwgZmFs c2UpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKHVubGlr ZWx5KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkpCiAJewogCQlBc3NlcnQoIXNv LT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4LDIyICsxNTI5LDIzIEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNTZXJp YWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNf c25hcHNob3QpOwotCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5 LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJfQogCi0JCWlmICghQnVm ZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJz dGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCXJldHVy biBmYWxzZTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gp OworCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lz ZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5 LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwg YnRmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZp cnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4g c28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAq CiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFs c2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBs ZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NCArMTU2Myw3MiBAQCBfYnRfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2Uu ICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdo CiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwg YmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2Zm bnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7 Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0 Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0 IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggaW4g YSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJy ZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5k IHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJl dmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhl IGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwg dXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVj aWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhp dCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQot ICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBv cyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3RpbGwgYmUgcG9zc2li bGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0aW9uLAot ICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhl ciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBuZXh0IGJhdGNo LiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBsZSBvbiBhbnkg cmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4KKyAqCQlOb3RlIHRo YXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhl CisgKgkJdG9wLWxldmVsIHNjYW47IGNhbGxlciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2Nh biB0byBkZXRlcm1pbmUKKyAqCQlpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlzIHJl cXVpcmVkLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7Ci0JQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0KEJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBuZXh0IHR1 cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8KLQkgKiBz dGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+ Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkK LQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28tPmN1cnJQ b3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9z dGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCV9idF9y ZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybiB0 aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRl eF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyBp biBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGluZSB2b2lk Ci1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbykKLXsK LQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBv cy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3QgaGF2ZSBz dWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFz c2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKLQlB c3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQot CS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0Jc2Nhbi0+ eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJ c2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+ dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0byBuZXh0 IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBlciBvbiBf YnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBjdXJyZW50 IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQuICBJdHMg YnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFjdHVhbGx5 LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwKLSAqIHRo b3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZhbGlkIGJs b2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJpb3JiYXRjaCA9IEJUQmF0 Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxh c3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwot Ci0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsK Kwlib29sCQltb3JlSW5EaXI7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywg bWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9z aXRpb24gdGhhdCBuZWVkcyBpdC4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3aXRoIGNy b3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0Y2ggbWFu YWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0aW9uIChh bmQKKwkgKiBjYWxscyBidHBvc3Jlc2V0IHRvIGRlYWwgd2l0aCB0aGUgc2NhbidzIGFycmF5IGtl eXMpIGlzIHVzZWQgZm9yIHRoaXMuCiAJICovCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDAp Ci0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBt YXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCQkJ SW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQ b3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFd KSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7 Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1 cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1h cmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4 ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVzdCBhYm91dCB0byBzdGFydCB0aGUgbmV4 dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9zc2libGUgd2l0aCBhIHNjYW4gdGhhdCBo YXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lwIHRvCi0JCSAqIGNvbnRpbnVlIGluIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICog aW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2Nhbi4gIFRo ZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2 ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRoYXQgd291bGQgYmUgd3JvbmcpLgotCQkg KgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50 IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhl IGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5 LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9zJ3MgY29weSBvZgotCQkgKiBtb3JlUmln aHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBiZSBhZmZlY3RlZCksIHdoaWxlIG1ha2lu ZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIHRoZWlyIGluaXRp YWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVjdCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2 YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxs ICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyByZXN0b3JlZCBtYXJrUG9zKS4KLQkJICov Ci0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5tYXJrUG9zLm1vcmVSaWdodCA9IHRydWU7 Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxlZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyog bWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0 KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNv LT5jdXJyUG9zKTsKKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7CiAKIAkvKiBXYWxr IHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBidHBy aW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFn ZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJCWJsa25vID0gYnRw cmlvcmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRwcmlvcmJhdGNoLT5jdXJy UGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidHBy aW9yYmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxlZnQ7CiAKIAkvKgotCSAq IENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRo ZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBlbmVkIHRvIHVzZSB0 aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdlJ3JlIHN0ZXBwaW5n IGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheQotCSAqIGtleXMg YXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCisJ ICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJhdGNoIG5vdyBz byB0aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoYXQg d2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxv Y2F0aW9uLgogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQotCQlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9O RSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCdzIHBhZ2UgaXMga25v d24gdG8gYmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMKKwkJICogaW4gdGhpcyBz Y2FuIGRpcmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3VyZWQgdGhhdCBvdXQpLgor CQkgKgorCQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNldCwgdGhlbiBwcmlvcmJh dGNoJ3MgbGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhlIGZpbmFsIHBhZ2UgZm9y IHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGluIHRoaXMgc2NhbiBkaXJl Y3Rpb24gKHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4KKwkJICovCisJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2Nhbiwg JmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25l IGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KIAogCXJldHVybiBfYnRfcmVhZG5l eHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KQEAgLTE3 MzIsMTc4ICsxNjQyLDE2OSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxp bmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBTZWUgX2J0X3JlYWRw YWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3Qg YmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRy eSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMg dmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNj YW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0 ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCi0gKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRh aW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBt YXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICog Z2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0 dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9mIHRoZSB0 b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0bWFwIGNoZWNrIHNvLT5u ZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4CisgKiBz Y2FuIGlzIHJlcXVpcmVkLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBh IHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1 cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4K ICAqLwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg T2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2Fu QmF0Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggZmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24g ZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3Ri YXRjaCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtubzsKKwlib29sCQlt b3JlSW5EaXI7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0J c28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNv LT5jdXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICov CisJLyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdl ICovCiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5 cyk7CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3Jl UmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJz dGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJ fQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJy UG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJ CWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmln aHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVM ZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkv KgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFn ZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6 aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3 aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9y ZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5z IGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVl KSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVl KSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJ ICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUg cGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVw bGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChz by0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0J CXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hl cyBpbiBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBmaXJz dGJhdGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAot CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+ Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlIHJldHVybmVkIGJ5IF9idF9zZWFyY2ggKi8KKwlfYnRfcmVsYnVmKHNjYW4tPmluZGV4 UmVsYXRpb24sIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFn ZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9z dGVwcGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4 dCBwYWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJ CWJsa25vID0gYnRmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gYnRmaXJz dGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJzdGJhdGNoLT5jdXJyUGFn ZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQlidGZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA6IGJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQ7CiAKLQkvKiBfYnRfcmVh ZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8K LQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZWxlYXNlIGZpcnN0YmF0Y2ggKHdpbGwgYmUgcmVjeWNsZWQg aWYgd2UgcmVhY2ggX2J0X3JlYWRuZXh0cGFnZSkgKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1vcmVJ bkRpcikKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQg c2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4g d2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2Nhbiwg JmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25l IGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVybiBfYnRfcmVhZG5l eHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0KIAogLyoK ICAqCV9idF9yZWFkbmV4dHBhZ2UoKSAtLSBSZWFkIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlk IGRhdGEgZm9yIF9idF9uZXh0CiAgKgotICogQ2FsbGVyJ3MgYmxrbm8gaXMgdGhlIG5leHQgaW50 ZXJlc3RpbmcgcGFnZSdzIGxpbmssIHRha2VuIGZyb20gZWl0aGVyIHRoZQotICogcHJldmlvdXNs eS1zYXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBh Z2UgdGhhdAotICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5r IHdhcyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCi0gKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBw YWdlIHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4g dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5j dXJyUG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJy Ymxrbm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBDYWxsZXIncyBibGtubyBpcyB0aGUg cHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5nIG9uIHRoZQorICog Y3VycmVudCBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBi YXRjaCdzIGN1cnJQYWdlLgorICogV2UgdXNlIGxhc3RjdXJyYmxrbm8gdG8gcmVhc29uIGFib3V0 IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMKKyAqIGR1cmluZyBiYWNrd2Fy ZHMgc2NhbnMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBiZSBsb2Nr ZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRCdWZmZXIv dW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxrbm8KLSAq IHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4gIFBhcmFs bGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcg aGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBibGtubyBh bmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4KLSAq IHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1cnJibGtu byB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdpdGggc28t PmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAgQSBzZWl6 ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHBh Z2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwgdGhv dWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZlcyBieSBz ZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAqIGFscmVh ZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5nIGEgcGFy YWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9zby0+Y3Vy clBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+Y3VyclBv cy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCkuCisgKiBP biBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0gKiBPbiBz dWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRhIGZyb20g dGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4gIFdlIGhv bGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQgZHVyaW5n IHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICogZWFnZXJs eSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5z IHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRo YXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2UganVzdCBy ZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBuZWNlc3Nh cmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNoIGFuZAor ICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUgaWYgYW5v dGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgotICogSWYgdGhl cmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCB3 ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQgcmV0YWlucyBu byBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBhbHdheXMgcmVs ZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgot ICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFz IHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBzZWl6ZSB0 aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0Y3VycmJsa25v IHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFzZSB0aGUgc2Nh biBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBJbmRl eFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRj aDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vIHx8IHNl aXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkpOwotCUFzc2VydCgh QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig bmV3IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7 CisJYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIG5ld2JhdGNoKTsKIAogCS8qCi0J ICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBw YWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdl IHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJl IHRoZSBiYXRjaCBmb3IgYmxrbm8sIGEgcGFnZSB0byB0aGUgcmlnaHQgb2YKKwkgKiBsYXN0Y3Vy cmJsa25vIChvciB0byB0aGUgbGVmdCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRz KS4KKwkgKgorCSAqIE5vdGU6IGNhbGxlcidzIGJsa25vIGlzIHRlbnRhdGl2ZS4gIG5ld2JhdGNo IGFjdHVhbGx5IHN0b3JlcyBtYXRjaGVzCisJICogZnJvbSB0aGUgbmV4dCBsZWFmIHBhZ2UgaW4g dGhpcyBzY2FuIGRpcmVjdGlvbiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUKKwkgKiBtYXRjaGluZyBp dGVtLiAgVGhpcyBpcyB1c3VhbGx5IGNhbGxlcidzIGJsa25vIHBhZ2UsIGJ1dCBtaWdodCBiZSBz b21lCisJICogb3RoZXIgcGFnZSB0byBpdHMgcmlnaHQgKG9yIHRvIGl0cyBsZWZ0KSBpbnN0ZWFk LgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7 CisJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwkvKiBmb3IgbGFzdGN1cnJibGtubyAob3Ig dGVudGF0aXZlKSAqLworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CS8qIHRlbnRhdGl2 ZSAob3IgZm9yIGxhc3RjdXJyYmxrbm8pICovCiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJcGFn ZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8Ci0J CQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9yZVJp Z2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQgX2J0 X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlBc3Nl cnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsKLQkJ CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2FuIG11 c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFzZWl6 ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVsX3Nl aXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyogd2hv bGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJlZCkg Ki8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmlt U2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQX05P TkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8qIHJl YWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtu bywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8s IEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywgYXZvaWRpbmcg cmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3VyclBvcy5idWYg PSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKKwkJCWJ0bmV3YmF0Y2gt PmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAogCQkJCQkJCQkJ CQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IEludmFsaWRC dWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IEludmFsaWRCdWZmZXIpCiAJCQl7CiAJ CQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRlbGV0aW9uIG9mIGxlZnRtb3N0IHBh Z2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAkJCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJaW5kZXhhbV91dGlsX2Jh dGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9 CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JF KG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgxMiwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJl IGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdo dCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJ UlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nhbiwg bmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFn ZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJ Ymxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkv KiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0IGlmIHdlIGNhbiBzdG9wICovCi0J CQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFn ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAor CQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgZmlyc3RwYWdlKSkKIAkJCQkJ YnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKKwkJCQlibGtubyA9IGJ0 bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVsc2UKQEAgLTE5MzYsMTkgKzE4Mzcs MzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJs a25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVzIG9uIHRoaXMgcGFnZSAqLwotCQlf YnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc2VpemVkID0gZmFsc2U7CQkJLyog cmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykgKi8KKwkJX2J0X3JlbGJ1ZihyZWws IGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUgdGhlIHNjYW4gaW4gdGhpcyBkaXJl Y3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhYnRuZXdiYXRjaC0+ bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5k ZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFByaW1T Y2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkgKi8K KwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBwYXJhbGxl bCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwkJaWYgKHNj YW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2Fu LCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOwkJLyogZG9uZSBp ZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlmaXJzdHBhZ2UgPSBm YWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkvKgotCSAqIF9i dF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikg b24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0 dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gYmxr bm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNzZXJ0KGJ0bmV3YmF0 Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIG5ld2JhdGNo LCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIG5ld2JhdGNoOwog fQogCiAvKgpAQCAtMjE3NCwyNSArMjA5NCwyNCBAQCBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9u IHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFsbGVsIHNjYW4gY2Fs bGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKiBF eGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3QoKS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCkKIHsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0g QlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VP cGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNz ZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKIAogCS8q CiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3QgbGVhZiBwYWdlLiAg VGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9zZWFyY2goKS4KIAkgKi8K LQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSk7CisJYnRmaXJzdGJhdGNoLT5idWYgPSBfYnRfZ2V0X2VuZHBvaW50 KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAKLQlpZiAoIUJ1ZmZlcklz VmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQoYnRmaXJzdGJhdGNo LT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0 aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDAsMTAgKzIxMTksMTAgQEAgX2J0 X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqLwog CQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7CiAJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCX0K IAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnRmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShw YWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjksOSArMjE0OCw1IEBA IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8q CiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAq LwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBm YWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1 cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNzMyYmM3NTBjLi40MTVlMmExYzAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDEwICsxOSw3IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMu aCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dy ZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5oIgotI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgpAQCAtMzAsNyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBj b25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwg SW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRT Y2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ1LDI0NyArMTQxLDYgQEAgX2J0X21rc2Nhbmtl eShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4ga2V5OwogfQogCi0vKgot ICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwotICovCi1zdGF0aWMg aW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQotewot CWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAqKChjb25zdCBpbnQg KikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRfa2ls bGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIg aGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVu Y2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0g KiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlz IHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoKLSAq IENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBi dXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdl IHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUgdG8g aG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgotICoKLSAq IFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUg cmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBo b2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250aW51b3VzbHkgZnJv bSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlv bgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUg ZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2Fu J3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawotICogdGhhdCB3 ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5 Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAo dGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9u IHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAoc28t PmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBf REVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJh Y2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90YWxseSBnaXZlIHVw IG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0gKgot ICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2Fucywg YnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMg aGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhhcyBt b3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBm aW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lkCi1fYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1pbm9m ZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxs ZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0KLQlB c3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBiZSBh IGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0ZSBzby0+a2lsbGVk SXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5udW1LaWxsZWQgPSAw OwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNb XSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlzICh3 aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgotCSAqIHNvLT5raWxs ZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVt cyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQg dGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IHNv LT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8KLQlpZiAobnVtS2ls bGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2Yo aW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1ZShzby0+a2lsbGVk SXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2NvbXBhcmVfaW50KTsK LQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2UgaGF2ZSBoZWxkIHRo ZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywKLQkJICog c28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZlIHByZXZl bnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBU SURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVsLCBi dWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKLQot CQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9idF9n ZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0bHNu ID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0g bGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsKLQkJ CS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9yZWxidWYocmVsLCBi dWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBzYWZl ICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBhZ2VH ZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKLQltYXhv ZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRlcmF0ZSB0aHJvdWdo IHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZvciAoaW50IGkgPSAw OyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVk SXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7Ci0K LQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0 ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChpID09IDAgfHwKLQkJ CSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbaSAtIDFdXS5p bmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJCS8q IHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0 ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlp dHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJCWtp bGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQot CQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1 cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJLyoKLQkJCQkgKiBO b3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhbG1vc3QgYW55IHdh eQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28tPmRyb3BQaW4gY2Fz ZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1cGxl IHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5jb3Vu dGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rp bmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9z dGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZr aXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29w ICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51bSB3 aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBj YXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkg bW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2Zm bnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVhZC1haGVhZCB0byBs YXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1w dGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3aWxsIHByZXZlbnQg dXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1bGx5 IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKLQkJCQkJICog bG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwg dGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0 dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdl IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRo ZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJlY3Rs eSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJICovCi0JCQkJCWlm IChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5r aWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBEb24ndCBib3RoZXIg YWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bwotCQkJCSAqIGF2 b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0JCQkJ ICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhh cmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUg b3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBv c3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2 YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2ts eS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9IHRy dWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwg JmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0JCQkvKgotCQkJICog TWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlz Ci0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBwb3NzaWJseSBpbiBz aGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMg YXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVhZGluZyB0byBtdWx0 aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdBTCAoaWYgd2FsX2xv Z19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBpcyB1 bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlp ZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJ CQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgot CQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4g SWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVp bmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJ CQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxs IHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2ls bGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNo IGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJ fQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRl ZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGlu ZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hBU19HQVJCQUdFIGZs YWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQotCSAqIG9u bHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4p Ci0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFncyB8 PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwg dHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9wUGluKQotCQlfYnRfdW5s b2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBidWYpOwotfQotCi0K IC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNoYXJlZC1tZW1vcnkgYXJl YSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFjdXVtIGN5Y2xlIElEcyIg dG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVlX21hc2soY2hhciAqcGFn ZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBidHJlZSBsZWFmIHBhZ2Vz LCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdpdGhvdXQKIAkJICogZW1p dHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5lIHBvaW50ZXIgZmxhZ3Mu IFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWls cy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFp bHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8qCiAJICogQlRQX0hB U19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBTbywgbWFzayBpdC4gU2Vl Ci0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRfa2lsbGl0ZW1zKCksIGFu ZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkgKiBfYnRfZGVsZXRlX29y X2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5kCisJICogX2J0X2NoZWNr X3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5idHBvX2ZsYWdzICY9IH5C VFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBm MmVlMzMzZjYuLjMzYWQ0MzUzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpA QCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdl dHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0 ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jCmluZGV4IGMwOTQ3M2I5Ny4uMGZmZjgwMWE0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTUzLDYgKzUzLDkgQEAgR2V0VGFibGVBbVJvdXRp bmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfYmVnaW4gIT0g TlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc2V0ICE9IE5VTEwpOwogCUFz c2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9lbmQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PmluZGV4X2ZldGNoX2JhdGNoX2luaXQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4 X2ZldGNoX21hcmtwb3MgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jl c3RycG9zICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRpbmUtPmZldGNoX3RpZCAhPSBOVUxMKTsK IAlBc3NlcnQocm91dGluZS0+dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gIT0gTlVMTCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDM3M2U4MjM0Ny4uODQyMmU2NWIwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3IEBAIERlZmluZUluZGV4KFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0 aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1 c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYm IGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9 PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5v dCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5k ZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOSw3 ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2Fz ZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1 cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJl c3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0 aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uM2ZmNzgxZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBU aGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9p bnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUK ICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBi ZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1l dGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3Jl IHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBpbmRleGJhdGNo LmggaW50ZXJmYWNlIHByb3ZpZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0 byBhIHR1cGxlIGR1cmluZyBpbmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlhbCBvcGVy YXRpb24gb2YgdGhlIG1lcmdlIGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2N2Q5ZGMzNWYuLmVkYzdlNDczNiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00Myw3ICs0Myw3IEBACiAvKiBX aGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBzY2FuLCBv ciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBz dXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBh bWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1 cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlzIG9rYXkg Ki8KIH0gU2NhblR5cGVDb250cm9sOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGdldF9pbmRleF9wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQYXRoICAq aXBhdGggPSAoSW5kZXhQYXRoICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dl dHR1cGxlKQorCQlpZiAoaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJYWRkX3BhdGgocmVsLCAo UGF0aCAqKSBpcGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM1 LDcgKzgzNSw3IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgot CQkJaWYgKCFpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtY2FucGxhaW5z Y2FuKQogCQkJCXJldHVybiBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDdjNGJlMTc0OC4uMDZhMmU5NDlk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBA QCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0 SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUt PmFtc2VhcmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1z ZWFyY2hudWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBh cmFsbGVsOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxl ICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FucGxhaW5zY2FuID0gKGFtcm91dGluZS0+YW1nZXRi YXRjaCAhPSBOVUxMIHx8CisJCQkJCQkJCQkJYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwp OwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBO VUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxl ICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9z ICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOwor CQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwog CQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJ CQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEs NyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2Jq ZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsK IAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxl bCA9IGZhbHNlOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5h bWNhbnBsYWluc2NhbiA9IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7 CiAJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1h dGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmlu ZGV4IDBiMWQ4MGI1Yi4uMGQwYmQ0NjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9yZWxhdGlvbi5jCkBAIC04MzYsNiArODM2LDcgQEAgSXNJbmRleFVzYWJsZUZvclJlcGxp Y2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogewogCUF0 dHJOdW1iZXIJa2V5Y29sOwogCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWNvbnN0IEluZGV4QW1S b3V0aW5lICphbXJvdXRpbmU7CiAKIAkvKiBUaGUgaW5kZXggbXVzdCBub3QgYmUgYSBwYXJ0aWFs IGluZGV4ICovCiAJaWYgKCFoZWFwX2F0dGlzbnVsbChpZHhyZWwtPnJkX2luZGV4dHVwbGUsIEFu dW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCkBAIC04ODcsMTAgKzg4OCwxMiBAQCBJc0luZGV4 VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0 dHJtYXApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCi0JICogVGhlIGdpdmVuIGluZGV4IGFjY2Vz cyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCi0JICogYmUg dXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBs ZUJ5SW5kZXgoKS4KKwkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxl bWVudCAiYW1nZXR0dXBsZSIgb3IKKwkgKiAiYW1nZXRiYXRjaCIsIHdoaWNoIHdpbGwgYmUgdXNl ZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlCisJICogUmVsYXRpb25GaW5kUmVwbFR1 cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwt PnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWFtcm91dGluZSA9 IEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpOwor CWlmIChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbXJvdXRpbmUtPmFtZ2V0YmF0 Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11 dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUp OwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2gg IT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9C T09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFD S1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsK QEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2Fz ZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1 cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVw bGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAog CQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFt Y2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRy aWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uNDc2YjY0ZThiIDEwMDY0NAotLS0g YS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpA QCAtMTQ2LDEwICsxNDYsMTIgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJl Z2luc2NhbiA9IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFtZ2V0 dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYmxn ZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxM LAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0 aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwK IAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1Li4y YjQ4NzI4YzUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTY3LDEwICsxNjcsMTIgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsK ICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0aW9u IGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVuY3Rp b24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWtpbGxpdGVtc2JhdGNoX2Z1 bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCisgICAgYW11bmd1YXJk YmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1n ZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBh bWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1h cmtwb3M7ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBh bXJlc3RycG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9u IGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rp b25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFy YWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBO VUxMICovCkBAIC02NzYsOCArNjc4LDM4IEBAIGFtYmVnaW5zY2FuIChSZWxhdGlvbiBpbmRleFJl bGF0aW9uLAogICAgPGVtcGhhc2lzPm11c3Q8L2VtcGhhc2lzPiBjcmVhdGUgdGhpcyBzdHJ1Y3Qg YnkgY2FsbGluZwogICAgPGZ1bmN0aW9uPlJlbGF0aW9uR2V0SW5kZXhTY2FuKCk8L2Z1bmN0aW9u Pi4gIEluIG1vc3QgY2FzZXMKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRv ZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxsIGFuZCBwZXJoYXBzCi0gICBhY3F1aXJp bmcgbG9ja3M7CisgICBhY3F1aXJpbmcgbG9ja3MgYW5kIGluaXRpYWxpemluZyBzdGFuZGFyZCA8 c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPiBmaWVsZHM7CiAgICB0aGUgaW50 ZXJlc3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1y ZXNjYW48L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgdXNlIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZQorICAgbXVzdCBhbHNvIHNl dCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc2NhbiBkZXNjcmlwdG9yOgorICAgPGl0ZW1p emVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nh bi0mZ3Q7bWF4aXRlbXNiYXRjaDwvbGl0ZXJhbD46IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVt cworICAgICAgdGhhdCBjYW4gYXBwZWFyIGluIGEgc2luZ2xlIGJhdGNoICh0eXBpY2FsbHkgZGVy aXZlZCBmcm9tIHRoZSBpbmRleCBwYWdlCisgICAgICBzaXplLCBlLmcuLCA8bGl0ZXJhbD5NYXhJ bmRleFR1cGxlc1BlclBhZ2U8L2xpdGVyYWw+KS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0 O2JhdGNoX2luZGV4X29wYXF1ZV9zaXplPC9saXRlcmFsPjogdGhlCisgICAgICA8ZnVuY3Rpb24+ TUFYQUxJR048L2Z1bmN0aW9uPidkIHNpemUgb2YgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9w YXF1ZQorICAgICAgYXJlYS4gIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiByZXNlcnZlcyB0aGlzIG11 Y2ggc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlCisgICAgICB0aGUgPHN0cnVjdG5hbWU+SW5kZXhT Y2FuQmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBmb3IgdXNlIGJ5IHRoZQorICAgICAg aW5kZXggQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlvbiBzdGF0ZSAoZS5nLiwgYmF0Y2gg aW5kZXggcGFnZSdzCisgICAgICBidWZmZXIgcGluIGFuZCBzaWJsaW5nIHBhZ2UgbGlua3MpLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTwvbGl0ZXJh bD46IHRoZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0aGUgcGVyLWJhdGNoIHR1cGxlIHN0b3Jh Z2Ugd29ya3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMKKyAgICAgICh0eXBpY2FsbHkg PGxpdGVyYWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAgaWYgdGhlIGluZGV4IEFNIGRvZXMgbm90 CisgICAgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMuICBUaGUgd29ya3NwYWNlIGlzIGFjY2Vz c2libGUgdmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0Y2gtJmd0O2N1cnJUdXBsZXM8L3N0cnVj dGZpZWxkPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlz dD4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtNzQ5LDYgKzc4MSwyMzcgQEAgYW1nZXR0dXBs ZSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVjdGZpZWxkPmFtZ2V0dHVwbGU8L3N0cnVj dGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5h bWU+CiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgorICA8bm90ZT4K KyAgIDxwYXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gdmVyc2lvbiAxOSwgcG9zaXRpb24gbWFya2luZworICAgIGFuZCByZXN0b3JhdGlvbiBvZiBz Y2FucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGZvciB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+IGludGVyZmFjZTsgb25seSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisgICA8L3Bh cmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK0luZGV4U2NhbkJh dGNoCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJbmRleFNj YW5CYXRjaCBwcmlvcmJhdGNoLAorICAgICAgICAgICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p OworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVybiB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0 dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmluZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlv biAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5j ZSBvZgorICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxv YWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3Jl IGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAgIHNjYW4gZGlyZWN0aW9uLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRl cmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcworICAg cmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBmcm9tIGEKKyAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUgdGFi bGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBi ZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgdGFibGUgQU0gcGFzc2VzIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGluZGlj YXRlIHdoZXJlIHRoZQorICAgaW5kZXggQU0gc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20g KG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZQorICAgZmlyc3QgY2FsbCBmb3IgdGhl IHNjYW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgPGxpdGVyYWw+ cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVh ZCBuZXh0LgorICAgVW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHdoZXJl IHRoZSBpbmRleCBBTSBtYWludGFpbnMgaXRzCisgICBvd24gc2NhbiBwb3NpdGlvbiwgd2l0aCA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGl0IGlzIHRoZSBjYWxsZXIKKyAgIHRoYXQg Y29udHJvbHMgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIHRocm91Z2ggdGhlIGluZGV4LiAgVGhl IGNhbGxlcgorICAgd2lsbCB0eXBpY2FsbHkgcGFzcyB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5l ZCBiYXRjaCwgYnV0IHRoaXMgaXMgbm90CisgICBndWFyYW50ZWVkICZtZGFzaDsgZm9yIGV4YW1w bGUsIGR1cmluZyBtYXJrL3Jlc3RvcmUgYSBwcmV2aW91c2x5CisgICByZXR1cm5lZCBiYXRjaCBt YXkgYmUgcGFzc2VkIGluc3RlYWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2gg cmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVk IHdpdGggYW4KKyAgIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcg aXRlbS90dXBsZS4gIEEgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFi bGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGlu ZyBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRoaXMg aW50ZXJsb2NrCisgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rp b24+IHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRl eC1sb2NraW5nIi8+IGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAgZHVy aW5nIGluZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4 U2NhbkJhdGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9k LgorICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBz aG91bGQgYmUgZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNo PC9mdW5jdGlvbj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxk PnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVu YW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24g cHJvdmlkZXMgYQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhl IHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVh bnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVz IHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAg ZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVz dC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nh bi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5n IG9mCisgICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2Fu LSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZv ciBhbiBlbnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lz LiBUaGlzIGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVj azwvbGl0ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAg SW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3Zlcgor ICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFNpbWlsYXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl IGRvZXMgbm90IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0 dXJuIGRhdGEgaW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1 Y3RuYW1lPiBwb2ludGVyLiAgSW5kZXgtb25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5nIDxz dHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBwYWdl cyBpbnRvIGEKKyAgIGxvY2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4gIDxs aXRlcmFsPnhzX2l0dXBkZXNjPC9saXRlcmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFz IGFscmVhZHkgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+Lgor ICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBub3Qgc2V0IHRoZSA8bGl0ZXJhbD5zY2Fu LSZndDt4c19pdHVwPC9saXRlcmFsPgorICAgZmllbGQgaXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0gc2V0cworICAgPGxpdGVyYWw+ c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRvIHBvaW50IHRvIGEgcmVjb25zdHJ1Y3RlZAor ICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBleHRl bmRzIHVudGlsIHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNh bGwgJm1kYXNoOyBvbmx5IG9uZSB0dXBsZSBpcyB2YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxk IG9wZW4KKyAgIHNpbXVsdGFuZW91c2x5IGFuZCBpdGVtcyBhcmUgY29uc3VtZWQgYXN5bmNocm9u b3VzbHkgYnkgdGhlIHRhYmxlIEFNLCBzbworICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBzaW5n bGUtdHVwbGUgbGlmZXRpbWUgZm9yIHBlci1pdGVtCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8 L3N0cnVjdG5hbWU+IHBvaW50ZXJzLiAgVGhlIGJhdGNoIGluZnJhc3RydWN0dXJlCisgICBwcm92 aWRlcyBwZXItYmF0Y2ggc3RvcmFnZSBmb3IgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0 bmFtZT4gY29waWVzLAorICAgYnV0IGhhcyBubyBhbmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8c3Ry dWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IGRhdGEKKyAgICh1c2VkIGJ5IGluZGV4IEFN cyBzdWNoIGFzIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IGFuZAorICAgPGFjcm9ueW0+U1AtR2lT VDwvYWNyb255bT4gZm9yIHJlY29uc3RydWN0ZWQgdHVwbGVzIHRoYXQgbWlnaHQgbm90IGZpdCBp bgorICAgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gZm9ybWF0KS4gIFRoaXMg bGltaXRhdGlvbiBjb3VsZCBiZQorICAgYWRkcmVzc2VkIGluIGEgZnV0dXJlIHZlcnNpb24gb2Yg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBwcm92aWRlIGVpdGhlciA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+LCBidXQgbm90IGJvdGguCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92 aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgPHF1b3RlPnBsYWluPC9xdW90 ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAorICAgdGhlIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8c3RydWN0bmFtZT5JbmRleEFtUm91dGlu ZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK2Fta2lsbGl0ZW1zYmF0Y2ggKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsK KzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQgaGFz IGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0aGF0CisgICBjb250YWlucyBkZWFkIGl0ZW1z LCB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpbiB0aGUgYmF0Y2gncwor ICAgaW5kZXggcGFnZS4gIFRoZSBiYXRjaCdzIGluZGV4IHBhZ2Ugd2lsbCBub3QgYmUgbG9ja2Vk IGJ5IHRoZSBjYWxsZXI7IHRoZQorICAgaW5kZXggQU0gbXVzdCBhY3F1aXJlIGFuZCByZWxlYXNl IGl0cyBvd24gbG9jayAoYW5kIHBpbikgb24gdGhlIGluZGV4IHBhZ2UuCisgIDwvcGFyYT4KKwor ICA8cGFyYT4KKyAgIFdoaWxlIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRj aDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLAorICAgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9y IHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAKKyAgIGtub3du LWRlYWQgaW5kZXggZW50cmllcy4gIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBj dXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10 cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0 aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNo b29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuCisgICBUaGUgdGFibGUgQU0g bWF5IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVu Y3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElm IHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAg PHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVu IHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1z YmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJp bmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAg d2hpY2ggaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0 aGFuIG9uY2UuICBJbmRleAorICAgYWNjZXNzIG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRl cmluZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVh ZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRo CisgICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFz Y2VuZGluZyBvZmZzZXQgb3JkZXIuCisgICBUaGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFNIG5l ZWQgbm90IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwv ZnVuY3Rpb24+IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLgorICAgKEluZGV4IGFjY2VzcyBtZXRo b2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gcmVseSBvbiB0aGUKKyAg IDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGlu c3RlYWQgdG8gbWFyayBkZWFkCisgICB0dXBsZXM7IHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgIHByb3ZpZGVzIGEgcmVm ZXJlbmNlIGV4YW1wbGUuKQorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxlbWVu dGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0K KyAgIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGUgaW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9kaWZp ZWQgc2luY2UgdGhlIGJhdGNoIHdhcworICAgb3JpZ2luYWxseSByZWFkLiAgVGhlIGJhdGNoJ3Mg PHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHJlY29yZHMKKyAgIHRoZSBwYWdl IExTTiBhdCB0aGUgdGltZSB0aGUgaW5kZXggcGFnZSBsb2NrIHdhcyByZWxlYXNlZCBieQorICAg PGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAoc2V0IGF1dG9t YXRpY2FsbHkgYnkgdGhlCisgICBjb3JlIGNvZGUsIHRob3VnaCBpbmRleCBBTXMgd2hvc2UgVElE IHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgbm90IGp1c3QgYQorICAgYnVmZmVyIHBpbiBhcmUgbm90 IG9ibGlnYXRlZCB0byB1c2UKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2Nr PC9mdW5jdGlvbj4gJm1kYXNoOyB0aGV5IGNhbiBpbXBsZW1lbnQKKyAgIHRoZWlyIG93biBlcXVp dmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNlIHRoZSBiYXRjaAorICAgPHN0cnVjdGZpZWxkPmxz bjwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHdoYXRldmVyIHdheSB0aGV5IGRlZW0KKyAgIG5lY2Vz c2FyeSkuICBUaGUgaW5kZXggQU0gc2hvdWxkCisgICByZS1yZWFkIHRoZSBwYWdlLCBjb21wYXJl IHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7 bHNuPC9zdHJ1Y3RmaWVsZD4sIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFsPkxQ X0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZhbmNl ZCBMU04KKyAgIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7IHBv c3NpYmx5IGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFwIFRJ RHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZSB1bnNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IGluZGV4 IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCB0dXBsZXMuICBTaW5jZQorICAg PGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlv biBoaW50LCBpdCBpcworICAgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0aGlz IExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcworICAgdGhlIGluZGV4IEFNIHRvIHVz ZSBmYWtlIChtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZvcgor ICAgcmVsYXRpb25zIHdoZXJlIFdBTCBpcyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMg YXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgIHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGluZGV4 IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZSBvZiB0aGlzIHRlY2hu aXF1ZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcworICAg Y2FuIHN0aWxsIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwg YnV0IHNob3VsZCBzaW1wbHkKKyAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBu b3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVuCisgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dB TCgpPC9mdW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KKyAgIHdv dWxkIGJlIHVucmVsaWFibGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rp b24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSW5k ZXgKKyAgIGFjY2VzcyBtZXRob2RzIHRoYXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVwbGVz IHdpdGgKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3ZpZGUg aXQ7IHRob3NlIHRoYXQgZG9uJ3QgY2FuCisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4gZXZlbiB3aGVuIHRoZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor dm9pZAorYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAg ICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5 IHRoZSB0YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0 Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVjeWNs aW5nIGludGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBpbmRl eAorICAgbGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcg YnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5kZXgg QU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCisg ICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3Rp Y2UgdGhlIGJ1aWx0LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBzaW5n bGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBm b3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAg VGhpcyBmdW5jdGlvbgorICAgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIGd1 YXJkZWQgYmF0Y2guCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBtYXkg Y2hvb3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4K KyAgIGludGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQg c3RhY2sgb2YgcGlubmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hlbWUg dGhhdCByZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUg c3VyZSB0bworICAgZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBleGFt cGxlIHdoZW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVuY3Rp b24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0 aGUKKyAgIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZvaWQg ZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGFueSBpbmRleAorICAgYWNjZXNzIG1ldGhvZCB0aGF0 IHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KIAog ICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDMxLDggQEAgYW1nZXRiaXRt YXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJz IHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5k ZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0 IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRt YXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fu bm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9m IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUg dXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmlj dGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFz IGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwv cGFyYT4KQEAgLTc4MSw2ICsxMDQ0LDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJh PgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQgdG8g dXNlIHRoZSBiYXRjaCBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAoPGZ1bmN0aW9uPmlu ZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBUaGUgY29udmVudGlv biBpcyB0aGF0IG9ubHkKKyAgIG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1cmlu ZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAgIG91 dHN0YW5kaW5nIGluIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50bHkuICBUbyBtYWlu dGFpbiB0aGlzCisgICBvbmUtYmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwgdGhlIGluZGV4IEFN IGl0c2VsZiByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZlcwor ICAgdGhhdCBiYXRjaCdzIGluZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdlbmVyYXRlIHRoZSBu ZXh0IGJhdGNoICZtZGFzaDsgdGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0IGV4dHJhY3RzIG5h dmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQorICAgZnJvbSA8bGl0 ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZp YyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZyA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUgPGxpdGVyYWw+cHJp b3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCisgICBh bmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4gIFNl ZQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKKyAgIHJlZmVyZW5jZSBl eGFtcGxlLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVz ZWQgYnkKKyAgIHRoZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1 bmN0aW9uPiBjYWxsLCBhdm9pZGluZworICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24gZHVy aW5nIHRoZSBiaXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1saXN0 aW5nPgogdm9pZApAQCAtNzk1LDMyICsxMDgxLDQ0IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2FuRGVz YyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3MgKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFy ayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3Vw cG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlm eSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRoZSBz Y2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJlcyB0aGUgaW5k ZXggQU0gdG8gcmVzZXQgYW55IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRo ZSBzY2FuJ3MgcHJvZ3Jlc3MuICBGb3IgZXhhbXBsZSwgQi10cmVlIG11c3QKKyAgIHJlc2V0IHRo ZSBhcnJheSBrZXlzIHVzZWQgYnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVyYWw+ IHF1YWwKKyAgIGV2YWx1YXRpb24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzLiAgVGhp cyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBw cm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1c2Vk IHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9zaXRp b24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0g ICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBi ZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fu cy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0 ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFt ZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5hbXBv c3Jlc2V0PC9mdW5jdGlvbj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBkaXJl Y3Rpb24gY2hhbmdlLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0 aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHJl ZmxlY3QgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4g IFRoZSBpbmRleCBBTSBzaG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdoZW4g cmVzZXR0aW5nIGFueSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkgdGhl IHNjYW4gaXMKKyAgIHByb2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFya2Vk IHBvc2l0aW9uLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+ IGlzIG5vdCBtb2RpZmllZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdoZW4g dGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhlIGJh dGNoCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0aGUg YmF0Y2ggdGhhdCB3aWxsIGJlIHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2FuLgogICA8L3Bh cmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRl eFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4g dG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBh cmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVk IG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVy ZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9z PC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9z dHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFjY2Vz cyBtZXRob2RzIHRoYXQgaGF2ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQgd2hl biB0aGUKKyAgIHNjYW4gcG9zaXRpb24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgd2l0 aCBubyBzdWNoIHN0YXRlIG1heSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1 Y3RmaWVsZD4gdG8gTlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+ IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0aG9k IHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlLiAgKE5vdGUgdGhhdCB3aGVuIDxzdHJ1Y3RmaWVsZD5h bWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMKKyAgIGZhbHNlLCB0aGUgc2NhbiBkaXJlY3Rp b24gY2Fubm90IGNoYW5nZSwgc28KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4g d2lsbCBvbmx5IGJlIGNhbGxlZCBkdWUgdG8gbWFyay9yZXN0b3JlCisgICBpbiB0aGF0IGNhc2Uu KQogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTI3Myw4IEBAIGFtdHJhbnNsYXRl Y21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBl KTsKICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0 aGUgbmF0dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUp IHNob3VsZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+ IHRvIHRydWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFu ZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0 aGlzIGNhcGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11 c3QgdXNlIGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVp ciBlcXVhbGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0 LDM0ICsxMjk0LDQyIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwg T2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAg VGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVy YWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAg b3JkZXJpbmcgb3BlcmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2 YWxzPC9zdHJ1Y3RmaWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhlcmUg aXMgY3VycmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcg dmFsdWVzCisgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlzIHdv dWxkIHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCBk b2VzIG5vdCB5ZXQgZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUgdmVy c2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5j dGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hp Y2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4g KHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xp dGVyYWw+LCB0aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8g YmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZy b250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJh dGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMg d2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZp ZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmly c3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVk IHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJh dGNoIGNvbnRhaW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFu IHRoZSBiYXRjaCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2Ug dGhlIHNjYW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSBy ZXR1cm5lZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9z dHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUg dGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBh cmE+Ci0gICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1 cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5k IGxhdGVyIHJldHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBv c2l0aW9uIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBv bmUgcG9zaXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0 aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNs eSBtYXJrZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9y dCBvcmRlcmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8 L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rp b25zIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3Nl IHBvaW50ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3RlPm1h cmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRv IHRoZQorICAgbWFya2VkIHBvc2l0aW9uLiAgVGhlIGNvcmUgZXhlY3V0b3IgbWFuYWdlcyB0aGUg cHJvY2VzcyBvZiBzYXZpbmcgYW5kCisgICByZXN0b3JpbmcgYmF0Y2ggcG9zaXRpb25hbCBzdGF0 ZSB3aXRob3V0IGV4cGxpY2l0IGNvb3JkaW5hdGluZyB3aXRoIHRoZQorICAgdGFibGUgQU0uICBI b3dldmVyLCBpdCB3aWxsIGNhbGwgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8 L2Z1bmN0aW9uPgorICAgY2FsbGJhY2sgYXMgbmVlZGVkIHdoZW4gcmVzdG9yaW5nIGEgbWFyaywg dG8gaW52YWxpZGF0ZSBhbnkgaW5kZXggQU0gc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0 cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIChzdWNoIGFzIGFycmF5IGtleQorICAgc3Rh dGUpLiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rp b24+IGluCisgICA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMu CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRo ZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4g cG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQg aW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2Vy dGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNo bHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3Vs ZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0 YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0NCwxMiArMTM1MiwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUg KENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxs LiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBs b2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxl Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2Ft ZSBlZmZlY3RzIGFzIHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGNhbGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0ZWFk IG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAor ICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBp biBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRo YW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxs b3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWlu aW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAg IHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciBy ZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHksIHRo ZSB0dXBsZXMgYXJlIHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEwNTks MTUgKzEzNjksMTUgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBP aWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlz aW9uIGZvciBpbmRleC1vbmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBv ZgogICAgaW5kZXggdHVwbGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4KLSAgIGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJu ZWQgdHVwbGVzLCB3aXRoIGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlu a2VuZD0iaW5kZXgtbG9ja2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IGRvZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIg aXQgcmV0dXJucyAoc2ltaWxhcmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g c2NhbnMgd2l0aAorICAgYW4gTVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBs aW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBOb3Rl IHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBv bmx5Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJu YWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisg ICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAgIG9y IHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0 byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTExMjMs MTEgKzE0MzMsMTcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBP aWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlz dGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4g YSBwaW4KLSAgICAgICBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0 dXJuZWQgYnkKLSAgICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1 bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRy aWVzIGZyb20gcGFnZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5l ZWQKLSAgICAgICBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBp biBtdXN0IGJlIGhlbGQgb24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwg bmVlZCB0bworICAgICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwv ZnVuY3Rpb24+IG11c3QgYWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5k ZXggcGFnZSwgd2hpY2ggd2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhv bGRzIGEgcGluIG9uIHRoYXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBzY2FucywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2Vz IHRoaXMgcGluIGRpcmVjdGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4gb24g ZWFjaCBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJl YSksCisgICAgICAgd2hpbGUgdGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVybG9j ayBpcyBkcm9wcGVkIHZpYQorICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rp b24+LgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93Lgog ICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAt MTEzOCwzOSArMTQ1NCw5MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5 cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+LgogICAgVGhpcyBjcmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBpdGVt CiAgICBudW1iZXIgaXMgc3RpbGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0LCBz aW5jZSBhbiBlbXB0eQotICAgaXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rpb24+ aGVhcF9mZXRjaCgpPC9mdW5jdGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qgd2ls bCBzaW1wbHkgYmUgdHJlYXRlZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAgIHRo aXJkIGJhY2tlbmQgaGFzIGFscmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21ldGhp bmcgZWxzZT8KICAgIFdoZW4gdXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRoZXJl IGlzIG5vIHByb2JsZW0gYmVjYXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xvdCBp cyBjZXJ0YWluIHRvIGJlIHRvbyBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3QuICBI b3dldmVyLCB3aXRoIGEgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAgICA8 bGl0ZXJhbD5TbmFwc2hvdEFueTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBh Y2NlcHQgYW5kIHJldHVybgotICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNoIHRo ZSBzY2FuIGtleXMuICBXZSBjb3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJpbyBi eSByZXF1aXJpbmcgdGhlIHNjYW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3QgdGhl IGhlYXAgcm93IGluIGFsbCBjYXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3Rl YWQsCi0gICB3ZSB1c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGlj YXRlIHRoYXQgdGhlIHJlYWRlcgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwv cXVvdGU+IGZyb20gdGhlIGluZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBlbnRy eS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24gc3Vj aCBhIHBpbiBlbnN1cmVzCi0gICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90 IGRlbGV0ZSB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3aXRo IGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJs b2NraW5nCi0gICBvdmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJlIGFj dHVhbGx5IGlzIGEgY29uZmxpY3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUgdGhh dCBkb2VzIG5vdCBuZWNlc3NhcmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdlIGNh biBvcHRpb25hbGx5IHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5k aWNhdGUKKyAgIHRoYXQgdGhlIHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0 PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFwIGVu dHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxvY2sg b24gc3VjaCBhIHBpbiBlbnN1cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5u b3QgZGVsZXRlCisgICB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25lIHdp dGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBh ZGRzIGJsb2NraW5nIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAgIHRo ZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuICBXaGVuIHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1j b21wbGlhbnQKKyAgIHNuYXBzaG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3NhcnkgYmVj YXVzZSB0aGUgc25hcHNob3QgaXRzZWxmIHdpbGwKKyAgIHJlamVjdCBhbnkgcmVjeWNsZWQgVElE J3MgbmV3IG9jY3VwYW50IChzZWUgYmVsb3cpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBU aGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNocm9u b3VzPC9xdW90ZT46IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1lZGlh dGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnkuICBU aGlzIGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+ YXN5bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBm cm9tIHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGlt ZSBsYXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFkIGFu ZCBjYW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAgUGVy IHRoZSBhYm92ZSBhbmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJvYWNo IGZvcgotICAgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91 cyBzY2FuIGlzIHdvcmthYmxlCi0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBzaG90 LgorICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gaW5kZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB0 aGUgdGFibGUgQU0gbXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5IGFm dGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcworICAg ZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0 bworICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBj b2xsZWN0aW5nIGJhdGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywg dGhlIHRhYmxlIEFNIGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxv Y2tzIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNo cm9ub3VzCisgICBJL08gd2hlbiBhdmFpbGFibGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50 IGhlYXAgYWNjZXNzIHBhdHRlcm4uICBOb3QKKyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcgYXN5 bmNocm9ub3VzIGluIHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcworICAgZGVzaWduZWQg dG8gYWxsb3cgaXQuICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3lu Y2hyb25vdXMKKyAgIGFwcHJvYWNoIGZvciBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBi dXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMKKyAgIHdvcmthYmxlIGZvciBhIHF1ZXJ5IHVzaW5n IGFuIE1WQ0Mgc25hcHNob3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0aG9k IGRvZXMgbm90Ci0gICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVkIHR1 cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5zIHdp dGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0gcmVh ZHMgbXVsdGlwbGUgaW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBjYW5u b3QKKyAgIHByYWN0aWNhbGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5l b3VzbHkuICBUaGVyZWZvcmUsCisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1jb21w bGlhbnQKKyAgIHNuYXBzaG90IGlzIGluIHVzZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg V2hldGhlciBhIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBhbiBp bmRleCBwYWdlIGJ1ZmZlcgorICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRlZmVy cmVkIGlzIGNvbnRyb2xsZWQgYnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kgdGhh dCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMKKyAg IG5vdCB1bmRlciB0aGUgY29udHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0YWJs ZSBBTS4gIFRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8 L3N0cnVjdGZpZWxkPiBmbGFnIGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQgYmFz ZWQgb24gdHdvIGNyaXRlcmlhIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFjaGlu ZXJ5OgorICAgd2hldGhlciB0aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90 LCBhbmQgd2hldGhlciBpdCBpcyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNhbGx5 LAorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlz IHRydWUgd2hlbiB0aGUgc2NhbiB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8ZW1w aGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXgtb25seSBzY2FuLiAgV2hlbgorICAgPHN0cnVj dGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRoZSBp bnRlcmxvY2sgaXMKKyAgIGRyb3BwZWQgaW5zaWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0 Y2hfdW5sb2NrPC9mdW5jdGlvbj4gKGJlZm9yZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0dXJu ZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBhbgor ICAgTVZDQyBzbmFwc2hvdCB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0 aGUgTVZDQyB2aXNpYmlsaXR5CisgICBjaGVjayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsgZXZl biBpZiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhlIG5l dyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0aGUgc25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMgZmFs c2UsIHRoZQorICAgaW50ZXJsb2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBleHBs aWNpdGx5IGNhbGxzCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiwgYmVj YXVzZSB0aGUgc2NhbiBjYW5ub3QgcmVseSBvbiB0aGF0CisgICBoZWFwIHBhZ2UgTVZDQyBiYWNr c3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQyBzbmFwc2hvdCB0bwor ICAgcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBpbmRl eC1vbmx5IHNjYW5zLCBldmVuCisgICB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5 cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlIGhlYXAgcGFnZQorICAgYWx0b2dldGhlciAodXNp bmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjayB0aGF0IHdv dWxkCisgICBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBib3Ro IGNhc2VzIHRoZSBpbnRlcmxvY2sgb24KKyAgIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJldmVu dHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlY3ljbGluZworICAgVElEcyB3aGls ZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuICBJbiBhbGwgY2FzZXMsIHRoZSB0YWJsZSBB TSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwgPGZ1bmN0aW9u PmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj47IHRoZQorICAgaW5kZXggQU0gZGVjaWRlcyA8ZW1w aGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXgg c2NhbiBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURzIGFy ZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBiZWdp bnMuICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBz aG90LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRvIGhv bGQgaW5kZXggcGFnZSBwaW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3Qg bWFuYWdlCisgICBwaW4gbGlmZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFi bGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3Vy cmVudCBpbmRleCBwYWdlIHVudGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ug b3IgZW5kcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNn bWwKaW5kZXggODA4MjliMjM5Li5jZjBiYTViMGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUu c2dtbApAQCAtMTE3MywxMiArMTE3MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAg ICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1 cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlu a2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fj cm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhl cmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVz IHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBu b3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0 ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBi ZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVz dCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3Ig PGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFt Ii8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+ IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMg bGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGgg YW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBh bgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBT byBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFj cm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+ LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5k ZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0v ZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLmUyYjg2NWZiNCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0LDEw ICszMzQsMTIgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9 IGRpYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBO VUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwK KwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFt ZW5kc2NhbiA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9z ID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJl c2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDViYzUxNzYwMi4uMjNl MDQzY2MwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjA2LDYgKzIwNiw3IEBAIEJP T0wKIEJPT0xFQU4KIEJPWAogQlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3Rh dGUKIEJUQ2FsbGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0yMzMsOCArMjM0LDYgQEAgQlRTY2Fu SW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVE YXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlD b250ZXh0CiBCVFNwb29sCkBAIC0yNjMsNiArMjYyLDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJh Y2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitC YXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdp bkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdp bkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyMzgsNiArMTI0MCw3IEBAIEhiYUxpbmUKIEhl YWRsaW5lSnNvblN0YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitI ZWFwQmF0Y2hEYXRhCiBIZWFwQ2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQog SGVhcFBhZ2VGcmVlemUKQEAgLTEzMTcsNiArMTMyMCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNl CiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0 Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEK IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpAQCAtMzUzMSwxOCArMzUzNiwxNyBAQCBhbWNhbnJl dHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlv bgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgog YW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBs ZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlv bgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9u c19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlv bgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2Nt cHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNs ZWFudXBfZnVuY3Rpb24KLS0gCjIuNTMuMAoK --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v21-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig615g13 RnJvbSBiMjFkM2FmODhhYTVhZjZjMDM4ZTg2MDQ2NWQ2NDRhNDc0MjVmMTMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwMy8xNV0g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW5kZXggc2NhbiBpbnRlcmZhY2UuCgpBZGQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90LCBhIG5ldyB0YWJsZSBBTSBjYWxsYmFjayB0aGF0IHdyYXBzIGJv dGgKcGxhaW4gYW5kIGluZGV4LW9ubHkgaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4g IFR3byBuZXcKVGFibGVBbVJvdXRpbmUgY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIC0tIG9uZSBm b3IgcGxhaW4gc2NhbnMgYW5kIG9uZQpmb3IgaW5kZXgtb25seSBzY2FucyAtLSB3aGljaCBhbiB1 cGNvbWluZyBjb21taXQgdGhhdCBhZGRzIHRoZQphbWdldGJhdGNoIGludGVyZmFjZSB3aWxsIGV4 cGFuZCB0byBmb3VyLiAgVGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGlzCnJlc29sdmVkIG9uY2Ug aW4gaW5kZXhfYmVnaW5zY2FuLCBhbmQgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVy Cih4c19nZXRuZXh0X3Nsb3QpIG9uIHRoZSBJbmRleFNjYW5EZXNjIHdoZW4gdGhlIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdApzaGltIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4ZWN1dG9yIG5v ZGVzLgoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0IG9mIHRo ZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZpc2liaWxp dHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3QgcGVyZm9y bSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90LWJhc2Vk IGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywgd2hpY2gg bm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVjdGx5LiAg TW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgaW1w cm92ZW1lbnQ6IHRhYmxlIEFNcyBjYW4gbm93CmltcGxlbWVudCBpbmRleC1vbmx5IHNjYW5zIHRo YXQgYXJlIG5vdCB0aWVkIHRvIGhlYXBhbSdzIHZpc2liaWxpdHkgbWFwLgoKQSBzbWFsbCBtaW5v cml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGZ1bmRhbWVudGFsbHkgbmVlZCB0 bwpwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTSAoYm90aCBwZXJmb3JtIGNvbnN0cmFpbnQgZW5m b3JjZW1lbnQpLiAgVGhlc2UKY2FsbGVycyBkb24ndCBhY3R1YWxseSBwZXJmb3JtIGluZGV4IHNj YW5zIChldmVuIGlmIHRoZWlyIFRJRHMgYXJlIHRha2VuCmZyb20gYW4gaW5kZXgpLCBhbmQgaGF2 ZSBubyBuZWVkIGZvciBtb3N0IG9mIHRoZSBpbmRleCBzY2FuIG1hY2hpbmVyeS4KU3dpdGNoIHRo ZXNlIGNhbGxlcnMgb3ZlciB0byB0aGUgbmV3IGZldGNoX3RpZCBpbnRlcmZhY2UgKHdoaWNoIHJl cGxhY2VzCnRoZSBwcmV2aW91cyBUSUQtYmFzZWQgaW5kZXhfZmV0Y2hfdHVwbGUgaW50ZXJmYWNl KS4gIEFsbCBpbmRleCBzY2FuCmNhbGxlcnMgbm93IHVzZSB0aGUgbmV3IHNsb3QtYmFzZWQgaW50 ZXJmYWNlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QpLgoKSW5kZXgtb25seSBzY2FuIGNhbGxl cnMgcGFzcyB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgYSBUdXBsZVRhYmxlU2xvdAood2hpY2gg dGhlIHRhYmxlIEFNIG5lZWRzIGludGVybmFsbHkgZm9yIGhlYXAgZmV0Y2hlcyksIGJ1dCBjb250 aW51ZSB0bwpyZWFkIHRoZWlyIHJlc3VsdHMgZnJvbSBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMg c3VjaCBhcyB4c19pdHVwIChyYXRoZXIKdGhhbiBmcm9tIHRoZSBzbG90IGl0c2VsZikuICBBbGwg Y2FsbGVycyBjYW4gY29udGludWUgdG8gcmVseSBvbiB0aGUKc2NhbiBkZXNjcmlwdG9yJ3MgeHNf aGVhcHRpZCBmaWVsZCBiZWluZyBzZXQgb24gZWFjaCBjYWxsLgoKVGhlIFZJU0lURURfUEFHRVNf TElNSVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpjYXAg c2NhbiBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3VnaCBh IG5ldyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0KSwg cmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGluZyB0 aGUgc2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBiZWNh dXNlIGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwpsb25n ZXIgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hlZCBi eSB0aGUgdGFibGUKQU0uICBTaW1pbGFybHksIG5vZGVJbmRleG9ubHlzY2FuLmMgY2FuIG5vIGxv bmdlciB1c2UgSW5zdHJDb3VudFR1cGxlczIKdG8gY291bnQgaGVhcCBmZXRjaGVzIGR1cmluZyBh biBFWFBMQUlOIEFOQUxZWkUuICBJbnN0ZWFkIGl0IHJlbGllcyBvbgpoZWFwYW0gbWFpbnRhaW5p bmcgYSBuZXcgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uLm50YWJsZWZldGNoZXMgZmllbGQuCgpU aG91Z2ggaW5kZXBlbmRlbnRseSB1c2VmdWwsIHRoaXMgY29tbWl0IGlzIHByZXBhcmF0b3J5IHdv cmsgZm9yIGFuCnVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGFuIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlLCB3aGVyZQp0aGUgdGFibGUgQU0gdGFrZXMgZnVsbCByZXNwb25zaWJp bGl0eSBmb3IgbWFuYWdpbmcgdGhlIHByb2dyZXNzIG9mCmluZGV4IHNjYW5zLiAgVGhhdCB3aWxs IG1vdmUgbW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2Nyb2xsYWJsZQpjdXJzb3JzIG91 dCBvZiBpbmRleCBBTXMgYW5kIGludG8gdGFibGUgQU1zLCBtYWtpbmcgaXQgZXNzZW50aWFsIHRo YXQKZXhlY3V0b3Igbm9kZXMgcGFzcyB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiBkb3duIHRv IHRoZSB0YWJsZSBBTS4KClRoZSBoZWFwYW0gaW1wbGVtZW50YXRpb25zIG1ha2UgYWdncmVzc2l2 ZSB1c2Ugb2YgZm9yY2VkIGlubGluaW5nIHRvCmVuc3VyZSB0aGF0IHBsYWluIGFuZCBpbmRleC1v bmx5IGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHNwZWNpYWxpemVkIGF0CmNvbXBpbGUgdGltZSBkZXNw aXRlIHNoYXJpbmcgYSBjb21tb24gaW1wbGVtZW50YXRpb24uICBUZXN0aW5nIGhhcyBzaG93bgp0 aGlzIGlzIG5lY2Vzc2FyeSB0byBrZWVwIGljYWNoZSBtaXNzZXMgdG8gYSBtaW5pbXVtLCBhdCBs ZWFzdCB3aXRoIHRoZQp0d28gdXBjb21pbmcgYW1nZXRiYXRjaCB2YXJpYW50cy4KCkF1dGhvcjog UGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8 YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25k cmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xem1ZcWhhY0JIMTYx cGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICB8ICAzNCArKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8IDIwOCArKysrKysrKystLS0tLS0KIHNyYy9p bmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oICAgICB8ICAgMyArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCAyOTQgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgICAgfCAgMjcgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjA4ICsrKysrLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyAgICAgIHwgIDEwICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvY29uc3RyYWludC5jICAgICAgICAgIHwgIDI4ICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFw SW5kZXhzY2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uYyAgIHwgMTA5ICstLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAg ICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAg IHwgIDYxICstLS0tCiAyMyBmaWxlcyBjaGFuZ2VkLCA2MDYgaW5zZXJ0aW9ucygrKSwgNTA3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggYjY5MzIwYTdmLi5kYjYyZTBjYTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2Ns ZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJCQkJ IFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCkBAIC0xODMs MTUgKzE4NCwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhy ZWwsCisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNj YW4sCiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRl eF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNj IHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAppbmRleCBjYzkwYzgyMWIuLjIyZTkxMzI4NiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aApAQCAtMTI3LDcgKzEyNyw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQog CSAqLwogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAotCS8qIEN1cnJlbnQgaGVhcCBibG9jaydzIGNvcnJl c3BvbmRpbmcgcGFnZSBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KKwkvKiBGb3IgdmlzaWJpbGl0 eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8K IAlCdWZmZXIJCXhzX3ZtYnVmZmVyOwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKQEAgLTQyOSwx NiArNDI5LDE1IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxl cyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAgVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUp OwogCiAvKiBpbiBoZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAqLwotZXh0ZXJuIEluZGV4RmV0Y2hU YWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBm bGFncyk7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRh YmxlRGF0YSAqc2Nhbik7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBh bV9pbmRleF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJICB1 aW50MzIgZmxhZ3MpOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Q b2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIs IFNuYXBzaG90IHNuYXBzaG90LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29s ICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxsKTsKLWV4dGVybiBib29sIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSBJ dGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIFR1cGxlVGFibGVT bG90ICpzbG90LCBib29sICpoZWFwX2NvbnRpbnVlLAotCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFk KTsKK2V4dGVybiBib29sIGhlYXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRl ciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg Ym9vbCAqYWxsX2RlYWQpOwogCiAvKiBpbiBoZWFwL3BydW5laGVhcC5jICovCiBleHRlcm4gdm9p ZCBoZWFwX3BhZ2VfcHJ1bmVfb3B0KFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKaW5kZXggOTYwYWJmNmMyLi45ODZiNGY1ZjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNp bmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNp bmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCkBAIC0yNCw2ICsyNSw3IEBACiAKIAog c3RydWN0IFBhcmFsbGVsVGFibGVTY2FuRGVzY0RhdGE7CitzdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7 CiAKIC8qCiAgKiBHZW5lcmljIGRlc2NyaXB0b3IgZm9yIHRhYmxlIHNjYW5zLiBUaGlzIGlzIHRo ZSBiYXNlLWNsYXNzIGZvciB0YWJsZSBzY2FucywKQEAgLTExNywxMiArMTE5LDEzIEBAIHR5cGVk ZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2Nr VGFibGVTY2FuV29ya2VyOwogLyoKICAqIEJhc2UgY2xhc3MgZm9yIGZldGNoZXMgZnJvbSBhIHRh YmxlIHZpYSBhbiBpbmRleC4gVGhpcyBpcyB0aGUgYmFzZS1jbGFzcwogICogZm9yIHN1Y2ggc2Nh bnMsIHdoaWNoIG5lZWRzIHRvIGJlIGVtYmVkZGVkIGluIHRoZSByZXNwZWN0aXZlIHN0cnVjdCBm b3IKLSAqIGluZGl2aWR1YWwgQU1zLgorICogaW5kaXZpZHVhbCB0YWJsZSBBTXMuCisgKgorICog VGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgdGFibGUgQU0gc3BlY2lmaWMgcG9ydGlvbiBvZiBJbmRl eFNjYW5EZXNjRGF0YSwKKyAqIGFjY2Vzc2VkIHRocm91Z2ggaXRzIHhzX2hlYXBmZXRjaCBmaWVs ZC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewotCVJlbGF0aW9u CXJlbDsKLQogCS8qCiAJICogQml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhlIHJl bGF0aW9uLiBObyBTT19JTlRFUk5BTF9GTEFHUyBhcmUKIAkgKiBwZXJtaXR0ZWQuCkBAIC0xNjYs MTAgKzE2OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCXN0cnVjdCBJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CiAKIAkvKgotCSAqIEluIGFuIGlu ZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIGFtZ2V0dHVwbGUgY2FsbCBtdXN0IGZpbGwgZWl0 aGVyCi0JICogeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1cCAoYW5kIHhzX2hp dHVwZGVzYykgdG8gcHJvdmlkZSB0aGUKLQkgKiBkYXRhIHJldHVybmVkIGJ5IHRoZSBzY2FuLiAg SXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZSB0aGUgaGVhcAotCSAqIGZvcm1hdCB3aWxs IGJlIHVzZWQuCisJICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3NmdWwgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90IGNhbGwgbXVzdAorCSAqIGZpbGwgZWl0aGVyIHhzX2l0dXAgKGFu ZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvCisJICogcHJv dmlkZSB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGlu IHdoaWNoIGNhc2UKKwkgKiB0aGUgaGVhcCBmb3JtYXQgd2lsbCBiZSB1c2VkLgogCSAqLwogCUlu ZGV4VHVwbGUJeHNfaXR1cDsJCS8qIGluZGV4IHR1cGxlIHJldHVybmVkIGJ5IEFNICovCiAJc3Ry dWN0IFR1cGxlRGVzY0RhdGEgKnhzX2l0dXBkZXNjOwkvKiByb3d0eXBlIGRlc2NyaXB0b3Igb2Yg eHNfaXR1cCAqLwpAQCAtMTgxLDYgKzE4NCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YQogCQkJCQkJCQkJICogZnVydGhlciByZXN1bHRzICovCiAJSW5kZXhGZXRjaFRhYmxl RGF0YSAqeHNfaGVhcGZldGNoOwogCisJLyoKKwkgKiBSZXNvbHZlZCB0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3QgY2FsbGJhY2ssIHdoaWNoIGlzIHNldCBieQorCSAqIHRhYmxlX2luZGV4X2ZldGNo X2JlZ2luIGF0IHRoZSBzdGFydCBvZiBhbWdldHR1cGxlIHNjYW5zCisJICovCisJYm9vbAkJKCp4 c19nZXRuZXh0X3Nsb3QpIChzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCisJCQkJCQkJ CQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CisKIAlib29sCQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVz dCBiZSByZWNoZWNrZWQgKi8KIAogCS8qCkBAIC0xOTQsNiArMjA1LDEzIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkgICAqeHNfb3JkZXJieW51bGxzOwogCWJvb2wJ CXhzX3JlY2hlY2tvcmRlcmJ5OwogCisJLyoKKwkgKiBBbiBhcHByb3hpbWF0ZSBsaW1pdCBvbiB0 aGUgYW1vdW50IG9mIHdvcmssIG1lYXN1cmVkIGluIHBhZ2VzIHRvdWNoZWQsCisJICogaW1wb3Nl ZCBvbiB0aGUgaW5kZXggc2Nhbi4gIFRoZSBkZWZhdWx0LCAwLCBtZWFucyBubyBsaW1pdC4gIFVz ZWQgYnkKKwkgKiBzZWxmdW5jcy5jIHRvIGJvdW5kIHRoZSBjb3N0IG9mIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoKS4KKwkgKi8KKwl1aW50OAkJeHNfdmlzaXRlZF9wYWdlc19saW1pdDsK KwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkg Ki8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKIH0g SW5kZXhTY2FuRGVzY0RhdGE7CkBAIC0yMDgsOCArMjI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFy YWxsZWxJbmRleFNjYW5EZXNjRGF0YQogCWNoYXIJCXBzX3NuYXBzaG90X2RhdGFbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKIH0JCQlQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhOwogCi1zdHJ1Y3Qg VHVwbGVUYWJsZVNsb3Q7Ci0KIC8qIFN0cnVjdCBmb3Igc3RvcmFnZS1vci1pbmRleCBzY2FucyBv ZiBzeXN0ZW0gdGFibGVzICovCiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIHsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCmluZGV4IDQ2NDc3ODVmZC4uZTA1YzA5ZmRiIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZm5kZWYgVEFCTEVBTV9ICiAjZGVmaW5lIFRBQkxFQU1f SAogCisjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4u aCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCkBA IC00NDIsNjAgKzQ0Myw2NiBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwog CiAJLyoKLQkgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlvbiwgYXMg bmVlZGVkIHdoZW4gZmV0Y2hpbmcKLQkgKiB0dXBsZXMgZm9yIGFuIGluZGV4IHNjYW4uICBUaGUg Y2FsbGJhY2sgaGFzIHRvIHJldHVybiBhbgotCSAqIEluZGV4RmV0Y2hUYWJsZURhdGEsIHdoaWNo IHRoZSBBTSB3aWxsIHR5cGljYWxseSBlbWJlZCBpbiBhIGxhcmdlcgotCSAqIHN0cnVjdHVyZSB3 aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisJICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMs IGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxlcyBmb3IgYW4gaW5kZXgKKwkgKiBzY2FuLiAg VGhlIGNhbGxiYWNrIGhhcyB0byByZXR1cm4gYW4gSW5kZXhGZXRjaFRhYmxlRGF0YSwgd2hpY2gg dGhlIEFNCisJICogd2lsbCB0eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIgc3RydWN0dXJlIHdp dGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKwkgKiBBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1 cmUgd2lsbCBiZSBzdG9yZWQgaW4gcGFzc2VkIGluZGV4IHNjYW4KKwkgKiBkZXNjcmlwdG9yJ3Mg eHNfaGVhcGZldGNoIGZpZWxkIGJ5IHRoZSBjYWxsZXIgKGNvcmUgZXhlY3V0b3IgY29kZSkuCiAJ ICoKIAkgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVy bHlpbmcgdGFibGUgc2NhbgogCSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3Jl IGluZm9ybWF0aW9uIG9uIHBhc3NpbmcgdGhlc2UuCiAJICoKLQkgKiBUdXBsZXMgZm9yIGFuIGlu ZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgaW5kZXhfZmV0Y2hfdHVwbGUuCisJICog Q2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRu ZXh0X3Nsb3QgdG8KKwkgKiB0aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZCBjYWxsYmFjay4gIFR1 cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYQorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xv dCgpLiAgTm8gc2VwYXJhdGUgc2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KKwkgKiB0aGlz IHN0cnVjdCEKKwkgKgorCSAqIEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2Ug Y2FsbGJhY2sgKHN0b3JlZCBoZXJlKSB3b3VsZAorCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVj aWFsaXplZCB2YXJpYW50cyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKKwkgKiBtaW5p bWFsIGNvZGUgYmFzZWQgb24gY29uZGl0aW9ucyB0aGF0IGFyZSBmaXhlZCBmb3IgdGhlIHdob2xl IHNjYW4gYXMKKwkgKiBhbiBvcHRpbWl6YXRpb24gKGUuZy4sIHZhcmlhbnRzIGZvciBwbGFpbiBp bmRleCBzY2FucyBhbmQgaW5kZXgtb25seQorCSAqIHNjYW5zLCBlYWNoIHdpdGggZmV3ZXIgYnJh bmNoZXMpLgorCSAqCisJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1 cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKKwkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5l ZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgorCSAqIHRoZSB0dXBs ZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRz IHRvIGFuCisJICogb2xkZXIgdmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJICovCi0Jc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiByZWwsIHVp bnQzMiBmbGFncyk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hf YmVnaW4pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3Mp OwogCiAJLyoKLQkgKiBSZXNldCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxl YXNlIGNyb3NzIGluZGV4IGZldGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhGZXRjaFRh YmxlRGF0YS4KKwkgKiBSZXNldCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0YWJs ZS1vd25lZCByZXNvdXJjZXMuCiAJICovCi0Jdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKHN0 cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpkYXRhKTsKKwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jl c2V0KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogCS8qCi0JICogUmVsZWFzZSByZXNvdXJjZXMg YW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2guCisJICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRl YWxsb2NhdGUgaW5kZXggc2NhbiBzdGF0ZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2Vu ZCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDYWxs YmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcwor CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBh dCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBh Y2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0 aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJ ICoKLQkgKiBOb3RlIHRoYXQgQU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRl eGVzIHdoZW4gaW5kZXhlZAotCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1 cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCi0JICogdGhlIHR1cGxlIHRoYXQgaXMg dmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KLQkg KiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwg Y2FsbGJhY2sgZm9yIHNpbmdsZS1zaG90IFRJRCBsb29rdXBzIHVzZWQgYnkKKwkgKiBjb25zdHJh aW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgogCSAqCi0J ICogKmNhbGxfYWdhaW4gaXMgZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gaW5kZXhfZmV0Y2hf dHVwbGUgZm9yIGEgdGlkLgotCSAqIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVw bGUgbWF0Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLQkgKiBuZWVkcyB0byBiZSBzZXQgdG8g dHJ1ZSBieSBpbmRleF9mZXRjaF90dXBsZSwgc2lnbmFsaW5nIHRvIHRoZSBjYWxsZXIKLQkgKiB0 aGF0IGluZGV4X2ZldGNoX3R1cGxlIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBzYW1l IHRpZC4KLQkgKgotCSAqICphbGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHNob3Vs ZCBiZSBzZXQgdG8gdHJ1ZSBieQotCSAqIGluZGV4X2ZldGNoX3R1cGxlIGlmZiBpdCBpcyBndWFy YW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUKLQkgKiB0aGF0IHR1cGxlLiBJbmRl eCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbgotCSAqIGZ1 dHVyZSBzZWFyY2hlcy4KLQkgKi8KLQlib29sCQkoKmluZGV4X2ZldGNoX3R1cGxlKSAoc3RydWN0 IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwK LQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90LAotCQkJCQkJCQkJICBib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCk7Ci0K LQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBv cGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICog KmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0byB0cnVl IGJ5IGZldGNoX3RpZAorCSAqIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBu ZWVkcyB0byBzZWUgdGhhdCB0dXBsZS4gSW5kZXggQU1zCisJICogY2FuIHVzZSB0aGF0IHRvIGF2 b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUgc2VhcmNoZXMuCiAJICovCisJYm9vbAkJ KCpmZXRjaF90aWQpIChSZWxhdGlvbiByZWwsCisJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJ CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 LAorCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBg dGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKQEAgLTEyMzEs MTUgKzEyMzgsMTggQEAgdGFibGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxhdGlvbiBy ZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKIAogLyoKICAqIFByZXBhcmUgdG8gZmV0 Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVkZWQgd2hlbiBmZXRjaGluZyB0dXBs ZXMKLSAqIGZvciBhbiBpbmRleCBzY2FuLgorICogZm9yIGFuIGluZGV4IHNjYW4uICBDYWxsZXIg cHV0cyB0aGlzIGluIHRoZSBwYXNzZWQgaW5kZXggc2NhbiBkZXNjcmlwdG9yJ3MKKyAqIHhzX2hl YXBmZXRjaCBmaWVsZC4KKyAqCisgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuCiAgKgogICogZmxhZ3Mg aXMgYSBiaXRtYXNrIG9mIFNjYW5PcHRpb25zLiBObyBTT19JTlRFUk5BTF9GTEFHUyBhcmUgcGVy bWl0dGVkLgotICoKLSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRj aGVkIHZpYSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpLgogICovCiBzdGF0aWMgaW5saW5lIElu ZGV4RmV0Y2hUYWJsZURhdGEgKgotdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVs LCB1aW50MzIgZmxhZ3MpCit0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihJbmRleFNjYW5EZXNjIHNj YW4sIHVpbnQzMiBmbGFncykKIHsKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5oZWFwUmVsYXRpb247 CisKIAlBc3NlcnQoKGZsYWdzICYgU09fSU5URVJOQUxfRkxBR1MpID09IDApOwogCiAJLyoKQEAg LTEyNTAsNzQgKzEyNjAsMTAzIEBAIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJl bCwgdWludDMyIGZsYWdzKQogCWlmICh1bmxpa2VseShUcmFuc2FjdGlvbklkSXNWYWxpZChDaGVj a1hpZEFsaXZlKSAmJiAhYnN5c3NjYW4pKQogCQllbG9nKEVSUk9SLCAic2NhbiBzdGFydGVkIGR1 cmluZyBsb2dpY2FsIGRlY29kaW5nIik7CiAKLQlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRl eF9mZXRjaF9iZWdpbihyZWwsIGZsYWdzKTsKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRl eF9mZXRjaF9iZWdpbihzY2FuLCBmbGFncyk7CiB9CiAKIC8qCi0gKiBSZXNldCBpbmRleCBmZXRj aC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxlYXNlIGNyb3NzIGluZGV4IGZldGNoIHJlc291cmNl cwotICogaGVsZCBpbiBJbmRleEZldGNoVGFibGVEYXRhLgorICogUmVzZXQgaW5kZXggc2Nhbiwg Zm9yIGEgcmVzY2FuLiBSZXNldHMgdGFibGUtb3duZWQgcmVzb3VyY2VzLgogICovCiBzdGF0aWMg aW5saW5lIHZvaWQKLXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQordGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu KQogewotCXNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CisJ QXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3Rh YmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogfQogCiAvKgotICogUmVsZWFzZSByZXNv dXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2guCisgKiBSZWxlYXNlIHJlc291cmNlcyBh bmQgZGVhbGxvY2F0ZSBpbmRleCBmZXRjaCBoZWxkIGluIHRoZSBzY2FuJ3MgdW5kZXJseWluZwor ICogSW5kZXhGZXRjaFRhYmxlRGF0YS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9p bmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCit0YWJsZV9p bmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewotCXNjYW4tPnJlbC0+cmRfdGFi bGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gp OworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nh bik7CiB9CiAKIC8qCi0gKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxl IGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwotICogYSB2aXNpYmlsaXR5IHRlc3Qg YWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQK LSAqIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLiBO b3RlIHRoYXQgKnRpZCBtYXkgYmUKLSAqIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgKHNl ZSBsYXRlciByZW1hcmtzIG9uIG11bHRpcGxlIHJvdyB2ZXJzaW9ucwotICogcmVhY2hhYmxlIHZp YSBhIHNpbmdsZSBpbmRleCBlbnRyeSkuCisgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFu IGluZGV4IHNjYW4gaW50byBgc2xvdGAsIHNjYW5uaW5nIGluIHRoZQorICogc3BlY2lmaWVkIGRp cmVjdGlvbi4gIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5 cyBhbmQKKyAqIHRoZSBzbmFwc2hvdCB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0 dXBsZSBpcyBzdG9yZWQgaW4gdGhlCisgKiBzcGVjaWZpZWQgc2xvdC4KICAqCi0gKiAqY2FsbF9h Z2FpbiBuZWVkcyB0byBiZSBmYWxzZSBvbiB0aGUgZmlyc3QgY2FsbCB0byB0YWJsZV9pbmRleF9m ZXRjaF90dXBsZSgpIGZvcgotICogYSB0aWQuIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3Ro ZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLSAqIHdpbGwgYmUgc2V0IHRv IHRydWUsIHNpZ25hbGluZyB0aGF0IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgc2hvdWxkIGJl IGNhbGxlZAotICogYWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4KKyAqIERpc3BhdGNoZXMgdGhyb3Vn aCBzY2FuLT54c19nZXRuZXh0X3Nsb3QsIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgYnkKKyAqIHRo ZSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX2JlZ2luIGNhbGxiYWNrLgogICoKLSAqICphbGxfZGVh ZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHdpbGwgYmUgc2V0IHRvIHRydWUgYnkKLSAqIHRh YmxlX2luZGV4X2ZldGNoX3R1cGxlKCkgaWZmIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNr ZW5kIG5lZWRzIHRvIHNlZQotICogdGhhdCB0dXBsZS4gSW5kZXggQU1zIGNhbiB1c2UgdGhhdCB0 byBhdm9pZCByZXR1cm5pbmcgdGhhdCB0aWQgaW4gZnV0dXJlCi0gKiBzZWFyY2hlcy4KKyAqIE9u IHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBo ZWxkLCBhbmQgd2lsbCBiZQorICogcmVsZWFzZWQgYnkgYSBmdXR1cmUgdGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90IG9yIGluZGV4X2VuZHNjYW4gY2FsbC4KICAqCi0gKiBUaGUgZGlmZmVyZW5jZSBi ZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkK LSAqIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2 ZXJzaW9uIG9mIGEgcm93IGlmCi0gKiB0aGUgQU0gc3VwcG9ydHMgc3RvcmluZyBtdWx0aXBsZSBy b3cgdmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNpbmdsZSBpbmRleAotICogZW50cnkgKGxpa2Ug aGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBvbmx5 Ci0gKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRpZGAuIE91dHNpZGUgb2YgaW5k ZXggZW50cnkgLT50YWJsZSB0dXBsZQotICogbG9va3VwcywgdGFibGVfdHVwbGVfZmV0Y2hfcm93 X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQuCisgKiBOb3RlOiBjYWxsZXIgbXVz dCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQor ICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNl IHdlIGRvbid0IGhhdmUKKyAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRs eSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICoKKyAqIEZvciBpbmRleC1vbmx5IHNjYW5zLCB0aGUg Y2FsbGJhY2sgYWxzbyBmaWxscyB4c19pdHVwL3hzX2l0dXBkZXNjIG9yCisgKiB4c19oaXR1cC94 c19oaXR1cGRlc2MgKG9yIGJvdGgpIHNvIHRoYXQgaW5kZXggZGF0YSBjYW4gYmUgcmV0dXJuZWQg d2l0aG91dAorICogYSBoZWFwIGZldGNoLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKLXRhYmxl X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAotCQkJ CQkJSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQlUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCWJvb2wgKmNhbGxfYWdhaW4sIGJvb2wgKmFsbF9kZWFk KQordGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiB7Ci0JcmV0dXJu IHNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFw c2hvdCwKLQkJCQkJCQkJCQkJCQlzbG90LCBjYWxsX2FnYWluLAotCQkJCQkJCQkJCQkJCWFsbF9k ZWFkKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXJldHVybiBzY2FuLT54c19n ZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90KTsKIH0KIAogLyoKLSAqIFRoaXMgaXMg YSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpIHdo aWNoCi0gKiByZXR1cm5zIHdoZXRoZXIgdGhlcmUgYXJlIHRhYmxlIHR1cGxlIGl0ZW1zIGNvcnJl c3BvbmRpbmcgdG8gYW4gaW5kZXgKLSAqIGVudHJ5LiAgVGhpcyBsaWtlbHkgaXMgb25seSB1c2Vm dWwgdG8gdmVyaWZ5IGlmIHRoZXJlJ3MgYSBjb25mbGljdCBpbiBhCi0gKiB1bmlxdWUgaW5kZXgu CisgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNp YmlsaXR5IHRlc3QgYWNjb3JkaW5nCisgKiB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBm b3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMKKyAqIHRydWUsIGZh bHNlIG90aGVyd2lzZS4gIFRoaXMgaXMgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIGRlc2lnbmVkIGZv ciB1c2UgYnkKKyAqIGNvbnN0cmFpbnQgZW5mb3JjZW1lbnQgY29kZSwgd2hlcmUgcGFzc2luZyBh IFRJRCBjYW4ndCBiZSBhdm9pZGVkLgorICoKKyAqIE5vdGUgdGhhdCAqdGlkIG1heSBiZSBtb2Rp ZmllZCB3aGVuIHdlIHJldHVybiB0cnVlIChlLmcuIGR1ZSB0byBmb2xsb3dpbmcgYQorICogSE9U IGNoYWluIGluIGEgaGVhcGFtIHRhYmxlKS4gIENhbGxlciBzaG91bGQgY29uc2lkZXIgcGFzc2lu ZyBhIHBvaW50ZXIgdG8KKyAqIGEgbXV0YWJsZSBjb3B5IG9mIHRoZWlyIG9yaWdpbmFsIFRJRCB0 byBhdm9pZCB1bndhbnRlZCBzaWRlLWVmZmVjdHMuCisgKgorICogSWYgYWxsX2RlYWQgaXMgbm90 IE5VTEwsICphbGxfZGVhZCB3aWxsIGJlIHNldCB0byB0cnVlIGhlcmUgaWZmIGl0IGlzCisgKiBn dWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUgYW55IHR1cGxlIHJlYWNoYWJs ZSB0aHJvdWdoCisgKiBjYWxsZXIncyBUSUQuICBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgc2FmZSB0 byBtYXJrIGFuIGluZGV4IHR1cGxlIGNvbnRhaW5pbmcKKyAqIHRoaXMgVElEIGFzIExQX0RFQUQu CisgKgorICogVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRhYmxlX3R1cGxlX2ZldGNoX3Jv d192ZXJzaW9uKCkgYW5kIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIHRoYXQgd2UgcmV0dXJuIHRoZSBj dXJyZW50bHkgdmlzaWJsZSB2ZXJzaW9uIG9mIGEgcm93LCB3aGljaAorICogbWF0dGVycyB3aXRo IEFNcyB0aGF0IHN1cHBvcnQgc3RvcmluZyBtdWx0aXBsZSByb3cgdmVyc2lvbnMgcmVhY2hhYmxl IHZpYSBhCisgKiBzaW5nbGUgVElEIChlLmcuLCBkdWUgdG8gaGVhcGFtJ3MgSE9UIGNoYWlucyku ICBUbyByZWxpYWJseSBldmFsdWF0ZQorICogZXhhY3RseSB0aGUgdHVwbGUgYXQgYHRpZGAsIGNh bGwgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBpbnN0ZWFkLgogICovCi1leHRlcm4g Ym9vbCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCi0JCQkJCQkJ CQkJICBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJ CQkJCQkJCQkgIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBpbmxpbmUgYm9vbAordGFibGVfZmV0 Y2hfdGlkKFJlbGF0aW9uIHJlbCwKKwkJCQlJdGVtUG9pbnRlciB0aWQsCisJCQkJU25hcHNob3Qg c25hcHNob3QsCisJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJYm9vbCAqYWxsX2RlYWQp Cit7CisJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+ZmV0Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hv dCwgc2xvdCwgYWxsX2RlYWQpOworfQorCisvKgorICogQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91 bmQgdGFibGVfZmV0Y2hfdGlkKCkgZm9yIGNhbGxlcnMgdGhhdCBkb24ndCB3YW50IHRvCisgKiBw cm92aWRlIHRoZWlyIG93biBzbG90LgorICoKKyAqIENhbGxlciBzaG91bGQgbm90ZSB0aGUgdGFi bGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2RpZmllZAorICogd2hlbiB3 ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzLgorICovCitleHRlcm4gYm9vbCB0YWJsZV9mZXRj aF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJ CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAK IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMxLDkgKzEzNzAsOCBAQCBleHRlcm4gYm9vbCB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCiAgKiBgc25hcHNob3Rg LiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJl dHVybnMKICAqIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFibGVfaW5kZXhf ZmV0Y2hfdHVwbGUncyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgot ICogdGhlc2UgZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9u IG91dHNpZGUgb2YgaW5kZXgKLSAqIGVudHJ5LT50YWJsZSB0dXBsZSBsb29rdXBzLgorICogU2Vl IHRhYmxlX2ZldGNoX3RpZCdzIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZXNlCisgKiBmdW5jdGlvbnMgaXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFi bGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oUmVsYXRpb24gcmVsLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9pbnN0cnVtZW50X25vZGUuaAppbmRleCAyYTBmZjM3N2EuLjc4ZjgxMGFhYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2VhcmNoIGNvdW50 IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwpICovCiAJdWlu dDY0CQluc2VhcmNoZXM7CisKKwkvKiBUYWJsZSB0dXBsZXMgZmV0Y2hlZCBjb3VudCAoaW5jcmVt ZW50ZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpICovCisJdWludDY0CQludGFibGV0dXBsZWZl dGNoZXM7CiB9IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKaW5kZXggMDkwY2ZjY2Y2Li4wYjE4ZTc0Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0x Nzg1LDcgKzE3ODUsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCUluc3Ry dW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5m bwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQog ICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRo ZSB0YWJsZQotICoJCVZNQnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNpYmlsaXR5IG1h cCB0ZXN0aW5nLCBpZiBhbnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJhbGxlbCBpbmRl eC1vbmx5IHNjYW4gZGVzY3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBhdHRudW1zIG9m IG5hbWUgdHlwZWQgY29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KICAqCQlOYW1lQ1N0cmlu Z0NvdW50ICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0dE51bXMgYXJy YXkKQEAgLTE4MDgsNyArMTgwNyw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0 ZQogCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90 ICppb3NzX1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Q c2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlp b3NzX05hbWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwppbmRleCAwN2YwNzE4OGQuLjhlOTZmOTFlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCkBAIC02NTcsOCArNjU3LDggQEAgaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQl0 YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4 X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIE5VTEwsIDAsIDAsCi0J CQkJCQkJCQlTT19OT05FKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAs IE9sZEluZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwLCBTT19O T05FKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQog CWVsc2UKQEAgLTY5Niw3ICs2OTYsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3Rl cihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4g IT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xv dChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgc2xvdCkpCiAJ CQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2 ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNTU2LDcgKzI1NTcsNiBAQCBzdGF0aWMgY29uc3Qg VGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0g aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9p bmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNo X2VuZCwKLQkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAK IAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0X3Nw ZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKQEAgLTI1NjYsNiAr MjU2Niw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsK IAkudHVwbGVfdXBkYXRlID0gaGVhcGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhl YXBhbV90dXBsZV9sb2NrLAogCisJLmZldGNoX3RpZCA9IGhlYXBhbV9mZXRjaF90aWQsCiAJLnR1 cGxlX2ZldGNoX3Jvd192ZXJzaW9uID0gaGVhcGFtX2ZldGNoX3Jvd192ZXJzaW9uLAogCS50dXBs ZV9nZXRfbGF0ZXN0X3RpZCA9IGhlYXBfZ2V0X2xhdGVzdF90aWQsCiAJLnR1cGxlX3RpZF92YWxp ZCA9IGhlYXBhbV90dXBsZV90aWRfdmFsaWQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faW5kZXhzY2FuLmMKaW5kZXggYzM2YjgwNGQxLi45YjhiZDdjYzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE0LDMzICsxNCw2MyBAQAogICov CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2lu Y2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitzdGF0aWMgYm9v bCBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgIFR1 cGxlVGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9vbmx5X2FtZ2V0 dHVwbGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworc3RhdGlj IHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxl X2ltcGwoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJCQkJ CQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJ CQkJCQkJCQkJCQkgYm9vbCAqYWxsX2RlYWQpOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNf aW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9v bmx5KTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRl eF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJCSAgIEluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAq c2xvdCwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmhlYXBfY29udGludWUpOworCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCiAgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqLwogCiBJbmRleEZldGNoVGFibGVEYXRhICoKLWhlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKK2hlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIHsKIAlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAot CWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKIAloc2Nhbi0+eHNfYmFzZS5mbGFncyA9IGZsYWdz OwogCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAloc2Nhbi0+eHNfdm1idWZmZXIg PSBJbnZhbGlkQnVmZmVyOwogCisJLyogUmVzb2x2ZSB3aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVt ZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8KKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVw KQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV9hbWdldHR1cGxl X25leHQ7CisJZWxzZQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxh aW5fYW1nZXR0dXBsZV9uZXh0OworCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KIAogdm9p ZAotaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCito ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewotCUluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisJSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVh cGZldGNoOwogCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCXsKQEAgLTU2 LDkgKzg2LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4pCiB9CiAKIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbikKK2hlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQog ewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNj YW47CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikg c2Nhbi0+eHNfaGVhcGZldGNoOwogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwog CkBAIC0yMjcsMTQgKzI1Nyw3NiBAQCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVy IHRpZCwgUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJcmV0dXJuIGZhbHNlOwog fQogCisvKgorICogU2ltcGxlLCBzaW5nbGUtc2hvdCBUSUQgbG9va3VwIGZvciBjb25zdHJhaW50 IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZQorICogY2hlY2tzIGFuZCBzaW1pbGFyKS4gIFRoaXMg aXMgZXNzZW50aWFsbHkganVzdCBhIGhlYXBfaG90X3NlYXJjaF9idWZmZXIKKyAqIHdyYXBwZXIu CisgKgorICogVGhpcyBpc24ndCBhY3R1YWxseSByZWxhdGVkIHRvIGluZGV4IHNjYW5zLCBidXQg a2VlcGluZyBpdCBuZWFyCisgKiBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyIG1heSBoZWxwIHRoZSBj b21waWxlciBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KKyAqLwogYm9vbAotaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAotCQkJCQkJIEl0ZW1Q b2ludGVyIHRpZCwKLQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqc2xvdCwKLQkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxfZGVhZCkK K2hlYXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90 IHNuYXBzaG90LAorCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpCit7 CisJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJs ZVNsb3QgKikgc2xvdDsKKwlCdWZmZXIJCWJ1ZjsKKwlib29sCQlmb3VuZDsKKworCUFzc2VydChU VFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOworCisJYnVmID0gUmVhZEJ1ZmZlcihyZWwsIEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xP Q0tfU0hBUkUpOworCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsIHJlbCwgYnVm LCBzbmFwc2hvdCwKKwkJCQkJCQkJICAgJmJzbG90LT5iYXNlLnR1cGRhdGEsIGFsbF9kZWFkLCB0 cnVlKTsKKwlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7CisJTG9ja0J1ZmZlcihi dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZm91bmQpCisJeworCQlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZl ckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSAgIGJ1Zik7 CisJfQorCWVsc2UKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCisJcmV0dXJuIGZvdW5kOworfQor CisvKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWlu IGluZGV4IHNjYW4gKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRl eF9wbGFpbl9hbWdldHR1cGxlX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Cit7CisJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworfQorCisv KiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIGluZGV4LW9u bHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29u bHlfYW1nZXR0dXBsZV9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlB c3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUpOworfQorCitzdGF0aWMgcGdf YXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2lt cGwoUmVsYXRpb24gcmVsLAorCQkJCQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJ CQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJ CQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJICBib29sICpoZWFwX2NvbnRpbnVl LCBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4 RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3Qg PSAoQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CiAJYm9vbAkJZ290X2hlYXBfdHVw bGU7CiAKQEAgLTI0NiwyMyArMzM4LDIxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVm ZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwogCQlCdWZmZXIJCXByZXZfYnVmID0g aHNjYW4tPnhzX2NidWY7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZl cihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCisJCWhz Y2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsIHJlbCwK IAkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOwogCiAJCS8qCiAJ CSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBh Z2UKIAkJICovCiAJCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFn ZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJ JmhzY2FuLT54c192bWJ1ZmZlciwKKwkJCWhlYXBfcGFnZV9wcnVuZV9vcHQocmVsLCBoc2Nhbi0+ eHNfY2J1ZiwgJmhzY2FuLT54c192bWJ1ZmZlciwKIAkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxh Z3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkpOwogCX0KIAogCS8qIE9idGFpbiBzaGFyZS1sb2Nr IG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tCdWZm ZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBsZSA9 IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLAotCQkJCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5y ZWwsCisJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJaHNjYW4tPnhzX2NidWYsCiAJCQkJCQkJ CQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwKQEAgLTI3OSw3 ICszNjksNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAJCSAqLwogCQkqaGVhcF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNo b3Qoc25hcHNob3QpOwogCi0JCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQo c2Nhbi0+cmVsKTsKKwkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwp OwogCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3Qs IGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQpAQCAtMjkwLDMgKzM4MCwxNzEgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJ cmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQorCisvKgorICogQ29tbW9uIGltcGxlbWVudGF0aW9u IGZvciBib3RoIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4KKyAqCisgKiBU aGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5k IHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUg aXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXNv dXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwg YmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwg dG8gaGVhcGFtX2luZGV4X2ZldGNoX2VuZAorICogdGhyb3VnaCBpbmRleF9lbmRzY2FuKS4KKyAq CisgKiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQg YXQgZWFjaCBjYWxsIHNpdGUsCisgKiBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6 ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fs d2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAq c2xvdCwgYm9vbCBpbmRleF9vbmx5KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAo SW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlib29sCSAgICpoZWFw X2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CisJYm9vbAkJYWxsX3Zpc2libGUg PSBmYWxzZTsKKwlCbG9ja051bWJlciBsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBJbnZhbGlkQmxvY2tO dW1iZXI7CisJdWludDgJCW5fdmlzaXRlZF9wYWdlcyA9IDA7CisJSXRlbVBvaW50ZXIgdGlkID0g TlVMTDsKKworCWZvciAoOzspCisJeworCQlpZiAoISpoZWFwX2NvbnRpbnVlKQorCQl7CisJCQkv KiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCisJCQl0aWQgPSBpbmRleF9nZXRu ZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXgg ZW50cmllcywgd2UncmUgZG9uZSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOwor CisJCQkvKiBGb3IgaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICov CisJCQlpZiAoaW5kZXhfb25seSkKKwkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNj YW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKSwKKwkJCQkJCQkJCQkJICZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQl9CisKKwkJQXNzZXJ0 KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCisJCWlmIChpbmRleF9v bmx5KQorCQl7CisJCQkvKgorCQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFy ZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICogd2UnbGwg dXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAq IHNvdXJjZS4KKwkJCSAqLworCQkJaWYgKCFhbGxfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4K KwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVu dC0+bnRhYmxldHVwbGVmZXRjaGVzKys7CisKKwkJCQlpZiAoIWhlYXBhbV9pbmRleF9mZXRjaF9o ZWFwKHNjYW4sIGhzY2FuLCBzbG90LAorCQkJCQkJCQkJCQkgaGVhcF9jb250aW51ZSkpCisJCQkJ eworCQkJCQkvKgorCQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlLiAgSWYgY2FsbGVyIHNldCBhIHZp c2l0ZWQtcGFnZXMgbGltaXQKKwkJCQkJICogKG9ubHkgc2VsZnVuY3MuYyBkb2VzIHRoaXMpLCBj b3VudCBkaXN0aW5jdCBoZWFwIHBhZ2VzCisJCQkJCSAqIGFuZCBnaXZlIHVwIG9uY2Ugd2UndmUg dmlzaXRlZCB0b28gbWFueS4KKwkJCQkJICovCisJCQkJCWlmICh1bmxpa2VseShzY2FuLT54c192 aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCisJCQkJCXsKKwkJCQkJCUJsb2NrTnVtYmVyIGJsayA9 IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJCQkJaWYgKGJsayAhPSBsYXN0 X3Zpc2l0ZWRfYmxvY2spCisJCQkJCQl7CisJCQkJCQkJbGFzdF92aXNpdGVkX2Jsb2NrID0gYmxr OworCQkJCQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNf bGltaXQpCisJCQkJCQkJCXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLworCQkJCQkJfQorCQkJ CQl9CisJCQkJCWNvbnRpbnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBl bnRyeSAqLworCQkJCX0KKworCQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAg dHVwbGUgZm9yIGFueXRoaW5nICovCisJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkv KgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJk IGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywgc28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8g a2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJCSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5 IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2FsbGVycworCQkJCSAqIChjdXJyZW50bHkgb25seSBz ZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVz IHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJ CSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0 KCEoKmhlYXBfY29udGludWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRo ZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4 cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBh Z2UgbGV2ZWwuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2Nhbi0+aGVhcFJlbGF0 aW9uLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJ ICBzY2FuLT54c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hp bmcgaW5kZXggdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAq IG1hdGNoaW5nIGhlYXAgdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkKKwkJCSAqLwor CQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogRmV0Y2ggdGhl IG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleAorCQkJICog ZW50cnkuICBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0 aGUKKwkJCSAqIG5leHQgVElEIGZyb20gdGhlIGluZGV4LgorCQkJICovCisJCQlpZiAoaGVhcGFt X2luZGV4X2ZldGNoX2hlYXAoc2NhbiwgaHNjYW4sIHNsb3QsIGhlYXBfY29udGludWUpKQorCQkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogR2V0 IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlLgorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNp YmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVj ZW50bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwg aWYgbm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3Jl IHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhv dWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQor ICogZm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3Vj Y2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUg cGluIG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJlLgorICovCitzdGF0aWMgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJVHVwbGVUYWJsZVNs b3QgKnNsb3QsIGJvb2wgKmhlYXBfY29udGludWUpCit7CisJYm9vbAkJYWxsX2RlYWQgPSBmYWxz ZTsKKwlib29sCQlmb3VuZDsKKworCWZvdW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2lt cGwoc2Nhbi0+aGVhcFJlbGF0aW9uLCBoc2NhbiwKKwkJCQkJCQkJCQkgICZzY2FuLT54c19oZWFw dGlkLAorCQkJCQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3QsIHNsb3QsCisJCQkJCQkJCQkJICBo ZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOworCisJaWYgKGZvdW5kKQorCQlwZ3N0YXRfY291bnRf aGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKKworCS8qCisJICogSWYgd2Ugc2Nhbm5l ZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRl eAorCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2Ug ZWZmZWN0IGluIHRoZSBuZXh0CisJICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0 X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCisJICogcmVjb3ZlcnkgYmVjYXVzZSBp dCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCisJICogUmVsYXRp b25HZXRJbmRleFNjYW4oKS4KKwkgKi8KKwlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVy eSkKKwkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOworCisJcmV0dXJuIGZvdW5k OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IDRmZDQ3MDcw Mi4uNGJhOWY0OGU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmls aXR5bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCkBA IC0zMTMsNyArMzEzLDMyIEBAIHZpc2liaWxpdHltYXBfc2V0KEJsb2NrTnVtYmVyIGhlYXBCbGss CiAgKiBzaW5jZSB3ZSBkb24ndCBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBwYWdlIGVpdGhlciwg aXQncyBldmVuIHBvc3NpYmxlIHRoYXQKICAqIHNvbWVvbmUgZWxzZSBjb3VsZCBoYXZlIGNoYW5n ZWQgdGhlIGJpdCBqdXN0IGJlZm9yZSB3ZSBsb29rIGF0IGl0LCBidXQgeWV0CiAgKiB3ZSBtaWdo dCBzZWUgdGhlIG9sZCB2YWx1ZS4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0 byBkZWFsIHdpdGgKLSAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMhCisgKiBhbGwgY29uY3VycmVu Y3kgaXNzdWVzISAgSW4gcHJhY3RpY2UgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvIG1hdHRl ciBmb3IKKyAqIHRoZSBwcmltYXJ5IHVzZSBjYXNlOiBpbmRleC1vbmx5IHNjYW5zIHRoYXQgY2hl Y2sgd2hldGhlciBhIGhlYXAgZmV0Y2ggY2FuCisgKiBiZSBza2lwcGVkLgorICoKKyAqIFRoZSBh cmd1bWVudCBmb3Igd2h5IGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBtYXR0ZXIgZm9yIHRo ZSBwcmltYXJ5IHVzZQorICogY2FzZSBpcyBhcyBmb2xsb3dzOgorICoKKyAqIEluc2VydHM6IHdl IG5lZWQgdG8gZGV0ZWN0IHRoYXQgYSBWTSBiaXQgd2FzIGNsZWFyZWQgYnkgYW4gaW5zZXJ0IHJp Z2h0CisgKiBhd2F5LCBiZWNhdXNlIHRoZSBuZXcgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5k ZXggYnV0IG5vdCB5ZXQgdmlzaWJsZS4KKyAqIFJlYWRpbmcgdGhlIFRJRCBmcm9tIHRoZSBpbmRl eCBwYWdlICh1bmRlciBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleAorICogYnVmZmVyKSBpcyBz ZXJpYWxpemVkIHdpdGggdGhlIGluc2VydGlvbiBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4ICh1 bmRlcgorICogYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUgaW5kZXggYnVmZmVyKS4gIEJl Y2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkCisgKiBiZWZvcmUgdGhlIGluZGV4IGlzIHVwZGF0 ZWQsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXggcGFnZSBhY3RzCisgKiBhcyBh IGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0aGUgY2xlYXJlZCBiaXQg d2hlbmV2ZXIgd2UKKyAqIHNlZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KKyAqCisgKiBEZWxl dGVzOiB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBOT1Qgc2VyaWFs aXplZCB3aXRoIHRoZQorICogaW5kZXggcGFnZSBhY2Nlc3MsIGJlY2F1c2UgZGVsZXRlcyBkbyBu b3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5CisgKiBWQUNVVU0gcmVtb3ZlcyB0aGUgaW5k ZXggVElEKS4gIFNvIHdlIG1heSBzZWUgYSBzaWduaWZpY2FudGx5IHN0YWxlIHZhbHVlLgorICog SG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlY3QgdGhlIGRlbGV0ZSByaWdodCBhd2F5LCBi ZWNhdXNlIHRoZSB0dXBsZQorICogcmVtYWlucyB2aXNpYmxlIHVudGlsIHRoZSBkZWxldGluZyB0 cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQKKyAqIGVuZHMgKGlmIGl0J3Mgb3Vy IG93biB0cmFuc2FjdGlvbikuICBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNCisg KiBidWZmZXIgd2lsbCBoYXZlIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJp ZXIpIGFmdGVyIGNsZWFyaW5nCisgKiB0aGUgYml0LiAgQW5kIGZvciB1cyB0byBoYXZlIGEgc25h cHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKKyAqIHRyYW5zYWN0aW9uIChtYWtpbmcg dGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAorICogUHJvY0FycmF5 TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KICAqLwogdWlu dDgKIHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGhl YXBCbGssIEJ1ZmZlciAqdm1idWYpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDE0MDg5 ODljNS4uYWNjOWYzZTZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMTI2LDYgKzEy Niw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBu a2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNf aGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOwor CiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ1NCw3ICs0NTYsNyBAQCBzeXN0YWJsZV9iZWdpbnNj YW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90 IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5 cywgMCwKIAkJCQkJCQkJCQkgU09fTk9ORSk7CiAJCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2Nh biwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CkBAIC01MTgsNyArNTIwLDggQEAgc3lzdGFibGVf Z2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewot CQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lz c2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNs b3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MTYsNyArNzE5LDcgQEAgc3lz dGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFu c2FjdGlvbklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0J c3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0 aW9uLAorCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5k ZXhSZWxhdGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwLAog CQkJCQkJCQkJIFNPX05PTkUpOwogCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5 LCBua2V5cywgTlVMTCwgMCk7CkBAIC03MzYsNyArNzM5LDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9v cmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhl YXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5k ZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3Qp KQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlv biwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3Nj YW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRu ZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCA0NDQ5NmFlMDkuLjBiYzhi YjUzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0yNCw5ICsyNCw3IEBACiAg KgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBhcmFsbGVsIHNj YW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJhbGxlbCBzY2Fu IG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxl bCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBnZXQgdGhlIG5leHQgVElEIGZy b20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVs cGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEg c2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxldGlvbiBvZiBpbmRleCB0dXBs ZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVsZXRpb24gY2xlYW51cCBvZiBh biBpbmRleApAQCAtMTA1LDkgKzEwMywxNiBAQCBkbyB7IFwKIAkJCSBDcHBBc1N0cmluZyhwbmFt ZSksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNjYW4tPmluZGV4UmVsYXRpb24pKTsgXAogfSB3 aGlsZSgwKQogCi1zdGF0aWMgSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwo UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKLQkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2Fu RGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXApOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNf aW5saW5lIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAor CQkJCQkJCQkJCQkJCQkJCQkJIGludCBua2V5cywKKwkJCQkJCQkJCQkJCQkJCQkJCSBpbnQgbm9y ZGVyYnlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJ CQkJCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJ CSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJCQkJCQkJCQkJCQkJ CQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCB0ZW1wX3Nu YXAsCisJCQkJCQkJCQkJCQkJCQkJCQkgdWludDMyIGZsYWdzKTsKIHN0YXRpYyBpbmxpbmUgdm9p ZCB2YWxpZGF0ZV9yZWxhdGlvbl9hc19pbmRleChSZWxhdGlvbiByKTsKIAogCkBAIC0yNTYsMTMg KzI2MSwxMiBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAog SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ CQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJ CVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1 bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJdWludDMyIGZsYWdzKQog ewotCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQogCUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25h cHNob3QpOwogCiAJLyogQ2hlY2sgdGhhdCBhIGhpc3RvcmljIHNuYXBzaG90IGlzIG5vdCB1c2Vk IGZvciBub24tY2F0YWxvZyB0YWJsZXMgKi8KQEAgLTI3NSwyMCArMjc5LDEwIEBAIGluZGV4X2Jl Z2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShoZWFwUmVsYXRpb24pKSkpOwogCX0KIAotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50 ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsIE5VTEwsIGZh bHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2Nh bmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5k ZXhTY2FuLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKLQlzY2Fu LT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50 OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlz Y2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24s IGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJu YWwoaW5kZXhSZWxhdGlvbiwgaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJbmtleXMsIG5vcmRlcmJ5 cywKKwkJCQkJCQkJCXNuYXBzaG90LCBOVUxMLCBpbnN0cnVtZW50LAorCQkJCQkJCQkJaW5kZXhf b25seV9zY2FuLCBmYWxzZSwgZmxhZ3MpOwogfQogCiAvKgpAQCAtMzAzLDI5ICsyOTcsMjQgQEAg aW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkgICBJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCSAgIGludCBua2V5cykK IHsKLQlJbmRleFNjYW5EZXNjIHNjYW47Ci0KIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNu YXBzaG90KTsKKwlBc3NlcnQoSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KSk7CiAKLQlzY2Fu ID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBzbmFw c2hvdCwgTlVMTCwgZmFsc2UpOwotCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVy cyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkg UmVsYXRpb25HZXRJbmRleFNjYW4uCi0JICovCi0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hv dDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCXJldHVybiBzY2FuOworCXJl dHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgTlVMTCwgbmtleXMs IDAsIHNuYXBzaG90LAorCQkJCQkJCQkJTlVMTCwgaW5zdHJ1bWVudCwgZmFsc2UsIGZhbHNlLCBT T19OT05FKTsKIH0KIAogLyoKICAqIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbCAtLS0gY29tbW9u IGNvZGUgZm9yIGluZGV4X2JlZ2luc2NhbiB2YXJpYW50cworICoKKyAqIFdoZW4gaGVhcFJlbGF0 aW9uIGlzIG5vdCBOVUxMLCBhbHNvIGluaXRpYWxpemVzIHRhYmxlIEFNIGluZGV4IHNjYW4gc3Rh dGUuCiAgKi8KLXN0YXRpYyBJbmRleFNjYW5EZXNjCi1pbmRleF9iZWdpbnNjYW5faW50ZXJuYWwo UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGlu ZSBJbmRleFNjYW5EZXNjCitpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJIGludCBua2V5cywgaW50IG5v cmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNj IHBzY2FuLCBib29sIHRlbXBfc25hcCkKKwkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNj YW4sCisJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAorCQkJCQkJ IGJvb2wgaW5kZXhfb25seV9zY2FuLCBib29sIHRlbXBfc25hcCwgdWludDMyIGZsYWdzKQogewog CUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMzQ5LDYgKzMzOCwyNiBAQCBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAlzY2FuLT5wYXJhbGxlbF9zY2Fu ID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCisJc2Nhbi0+eHNf c25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKKwor CS8qCisJICogSW5pdGlhbGl6ZSBoZWFwLXNpZGUgc2NhbiBzdGF0ZSB3aGVuIGEgaGVhcCByZWxh dGlvbiBpcyBwcm92aWRlZC4KKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMgZG9uJ3QgcHJvdmlkZSBv bmUuCisJICovCisJaWYgKGhlYXBSZWxhdGlvbiAhPSBOVUxMKQorCXsKKwkJc2Nhbi0+aGVhcFJl bGF0aW9uID0gaGVhcFJlbGF0aW9uOworCQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5 X3NjYW47CisJCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKKworCQkvKiBwcmVwYXJl IHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLworCQlzY2FuLT54c19oZWFwZmV0 Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihzY2FuLCBmbGFncyk7CisKKwkJLyogdGFibGUg QU0gbXVzdCBzZXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIGZvciB1cyAqLwor CQlBc3NlcnQoc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ICE9IE5VTEwpOworCX0KKwogCXJldHVybiBz Y2FuOwogfQogCkBAIC0zNzcsNyArMzg2LDcgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRh YmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVfaW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJdGFibGVfaW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbik7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZl dHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CkBAIC0zOTksNyArNDA4LDcg QEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogUmVsZWFzZSByZXNvdXJj ZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoKQogCXsKLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKIAkJc2Nhbi0+eHNfaGVhcGZl dGNoID0gTlVMTDsKIAl9CiAKQEAgLTQ1NCw3ICs0NjMsNyBAQCBpbmRleF9yZXN0cnBvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlu cykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtNTc5 LDcgKzU4OCw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlT Q0FOX0NIRUNLUzsKIAogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0 KHNjYW4pOwogCiAJLyogYW1wYXJhbGxlbHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9w IGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBOVUxMKQpAQCAtNTk2LDQxICs2MDUsMzMgQEAgaW5k ZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNj CiBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5k ZXhyZWwsCisJCQkJCQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkgSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cywKIAkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkgdWludDMyIGZs YWdzKQogewogCVNuYXBzaG90CXNuYXBzaG90OwotCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFz c2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhoZWFwcmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNf bG9jYXRvcikpOwogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhpbmRleHJlbC0+cmRfbG9j YXRvciwgcHNjYW4tPnBzX2luZGV4bG9jYXRvcikpOwogCiAJc25hcHNob3QgPSBSZXN0b3JlU25h cHNob3QocHNjYW4tPnBzX3NuYXBzaG90X2RhdGEpOwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNo b3QpOwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBu b3JkZXJieXMsIHNuYXBzaG90LAotCQkJCQkJCQkJcHNjYW4sIHRydWUpOwogCi0JLyoKLQkgKiBT YXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcg ZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsLgotCSAqLwot CXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXByZWw7Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFw c2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8g ZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0g dGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHNjYW47 CisJcmV0dXJuIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgaGVhcHJlbCwgbmtl eXMsIG5vcmRlcmJ5cywKKwkJCQkJCQkJCXNuYXBzaG90LCBwc2NhbiwgaW5zdHJ1bWVudCwKKwkJ CQkJCQkJCWluZGV4X29ubHlfc2NhbiwgdHJ1ZSwgZmxhZ3MpOwogfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNj YW4KKyAqIGluZGV4X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBU aGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBv ciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hv dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2Nh bgorICogY2FsbGJhY2tzLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpA QCAtNjYxLDcgKzY2Miw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJewogCQkvKiByZWxlYXNlIHJlc291cmNlcyAobGlr ZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCQlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQotCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsK KwkJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJCXJldHVybiBOVUxMOwogCX0K QEAgLTY3Myw5NyArNjc0LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9 CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBz Y2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVh cCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBm ZXRjaGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcg dHVwbGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0 dXBsZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1W Q0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25l IHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29u dGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3Bw ZWQgaW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5k ZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nh bi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5 cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBo YXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdl bmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hf aGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJ CWFsbF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJ CQkJCQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2Nv bnRpbnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9m ZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdo b2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAq IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0 IGluIHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCku ICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkg dmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJ bmRleFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJ c2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQot Ci0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBu ZXh0IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVw bGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3Vu ZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVk IHNsb3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBh cmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJl IGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAq IGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ss IGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQu ICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdo IGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0g KiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCkKLXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7 Ci0JCQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElE IGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJl Y3Rpb24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9u ZSAqLwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBv aW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICog RmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRl eCBlbnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5k IGdyYWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0 KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0 Y2hfaGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxz ZTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBh bGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggYzhhZjk3ZGQyLi5mMWI1NWZiMjAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNTYwLDkgKzU2MCw5IEBAIF9idF9jaGVja191 bmlxdWUoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBo ZWFwUmVsLAogCQkJCSAqIHdpdGggb3B0aW1pemF0aW9ucyBsaWtlIGhlYXAncyBIT1QsIHdlIGhh dmUganVzdCBhIHNpbmdsZQogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0aGUgZW50aXJlIGNoYWlu LgogCQkJCSAqLwotCQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhl YXBSZWwsICZodGlkLAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAotCQkJCQkJCQkJ CQkJCSAgICZhbGxfZGVhZCkpCisJCQkJZWxzZSBpZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhl YXBSZWwsICZodGlkLAorCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKKwkJCQkJCQkJCQkJ ICAgJmFsbF9kZWFkKSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAKQEAgLTYx OCw4ICs2MTgsOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0 ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJICogZW50cnkuCiAJCQkJCSAq LwogCQkJCQlodGlkID0gaXR1cC0+dF90aWQ7Ci0JCQkJCWlmICh0YWJsZV9pbmRleF9mZXRjaF90 dXBsZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkgIFNuYXBzaG90U2VsZiwg TlVMTCkpCisJCQkJCWlmICh0YWJsZV9mZXRjaF90aWRfY2hlY2soaGVhcFJlbCwgJmh0aWQsCisJ CQkJCQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyogTm9ybWFs IGNhc2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwogCQkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYwppbmRleCA2OGZmMDk2NmYuLjBhYzlmMDE0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbS5jCkBAIC0yMjgsMzIgKzIyOCwyMCBAQCB0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWxf dGlkcmFuZ2UoUmVsYXRpb24gcmVsYXRpb24sCiAgKi8KIAogLyoKLSAqIFRvIHBlcmZvcm0gdGhh dCBjaGVjayBzaW1wbHkgc3RhcnQgYW4gaW5kZXggc2NhbiwgY3JlYXRlIHRoZSBuZWNlc3NhcnkK LSAqIHNsb3QsIGRvIHRoZSBoZWFwIGxvb2t1cCwgYW5kIHNodXQgZXZlcnl0aGluZyBkb3duIGFn YWluLiBUaGlzIGNvdWxkIGJlCi0gKiBvcHRpbWl6ZWQsIGJ1dCBpcyB1bmxpa2VseSB0byBtYXR0 ZXIgZnJvbSBhIHBlcmZvcm1hbmNlIFBPVi4gSWYgdGhlcmUKLSAqIGZyZXF1ZW50bHkgYXJlIGxp dmUgaW5kZXggcG9pbnRlcnMgYWxzbyBtYXRjaGluZyBhIHVuaXF1ZSBpbmRleCBrZXksIHRoZQot ICogQ1BVIG92ZXJoZWFkIG9mIHRoaXMgcm91dGluZSBpcyB1bmxpa2VseSB0byBtYXR0ZXIuCi0g KgotICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUg aWYgdGhlIEFNIHN1cHBvcnRzCi0gKiBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFj aGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5IChsaWtlCi0gKiBoZWFwJ3MgSE9UKS4KKyAq IENhbGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRp ZCBiZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzCiAg Ki8KIGJvb2wKLXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJ CQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJ CQkJCSAgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVs LAorCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJ CQkJICBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuOwogCVR1 cGxlVGFibGVTbG90ICpzbG90OwotCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKIAlib29sCQlm b3VuZDsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5VTEwpOwotCXNjYW4gPSB0 YWJsZV9pbmRleF9mZXRjaF9iZWdpbihyZWwsIFNPX05PTkUpOwotCWZvdW5kID0gdGFibGVfaW5k ZXhfZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgJmNhbGxfYWdhaW4sCi0J CQkJCQkJCQlhbGxfZGVhZCk7Ci0JdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCWZvdW5k ID0gdGFibGVfZmV0Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgYWxsX2RlYWQpOwog CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAKIAlyZXR1cm4gZm91bmQ7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1NDUwYTI3ZmEuLmMwOTQ3M2I5 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC01Myw4ICs1Myw4IEBA IEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4 X2ZldGNoX2JlZ2luICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNl dCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOwot CUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChy b3V0aW5lLT5mZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNo X3Jvd192ZXJzaW9uICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQg IT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2dldF9sYXRlc3RfdGlkICE9IE5VTEwp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCmluZGV4IDQyMWQ4YzM1OS4uN2FmZjQ4MTI0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCkBAIC0xMDUsMjMgKzEwNSwxNCBAQCB1bmlxdWVf a2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKiByZW1vdmVkLgogCSAqLwogCXRtcHRp ZCA9IGNoZWNrdGlkOworCWlmICghdGFibGVfZmV0Y2hfdGlkKHRyaWdkYXRhLT50Z19yZWxhdGlv biwgJnRtcHRpZCwgU25hcHNob3RTZWxmLAorCQkJCQkJIHNsb3QsIE5VTEwpKQogCXsKLQkJSW5k ZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRh LT50Z19yZWxhdGlvbiwKLQkJCQkJCQkJCQkJCQkJCVNPX05PTkUpOwotCQlib29sCQljYWxsX2Fn YWluID0gZmFsc2U7Ci0KLQkJaWYgKCF0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmdG1w dGlkLCBTbmFwc2hvdFNlbGYsIHNsb3QsCi0JCQkJCQkJCQkgJmNhbGxfYWdhaW4sIE5VTEwpKQot CQl7Ci0JCQkvKgotCQkJICogQWxsIHJvd3MgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggZW50cnkg YXJlIGRlYWQsIHNvIHNraXAgdGhlCi0JCQkgKiBjaGVjay4KLQkJCSAqLwotCQkJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKLQkJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2Fu KTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Ci0JCX0KLQkJdGFibGVfaW5kZXhf ZmV0Y2hfZW5kKHNjYW4pOworCQkvKgorCQkgKiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBp bmRleCBlbnRyeSBhcmUgZGVhZCwgc28gc2tpcCB0aGUgY2hlY2sKKwkJICovCisJCUV4ZWNEcm9w U2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7CiAJfQogCiAJLyoKQEAgLTE2OCw5ICsxNTksOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdf RlVOQ1RJT05fQVJHUykKIAkJLyoKIAkJICogTm90ZTogdGhpcyBpcyBub3QgYSByZWFsIGluc2Vy dDsgaXQgaXMgYSBjaGVjayB0aGF0IHRoZSBpbmRleCBlbnRyeQogCQkgKiB0aGF0IGhhcyBhbHJl YWR5IGJlZW4gaW5zZXJ0ZWQgaXMgdW5pcXVlLiAgUGFzc2luZyB0aGUgdHVwbGUncyB0aWQKLQkJ ICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpKSBpcyBjb3Jy ZWN0IGV2ZW4gaWYKLQkJICogdGhlIHJvdyBpcyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRo ZSBUSUQgdGhlIGluZGV4IHdpbGwga25vdwotCQkgKiBhYm91dC4KKwkJICogKGkuZS4gdW5tb2Rp ZmllZCBieSB0YWJsZV9mZXRjaF90aWQoKSkgaXMgY29ycmVjdCBldmVuIGlmIHRoZSByb3cKKwkJ ICogaXMgbm93IGRlYWQsIGJlY2F1c2UgdGhhdCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtu b3cgYWJvdXQuCiAJCSAqLwogCQlpbmRleF9pbnNlcnQoaW5kZXhSZWwsIHZhbHVlcywgaXNudWxs LCAmY2hlY2t0aWQsCiAJCQkJCSB0cmlnZGF0YS0+dGdfcmVsYXRpb24sIFVOSVFVRV9DSEVDS19F WElTVElORywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBlNGI3MDE2NmIuLjM5NmUyMjNhNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyB2b2lkIHNo b3dfcmVjdXJzaXZlX3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3Rh dGljIHZvaWQgc2hvd19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFu Y2VzdG9ycywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19o YXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRp YyB2b2lkIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBs YWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRl ICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRt YXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5T dGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3Qg Y2hhciAqcWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xOTc0LDcgKzE5NzQsNyBAQCBFeHBsYWluTm9k ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1 YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0 ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJj aGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0 ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2Fu X3F1YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg4LDE1ICsx OTg4LDEyIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3Rv cnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgi Um93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7 Ci0JCQlpZiAoZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0 Y2hlcyIsIE5VTEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwg MCwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlz aG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9C aXRtYXBJbmRleFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBw bGFuKS0+aW5kZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBh bmNlc3RvcnMsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMp OworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQlj YXNlIFRfQml0bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2Fu ICopIHBsYW4pLT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NjAsMTUgKzM4NTcsMTYgQEAgc2hvd19o YXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAv KgotICogU2hvdyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBT aG93IGluZGV4IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAq IEluZGV4U2Nhbi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRp YyB2b2lkCi1zaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsK IAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVp bnQ2NAkJbnNlYXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbnRhYmxl ZmV0Y2hlcyA9IDA7CiAKIAlpZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0zODg5LDYg KzM4ODcsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg RXhwbGFpblN0YXRlICplcykKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUgPSAo KEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCiAJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQkJbnRhYmxlZmV0Y2hlcyA9 IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzOwogCQkJCVNo YXJlZEluZm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9 CkBAIC0zOTEyLDkgKzM5MTEsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRl ICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2Vh cmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW50YWJsZWZldGNoZXMgKz0gd2lu c3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJfQogCX0KIAorCWlmIChub2RlVGFnKHBs YW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3BlcnR5VUludGVnZXIoIkhlYXAg RmV0Y2hlcyIsIE5VTEwsIG50YWJsZWZldGNoZXMsIGVzKTsKKwogCUV4cGxhaW5Qcm9wZXJ0eVVJ bnRlZ2VyKCJJbmRleCBTZWFyY2hlcyIsIE5VTEwsIG5zZWFyY2hlcywgZXMpOwogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQzNjNlMTU0Yy4uY2Y3OTJhOGRkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtODE1LDEyICs4MTUsMTIgQEAgY2hlY2tf ZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGlu ZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0J aW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwKLQkJCQkJCQkJICZEaXJ0 eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCwKLQkJCQkJCQkJIFNPX05PTkUpOworCWlu ZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlTbmFw c2hvdCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwLCBTT19OT05FKTsKIAlpbmRleF9y ZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdo aWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGV4aXN0aW5nX3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhf c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7 CiAJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggYjJjYTVjYmYxLi5jODczYmNkODIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsOCArMjA1LDgg QEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQs CiAJc2tleV9hdHRvZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhy ZWwsIHNlYXJjaHNsb3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0g aW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLAotCQkJCQkJICAgJnNuYXAsIE5VTEwsIHNrZXlf YXR0b2ZmLCAwLCBTT19OT05FKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVs LCBmYWxzZSwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwLAorCQkJCQkJICAgU09fTk9ORSk7 CiAKIHJldHJ5OgogCWZvdW5kID0gZmFsc2U7CkBAIC0yMTQsNyArMjE0LDcgQEAgcmV0cnk6CiAJ aW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRy eSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsKIAkJLyoK IAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmlt YXJ5IGtleSBvcgpAQCAtNjY5LDEzICs2NjksMTMgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxl SW5mb0J5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0 dGVkIG9yIHRob3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4 Y2x1ZGVkIGluIHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2Nh biA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKLQkJCQkJCSAgIFNuYXBzaG90QW55LCBO VUxMLCBza2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbihy ZWwsIGlkeHJlbCwgZmFsc2UsIFNuYXBzaG90QW55LCBOVUxMLAorCQkJCQkJICAgc2tleV9hdHRv ZmYsIDAsIFNPX05PTkUpOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2Zm LCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hl Y2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzBjNTVlZTZkLi5hOWEzZDJmYjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwNCw2ICsyMDQsNyBA QCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpub2RlKQogCQkg KiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBz dGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1lbnQtPm50YWJs ZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMKaW5kZXggZGU2MTU0ZmQ1Li44YWMzZmEwNzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3Iu aCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0MSw2IEBACiAj aW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogCkBAIC02Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7 CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBl eHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTEs NyArODgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICog cGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICAgZXN0 YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLApAQCAtMTAwLDExICs5Nyw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBTT19ISU5UX1JF TF9SRUFEX09OTFkgOiBTT19OT05FKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRl c2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3Ig dGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTIxLDc4ICsxMTQsMTEgQEAgSW5kZXhP bmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93IHRoYXQg d2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxl ICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwp CisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLAor CQkJCQkJCQkJbm9kZS0+aW9zc19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9o ZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBX ZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBh Z2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJv ZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhl IGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9y eSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJ ICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1 bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwg aXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2Ug bmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBh d2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdl IGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2Vy aWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAo dXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhl IFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBs b2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBt ZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBp ZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJ ICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlz IG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNl ZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2Ug ZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0 aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFu c2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwg aGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRl ciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0 aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0 dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9j ayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICog SXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5n IHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNh bnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhl YXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJ CQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2 ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVz Yywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+ aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUg c3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVw IGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICog YmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBr ZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5l eHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRp bnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0 ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBw b2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVj b3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5v dywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28u ICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRo ZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwot CQl9Ci0KIAkJLyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9t IHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBU dXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yNDEsMTYgKzE2 Nyw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAog CQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQg aW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2Vz cyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9j ayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBs ZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1Bh Z2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBz bG90OwogCX0KIApAQCAtNDEwLDEzICszMjYsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8q IFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1C dWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkv KgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNz IGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0 aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzNiw2ICszNDUsNyBAQCBF eGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNo IHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJ ICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5u c2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMgKz0gbm9kZS0+aW9z c19JbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc5MiwxNSAr NzAyLDE0IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3Nf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBp c2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1JlYWRPbmx5KCZub2RlLT5zcykgPwogCQkJCQkJCQkg U09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9ORSk7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+ eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJ ICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdv IGFoZWFkIGFuZCBwYXNzCkBAIC04NjAsMTQgKzc2OSwxNCBAQCBFeGVjSW5kZXhPbmx5U2Nhbklu aXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19T Y2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50 UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5v ZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVt ZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJCQkJCQkJCSBTY2FuUmVsSXNS ZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRfUkVMX1JFQURfT05MWSA6IFNP X05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNz ZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBh bmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDE2MjBkMTQ2MC4u NTVmYTJkNDIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDksNyAr MTA5LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBl eGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgog CQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBu b2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUt Pmlzc19OdW1TY2FuS2V5cywKQEAgLTEzMiw3ICsxMzIsNyBAQCBJbmRleE5leHQoSW5kZXhTY2Fu U3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQs IGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRf c2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CiAKQEAgLTIwNyw3ICsyMDcsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNj YW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhh dCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhf YmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+ aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFs c2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlz c19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjYs NyArMjY2LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJ CSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1 cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJl Y3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0 dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAg LTgxOCw2ICs4MTgsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQog CQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQg c3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0 cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnRhYmxl dHVwbGVmZXRjaGVzID09IDApOwogCX0KIAogCS8qCkBAIC0xNzMwLDcgKzE3MzEsNyBAQCBFeGVj SW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlz c19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1 bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlz c19OdW1PcmRlckJ5S2V5cywKQEAgLTE3OTYsNyArMTc5Nyw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0 aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlv biwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3Nf UmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVy QnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCAyZGUwOGRhNjUuLjM2 NmE5YzFkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI3MjMsNyArMjcy Myw3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywK IAlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2sp OwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7Ci0Jc2NhbmRlc2Mg PSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNjID0gaW5kZXhfYmVn aW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25hcHNob3QsIE5VTEws CiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19OT05FKTsKQEAgLTI3 NzksNyArMjc3OSw3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxh dGlvbiBpZHhfcmVsLAogCiAJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCBua2V5cywgTlVM TCwgMCk7CiAKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgc2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJYm9vbAkJY29uY3VycmVudGx5X3Vw ZGF0ZWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggNDE2MGQyZDZlLi42YTFkZmFi NTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNs dWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTIxLDEwICs3 MTIwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAog CWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1 bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJ bnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9j a051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIg dGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRF WF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzE3Miw2MiArNzE2 NywyNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJ ICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSBy ZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFz b24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2 YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoKKwkgKiBXZSBzZXQgeHNfdmlz aXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0aW5jdAor CSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBnaXZlIHVw IGFmdGVyIHRoZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBWSVNJVEVE X1BBR0VTX0xJTUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25W YWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25h cHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCwKIAkJCQkJCQkJIFNPX05P TkUpOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+ eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsK KwlpbmRleF9zY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gVklTSVRFRF9QQUdFU19MSU1J VDsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJ LyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hp bGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAh PSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5k ZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVs LAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdl IGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFp bmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRv Ci0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291 bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRv byBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0 aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4g IFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJl Y2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZl cnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICov Ci0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJCQlpZiAoYmxvY2sgIT0gbGFz dF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJ CW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+ IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51 ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0K LQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5n ICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9u J3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0J CQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3Vn aC4KLQkJCSAqLwotCQl9Ci0KIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGluZGV4IHdp bGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKIAkJICogSGVhcFR1cGxlIGZvcm1hdC4K QEAgLTcyNTksOCArNzIxOCw2IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRp b24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZm ZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nh bik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwotLSAKMi41My4wCgo= --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Disposition: attachment; filename="v21-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig615e12 RnJvbSA0OTFiNjVjYTdkZGYzODI5YWUyMTdhYTVlYWM3MTM3ZTc2ZDlhNmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwNC8xNV0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KCkFkZCBhbiBl eHBsaWNpdCBCbG9ja051bWJlciBmaWVsZCAoeHNfYmxrKSB0byBJbmRleEZldGNoSGVhcERhdGEg dGhhdAp0cmFja3Mgd2hpY2ggaGVhcCBibG9jayBpcyBjdXJyZW50bHkgcGlubmVkIGluIHhzX2Ni dWYuCgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgbm93IHVzZXMgeHNfYmxrIHRvIGRldGVybWlu ZSB3aGVuIGJ1ZmZlcgpzd2l0Y2hpbmcgaXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlIHByZXZpb3Vz IGFwcHJvYWNoIHRoYXQgY29tcGFyZWQKYnVmZmVyIGlkZW50aXRpZXMgdmlhIFJlbGVhc2VBbmRS ZWFkQnVmZmVyIG9uIGV2ZXJ5IG5vbi1IT1QtY2hhaW4gY2FsbC4KClRoaXMgaXMgcHJlcGFyYXRv cnkgd29yayBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXgKcHJlZmV0 Y2hpbmcgdXNpbmcgYSByZWFkIHN0cmVhbS4gIERlbGVnYXRpbmcgdGhlIHJlbGVhc2Ugb2YgYSBj dXJyZW50bHkKcGlubmVkIGJ1ZmZlciB0byBSZWxlYXNlQW5kUmVhZEJ1ZmZlciB3b24ndCB3b3Jr IGFueW1vcmUgLS0gYXQgbGVhc3Qgbm90CndoZW4gdGhlIG5leHQgYnVmZmVyIHRoYXQgdGhlIHNj YW4gbmVlZHMgdG8gcGluIGlzIG9uZSByZXR1cm5lZCBieQpyZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciAobm90IGEgYnVmZmVyIHJldHVybmVkIGJ5IFJlYWRCdWZmZXIpLgoKQXV0aG9yOiBQZXRlciBH ZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1nPUpU U3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwgIDUgKystLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMzUgKysrKysrKysr KysrKystLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMjJlOTEzMjg2Li5lMThjOGY0MDQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKQEAgLTEyMiwxMCArMTIyLDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5kZXBlbmRl bnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52YWxpZEJ1 ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlmCisJICog eHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4geHNfY2J1 Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwogCiAJLyog Rm9yIHZpc2liaWxpdHkgbWFwIGNoZWNrcyAoaW5kZXgtb25seSBzY2FucyBhbmQgb24tYWNjZXNz IHBydW5pbmcpICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCA5YjhiZDdjYzAuLmI3MzA1ZjgyMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNTYsNiArNTYsNyBA QCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxh Z3MpCiAKIAloc2Nhbi0+eHNfYmFzZS5mbGFncyA9IGZsYWdzOwogCWhzY2FuLT54c19jYnVmID0g SW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWhz Y2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKIAkvKiBSZXNvbHZlIHdoaWNoIGdl dG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwpAQCAtNzYs NiArNzcsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQog CXsKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAJCWhzY2FuLT54c19jYnVmID0g SW52YWxpZEJ1ZmZlcjsKKwkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAl9 CiAKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQpAQCAtMzMyLDIzICsz MzQsMzAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoUmVsYXRpb24gcmVsLAogCiAJ QXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUg YnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlm ICghKmhlYXBfY29udGludWUpCisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcg bG9naWMgaWYgd2UncmUgb24gdGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAh PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29y cmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJl dl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKKwkJQXNzZXJ0KCEqaGVhcF9jb250aW51ZSk7CiAKLQkJ aHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgcmVs LAotCQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJCS8qIFJl bWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKwkJaHNj YW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlpZiAoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19j YnVmKTsKKworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxr KTsKIAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVh ZHkgb24gdGhpcyBwYWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRo ZSBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0J CQloZWFwX3BhZ2VfcHJ1bmVfb3B0KHJlbCwgaHNjYW4tPnhzX2NidWYsICZoc2Nhbi0+eHNfdm1i dWZmZXIsCi0JCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9P TkxZKTsKKwkJaGVhcF9wYWdlX3BydW5lX29wdChyZWwsIGhzY2FuLT54c19jYnVmLAorCQkJCQkJ CSZoc2Nhbi0+eHNfdm1idWZmZXIsCisJCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgJiBTT19I SU5UX1JFTF9SRUFEX09OTFkpOwogCX0KIAorCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlciho c2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CisJQXNzZXJ0KGhzY2FuLT54c19ibGsg PT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwogCS8qIE9idGFpbiBzaGFyZS1s b2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tC dWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBs ZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLApAQCAtNDUxLDExICs0NjAsMTEgQEAgaGVh cGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAogCQkJCQkgKi8KIAkJCQkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQgPiAwKSkKIAkJCQkJewotCQkJCQkJQmxvY2tOdW1iZXIgYmxrID0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCQkJCQkJQXNzZXJ0KGhzY2FuLT54c19ibGsgPT0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKIAotCQkJCQkJaWYgKGJsayAhPSBsYXN0 X3Zpc2l0ZWRfYmxvY2spCisJCQkJCQlpZiAoaHNjYW4tPnhzX2JsayAhPSBsYXN0X3Zpc2l0ZWRf YmxvY2spCiAJCQkJCQl7Ci0JCQkJCQkJbGFzdF92aXNpdGVkX2Jsb2NrID0gYmxrOworCQkJCQkJ CWxhc3RfdmlzaXRlZF9ibG9jayA9IGhzY2FuLT54c19ibGs7CiAJCQkJCQkJaWYgKCsrbl92aXNp dGVkX3BhZ2VzID4gc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCkKIAkJCQkJCQkJcmV0dXJu IGZhbHNlOwkvKiBnaXZlIHVwICovCiAJCQkJCQl9Ci0tIAoyLjUzLjAKCg== --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Disposition: attachment; filename="v21-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig615b11 RnJvbSAwMDI0NGMxNzI5ZjY5N2FlNzJkNzdhY2ZjMmZjYmMyMWQwYzcyMzZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjYgTWFyIDIwMjYgMTg6NDU6MjcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwNS8xNV0g aGVhcGFtOiBLZWVwIGJ1ZmZlciBwaW5zIGFjcm9zcyBpbmRleCByZXNjYW5zLgoKQXZvaWQgZHJv cHBpbmcgdGhlIGhlYXAgcGFnZSBwaW4gKHhzX2NidWYpIGFuZCB2aXNpYmlsaXR5IG1hcCBwaW4K KHhzX3ZtYnVmZmVyKSBkdXJpbmcgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LiAgUmV0YWluaW5n IHRoZXNlIHBpbnMKc2F2ZXMgY3ljbGVzIGR1cmluZyB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyBh bmQgbWVyZ2Ugam9pbnMgdGhhdApmcmVxdWVudGx5IHJlc3RvcmUgYSBzYXZlZCBtYXJrLCBzaW5j ZSB0aGUgbmV4dCB0dXBsZSBmZXRjaGVkIGFmdGVyIGEKcmVzY2FuIG9mdGVuIGZhbGxzIG9uIHRo ZSBzYW1lIGhlYXAgcGFnZS4gIEl0IGNhbiBhbHNvIGF2b2lkIHJlcGVhdGVkCnBpbm5pbmcgYW5k IHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgd2hlbiByZXNjYW5zIGhhcHBlbiB0byByZXZp c2l0CnRoZSBzYW1lIHBhZ2UuCgpOb3RlIHRoYXQgbm90IGRyb3BwaW5nIHhzX3ZtYnVmZmVyIG9u IGEgcmVzY2FuIGlzbid0IGEgbmV3IGJlaGF2aW9yCihpdCdzIGFsd2F5cyB3b3JrZWQgdGhpcyB3 YXkpLiAgUmVjZW50IGNvbW1pdCBYWFgsIHdoaWNoIGFkZGVkIGEgbmV3CnNsb3QtYmFzZWQgaW50 ZXJmYWNlLCBjaGFuZ2VkIHRoYXQgYmVoYXZpb3Igd2hlbiBpdCBtb3ZlZCBWTSBwaW4KbWFuYWdl bWVudCBvdXQgb2YgdGhlIGNvcmUgZXhlY3V0b3IuICBUaGlzIGNvbW1pdCByZXN0b3JlcyB0aGF0 IGJlaGF2aW9yCihhbmQgaGFzIGhlYXBhbSB0cmVhdCBoZWFwIHBhZ2UgcGlucyBpbiB0aGUgc2Ft ZSB3YXksIHdoaWNoIF9pc18gYSBuZXcKYmVoYXZpb3IpLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVw Y29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlIHRvIGVu YWJsZSBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgSS9PIHByZWZldGNoaW5nLgoKQXV0aG9yOiBQZXRl ciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRy ZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1n PUpUU3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjYgKysr KysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAg ICAgICAgIHwgIDYgKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMTUg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j CmluZGV4IGI3MzA1ZjgyMi4uZmQ2ZjRmYTllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jCkBAIC03MywxOCArNzMsMTQgQEAgaGVhcGFtX2luZGV4X2ZldGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CiAKLQlpZiAoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54 c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwotCQloc2Nhbi0+eHNf YmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCX0KKwkvKiBSZXNldHMgYXJlIGEgbm8tb3AgKi8K Kwkodm9pZCkgaHNjYW47CiAKLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwotCQloc2Nhbi0+eHNf dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KKwkvKgorCSAqIERlbGliZXJhdGVseSBhdm9p ZCBkcm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgorCSAq IFRoaXMgc2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5z IChpdCBjYW4gYXZvaWQKKwkgKiByZXBlYXRlZCBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgdGhl IHNhbWUgYnVmZmVyIGFjcm9zcyByZXNjYW5zKS4KKwkgKi8KIH0KIAogdm9pZApAQCAtOTIsNyAr ODgsMTMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJ SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+ eHNfaGVhcGZldGNoOwogCi0JaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCS8qIGRy b3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX2NidWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKwor CS8qIGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBtYXAgcGFnZSAqLwor CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAogCXBmcmVlKGhzY2FuKTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jCmluZGV4IDBiYzhiYjUzNS4uODY1NGFiOTg5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKQEAgLTM4NCw3ICszODQsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLAogCUFzc2VydChua2V5cyA9PSBzY2FuLT5udW1iZXJPZktleXMpOwogCUFzc2Vy dChub3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAKLQkvKiBSZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJl c2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNo KQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIApAQCAtNDYxLDcgKzQ2MSw3IEBA IGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVD S19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUg QU0gc3RhdGUgZm9yIHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCiAJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKQEAgLTY2 MCw3ICs2NjAsNyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3 ZSdyZSBkb25lICovCiAJaWYgKCFmb3VuZCkKIAl7Ci0JCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJCS8qIHJlc2V0IHRhYmxl IEFNIHN0YXRlICovCiAJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCQl0YWJsZV9pbmRleF9m ZXRjaF9yZXNldChzY2FuKTsKIAotLSAKMi41My4wCgo= --000000000000aca165064e876fb1 Content-Type: application/octet-stream; name="v21-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Disposition: attachment; filename="v21-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnig615i14 RnJvbSBjODgzYmNmZjYyNjEyYzUzOGVhZTlkOGQ5NTAzMjFmNWQ5ODc2ZDNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMDA6MjI6MTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMSAwMi8xNV0g TW92ZSBoZWFwYW1faGFuZGxlci5jIGluZGV4IHNjYW4gY29kZSB0byBuZXcgZmlsZS4KCk1vdmUg dGhlIGhlYXBhbSBpbmRleCBmZXRjaCBjYWxsYmFja3MgKGluZGV4X2ZldGNoX2JlZ2luLAppbmRl eF9mZXRjaF9yZXNldCwgaW5kZXhfZmV0Y2hfZW5kLCBhbmQgaW5kZXhfZmV0Y2hfdHVwbGUpIGlu dG8gYSBuZXcKZGVkaWNhdGVkIGZpbGUuICBBbHNvIG1vdmUgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl ciBvdmVyLiAgVGhpcyBpcyBhCnB1cmVseSBtZWNoYW5pY2FsIG1vdmUgd2l0aCBubyBmdW5jdGlv bmFsIGltcGFjdC4KClVwY29taW5nIHdvcmsgdG8gYWRkIGEgc2xvdC1iYXNlZCB0YWJsZSBBTSBp bnRlcmZhY2UgZm9yIGluZGV4IHNjYW5zCndpbGwgc3Vic3RhbnRpYWxseSBleHBhbmQgdGhpcyBj b2RlLiAgS2VlcGluZyBpdCBpbiBoZWFwYW1faGFuZGxlci5jCndvdWxkIGNsdXR0ZXIgYSBmaWxl IHdob3NlIHByaW1hcnkgcm9sZSBpcyB0byB3aXJlIHVwIHRoZSBUYWJsZUFtUm91dGluZQpjYWxs YmFja3MuICBCaXRtYXAgaGVhcCBzY2FucyBhbmQgc2VxdWVudGlhbCBzY2FucyB3b3VsZCBiZW5l Zml0IGZyb20Kc2ltaWxhciBzZXBhcmF0aW9uIGluIHRoZSBmdXR1cmUuCgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5anhv YWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgfCAxNjEgLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgfCAxMTEgLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDI5MiArKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDMwNiBpbnNlcnRpb25zKCspLCAyNzUgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDU0MDY3YjgyOC4uY2M5MGM4MjFiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCkBAIC0zNjYsOSArMzY2LDYgQEAgZXh0ZXJuIGJvb2wgaGVhcF9nZXRu ZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLAogCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBoZWFwX2ZldGNoKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLCBCdWZmZXIgKnVz ZXJidWYsIGJvb2wga2VlcF9idWYpOwotZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl cihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkgICBCdWZmZXIg YnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKLQkJCQkJCQkJ ICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CiAKIGV4dGVybiB2b2lkIGhlYXBf Z2V0X2xhdGVzdF90aWQoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIApA QCAtNDMxLDYgKzQyOCwxOCBAQCBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJ CSAgVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogCisvKiBpbiBoZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyAqLworZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0 ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwg SGVhcFR1cGxlIGhlYXBUdXBsZSwKKwkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmly c3RfY2FsbCk7CitleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisJCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVh cF9jb250aW51ZSwKKwkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CisKIC8qIGluIGhlYXAvcHJ1 bmVoZWFwLmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQoUmVsYXRpb24gcmVs YXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCUJ1ZmZlciAqdm1idWZmZXIsIGJvb2wgcmVs X3JlYWRfb25seSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlCmluZGV4IDM5NDUzNDE3Mi4uMWQy N2NjYjkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWhlYXBh bS5vIFwKIAloZWFwYW1faGFuZGxlci5vIFwKKwloZWFwYW1faW5kZXhzY2FuLm8gXAogCWhlYXBh bV92aXNpYmlsaXR5Lm8gXAogCWhlYXBhbV94bG9nLm8gXAogCWhlYXB0b2FzdC5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggNmJmZjAwMzJkLi5lMDZjZTJkYjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCkBAIC0xNzY0LDE2NyArMTc2NCw2IEBAIGhlYXBfZmV0Y2goUmVsYXRp b24gcmVsYXRpb24sCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICoJaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QK LSAqCi0gKiBPbiBlbnRyeSwgKnRpZCBpcyB0aGUgVElEIG9mIGEgdHVwbGUgKGVpdGhlciBhIHNp bXBsZSB0dXBsZSwgb3IgdGhlIHJvb3QKLSAqIG9mIGEgSE9UIGNoYWluKSwgYW5kIGJ1ZmZlciBp cyB0aGUgYnVmZmVyIGhvbGRpbmcgdGhpcyB0dXBsZS4gIFdlIHNlYXJjaAotICogZm9yIHRoZSBm aXJzdCBjaGFpbiBtZW1iZXIgc2F0aXNmeWluZyB0aGUgZ2l2ZW4gc25hcHNob3QuICBJZiBvbmUg aXMKLSAqIGZvdW5kLCB3ZSB1cGRhdGUgKnRpZCB0byByZWZlcmVuY2UgdGhhdCB0dXBsZSdzIG9m ZnNldCBudW1iZXIsIGFuZAotICogcmV0dXJuIHRydWUuICBJZiBubyBtYXRjaCwgcmV0dXJuIGZh bHNlIHdpdGhvdXQgbW9kaWZ5aW5nICp0aWQuCi0gKgotICogaGVhcFR1cGxlIGlzIGEgY2FsbGVy LXN1cHBsaWVkIGJ1ZmZlci4gIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgd2UgcmV0dXJuCi0gKiB0 aGUgdHVwbGUgaGVyZSwgaW4gYWRkaXRpb24gdG8gdXBkYXRpbmcgKnRpZC4gIElmIG5vIG1hdGNo IGlzIGZvdW5kLCB0aGUKLSAqIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVyIG9uIHJldHVybiBhcmUg dW5kZWZpbmVkLgotICoKLSAqIElmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCB3ZSBjaGVjayBub24t dmlzaWJsZSB0dXBsZXMgdG8gc2VlIGlmIHRoZXkgYXJlCi0gKiBnbG9iYWxseSBkZWFkOyAqYWxs X2RlYWQgaXMgc2V0IHRydWUgaWYgYWxsIG1lbWJlcnMgb2YgdGhlIEhPVCBjaGFpbgotICogYXJl IHZhY3V1bWFibGUsIGZhbHNlIGlmIG5vdC4KLSAqCi0gKiBVbmxpa2UgaGVhcF9mZXRjaCwgdGhl IGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBwaW4gYW5kIChhdCBsZWFzdCkgc2hhcmUKLSAqIGxv Y2sgb24gdGhlIGJ1ZmZlcjsgaXQgaXMgc3RpbGwgcGlubmVkL2xvY2tlZCBhdCBleGl0LgotICov Ci1ib29sCi1oZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24g cmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCi0JCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LCBIZWFw VHVwbGUgaGVhcFR1cGxlLAotCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxs KQotewotCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JVHJhbnNhY3Rpb25J ZCBwcmV2X3htYXggPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQlCbG9ja051bWJlciBibGtubzsK LQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCWJvb2wJCWF0X2NoYWluX3N0YXJ0OwotCWJvb2wJCXZh bGlkOwotCWJvb2wJCXNraXA7Ci0JR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3QgPSBOVUxMOwotCi0J LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIHByZXZpb3VzIGNhbGwgcmV0dXJuZWQg YSAobGl2ZSEpIHR1cGxlICovCi0JaWYgKGFsbF9kZWFkKQotCQkqYWxsX2RlYWQgPSBmaXJzdF9j YWxsOwotCi0JYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0Jb2ZmbnVt ID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKTsKLQlhdF9jaGFpbl9zdGFydCA9IGZp cnN0X2NhbGw7Ci0Jc2tpcCA9ICFmaXJzdF9jYWxsOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNz ZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZmZlcikgPT0gYmxrbm8pOwotCi0JLyogU2NhbiB0aHJvdWdoIHBvc3NpYmxlIG11 bHRpcGxlIG1lbWJlcnMgb2YgSE9ULWNoYWluICovCi0JZm9yICg7OykKLQl7Ci0JCUl0ZW1JZAkJ bHA7Ci0KLQkJLyogY2hlY2sgZm9yIGJvZ3VzIFRJRCAqLwotCQlpZiAob2ZmbnVtIDwgRmlyc3RP ZmZzZXROdW1iZXIgfHwgb2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkKLQkJ CWJyZWFrOwotCi0JCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCi0JCS8qIGNo ZWNrIGZvciB1bnVzZWQsIGRlYWQsIG9yIHJlZGlyZWN0ZWQgaXRlbXMgKi8KLQkJaWYgKCFJdGVt SWRJc05vcm1hbChscCkpCi0JCXsKLQkJCS8qIFdlIHNob3VsZCBvbmx5IHNlZSBhIHJlZGlyZWN0 IGF0IHN0YXJ0IG9mIGNoYWluICovCi0JCQlpZiAoSXRlbUlkSXNSZWRpcmVjdGVkKGxwKSAmJiBh dF9jaGFpbl9zdGFydCkKLQkJCXsKLQkJCQkvKiBGb2xsb3cgdGhlIHJlZGlyZWN0ICovCi0JCQkJ b2ZmbnVtID0gSXRlbUlkR2V0UmVkaXJlY3QobHApOwotCQkJCWF0X2NoYWluX3N0YXJ0ID0gZmFs c2U7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBlbHNlIG11c3QgYmUgZW5kIG9mIGNoYWlu ICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFVwZGF0ZSBoZWFwVHVwbGUgdG8gcG9p bnQgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIEhPVCBjaGFpbiB3ZSdyZQotCQkgKiBjdXJyZW50bHkg aW52ZXN0aWdhdGluZy4gSGF2aW5nIHRfc2VsZiBzZXQgY29ycmVjdGx5IGlzIGltcG9ydGFudAot CQkgKiBiZWNhdXNlIHRoZSBTU0kgY2hlY2tzIGFuZCB0aGUgKlNhdGlzZmllcyByb3V0aW5lIGZv ciBoaXN0b3JpY2FsCi0JCSAqIE1WQ0Mgc25hcHNob3RzIG5lZWQgdGhlIGNvcnJlY3QgdGlkIHRv IGRlY2lkZSBhYm91dCB0aGUgdmlzaWJpbGl0eS4KLQkJICovCi0JCWhlYXBUdXBsZS0+dF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCQloZWFwVHVwbGUt PnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKLQkJaGVhcFR1cGxlLT50X3RhYmxlT2lkID0g UmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7Ci0JCUl0ZW1Qb2ludGVyU2V0KCZoZWFwVHVwbGUt PnRfc2VsZiwgYmxrbm8sIG9mZm51bSk7Ci0KLQkJLyoKLQkJICogU2hvdWxkbid0IHNlZSBhIEhF QVBfT05MWSB0dXBsZSBhdCBjaGFpbiBzdGFydC4KLQkJICovCi0JCWlmIChhdF9jaGFpbl9zdGFy dCAmJiBIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCQlicmVhazsKLQotCQkvKgot CQkgKiBUaGUgeG1pbiBzaG91bGQgbWF0Y2ggdGhlIHByZXZpb3VzIHhtYXggdmFsdWUsIGVsc2Ug Y2hhaW4gaXMKLQkJICogYnJva2VuLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHByZXZfeG1heCkgJiYKLQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHByZXZfeG1heCwKLQkJCQkJ CQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKSkKLQkJCWJyZWFr OwotCi0JCS8qCi0JCSAqIFdoZW4gZmlyc3RfY2FsbCBpcyB0cnVlIChhbmQgdGh1cywgc2tpcCBp cyBpbml0aWFsbHkgZmFsc2UpIHdlJ2xsCi0JCSAqIHJldHVybiB0aGUgZmlyc3QgdHVwbGUgd2Ug ZmluZC4gIEJ1dCBvbiBsYXRlciBwYXNzZXMsIGhlYXBUdXBsZQotCQkgKiB3aWxsIGluaXRpYWxs eSBiZSBwb2ludGluZyB0byB0aGUgdHVwbGUgd2UgcmV0dXJuZWQgbGFzdCB0aW1lLgotCQkgKiBS ZXR1cm5pbmcgaXQgYWdhaW4gd291bGQgYmUgaW5jb3JyZWN0IChhbmQgd291bGQgbG9vcCBmb3Jl dmVyKSwgc28KLQkJICogd2Ugc2tpcCBpdCBhbmQgcmV0dXJuIHRoZSBuZXh0IG1hdGNoIHdlIGZp bmQuCi0JCSAqLwotCQlpZiAoIXNraXApCi0JCXsKLQkJCS8qIElmIGl0J3MgdmlzaWJsZSBwZXIg dGhlIHNuYXBzaG90LCB3ZSBtdXN0IHJldHVybiBpdCAqLwotCQkJdmFsaWQgPSBIZWFwVHVwbGVT YXRpc2ZpZXNWaXNpYmlsaXR5KGhlYXBUdXBsZSwgc25hcHNob3QsIGJ1ZmZlcik7Ci0JCQlIZWFw Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdE91dCh2YWxpZCwgcmVsYXRpb24sIGhlYXBUdXBs ZSwKLQkJCQkJCQkJCQkJCWJ1ZmZlciwgc25hcHNob3QpOwotCi0JCQlpZiAodmFsaWQpCi0JCQl7 Ci0JCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIodGlkLCBvZmZudW0pOwotCQkJCVByZWRp Y2F0ZUxvY2tUSUQocmVsYXRpb24sICZoZWFwVHVwbGUtPnRfc2VsZiwgc25hcHNob3QsCi0JCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKGhlYXBUdXBsZS0+dF9kYXRhKSk7Ci0JCQkJaWYg KGFsbF9kZWFkKQotCQkJCQkqYWxsX2RlYWQgPSBmYWxzZTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CX0KLQkJfQotCQlza2lwID0gZmFsc2U7Ci0KLQkJLyoKLQkJICogSWYgd2UgY2FuJ3Qgc2VlIGl0 LCBtYXliZSBubyBvbmUgZWxzZSBjYW4gZWl0aGVyLiAgQXQgY2FsbGVyCi0JCSAqIHJlcXVlc3Qs IGNoZWNrIHdoZXRoZXIgYWxsIGNoYWluIG1lbWJlcnMgYXJlIGRlYWQgdG8gYWxsCi0JCSAqIHRy YW5zYWN0aW9ucy4KLQkJICoKLQkJICogTm90ZTogaWYgeW91IGNoYW5nZSB0aGUgY3JpdGVyaW9u IGhlcmUgZm9yIHdoYXQgaXMgImRlYWQiLCBmaXggdGhlCi0JCSAqIHBsYW5uZXIncyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlKCkgZnVuY3Rpb24gdG8gbWF0Y2guCi0JCSAqLwotCQlpZiAoYWxs X2RlYWQgJiYgKmFsbF9kZWFkKQotCQl7Ci0JCQlpZiAoIXZpc3Rlc3QpCi0JCQkJdmlzdGVzdCA9 IEdsb2JhbFZpc1Rlc3RGb3IocmVsYXRpb24pOwotCi0JCQlpZiAoIUhlYXBUdXBsZUlzU3VyZWx5 RGVhZChoZWFwVHVwbGUsIHZpc3Rlc3QpKQotCQkJCSphbGxfZGVhZCA9IGZhbHNlOwotCQl9Ci0K LQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIEhPVCBjaGFpbiBjb250aW51ZXMgcGFzdCB0aGlz IHR1cGxlOyBpZiBzbyBmZXRjaAotCQkgKiB0aGUgbmV4dCBvZmZudW0gYW5kIGxvb3AgYXJvdW5k LgotCQkgKi8KLQkJaWYgKEhlYXBUdXBsZUlzSG90VXBkYXRlZChoZWFwVHVwbGUpKQotCQl7Ci0J CQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRf Y3RpZCkgPT0KLQkJCQkgICBibGtubyk7Ci0JCQlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNl dE51bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCk7Ci0JCQlhdF9jaGFpbl9zdGFydCA9 IGZhbHNlOwotCQkJcHJldl94bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKGhlYXBU dXBsZS0+dF9kYXRhKTsKLQkJfQotCQllbHNlCi0JCQlicmVhazsJCQkJLyogZW5kIG9mIGNoYWlu ICovCi0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICoJaGVhcF9nZXRfbGF0ZXN0X3Rp ZCAtICBnZXQgdGhlIGxhdGVzdCB0aWQgb2YgYSBzcGVjaWZpZWQgdHVwbGUKICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBkYzdkYjU4ODUuLjA3ZjA3MTg4 ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03NSwxMTcg Kzc1LDYgQEAgaGVhcGFtX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogfQogCiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0K LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBJbmRleEZldGNoVGFibGVEYXRhICoK LWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKLXsK LQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhl YXBEYXRhKTsKLQotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5m bGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nhbi0+ eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK LX0KLQotc3RhdGljIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW47Ci0KLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp Ci0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOwotCX0KLQotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQotewotCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0KLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlwZnJlZShoc2Nhbik7Ci19Ci0KLXN0 YXRpYyBib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmhlYXBf Y29udGludWUsIGJvb2wgKmFsbF9kZWFkKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90 ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKLQlib29sCQlnb3Rf aGVhcF90dXBsZTsKLQotCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwotCi0JLyog V2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhP VCBjaGFpbi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQotCXsKLQkJLyogU3dpdGNoIHRvIGNv cnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXBy ZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7Ci0KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKLQotCQkv KgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhp cyBwYWdlCi0JCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFw X3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJ CQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIsCi0JCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYg U09fSElOVF9SRUxfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KLQlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAot CQkJCQkJCQkJCQloc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJc25hcHNob3QsCi0JCQkJCQkJ CQkJCSZic2xvdC0+YmFzZS50dXBkYXRhLAotCQkJCQkJCQkJCQlhbGxfZGVhZCwKLQkJCQkJCQkJ CQkJISpoZWFwX2NvbnRpbnVlKTsKLQlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7 Ci0JTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCWlm IChnb3RfaGVhcF90dXBsZSkKLQl7Ci0JCS8qCi0JCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFw c2hvdCBjYW4gbW9yZSB0aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAotCQkgKiBjaGFpbiBiZSB2 aXNpYmxlLgotCQkgKi8KLQkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKLQotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4t PnJlbCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwg c2xvdCwgaHNjYW4tPnhzX2NidWYpOwotCX0KLQllbHNlCi0JewotCQkvKiBXZSd2ZSByZWFjaGVk IHRoZSBlbmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmhlYXBfY29udGludWUgPSBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci19Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFs IHR1cGxlcyBmb3IgaGVhcCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5jMzZiODA0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGhlYXBhbV9pbmRleHNjYW4uYworICoJICBoZWFwIHRhYmxlIHBsYWluIGlu ZGV4IHNjYW4gYW5kIGluZGV4LW9ubHkgc2NhbiBjb2RlCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgi CisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9y IGhlYXAgQU0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK0luZGV4RmV0Y2hUYWJsZURhdGEg KgoraGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQor eworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNo SGVhcERhdGEpOworCisJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOworCWhzY2FuLT54c19iYXNl LmZsYWdzID0gZmxhZ3M7CisJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisKKwlyZXR1cm4gJmhzY2FuLT54c19iYXNl OworfQorCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFw RGF0YSAqKSBzY2FuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCXsK KwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisJCWhzY2FuLT54c19jYnVmID0gSW52 YWxpZEJ1ZmZlcjsKKwl9CisKKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOworCQloc2Nhbi0+eHNf dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwordm9pZAoraGVhcGFtX2luZGV4X2Zl dGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoreworCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisKKwloZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbik7CisKKwlwZnJlZShoc2Nhbik7Cit9CisKKy8qCisgKgloZWFwX2hv dF9zZWFyY2hfYnVmZmVyCS0gc2VhcmNoIEhPVCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBz bmFwc2hvdAorICoKKyAqIE9uIGVudHJ5LCAqdGlkIGlzIHRoZSBUSUQgb2YgYSB0dXBsZSAoZWl0 aGVyIGEgc2ltcGxlIHR1cGxlLCBvciB0aGUgcm9vdAorICogb2YgYSBIT1QgY2hhaW4pLCBhbmQg YnVmZmVyIGlzIHRoZSBidWZmZXIgaG9sZGluZyB0aGlzIHR1cGxlLiAgV2Ugc2VhcmNoCisgKiBm b3IgdGhlIGZpcnN0IGNoYWluIG1lbWJlciBzYXRpc2Z5aW5nIHRoZSBnaXZlbiBzbmFwc2hvdC4g IElmIG9uZSBpcworICogZm91bmQsIHdlIHVwZGF0ZSAqdGlkIHRvIHJlZmVyZW5jZSB0aGF0IHR1 cGxlJ3Mgb2Zmc2V0IG51bWJlciwgYW5kCisgKiByZXR1cm4gdHJ1ZS4gIElmIG5vIG1hdGNoLCBy ZXR1cm4gZmFsc2Ugd2l0aG91dCBtb2RpZnlpbmcgKnRpZC4KKyAqCisgKiBoZWFwVHVwbGUgaXMg YSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyLiAgV2hlbiBhIG1hdGNoIGlzIGZvdW5kLCB3ZSByZXR1 cm4KKyAqIHRoZSB0dXBsZSBoZXJlLCBpbiBhZGRpdGlvbiB0byB1cGRhdGluZyAqdGlkLiAgSWYg bm8gbWF0Y2ggaXMgZm91bmQsIHRoZQorICogY29udGVudHMgb2YgdGhpcyBidWZmZXIgb24gcmV0 dXJuIGFyZSB1bmRlZmluZWQuCisgKgorICogSWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHdlIGNo ZWNrIG5vbi12aXNpYmxlIHR1cGxlcyB0byBzZWUgaWYgdGhleSBhcmUKKyAqIGdsb2JhbGx5IGRl YWQ7ICphbGxfZGVhZCBpcyBzZXQgdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGUgSE9UIGNoYWlu CisgKiBhcmUgdmFjdXVtYWJsZSwgZmFsc2UgaWYgbm90LgorICoKKyAqIFVubGlrZSBoZWFwX2Zl dGNoLCB0aGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIHBpbiBhbmQgKGF0IGxlYXN0KSBzaGFy ZQorICogbG9jayBvbiB0aGUgYnVmZmVyOyBpdCBpcyBzdGlsbCBwaW5uZWQvbG9ja2VkIGF0IGV4 aXQuCisgKi8KK2Jvb2wKK2hlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBS ZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKKwkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsIEhlYXBUdXBsZSBoZWFwVHVwbGUsCisJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZp cnN0X2NhbGwpCit7CisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlUcmFu c2FjdGlvbklkIHByZXZfeG1heCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUJsb2NrTnVtYmVy IGJsa25vOworCU9mZnNldE51bWJlciBvZmZudW07CisJYm9vbAkJYXRfY2hhaW5fc3RhcnQ7CisJ Ym9vbAkJdmFsaWQ7CisJYm9vbAkJc2tpcDsKKwlHbG9iYWxWaXNTdGF0ZSAqdmlzdGVzdCA9IE5V TEw7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgY2FsbCwgcHJldmlvdXMgY2FsbCBy ZXR1cm5lZCBhIChsaXZlISkgdHVwbGUgKi8KKwlpZiAoYWxsX2RlYWQpCisJCSphbGxfZGVhZCA9 IGZpcnN0X2NhbGw7CisKKwlibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsK KwlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQpOworCWF0X2NoYWluX3N0 YXJ0ID0gZmlyc3RfY2FsbDsKKwlza2lwID0gIWZpcnN0X2NhbGw7CisKKwkvKiBYWFg6IHdlIHNo b3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlBc3NlcnQoQnVmZmVy R2V0QmxvY2tOdW1iZXIoYnVmZmVyKSA9PSBibGtubyk7CisKKwkvKiBTY2FuIHRocm91Z2ggcG9z c2libGUgbXVsdGlwbGUgbWVtYmVycyBvZiBIT1QtY2hhaW4gKi8KKwlmb3IgKDs7KQorCXsKKwkJ SXRlbUlkCQlscDsKKworCQkvKiBjaGVjayBmb3IgYm9ndXMgVElEICovCisJCWlmIChvZmZudW0g PCBGaXJzdE9mZnNldE51bWJlciB8fCBvZmZudW0gPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpKQorCQkJYnJlYWs7CisKKwkJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisK KwkJLyogY2hlY2sgZm9yIHVudXNlZCwgZGVhZCwgb3IgcmVkaXJlY3RlZCBpdGVtcyAqLworCQlp ZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKKwkJeworCQkJLyogV2Ugc2hvdWxkIG9ubHkgc2VlIGEg cmVkaXJlY3QgYXQgc3RhcnQgb2YgY2hhaW4gKi8KKwkJCWlmIChJdGVtSWRJc1JlZGlyZWN0ZWQo bHApICYmIGF0X2NoYWluX3N0YXJ0KQorCQkJeworCQkJCS8qIEZvbGxvdyB0aGUgcmVkaXJlY3Qg Ki8KKwkJCQlvZmZudW0gPSBJdGVtSWRHZXRSZWRpcmVjdChscCk7CisJCQkJYXRfY2hhaW5fc3Rh cnQgPSBmYWxzZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGVsc2UgbXVzdCBiZSBlbmQg b2YgY2hhaW4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIGhlYXBUdXBs ZSB0byBwb2ludCB0byB0aGUgZWxlbWVudCBvZiB0aGUgSE9UIGNoYWluIHdlJ3JlCisJCSAqIGN1 cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIYXZpbmcgdF9zZWxmIHNldCBjb3JyZWN0bHkgaXMgaW1w b3J0YW50CisJCSAqIGJlY2F1c2UgdGhlIFNTSSBjaGVja3MgYW5kIHRoZSAqU2F0aXNmaWVzIHJv dXRpbmUgZm9yIGhpc3RvcmljYWwKKwkJICogTVZDQyBzbmFwc2hvdHMgbmVlZCB0aGUgY29ycmVj dCB0aWQgdG8gZGVjaWRlIGFib3V0IHRoZSB2aXNpYmlsaXR5LgorCQkgKi8KKwkJaGVhcFR1cGxl LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJCWhl YXBUdXBsZS0+dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCQloZWFwVHVwbGUtPnRfdGFi bGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwkJSXRlbVBvaW50ZXJTZXQoJmhl YXBUdXBsZS0+dF9zZWxmLCBibGtubywgb2ZmbnVtKTsKKworCQkvKgorCQkgKiBTaG91bGRuJ3Qg c2VlIGEgSEVBUF9PTkxZIHR1cGxlIGF0IGNoYWluIHN0YXJ0LgorCQkgKi8KKwkJaWYgKGF0X2No YWluX3N0YXJ0ICYmIEhlYXBUdXBsZUlzSGVhcE9ubHkoaGVhcFR1cGxlKSkKKwkJCWJyZWFrOwor CisJCS8qCisJCSAqIFRoZSB4bWluIHNob3VsZCBtYXRjaCB0aGUgcHJldmlvdXMgeG1heCB2YWx1 ZSwgZWxzZSBjaGFpbiBpcworCQkgKiBicm9rZW4uCisJCSAqLworCQlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQocHJldl94bWF4KSAmJgorCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMocHJldl94bWF4 LAorCQkJCQkJCQkgSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihoZWFwVHVwbGUtPnRfZGF0YSkpKQor CQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2hlbiBmaXJzdF9jYWxsIGlzIHRydWUgKGFuZCB0aHVz LCBza2lwIGlzIGluaXRpYWxseSBmYWxzZSkgd2UnbGwKKwkJICogcmV0dXJuIHRoZSBmaXJzdCB0 dXBsZSB3ZSBmaW5kLiAgQnV0IG9uIGxhdGVyIHBhc3NlcywgaGVhcFR1cGxlCisJCSAqIHdpbGwg aW5pdGlhbGx5IGJlIHBvaW50aW5nIHRvIHRoZSB0dXBsZSB3ZSByZXR1cm5lZCBsYXN0IHRpbWUu CisJCSAqIFJldHVybmluZyBpdCBhZ2FpbiB3b3VsZCBiZSBpbmNvcnJlY3QgKGFuZCB3b3VsZCBs b29wIGZvcmV2ZXIpLCBzbworCQkgKiB3ZSBza2lwIGl0IGFuZCByZXR1cm4gdGhlIG5leHQgbWF0 Y2ggd2UgZmluZC4KKwkJICovCisJCWlmICghc2tpcCkKKwkJeworCQkJLyogSWYgaXQncyB2aXNp YmxlIHBlciB0aGUgc25hcHNob3QsIHdlIG11c3QgcmV0dXJuIGl0ICovCisJCQl2YWxpZCA9IEhl YXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkoaGVhcFR1cGxlLCBzbmFwc2hvdCwgYnVmZmVyKTsK KwkJCUhlYXBDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0T3V0KHZhbGlkLCByZWxhdGlvbiwg aGVhcFR1cGxlLAorCQkJCQkJCQkJCQkJYnVmZmVyLCBzbmFwc2hvdCk7CisKKwkJCWlmICh2YWxp ZCkKKwkJCXsKKwkJCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcih0aWQsIG9mZm51bSk7CisJ CQkJUHJlZGljYXRlTG9ja1RJRChyZWxhdGlvbiwgJmhlYXBUdXBsZS0+dF9zZWxmLCBzbmFwc2hv dCwKKwkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKTsK KwkJCQlpZiAoYWxsX2RlYWQpCisJCQkJCSphbGxfZGVhZCA9IGZhbHNlOworCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQl9CisJCXNraXAgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB3ZSBjYW4n dCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKKwkJICog cmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBhbGwK KwkJICogdHJhbnNhY3Rpb25zLgorCQkgKgorCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBj cml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKKwkJICogcGxhbm5lcidz IGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KKwkJICovCisJ CWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCisJCXsKKwkJCWlmICghdmlzdGVzdCkKKwkJCQl2 aXN0ZXN0ID0gR2xvYmFsVmlzVGVzdEZvcihyZWxhdGlvbik7CisKKwkJCWlmICghSGVhcFR1cGxl SXNTdXJlbHlEZWFkKGhlYXBUdXBsZSwgdmlzdGVzdCkpCisJCQkJKmFsbF9kZWFkID0gZmFsc2U7 CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0byBzZWUgaWYgSE9UIGNoYWluIGNvbnRpbnVlcyBw YXN0IHRoaXMgdHVwbGU7IGlmIHNvIGZldGNoCisJCSAqIHRoZSBuZXh0IG9mZm51bSBhbmQgbG9v cCBhcm91bmQuCisJCSAqLworCQlpZiAoSGVhcFR1cGxlSXNIb3RVcGRhdGVkKGhlYXBUdXBsZSkp CisJCXsKKwkJCUFzc2VydChJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZoZWFwVHVwbGUtPnRf ZGF0YS0+dF9jdGlkKSA9PQorCQkJCSAgIGJsa25vKTsKKwkJCW9mZm51bSA9IEl0ZW1Qb2ludGVy R2V0T2Zmc2V0TnVtYmVyKCZoZWFwVHVwbGUtPnRfZGF0YS0+dF9jdGlkKTsKKwkJCWF0X2NoYWlu X3N0YXJ0ID0gZmFsc2U7CisJCQlwcmV2X3htYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRhdGVY aWQoaGVhcFR1cGxlLT50X2RhdGEpOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOwkJCQkvKiBlbmQg b2YgY2hhaW4gKi8KKworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbAoraGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAorCQkJCQkJ IEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxf ZGVhZCkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuOworCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVh cFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CisJYm9vbAkJZ290X2hlYXBfdHVwbGU7CisKKwlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKworCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCisJaWYgKCEq aGVhcF9jb250aW51ZSkKKwl7CisJCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBk b24ndCBoYXZlIGl0IGFscmVhZHkgKi8KKwkJQnVmZmVyCQlwcmV2X2J1ZiA9IGhzY2FuLT54c19j YnVmOworCisJCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwkJLyoKKwkJICogUHJ1bmUgcGFnZSwg YnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkgKi8KKwkJaWYg KHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQorCQkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nh bi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAorCQkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVm ZmVyLAorCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05M WSk7CisJfQorCisJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4g ZXhhbWluZSB2aXNpYmlsaXR5ICovCisJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0 aWQsCisJCQkJCQkJCQkJCWhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCXNuYXBzaG90LAorCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVw ZGF0YSwKKwkJCQkJCQkJCQkJYWxsX2RlYWQsCisJCQkJCQkJCQkJCSEqaGVhcF9jb250aW51ZSk7 CisJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOworCUxvY2tCdWZmZXIoaHNjYW4t PnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZ290X2hlYXBfdHVwbGUpCisJ eworCQkvKgorCQkgKiBPbmx5IGluIGEgbm9uLU1WQ0Mgc25hcHNob3QgY2FuIG1vcmUgdGhhbiBv bmUgbWVtYmVyIG9mIHRoZSBIT1QKKwkJICogY2hhaW4gYmUgdmlzaWJsZS4KKwkJICovCisJCSpo ZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJc2xvdC0+ dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOworCQlFeGVjU3RvcmVC dWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVm KTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBIT1Qg Y2hhaW4uICovCisJCSpoZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGdvdF9o ZWFwX3R1cGxlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9tZXNvbi5idWlsZAppbmRleCA5MmFiOGJl M2QuLjAwZWMwN2Q3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVpbGQKQEAgLTMsNiAr Myw3IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdoZWFwYW0uYycsCiAgICdoZWFw YW1faGFuZGxlci5jJywKKyAgJ2hlYXBhbV9pbmRleHNjYW4uYycsCiAgICdoZWFwYW1fdmlzaWJp bGl0eS5jJywKICAgJ2hlYXBhbV94bG9nLmMnLAogICAnaGVhcHRvYXN0LmMnLAotLSAKMi41My4w Cgo= --000000000000aca165064e876fb1--