Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9nMD-0001LY-Sl for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Jul 2022 12:45:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o9nLD-0004iR-JU for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Jul 2022 12:44:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9nLD-0004iI-1h for pgsql-hackers@lists.postgresql.org; Fri, 08 Jul 2022 12:44:15 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o9nL5-0003Bf-3J for pgsql-hackers@postgresql.org; Fri, 08 Jul 2022 12:44:14 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 09BD65C0192; Fri, 8 Jul 2022 08:44:04 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Fri, 08 Jul 2022 08:44:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1657284244; x=1657370644; bh=NXNm/gIoREqToD74+kBvJQnzDVPC ibKV6uhHeftMmLw=; b=K+R0f/sEmfR/7e5/K8l/OcbF/3B0r89n9CpjUY988uPH Zz2vjevvAE3Ql9gNC590JnKyA5mcXpWkOkA0sQlfYYQTzmQxcTnyj5wEmXsJ+wtZ Y3BJIZfgLvKkhMcqwqXHhcBmMheEMi9gLM/ZShOfRucRy8sShQIr0l22c/ZwOKO2 5+2m2Bi+DFGwGUbDxQzrob346ety3iTiwM3eSxoWkCRLivbJ0AS+ZUpS4oF11gAk IdC9WQ8iEYHJ4osyfHBPeJcafl5GfgZD66gloYEn0u1VSQZdU38SoF1ufrYHjEGb dANKPk8jdJxW4obOg6v74pZvd4ZHSljRgWSo6HAajg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrudeijedgheejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffvvehfhfgjsehmtd erredtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghr rdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrg htthgvrhhnpeeutdekheeuhedtvdfgffehleetfefhieefudeitdffiedtledujefhjedu feffffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hpvghtvghrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 8 Jul 2022 08:44:02 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------FGxm4tcbkkIh70V71WhAiW8d" Message-ID: Date: Fri, 8 Jul 2022 14:44:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: automatically generating node support functions Content-Language: en-US To: Tom Lane Cc: David Rowley , pgsql-hackers References: <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> <40a2e977-98ba-0c01-af6c-9dfb39e864ba@enterprisedb.com> <812ea8eb-6827-ba32-6ec0-6714f7ffa5dd@enterprisedb.com> <2905876.1644858587@sss.pgh.pa.us> <968928d9-a526-a1b5-dc36-0355632a843e@enterprisedb.com> <1294462.1656875649@sss.pgh.pa.us> <57df9f30-d2cf-9126-28d4-ae40a2e733a9@enterprisedb.com> <1593978.1656953960@sss.pgh.pa.us> <2592455.1657140387@sss.pgh.pa.us> From: Peter Eisentraut In-Reply-To: <2592455.1657140387@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------FGxm4tcbkkIh70V71WhAiW8d Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06.07.22 22:46, Tom Lane wrote: > Peter Eisentraut writes: >> [ v7-0001-Automatically-generate-node-support-functions.patch ] > > I have gone through this and made some proposed changes (attached), I have included those. > and I think it is almost committable. There is one nasty problem > we need a solution to, which is that pgindent is not at all on board > with this idea of attaching node attrs to typedefs. It pushes them > to the next line, like this: > > @@ -691,7 +709,8 @@ > (rel)->reloptkind == RELOPT_OTHER_JOINREL || \ > (rel)->reloptkind == RELOPT_OTHER_UPPER_REL) > > -typedef struct RelOptInfo pg_node_attr(no_copy_equal, no_read) > +typedef struct RelOptInfo > +pg_node_attr(no_copy_equal, no_read) > { > NodeTag type; I have found that putting the attributes at the end of the struct definition, right before the semicolon, works, so I have changed it that way. (This is also where a gcc __attribute__() would go, so it seems reasonable.) The attached patch is stable under pgindent. Finally, I have updated src/backend/nodes/README a bit. I realize I've been confused various times about when a catversion change is required when changing nodes. (I think the bump in 251154bebe was probably not needed.) I have tried to put that in the README. This could perhaps be expanded. I think for this present patch, I would do a catversion bump, just to be sure, in case some of the printed node fields are different now. It was also my plan to remove the #ifdef OBSOLETE sections in a separate commit right after, just to be clear. Final thoughts? --------------FGxm4tcbkkIh70V71WhAiW8d Content-Type: text/plain; charset=UTF-8; name="v8-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v8-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSAzZDQyN2IyY2JlOTYxMGMzY2M3YjAwNzIwZThmMmRlZjkzZjE5OTQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCA4IEp1bCAyMDIyIDE0OjM1OjQ1ICswMjAwClN1YmplY3Q6 IFtQQVRDSCB2OF0gQXV0b21hdGljYWxseSBnZW5lcmF0ZSBub2RlIHN1cHBvcnQgZnVuY3Rp b25zCgpBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgbm9kZSBz dXBwb3J0IGZ1bmN0aW9ucwooY29weSwgZXF1YWwsIG91dCwgYW5kIHJlYWQsIGFzIHdlbGwg YXMgdGhlIG5vZGUgdGFncyBlbnVtKSBmcm9tIHRoZQpzdHJ1Y3QgZGVmaW5pdGlvbnMuCgpG b3IgZWFjaCBvZiB0aGUgZm91ciBub2RlIHN1cHBvcnQgZmlsZXMsIGl0IGNyZWF0ZXMgdHdv IGluY2x1ZGUgZmlsZXMsCmUuZy4sIGNvcHlmdW5jcy5mdW5jcy5jIGFuZCBjb3B5ZnVuY3Mu c3dpdGNoLmMsIHRvIGluY2x1ZGUgaW4gdGhlIG1haW4KZmlsZS4gIEFsbCB0aGUgc2NhZmZv bGRpbmcgb2YgdGhlIG1haW4gZmlsZSBzdGF5cyBpbiBwbGFjZS4KClRPRE86IEluIHRoaXMg cGF0Y2gsIEkgaGF2ZSBvbmx5IGlmZGVmJ2VkIG91dCB0aGUgY29kZSB0byBjb3VsZCBiZQpy ZW1vdmVkLCBtYWlubHkgc28gdGhhdCBpdCB3b24ndCBjb25zdGFudGx5IGhhdmUgbWVyZ2Ug Y29uZmxpY3RzLgpFdmVudHVhbGx5LCB0aGF0IHNob3VsZCBhbGwgYmUgY2hhbmdlZCB0byBk ZWxldGUgdGhlIGNvZGUuICBBbGwgdGhlCmNvZGUgY29tbWVudHMgdGhhdCBhcmUgd29ydGgg a2VlcGluZyBmcm9tIHRob3NlIHNlY3Rpb25zIGhhdmUgYWxyZWFkeQpiZWVuIG1vdmVkIHRv IHRoZSBoZWFkZXIgZmlsZXMgd2hlcmUgdGhlIHN0cnVjdHMgYXJlIGRlZmluZWQuCgpJIGhh dmUgdHJpZWQgdG8gbW9zdGx5IG1ha2UgdGhlIGNvdmVyYWdlIG9mIHRoZSBvdXRwdXQgbWF0 Y2ggd2hhdCBpcwpjdXJyZW50bHkgdGhlcmUuICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIG5v dyBkbyBvdXQvcmVhZCBjb3ZlcmFnZSBvZgp1dGlsaXR5IHN0YXRlbWVudCBub2RlcywgYnV0 IEkgaGF2ZSBtYW51YWxseSBleGNsdWRlZCB0aG9zZSBmb3Igbm93LgpUaGUgcmVhc29uIGlz IG1haW5seSB0aGF0IGl0J3MgZWFzaWVyIHRvIGRpZmYgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIs CmFuZCBhZGRpbmcgYSBidW5jaCBvZiBzdHVmZiBsaWtlIHRoaXMgbWlnaHQgcmVxdWlyZSBh IHNlcGFyYXRlCmFuYWx5c2lzIGFuZCByZXZpZXcuCgpTdWJ0eXBpbmcgKFRpZFNjYW4gLT4g U2NhbikgaXMgc3VwcG9ydGVkLgoKRm9yIHRoZSBoYXJkIGNhc2VzLCB5b3UgY2FuIGp1c3Qg d3JpdGUgYSBtYW51YWwgZnVuY3Rpb24gYW5kIGV4Y2x1ZGUKZ2VuZXJhdGluZyBvbmUuICBG b3IgdGhlIG5vdCBzbyBoYXJkIGNhc2VzLCB0aGVyZSBpcyBhIHdheSBvZgphbm5vdGF0aW5n IHN0cnVjdCBmaWVsZHMgdG8gZ2V0IHNwZWNpYWwgYmVoYXZpb3JzLiAgRm9yIGV4YW1wbGUs CnBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpIGhhcyB0aGUgZmllbGQgaWdub3JlZCBpbiBl cXVhbCBmdW5jdGlvbnMuCgpSZXZpZXdlZC1ieTogVG9tIExhbmUgPHRnbEBzc3MucGdoLnBh LnVzPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlk L2ZsYXQvYzEwOTc1OTAtYTZhNC00ODZhLTY0YjEtZTFmOWNjMDUzM2NlJTQwZW50ZXJwcmlz ZWRiLmNvbQotLS0KIHNyYy9iYWNrZW5kL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg fCAgMTAgKy0KIHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAg IDQgKwogc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICA1OSAr Kwogc3JjL2JhY2tlbmQvbm9kZXMvUkVBRE1FICAgICAgICAgICAgICAgICB8ICA3NCArLQog c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgICB8ICAyMCArLQogc3Jj L2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICAgICB8ICAyMiArLQogc3JjL2Jh Y2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCAgICB8IDg0NSArKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyAgICAgICAgICAgICB8 ICAzNCArLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgICB8ICAy MyArLQogc3JjL2luY2x1ZGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oICAgICAgICAgIHwgICA4ICstCiBz cmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlICAgICAgICAgICAgIHwgICAyICsKIHNyYy9p bmNsdWRlL25vZGVzL2V4dGVuc2libGUuaCAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNs dWRlL25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAgfCAgNjcgKysKIHNyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgfCAzMzEgKysrKystLS0tCiBzcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgIHwgMTIxICsrLS0KIHNyYy9pbmNsdWRl L25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgfCAgNDYgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL3ZhbHVlLmggICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3JlbC5oICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy90b29scy9tc3ZjL1NvbHV0 aW9uLnBtICAgICAgICAgICAgICAgfCAgNDYgKysKIHNyYy90b29scy9wZ2luZGVudC9leGNs dWRlX2ZpbGVfcGF0dGVybnMgfCAgIDUgKwogMjIgZmlsZXMgY2hhbmdlZCwgMTQ4MSBpbnNl cnRpb25zKCspLCAyNzYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvbm9kZXMvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5j bHVkZS9ub2Rlcy8uZ2l0aWdub3JlCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9NYWtlZmlsZQppbmRleCA0YTAyMDA2Nzg4Li45NTNjODBkYjVh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9N YWtlZmlsZQpAQCAtMTQzLDExICsxNDMsMTUgQEAgc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVz Lmg6IHN0b3JhZ2UvbG1nci9nZW5lcmF0ZS1sd2xvY2tuYW1lcy5wbCBzdG9yYWdlL2xtZ3Iv bHcKIHN1Ym1ha2UtY2F0YWxvZy1oZWFkZXJzOgogCSQoTUFLRSkgLUMgY2F0YWxvZyBkaXN0 cHJlcCBnZW5lcmF0ZWQtaGVhZGVyLXN5bWxpbmtzCiAKKyMgcnVuIHRoaXMgdW5jb25kaXRp b25hbGx5IHRvIGF2b2lkIG5lZWRpbmcgdG8ga25vdyBpdHMgZGVwZW5kZW5jaWVzIGhlcmU6 CitzdWJtYWtlLW5vZGVzLWhlYWRlcnM6CisJJChNQUtFKSAtQyBub2RlcyBkaXN0cHJlcCBn ZW5lcmF0ZWQtaGVhZGVyLXN5bWxpbmtzCisKICMgcnVuIHRoaXMgdW5jb25kaXRpb25hbGx5 IHRvIGF2b2lkIG5lZWRpbmcgdG8ga25vdyBpdHMgZGVwZW5kZW5jaWVzIGhlcmU6CiBzdWJt YWtlLXV0aWxzLWhlYWRlcnM6CiAJJChNQUtFKSAtQyB1dGlscyBkaXN0cHJlcCBnZW5lcmF0 ZWQtaGVhZGVyLXN5bWxpbmtzCiAKLS5QSE9OWTogc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMg c3VibWFrZS11dGlscy1oZWFkZXJzCisuUEhPTlk6IHN1Ym1ha2UtY2F0YWxvZy1oZWFkZXJz IHN1Ym1ha2Utbm9kZXMtaGVhZGVycyBzdWJtYWtlLXV0aWxzLWhlYWRlcnMKIAogIyBNYWtl IHN5bWxpbmtzIGZvciB0aGVzZSBoZWFkZXJzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yeS4g VGhhdCB3YXkKICMgd2UgY2FuIGN1dCBkb3duIG9uIHRoZSAtSSBvcHRpb25zLiBBbHNvLCBh IHN5bWxpbmsgaXMgYXV0b21hdGljYWxseQpAQCAtMTYyLDcgKzE2Niw3IEBAIHN1Ym1ha2Ut dXRpbHMtaGVhZGVyczoKIAogLlBIT05ZOiBnZW5lcmF0ZWQtaGVhZGVycwogCi1nZW5lcmF0 ZWQtaGVhZGVyczogJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3BhcnNlci9ncmFtLmgg JCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbmFtZXMuaCBzdWJt YWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLXV0aWxzLWhlYWRlcnMKK2dlbmVyYXRlZC1o ZWFkZXJzOiAkKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUvcGFyc2VyL2dyYW0uaCAkKHRv cF9idWlsZGRpcikvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tuYW1lcy5oIHN1Ym1ha2Ut Y2F0YWxvZy1oZWFkZXJzIHN1Ym1ha2Utbm9kZXMtaGVhZGVycyBzdWJtYWtlLXV0aWxzLWhl YWRlcnMKIAogJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3BhcnNlci9ncmFtLmg6IHBh cnNlci9ncmFtLmgKIAlwcmVyZXFkaXI9YGNkICckKGRpciAkPCknID4vZGV2L251bGwgJiYg cHdkYCAmJiBcCkBAIC0xODUsNiArMTg5LDcgQEAgZGlzdHByZXA6CiAJJChNQUtFKSAtQyBw YXJzZXIJZ3JhbS5jIGdyYW0uaCBzY2FuLmMKIAkkKE1BS0UpIC1DIGJvb3RzdHJhcAlib290 cGFyc2UuYyBib290c2Nhbm5lci5jCiAJJChNQUtFKSAtQyBjYXRhbG9nCWRpc3RwcmVwCisJ JChNQUtFKSAtQyBub2RlcwlkaXN0cHJlcAogCSQoTUFLRSkgLUMgcmVwbGljYXRpb24JcmVw bF9ncmFtLmMgcmVwbF9zY2FubmVyLmMgc3luY3JlcF9ncmFtLmMgc3luY3JlcF9zY2FubmVy LmMKIAkkKE1BS0UpIC1DIHN0b3JhZ2UvbG1ncglsd2xvY2tuYW1lcy5oIGx3bG9ja25hbWVz LmMKIAkkKE1BS0UpIC1DIHV0aWxzCWRpc3RwcmVwCkBAIC0yOTcsNiArMzAyLDcgQEAgZGlz dGNsZWFuOiBjbGVhbgogCiBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KIAkkKE1BS0Up IC1DIGNhdGFsb2cgJEAKKwkkKE1BS0UpIC1DIG5vZGVzICRACiAJJChNQUtFKSAtQyB1dGls cyAkQAogCXJtIC1mIGJvb3RzdHJhcC9ib290cGFyc2UuYyBcCiAJICAgICAgYm9vdHN0cmFw L2Jvb3RzY2FubmVyLmMgXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvLmdpdGln bm9yZSBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMGMxNGI1Njk3YgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisvbm9kZS1zdXBw b3J0LXN0YW1wCisvbm9kZXRhZ3MuaAorLypmdW5jcy5mdW5jcy5jCisvKmZ1bmNzLnN3aXRj aC5jCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL25vZGVzL01ha2VmaWxlCmluZGV4IDVkMmIxMmE5OTMuLjFhMGQ1YjkzMTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL01ha2VmaWxlCkBAIC0zMCwzICszMCw2MiBAQCBPQkpTID0gXAogCXZhbHVlLm8KIAog aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5taworCitub2RlX2hl YWRlcnMgPSBcCisJbm9kZXMvbm9kZXMuaCBcCisJbm9kZXMvZXhlY25vZGVzLmggXAorCW5v ZGVzL3BsYW5ub2Rlcy5oIFwKKwlub2Rlcy9wcmltbm9kZXMuaCBcCisJbm9kZXMvcGF0aG5v ZGVzLmggXAorCW5vZGVzL2V4dGVuc2libGUuaCBcCisJbm9kZXMvcGFyc2Vub2Rlcy5oIFwK Kwlub2Rlcy9yZXBsbm9kZXMuaCBcCisJbm9kZXMvdmFsdWUuaCBcCisJY29tbWFuZHMvdHJp Z2dlci5oIFwKKwljb21tYW5kcy9ldmVudF90cmlnZ2VyLmggXAorCWZvcmVpZ24vZmR3YXBp LmggXAorCWFjY2Vzcy9hbWFwaS5oIFwKKwlhY2Nlc3MvdGFibGVhbS5oIFwKKwlhY2Nlc3Mv dHNtYXBpLmggXAorCXV0aWxzL3JlbC5oIFwKKwlub2Rlcy9zdXBwb3J0bm9kZXMuaCBcCisJ ZXhlY3V0b3IvdHVwdGFibGUuaCBcCisJbm9kZXMvbG9ja29wdGlvbnMuaCBcCisJYWNjZXNz L3NkaXIuaAorCisjIHNlZSBhbHNvIGNhdGFsb2cvTWFrZWZpbGUgZm9yIGFuIGV4cGxhbmF0 aW9uIG9mIHRoZXNlIG1ha2UgcnVsZXMKKworYWxsOiBkaXN0cHJlcCBnZW5lcmF0ZWQtaGVh ZGVyLXN5bWxpbmtzCisKK2Rpc3RwcmVwOiBub2RlLXN1cHBvcnQtc3RhbXAKKworLlBIT05Z OiBnZW5lcmF0ZWQtaGVhZGVyLXN5bWxpbmtzCisKK2dlbmVyYXRlZC1oZWFkZXItc3ltbGlu a3M6ICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9ub2Rlcy9oZWFkZXItc3RhbXAKKwor IyBub2RlLXN1cHBvcnQtc3RhbXAgcmVjb3JkcyB0aGUgbGFzdCB0aW1lIHdlIHJhbiBnZW5f bm9kZV9zdXBwb3J0LnBsLgorIyBXZSBkb24ndCByZWx5IG9uIHRoZSB0aW1lc3RhbXBzIG9m IHRoZSBpbmRpdmlkdWFsIG91dHB1dCBmaWxlcywKKyMgYmVjYXVzZSB0aGUgUGVybCBzY3Jp cHQgd29uJ3QgdXBkYXRlIHRoZW0gaWYgdGhleSBkaWRuJ3QgY2hhbmdlICh0bworIyBhdm9p ZCB1bm5lY2Vzc2FyeSByZWNvbXBpbGVzKS4KK25vZGUtc3VwcG9ydC1zdGFtcDogZ2VuX25v ZGVfc3VwcG9ydC5wbCAkKGFkZHByZWZpeCAkKHRvcF9zcmNkaXIpL3NyYy9pbmNsdWRlLywk KG5vZGVfaGVhZGVycykpCisJJChQRVJMKSAkXgorCXRvdWNoICRACisKKyMgVGhlc2UgZ2Vu ZXJhdGVkIGhlYWRlcnMgbXVzdCBiZSBzeW1saW5rZWQgaW50byBidWlsZGRpci9zcmMvaW5j bHVkZS8sCisjIHVzaW5nIGFic29sdXRlIGxpbmtzIGZvciB0aGUgcmVhc29ucyBleHBsYWlu ZWQgaW4gc3JjL2JhY2tlbmQvTWFrZWZpbGUuCisjIFdlIHVzZSBoZWFkZXItc3RhbXAgdG8g cmVjb3JkIHRoYXQgd2UndmUgZG9uZSB0aGlzIGJlY2F1c2UgdGhlIHN5bWxpbmtzCisjIHRo ZW1zZWx2ZXMgbWF5IGFwcGVhciBvbGRlciB0aGFuIG5vZGUtc3VwcG9ydC1zdGFtcC4KKyQo dG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9ub2Rlcy9oZWFkZXItc3RhbXA6IG5vZGUtc3Vw cG9ydC1zdGFtcAorCXByZXJlcWRpcj1gY2QgJyQoZGlyICQ8KScgPi9kZXYvbnVsbCAmJiBw d2RgICYmIFwKKwljZCAnJChkaXIgJEApJyAmJiBmb3IgZmlsZSBpbiBub2RldGFncy5oOyBk byBcCisJICBybSAtZiAkJGZpbGUgJiYgJChMTl9TKSAiJCRwcmVyZXFkaXIvJCRmaWxlIiAu IDsgXAorCWRvbmUKKwl0b3VjaCAkQAorCitjb3B5ZnVuY3MubzogY29weWZ1bmNzLmMgY29w eWZ1bmNzLmZ1bmNzLmMgY29weWZ1bmNzLnN3aXRjaC5jIHwgbm9kZS1zdXBwb3J0LXN0YW1w CitlcXVhbGZ1bmNzLm86IGVxdWFsZnVuY3MuYyBlcXVhbGZ1bmNzLmZ1bmNzLmMgZXF1YWxm dW5jcy5zd2l0Y2guYyB8IG5vZGUtc3VwcG9ydC1zdGFtcAorb3V0ZnVuY3Mubzogb3V0ZnVu Y3MuYyBvdXRmdW5jcy5mdW5jcy5jIG91dGZ1bmNzLnN3aXRjaC5jIHwgbm9kZS1zdXBwb3J0 LXN0YW1wCityZWFkZnVuY3MubzogIHJlYWRmdW5jcy5jIHJlYWRmdW5jcy5mdW5jcy5jIHJl YWRmdW5jcy5zd2l0Y2guYyB8IG5vZGUtc3VwcG9ydC1zdGFtcAorCittYWludGFpbmVyLWNs ZWFuOiBjbGVhbgorCXJtIC1mIG5vZGUtc3VwcG9ydC1zdGFtcCAkKGFkZHN1ZmZpeCBmdW5j cy5mdW5jcy5jLGNvcHkgZXF1YWwgb3V0IHJlYWQpICQoYWRkc3VmZml4IGZ1bmNzLnN3aXRj aC5jLGNvcHkgZXF1YWwgb3V0IHJlYWQpIG5vZGV0YWdzLmgKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL25vZGVzL1JFQURNRSBiL3NyYy9iYWNrZW5kL25vZGVzL1JFQURNRQppbmRleCBk MDY2YWM1YzYxLi4yZDZhN2JjZjdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9S RUFETUUKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvUkVBRE1FCkBAIC0zLDI2ICszLDMzIEBA IHNyYy9iYWNrZW5kL25vZGVzL1JFQURNRQogTm9kZSBTdHJ1Y3R1cmVzCiA9PT09PT09PT09 PT09PT0KIAotQW5kcmV3IFl1ICgxMS85NCkKLQogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0t LS0KIAotVGhlIGN1cnJlbnQgbm9kZSBzdHJ1Y3R1cmVzIGFyZSBwbGFpbiBvbGQgQyBzdHJ1 Y3R1cmVzLiAiSW5oZXJpdGFuY2UiIGlzCi1hY2hpZXZlZCBieSBjb252ZW50aW9uLiBObyBh ZGRpdGlvbmFsIGZ1bmN0aW9ucyB3aWxsIGJlIGdlbmVyYXRlZC4gRnVuY3Rpb25zCi10aGF0 IG1hbmlwdWxhdGUgbm9kZSBzdHJ1Y3R1cmVzIHJlc2lkZSBpbiB0aGlzIGRpcmVjdG9yeS4K K1RoZSBub2RlIHN0cnVjdHVyZXMgYXJlIHBsYWluIG9sZCBDIHN0cnVjdHVyZXMgd2l0aCB0 aGUgZmlyc3QgZmllbGQgb2YKK3R5cGUgTm9kZVRhZy4gICJJbmhlcml0YW5jZSIgaXMgYWNo aWV2ZWQgYnkgY29udmVudGlvbjogVGhlIGZpcnN0CitmaWVsZCBjYW4gYWx0ZXJuYXRpdmVs eSBiZSBvZiBhbm90aGVyIG5vZGUgdHlwZS4gIEZ1bmN0aW9ucyB0aGF0CittYW5pcHVsYXRl IG5vZGUgc3RydWN0dXJlcyByZXNpZGUgaW4gdGhpcyBkaXJlY3RvcnkuICBTb21lIHN1cHBv cnQKK2Z1bmN0aW9ucyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlIGdlbl9u b2RlX3N1cHBvcnQucGwKK3NjcmlwdCwgb3RoZXIgZnVuY3Rpb25zIGFyZSBtYWludGFpbmVk IG1hbnVhbGx5LiAgVG8gY29udHJvbCB0aGUKK2F1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHNv bWUgc3VwcG9ydCBmdW5jdGlvbnMsIG5vZGUgdHlwZXMgYW5kIG5vZGUKK2ZpZWxkcyBjYW4g YmUgYW5ub3RhdGVkIHdpdGggcGdfbm9kZV9hdHRyKCkgc3BlY2lmaWNhdGlvbnM7IHNlZQor ZnVydGhlciBkb2N1bWVudGF0aW9uIGluIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmguCiAK IAogRklMRVMgSU4gVEhJUyBESVJFQ1RPUlkgKHNyYy9iYWNrZW5kL25vZGVzLykKIAogICAg IEdlbmVyYWwtcHVycG9zZSBub2RlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnM6Ci0JY29weWZ1 bmNzLmMJLSBjb3B5IGEgbm9kZSB0cmVlCi0JZXF1YWxmdW5jcy5jCS0gY29tcGFyZSB0d28g bm9kZSB0cmVlcwotCW91dGZ1bmNzLmMJLSBjb252ZXJ0IGEgbm9kZSB0cmVlIHRvIHRleHQg cmVwcmVzZW50YXRpb24KLQlyZWFkZnVuY3MuYwktIGNvbnZlcnQgdGV4dCByZXByZXNlbnRh dGlvbiBiYWNrIHRvIGEgbm9kZSB0cmVlCisJY29weWZ1bmNzLmMJLSBjb3B5IGEgbm9kZSB0 cmVlICgqKQorCWVxdWFsZnVuY3MuYwktIGNvbXBhcmUgdHdvIG5vZGUgdHJlZXMgKCopCisJ b3V0ZnVuY3MuYwktIGNvbnZlcnQgYSBub2RlIHRyZWUgdG8gdGV4dCByZXByZXNlbnRhdGlv biAoKikKKwlyZWFkZnVuY3MuYwktIGNvbnZlcnQgdGV4dCByZXByZXNlbnRhdGlvbiBiYWNr IHRvIGEgbm9kZSB0cmVlICgqKQogCW1ha2VmdW5jcy5jCS0gY3JlYXRvciBmdW5jdGlvbnMg Zm9yIHNvbWUgY29tbW9uIG5vZGUgdHlwZXMKIAlub2RlRnVuY3MuYwktIHNvbWUgb3RoZXIg Z2VuZXJhbC1wdXJwb3NlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMKIAorICAgICgqKSAtIE1v c3QgZnVuY3Rpb25zIGluIHRoZXNlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkKKyAgICBnZW5f bm9kZV9zdXBwb3J0LnBsIGFuZCAjaW5jbHVkZSdkIHRoZXJlLgorCiAgICAgU3BlY2lhbGl6 ZWQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczoKIAliaXRtYXBzZXQuYwktIEJpdG1hcHNldCBz dXBwb3J0CiAJbGlzdC5jCQktIGdlbmVyaWMgbGlzdCBzdXBwb3J0CkBAIC0zMyw3ICs0MCw3 IEBAIEZJTEVTIElOIFRISVMgRElSRUNUT1JZIChzcmMvYmFja2VuZC9ub2Rlcy8pCiBGSUxF UyBJTiBzcmMvaW5jbHVkZS9ub2Rlcy8KIAogICAgIE5vZGUgZGVmaW5pdGlvbnM6Ci0Jbm9k ZXMuaAkJLSBkZWZpbmUgbm9kZSB0YWdzIChOb2RlVGFnKQorCW5vZGVzLmgJCS0gZGVmaW5l IG5vZGUgdGFncyAoTm9kZVRhZykgKCopCiAJcHJpbW5vZGVzLmgJLSBwcmltaXRpdmUgbm9k ZXMKIAlwYXJzZW5vZGVzLmgJLSBwYXJzZSB0cmVlIG5vZGVzCiAJcGF0aG5vZGVzLmgJLSBw YXRoIHRyZWUgbm9kZXMgYW5kIHBsYW5uZXIgaW50ZXJuYWwgc3RydWN0dXJlcwpAQCAtNDIs MzkgKzQ5LDM0IEBAIEZJTEVTIElOIHNyYy9pbmNsdWRlL25vZGVzLwogCW1lbW5vZGVzLmgJ LSBtZW1vcnkgbm9kZXMKIAlwZ19saXN0LmgJLSBnZW5lcmljIGxpc3QKIAorICAgICgqKSAt IEFsc28gI2luY2x1ZGUncyBmaWxlcyBnZW5lcmF0ZWQgYnkgZ2VuX25vZGVfc3VwcG9ydC5w bC4KKwogCiBTdGVwcyB0byBBZGQgYSBOb2RlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFN1 cHBvc2UgeW91IHdhbnQgdG8gZGVmaW5lIGEgbm9kZSBGb286CiAKLTEuIEFkZCBhIHRhZyAo VF9Gb28pIHRvIHRoZSBlbnVtIE5vZGVUYWcgaW4gbm9kZXMuaC4gIChJZiB5b3UgaW5zZXJ0 IHRoZQotICAgdGFnIGluIGEgd2F5IHRoYXQgbW92ZXMgdGhlIG51bWJlcnMgYXNzb2NpYXRl ZCB3aXRoIGV4aXN0aW5nIHRhZ3MsCi0gICB5b3UnbGwgbmVlZCB0byByZWNvbXBpbGUgdGhl IHdob2xlIHRyZWUgYWZ0ZXIgZG9pbmcgdGhpcy4gIEl0IGRvZXNuJ3QKLSAgIGZvcmNlIGlu aXRkYiB0aG91Z2gsIGJlY2F1c2UgdGhlIG51bWJlcnMgbmV2ZXIgZ28gdG8gZGlzay4pCi0y LiBBZGQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBpbmNs dWRlL25vZGVzLz8/Py5oIGZpbGUuCisxLiBBZGQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9u IHRvIHRoZSBhcHByb3ByaWF0ZSBpbmNsdWRlL25vZGVzLz8/Py5oIGZpbGUuCiAgICBJZiB5 b3UgaW50ZW5kIHRvIGluaGVyaXQgZnJvbSwgc2F5IGEgUGxhbiBub2RlLCBwdXQgUGxhbiBh cyB0aGUgZmlyc3QgZmllbGQKLSAgIG9mIHlvdXIgc3RydWN0IGRlZmluaXRpb24uCi0zLiBJ ZiB5b3UgaW50ZW5kIHRvIHVzZSBjb3B5T2JqZWN0LCBlcXVhbCwgbm9kZVRvU3RyaW5nIG9y IHN0cmluZ1RvTm9kZSwKLSAgIGFkZCBhbiBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBjb3B5 ZnVuY3MuYywgZXF1YWxmdW5jcy5jLCBvdXRmdW5jcy5jCi0gICBhbmQgcmVhZGZ1bmNzLmMg YWNjb3JkaW5nbHkuICAoRXhjZXB0IGZvciBmcmVxdWVudGx5IHVzZWQgbm9kZXMsIGRvbid0 Ci0gICBib3RoZXIgd3JpdGluZyBhIGNyZWF0b3IgZnVuY3Rpb24gaW4gbWFrZWZ1bmNzLmMp ICBUaGUgaGVhZGVyIGNvbW1lbnRzCi0gICBpbiB0aG9zZSBmaWxlcyBnaXZlIGdlbmVyYWwg cnVsZXMgZm9yIHdoZXRoZXIgeW91IG5lZWQgdG8gYWRkIHN1cHBvcnQuCi00LiBBZGQgY2Fz ZXMgdG8gdGhlIGZ1bmN0aW9ucyBpbiBub2RlRnVuY3MuYyBhcyBuZWVkZWQuICBUaGVyZSBh cmUgbWFueQorICAgb2YgeW91ciBzdHJ1Y3QgZGVmaW5pdGlvbi4gIChUaGUgVF9Gb28gdGFn IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseS4pCisyLiBDaGVjayB0aGF0IHRoZSBnZW5lcmF0 ZWQgc3VwcG9ydCBmdW5jdGlvbnMgaW4gY29weWZ1bmNzLmMsIGVxdWFsZnVuY3MuYywKKyAg IG91dGZ1bmNzLmMgYW5kIHJlYWRmdW5jcy5jIGxvb2sgY29ycmVjdC4gIEFkZCBhdHRyaWJ1 dGVzIGFzIG5lY2Vzc2FyeSB0bworICAgY29udHJvbCB0aGUgb3V0Y29tZS4gIChFeGNlcHQg Zm9yIGZyZXF1ZW50bHkgdXNlZCBub2RlcywgZG9uJ3QgYm90aGVyCisgICB3cml0aW5nIGEg Y3JlYXRvciBmdW5jdGlvbiBpbiBtYWtlZnVuY3MuYykKKzMuIEFkZCBjYXNlcyB0byB0aGUg ZnVuY3Rpb25zIGluIG5vZGVGdW5jcy5jIGFzIG5lZWRlZC4gIFRoZXJlIGFyZSBtYW55CiAg ICBvdGhlciBwbGFjZXMgeW91J2xsIHByb2JhYmx5IGFsc28gbmVlZCB0byB0ZWFjaCBhYm91 dCB5b3VyIG5ldyBub2RlCiAgICB0eXBlLiAgQmVzdCBiZXQgaXMgdG8gZ3JlcCBmb3IgcmVm ZXJlbmNlcyB0byBvbmUgb3IgdHdvIHNpbWlsYXIgZXhpc3RpbmcKICAgIG5vZGUgdHlwZXMg dG8gZmluZCBhbGwgdGhlIHBsYWNlcyB0byB0b3VjaC4KLQotCi1IaXN0b3JpY2FsIE5vdGUK LS0tLS0tLS0tLS0tLS0tLQotCi1QcmlvciB0byB0aGUgY3VycmVudCBzaW1wbGUgQyBzdHJ1 Y3R1cmUgZGVmaW5pdGlvbnMsIHRoZSBOb2RlIHN0cnVjdHVyZXMKLXVzZWQgYSBwc2V1ZG8t aW5oZXJpdGFuY2Ugc3lzdGVtIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGNyZWF0 b3IgYW5kCi1hY2Nlc3NvciBmdW5jdGlvbnMuIFNpbmNlIGV2ZXJ5IG5vZGUgaW5oZXJpdGVk IGZyb20gTGlzcFZhbHVlLCB0aGUgd2hvbGUgdGhpbmcKLXdhcyBhIG1lc3MuIEhlcmUncyBh IGxpdHRsZSBhbmVjZG90ZToKLQotICAgIExpc3BWYWx1ZSBkZWZpbml0aW9uIC0tIGNsYXNz IHVzZWQgdG8gc3VwcG9ydCBsaXNwIHN0cnVjdHVyZXMKLSAgICBpbiBDLiAgVGhpcyBpcyBo ZXJlIGJlY2F1c2Ugd2UgZGlkIG5vdCB3YW50IHRvIHRvdGFsbHkgcmV3cml0ZQotICAgIHBs YW5uZXIgYW5kIGV4ZWN1dG9yIGNvZGUgd2hpY2ggZGVwZW5kZWQgb24gbGlzcCBzdHJ1Y3R1 cmVzIHdoZW4KLSAgICB3ZSBwb3J0ZWQgcG9zdGdyZXMgVjEgZnJvbSBsaXNwIHRvIEMuIC1j aW0gNC8yMy85MAorNC4gQ29uc2lkZXIgdGVzdGluZyB5b3VyIG5ldyBjb2RlIHdpdGggQ09Q WV9QQVJTRV9QTEFOX1RSRUVTLAorICAgV1JJVEVfUkVBRF9QQVJTRV9QTEFOX1RSRUVTLCBh bmQgUkFXX0VYUFJFU1NJT05fQ09WRVJBR0VfVEVTVCB0byBlbnN1cmUKKyAgIHN1cHBvcnQg aGFzIGJlZW4gYWRkZWQgZXZlcnl3aGVyZSB0aGF0IGl0J3MgbmVjZXNzYXJ5OyBzZWUKKyAg IHBnX2NvbmZpZ19tYW51YWwuaCBhYm91dCB0aGVzZS4KKworQWRkaW5nIGEgbmV3IG5vZGUg dHlwZSBtb3ZlcyB0aGUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggZXhpc3RpbmcKK3RhZ3Ms IHNvIHlvdSdsbCBuZWVkIHRvIHJlY29tcGlsZSB0aGUgd2hvbGUgdHJlZSBhZnRlciBkb2lu ZyB0aGlzLgorKC0tZW5hYmxlLWRlcGVuZCB1c3VhbGx5IGhlbHBzLikgIEl0IGRvZXNuJ3Qg Zm9yY2UgaW5pdGRiIHRob3VnaCwKK2JlY2F1c2UgdGhlIG51bWJlcnMgbmV2ZXIgZ28gdG8g ZGlzay4gIEJ1dCBhbHRlcmluZyBvciByZW1vdmluZyBhIG5vZGUKK3R5cGUgc2hvdWxkIHVz dWFsbHkgYmUgYWNjb21wYW5pZWQgYnkgYW4gaW5pdGRiLWZvcmNpbmcgY2F0YWxvZwordmVy c2lvbiBjaGFuZ2UsIHNpbmNlIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzZXJpYWxpemVkIG5v ZGUgdHJlZXMKK3N0b3JlZCBpbiBzeXN0ZW0gY2F0YWxvZ3MgaXMgYWZmZWN0ZWQgYnkgdGhh dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggMmM4MzRlNGQwZC4uYjcyYzc5ZjJkZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTIzLDExICsyMyw3IEBACiAjaW5jbHVkZSAi cG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVz L2V4dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKLSNpbmNsdWRl ICJub2Rlcy9wbGFubm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgotI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgogCiAKIC8qCkBAIC03Myw2ICs2OSw5IEBACiAJKG5ld25vZGUt PmZsZG5hbWUgPSBmcm9tLT5mbGRuYW1lKQogCiAKKyNpbmNsdWRlICJjb3B5ZnVuY3MuZnVu Y3MuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJIHBsYW5u b2Rlcy5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDMxLDYgKzE0MzAs NyBAQCBfY29weVZhcihjb25zdCBWYXIgKmZyb20pCiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0K KyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiAvKgogICogX2NvcHlDb25zdApAQCAt MTQ3MCw2ICsxNDcwLDcgQEAgX2NvcHlDb25zdChjb25zdCBDb25zdCAqZnJvbSkKIAlyZXR1 cm4gbmV3bm9kZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX2NvcHlQYXJhbQog ICovCkBAIC0zMjE0LDYgKzMyMTUsNyBAQCBfY29weVBhcmFtUmVmKGNvbnN0IFBhcmFtUmVm ICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYJCQkJCQkJLyogT0JTT0xF VEUgKi8KIAogc3RhdGljIEFfQ29uc3QgKgogX2NvcHlBX0NvbnN0KGNvbnN0IEFfQ29uc3Qg KmZyb20pCkBAIC0zMjU0LDYgKzMyNTYsNyBAQCBfY29weUFfQ29uc3QoY29uc3QgQV9Db25z dCAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0 aWMgRnVuY0NhbGwgKgogX2NvcHlGdW5jQ2FsbChjb25zdCBGdW5jQ2FsbCAqZnJvbSkKIHsK QEAgLTU0MTksNiArNTQyMiw3IEBAIF9jb3B5RHJvcFN1YnNjcmlwdGlvblN0bXQoY29uc3Qg RHJvcFN1YnNjcmlwdGlvblN0bXQgKmZyb20pCiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KKyNl bmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiAvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJZXh0 ZW5zaWJsZS5oIGNvcHkgZnVuY3Rpb25zCkBAIC01NDQxLDYgKzU0NDUsNyBAQCBfY29weUV4 dGVuc2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVOb2RlICpmcm9tKQogCXJldHVybiBuZXdu b2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQl2YWx1 ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NTExLDYgKzU1MTYsNyBA QCBfY29weUZvcmVpZ25LZXlDYWNoZUluZm8oY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAq ZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQorI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRF ICovCiAKIC8qCiAgKiBjb3B5T2JqZWN0SW1wbCAtLSBpbXBsZW1lbnRhdGlvbiBvZiBjb3B5 T2JqZWN0KCk7IHNlZSBub2Rlcy9ub2Rlcy5oCkBAIC01NTMxLDYgKzU1MzcsOCBAQCBjb3B5 T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCiAJc3dpdGNoIChub2RlVGFnKGZyb20p KQogCXsKKyNpbmNsdWRlICJjb3B5ZnVuY3Muc3dpdGNoLmMiCisjaWZkZWYgT0JTT0xFVEUK IAkJCS8qCiAJCQkgKiBQTEFOIE5PREVTCiAJCQkgKi8KQEAgLTU5NjksNiArNTk3Nyw3IEBA IGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJCWNhc2UgVF9CaXRTdHJpbmc6 CiAJCQlyZXR2YWwgPSBfY29weUJpdFN0cmluZyhmcm9tKTsKIAkJCWJyZWFrOworI2VuZGlm CQkJCQkJCS8qIE9CU09MRVRFICovCiAKIAkJCS8qCiAJCQkgKiBMSVNUIE5PREVTCkBAIC01 OTg2LDYgKzU5OTUsOCBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQkJ cmV0dmFsID0gbGlzdF9jb3B5KGZyb20pOwogCQkJYnJlYWs7CiAKKyNpZmRlZiBPQlNPTEVU RQorCiAJCQkvKgogCQkJICogRVhURU5TSUJMRSBOT0RFUwogCQkJICovCkBAIC02NTM3LDYg KzY1NDgsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQljYXNlIFRf Rm9yZWlnbktleUNhY2hlSW5mbzoKIAkJCXJldHZhbCA9IF9jb3B5Rm9yZWlnbktleUNhY2hl SW5mbyhmcm9tKTsKIAkJCWJyZWFrOworI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRFICovCiAK IAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAl ZCIsIChpbnQpIG5vZGVUYWcoZnJvbSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9k ZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4 IDQ0OTM1MjYzOWYuLjhkMTg1NDhhZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAg LTEwLDkgKzEwLDYgQEAKICAqIGJlY2F1c2UgdGhlIGNpcmN1bGFyIGxpbmthZ2VzIGJldHdl ZW4gUmVsT3B0SW5mbyBhbmQgUGF0aCBub2RlcyBjYW4ndAogICogYmUgaGFuZGxlZCBlYXNp bHkgaW4gYSBzaW1wbGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsLgogICoKLSAqIEN1cnJlbnRs eSwgaW4gZmFjdCwgZXF1YWwoKSBkb2Vzbid0IGtub3cgaG93IHRvIGNvbXBhcmUgUGxhbiB0 cmVlcwotICogZWl0aGVyLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvbWVkYXku Ci0gKgogICogTk9URTogaXQgaXMgaW50ZW50aW9uYWwgdGhhdCBwYXJzZSBsb2NhdGlvbiBm aWVsZHMgKGluIG5vZGVzIHRoYXQgaGF2ZQogICogb25lKSBhcmUgbm90IGNvbXBhcmVkLiAg VGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQsIGZvciBleGFtcGxlLCBhIHZhcmlhYmxlCiAgKiAi eCIgdG8gYmUgY29uc2lkZXJlZCBlcXVhbCgpIHRvIGFub3RoZXIgcmVmZXJlbmNlIHRvICJ4 IiBpbiB0aGUgcXVlcnkuCkBAIC0zMCw4ICsyNyw2IEBACiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2li bGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9k YXR1bS5oIgogCiAKQEAgLTk3LDYgKzkyLDkgQEAKIAkoKHZvaWQpIDApCiAKIAorI2luY2x1 ZGUgImVxdWFsZnVuY3MuZnVuY3MuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgogICoJU3R1 ZmYgZnJvbSBwcmltbm9kZXMuaAogICovCkBAIC0yNTgsNiArMjU2LDcgQEAgX2VxdWFsVmFy KGNvbnN0IFZhciAqYSwgY29uc3QgVmFyICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5k aWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogc3RhdGljIGJvb2wKIF9lcXVhbENvbnN0KGNv bnN0IENvbnN0ICphLCBjb25zdCBDb25zdCAqYikKQEAgLTI4MCw2ICsyNzksNyBAQCBfZXF1 YWxDb25zdChjb25zdCBDb25zdCAqYSwgY29uc3QgQ29uc3QgKmIpCiAJCQkJCQlhLT5jb25z dGJ5dmFsLCBhLT5jb25zdGxlbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIGJv b2wKIF9lcXVhbFBhcmFtKGNvbnN0IFBhcmFtICphLCBjb25zdCBQYXJhbSAqYikKIHsKQEAg LTEzMDQsNiArMTMwNCw3IEBAIF9lcXVhbFBsYWNlSG9sZGVySW5mbyhjb25zdCBQbGFjZUhv bGRlckluZm8gKmEsIGNvbnN0IFBsYWNlSG9sZGVySW5mbyAqYikKIAogCXJldHVybiB0cnVl OwogfQorI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRFICovCiAKIC8qCiAgKiBTdHVmZiBmcm9t IGV4dGVuc2libGUuaApAQCAtMTMyNSw2ICsxMzI2LDcgQEAgX2VxdWFsRXh0ZW5zaWJsZU5v ZGUoY29uc3QgRXh0ZW5zaWJsZU5vZGUgKmEsIGNvbnN0IEV4dGVuc2libGVOb2RlICpiKQog CXJldHVybiB0cnVlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBTdHVmZiBmcm9t IHBhcnNlbm9kZXMuaAogICovCkBAIC0yODE1LDYgKzI4MTcsNyBAQCBfZXF1YWxQYXJhbVJl Zihjb25zdCBQYXJhbVJlZiAqYSwgY29uc3QgUGFyYW1SZWYgKmIpCiAKIAlyZXR1cm4gdHJ1 ZTsKIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgYm9vbAogX2Vx dWFsQV9Db25zdChjb25zdCBBX0NvbnN0ICphLCBjb25zdCBBX0NvbnN0ICpiKQpAQCAtMjgz MSw2ICsyODM0LDcgQEAgX2VxdWFsQV9Db25zdChjb25zdCBBX0NvbnN0ICphLCBjb25zdCBB X0NvbnN0ICpiKQogCXJldHVybiB0cnVlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRp YyBib29sCiBfZXF1YWxGdW5jQ2FsbChjb25zdCBGdW5jQ2FsbCAqYSwgY29uc3QgRnVuY0Nh bGwgKmIpCiB7CkBAIC0zNDY4LDYgKzM0NzIsNyBAQCBfZXF1YWxQYXJ0aXRpb25DbWQoY29u c3QgUGFydGl0aW9uQ21kICphLCBjb25zdCBQYXJ0aXRpb25DbWQgKmIpCiAKIAlyZXR1cm4g dHJ1ZTsKIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiAvKgogICogU3R1ZmYg ZnJvbSBwZ19saXN0LmgKQEAgLTM1MjgsNiArMzUzMyw3IEBAIF9lcXVhbExpc3QoY29uc3Qg TGlzdCAqYSwgY29uc3QgTGlzdCAqYikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIE9C U09MRVRFCiAvKgogICogU3R1ZmYgZnJvbSB2YWx1ZS5oCiAgKi8KQEAgLTM1NzEsNiArMzU3 Nyw3IEBAIF9lcXVhbEJpdFN0cmluZyhjb25zdCBCaXRTdHJpbmcgKmEsIGNvbnN0IEJpdFN0 cmluZyAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRF ICovCiAKIC8qCiAgKiBlcXVhbApAQCAtMzYwMSw2ICszNjA4LDggQEAgZXF1YWwoY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAogCXN3aXRjaCAobm9kZVRhZyhhKSkKIAl7Cisj aW5jbHVkZSAiZXF1YWxmdW5jcy5zd2l0Y2guYyIKKyNpZmRlZiBPQlNPTEVURQogCQkJLyoK IAkJCSAqIFBSSU1JVElWRSBOT0RFUwogCQkJICovCkBAIC0zODIxLDYgKzM4MzAsNyBAQCBl cXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfUGxhY2VIb2xk ZXJJbmZvOgogCQkJcmV0dmFsID0gX2VxdWFsUGxhY2VIb2xkZXJJbmZvKGEsIGIpOwogCQkJ YnJlYWs7CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogCQljYXNlIFRfTGlzdDoK IAkJY2FzZSBUX0ludExpc3Q6CkBAIC0zODI4LDYgKzM4MzgsNyBAQCBlcXVhbChjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQogCQkJcmV0dmFsID0gX2VxdWFsTGlzdChhLCBiKTsK IAkJCWJyZWFrOwogCisjaWZkZWYgT0JTT0xFVEUKIAkJY2FzZSBUX0ludGVnZXI6CiAJCQly ZXR2YWwgPSBfZXF1YWxJbnRlZ2VyKGEsIGIpOwogCQkJYnJlYWs7CkBAIC00NDMwLDYgKzQ0 NDEsNyBAQCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRf SnNvblRhYmxlQ29sdW1uOgogCQkJcmV0dmFsID0gX2VxdWFsSnNvblRhYmxlQ29sdW1uKGEs IGIpOwogCQkJYnJlYWs7CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogCQlkZWZh dWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwgYi9zcmMv YmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjg2YWY0YmYwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCkBAIC0wLDAgKzEsODQ1IEBACisj IS91c3IvYmluL3BlcmwKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEdlbmVyYXRlIG5vZGUg c3VwcG9ydCBmaWxlczoKKyMgLSBub2RldGFncy5oCisjIC0gY29weWZ1bmNzCisjIC0gZXF1 YWxmdW5jcworIyAtIHJlYWRmdW5jcworIyAtIG91dGZ1bmNzCisjCisjIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorIworIyBzcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9k ZV9zdXBwb3J0LnBsCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzOworCit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSBGaW5kQmluOwordXNl IGxpYiAiJEZpbmRCaW46OlJlYWxCaW4vLi4vY2F0YWxvZyI7CisKK3VzZSBDYXRhbG9nOyAg IyBmb3IgUmVuYW1lVGVtcEZpbGUKKworCisjIFRlc3Qgd2hldGhlciBmaXJzdCBhcmd1bWVu dCBpcyBlbGVtZW50IG9mIHRoZSBsaXN0IGluIHRoZSBzZWNvbmQKKyMgYXJndW1lbnQKK3N1 YiBlbGVtCit7CisJbXkgJHggPSBzaGlmdDsKKwlyZXR1cm4gZ3JlcCB7ICRfIGVxICR4IH0g QF87Cit9CisKKworIyBjb2xsZWN0IG5vZGUgbmFtZXMKK215IEBub2RlX3R5cGVzID0gcXco Tm9kZSk7CisjIGNvbGxlY3QgaW5mbyBmb3IgZWFjaCBub2RlIHR5cGUKK215ICVub2RlX3R5 cGVfaW5mbzsKKworIyBub2RlIHR5cGVzIHdlIGRvbid0IHdhbnQgY29weSBzdXBwb3J0IGZv cgorbXkgQG5vX2NvcHk7CisjIG5vZGUgdHlwZXMgd2UgZG9uJ3Qgd2FudCBlcXVhbCBzdXBw b3J0IGZvcgorbXkgQG5vX2VxdWFsOworIyBub2RlIHR5cGVzIHdlIGRvbid0IHdhbnQgcmVh ZCBzdXBwb3J0IGZvcgorbXkgQG5vX3JlYWQ7CisjIG5vZGUgdHlwZXMgd2UgZG9uJ3Qgd2Fu dCByZWFkL3dyaXRlIHN1cHBvcnQgZm9yCitteSBAbm9fcmVhZF93cml0ZTsKKworIyB0eXBl cyB0aGF0IGFyZSBjb3BpZWQgYnkgc3RyYWlnaHQgYXNzaWdubWVudAorbXkgQHNjYWxhcl90 eXBlcyA9IHF3KAorCWJpdHMzMiBib29sIGNoYXIgZG91YmxlIGludCBpbnQ4IGludDE2IGlu dDMyIGludDY0IGxvbmcgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQKKwlBY2xNb2RlIEF0 dHJOdW1iZXIgQ2FyZGluYWxpdHkgQ29zdCBJbmRleCBPaWQgUmVsRmlsZU51bWJlciBTZWxl Y3Rpdml0eSBTaXplIFN0cmF0ZWd5TnVtYmVyIFN1YlRyYW5zYWN0aW9uSWQgVGltZUxpbmVJ RCBYTG9nUmVjUHRyCispOworCisjIGNvbGxlY3QgZW51bSB0eXBlcworbXkgQGVudW1fdHlw ZXM7CisKK215IEBhYnN0cmFjdF90eXBlcyA9IHF3KE5vZGUpOworCisjIFNwZWNpYWwgY2Fz ZXMgdGhhdCBlaXRoZXIgZG9uJ3QgaGF2ZSB0aGVpciBvd24gc3RydWN0IG9yIHRoZSBzdHJ1 Y3QKKyMgaXMgbm90IGluIGEgaGVhZGVyIGZpbGUuICBXZSBqdXN0IGdlbmVyYXRlIG5vZGUg dGFncyBmb3IgdGhlbSwgYnV0CisjIHRoZXkgb3RoZXJ3aXNlIGRvbid0IHBhcnRpY2lwYXRl IGluIG5vZGUgc3VwcG9ydC4KK215IEBleHRyYV90YWdzID0gcXcoCisJSW50TGlzdCBPaWRM aXN0IFhpZExpc3QKKwlBbGxvY1NldENvbnRleHQgR2VuZXJhdGlvbkNvbnRleHQgU2xhYkNv bnRleHQKKwlUSURCaXRtYXAKKwlXaW5kb3dPYmplY3REYXRhCispOworCisjIFRoaXMgaXMg YSByZWd1bGFyIG5vZGUsIGJ1dCB3ZSBza2lwIHBhcnNpbmcgaXQgZnJvbSBpdHMgaGVhZGVy IGZpbGUKKyMgc2luY2Ugd2Ugd29uJ3QgdXNlIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaGVy ZSBhbnl3YXkuCitwdXNoIEBub2RlX3R5cGVzLCBxdyhMaXN0KTsKKyMgU2VlIHNwZWNpYWwg dHJlYXRtZW50IGluIG91dE5vZGUoKSBhbmQgbm9kZVJlYWQoKS4KK3B1c2ggQG5vX3JlYWRf d3JpdGUsIHF3KExpc3QpOworCisjIE5vZGVzIHdpdGggY3VzdG9tIGNvcHkvZXF1YWwgaW1w bGVtZW50YXRpb25zIGFyZSBza2lwcGVkIGZyb20KKyMgLmZ1bmNzLmMgYnV0IG5lZWQgY2Fz ZSBzdGF0ZW1lbnRzIGluIC5zd2l0Y2guYy4KK215IEBjdXN0b21fY29weV9lcXVhbDsKKwor IyBTaW1pbGFybHkgZm9yIGN1c3RvbSByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9ucy4KK215 IEBjdXN0b21fcmVhZF93cml0ZTsKKworIyBFcXVpdmFsZW5jZUNsYXNzZXMgYXJlIG5ldmVy IG1vdmVkLCBzbyBqdXN0IHNoYWxsb3ctY29weSB0aGUgcG9pbnRlcgorcHVzaCBAc2NhbGFy X3R5cGVzLCBxdyhFcXVpdmFsZW5jZUNsYXNzKiBFcXVpdmFsZW5jZU1lbWJlciopOworCisj IFRoaXMgaXMgYSBzdHJ1Y3QsIHNvIHdlIGNhbiBjb3B5IGl0IGJ5IGFzc2lnbm1lbnQuICBF cXVhbCBzdXBwb3J0IGlzCisjIGN1cnJlbnRseSBub3QgcmVxdWlyZWQuCitwdXNoIEBzY2Fs YXJfdHlwZXMsIHF3KFF1YWxDb3N0KTsKKworIyBYWFggdmFyaW91cyB0aGluZ3Mgd2UgYXJl IG5vdCBwdWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBzdGF5IGxldmVsCisjIHdpdGggdGhlIG1h bnVhbCBzeXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3KENhbGxDb250ZXh0IElubGluZUNvZGVC bG9jayk7CitwdXNoIEBub19lcXVhbCwgcXcoQ2FsbENvbnRleHQgSW5saW5lQ29kZUJsb2Nr KTsKK3B1c2ggQG5vX3JlYWRfd3JpdGUsIHF3KEFjY2Vzc1ByaXYgQWx0ZXJUYWJsZUNtZCBD YWxsQ29udGV4dCBDcmVhdGVPcENsYXNzSXRlbSBGdW5jdGlvblBhcmFtZXRlciBJbmZlckNs YXVzZSBJbmxpbmVDb2RlQmxvY2sgT2JqZWN0V2l0aEFyZ3MgT25Db25mbGljdENsYXVzZSBQ YXJ0aXRpb25DbWQgUm9sZVNwZWMgVmFjdXVtUmVsYXRpb24pOworcHVzaCBAbm9fcmVhZCwg cXcoQV9BcnJheUV4cHIgQV9JbmRpY2VzIEFfSW5kaXJlY3Rpb24gQWx0ZXJTdGF0c1N0bXQK K0NvbGxhdGVDbGF1c2UgQ29sdW1uRGVmIENvbHVtblJlZiBDcmVhdGVGb3JlaWduVGFibGVT dG10IENyZWF0ZVN0YXRzU3RtdAorQ3JlYXRlU3RtdCBGdW5jQ2FsbCBJbXBvcnRGb3JlaWdu U2NoZW1hU3RtdCBJbmRleEVsZW0gSW5kZXhTdG10CitKc29uQWdnQ29uc3RydWN0b3IgSnNv bkFyZ3VtZW50IEpzb25BcnJheUFnZyBKc29uQXJyYXlDb25zdHJ1Y3RvcgorSnNvbkFycmF5 UXVlcnlDb25zdHJ1Y3RvciBKc29uQ29tbW9uIEpzb25GdW5jRXhwciBKc29uS2V5VmFsdWUK K0pzb25PYmplY3RBZ2cgSnNvbk9iamVjdENvbnN0cnVjdG9yIEpzb25PdXRwdXQgSnNvblBh cnNlRXhwciBKc29uU2NhbGFyRXhwcgorSnNvblNlcmlhbGl6ZUV4cHIgSnNvblRhYmxlIEpz b25UYWJsZUNvbHVtbiBKc29uVGFibGVQbGFuIExvY2tpbmdDbGF1c2UKK011bHRpQXNzaWdu UmVmIFBMQXNzaWduU3RtdCBQYXJhbVJlZiBQYXJ0aXRpb25FbGVtIFBhcnRpdGlvblNwZWMK K1BsYWNlSG9sZGVyVmFyIFB1YmxpY2F0aW9uT2JqU3BlYyBQdWJsaWNhdGlvblRhYmxlIFJh bmdlRnVuY3Rpb24KK1JhbmdlU3Vic2VsZWN0IFJhbmdlVGFibGVGdW5jIFJhbmdlVGFibGVG dW5jQ29sIFJhbmdlVGFibGVTYW1wbGUgUmF3U3RtdAorUmVzVGFyZ2V0IFJldHVyblN0bXQg U2VsZWN0U3RtdCBTb3J0QnkgU3RhdHNFbGVtIFRhYmxlTGlrZUNsYXVzZQorVHJpZ2dlclRy YW5zaXRpb24gVHlwZUNhc3QgVHlwZU5hbWUgV2luZG93RGVmIFdpdGhDbGF1c2UgWG1sU2Vy aWFsaXplKTsKKworCisjIyByZWFkIGlucHV0CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAoQEFS R1YpCit7CisJbXkgJGluX3N0cnVjdDsKKwlteSAkc3VibGluZTsKKwlteSAkaXNfbm9kZV9z dHJ1Y3Q7CisJbXkgJHN1cGVydHlwZTsKKwlteSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJbXkg QG15X2ZpZWxkczsKKwlteSAlbXlfZmllbGRfdHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0dHJz OworCisJb3BlbiBteSAkaWZoLCAnPCcsICRpbmZpbGUgb3IgZGllICJjb3VsZCBub3Qgb3Bl biBcIiRpbmZpbGVcIjogJCEiOworCisJbXkgJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwg JC87IDwkaWZoPiB9OworCisJIyBzdHJpcCBDIGNvbW1lbnRzCisJJGZpbGVfY29udGVudCA9 fiBzey9cKi4qP1wqL317fWdzOworCisJZm9yZWFjaCBteSAkbGluZSAoc3BsaXQgL1xuLywg JGZpbGVfY29udGVudCkKKwl7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9fiBzL1xzKiQv LzsKKwkJbmV4dCBpZiAkbGluZSBlcSAnJzsKKwkJbmV4dCBpZiAkbGluZSA9fiAvXiMoZGVm aW5lfGlmZGVmfGVuZGlmKS87CisKKwkJIyB3ZSBhcmUgYW5hbHl6aW5nIGEgc3RydWN0IGRl ZmluaXRpb24KKwkJaWYgKCRpbl9zdHJ1Y3QpCisJCXsKKwkJCSRzdWJsaW5lKys7CisKKwkJ CSMgZmlyc3QgbGluZSBzaG91bGQgaGF2ZSBvcGVuaW5nIGJyYWNlCisJCQlpZiAoJHN1Ymxp bmUgPT0gMSkKKwkJCXsKKwkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAwOworCQkJCSRzdXBlcnR5 cGUgPSB1bmRlZjsKKwkJCQluZXh0IGlmICRsaW5lIGVxICd7JzsKKwkJCQlkaWU7CisJCQl9 CisJCQkjIHNlY29uZCBsaW5lIHNob3VsZCBoYXZlIG5vZGUgdGFnIG9yIHN1cGVydHlwZQor CQkJZWxzaWYgKCRzdWJsaW5lID09IDIpCisJCQl7CisJCQkJaWYgKCRsaW5lID1+IC9eXHMq Tm9kZVRhZ1xzK3R5cGU7LykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVjdCA9IDE7CisJ CQkJCW5leHQ7CisJCQkJfQorCQkJCWVsc2lmICgkbGluZSA9fiAvXHMqKFx3KylccysoXHcr KTsvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0 cnVjdCA9IDE7CisJCQkJCSRzdXBlcnR5cGUgPSAkMTsKKwkJCQkJJHN1cGVydHlwZV9maWVs ZCA9ICQyOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKworCQkJIyBlbmQgb2Ygc3RydWN0 CisJCQlpZiAoJGxpbmUgPX4gL15cfVxzKig/OlxRJGluX3N0cnVjdFxFXHMqKT8oPzpwZ19u b2RlX2F0dHJcKChbXHcoKSwgXSopXCkpPzskLykKKwkJCXsKKwkJCQlteSAkbm9kZV9hdHRy cyA9ICQxIHx8ICcnOworCisJCQkJaWYgKCRpc19ub2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJ CSMgVGhpcyBpcyB0aGUgZW5kIG9mIGEgbm9kZSBzdHJ1Y3QgZGVmaW5pdGlvbi4KKwkJCQkJ IyBTYXZlIGV2ZXJ5dGhpbmcgd2UgaGF2ZSBjb2xsZWN0ZWQuCisKKwkJCQkJZm9yZWFjaCBt eSAkYXR0ciAoc3BsaXQgLyxccyovLCAkbm9kZV9hdHRycykKKwkJCQkJeworCQkJCQkJaWYg KCRhdHRyIGVxICdhYnN0cmFjdCcpCisJCQkJCQl7CisJCQkJCQkJcHVzaCBAYWJzdHJhY3Rf dHlwZXMsICRpbl9zdHJ1Y3Q7CisJCQkJCQl9CisJCQkJCQllbHNpZiAoJGF0dHIgZXEgJ2N1 c3RvbV9jb3B5X2VxdWFsJykKKwkJCQkJCXsKKwkJCQkJCQlwdXNoIEBjdXN0b21fY29weV9l cXVhbCwgJGluX3N0cnVjdDsKKwkJCQkJCX0KKwkJCQkJCWVsc2lmICgkYXR0ciBlcSAnY3Vz dG9tX3JlYWRfd3JpdGUnKQorCQkJCQkJeworCQkJCQkJCXB1c2ggQGN1c3RvbV9yZWFkX3dy aXRlLCAkaW5fc3RydWN0OworCQkJCQkJfQorCQkJCQkJZWxzaWYgKCRhdHRyIGVxICdub19j b3B5JykKKwkJCQkJCXsKKwkJCQkJCQlwdXNoIEBub19jb3B5LCAkaW5fc3RydWN0OworCQkJ CQkJfQorCQkJCQkJZWxzaWYgKCRhdHRyIGVxICdub19lcXVhbCcpCisJCQkJCQl7CisJCQkJ CQkJcHVzaCBAbm9fZXF1YWwsICRpbl9zdHJ1Y3Q7CisJCQkJCQl9CisJCQkJCQllbHNpZiAo JGF0dHIgZXEgJ25vX2NvcHlfZXF1YWwnKQorCQkJCQkJeworCQkJCQkJCXB1c2ggQG5vX2Nv cHksICRpbl9zdHJ1Y3Q7CisJCQkJCQkJcHVzaCBAbm9fZXF1YWwsICRpbl9zdHJ1Y3Q7CisJ CQkJCQl9CisJCQkJCQllbHNpZiAoJGF0dHIgZXEgJ25vX3JlYWQnKQorCQkJCQkJeworCQkJ CQkJCXB1c2ggQG5vX3JlYWQsICRpbl9zdHJ1Y3Q7CisJCQkJCQl9CisJCQkJCQllbHNpZiAo JGF0dHIgZXEgJ3NwZWNpYWxfcmVhZF93cml0ZScpCisJCQkJCQl7CisJCQkJCQkJIyBUaGlz IGF0dHJpYnV0ZSBpcyBjYWxsZWQKKwkJCQkJCQkjICJzcGVjaWFsX3JlYWRfd3JpdGUiIGJl Y2F1c2UgdGhlcmUgaXMKKwkJCQkJCQkjIHNwZWNpYWwgdHJlYXRtZW50IGluIG91dE5vZGUo KSBhbmQKKwkJCQkJCQkjIG5vZGVSZWFkKCkgZm9yIHRoZXNlIG5vZGVzLiAgRm9yIHRoaXMK KwkJCQkJCQkjIHNjcmlwdCwgaXQncyB0aGUgc2FtZSBhcworCQkJCQkJCSMgIm5vX3JlYWRf d3JpdGUiLCBidXQgY2FsbGluZyB0aGUKKwkJCQkJCQkjIGF0dHJpYnV0ZSB0aGF0IGV4dGVy bmFsbHkgd291bGQgcHJvYmFibHkKKwkJCQkJCQkjIGJlIGNvbmZ1c2luZywgc2luY2UgcmVh ZC93cml0ZSBzdXBwb3J0CisJCQkJCQkJIyBkb2VzIGluIGZhY3QgZXhpc3QuCisJCQkJCQkJ cHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0cnVjdDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UK KwkJCQkJCXsKKwkJCQkJCQlkaWUgIiRpbmZpbGU6JC46IHVucmVjb2duaXplZCBhdHRyaWJ1 dGUgXCIkYXR0clwiXG4iOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJIyBub2RlIG5hbWUK KwkJCQkJcHVzaCBAbm9kZV90eXBlcywgJGluX3N0cnVjdDsKKworCQkJCQkjIGZpZWxkIG5h bWVzLCB0eXBlcywgYXR0cmlidXRlcworCQkJCQlteSBAZiA9IEBteV9maWVsZHM7CisJCQkJ CW15ICVmdCA9ICVteV9maWVsZF90eXBlczsKKwkJCQkJbXkgJWZhID0gJW15X2ZpZWxkX2F0 dHJzOworCisJCQkJCSMgSWYgdGhlcmUgaXMgYSBzdXBlcnR5cGUsIGFkZCB0aG9zZSBmaWVs ZHMsIHRvby4KKwkJCQkJaWYgKCRzdXBlcnR5cGUpCisJCQkJCXsKKwkJCQkJCW15IEBzdXBl cmZpZWxkczsKKwkJCQkJCWZvcmVhY2ggbXkgJHNmIChAeyRub2RlX3R5cGVfaW5mb3skc3Vw ZXJ0eXBlfS0+e2ZpZWxkc319KQorCQkJCQkJeworCQkJCQkJCW15ICRmbiA9ICIke3N1cGVy dHlwZV9maWVsZH0uJHNmIjsKKwkJCQkJCQlwdXNoIEBzdXBlcmZpZWxkcywgJGZuOworCQkJ CQkJCSRmdHskZm59ID0gJG5vZGVfdHlwZV9pbmZveyRzdXBlcnR5cGV9LT57ZmllbGRfdHlw ZXN9eyRzZn07CisJCQkJCQkJaWYgKCRub2RlX3R5cGVfaW5mb3skc3VwZXJ0eXBlfS0+e2Zp ZWxkX2F0dHJzfXskc2Z9KQorCQkJCQkJCXsKKwkJCQkJCQkJIyBDb3B5IGFueSBhdHRyaWJ1 dGVzLCBhZGp1c3RpbmcgYXJyYXlfc2l6ZSBmaWVsZCByZWZlcmVuY2VzCisJCQkJCQkJCW15 IEBuZXdhID0gQHskbm9kZV90eXBlX2luZm97JHN1cGVydHlwZX0tPntmaWVsZF9hdHRyc317 JHNmfX07CisJCQkJCQkJCWZvcmVhY2ggbXkgJGEgKEBuZXdhKQorCQkJCQkJCQl7CisJCQkJ CQkJCQkkYSA9fiBzL2FycmF5X3NpemVcKChcdyspXCkvYXJyYXlfc2l6ZSgke3N1cGVydHlw ZV9maWVsZH0uJDEpLzsKKwkJCQkJCQkJfQorCQkJCQkJCQkkZmF7JGZufSA9IFxAbmV3YTsK KwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQl1bnNoaWZ0IEBmLCBAc3VwZXJmaWVsZHM7CisJ CQkJCX0KKwkJCQkJIyBzYXZlIGluIGdsb2JhbCBpbmZvIHN0cnVjdHVyZQorCQkJCQkkbm9k ZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZHN9ID0gXEBmOworCQkJCQkkbm9kZV90 eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF90eXBlc30gPSBcJWZ0OworCQkJCQkkbm9k ZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF9hdHRyc30gPSBcJWZhOworCisJCQkJ CSMgTm9kZXMgZnJvbSB0aGVzZSBmaWxlcyBkb24ndCBuZWVkIHRvIGJlCisJCQkJCSMgc3Vw cG9ydGVkLCBleGNlcHQgdGhlIG5vZGUgdGFncy4KKwkJCQkJaWYgKGVsZW0gYmFzZW5hbWUo JGluZmlsZSksCisJCQkJCQlxdyhleGVjbm9kZXMuaCB0cmlnZ2VyLmggZXZlbnRfdHJpZ2dl ci5oIGFtYXBpLmggdGFibGVhbS5oCisJCQkJCQkJdHNtYXBpLmggZmR3YXBpLmggdHVwdGFi bGUuaCByZXBsbm9kZXMuaCBzdXBwb3J0bm9kZXMuaCkpCisJCQkJCXsKKwkJCQkJCXB1c2gg QG5vX2NvcHksICRpbl9zdHJ1Y3Q7CisJCQkJCQlwdXNoIEBub19lcXVhbCwgJGluX3N0cnVj dDsKKwkJCQkJCXB1c2ggQG5vX3JlYWRfd3JpdGUsICRpbl9zdHJ1Y3Q7CisJCQkJCX0KKwor CQkJCQkjIFByb3BhZ2F0ZSBzb21lIG5vZGUgYXR0cmlidXRlcyBmcm9tIHN1cGVydHlwZXMK KwkJCQkJaWYgKCRzdXBlcnR5cGUpCisJCQkJCXsKKwkJCQkJCXB1c2ggQG5vX2NvcHksICRp bl9zdHJ1Y3QgaWYgZWxlbSAkc3VwZXJ0eXBlLCBAbm9fY29weTsKKwkJCQkJCXB1c2ggQG5v X2VxdWFsLCAkaW5fc3RydWN0IGlmIGVsZW0gJHN1cGVydHlwZSwgQG5vX2VxdWFsOworCQkJ CQkJcHVzaCBAbm9fcmVhZCwgJGluX3N0cnVjdCBpZiBlbGVtICRzdXBlcnR5cGUsIEBub19y ZWFkOworCQkJCQl9CisJCQkJfQorCisJCQkJIyBzdGFydCBuZXcgY3ljbGUKKwkJCQkkaW5f c3RydWN0ID0gdW5kZWY7CisJCQkJQG15X2ZpZWxkcyA9ICgpOworCQkJCSVteV9maWVsZF90 eXBlcyA9ICgpOworCQkJCSVteV9maWVsZF9hdHRycyA9ICgpOworCQkJfQorCQkJIyBub3Jt YWwgc3RydWN0IGZpZWxkCisJCQllbHNpZiAoJGxpbmUgPX4gL15ccyooLispXHMqXGIoXHcr KShcW1x3K1xdKT9ccyooPzpwZ19ub2RlX2F0dHJcKChbXHcoKSwgXSopXCkpPzsvKQorCQkJ eworCQkJCWlmICgkaXNfbm9kZV9zdHJ1Y3QpCisJCQkJeworCQkJCQlteSAkdHlwZSA9ICQx OworCQkJCQlteSAkbmFtZSA9ICQyOworCQkJCQlteSAkYXJyYXlfc2l6ZSA9ICQzOworCQkJ CQlteSAkYXR0cnMgPSAkNDsKKworCQkJCQkjIHN0cmlwICJjb25zdCIKKwkJCQkJJHR5cGUg PX4gcy9eY29uc3RccyovLzsKKwkJCQkJIyBzdHJpcCB0cmFpbGluZyBzcGFjZQorCQkJCQkk dHlwZSA9fiBzL1xzKiQvLzsKKwkJCQkJIyBzdHJpcCBzcGFjZSBiZXR3ZWVuIHR5cGUgYW5k ICIqIiAocG9pbnRlcikgKi8KKwkJCQkJJHR5cGUgPX4gcy9ccytcKiQvKi87CisKKwkJCQkJ ZGllIGlmICR0eXBlIGVxICcnOworCisJCQkJCW15IEBhdHRyczsKKwkJCQkJaWYgKCRhdHRy cykKKwkJCQkJeworCQkJCQkJQGF0dHJzID0gc3BsaXQgLyxccyovLCAkYXR0cnM7CisJCQkJ CQlmb3JlYWNoIG15ICRhdHRyIChAYXR0cnMpCisJCQkJCQl7CisJCQkJCQkJaWYgKCRhdHRy ICF+IC9eYXJyYXlfc2l6ZVwoXHcrXCkkLyAmJgorCQkJCQkJCQkkYXR0ciAhfiAvXmNvcHlf YXNcKFx3K1wpJC8gJiYKKwkJCQkJCQkJJGF0dHIgIX4gL15yZWFkX2FzXChcdytcKSQvICYm CisJCQkJCQkJCSFlbGVtICRhdHRyLCBxdyhlcXVhbF9pZ25vcmUgZXF1YWxfaWdub3JlX2lm X3plcm8gcmVhZF93cml0ZV9pZ25vcmUKKwkJCQkJCQkJCXdyaXRlX29ubHlfcmVsaWRzIHdy aXRlX29ubHlfbm9uZGVmYXVsdF9wYXRodGFyZ2V0IHdyaXRlX29ubHlfcmVxX291dGVyKSkK KwkJCQkJCQl7CisJCQkJCQkJCWRpZSAiJGluZmlsZTokLjogdW5yZWNvZ25pemVkIGF0dHJp YnV0ZSBcIiRhdHRyXCJcbiI7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJ JHR5cGUgPSAkdHlwZSAuICRhcnJheV9zaXplIGlmICRhcnJheV9zaXplOworCQkJCQlwdXNo IEBteV9maWVsZHMsICRuYW1lOworCQkJCQkkbXlfZmllbGRfdHlwZXN7JG5hbWV9ID0gJHR5 cGU7CisJCQkJCSRteV9maWVsZF9hdHRyc3skbmFtZX0gPSBcQGF0dHJzOworCQkJCX0KKwkJ CX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsKKwkJ CQkJI3dhcm4gIiRpbmZpbGU6JC46IGNvdWxkIG5vdCBwYXJzZSBcIiRsaW5lXCJcbiI7CisJ CQkJfQorCQkJfQorCQl9CisJCSMgbm90IGluIGEgc3RydWN0CisJCWVsc2UKKwkJeworCQkJ IyBzdGFydCBvZiBhIHN0cnVjdD8KKwkJCWlmICgkbGluZSA9fiAvXig/OnR5cGVkZWYgKT9z dHJ1Y3QgKFx3KykkLyAmJiAkMSBuZSAnTm9kZScpCisJCQl7CisJCQkJJGluX3N0cnVjdCA9 ICQxOworCQkJCSRzdWJsaW5lID0gMDsKKwkJCX0KKwkJCSMgb25lIG5vZGUgdHlwZSB0eXBl ZGVmJ2VkIGRpcmVjdGx5IGZyb20gYW5vdGhlcgorCQkJZWxzaWYgKCRsaW5lID1+IC9edHlw ZWRlZiAoXHcrKSAoXHcrKTskLyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlwZXMpCisJCQl7CisJ CQkJbXkgJGFsaWFzX29mID0gJDE7CisJCQkJbXkgJG4gPSAkMjsKKworCQkJCSMgY29weSBl dmVyeXRoaW5nIG92ZXIKKwkJCQlwdXNoIEBub2RlX3R5cGVzLCAkbjsKKwkJCQlteSBAZiA9 IEB7JG5vZGVfdHlwZV9pbmZveyRhbGlhc19vZn0tPntmaWVsZHN9fTsKKwkJCQlteSAlZnQg PSAleyRub2RlX3R5cGVfaW5mb3skYWxpYXNfb2Z9LT57ZmllbGRfdHlwZXN9fTsKKwkJCQlt eSAlZmEgPSAleyRub2RlX3R5cGVfaW5mb3skYWxpYXNfb2Z9LT57ZmllbGRfYXR0cnN9fTsK KwkJCQkkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRzfSA9IFxAZjsKKwkJCQkkbm9kZV90 eXBlX2luZm97JG59LT57ZmllbGRfdHlwZXN9ID0gXCVmdDsKKwkJCQkkbm9kZV90eXBlX2lu Zm97JG59LT57ZmllbGRfYXR0cnN9ID0gXCVmYTsKKwkJCX0KKwkJCSMgY29sbGVjdCBlbnVt IG5hbWVzCisJCQllbHNpZiAoJGxpbmUgPX4gL150eXBlZGVmIGVudW0gKFx3KykoXHMqXC9c Ki4qKT8kLykKKwkJCXsKKwkJCQlwdXNoIEBlbnVtX3R5cGVzLCAkMTsKKwkJCX0KKwkJfQor CX0KKworCWlmICgkaW5fc3RydWN0KQorCXsKKwkJZGllICJydW5hd2F5IFwiJGluX3N0cnVj dFwiIGluIGZpbGUgXCIkaW5maWxlXCJcbiI7CisJfQorCisJY2xvc2UgJGlmaDsKK30gIyBm b3IgZWFjaCBmaWxlCisKKworIyMgd3JpdGUgb3V0cHV0CisKK215ICR0bXBleHQgID0gIi50 bXAkJCI7CisKKyMgbm9kZXRhZ3MuaAorCitvcGVuIG15ICRudCwgJz4nLCAnbm9kZXRhZ3Mu aCcgLiAkdG1wZXh0IG9yIGRpZSAkITsKKworbXkgJGkgPSAxOworZm9yZWFjaCBteSAkbiAo QG5vZGVfdHlwZXMsQGV4dHJhX3RhZ3MpCit7CisJbmV4dCBpZiBlbGVtICRuLCBAYWJzdHJh Y3RfdHlwZXM7CisJcHJpbnQgJG50ICJcdFRfJHtufSA9ICRpLFxuIjsKKwkkaSsrOworfQor CitjbG9zZSAkbnQ7CisKKworIyBtYWtlICNpbmNsdWRlIGxpbmVzIG5lY2Vzc2FyeSB0byBw dWxsIGluIGFsbCB0aGUgc3RydWN0IGRlZmluaXRpb25zCitteSAkbm9kZV9pbmNsdWRlcyA9 ICcnOworZm9yZWFjaCBteSAkaW5maWxlIChzb3J0IEBBUkdWKQoreworCSRpbmZpbGUgPX4g cyEuKnNyYy9pbmNsdWRlLyEhOworCSRub2RlX2luY2x1ZGVzIC49IHFxeyNpbmNsdWRlICIk aW5maWxlIlxufTsKK30KKworCisjIGNvcHlmdW5jcy5jLCBlcXVhbGZ1bmNzLmMKKworb3Bl biBteSAkY2ZmLCAnPicsICdjb3B5ZnVuY3MuZnVuY3MuYycgLiAkdG1wZXh0IG9yIGRpZSAk ITsKK29wZW4gbXkgJGVmZiwgJz4nLCAnZXF1YWxmdW5jcy5mdW5jcy5jJyAuICR0bXBleHQg b3IgZGllICQhOworb3BlbiBteSAkY2ZzLCAnPicsICdjb3B5ZnVuY3Muc3dpdGNoLmMnIC4g JHRtcGV4dCBvciBkaWUgJCE7CitvcGVuIG15ICRlZnMsICc+JywgJ2VxdWFsZnVuY3Muc3dp dGNoLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKKyMgYWRkIHJlcXVpcmVkICNpbmNsdWRl IGxpbmVzIHRvIGVhY2ggZmlsZSBzZXQKK3ByaW50ICRjZmYgJG5vZGVfaW5jbHVkZXM7Citw cmludCAkZWZmICRub2RlX2luY2x1ZGVzOworCitmb3JlYWNoIG15ICRuIChAbm9kZV90eXBl cykKK3sKKwluZXh0IGlmIGVsZW0gJG4sIEBhYnN0cmFjdF90eXBlczsKKwlteSAkc3RydWN0 X25vX2NvcHkgPSAoZWxlbSAkbiwgQG5vX2NvcHkpOworCW15ICRzdHJ1Y3Rfbm9fZXF1YWwg PSAoZWxlbSAkbiwgQG5vX2VxdWFsKTsKKwluZXh0IGlmICRzdHJ1Y3Rfbm9fY29weSAmJiAk c3RydWN0X25vX2VxdWFsOworCW5leHQgaWYgJG4gZXEgJ0xpc3QnOworCisJcHJpbnQgJGNm cyAiXHRcdGNhc2UgVF8ke259OlxuIi4KKwkgICJcdFx0XHRyZXR2YWwgPSBfY29weSR7bn0o ZnJvbSk7XG4iLgorCSAgIlx0XHRcdGJyZWFrO1xuIiB1bmxlc3MgJHN0cnVjdF9ub19jb3B5 OworCisJcHJpbnQgJGVmcyAiXHRcdGNhc2UgVF8ke259OlxuIi4KKwkgICJcdFx0XHRyZXR2 YWwgPSBfZXF1YWwke259KGEsIGIpO1xuIi4KKwkgICJcdFx0XHRicmVhaztcbiIgdW5sZXNz ICRzdHJ1Y3Rfbm9fZXF1YWw7CisKKwluZXh0IGlmIGVsZW0gJG4sIEBjdXN0b21fY29weV9l cXVhbDsKKworCXByaW50ICRjZmYgIgorc3RhdGljICRuICoKK19jb3B5JHtufShjb25zdCAk biAqZnJvbSkKK3sKK1x0JHtufSAqbmV3bm9kZSA9IG1ha2VOb2RlKCRuKTsKKworIiB1bmxl c3MgJHN0cnVjdF9ub19jb3B5OworCisJcHJpbnQgJGVmZiAiCitzdGF0aWMgYm9vbAorX2Vx dWFsJHtufShjb25zdCAkbiAqYSwgY29uc3QgJG4gKmIpCit7CisiIHVubGVzcyAkc3RydWN0 X25vX2VxdWFsOworCisJIyBwcmludCBpbnN0cnVjdGlvbnMgZm9yIGVhY2ggZmllbGQKKwlm b3JlYWNoIG15ICRmIChAeyRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZHN9fSkKKwl7CisJ CW15ICR0ID0gJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfXskZn07CisJCW15 IEBhID0gQHsgJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX2F0dHJzfXskZn0gfTsKKwkJ bXkgJGNvcHlfaWdub3JlID0gJHN0cnVjdF9ub19jb3B5OworCQlteSAkZXF1YWxfaWdub3Jl ID0gJHN0cnVjdF9ub19lcXVhbDsKKworCQkjIGV4dHJhY3QgcGVyLWZpZWxkIGF0dHJpYnV0 ZXMKKwkJbXkgJGFycmF5X3NpemVfZmllbGQ7CisJCW15ICRjb3B5X2FzX2ZpZWxkOworCQlm b3JlYWNoIG15ICRhIChAYSkKKwkJeworCQkJaWYgKCRhID1+IC9eYXJyYXlfc2l6ZS4oW1x3 Ll0rKS8pCisJCQl7CisJCQkJJGFycmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJCWVs c2lmICgkYSA9fiAvXmNvcHlfYXMuKFtcdy5dKykvKQorCQkJeworCQkJCSRjb3B5X2FzX2Zp ZWxkID0gJDE7CisJCQl9CisJCQllbHNpZiAoJGEgZXEgJ2VxdWFsX2lnbm9yZScpCisJCQl7 CisJCQkJJGVxdWFsX2lnbm9yZSA9IDE7CisJCQl9CisJCX0KKworCQkjIG92ZXJyaWRlIHR5 cGUtc3BlY2lmaWMgY29weSBtZXRob2QgaWYgY29weV9hcyBpcyBzcGVjaWZpZWQKKwkJaWYg KCRjb3B5X2FzX2ZpZWxkKQorCQl7CisJCQlwcmludCAkY2ZmICJcdG5ld25vZGUtPiRmID0g JGNvcHlfYXNfZmllbGQ7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkkY29weV9pZ25v cmUgPSAxOworCQl9CisKKwkJIyBzZWxlY3QgaW5zdHJ1Y3Rpb25zIGJ5IGZpZWxkIHR5cGUK KwkJaWYgKCR0IGVxICdjaGFyKicpCisJCXsKKwkJCXByaW50ICRjZmYgIlx0Q09QWV9TVFJJ TkdfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmZiAi XHRDT01QQVJFX1NUUklOR19GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOwor CQl9CisJCWVsc2lmICgkdCBlcSAnQml0bWFwc2V0KicgfHwgJHQgZXEgJ1JlbGlkcycpCisJ CXsKKwkJCXByaW50ICRjZmYgIlx0Q09QWV9CSVRNQVBTRVRfRklFTEQoJGYpO1xuIiB1bmxl c3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX0JJVE1BUFNFVF9G SUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgkdCBl cSAnaW50JyAmJiAkZiA9fiAnbG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRD T1BZX0xPQ0FUSU9OX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCXBy aW50ICRlZmYgIlx0Q09NUEFSRV9MT0NBVElPTl9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1 YWxfaWdub3JlOworCQl9CisJCWVsc2lmIChlbGVtICR0LCBAc2NhbGFyX3R5cGVzIG9yIGVs ZW0gJHQsIEBlbnVtX3R5cGVzKQorCQl7CisJCQlwcmludCAkY2ZmICJcdENPUFlfU0NBTEFS X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCWlmIChlbGVtICdlcXVh bF9pZ25vcmVfaWZfemVybycsIEBhKQorCQkJeworCQkJCXByaW50ICRlZmYgIlx0aWYgKGEt PiRmICE9IGItPiRmICYmIGEtPiRmICE9IDAgJiYgYi0+JGYgIT0gMClcblx0XHRyZXR1cm4g ZmFsc2U7XG4iOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ICRlZmYgIlx0Q09N UEFSRV9TQ0FMQVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZSB8fCAkdCBl cSAnQ29lcmNpb25Gb3JtJzsKKwkJCX0KKwkJfQorCQkjIHNjYWxhciB0eXBlIHBvaW50ZXIK KwkJZWxzaWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwgQHNjYWxhcl90eXBlcykK KwkJeworCQkJbXkgJHR0ID0gJDE7CisJCQlpZiAoISRhcnJheV9zaXplX2ZpZWxkKQorCQkJ eworCQkJCWRpZSAibm8gYXJyYXkgc2l6ZSBkZWZpbmVkIGZvciAkbi4kZiBvZiB0eXBlICR0 IjsKKwkJCX0KKwkJCWlmICgkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfdHlwZXN9eyRh cnJheV9zaXplX2ZpZWxkfSBlcSAnTGlzdConKQorCQkJeworCQkJCXByaW50ICRjZmYgIlx0 Q09QWV9QT0lOVEVSX0ZJRUxEKCRmLCBsaXN0X2xlbmd0aChmcm9tLT4kYXJyYXlfc2l6ZV9m aWVsZCkgKiBzaXplb2YoJHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJp bnQgJGVmZiAiXHRDT01QQVJFX1BPSU5URVJfRklFTEQoJGYsIGxpc3RfbGVuZ3RoKGEtPiRh cnJheV9zaXplX2ZpZWxkKSAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25v cmU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJpbnQgJGNmZiAiXHRDT1BZX1BPSU5U RVJfRklFTEQoJGYsIGZyb20tPiRhcnJheV9zaXplX2ZpZWxkICogc2l6ZW9mKCR0dCkpO1xu IiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJCXByaW50ICRlZmYgIlx0Q09NUEFSRV9QT0lO VEVSX0ZJRUxEKCRmLCBhLT4kYXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIg dW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCQl9CisJCX0KKwkJIyBub2RlIHR5cGUKKwkJZWxz aWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlwZXMpCisJCXsKKwkJ CXByaW50ICRjZmYgIlx0Q09QWV9OT0RFX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2ln bm9yZTsKKwkJCXByaW50ICRlZmYgIlx0Q09NUEFSRV9OT0RFX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJIyBhcnJheSAoaW5saW5lKQorCQllbHNpZiAo JHQgPX4gL1x3K1xbLykKKwkJeworCQkJcHJpbnQgJGNmZiAiXHRDT1BZX0FSUkFZX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCXByaW50ICRlZmYgIlx0Q09NUEFS RV9BUlJBWV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVs c2lmICgkdCBlcSAnc3RydWN0IEN1c3RvbVBhdGhNZXRob2RzKicgfHwJJHQgZXEgJ3N0cnVj dCBDdXN0b21TY2FuTWV0aG9kcyonKQorCQl7CisJCQkjIEZpZWxkcyBvZiB0aGVzZSB0eXBl cyBhcmUgcmVxdWlyZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEKKwkJCSMgc3RhdGljIHRhYmxl IG9mIGNhbGxiYWNrIGZ1bmN0aW9ucy4gIFNvIHdlIGRvbid0IGNvcHkKKwkJCSMgdGhlIHRh YmxlIGl0c2VsZiwganVzdCByZWZlcmVuY2UgdGhlIG9yaWdpbmFsIG9uZS4KKwkJCXByaW50 ICRjZmYgIlx0Q09QWV9TQ0FMQVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3Jl OworCQkJcHJpbnQgJGVmZiAiXHRDT01QQVJFX1NDQUxBUl9GSUVMRCgkZik7XG4iIHVubGVz cyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2UKKwkJeworCQkJZGllICJjb3VsZCBub3Qg aGFuZGxlIHR5cGUgXCIkdFwiIGluIHN0cnVjdCBcIiRuXCIgZmllbGQgXCIkZlwiIjsKKwkJ fQorCX0KKworCXByaW50ICRjZmYgIgorXHRyZXR1cm4gbmV3bm9kZTsKK30KKyIgdW5sZXNz ICRzdHJ1Y3Rfbm9fY29weTsKKwlwcmludCAkZWZmICIKK1x0cmV0dXJuIHRydWU7Cit9Cisi IHVubGVzcyAkc3RydWN0X25vX2VxdWFsOworfQorCitjbG9zZSAkY2ZmOworY2xvc2UgJGVm ZjsKK2Nsb3NlICRjZnM7CitjbG9zZSAkZWZzOworCisKKyMgb3V0ZnVuY3MuYywgcmVhZGZ1 bmNzLmMKKworb3BlbiBteSAkb2ZmLCAnPicsICdvdXRmdW5jcy5mdW5jcy5jJyAuICR0bXBl eHQgb3IgZGllICQhOworb3BlbiBteSAkcmZmLCAnPicsICdyZWFkZnVuY3MuZnVuY3MuYycg LiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJG9mcywgJz4nLCAnb3V0ZnVuY3Muc3dp dGNoLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CitvcGVuIG15ICRyZnMsICc+JywgJ3JlYWRm dW5jcy5zd2l0Y2guYycgLiAkdG1wZXh0IG9yIGRpZSAkITsKKworcHJpbnQgJG9mZiAkbm9k ZV9pbmNsdWRlczsKK3ByaW50ICRyZmYgJG5vZGVfaW5jbHVkZXM7CisKK2ZvcmVhY2ggbXkg JG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVz OworCW5leHQgaWYgZWxlbSAkbiwgQG5vX3JlYWRfd3JpdGU7CisKKwkjIFhYWCBGb3Igbm93 LCBza2lwIGFsbCAiU3RtdCJzIGV4Y2VwdCB0aGF0IG9uZXMgdGhhdCB3ZXJlIHRoZXJlIGJl Zm9yZS4KKwlpZiAoJG4gPX4gL1N0bXQkLykKKwl7CisJCW15IEBrZWVwID0gcXcoQWx0ZXJT dGF0c1N0bXQgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCBDcmVhdGVTdGF0c1N0bXQgQ3JlYXRl U3RtdCBEZWNsYXJlQ3Vyc29yU3RtdCBJbXBvcnRGb3JlaWduU2NoZW1hU3RtdCBJbmRleFN0 bXQgTm90aWZ5U3RtdCBQbGFubmVkU3RtdCBQTEFzc2lnblN0bXQgUmF3U3RtdCBSZXR1cm5T dG10IFNlbGVjdFN0bXQgU2V0T3BlcmF0aW9uU3RtdCk7CisJCW5leHQgdW5sZXNzIGVsZW0g JG4sIEBrZWVwOworCX0KKworCW15ICRzdHJ1Y3Rfbm9fcmVhZCA9IChlbGVtICRuLCBAbm9f cmVhZCk7CisKKwkjIG91dHB1dCBmb3JtYXQgc3RhcnRzIHdpdGggdXBwZXIgY2FzZSBub2Rl IHR5cGUgbmFtZQorCW15ICROID0gdWMgJG47CisKKwlwcmludCAkb2ZzICJcdFx0XHRjYXNl IFRfJHtufTpcbiIuCisJICAiXHRcdFx0XHRfb3V0JHtufShzdHIsIG9iaik7XG4iLgorCSAg Ilx0XHRcdFx0YnJlYWs7XG4iOworCisJcHJpbnQgJHJmcyAiXHRlbHNlIGlmIChNQVRDSChc IiROXCIsICIgLiBsZW5ndGgoJE4pIC4gIikpXG4iLgorCSAgIlx0XHRyZXR1cm5fdmFsdWUg PSBfcmVhZCR7bn0oKTtcbiIgdW5sZXNzICRzdHJ1Y3Rfbm9fcmVhZDsKKworCW5leHQgaWYg ZWxlbSAkbiwgQGN1c3RvbV9yZWFkX3dyaXRlOworCisJcHJpbnQgJG9mZiAiCitzdGF0aWMg dm9pZAorX291dCR7bn0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0ICRuICpub2RlKQoreworXHRX UklURV9OT0RFX1RZUEUoXCIkTlwiKTsKKworIjsKKworCXByaW50ICRyZmYgIgorc3RhdGlj ICRuICoKK19yZWFkJHtufSh2b2lkKQoreworXHRSRUFEX0xPQ0FMUygkbik7CisKKyIgdW5s ZXNzICRzdHJ1Y3Rfbm9fcmVhZDsKKworCSMgcHJpbnQgaW5zdHJ1Y3Rpb25zIGZvciBlYWNo IGZpZWxkCisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRz fX0pCisJeworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317 JGZ9OworCQlteSBAYSA9IEB7ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc317 JGZ9IH07CisJCW15ICRub19yZWFkID0gJHN0cnVjdF9ub19yZWFkOworCisJCSMgZXh0cmFj dCBwZXItZmllbGQgYXR0cmlidXRlcworCQlteSAkcmVhZF93cml0ZV9pZ25vcmUgPSAwOwor CQlteSAkcmVhZF9hc19maWVsZDsKKwkJZm9yZWFjaCBteSAkYSAoQGEpCisJCXsKKwkJCWlm ICgkYSA9fiAvXnJlYWRfYXMuKFtcdy5dKykvKQorCQkJeworCQkJCSRyZWFkX2FzX2ZpZWxk ID0gJDE7CisJCQl9CisJCQllbHNpZiAoJGEgZXEgJ3JlYWRfd3JpdGVfaWdub3JlJykKKwkJ CXsKKwkJCQkkcmVhZF93cml0ZV9pZ25vcmUgPSAxOworCQkJfQorCQl9CisKKwkJIyBvdmVy cmlkZSB0eXBlLXNwZWNpZmljIHJlYWQgbWV0aG9kIGlmIHJlYWRfYXMgaXMgc3BlY2lmaWVk CisJCWlmICgkcmVhZF9hc19maWVsZCkKKwkJeworCQkJcHJpbnQgJHJmZiAiXHRsb2NhbF9u b2RlLT4kZiA9ICRyZWFkX2FzX2ZpZWxkO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQkkbm9f cmVhZCA9IDE7CisJCX0KKworCQkjIGNoZWNrIHRoaXMgYWZ0ZXIgaGFuZGxpbmcgcmVhZF9h cworCQlpZiAoJHJlYWRfd3JpdGVfaWdub3JlKQorCQl7CisJCQluZXh0IGlmICRub19yZWFk OworCQkJZGllICIkbi4kZiBtdXN0IG5vdCBiZSBtYXJrZWQgcmVhZF93cml0ZV9pZ25vcmVc biI7CisJCX0KKworCQkjIHNlbGVjdCBpbnN0cnVjdGlvbnMgYnkgZmllbGQgdHlwZQorCQlp ZiAoJHQgZXEgJ2Jvb2wnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0JPT0xfRklF TEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVBRF9CT09MX0ZJRUxEKCRmKTtcbiIg dW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnaW50JyAmJiAkZiA9fiAn bG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklURV9MT0NBVElPTl9GSUVM RCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0xPQ0FUSU9OX0ZJRUxEKCRmKTtc biIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnaW50JyB8fCAkdCBl cSAnaW50MzInIHx8ICR0IGVxICdBdHRyTnVtYmVyJyB8fCAkdCBlcSAnU3RyYXRlZ3lOdW1i ZXInKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0lOVF9GSUVMRCgkZik7XG4iOwor CQkJcHJpbnQgJHJmZiAiXHRSRUFEX0lOVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVh ZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ3VpbnQzMicgfHwgJHQgZXEgJ2JpdHMzMicgfHwg JHQgZXEgJ0FjbE1vZGUnIHx8ICR0IGVxICdCbG9ja051bWJlcicgfHwgJHQgZXEgJ0luZGV4 JyB8fCAkdCBlcSAnU3ViVHJhbnNhY3Rpb25JZCcpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0 V1JJVEVfVUlOVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX1VJTlRf RklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICd1 aW50NjQnKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX1VJTlQ2NF9GSUVMRCgkZik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX1VJTlQ2NF9GSUVMRCgkZik7XG4iIHVubGVz cyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ09pZCcgfHwgJHQgZXEgJ1JlbEZp bGVOdW1iZXInKQorCQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX09JRF9GSUVMRCgkZik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX09JRF9GSUVMRCgkZik7XG4iIHVubGVzcyAk bm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2xvbmcnKQorCQl7CisJCQlwcmludCAk b2ZmICJcdFdSSVRFX0xPTkdfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0UkVB RF9MT05HX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgk dCBlcSAnY2hhcicpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfQ0hBUl9GSUVMRCgk Zik7XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0NIQVJfRklFTEQoJGYpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdkb3VibGUnKQorCQl7CisJCQlw cmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUuNmZcIik7XG4iOworCQkJ cHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFk OworCQl9CisJCWVsc2lmICgkdCBlcSAnQ2FyZGluYWxpdHknKQorCQl7CisJCQlwcmludCAk b2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUuMGZcIik7XG4iOworCQkJcHJpbnQg JHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9 CisJCWVsc2lmICgkdCBlcSAnQ29zdCcpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVf RkxPQVRfRklFTEQoJGYsIFwiJS4yZlwiKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURf RkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0 IGVxICdRdWFsQ29zdCcpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVfRkxPQVRfRklF TEQoJGYuc3RhcnR1cCwgXCIlLjJmXCIpO1xuIjsKKwkJCXByaW50ICRvZmYgIlx0V1JJVEVf RkxPQVRfRklFTEQoJGYucGVyX3R1cGxlLCBcIiUuMmZcIik7XG4iOworCQkJcHJpbnQgJHJm ZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmLnN0YXJ0dXApO1xuIiB1bmxlc3MgJG5vX3JlYWQ7 CisJCQlwcmludCAkcmZmICJcdFJFQURfRkxPQVRfRklFTEQoJGYucGVyX3R1cGxlKTtcbiIg dW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnU2VsZWN0aXZpdHknKQor CQl7CisJCQlwcmludCAkb2ZmICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBcIiUuNGZcIik7 XG4iOworCQkJcHJpbnQgJHJmZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNz ICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnY2hhcionKQorCQl7CisJCQlwcmlu dCAkb2ZmICJcdFdSSVRFX1NUUklOR19GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmZiAi XHRSRUFEX1NUUklOR19GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQll bHNpZiAoJHQgZXEgJ0JpdG1hcHNldConIHx8ICR0IGVxICdSZWxpZHMnKQorCQl7CisJCQlw cmludCAkb2ZmICJcdFdSSVRFX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQg JHJmZiAiXHRSRUFEX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsK KwkJfQorCQllbHNpZiAoZWxlbSAkdCwgQGVudW1fdHlwZXMpCisJCXsKKwkJCXByaW50ICRv ZmYgIlx0V1JJVEVfRU5VTV9GSUVMRCgkZiwgJHQpO1xuIjsKKwkJCXByaW50ICRyZmYgIlx0 UkVBRF9FTlVNX0ZJRUxEKCRmLCAkdCk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQkj IGFycmF5cworCQllbHNpZiAoJHQgPX4gLyhcdyspKFwqfFxbKS8gYW5kIGVsZW0gJDEsIEBz Y2FsYXJfdHlwZXMpCisJCXsKKwkJCW15ICR0dCA9IHVjICQxOworCQkJbXkgJGFycmF5X3Np emVfZmllbGQ7CisJCQlmb3JlYWNoIG15ICRhIChAYSkKKwkJCXsKKwkJCQlpZiAoJGEgPX4g L15hcnJheV9zaXplLihbXHcuXSspLykKKwkJCQl7CisJCQkJCSRhcnJheV9zaXplX2ZpZWxk ID0gJDE7CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJfQorCQkJaWYgKCEkYXJyYXlfc2l6ZV9m aWVsZCkKKwkJCXsKKwkJCQlkaWUgIm5vIGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYg b2YgdHlwZSAkdCI7CisJCQl9CisJCQlpZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxk X3R5cGVzfXskYXJyYXlfc2l6ZV9maWVsZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmlu dCAkb2ZmICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBsaXN0X2xlbmd0aChub2RlLT4kYXJy YXlfc2l6ZV9maWVsZCkpO1xuIjsKKwkJCQlwcmludCAkcmZmICJcdFJFQURfJHt0dH1fQVJS QVkoJGYsIGxpc3RfbGVuZ3RoKGxvY2FsX25vZGUtPiRhcnJheV9zaXplX2ZpZWxkKSk7XG4i IHVubGVzcyAkbm9fcmVhZDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkb2Zm ICJcdFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBub2RlLT4kYXJyYXlfc2l6ZV9maWVsZCk7XG4i OworCQkJCXByaW50ICRyZmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgkZiwgbG9jYWxfbm9kZS0+ JGFycmF5X3NpemVfZmllbGQpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQl9CisJCX0KKwkJ IyBTcGVjaWFsIHRyZWF0bWVudHMgb2Ygc2V2ZXJhbCBQYXRoIG5vZGUgZmllbGRzCisJCWVs c2lmICgkdCBlcSAnUmVsT3B0SW5mbyonICYmIGVsZW0gJ3dyaXRlX29ubHlfcmVsaWRzJywg QGEpCisJCXsKKwkJCXByaW50ICRvZmYgIlx0YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIs IFwiIDpwYXJlbnRfcmVsaWRzIFwiKTtcbiIuCisJCQkgICJcdG91dEJpdG1hcHNldChzdHIs IG5vZGUtPiRmLT5yZWxpZHMpO1xuIjsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ1BhdGhUYXJn ZXQqJyAmJiBlbGVtICd3cml0ZV9vbmx5X25vbmRlZmF1bHRfcGF0aHRhcmdldCcsIEBhKQor CQl7CisJCQkobXkgJGYyID0gJGYpID1+IHMvcGF0aHRhcmdldC9wYXJlbnQvOworCQkJcHJp bnQgJG9mZiAiXHRpZiAobm9kZS0+JGYgIT0gbm9kZS0+JGYyLT5yZWx0YXJnZXQpXG4iLgor CQkJICAiXHRcdFdSSVRFX05PREVfRklFTEQoJGYpO1xuIjsKKwkJfQorCQllbHNpZiAoJHQg ZXEgJ1BhcmFtUGF0aEluZm8qJyAmJiBlbGVtICd3cml0ZV9vbmx5X3JlcV9vdXRlcicsIEBh KQorCQl7CisJCQlwcmludCAkb2ZmICJcdGFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBc IiA6cmVxdWlyZWRfb3V0ZXIgXCIpO1xuIi4KKwkJCSAgIlx0aWYgKG5vZGUtPiRmKVxuIi4K KwkJCSAgIlx0XHRvdXRCaXRtYXBzZXQoc3RyLCBub2RlLT4kZi0+cHBpX3JlcV9vdXRlcik7 XG4iLgorCQkJICAiXHRlbHNlXG4iLgorCQkJICAiXHRcdG91dEJpdG1hcHNldChzdHIsIE5V TEwpO1xuIjsKKwkJfQorCQkjIG5vZGUgdHlwZQorCQllbHNpZiAoJHQgPX4gLyhcdyspXCov IGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJeworCQkJcHJpbnQgJG9mZiAiXHRXUklU RV9OT0RFX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmZmICJcdFJFQURfTk9ERV9GSUVM RCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ3N0cnVj dCBDdXN0b21QYXRoTWV0aG9kcyonIHx8CSR0IGVxICdzdHJ1Y3QgQ3VzdG9tU2Nhbk1ldGhv ZHMqJykKKwkJeworCQkJcHJpbnQgJG9mZiBxeworCS8qIEN1c3RvbU5hbWUgaXMgYSBrZXkg dG8gbG9va3VwIEN1c3RvbVNjYW5NZXRob2RzICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhzdHIsICIgOm1ldGhvZHMgIik7CisJb3V0VG9rZW4oc3RyLCBub2RlLT5tZXRob2RzLT5D dXN0b21OYW1lKTsKK307CisJCQlwcmludCAkcmZmIHEhCisJeworCQkvKiBMb29rdXAgQ3Vz dG9tU2Nhbk1ldGhvZHMgYnkgQ3VzdG9tTmFtZSAqLworCQljaGFyCSAgICpjdXN0b21fbmFt ZTsKKwkJY29uc3QgQ3VzdG9tU2Nhbk1ldGhvZHMgKm1ldGhvZHM7CisJCXRva2VuID0gcGdf c3RydG9rKCZsZW5ndGgpOyAvKiBza2lwIG1ldGhvZHM6ICovCisJCXRva2VuID0gcGdfc3Ry dG9rKCZsZW5ndGgpOyAvKiBDdXN0b21OYW1lICovCisJCWN1c3RvbV9uYW1lID0gbnVsbGFi bGVfc3RyaW5nKHRva2VuLCBsZW5ndGgpOworCQltZXRob2RzID0gR2V0Q3VzdG9tU2Nhbk1l dGhvZHMoY3VzdG9tX25hbWUsIGZhbHNlKTsKKwkJbG9jYWxfbm9kZS0+bWV0aG9kcyA9IG1l dGhvZHM7CisJfQorISB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlk aWUgImNvdWxkIG5vdCBoYW5kbGUgdHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVs ZCBcIiRmXCIiOworCQl9CisJfQorCisJcHJpbnQgJG9mZiAifQorIjsKKwlwcmludCAkcmZm ICIKK1x0UkVBRF9ET05FKCk7Cit9CisiIHVubGVzcyAkc3RydWN0X25vX3JlYWQ7Cit9CisK K2Nsb3NlICRvZmY7CitjbG9zZSAkcmZmOworY2xvc2UgJG9mczsKK2Nsb3NlICRyZnM7CisK KworIyBub3cgcmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZXMgdG8gdGhlaXIgZmluYWwgbmFt ZQorZm9yZWFjaCBteSAkZmlsZSAocXcobm9kZXRhZ3MuaCBjb3B5ZnVuY3MuZnVuY3MuYyBj b3B5ZnVuY3Muc3dpdGNoLmMgZXF1YWxmdW5jcy5mdW5jcy5jIGVxdWFsZnVuY3Muc3dpdGNo LmMgb3V0ZnVuY3MuZnVuY3MuYyBvdXRmdW5jcy5zd2l0Y2guYyByZWFkZnVuY3MuZnVuY3Mu YyByZWFkZnVuY3Muc3dpdGNoLmMpKQoreworCUNhdGFsb2c6OlJlbmFtZVRlbXBGaWxlKCRm aWxlLCAkdG1wZXh0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IDc3YTdhODY4Y2Eu LmYyNmMxMjlkNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMzEsMTEgKzMxLDEwIEBA CiAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9wYXRo bm9kZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rl cy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgIm5v ZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgotI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCBvdXRDaGFyKFN0cmluZ0luZm8gc3RyLCBjaGFy IGMpOwogCkBAIC0zMDYsNiArMzA1LDkgQEAgb3V0RGF0dW0oU3RyaW5nSW5mbyBzdHIsIERh dHVtIHZhbHVlLCBpbnQgdHlwbGVuLCBib29sIHR5cGJ5dmFsKQogfQogCiAKKyNpbmNsdWRl ICJvdXRmdW5jcy5mdW5jcy5jIgorCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKglTdHVmZiBm cm9tIHBsYW5ub2Rlcy5oCiAgKi8KQEAgLTExMzgsNiArMTE0MCw3IEBAIF9vdXRWYXIoU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IFZhciAqbm9kZSkKIAlXUklURV9JTlRfRklFTEQodmFyYXR0 bm9zeW4pOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZgkJ CQkJCQkvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgdm9pZAogX291dENvbnN0KFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBDb25zdCAqbm9kZSkKQEAgLTExNTksNiArMTE2Miw3IEBAIF9vdXRD b25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3QgKm5vZGUpCiAJCW91dERhdHVtKHN0 ciwgbm9kZS0+Y29uc3R2YWx1ZSwgbm9kZS0+Y29uc3RsZW4sIG5vZGUtPmNvbnN0Ynl2YWwp OwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0UGFyYW0oU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFBhcmFtICpub2RlKQogewpAQCAtMTMyOSw2ICsxMzMzLDcgQEAg X291dFNjYWxhckFycmF5T3BFeHByKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTY2FsYXJBcnJh eU9wRXhwciAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGFyZ3MpOwogCVdSSVRFX0xPQ0FU SU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwog CiBzdGF0aWMgdm9pZAogX291dEJvb2xFeHByKFN0cmluZ0luZm8gc3RyLCBjb25zdCBCb29s RXhwciAqbm9kZSkKQEAgLTEzNTcsNiArMTM2Miw3IEBAIF9vdXRCb29sRXhwcihTdHJpbmdJ bmZvIHN0ciwgY29uc3QgQm9vbEV4cHIgKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQo bG9jYXRpb24pOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0U3Vi TGluayhTdHJpbmdJbmZvIHN0ciwgY29uc3QgU3ViTGluayAqbm9kZSkKIHsKQEAgLTI1Njks NiArMjU3NSw3IEBAIF9vdXRJbmRleE9wdEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IElu ZGV4T3B0SW5mbyAqbm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKGh5cG90aGV0aWNhbCk7CiAJ Lyogd2UgZG9uJ3QgYm90aGVyIHdpdGggZmllbGRzIGNvcGllZCBmcm9tIHRoZSBpbmRleCBB TSdzIEFQSSBzdHJ1Y3QgKi8KIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiBz dGF0aWMgdm9pZAogX291dEZvcmVpZ25LZXlPcHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25z dCBGb3JlaWduS2V5T3B0SW5mbyAqbm9kZSkKQEAgLTI1OTYsNiArMjYwMyw3IEBAIF9vdXRG b3JlaWduS2V5T3B0SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgRm9yZWlnbktleU9wdElu Zm8gKm5vZGUpCiAJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiICVkIiwgbGlzdF9sZW5ndGgo bm9kZS0+cmluZm9zW2ldKSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQK IF9vdXRTdGF0aXN0aWNFeHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTdGF0aXN0aWNF eHRJbmZvICpub2RlKQogewpAQCAtMjYwNyw2ICsyNjE1LDcgQEAgX291dFN0YXRpc3RpY0V4 dEluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN0YXRpc3RpY0V4dEluZm8gKm5vZGUpCiAJ V1JJVEVfQ0hBUl9GSUVMRChraW5kKTsKIAlXUklURV9CSVRNQVBTRVRfRklFTEQoa2V5cyk7 CiB9CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogc3RhdGljIHZvaWQKIF9vdXRF cXVpdmFsZW5jZUNsYXNzKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFcXVpdmFsZW5jZUNsYXNz ICpub2RlKQpAQCAtMjYzNSw2ICsyNjQ0LDcgQEAgX291dEVxdWl2YWxlbmNlQ2xhc3MoU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IEVxdWl2YWxlbmNlQ2xhc3MgKm5vZGUpCiAJV1JJVEVfVUlO VF9GSUVMRChlY19tYXhfc2VjdXJpdHkpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRp YyB2b2lkCiBfb3V0RXF1aXZhbGVuY2VNZW1iZXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEVx dWl2YWxlbmNlTWVtYmVyICpub2RlKQogewpAQCAtMjgxOSw2ICsyODI5LDcgQEAgX291dFBs YW5uZXJQYXJhbUl0ZW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZXJQYXJhbUl0ZW0g Km5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChpdGVtKTsKIAlXUklURV9JTlRfRklFTEQocGFy YW1JZCk7CiB9CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgpAQCAtMjg0MSw2ICsyODUyLDcgQEAgX291dEV4dGVuc2libGVO b2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBFeHRlbnNpYmxlTm9kZSAqbm9kZSkKIAltZXRo b2RzLT5ub2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBA IC0zMTc0LDYgKzMxODYsNyBAQCBfb3V0U3RhdHNFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25z dCBTdGF0c0VsZW0gKm5vZGUpCiAJV1JJVEVfU1RSSU5HX0ZJRUxEKG5hbWUpOwogCVdSSVRF X05PREVfRklFTEQoZXhwcik7CiB9CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAog c3RhdGljIHZvaWQKIF9vdXRRdWVyeShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUXVlcnkgKm5v ZGUpCkBAIC0zMjQ4LDYgKzMyNjEsNyBAQCBfb3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNv bnN0IFF1ZXJ5ICpub2RlKQogCVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CiAKKyNp ZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRXaXRoQ2hlY2tPcHRpb24oU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFdpdGhDaGVja09wdGlvbiAqbm9kZSkKIHsKQEAgLTM0MTMsNiAr MzQyNyw3IEBAIF9vdXRTZXRPcGVyYXRpb25TdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBT ZXRPcGVyYXRpb25TdG10ICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoY29sQ29sbGF0aW9u cyk7CiAJV1JJVEVfTk9ERV9GSUVMRChncm91cENsYXVzZXMpOwogfQorI2VuZGlmCQkJCQkJ CS8qIE9CU09MRVRFICovCiAKIHN0YXRpYyB2b2lkCiBfb3V0UmFuZ2VUYmxFbnRyeShTdHJp bmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYmxFbnRyeSAqbm9kZSkKQEAgLTM0OTMsNiArMzUw OCw3IEBAIF9vdXRSYW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRi bEVudHJ5ICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoc2VjdXJpdHlRdWFscyk7CiB9CiAK KyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRSYW5nZVRibEZ1bmN0aW9uKFN0 cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRibEZ1bmN0aW9uICpub2RlKQogewpAQCAtMzUx Niw2ICszNTMyLDcgQEAgX291dFRhYmxlU2FtcGxlQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBj b25zdCBUYWJsZVNhbXBsZUNsYXVzZSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGFyZ3Mp OwogCVdSSVRFX05PREVfRklFTEQocmVwZWF0YWJsZSk7CiB9CisjZW5kaWYJCQkJCQkJLyog T0JTT0xFVEUgKi8KIAogc3RhdGljIHZvaWQKIF9vdXRBX0V4cHIoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IEFfRXhwciAqbm9kZSkKQEAgLTM2MzQsNiArMzY1MSw3IEBAIF9vdXRCaXRTdHJp bmcoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJpdFN0cmluZyAqbm9kZSkKIAlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKHN0ciwgbm9kZS0+YnN2YWwpOwogfQogCisjaWZkZWYgT0JTT0xFVEUK IHN0YXRpYyB2b2lkCiBfb3V0Q29sdW1uUmVmKFN0cmluZ0luZm8gc3RyLCBjb25zdCBDb2x1 bW5SZWYgKm5vZGUpCiB7CkBAIC0zNjY1LDYgKzM2ODMsNyBAQCBfb3V0UmF3U3RtdChTdHJp bmdJbmZvIHN0ciwgY29uc3QgUmF3U3RtdCAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVM RChzdG10X2xvY2F0aW9uKTsKIAlXUklURV9JTlRfRklFTEQoc3RtdF9sZW4pOwogfQorI2Vu ZGlmCQkJCQkJCS8qIE9CU09MRVRFICovCiAKIHN0YXRpYyB2b2lkCiBfb3V0QV9Db25zdChT dHJpbmdJbmZvIHN0ciwgY29uc3QgQV9Db25zdCAqbm9kZSkKQEAgLTM2ODEsNiArMzcwMCw3 IEBAIF9vdXRBX0NvbnN0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBBX0NvbnN0ICpub2RlKQog CVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAorI2lmZGVmIE9CU09MRVRF CiBzdGF0aWMgdm9pZAogX291dEFfU3RhcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9TdGFy ICpub2RlKQogewpAQCAtMzgyNSw2ICszODQ1LDcgQEAgX291dFJhbmdlVGFibGVGdW5jQ29s KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRhYmxlRnVuY0NvbCAqbm9kZSkKIAlXUklU RV9OT0RFX0ZJRUxEKGNvbGRlZmV4cHIpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0 aW9uKTsKIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgdm9pZAog X291dENvbnN0cmFpbnQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0cmFpbnQgKm5vZGUp CkBAIC0zOTQ3LDYgKzM5NjgsNyBAQCBfb3V0Q29uc3RyYWludChTdHJpbmdJbmZvIHN0ciwg Y29uc3QgQ29uc3RyYWludCAqbm9kZSkKIAl9CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3Rh dGljIHZvaWQKIF9vdXRGb3JlaWduS2V5Q2FjaGVJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25z dCBGb3JlaWduS2V5Q2FjaGVJbmZvICpub2RlKQogewpAQCAtNDAwNyw2ICs0MDI5LDcgQEAg X291dFBhcnRpdGlvblJhbmdlRGF0dW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBhcnRpdGlv blJhbmdlRGF0dW0gKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRCh2YWx1ZSk7CiAJV1JJVEVf TE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQorI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRF ICovCiAKIC8qCiAgKiBvdXROb2RlIC0KQEAgLTQwMzgsNiArNDA2MSw4IEBAIG91dE5vZGUo U3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJYXBwZW5kU3RyaW5nSW5mb0No YXIoc3RyLCAneycpOwogCQlzd2l0Y2ggKG5vZGVUYWcob2JqKSkKIAkJeworI2luY2x1ZGUg Im91dGZ1bmNzLnN3aXRjaC5jIgorI2lmZGVmIE9CU09MRVRFCiAJCQljYXNlIFRfUGxhbm5l ZFN0bXQ6CiAJCQkJX291dFBsYW5uZWRTdG10KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKQEAg LTQ3NDMsNiArNDc2OCw3IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQg Km9iaikKIAkJCWNhc2UgVF9Kc29uVGFibGVTaWJsaW5nOgogCQkJCV9vdXRKc29uVGFibGVT aWJsaW5nKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVU RSAqLwogCiAJCQlkZWZhdWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9y ZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDZiMTFm MDQ4MWIuLjIxMTc2Y2Q0YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0zMyw5ICsz Myw3IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0j aW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9i aXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9yZWFkZnVuY3MuaCIKIAogCkBAIC0yMzgs NiArMjM2LDggQEAgcmVhZEJpdG1hcHNldCh2b2lkKQogCXJldHVybiBfcmVhZEJpdG1hcHNl dCgpOwogfQogCisjaW5jbHVkZSAicmVhZGZ1bmNzLmZ1bmNzLmMiCisKIC8qCiAgKiBfcmVh ZFF1ZXJ5CiAgKi8KQEAgLTI5MSw2ICsyOTEsNyBAQCBfcmVhZFF1ZXJ5KHZvaWQpCiAJUkVB RF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkTm90aWZ5U3Rt dAogICovCkBAIC02MjksNiArNjMwLDcgQEAgX3JlYWRWYXIodm9pZCkKIAogCVJFQURfRE9O RSgpOwogfQorI2VuZGlmCQkJCQkJCS8qIE9CU09MRVRFICovCiAKIC8qCiAgKiBfcmVhZENv bnN0CkBAIC02NTUsNiArNjU3LDcgQEAgX3JlYWRDb25zdCh2b2lkKQogCVJFQURfRE9ORSgp OwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFBhcmFtCiAgKi8KQEAgLTg4 MCw2ICs4ODMsNyBAQCBfcmVhZFNjYWxhckFycmF5T3BFeHByKHZvaWQpCiAKIAlSRUFEX0RP TkUoKTsKIH0KKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiAvKgogICogX3JlYWRC b29sRXhwcgpAQCAtOTA3LDYgKzkxMSw3IEBAIF9yZWFkQm9vbEV4cHIodm9pZCkKIAlSRUFE X0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWRTdWJMaW5rCiAg Ki8KQEAgLTE2NDksNiArMTY1NCw3IEBAIF9yZWFkQXBwZW5kUmVsSW5mbyh2b2lkKQogLyoK ICAqCVN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oLgogICovCisjZW5kaWYJCQkJCQkJLyogT0JT T0xFVEUgKi8KIAogLyoKICAqIF9yZWFkUmFuZ2VUYmxFbnRyeQpAQCAtMTc0NCw2ICsxNzUw LDcgQEAgX3JlYWRSYW5nZVRibEVudHJ5KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNp ZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkUmFuZ2VUYmxGdW5jdGlvbgogICovCkBAIC0y ODQ2LDYgKzI4NTMsNyBAQCBfcmVhZEFsdGVybmF0aXZlU3ViUGxhbih2b2lkKQogCiAJUkVB RF9ET05FKCk7CiB9CisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIAogLyoKICAqIF9y ZWFkRXh0ZW5zaWJsZU5vZGUKQEAgLTI4NzcsNiArMjg4NSw3IEBAIF9yZWFkRXh0ZW5zaWJs ZU5vZGUodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgog ICogX3JlYWRQYXJ0aXRpb25Cb3VuZFNwZWMKICAqLwpAQCAtMjkxMSw2ICsyOTIwLDcgQEAg X3JlYWRQYXJ0aXRpb25SYW5nZURhdHVtKHZvaWQpCiAKIAlSRUFEX0RPTkUoKTsKIH0KKyNl bmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCiAvKgogICogcGFyc2VOb2RlU3RyaW5nCkBA IC0yOTM1LDcgKzI5NDUsMTEgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAjZGVmaW5lIE1B VENIKHRva25hbWUsIG5hbWVsZW4pIFwKIAkobGVuZ3RoID09IG5hbWVsZW4gJiYgbWVtY21w KHRva2VuLCB0b2tuYW1lLCBuYW1lbGVuKSA9PSAwKQogCi0JaWYgKE1BVENIKCJRVUVSWSIs IDUpKQorCWlmIChmYWxzZSkKKwkJOworI2luY2x1ZGUgInJlYWRmdW5jcy5zd2l0Y2guYyIK KyNpZmRlZiBPQlNPTEVURQorCWVsc2UgaWYgKE1BVENIKCJRVUVSWSIsIDUpKQogCQlyZXR1 cm5fdmFsdWUgPSBfcmVhZFF1ZXJ5KCk7CiAJZWxzZSBpZiAoTUFUQ0goIldJVEhDSEVDS09Q VElPTiIsIDE1KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRXaXRoQ2hlY2tPcHRpb24oKTsK QEAgLTMyMDUsNiArMzIxOSw3IEBAIHBhcnNlTm9kZVN0cmluZyh2b2lkKQogCQlyZXR1cm5f dmFsdWUgPSBfcmVhZEpzb25UYWJsZVBhcmVudCgpOwogCWVsc2UgaWYgKE1BVENIKCJKU09O VEFCTEVTSUJMSU5HIiwgMTYpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEpzb25UYWJsZVNp YmxpbmcoKTsKKyNlbmRpZgkJCQkJCQkvKiBPQlNPTEVURSAqLwogCWVsc2UKIAl7CiAJCWVs b2coRVJST1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBzdHJpbmcgXCIlLjMyc1wiLi4uIiwg dG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvTWFrZWZpbGUgYi9zcmMvaW5jbHVk ZS9NYWtlZmlsZQppbmRleCA1ZjI1N2E5NThjLi4xN2NmZDI2OGI4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9NYWtlZmlsZQorKysgYi9zcmMvaW5jbHVkZS9NYWtlZmlsZQpAQCAtODEs NiArODEsNyBAQCBjbGVhbjoKIAlybSAtZiBwYXJzZXIvZ3JhbS5oIHN0b3JhZ2UvbHdsb2Nr bmFtZXMuaCB1dGlscy9wcm9iZXMuaAogCXJtIC1mIGNhdGFsb2cvc2NoZW1hcGcuaCBjYXRh bG9nL3N5c3RlbV9ma19pbmZvLmgKIAlybSAtZiBjYXRhbG9nL3BnXypfZC5oIGNhdGFsb2cv aGVhZGVyLXN0YW1wCisJcm0gLWYgbm9kZXMvbm9kZXRhZ3MuaCBub2Rlcy9oZWFkZXItc3Rh bXAKIAogZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW46IGNsZWFuCiAJcm0gLWYgcGdfY29u ZmlnLmggcGdfY29uZmlnX2V4dC5oIHBnX2NvbmZpZ19vcy5oIHN0YW1wLWggc3RhbXAtZXh0 LWgKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMv aW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDYzMDZiYjZmYzYuLjllYWQxNGI2 NTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMjQwLDcgKzI0MCw3IEBAIHR5 cGVkZWYgc3RydWN0IFZpcnR1YWxUdXBsZVRhYmxlU2xvdAogCVR1cGxlVGFibGVTbG90IGJh c2U7CiAKIAljaGFyCSAgICpkYXRhOwkJCS8qIGRhdGEgZm9yIG1hdGVyaWFsaXplZCBzbG90 cyAqLwotfSBWaXJ0dWFsVHVwbGVUYWJsZVNsb3Q7Cit9IFZpcnR1YWxUdXBsZVRhYmxlU2xv dCBwZ19ub2RlX2F0dHIoYWJzdHJhY3QpOwogCiB0eXBlZGVmIHN0cnVjdCBIZWFwVHVwbGVU YWJsZVNsb3QKIHsKQEAgLTI1MSw3ICsyNTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBIZWFwVHVw bGVUYWJsZVNsb3QKICNkZWZpbmUgRklFTEROT19IRUFQVFVQTEVUQUJMRVNMT1RfT0ZGIDIK IAl1aW50MzIJCW9mZjsJCQkvKiBzYXZlZCBzdGF0ZSBmb3Igc2xvdF9kZWZvcm1faGVhcF90 dXBsZSAqLwogCUhlYXBUdXBsZURhdGEgdHVwZGF0YTsJCS8qIG9wdGlvbmFsIHdvcmtzcGFj ZSBmb3Igc3RvcmluZyB0dXBsZSAqLwotfSBIZWFwVHVwbGVUYWJsZVNsb3Q7Cit9IEhlYXBU dXBsZVRhYmxlU2xvdCBwZ19ub2RlX2F0dHIoYWJzdHJhY3QpOwogCiAvKiBoZWFwIHR1cGxl IHJlc2lkaW5nIGluIGEgYnVmZmVyICovCiB0eXBlZGVmIHN0cnVjdCBCdWZmZXJIZWFwVHVw bGVUYWJsZVNsb3QKQEAgLTI2NSw3ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJI ZWFwVHVwbGVUYWJsZVNsb3QKIAkgKiBzdWNoIGEgY2FzZSwgc2luY2UgcHJlc3VtYWJseSB0 dHNfdHVwbGUgaXMgcG9pbnRpbmcgaW50byB0aGUgYnVmZmVyLikKIAkgKi8KIAlCdWZmZXIJ CWJ1ZmZlcjsJCQkvKiB0dXBsZSdzIGJ1ZmZlciwgb3IgSW52YWxpZEJ1ZmZlciAqLwotfSBC dWZmZXJIZWFwVHVwbGVUYWJsZVNsb3Q7Cit9IEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCBw Z19ub2RlX2F0dHIoYWJzdHJhY3QpOwogCiB0eXBlZGVmIHN0cnVjdCBNaW5pbWFsVHVwbGVU YWJsZVNsb3QKIHsKQEAgLTI4NCw3ICsyODQsNyBAQCB0eXBlZGVmIHN0cnVjdCBNaW5pbWFs VHVwbGVUYWJsZVNsb3QKIAlIZWFwVHVwbGVEYXRhIG1pbmhkcjsJCS8qIHdvcmtzcGFjZSBm b3IgbWluaW1hbC10dXBsZS1vbmx5IGNhc2UgKi8KICNkZWZpbmUgRklFTEROT19NSU5JTUFM VFVQTEVUQUJMRVNMT1RfT0ZGIDQKIAl1aW50MzIJCW9mZjsJCQkvKiBzYXZlZCBzdGF0ZSBm b3Igc2xvdF9kZWZvcm1faGVhcF90dXBsZSAqLwotfSBNaW5pbWFsVHVwbGVUYWJsZVNsb3Q7 Cit9IE1pbmltYWxUdXBsZVRhYmxlU2xvdCBwZ19ub2RlX2F0dHIoYWJzdHJhY3QpOwogCiAv KgogICogVHVwSXNOdWxsIC0tIGlzIGEgVHVwbGVUYWJsZVNsb3QgZW1wdHk/CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlIGIvc3JjL2luY2x1ZGUvbm9kZXMv LmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45OWZi MWQzNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9y ZQpAQCAtMCwwICsxLDIgQEAKKy9ub2RldGFncy5oCisvaGVhZGVyLXN0YW1wCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leHRlbnNpYmxlLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9leHRlbnNpYmxlLmgKaW5kZXggNjI0NGM4ZDk2MS4uOTcwNjgyOGVmNCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXh0ZW5zaWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4dGVuc2libGUuaApAQCAtMzMsNyArMzMsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHRl bnNpYmxlTm9kZQogewogCU5vZGVUYWcJCXR5cGU7CiAJY29uc3QgY2hhciAqZXh0bm9kZW5h bWU7CS8qIGlkZW50aWZpZXIgb2YgRXh0ZW5zaWJsZU5vZGVNZXRob2RzICovCi19IEV4dGVu c2libGVOb2RlOworfSBFeHRlbnNpYmxlTm9kZSBwZ19ub2RlX2F0dHIoY3VzdG9tX2NvcHlf ZXF1YWwsIGN1c3RvbV9yZWFkX3dyaXRlKTsKIAogLyoKICAqIG5vZGVfc2l6ZSBpcyB0aGUg c2l6ZSBvZiBhbiBleHRlbnNpYmxlIG5vZGUgb2YgdGhpcyB0eXBlIGluIGJ5dGVzLgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L25vZGVzLmgKaW5kZXggOTI1NWNlNDY3ZS4uODNhYTZjNTNiZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5o CkBAIC0yNyw2ICsyNyw5IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiB7CiAJVF9JbnZhbGlk ID0gMCwKIAorI2luY2x1ZGUgIm5vZGVzL25vZGV0YWdzLmgiCisjaWZkZWYgT0JTT0xFVEUK KwogCS8qCiAJICogVEFHUyBGT1IgRVhFQ1VUT1IgTk9ERVMgKGV4ZWNub2Rlcy5oKQogCSAq LwpAQCAtNTYxLDggKzU2NCw3MiBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3VwcG9y dFJlcXVlc3RSb3dzLAkJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBv cnRSZXF1ZXN0SW5kZXhDb25kaXRpb24sIC8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICov CiAJVF9TdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljCS8qIGluIG5vZGVzL3N1cHBvcnRu b2Rlcy5oICovCisjZW5kaWYJCQkJCQkJLyogT0JTT0xFVEUgKi8KIH0gTm9kZVRhZzsKIAor LyoKKyAqIHBnX25vZGVfYXR0cigpIC0gVXNlZCBpbiBub2RlIGRlZmluaXRpb25zIHRvIHNl dCBleHRyYSBpbmZvcm1hdGlvbiBmb3IKKyAqIGdlbl9ub2RlX3N1cHBvcnQucGwKKyAqCisg KiBBdHRyaWJ1dGVzIGNhbiBiZSBhdHRhY2hlZCB0byBhIG5vZGUgYXMgYSB3aG9sZSAodGhl IGF0dHJpYnV0ZQorICogc3BlY2lmaWNhdGlvbiBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhl IHN0cnVjdCBvciB0eXBlZGVmLCBqdXN0IGJlZm9yZSB0aGUKKyAqIHNlbWljb2xvbikgb3Ig dG8gYSBzcGVjaWZpYyBmaWVsZCAobXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lKS4g IFRoZQorICogYXJndW1lbnQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1 dGVzLiAgVW5yZWNvZ25pemVkIGF0dHJpYnV0ZXMKKyAqIGNhdXNlIGFuIGVycm9yLgorICoK KyAqIFZhbGlkIG5vZGUgYXR0cmlidXRlczoKKyAqCisgKiAtIGFic3RyYWN0OiBBYnN0cmFj dCB0eXBlcyBhcmUgdHlwZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGJ1dCB0aGF0 CisgKiAgIGNhbiBiZSBzdXBlcnR5cGVzIG9mIG90aGVyIHR5cGVzLiAgV2UgdHJhY2sgdGhl aXIgZmllbGRzLCBzbyB0aGF0CisgKiAgIHN1YnR5cGVzIGNhbiB1c2UgdGhlbSwgYnV0IHdl IGRvbid0IGVtaXQgYSBub2RlIHRhZywgc28geW91IGNhbid0CisgKiAgIGluc3RhbnRpYXRl IHRoZW0uCisgKgorICogLSBjdXN0b21fY29weV9lcXVhbDogSGFzIGN1c3RvbSBpbXBsZW1l bnRhdGlvbnMgaW4gY29weWZ1bmNzLmMgYW5kCisgKiAgIGVxdWFsZnVuY3MuYy4KKyAqCisg KiAtIGN1c3RvbV9yZWFkX3dyaXRlOiBIYXMgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBpbiBv dXRmdW5jcy5jIGFuZAorICogICByZWFkZnVuY3MuYy4KKyAqCisgKiAtIG5vX2NvcHk6IERv ZXMgbm90IHN1cHBvcnQgY29weU9iamVjdCgpIGF0IGFsbC4KKyAqCisgKiAtIG5vX2VxdWFs OiBEb2VzIG5vdCBzdXBwb3J0IGVxdWFsKCkgYXQgYWxsLgorICoKKyAqIC0gbm9fY29weV9l cXVhbDogU2hvcnRoYW5kIGZvciBib3RoIG5vX2NvcHkgYW5kIG5vX2VxdWFsLgorICoKKyAq IC0gbm9fcmVhZDogRG9lcyBub3Qgc3VwcG9ydCBub2RlUmVhZCgpIGF0IGFsbC4KKyAqCisg KiAtIHNwZWNpYWxfcmVhZF93cml0ZTogSGFzIHNwZWNpYWwgdHJlYXRtZW50IGluIG91dE5v ZGUoKSBhbmQgbm9kZVJlYWQoKS4KKyAqCisgKiBOb2RlIHR5cGVzIGNhbiBiZSBzdXBlcnR5 cGVzIG9mIG90aGVyIHR5cGVzIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG1hcmtlZAorICog YWJzdHJhY3Q6IGlmIGEgbm9kZSBzdHJ1Y3QgYXBwZWFycyBhcyB0aGUgZmlyc3QgZmllbGQg b2YgYW5vdGhlciBzdHJ1Y3QKKyAqIHR5cGUsIHRoZW4gaXQgaXMgdGhlIHN1cGVydHlwZSBv ZiB0aGF0IHR5cGUuICBUaGUgbm9fY29weSwgbm9fZXF1YWwsCisgKiBub19jb3B5X2VxdWFs LCBhbmQgbm9fcmVhZCBub2RlIGF0dHJpYnV0ZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJp dGVkCisgKiBmcm9tIHRoZSBzdXBlcnR5cGUuCisgKgorICogVmFsaWQgbm9kZSBmaWVsZCBh dHRyaWJ1dGVzOgorICoKKyAqIC0gYXJyYXlfc2l6ZShPVEhFUkZJRUxEKTogVGhpcyBmaWVs ZCBpcyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSB3aXRoCisgKiAgIHNpemUgaW5k aWNhdGVkIGJ5IHRoZSBtZW50aW9uZWQgb3RoZXIgZmllbGQuICBUaGUgb3RoZXIgZmllbGQg aXMgZWl0aGVyIGEKKyAqICAgc2NhbGFyIG9yIGEgbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUg bGVuZ3RoIG9mIHRoZSBsaXN0IGlzIHVzZWQuCisgKgorICogLSBjb3B5X2FzKFZBTFVFKTog SW4gY29weU9iamVjdCgpLCByZXBsYWNlIHRoZSBmaWVsZCdzIHZhbHVlIHdpdGggVkFMVUUu CisgKgorICogLSBlcXVhbF9pZ25vcmU6IElnbm9yZSB0aGUgZmllbGQgZm9yIGVxdWFsaXR5 LgorICoKKyAqIC0gZXF1YWxfaWdub3JlX2lmX3plcm86IElnbm9yZSB0aGUgZmllbGQgZm9y IGVxdWFsaXR5IGlmIGl0IGlzIHplcm8uCisgKiAgIChPdGhlcndpc2UsIGNvbXBhcmUgbm9y bWFsbHkuKQorICoKKyAqIC0gcmVhZF9hcyhWQUxVRSk6IEluIG5vZGVSZWFkKCksIHJlcGxh Y2UgdGhlIGZpZWxkJ3MgdmFsdWUgd2l0aCBWQUxVRS4KKyAqCisgKiAtIHJlYWRfd3JpdGVf aWdub3JlOiBJZ25vcmUgdGhlIGZpZWxkIGZvciByZWFkL3dyaXRlLiAgVGhpcyBpcyBvbmx5 IGFsbG93ZWQKKyAqICAgaWYgdGhlIG5vZGUgdHlwZSBpcyBtYXJrZWQgbm9fcmVhZCBvciBy ZWFkX2FzKCkgaXMgYWxzbyBzcGVjaWZpZWQuCisgKgorICogLSB3cml0ZV9vbmx5X3JlbGlk cywgd3JpdGVfb25seV9ub25kZWZhdWx0X3BhdGh0YXJnZXQsIHdyaXRlX29ubHlfcmVxX291 dGVyOgorICogICBTcGVjaWFsIGhhbmRsaW5nIGZvciBQYXRoIHN0cnVjdDsgc2VlIHRoZXJl LgorICoKKyAqLworI2RlZmluZSBwZ19ub2RlX2F0dHIoLi4uKQorCiAvKgogICogVGhlIGZp cnN0IGZpZWxkIG9mIGEgbm9kZSBvZiBhbnkgdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIHRo ZSBOb2RlVGFnLgogICogSGVuY2UgdGhlIHR5cGUgb2YgYW55IG5vZGUgY2FuIGJlIGdvdHRl biBieSBjYXN0aW5nIGl0IHRvIE5vZGUuIERlY2xhcmluZwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oCmluZGV4IDVmNmQ2NWI1YzQuLjg0NTFhNTE3NDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKQEAgLTEyMyw4ICsxMjMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnkKIAogCVF1 ZXJ5U291cmNlIHF1ZXJ5U291cmNlOwkvKiB3aGVyZSBkaWQgSSBjb21lIGZyb20/ICovCiAK LQkvKiBxdWVyeSBpZGVudGlmaWVyIChjYW4gYmUgc2V0IGJ5IHBsdWdpbnMpICovCi0JdWlu dDY0CQlxdWVyeUlkOworCS8qCisJICogcXVlcnkgaWRlbnRpZmllciAoY2FuIGJlIHNldCBi eSBwbHVnaW5zKTsgaWdub3JlZCBmb3IgZXF1YWwsIG1pZ2h0IG5vdAorCSAqIGJlIHNldAor CSAqLworCXVpbnQ2NAkJcXVlcnlJZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlLCByZWFk X2FzKDApKTsKIAogCWJvb2wJCWNhblNldFRhZzsJCS8qIGRvIEkgc2V0IHRoZSBjb21tYW5k IHJlc3VsdCB0YWc/ICovCiAKQEAgLTE5OCw3ICsyMDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBR dWVyeQogCSAqLwogCWludAkJCXN0bXRfbG9jYXRpb247CS8qIHN0YXJ0IGxvY2F0aW9uLCBv ciAtMSBpZiB1bmtub3duICovCiAJaW50CQkJc3RtdF9sZW47CQkvKiBsZW5ndGggaW4gYnl0 ZXM7IDAgbWVhbnMgInJlc3Qgb2Ygc3RyaW5nIiAqLwotfSBRdWVyeTsKK30gUXVlcnkJCXBn X25vZGVfYXR0cihjdXN0b21fcmVhZF93cml0ZSk7CiAKIAogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKQEAgLTI5NCw3ICsyOTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBBX0V4cHIKIAlOb2Rl CSAgICpsZXhwcjsJCQkvKiBsZWZ0IGFyZ3VtZW50LCBvciBOVUxMIGlmIG5vbmUgKi8KIAlO b2RlCSAgICpyZXhwcjsJCQkvKiByaWdodCBhcmd1bWVudCwgb3IgTlVMTCBpZiBub25lICov CiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93 biAqLwotfSBBX0V4cHI7Cit9IEFfRXhwcglwZ19ub2RlX2F0dHIoY3VzdG9tX3JlYWRfd3Jp dGUsIG5vX3JlYWQpOwogCiAvKgogICogQV9Db25zdCAtIGEgbGl0ZXJhbCBjb25zdGFudApA QCAtMzE4LDcgKzMyMSw3IEBAIHR5cGVkZWYgc3RydWN0IEFfQ29uc3QKIAl9CQkJdmFsOwog CWJvb2wJCWlzbnVsbDsJCQkvKiBTUUwgTlVMTCBjb25zdGFudCAqLwogCWludAkJCWxvY2F0 aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KLX0gQV9Db25z dDsKK30gQV9Db25zdAlwZ19ub2RlX2F0dHIoY3VzdG9tX2NvcHlfZXF1YWwsIGN1c3RvbV9y ZWFkX3dyaXRlLCBub19yZWFkKTsKIAogLyoKICAqIFR5cGVDYXN0IC0gYSBDQVNUIGV4cHJl c3Npb24KQEAgLTQwMSw3ICs0MDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBGdW5jQ2FsbAogdHlw ZWRlZiBzdHJ1Y3QgQV9TdGFyCiB7CiAJTm9kZVRhZwkJdHlwZTsKLX0gQV9TdGFyOworfSBB X1N0YXIJcGdfbm9kZV9hdHRyKG5vX3JlYWQpOwogCiAvKgogICogQV9JbmRpY2VzIC0gYXJy YXkgc3Vic2NyaXB0IG9yIHNsaWNlIGJvdW5kcyAoW2lkeF0gb3IgW2xpZHg6dWlkeF0pCkBA IC0xMTcxLDcgKzExNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBSYW5nZVRibEVudHJ5CiAJQml0 bWFwc2V0ICAqdXBkYXRlZENvbHM7CS8qIGNvbHVtbnMgbmVlZGluZyBVUERBVEUgcGVybWlz c2lvbiAqLwogCUJpdG1hcHNldCAgKmV4dHJhVXBkYXRlZENvbHM7CS8qIGdlbmVyYXRlZCBj b2x1bW5zIGJlaW5nIHVwZGF0ZWQgKi8KIAlMaXN0CSAgICpzZWN1cml0eVF1YWxzOwkvKiBz ZWN1cml0eSBiYXJyaWVyIHF1YWxzIHRvIGFwcGx5LCBpZiBhbnkgKi8KLX0gUmFuZ2VUYmxF bnRyeTsKK30gUmFuZ2VUYmxFbnRyeSBwZ19ub2RlX2F0dHIoY3VzdG9tX3JlYWRfd3JpdGUp OwogCiAvKgogICogUmFuZ2VUYmxGdW5jdGlvbiAtCkBAIC0yNjU4LDcgKzI2NjEsNyBAQCB0 eXBlZGVmIHN0cnVjdCBDb25zdHJhaW50CiAJLyogRmllbGRzIHVzZWQgZm9yIGNvbnN0cmFp bnRzIHRoYXQgYWxsb3cgYSBOT1QgVkFMSUQgc3BlY2lmaWNhdGlvbiAqLwogCWJvb2wJCXNr aXBfdmFsaWRhdGlvbjsJLyogc2tpcCB2YWxpZGF0aW9uIG9mIGV4aXN0aW5nIHJvd3M/ICov CiAJYm9vbAkJaW5pdGlhbGx5X3ZhbGlkOwkvKiBtYXJrIHRoZSBuZXcgY29uc3RyYWludCBh cyB2YWxpZD8gKi8KLX0gQ29uc3RyYWludDsKK30gQ29uc3RyYWludCBwZ19ub2RlX2F0dHIo Y3VzdG9tX3JlYWRfd3JpdGUsIG5vX3JlYWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgkJQ3JlYXRlL0Ryb3AgVGFibGUgU3BhY2UgU3RhdGVtZW50cwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaAppbmRleCBhNDIzMzNjYjkyLi42MTkzMTI2ZDIwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaApAQCAtMyw2ICszLDggQEAKICAqIHBhdGhub2Rlcy5oCiAgKgkgIERlZmlu aXRpb25zIGZvciBwbGFubmVyJ3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBlc3BlY2lh bGx5IFBhdGhzLgogICoKKyAqIFdlIGRvbid0IHN1cHBvcnQgY29weWluZyBSZWxPcHRJbmZv LCBJbmRleE9wdEluZm8sIG9yIFBhdGggbm9kZXMuCisgKiBUaGVyZSBhcmUgc29tZSBzdWJz aWRpYXJ5IHN0cnVjdHMgdGhhdCBhcmUgdXNlZnVsIHRvIGNvcHksIHRob3VnaC4KICAqCiAg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCkBAIC04NSw2ICs4Nyw5IEBA IHR5cGVkZWYgZW51bSBVcHBlclJlbGF0aW9uS2luZAogICogUGxhbm5lckdsb2JhbCBob2xk cyBzdGF0ZSBmb3IgYW4gZW50aXJlIHBsYW5uZXIgaW52b2NhdGlvbjsgdGhpcyBzdGF0ZQog ICogaXMgc2hhcmVkIGFjcm9zcyBhbGwgbGV2ZWxzIG9mIHN1Yi1RdWVyaWVzIHRoYXQgZXhp c3QgaW4gdGhlIGNvbW1hbmQgYmVpbmcKICAqIHBsYW5uZWQuCisgKgorICogTm90IGFsbCBm aWVsZHMgYXJlIHByaW50ZWQuICAoSW4gc29tZSBjYXNlcywgdGhlcmUgaXMgbm8gcHJpbnQg c3VwcG9ydCBmb3IKKyAqIHRoZSBmaWVsZCB0eXBlLikKICAqLS0tLS0tLS0tLQogICovCiB0 eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCkBAIC05MiwxMyArOTcsMTMgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCU5vZGVUYWcJCXR5cGU7CiAKIAkvKiBQYXJhbSB2 YWx1ZXMgcHJvdmlkZWQgdG8gcGxhbm5lcigpICovCi0JUGFyYW1MaXN0SW5mbyBib3VuZFBh cmFtczsKKwlQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zIHBnX25vZGVfYXR0cihyZWFkX3dy aXRlX2lnbm9yZSk7CiAKIAkvKiBQbGFucyBmb3IgU3ViUGxhbiBub2RlcyAqLwogCUxpc3QJ ICAgKnN1YnBsYW5zOwogCiAJLyogUGxhbm5lckluZm9zIGZvciBTdWJQbGFuIG5vZGVzICov Ci0JTGlzdAkgICAqc3Vicm9vdHM7CisJTGlzdAkgICAqc3Vicm9vdHMgcGdfbm9kZV9hdHRy KHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIGluZGljZXMgb2Ygc3VicGxhbnMgdGhhdCBy ZXF1aXJlIFJFV0lORCAqLwogCUJpdG1hcHNldCAgKnJld2luZFBsYW5JRHM7CkBAIC0xNDks OCArMTU0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCWNoYXIJCW1heFBh cmFsbGVsSGF6YXJkOwogCiAJLyogcGFydGl0aW9uIGRlc2NyaXB0b3JzICovCi0JUGFydGl0 aW9uRGlyZWN0b3J5IHBhcnRpdGlvbl9kaXJlY3Rvcnk7Ci19IFBsYW5uZXJHbG9iYWw7CisJ UGFydGl0aW9uRGlyZWN0b3J5IHBhcnRpdGlvbl9kaXJlY3RvcnkgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKK30gUGxhbm5lckdsb2JhbCBwZ19ub2RlX2F0dHIobm9fY29w eV9lcXVhbCwgbm9fcmVhZCk7CiAKIC8qIG1hY3JvIGZvciBmZXRjaGluZyB0aGUgUGxhbiBh c3NvY2lhdGVkIHdpdGggYSBTdWJQbGFuIG5vZGUgKi8KICNkZWZpbmUgcGxhbm5lcl9zdWJw bGFuX2dldF9wbGFuKHJvb3QsIHN1YnBsYW4pIFwKQEAgLTE2OCw2ICsxNzMsOSBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAgKgogICogRm9yIHJlYXNvbnMgZXhwbGFpbmVk IGluIG9wdGltaXplci9vcHRpbWl6ZXIuaCwgd2UgZGVmaW5lIHRoZSB0eXBlZGVmCiAgKiBl aXRoZXIgaGVyZSBvciBpbiB0aGF0IGhlYWRlciwgd2hpY2hldmVyIGlzIHJlYWQgZmlyc3Qu CisgKgorICogTm90IGFsbCBmaWVsZHMgYXJlIHByaW50ZWQuICAoSW4gc29tZSBjYXNlcywg dGhlcmUgaXMgbm8gcHJpbnQgc3VwcG9ydCBmb3IKKyAqIHRoZSBmaWVsZCB0eXBlLikKICAq LS0tLS0tLS0tLQogICovCiAjaWZuZGVmIEhBVkVfUExBTk5FUklORk9fVFlQRURFRgpAQCAt MTg5LDcgKzE5Nyw3IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCUluZGV4CQlxdWVyeV9sZXZl bDsKIAogCS8qIE5VTEwgYXQgb3V0ZXJtb3N0IFF1ZXJ5ICovCi0JUGxhbm5lckluZm8gKnBh cmVudF9yb290OworCVBsYW5uZXJJbmZvICpwYXJlbnRfcm9vdCBwZ19ub2RlX2F0dHIocmVh ZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBwbGFuX3BhcmFtcyBjb250YWlucyB0aGUg ZXhwcmVzc2lvbnMgdGhhdCB0aGlzIHF1ZXJ5IGxldmVsIG5lZWRzIHRvCkBAIC0yMDgsMTYg KzIxNiwxNiBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBkb2VzIG5vdCBjb3JyZXNwb25k IHRvIGEgYmFzZSByZWxhdGlvbiwgc3VjaCBhcyBhIGpvaW4gUlRFIG9yIGFuCiAJICogdW5y ZWZlcmVuY2VkIHZpZXcgUlRFOyBvciBpZiB0aGUgUmVsT3B0SW5mbyBoYXNuJ3QgYmVlbiBt YWRlIHlldC4KIAkgKi8KLQlzdHJ1Y3QgUmVsT3B0SW5mbyAqKnNpbXBsZV9yZWxfYXJyYXk7 CisJc3RydWN0IFJlbE9wdEluZm8gKipzaW1wbGVfcmVsX2FycmF5IHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogYWxsb2NhdGVkIHNpemUgb2YgYXJyYXkgKi8KLQlp bnQJCQlzaW1wbGVfcmVsX2FycmF5X3NpemU7CisJaW50CQkJc2ltcGxlX3JlbF9hcnJheV9z aXplIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIHNpbXBs ZV9ydGVfYXJyYXkgaXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHNpbXBsZV9yZWxfYXJyYXkgYW5k IGhvbGRzCiAJICogcG9pbnRlcnMgdG8gdGhlIGFzc29jaWF0ZWQgcmFuZ2V0YWJsZSBlbnRy aWVzLiAgVXNpbmcgdGhpcyBpcyBhIHNoYWRlCiAJICogZmFzdGVyIHRoYW4gdXNpbmcgcnRf ZmV0Y2goKSwgbW9zdGx5IGR1ZSB0byBmZXdlciBpbmRpcmVjdGlvbnMuCiAJICovCi0JUmFu Z2VUYmxFbnRyeSAqKnNpbXBsZV9ydGVfYXJyYXk7CisJUmFuZ2VUYmxFbnRyeSAqKnNpbXBs ZV9ydGVfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJ ICogYXBwZW5kX3JlbF9hcnJheSBpcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGFib3ZlIGFy cmF5cywgYW5kIGhvbGRzCkBAIC0yMjUsNyArMjMzLDcgQEAgc3RydWN0IFBsYW5uZXJJbmZv CiAJICogY2hpbGRfcmVsaWQsIG9yIE5VTEwgaWYgdGhlIHJlbCBpcyBub3QgYW4gYXBwZW5k cmVsIGNoaWxkLiAgVGhlIGFycmF5CiAJICogaXRzZWxmIGlzIG5vdCBhbGxvY2F0ZWQgaWYg YXBwZW5kX3JlbF9saXN0IGlzIGVtcHR5LgogCSAqLwotCXN0cnVjdCBBcHBlbmRSZWxJbmZv ICoqYXBwZW5kX3JlbF9hcnJheTsKKwlzdHJ1Y3QgQXBwZW5kUmVsSW5mbyAqKmFwcGVuZF9y ZWxfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICog YWxsX2Jhc2VyZWxzIGlzIGEgUmVsaWRzIHNldCBvZiBhbGwgYmFzZSByZWxpZHMgKGJ1dCBu b3QgIm90aGVyIgpAQCAtMjUzLDcgKzI2MSw3IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAq IEdFUU8uCiAJICovCiAJTGlzdAkgICAqam9pbl9yZWxfbGlzdDsKLQlzdHJ1Y3QgSFRBQiAq am9pbl9yZWxfaGFzaDsKKwlzdHJ1Y3QgSFRBQiAqam9pbl9yZWxfaGFzaCBwZ19ub2RlX2F0 dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEgZHluYW1p Yy1wcm9ncmFtbWluZy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10KQEAg LTI2Myw3ICsyNzEsNyBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBqb2luX3JlbF9sZXZl bCBpcyBOVUxMIGlmIG5vdCBpbiB1c2UuCiAJICovCiAJLyogbGlzdHMgb2Ygam9pbi1yZWxh dGlvbiBSZWxPcHRJbmZvcyAqLwotCUxpc3QJICAqKmpvaW5fcmVsX2xldmVsOworCUxpc3QJ ICAqKmpvaW5fcmVsX2xldmVsIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJ LyogaW5kZXggb2YgbGlzdCBiZWluZyBleHRlbmRlZCAqLwogCWludAkJCWpvaW5fY3VyX2xl dmVsOwogCkBAIC0zNTUsMTkgKzM2MywxOSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAlMaXN0 CSAgICpzb3J0X3BhdGhrZXlzOwogCiAJLyogQ2Fub25pY2FsaXNlZCBwYXJ0aXRpb24gc2No ZW1lcyB1c2VkIGluIHRoZSBxdWVyeS4gKi8KLQlMaXN0CSAgICpwYXJ0X3NjaGVtZXM7CisJ TGlzdAkgICAqcGFydF9zY2hlbWVzIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7 CiAKIAkvKiBSZWxPcHRJbmZvcyB3ZSBhcmUgbm93IHRyeWluZyB0byBqb2luICovCi0JTGlz dAkgICAqaW5pdGlhbF9yZWxzOworCUxpc3QJICAgKmluaXRpYWxfcmVscyBwZ19ub2RlX2F0 dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBVcHBlci1yZWwgUmVsT3B0SW5m b3MuIFVzZSBmZXRjaF91cHBlcl9yZWwoKSB0byBnZXQgYW55IHBhcnRpY3VsYXIKIAkgKiB1 cHBlciByZWwuCiAJICovCi0JTGlzdAkgICAqdXBwZXJfcmVsc1tVUFBFUlJFTF9GSU5BTCAr IDFdOworCUxpc3QJICAgKnVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2Rl X2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyogUmVzdWx0IHRsaXN0cyBjaG9zZW4g YnkgZ3JvdXBpbmdfcGxhbm5lciBmb3IgdXBwZXItc3RhZ2UgcHJvY2Vzc2luZyAqLwotCXN0 cnVjdCBQYXRoVGFyZ2V0ICp1cHBlcl90YXJnZXRzW1VQUEVSUkVMX0ZJTkFMICsgMV07CisJ c3RydWN0IFBhdGhUYXJnZXQgKnVwcGVyX3RhcmdldHNbVVBQRVJSRUxfRklOQUwgKyAxXSBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBUaGUgZnVsbHkt cHJvY2Vzc2VkIHRhcmdldGxpc3QgaXMga2VwdCBoZXJlLiAgSXQgZGlmZmVycyBmcm9tCkBA IC0zOTIsMTIgKzQwMCwxMiBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBGaWVsZHMgZmls bGVkIGR1cmluZyBjcmVhdGVfcGxhbigpIGZvciB1c2UgaW4gc2V0cmVmcy5jCiAJICovCiAJ LyogZm9yIEdyb3VwaW5nRnVuYyBmaXh1cCAqLwotCUF0dHJOdW1iZXIgKmdyb3VwaW5nX21h cDsKKwlBdHRyTnVtYmVyICpncm91cGluZ19tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo dXBkYXRlX2NvbG5vcyksIHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBMaXN0IG9mIE1pbk1h eEFnZ0luZm9zICovCiAJTGlzdAkgICAqbWlubWF4X2FnZ3M7CiAKIAkvKiBjb250ZXh0IGhv bGRpbmcgUGxhbm5lckluZm8gKi8KLQlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0OworCU1l bW9yeUNvbnRleHQgcGxhbm5lcl9jeHQgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3Jl KTsKIAogCS8qICMgb2YgcGFnZXMgaW4gYWxsIG5vbi1kdW1teSB0YWJsZXMgb2YgcXVlcnkg Ki8KIAlDYXJkaW5hbGl0eSB0b3RhbF90YWJsZV9wYWdlczsKQEAgLTQzMCwxNSArNDM4LDE1 IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAqIEluZm9ybWF0aW9uIGFib3V0IGFnZ3JlZ2F0 ZXMuIEZpbGxlZCBieSBwcmVwcm9jZXNzX2FnZ3JlZnMoKS4KIAkgKi8KIAkvKiBBZ2dJbmZv IHN0cnVjdHMgKi8KLQlMaXN0CSAgICphZ2dpbmZvczsKKwlMaXN0CSAgICphZ2dpbmZvcyBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIEFnZ1RyYW5zSW5mbyBzdHJ1 Y3RzICovCi0JTGlzdAkgICAqYWdndHJhbnNpbmZvczsKKwlMaXN0CSAgICphZ2d0cmFuc2lu Zm9zIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogbnVtYmVyIHcvIERJ U1RJTkNUL09SREVSIEJZL1dJVEhJTiBHUk9VUCAqLwotCWludAkJCW51bU9yZGVyZWRBZ2dz OworCWludAkJCW51bU9yZGVyZWRBZ2dzIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9y ZSk7CiAJLyogZG9lcyBhbnkgYWdnIG5vdCBzdXBwb3J0IHBhcnRpYWwgbW9kZT8gKi8KLQli b29sCQloYXNOb25QYXJ0aWFsQWdnczsKKwlib29sCQloYXNOb25QYXJ0aWFsQWdncyBwZ19u b2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIGlzIGFueSBwYXJ0aWFsIGFnZyBu b24tc2VyaWFsaXphYmxlPyAqLwotCWJvb2wJCWhhc05vblNlcmlhbEFnZ3M7CisJYm9vbAkJ aGFzTm9uU2VyaWFsQWdncyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJ LyoKIAkgKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgb25seSB3aGVuIGhhc1JlY3Vyc2lvbiBp cyB0cnVlOgpAQCAtNDQ2LDcgKzQ1NCw3IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8qIFBB UkFNX0VYRUMgSUQgZm9yIHRoZSB3b3JrIHRhYmxlICovCiAJaW50CQkJd3RfcGFyYW1faWQ7 CiAJLyogYSBwYXRoIGZvciBub24tcmVjdXJzaXZlIHRlcm0gKi8KLQlzdHJ1Y3QgUGF0aCAq bm9uX3JlY3Vyc2l2ZV9wYXRoOworCXN0cnVjdCBQYXRoICpub25fcmVjdXJzaXZlX3BhdGgg cGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICogVGhlc2UgZmll bGRzIGFyZSB3b3Jrc3BhY2UgZm9yIGNyZWF0ZXBsYW4uYwpAQCAtNDYwLDE1ICs0NjgsMTUg QEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICogVGhlc2UgZmllbGRzIGFyZSB3b3Jrc3BhY2Ug Zm9yIHNldHJlZnMuYy4gIEVhY2ggaXMgYW4gYXJyYXkKIAkgKiBjb3JyZXNwb25kaW5nIHRv IGdsb2ItPnN1YnBsYW5zLgogCSAqLwotCWJvb2wJICAgKmlzQWx0U3VicGxhbjsKLQlib29s CSAgICppc1VzZWRTdWJwbGFuOworCWJvb2wJICAgKmlzQWx0U3VicGxhbiBwZ19ub2RlX2F0 dHIocmVhZF93cml0ZV9pZ25vcmUpOworCWJvb2wJICAgKmlzVXNlZFN1YnBsYW4gcGdfbm9k ZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIG9wdGlvbmFsIHByaXZhdGUgZGF0 YSBmb3Igam9pbl9zZWFyY2hfaG9vaywgZS5nLiwgR0VRTyAqLwotCXZvaWQJICAgKmpvaW5f c2VhcmNoX3ByaXZhdGU7CisJdm9pZAkgICAqam9pbl9zZWFyY2hfcHJpdmF0ZSBwZ19ub2Rl X2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyogRG9lcyB0aGlzIHF1ZXJ5IG1vZGlm eSBhbnkgcGFydGl0aW9uIGtleSBjb2x1bW5zPyAqLwogCWJvb2wJCXBhcnRDb2xzVXBkYXRl ZDsKLX07Cit9CQkJcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAK IC8qCkBAIC03MjEsNiArNzI5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uU2NoZW1l RGF0YSAqUGFydGl0aW9uU2NoZW1lOwogICogRnVydGhlcm1vcmUsIEZVTEwgSk9JTnMgYWRk IGV4dHJhIG51bGxhYmxlX3BhcnRleHBycyBleHByZXNzaW9ucwogICogY29ycmVzcG9uZGlu ZyB0byBDT0FMRVNDRSBleHByZXNzaW9ucyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgam9pbiBj b2x1bW5zLAogICogdG8gc2ltcGxpZnkgbWF0Y2hpbmcgam9pbiBjbGF1c2VzIHRvIHRob3Nl IGxpc3RzLgorICoKKyAqIE5vdCBhbGwgZmllbGRzIGFyZSBwcmludGVkLiAgKEluIHNvbWUg Y2FzZXMsIHRoZXJlIGlzIG5vIHByaW50IHN1cHBvcnQgZm9yCisgKiB0aGUgZmllbGQgdHlw ZS4pCiAgKi0tLS0tLS0tLS0KICAqLwogCkBAIC04MjksOSArODQwLDkgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVsT3B0SW5mbwogCS8qIGxhcmdlc3QgYXR0cm5vIG9mIHJlbCAqLwogCUF0dHJO dW1iZXIJbWF4X2F0dHI7CiAJLyogYXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0 dHJdICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsKKwlSZWxpZHMJICAgKmF0dHJfbmVl ZGVkIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogYXJyYXkgaW5kZXhl ZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCi0JaW50MzIJICAgKmF0dHJfd2lkdGhzOwor CWludDMyCSAgICphdHRyX3dpZHRocyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OwogCS8qIExBVEVSQUwgVmFycyBhbmQgUEhWcyByZWZlcmVuY2VkIGJ5IHJlbCAqLwogCUxp c3QJICAgKmxhdGVyYWxfdmFyczsKIAkvKiByZWxzIHRoYXQgcmVmZXJlbmNlIG1lIGxhdGVy YWxseSAqLwpAQCAtODY2LDE2ICs4NzcsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5m bwogCS8qIGpvaW4gaXMgb25seSB2YWxpZCBmb3IgY3VycmVudCB1c2VyICovCiAJYm9vbAkJ dXNlcmlkaXNjdXJyZW50OwogCS8qIHVzZSAic3RydWN0IEZkd1JvdXRpbmUiIHRvIGF2b2lk IGluY2x1ZGluZyBmZHdhcGkuaCBoZXJlICovCi0Jc3RydWN0IEZkd1JvdXRpbmUgKmZkd3Jv dXRpbmU7Ci0Jdm9pZAkgICAqZmR3X3ByaXZhdGU7CisJc3RydWN0IEZkd1JvdXRpbmUgKmZk d3JvdXRpbmUgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKKwl2b2lkCSAgICpm ZHdfcHJpdmF0ZSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkg KiBjYWNoZSBzcGFjZSBmb3IgcmVtZW1iZXJpbmcgaWYgd2UgaGF2ZSBwcm92ZW4gdGhpcyBy ZWxhdGlvbiB1bmlxdWUKKwkgKgorCSAqIGNhbid0IHByaW50IHVuaXF1ZV9mb3JfcmVscy9u b25fdW5pcXVlX2Zvcl9yZWxzOyBCTVNlcyBhcmVuJ3QgTm9kZXMKIAkgKi8KIAkvKiBrbm93 biB1bmlxdWUgZm9yIHRoZXNlIG90aGVyIHJlbGlkIHNldChzKSAqLwotCUxpc3QJICAgKnVu aXF1ZV9mb3JfcmVsczsKKwlMaXN0CSAgICp1bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRy KHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBrbm93biBub3QgdW5pcXVlIGZvciB0aGVzZSBz ZXQocykgKi8KLQlMaXN0CSAgICpub25fdW5pcXVlX2Zvcl9yZWxzOworCUxpc3QJICAgKm5v bl91bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAog CS8qCiAJICogdXNlZCBieSB2YXJpb3VzIHNjYW5zIGFuZCBqb2luczoKQEAgLTkwMywyNCAr OTE2LDI0IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAkgKiB1c2VkIGZvciBwYXJ0 aXRpb25lZCByZWxhdGlvbnM6CiAJICovCiAJLyogUGFydGl0aW9uaW5nIHNjaGVtZSAqLwot CVBhcnRpdGlvblNjaGVtZSBwYXJ0X3NjaGVtZTsKKwlQYXJ0aXRpb25TY2hlbWUgcGFydF9z Y2hlbWUgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qCiAJICogTnVt YmVyIG9mIHBhcnRpdGlvbnM7IC0xIGlmIG5vdCB5ZXQgc2V0OyBpbiBjYXNlIG9mIGEgam9p biByZWxhdGlvbiAwCiAJICogbWVhbnMgaXQncyBjb25zaWRlcmVkIHVucGFydGl0aW9uZWQK IAkgKi8KLQlpbnQJCQlucGFydHM7CisJaW50CQkJbnBhcnRzIHBnX25vZGVfYXR0cihyZWFk X3dyaXRlX2lnbm9yZSk7CiAJLyogUGFydGl0aW9uIGJvdW5kcyAqLwotCXN0cnVjdCBQYXJ0 aXRpb25Cb3VuZEluZm9EYXRhICpib3VuZGluZm87CisJc3RydWN0IFBhcnRpdGlvbkJvdW5k SW5mb0RhdGEgKmJvdW5kaW5mbyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwog CS8qIFRydWUgaWYgcGFydGl0aW9uIGJvdW5kcyB3ZXJlIGNyZWF0ZWQgYnkgcGFydGl0aW9u X2JvdW5kc19tZXJnZSgpICovCiAJYm9vbAkJcGFydGJvdW5kc19tZXJnZWQ7CiAJLyogUGFy dGl0aW9uIGNvbnN0cmFpbnQsIGlmIG5vdCB0aGUgcm9vdCAqLwotCUxpc3QJICAgKnBhcnRp dGlvbl9xdWFsOworCUxpc3QJICAgKnBhcnRpdGlvbl9xdWFsIHBnX25vZGVfYXR0cihyZWFk X3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIEFycmF5IG9mIFJlbE9wdEluZm9zIG9mIHBh cnRpdGlvbnMsIHN0b3JlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyBib3VuZHMKIAkgKi8KLQlz dHJ1Y3QgUmVsT3B0SW5mbyAqKnBhcnRfcmVsczsKKwlzdHJ1Y3QgUmVsT3B0SW5mbyAqKnBh cnRfcmVscyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBC aXRtYXAgd2l0aCBtZW1iZXJzIGFjdGluZyBhcyBpbmRleGVzIGludG8gdGhlIHBhcnRfcmVs c1tdIGFycmF5IHRvCkBAIC05MzAsMTAgKzk0MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxP cHRJbmZvCiAJLyogUmVsaWRzIHNldCBvZiBhbGwgcGFydGl0aW9uIHJlbGlkcyAqLwogCVJl bGlkcwkJYWxsX3BhcnRyZWxzOwogCS8qIE5vbi1udWxsYWJsZSBwYXJ0aXRpb24ga2V5IGV4 cHJlc3Npb25zICovCi0JTGlzdAkgICoqcGFydGV4cHJzOworCUxpc3QJICAqKnBhcnRleHBy cyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIE51bGxhYmxlIHBhcnRp dGlvbiBrZXkgZXhwcmVzc2lvbnMgKi8KLQlMaXN0CSAgKipudWxsYWJsZV9wYXJ0ZXhwcnM7 Ci19IFJlbE9wdEluZm87CisJTGlzdAkgICoqbnVsbGFibGVfcGFydGV4cHJzIHBnX25vZGVf YXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Cit9IFJlbE9wdEluZm8gcGdfbm9kZV9hdHRyKG5v X2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAvKgogICogSXMgZ2l2ZW4gcmVsYXRpb24gcGFy dGl0aW9uZWQ/CkBAIC05OTksOCArMTAxMiw4IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAlP aWQJCQlpbmRleG9pZDsKIAkvKiB0YWJsZXNwYWNlIG9mIGluZGV4IChub3QgdGFibGUpICov CiAJT2lkCQkJcmVsdGFibGVzcGFjZTsKLQkvKiBiYWNrLWxpbmsgdG8gaW5kZXgncyB0YWJs ZSAqLwotCVJlbE9wdEluZm8gKnJlbDsKKwkvKiBiYWNrLWxpbmsgdG8gaW5kZXgncyB0YWJs ZTsgZG9uJ3QgcHJpbnQsIGVsc2UgaW5maW5pdGUgcmVjdXJzaW9uICovCisJUmVsT3B0SW5m byAqcmVsIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIGlu ZGV4LXNpemUgc3RhdGlzdGljcyAoZnJvbSBwZ19jbGFzcyBhbmQgZWxzZXdoZXJlKQpAQCAt MTAyMCwzMSArMTAzMywzOSBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogbnVtYmVyIG9m IGtleSBjb2x1bW5zIGluIGluZGV4ICovCiAJaW50CQkJbmtleWNvbHVtbnM7CiAKKwkvKgor CSAqIGFycmF5IGZpZWxkcyBhcmVuJ3QgcmVhbGx5IHdvcnRoIHRoZSB0cm91YmxlIHRvIHBy aW50CisJICovCisKIAkvKgogCSAqIGNvbHVtbiBudW1iZXJzIG9mIGluZGV4J3MgYXR0cmli dXRlcyBib3RoIGtleSBhbmQgaW5jbHVkZWQgY29sdW1ucywgb3IKIAkgKiAwCiAJICovCi0J aW50CQkgICAqaW5kZXhrZXlzOworCWludAkJICAgKmluZGV4a2V5cyBwZ19ub2RlX2F0dHIo cmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIE9JRHMgb2YgY29sbGF0aW9ucyBvZiBpbmRleCBj b2x1bW5zICovCi0JT2lkCQkgICAqaW5kZXhjb2xsYXRpb25zOworCU9pZAkJICAgKmluZGV4 Y29sbGF0aW9ucyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIE9JRHMg b2Ygb3BlcmF0b3IgZmFtaWxpZXMgZm9yIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpvcGZhbWls eTsKKwlPaWQJCSAgICpvcGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OwogCS8qIE9JRHMgb2Ygb3BjbGFzcyBkZWNsYXJlZCBpbnB1dCBkYXRhIHR5cGVzICovCi0J T2lkCQkgICAqb3BjaW50eXBlOworCU9pZAkJICAgKm9wY2ludHlwZSBwZ19ub2RlX2F0dHIo cmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcywgaWYg b3JkZXJhYmxlICovCi0JT2lkCQkgICAqc29ydG9wZmFtaWx5OworCU9pZAkJICAgKnNvcnRv cGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIGlzIHNvcnQg b3JkZXIgZGVzY2VuZGluZz8gKi8KLQlib29sCSAgICpyZXZlcnNlX3NvcnQ7CisJYm9vbAkg ICAqcmV2ZXJzZV9zb3J0IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyog ZG8gTlVMTHMgY29tZSBmaXJzdCBpbiB0aGUgc29ydCBvcmRlcj8gKi8KLQlib29sCSAgICpu dWxsc19maXJzdDsKKwlib29sCSAgICpudWxsc19maXJzdCBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwogCS8qIG9wY2xhc3Mtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY29sdW1u cyAqLwotCWJ5dGVhCSAgKipvcGNsYXNzb3B0aW9uczsKKwlieXRlYQkgICoqb3BjbGFzc29w dGlvbnMgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiB3aGljaCBpbmRl eCBjb2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbiBpbmRleC1vbmx5IHNjYW4/ICovCi0JYm9v bAkgICAqY2FucmV0dXJuOworCWJvb2wJICAgKmNhbnJldHVybiBwZ19ub2RlX2F0dHIocmVh ZF93cml0ZV9pZ25vcmUpOwogCS8qIE9JRCBvZiB0aGUgYWNjZXNzIG1ldGhvZCAoaW4gcGdf YW0pICovCiAJT2lkCQkJcmVsYW07Ci0JLyogZXhwcmVzc2lvbnMgZm9yIG5vbi1zaW1wbGUg aW5kZXggY29sdW1ucyAqLwotCUxpc3QJICAgKmluZGV4cHJzOworCisJLyoKKwkgKiBleHBy ZXNzaW9ucyBmb3Igbm9uLXNpbXBsZSBpbmRleCBjb2x1bW5zOyByZWR1bmRhbnQgdG8gcHJp bnQgc2luY2Ugd2UKKwkgKiBwcmludCBpbmRleHRsaXN0CisJICovCisJTGlzdAkgICAqaW5k ZXhwcnMgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBwcmVkaWNhdGUg aWYgYSBwYXJ0aWFsIGluZGV4LCBlbHNlIE5JTCAqLwogCUxpc3QJICAgKmluZHByZWQ7CiAK QEAgLTEwNzEsMjAgKzEwOTIsMjAgQEAgc3RydWN0IEluZGV4T3B0SW5mbwogCSAqIFJlbWFp bmluZyBmaWVsZHMgYXJlIGNvcGllZCBmcm9tIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QK IAkgKiAoSW5kZXhBbVJvdXRpbmUpCiAJICovCi0JYm9vbAkJYW1jYW5vcmRlcmJ5b3A7Ci0J Ym9vbAkJYW1vcHRpb25hbGtleTsKLQlib29sCQlhbXNlYXJjaGFycmF5OwotCWJvb2wJCWFt c2VhcmNobnVsbHM7CisJYm9vbAkJYW1jYW5vcmRlcmJ5b3AgcGdfbm9kZV9hdHRyKHJlYWRf d3JpdGVfaWdub3JlKTsKKwlib29sCQlhbW9wdGlvbmFsa2V5IHBnX25vZGVfYXR0cihyZWFk X3dyaXRlX2lnbm9yZSk7CisJYm9vbAkJYW1zZWFyY2hhcnJheSBwZ19ub2RlX2F0dHIocmVh ZF93cml0ZV9pZ25vcmUpOworCWJvb2wJCWFtc2VhcmNobnVsbHMgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZh Y2U/ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwlib29sCQlhbWhhc2dldHR1cGxlIHBn X25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0 Yml0bWFwIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhhc2dldGJpdG1hcDsKLQlib29sCQlh bWNhbnBhcmFsbGVsOworCWJvb2wJCWFtaGFzZ2V0Yml0bWFwIHBnX25vZGVfYXR0cihyZWFk X3dyaXRlX2lnbm9yZSk7CisJYm9vbAkJYW1jYW5wYXJhbGxlbCBwZ19ub2RlX2F0dHIocmVh ZF93cml0ZV9pZ25vcmUpOwogCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNl PyAqLwotCWJvb2wJCWFtY2FubWFya3BvczsKKwlib29sCQlhbWNhbm1hcmtwb3MgcGdfbm9k ZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFt YXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KIAl2 b2lkCQkoKmFtY29zdGVzdGltYXRlKSAoKTsJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwot fTsKK30JCQlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCk7CiAKIC8qCiAg KiBGb3JlaWduS2V5T3B0SW5mbwpAQCAtMTEwOSwxMSArMTEzMCwxMSBAQCB0eXBlZGVmIHN0 cnVjdCBGb3JlaWduS2V5T3B0SW5mbwogCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBm b3JlaWduIGtleSAqLwogCWludAkJCW5rZXlzOwogCS8qIGNvbHMgaW4gcmVmZXJlbmNpbmcg dGFibGUgKi8KLQlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU107CisJQXR0ck51 bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5r ZXlzKSk7CiAJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCi0JQXR0ck51bWJlcglj b25ma2V5W0lOREVYX01BWF9LRVlTXTsKKwlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFY X0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7CiAJLyogUEsgPSBGSyBv cGVyYXRvciBPSURzICovCi0JT2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXTsKKwlP aWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG5rZXlzKSk7CiAKIAkvKgogCSAqIERlcml2ZWQgaW5mbyBhYm91dCB3aGV0aGVyIEZLJ3Mg ZXF1YWxpdHkgY29uZGl0aW9ucyBtYXRjaCB0aGUgcXVlcnk6CkBAIC0xMTMzLDcgKzExNTQs NyBAQCB0eXBlZGVmIHN0cnVjdCBGb3JlaWduS2V5T3B0SW5mbwogCXN0cnVjdCBFcXVpdmFs ZW5jZU1lbWJlciAqZmtfZWNsYXNzX21lbWJlcltJTkRFWF9NQVhfS0VZU107CiAJLyogTGlz dCBvZiBub24tRUMgUmVzdHJpY3RJbmZvcyBtYXRjaGluZyBlYWNoIGNvbHVtbidzIGNvbmRp dGlvbiAqLwogCUxpc3QJICAgKnJpbmZvc1tJTkRFWF9NQVhfS0VZU107Ci19IEZvcmVpZ25L ZXlPcHRJbmZvOworfSBGb3JlaWduS2V5T3B0SW5mbyBwZ19ub2RlX2F0dHIoY3VzdG9tX3Jl YWRfd3JpdGUsIG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAvKgogICogU3RhdGlzdGlj RXh0SW5mbwpAQCAtMTE1MCwxMCArMTE3MSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0aXN0 aWNFeHRJbmZvCiAJT2lkCQkJc3RhdE9pZDsKIAogCS8qIGluY2x1ZGVzIGNoaWxkIHJlbGF0 aW9ucyAqLwotCWJvb2wJCWluaGVyaXQ7CisJYm9vbAkJaW5oZXJpdCBwZ19ub2RlX2F0dHIo cmVhZF93cml0ZV9pZ25vcmUpOwogCi0JLyogYmFjay1saW5rIHRvIHN0YXRpc3RpYydzIHRh YmxlICovCi0JUmVsT3B0SW5mbyAqcmVsOworCS8qCisJICogYmFjay1saW5rIHRvIHN0YXRp c3RpYydzIHRhYmxlOyBkb24ndCBwcmludCwgaW5maW5pdGUgcmVjdXJzaW9uIG9uIHBsYW4K KwkgKiB0cmVlIGR1bXAKKwkgKi8KKwlSZWxPcHRJbmZvICpyZWwgcGdfbm9kZV9hdHRyKHJl YWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIHN0YXRpc3RpY3Mga2luZCBvZiB0aGlzIGVudHJ5 ICovCiAJY2hhcgkJa2luZDsKQEAgLTExNjMsNyArMTE4Nyw3IEBAIHR5cGVkZWYgc3RydWN0 IFN0YXRpc3RpY0V4dEluZm8KIAogCS8qIGV4cHJlc3Npb25zICovCiAJTGlzdAkgICAqZXhw cnM7Ci19IFN0YXRpc3RpY0V4dEluZm87Cit9IFN0YXRpc3RpY0V4dEluZm8gcGdfbm9kZV9h dHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAvKgogICogRXF1aXZhbGVuY2VDbGFz c2VzCkBAIC0xMjA0LDYgKzEyMjgsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdGlzdGljRXh0 SW5mbwogICoKICAqIE5COiBpZiBlY19tZXJnZWQgaXNuJ3QgTlVMTCwgdGhpcyBjbGFzcyBo YXMgYmVlbiBtZXJnZWQgaW50byBhbm90aGVyLCBhbmQKICAqIHNob3VsZCBiZSBpZ25vcmVk IGluIGZhdm9yIG9mIHVzaW5nIHRoZSBwb2ludGVkLXRvIGNsYXNzLgorICoKKyAqIE5COiBF cXVpdmFsZW5jZUNsYXNzZXMgYXJlIG5ldmVyIGNvcGllZCBhZnRlciBjcmVhdGlvbi4gIFRo ZXJlZm9yZSwKKyAqIGNvcHlPYmplY3QoKSBjb3BpZXMgcG9pbnRlcnMgdG8gdGhlbSBhcyBw b2ludGVycywgYW5kIGVxdWFsKCkgY29tcGFyZXMKKyAqIHBvaW50ZXJzIHRvIEVxdWl2YWxl bmNlQ2xhc3NlcyB2aWEgcG9pbnRlciBlcXVhbGl0eS4KICAqLwogdHlwZWRlZiBzdHJ1Y3Qg RXF1aXZhbGVuY2VDbGFzcwogewpAQCAtMTIyNCw3ICsxMjUyLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgRXF1aXZhbGVuY2VDbGFzcwogCUluZGV4CQllY19taW5fc2VjdXJpdHk7CS8qIG1pbmlt dW0gc2VjdXJpdHlfbGV2ZWwgaW4gZWNfc291cmNlcyAqLwogCUluZGV4CQllY19tYXhfc2Vj dXJpdHk7CS8qIG1heGltdW0gc2VjdXJpdHlfbGV2ZWwgaW4gZWNfc291cmNlcyAqLwogCXN0 cnVjdCBFcXVpdmFsZW5jZUNsYXNzICplY19tZXJnZWQ7IC8qIHNldCBpZiBtZXJnZWQgaW50 byBhbm90aGVyIEVDICovCi19IEVxdWl2YWxlbmNlQ2xhc3M7Cit9IEVxdWl2YWxlbmNlQ2xh c3MgcGdfbm9kZV9hdHRyKGN1c3RvbV9yZWFkX3dyaXRlLCBub19jb3B5X2VxdWFsLCBub19y ZWFkKTsKIAogLyoKICAqIElmIGFuIEVDIGNvbnRhaW5zIGEgY29uc3QgYW5kIGlzbid0IGJl bG93LW91dGVyLWpvaW4sIGFueSBQYXRoS2V5IGRlcGVuZGluZwpAQCAtMTI2NSw3ICsxMjkz LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXF1aXZhbGVuY2VNZW1iZXIKIAlib29sCQllbV9pc19j b25zdDsJLyogZXhwcmVzc2lvbiBpcyBwc2V1ZG9jb25zdGFudD8gKi8KIAlib29sCQllbV9p c19jaGlsZDsJLyogZGVyaXZlZCB2ZXJzaW9uIGZvciBhIGNoaWxkIHJlbGF0aW9uPyAqLwog CU9pZAkJCWVtX2RhdGF0eXBlOwkvKiB0aGUgIm5vbWluYWwgdHlwZSIgdXNlZCBieSB0aGUg b3BmYW1pbHkgKi8KLX0gRXF1aXZhbGVuY2VNZW1iZXI7Cit9IEVxdWl2YWxlbmNlTWVtYmVy IHBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKTsKIAogLyoKICAqIFBhdGhL ZXlzCkBAIC0xMjkyLDcgKzEzMjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoS2V5CiAJT2lk CQkJcGtfb3BmYW1pbHk7CS8qIGJ0cmVlIG9wZmFtaWx5IGRlZmluaW5nIHRoZSBvcmRlcmlu ZyAqLwogCWludAkJCXBrX3N0cmF0ZWd5OwkvKiBzb3J0IGRpcmVjdGlvbiAoQVNDIG9yIERF U0MpICovCiAJYm9vbAkJcGtfbnVsbHNfZmlyc3Q7IC8qIGRvIE5VTExzIGNvbWUgYmVmb3Jl IG5vcm1hbCB2YWx1ZXM/ICovCi19IFBhdGhLZXk7Cit9IFBhdGhLZXkJcGdfbm9kZV9hdHRy KG5vX3JlYWQpOwogCiAvKgogICogQ29tYmluZXMgaW5mb3JtYXRpb24gYWJvdXQgcGF0aGtl eXMgYW5kIHRoZSBhc3NvY2lhdGVkIGNsYXVzZXMuCkBAIC0xMzAyLDcgKzEzMzAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQYXRoS2V5SW5mbwogCU5vZGVUYWcJCXR5cGU7CiAJTGlzdAkgICAq cGF0aGtleXM7CiAJTGlzdAkgICAqY2xhdXNlczsKLX0gUGF0aEtleUluZm87Cit9IFBhdGhL ZXlJbmZvIHBnX25vZGVfYXR0cihub19yZWFkKTsKIAogLyoKICAqIFZvbGF0aWxlRnVuY3Rp b25TdGF0dXMgLS0gYWxsb3dzIG5vZGVzIHRvIGNhY2hlIHRoZWlyCkBAIC0xMzQ3LDcgKzEz NzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoVGFyZ2V0CiAJTGlzdAkgICAqZXhwcnM7CiAK IAkvKiBjb3JyZXNwb25kaW5nIHNvcnQvZ3JvdXAgcmVmbm9zLCBvciAwICovCi0JSW5kZXgJ ICAgKnNvcnRncm91cHJlZnM7CisJSW5kZXgJICAgKnNvcnRncm91cHJlZnMgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUoZXhwcnMpKTsKIAogCS8qIGNvc3Qgb2YgZXZhbHVhdGluZyB0aGUg ZXhwcmVzc2lvbnMgKi8KIAlRdWFsQ29zdAljb3N0OwpAQCAtMTM1Nyw3ICsxMzg1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUGF0aFRhcmdldAogCiAJLyogaW5kaWNhdGVzIGlmIGV4cHJzIGNv bnRhaW4gYW55IHZvbGF0aWxlIGZ1bmN0aW9ucyAqLwogCVZvbGF0aWxlRnVuY3Rpb25TdGF0 dXMgaGFzX3ZvbGF0aWxlX2V4cHI7Ci19IFBhdGhUYXJnZXQ7Cit9IFBhdGhUYXJnZXQgcGdf bm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAvKiBDb252ZW5pZW5jZSBt YWNybyB0byBnZXQgYSBzb3J0L2dyb3VwIHJlZm5vIGZyb20gYSBQYXRoVGFyZ2V0ICovCiAj ZGVmaW5lIGdldF9wYXRodGFyZ2V0X3NvcnRncm91cHJlZih0YXJnZXQsIGNvbG5vKSBcCkBA IC0xMzg1LDcgKzE0MTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbVBhdGhJbmZvCiAJUmVs aWRzCQlwcGlfcmVxX291dGVyOwkvKiByZWxzIHN1cHBseWluZyBwYXJhbWV0ZXJzIHVzZWQg YnkgcGF0aCAqLwogCUNhcmRpbmFsaXR5IHBwaV9yb3dzOwkJLyogZXN0aW1hdGVkIG51bWJl ciBvZiByZXN1bHQgdHVwbGVzICovCiAJTGlzdAkgICAqcHBpX2NsYXVzZXM7CS8qIGpvaW4g Y2xhdXNlcyBhdmFpbGFibGUgZnJvbSBvdXRlciByZWxzICovCi19IFBhcmFtUGF0aEluZm87 Cit9IFBhcmFtUGF0aEluZm8gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQp OwogCiAKIC8qCkBAIC0xNDE2LDYgKzE0NDQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYW1Q YXRoSW5mbwogICoKICAqICJwYXRoa2V5cyIgaXMgYSBMaXN0IG9mIFBhdGhLZXkgbm9kZXMg KHNlZSBhYm92ZSksIGRlc2NyaWJpbmcgdGhlIHNvcnQKICAqIG9yZGVyaW5nIG9mIHRoZSBw YXRoJ3Mgb3V0cHV0IHJvd3MuCisgKgorICogV2UgZG8gbm90IHN1cHBvcnQgY29weWluZyBQ YXRoIHRyZWVzLCBtYWlubHkgYmVjYXVzZSB0aGUgY2lyY3VsYXIgbGlua2FnZXMKKyAqIGJl dHdlZW4gUmVsT3B0SW5mbyBhbmQgUGF0aCBub2RlcyBjYW4ndCBiZSBoYW5kbGVkIGVhc2ls eSBpbiBhIHNpbXBsZQorICogZGVwdGgtZmlyc3QgdHJhdmVyc2FsLiAgV2UgYWxzbyBkb24n dCBoYXZlIHJlYWQgc3VwcG9ydCBhdCB0aGUgbW9tZW50LgogICovCiB0eXBlZGVmIHN0cnVj dCBQYXRoCiB7CkBAIC0xNDI0LDE0ICsxNDU2LDI5IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgK IAkvKiB0YWcgaWRlbnRpZnlpbmcgc2Nhbi9qb2luIG1ldGhvZCAqLwogCU5vZGVUYWcJCXBh dGh0eXBlOwogCi0JLyogdGhlIHJlbGF0aW9uIHRoaXMgcGF0aCBjYW4gYnVpbGQgKi8KLQlS ZWxPcHRJbmZvICpwYXJlbnQ7CisJLyoKKwkgKiB0aGUgcmVsYXRpb24gdGhpcyBwYXRoIGNh biBidWlsZAorCSAqCisJICogV2UgZG8gTk9UIHByaW50IHRoZSBwYXJlbnQsIGVsc2Ugd2Un ZCBiZSBpbiBpbmZpbml0ZSByZWN1cnNpb24uICBXZSBjYW4KKwkgKiBwcmludCB0aGUgcGFy ZW50J3MgcmVsaWRzIGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcywgdGhvdWdoLgorCSAq LworCVJlbE9wdEluZm8gKnBhcmVudCBwZ19ub2RlX2F0dHIod3JpdGVfb25seV9yZWxpZHMp OwogCi0JLyogbGlzdCBvZiBWYXJzL0V4cHJzLCBjb3N0LCB3aWR0aCAqLwotCVBhdGhUYXJn ZXQgKnBhdGh0YXJnZXQ7CisJLyoKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNvc3QsIHdp ZHRoCisJICoKKwkgKiBXZSBwcmludCB0aGUgcGF0aHRhcmdldCBvbmx5IGlmIGl0J3Mgbm90 IHRoZSBkZWZhdWx0IG9uZSBmb3IgdGhlIHJlbC4KKwkgKi8KKwlQYXRoVGFyZ2V0ICpwYXRo dGFyZ2V0IHBnX25vZGVfYXR0cih3cml0ZV9vbmx5X25vbmRlZmF1bHRfcGF0aHRhcmdldCk7 CiAKLQkvKiBwYXJhbWV0ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLwotCVBh cmFtUGF0aEluZm8gKnBhcmFtX2luZm87CisJLyoKKwkgKiBwYXJhbWV0ZXJpemF0aW9uIGlu Zm8sIG9yIE5VTEwgaWYgbm9uZQorCSAqCisJICogV2UgZG8gbm90IHByaW50IHRoZSB3aG9s ZSBvZiBwYXJhbV9pbmZvLCBzaW5jZSBpdCdzIHByaW50ZWQgdmlhCisJICogUmVsT3B0SW5m bzsgaXQncyBzdWZmaWNpZW50IGFuZCBsZXNzIGNsdXR0ZXJpbmcgdG8gcHJpbnQganVzdCB0 aGUKKwkgKiByZXF1aXJlZCBvdXRlciByZWxpZHMuCisJICovCisJUGFyYW1QYXRoSW5mbyAq cGFyYW1faW5mbyBwZ19ub2RlX2F0dHIod3JpdGVfb25seV9yZXFfb3V0ZXIpOwogCiAJLyog ZW5nYWdlIHBhcmFsbGVsLWF3YXJlIGxvZ2ljPyAqLwogCWJvb2wJCXBhcmFsbGVsX2F3YXJl OwpAQCAtMTQ0Nyw3ICsxNDk0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0aAogCiAJLyogc29y dCBvcmRlcmluZyBvZiBwYXRoJ3Mgb3V0cHV0OyBhIExpc3Qgb2YgUGF0aEtleSBub2Rlczsg c2VlIGFib3ZlICovCiAJTGlzdAkgICAqcGF0aGtleXM7Ci19IFBhdGg7Cit9IFBhdGgJCXBn X25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKTsKIAogLyogTWFjcm8gZm9yIGV4 dHJhY3RpbmcgYSBwYXRoJ3MgcGFyYW1ldGVyaXphdGlvbiByZWxpZHM7IGJld2FyZSBkb3Vi bGUgZXZhbCAqLwogI2RlZmluZSBQQVRIX1JFUV9PVVRFUihwYXRoKSAgXApAQCAtMTU0NSw3 ICsxNTkyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhDbGF1c2UKIAlib29sCQlsb3NzeTsJ CQkvKiBhcmUgaW5kZXhxdWFscyBhIGxvc3N5IHZlcnNpb24gb2YgY2xhdXNlPyAqLwogCUF0 dHJOdW1iZXIJaW5kZXhjb2w7CQkvKiBpbmRleCBjb2x1bW4gdGhlIGNsYXVzZSB1c2VzICh6 ZXJvLWJhc2VkKSAqLwogCUxpc3QJICAgKmluZGV4Y29sczsJCS8qIG11bHRpcGxlIGluZGV4 IGNvbHVtbnMsIGlmIFJvd0NvbXBhcmUgKi8KLX0gSW5kZXhDbGF1c2U7Cit9IEluZGV4Q2xh dXNlIHBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKTsKIAogLyoKICAqIEJp dG1hcEhlYXBQYXRoIHJlcHJlc2VudHMgb25lIG9yIG1vcmUgaW5kZXhzY2FucyB0aGF0IGdl bmVyYXRlIFRJRCBiaXRtYXBzCkBAIC0xODUxLDcgKzE4OTgsNyBAQCB0eXBlZGVmIHN0cnVj dCBKb2luUGF0aAogCSAqIGpvaW5yZXN0cmljdGluZm8gaXMgbmVlZGVkIGluIEpvaW5QYXRo LCBhbmQgY2FuJ3QgYmUgbWVyZ2VkIGludG8gdGhlCiAJICogcGFyZW50IFJlbE9wdEluZm8u CiAJICovCi19IEpvaW5QYXRoOworfSBKb2luUGF0aAlwZ19ub2RlX2F0dHIoYWJzdHJhY3Qp OwogCiAvKgogICogQSBuZXN0ZWQtbG9vcCBwYXRoIG5lZWRzIG5vIHNwZWNpYWwgZmllbGRz LgpAQCAtMjAzOSw3ICsyMDg2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXBpbmdTZXREYXRh CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpzZXQ7CQkJLyogZ3JvdXBpbmcgc2V0IGFz IGxpc3Qgb2Ygc29ydGdyb3VwcmVmcyAqLwogCUNhcmRpbmFsaXR5IG51bUdyb3VwczsJCS8q IGVzdC4gbnVtYmVyIG9mIHJlc3VsdCBncm91cHMgKi8KLX0gR3JvdXBpbmdTZXREYXRhOwor fSBHcm91cGluZ1NldERhdGEgcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQp OwogCiB0eXBlZGVmIHN0cnVjdCBSb2xsdXBEYXRhCiB7CkBAIC0yMDUwLDcgKzIwOTcsNyBA QCB0eXBlZGVmIHN0cnVjdCBSb2xsdXBEYXRhCiAJQ2FyZGluYWxpdHkgbnVtR3JvdXBzOwkJ LyogZXN0LiBudW1iZXIgb2YgcmVzdWx0IGdyb3VwcyAqLwogCWJvb2wJCWhhc2hhYmxlOwkJ LyogY2FuIGJlIGhhc2hlZCAqLwogCWJvb2wJCWlzX2hhc2hlZDsJCS8qIHRvIGJlIGltcGxl bWVudGVkIGFzIGEgaGFzaGFnZyAqLwotfSBSb2xsdXBEYXRhOworfSBSb2xsdXBEYXRhIHBn X25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKTsKIAogLyoKICAqIEdyb3VwaW5n U2V0c1BhdGggcmVwcmVzZW50cyBhIEdST1VQSU5HIFNFVFMgYWdncmVnYXRpb24KQEAgLTIz MDYsNiArMjM1MywxMiBAQCB0eXBlZGVmIHN0cnVjdCBMaW1pdFBhdGgKICAqIGFwcGx5IG9u bHkgb25lLiAgV2UgbWFyayBjbGF1c2VzIG9mIHRoaXMga2luZCBieSBzZXR0aW5nIHBhcmVu dF9lYyB0bwogICogcG9pbnQgdG8gdGhlIGdlbmVyYXRpbmcgRXF1aXZhbGVuY2VDbGFzcy4g IE11bHRpcGxlIGNsYXVzZXMgd2l0aCB0aGUgc2FtZQogICogcGFyZW50X2VjIGluIHRoZSBz YW1lIGpvaW4gYXJlIHJlZHVuZGFudC4KKyAqCisgKiBNb3N0IGZpZWxkcyBhcmUgaWdub3Jl ZCBmb3IgZXF1YWxpdHksIHNpbmNlIHRoZXkgbWF5IG5vdCBiZSBzZXQgeWV0LCBhbmQKKyAq IHNob3VsZCBiZSBkZXJpdmFibGUgZnJvbSB0aGUgY2xhdXNlIGFueXdheS4KKyAqCisgKiBw YXJlbnRfZWMsIGxlZnRfZWMsIHJpZ2h0X2VjIGFyZSBub3QgcHJpbnRlZCwgbGVzdCBpdCBs ZWFkIHRvIGluZmluaXRlCisgKiByZWN1cnNpb24gaW4gcGxhbiB0cmVlIGR1bXAuCiAgKi8K IAogdHlwZWRlZiBzdHJ1Y3QgUmVzdHJpY3RJbmZvCkBAIC0yMzIyLDIyICsyMzc1LDIyIEBA IHR5cGVkZWYgc3RydWN0IFJlc3RyaWN0SW5mbwogCWJvb2wJCW91dGVyam9pbl9kZWxheWVk OwogCiAJLyogc2VlIGNvbW1lbnQgYWJvdmUgKi8KLQlib29sCQljYW5fam9pbjsKKwlib29s CQljYW5fam9pbiBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHNlZSBjb21t ZW50IGFib3ZlICovCi0JYm9vbAkJcHNldWRvY29uc3RhbnQ7CisJYm9vbAkJcHNldWRvY29u c3RhbnQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiB0cnVlIGlmIGtub3du IHRvIGNvbnRhaW4gbm8gbGVha2VkIFZhcnMgKi8KLQlib29sCQlsZWFrcHJvb2Y7CisJYm9v bAkJbGVha3Byb29mIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogdG8gaW5k aWNhdGUgaWYgY2xhdXNlIGNvbnRhaW5zIGFueSB2b2xhdGlsZSBmdW5jdGlvbnMuICovCi0J Vm9sYXRpbGVGdW5jdGlvblN0YXR1cyBoYXNfdm9sYXRpbGU7CisJVm9sYXRpbGVGdW5jdGlv blN0YXR1cyBoYXNfdm9sYXRpbGUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkv KiBzZWUgY29tbWVudCBhYm92ZSAqLwogCUluZGV4CQlzZWN1cml0eV9sZXZlbDsKIAogCS8q IFRoZSBzZXQgb2YgcmVsaWRzICh2YXJub3MpIGFjdHVhbGx5IHJlZmVyZW5jZWQgaW4gdGhl IGNsYXVzZTogKi8KLQlSZWxpZHMJCWNsYXVzZV9yZWxpZHM7CisJUmVsaWRzCQljbGF1c2Vf cmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogCiAJLyogVGhlIHNldCBvZiBy ZWxpZHMgcmVxdWlyZWQgdG8gZXZhbHVhdGUgdGhlIGNsYXVzZTogKi8KIAlSZWxpZHMJCXJl cXVpcmVkX3JlbGlkczsKQEAgLTIzNTIsODUgKzI0MDUsOTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVzdHJpY3RJbmZvCiAJICogUmVsaWRzIGluIHRoZSBsZWZ0L3JpZ2h0IHNpZGUgb2YgdGhl IGNsYXVzZS4gIFRoZXNlIGZpZWxkcyBhcmUgc2V0IGZvcgogCSAqIGFueSBiaW5hcnkgb3Bj bGF1c2UuCiAJICovCi0JUmVsaWRzCQlsZWZ0X3JlbGlkczsKLQlSZWxpZHMJCXJpZ2h0X3Jl bGlkczsKKwlSZWxpZHMJCWxlZnRfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUp OworCVJlbGlkcwkJcmlnaHRfcmVsaWRzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwog CiAJLyoKIAkgKiBNb2RpZmllZCBjbGF1c2Ugd2l0aCBSZXN0cmljdEluZm9zLiAgVGhpcyBm aWVsZCBpcyBOVUxMIHVubGVzcyBjbGF1c2UKIAkgKiBpcyBhbiBPUiBjbGF1c2UuCiAJICov Ci0JRXhwcgkgICAqb3JjbGF1c2U7CisJRXhwcgkgICAqb3JjbGF1c2UgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CiAKIAkvKgogCSAqIEdlbmVyYXRpbmcgRXF1aXZhbGVuY2VDbGFz cy4gIFRoaXMgZmllbGQgaXMgTlVMTCB1bmxlc3MgY2xhdXNlIGlzCiAJICogcG90ZW50aWFs bHkgcmVkdW5kYW50LgogCSAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKnBhcmVudF9lYzsKKwlF cXVpdmFsZW5jZUNsYXNzICpwYXJlbnRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSwg cmVhZF93cml0ZV9pZ25vcmUpOwogCiAJLyoKIAkgKiBjYWNoZSBzcGFjZSBmb3IgY29zdCBh bmQgc2VsZWN0aXZpdHkKIAkgKi8KIAogCS8qIGV2YWwgY29zdCBvZiBjbGF1c2U7IC0xIGlm IG5vdCB5ZXQgc2V0ICovCi0JUXVhbENvc3QJZXZhbF9jb3N0OworCVF1YWxDb3N0CWV2YWxf Y29zdCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qCiAJICogc2VsZWN0aXZp dHkgZm9yICJub3JtYWwiIChKT0lOX0lOTkVSKSBzZW1hbnRpY3M7IC0xIGlmIG5vdCB5ZXQg c2V0OyA+MQogCSAqIG1lYW5zIGEgcmVkdW5kYW50IGNsYXVzZQogCSAqLwotCVNlbGVjdGl2 aXR5IG5vcm1fc2VsZWM7CisJU2VsZWN0aXZpdHkgbm9ybV9zZWxlYyBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsKIAkvKiBzZWxlY3Rpdml0eSBmb3Igb3V0ZXIgam9pbiBzZW1hbnRp Y3M7IC0xIGlmIG5vdCB5ZXQgc2V0ICovCi0JU2VsZWN0aXZpdHkgb3V0ZXJfc2VsZWM7CisJ U2VsZWN0aXZpdHkgb3V0ZXJfc2VsZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAK IAkvKgogCSAqIG9wZmFtaWxpZXMgY29udGFpbmluZyBjbGF1c2Ugb3BlcmF0b3I7IHZhbGlk IGlmIGNsYXVzZSBpcwogCSAqIG1lcmdlam9pbmFibGUsIGVsc2UgTklMCiAJICovCi0JTGlz dAkgICAqbWVyZ2VvcGZhbWlsaWVzOworCUxpc3QJICAgKm1lcmdlb3BmYW1pbGllcyBwZ19u b2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qCiAJICogY2FjaGUgc3BhY2UgZm9yIG1l cmdlY2xhdXNlIHByb2Nlc3Npbmc7IE5VTEwgaWYgbm90IHlldCBzZXQKIAkgKi8KIAogCS8q IEVxdWl2YWxlbmNlQ2xhc3MgY29udGFpbmluZyBsZWZ0aGFuZCAqLwotCUVxdWl2YWxlbmNl Q2xhc3MgKmxlZnRfZWM7CisJRXF1aXZhbGVuY2VDbGFzcyAqbGVmdF9lYyBwZ19ub2RlX2F0 dHIoZXF1YWxfaWdub3JlLCByZWFkX3dyaXRlX2lnbm9yZSk7CiAJLyogRXF1aXZhbGVuY2VD bGFzcyBjb250YWluaW5nIHJpZ2h0aGFuZCAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKnJpZ2h0 X2VjOworCUVxdWl2YWxlbmNlQ2xhc3MgKnJpZ2h0X2VjIHBnX25vZGVfYXR0cihlcXVhbF9p Z25vcmUsIHJlYWRfd3JpdGVfaWdub3JlKTsKIAkvKiBFcXVpdmFsZW5jZU1lbWJlciBmb3Ig bGVmdGhhbmQgKi8KLQlFcXVpdmFsZW5jZU1lbWJlciAqbGVmdF9lbTsKKwlFcXVpdmFsZW5j ZU1lbWJlciAqbGVmdF9lbSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAkvKiBFcXVp dmFsZW5jZU1lbWJlciBmb3IgcmlnaHRoYW5kICovCi0JRXF1aXZhbGVuY2VNZW1iZXIgKnJp Z2h0X2VtOwotCS8qIGxpc3Qgb2YgTWVyZ2VTY2FuU2VsQ2FjaGUgc3RydWN0cyAqLwotCUxp c3QJICAgKnNjYW5zZWxfY2FjaGU7CisJRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2VtIHBn X25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworCisJLyoKKwkgKiBMaXN0IG9mIE1lcmdlU2Nh blNlbENhY2hlIHN0cnVjdHMuICBUaG9zZSBhcmVuJ3QgTm9kZXMsIHNvIGhhcmQgdG8KKwkg KiBjb3B5OyBpbnN0ZWFkIHJlcGxhY2Ugd2l0aCBOSUwuICBUaGF0IGhhcyB0aGUgZWZmZWN0 IHRoYXQgY29weWluZyB3aWxsCisJICoganVzdCByZXNldCB0aGUgY2FjaGUuICBMaWtld2lz ZSwgY2FuJ3QgY29tcGFyZSBvciBwcmludCB0aGVtLgorCSAqLworCUxpc3QJICAgKnNjYW5z ZWxfY2FjaGUgcGdfbm9kZV9hdHRyKGNvcHlfYXMoTklMKSwgZXF1YWxfaWdub3JlLCByZWFk X3dyaXRlX2lnbm9yZSk7CiAKIAkvKgogCSAqIHRyYW5zaWVudCB3b3Jrc3BhY2UgZm9yIHVz ZSB3aGlsZSBjb25zaWRlcmluZyBhIHNwZWNpZmljIGpvaW4gcGF0aDsgVCA9CiAJICogb3V0 ZXIgdmFyIG9uIGxlZnQsIEYgPSBvbiByaWdodAogCSAqLwotCWJvb2wJCW91dGVyX2lzX2xl ZnQ7CisJYm9vbAkJb3V0ZXJfaXNfbGVmdCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsK IAogCS8qCiAJICogY29weSBvZiBjbGF1c2Ugb3BlcmF0b3I7IHZhbGlkIGlmIGNsYXVzZSBp cyBoYXNoam9pbmFibGUsIGVsc2UKIAkgKiBJbnZhbGlkT2lkCiAJICovCi0JT2lkCQkJaGFz aGpvaW5vcGVyYXRvcjsKKwlPaWQJCQloYXNoam9pbm9wZXJhdG9yIHBnX25vZGVfYXR0cihl cXVhbF9pZ25vcmUpOwogCiAJLyoKIAkgKiBjYWNoZSBzcGFjZSBmb3IgaGFzaGNsYXVzZSBw cm9jZXNzaW5nOyAtMSBpZiBub3QgeWV0IHNldAogCSAqLwogCS8qIGF2ZyBidWNrZXRzaXpl IG9mIGxlZnQgc2lkZSAqLwotCVNlbGVjdGl2aXR5IGxlZnRfYnVja2V0c2l6ZTsKKwlTZWxl Y3Rpdml0eSBsZWZ0X2J1Y2tldHNpemUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAJ LyogYXZnIGJ1Y2tldHNpemUgb2YgcmlnaHQgc2lkZSAqLwotCVNlbGVjdGl2aXR5IHJpZ2h0 X2J1Y2tldHNpemU7CisJU2VsZWN0aXZpdHkgcmlnaHRfYnVja2V0c2l6ZSBwZ19ub2RlX2F0 dHIoZXF1YWxfaWdub3JlKTsKIAkvKiBsZWZ0IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBm cmVxICovCi0JU2VsZWN0aXZpdHkgbGVmdF9tY3ZmcmVxOworCVNlbGVjdGl2aXR5IGxlZnRf bWN2ZnJlcSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAkvKiByaWdodCBzaWRlJ3Mg bW9zdCBjb21tb24gdmFsJ3MgZnJlcSAqLwotCVNlbGVjdGl2aXR5IHJpZ2h0X21jdmZyZXE7 CisJU2VsZWN0aXZpdHkgcmlnaHRfbWN2ZnJlcSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3Jl KTsKIAogCS8qIGhhc2ggZXF1YWxpdHkgb3BlcmF0b3JzIHVzZWQgZm9yIG1lbW9pemUgbm9k ZXMsIGVsc2UgSW52YWxpZE9pZCAqLwotCU9pZAkJCWxlZnRfaGFzaGVxb3BlcmF0b3I7Ci0J T2lkCQkJcmlnaHRfaGFzaGVxb3BlcmF0b3I7Ci19IFJlc3RyaWN0SW5mbzsKKwlPaWQJCQls ZWZ0X2hhc2hlcW9wZXJhdG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworCU9pZAkJ CXJpZ2h0X2hhc2hlcW9wZXJhdG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworfSBS ZXN0cmljdEluZm8gcGdfbm9kZV9hdHRyKG5vX3JlYWQpOwogCiAvKgogICogVGhpcyBtYWNy byBlbWJvZGllcyB0aGUgY29ycmVjdCB3YXkgdG8gdGVzdCB3aGV0aGVyIGEgUmVzdHJpY3RJ bmZvIGlzCkBAIC0yNDc5LDYgKzI1MzcsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2Fu U2VsQ2FjaGUKICAqIEFsdGhvdWdoIHRoZSBwbGFubmVyIHRyZWF0cyB0aGlzIGFzIGFuIGV4 cHJlc3Npb24gbm9kZSB0eXBlLCBpdCBpcyBub3QKICAqIHJlY29nbml6ZWQgYnkgdGhlIHBh cnNlciBvciBleGVjdXRvciwgc28gd2UgZGVjbGFyZSBpdCBoZXJlIHJhdGhlciB0aGFuCiAg KiBpbiBwcmltbm9kZXMuaC4KKyAqCisgKiBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBjb21w YXJlIHBoZXhwci4gIFR3byBQbGFjZUhvbGRlclZhcnMgd2l0aCB0aGUKKyAqIHNhbWUgSUQg YW5kIGxldmVsc3VwIHNob3VsZCBiZSBjb25zaWRlcmVkIGVxdWFsIGV2ZW4gaWYgdGhlIGNv bnRhaW5lZAorICogZXhwcmVzc2lvbnMgaGF2ZSBtYW5hZ2VkIHRvIG11dGF0ZSB0byBkaWZm ZXJlbnQgc3RhdGVzLiAgVGhpcyB3aWxsCisgKiBoYXBwZW4gZHVyaW5nIGZpbmFsIHBsYW4g Y29uc3RydWN0aW9uIHdoZW4gdGhlcmUgYXJlIG5lc3RlZCBQSFZzLCBzaW5jZQorICogdGhl IGlubmVyIFBIViB3aWxsIGdldCByZXBsYWNlZCBieSBhIFBhcmFtIGluIHNvbWUgY29waWVz IG9mIHRoZSBvdXRlcgorICogUEhWLiAgQW5vdGhlciB3YXkgaW4gd2hpY2ggaXQgY2FuIGhh cHBlbiBpcyB0aGF0IGluaXRwbGFuIHN1YmxpbmtzCisgKiBjb3VsZCBnZXQgcmVwbGFjZWQg YnkgZGlmZmVyZW50bHktbnVtYmVyZWQgUGFyYW1zIHdoZW4gc3VibGluayBmb2xkaW5nCisg KiBpcyBkb25lLiAgKFRoZSBlbmQgcmVzdWx0IG9mIHN1Y2ggYSBzaXR1YXRpb24gd291bGQg YmUgc29tZQorICogdW5yZWZlcmVuY2VkIGluaXRwbGFucywgd2hpY2ggaXMgYW5ub3lpbmcg YnV0IG5vdCByZWFsbHkgYSBwcm9ibGVtLikgT24KKyAqIHRoZSBzYW1lIHJlYXNvbmluZywg dGhlcmUgaXMgbm8gbmVlZCB0byBleGFtaW5lIHBocmVscy4KICAqLwogCiB0eXBlZGVmIHN0 cnVjdCBQbGFjZUhvbGRlclZhcgpAQCAtMjQ4NiwxMCArMjU1NSwxMCBAQCB0eXBlZGVmIHN0 cnVjdCBQbGFjZUhvbGRlclZhcgogCUV4cHIJCXhwcjsKIAogCS8qIHRoZSByZXByZXNlbnRl ZCBleHByZXNzaW9uICovCi0JRXhwcgkgICAqcGhleHByOworCUV4cHIJICAgKnBoZXhwciBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIGJhc2UgcmVsaWRzIHN5bnRhY3Rp Y2FsbHkgd2l0aGluIGV4cHIgc3JjICovCi0JUmVsaWRzCQlwaHJlbHM7CisJUmVsaWRzCQlw aHJlbHMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBJRCBmb3IgUEhWICh1 bmlxdWUgd2l0aGluIHBsYW5uZXIgcnVuKSAqLwogCUluZGV4CQlwaGlkOwpAQCAtMjU3NSw3 ICsyNjQ0LDcgQEAgc3RydWN0IFNwZWNpYWxKb2luSW5mbwogCWJvb2wJCXNlbWlfY2FuX2hh c2g7CS8qIHRydWUgaWYgc2VtaV9vcGVyYXRvcnMgYXJlIGFsbCBoYXNoICovCiAJTGlzdAkg ICAqc2VtaV9vcGVyYXRvcnM7IC8qIE9JRHMgb2YgZXF1YWxpdHkgam9pbiBvcGVyYXRvcnMg Ki8KIAlMaXN0CSAgICpzZW1pX3Joc19leHByczsgLyogcmlnaHRoYW5kLXNpZGUgZXhwcmVz c2lvbnMgb2YgdGhlc2Ugb3BzICovCi19OworfQkJCXBnX25vZGVfYXR0cihub19yZWFkKTsK IAogLyoKICAqIEFwcGVuZC1yZWxhdGlvbiBpbmZvLgpAQCAtMjY1NCw3ICsyNzIzLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUmVsSW5mbwogCSAqIGNoaWxkIGNvbHVtbiBpcyBkcm9w cGVkIG9yIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHBhcmVudC4KIAkgKi8KIAlpbnQJCQludW1f Y2hpbGRfY29sczsgLyogbGVuZ3RoIG9mIGFycmF5ICovCi0JQXR0ck51bWJlciAqcGFyZW50 X2NvbG5vczsKKwlBdHRyTnVtYmVyICpwYXJlbnRfY29sbm9zIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bV9jaGlsZF9jb2xzKSk7CiAKIAkvKgogCSAqIFdlIHN0b3JlIHRoZSBwYXJl bnQgdGFibGUncyBPSUQgaGVyZSBmb3IgaW5oZXJpdGFuY2UsIG9yIEludmFsaWRPaWQgZm9y CkBAIC0yNjkwLDcgKzI3NTksNyBAQCB0eXBlZGVmIHN0cnVjdCBSb3dJZGVudGl0eVZhcklu Zm8KIAlpbnQzMgkJcm93aWR3aWR0aDsJCS8qIGVzdGltYXRlZCBhdmVyYWdlIHdpZHRoICov CiAJY2hhcgkgICAqcm93aWRuYW1lOwkJLyogbmFtZSBvZiB0aGUgcmVzanVuayBjb2x1bW4g Ki8KIAlSZWxpZHMJCXJvd2lkcmVsczsJCS8qIFJURSBpbmRleGVzIG9mIHRhcmdldCByZWxz IHVzaW5nIHRoaXMgKi8KLX0gUm93SWRlbnRpdHlWYXJJbmZvOworfSBSb3dJZGVudGl0eVZh ckluZm8gcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQpOwogCiAvKgogICog Rm9yIGVhY2ggZGlzdGluY3QgcGxhY2Vob2xkZXIgZXhwcmVzc2lvbiBnZW5lcmF0ZWQgZHVy aW5nIHBsYW5uaW5nLCB3ZQpAQCAtMjcyNSw3ICsyNzk0LDEwIEBAIHR5cGVkZWYgc3RydWN0 IFBsYWNlSG9sZGVySW5mbwogCS8qIElEIGZvciBQSCAodW5pcXVlIHdpdGhpbiBwbGFubmVy IHJ1bikgKi8KIAlJbmRleAkJcGhpZDsKIAotCS8qIGNvcHkgb2YgUGxhY2VIb2xkZXJWYXIg dHJlZSAqLworCS8qCisJICogY29weSBvZiBQbGFjZUhvbGRlclZhciB0cmVlIChzaG91bGQg YmUgcmVkdW5kYW50IGZvciBjb21wYXJpc29uLCBjb3VsZAorCSAqIGJlIGlnbm9yZWQpCisJ ICovCiAJUGxhY2VIb2xkZXJWYXIgKnBoX3ZhcjsKIAogCS8qIGxvd2VzdCBsZXZlbCB3ZSBj YW4gZXZhbHVhdGUgdmFsdWUgYXQgKi8KQEAgLTI3MzksNyArMjgxMSw3IEBAIHR5cGVkZWYg c3RydWN0IFBsYWNlSG9sZGVySW5mbwogCiAJLyogZXN0aW1hdGVkIGF0dHJpYnV0ZSB3aWR0 aCAqLwogCWludDMyCQlwaF93aWR0aDsKLX0gUGxhY2VIb2xkZXJJbmZvOworfSBQbGFjZUhv bGRlckluZm8gcGdfbm9kZV9hdHRyKG5vX3JlYWQpOwogCiAvKgogICogVGhpcyBzdHJ1Y3Qg ZGVzY3JpYmVzIG9uZSBwb3RlbnRpYWxseSBpbmRleC1vcHRpbWl6YWJsZSBNSU4vTUFYIGFn Z3JlZ2F0ZQpAQCAtMjc1OSw4ICsyODMxLDExIEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFn Z0luZm8KIAkvKiBleHByZXNzaW9uIHdlIGFyZSBhZ2dyZWdhdGluZyBvbiAqLwogCUV4cHIJ ICAgKnRhcmdldDsKIAotCS8qIG1vZGlmaWVkICJyb290IiBmb3IgcGxhbm5pbmcgdGhlIHN1 YnF1ZXJ5ICovCi0JUGxhbm5lckluZm8gKnN1YnJvb3Q7CisJLyoKKwkgKiBtb2RpZmllZCAi cm9vdCIgZm9yIHBsYW5uaW5nIHRoZSBzdWJxdWVyeTsgbm90IHByaW50ZWQsIHRvbyBsYXJn ZSwgbm90CisJICogaW50ZXJlc3RpbmcgZW5vdWdoCisJICovCisJUGxhbm5lckluZm8gKnN1 YnJvb3QgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIAogCS8qIGFjY2VzcyBw YXRoIGZvciBzdWJxdWVyeSAqLwogCVBhdGgJICAgKnBhdGg7CkBAIC0yNzcwLDcgKzI4NDUs NyBAQCB0eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJbmZvCiAKIAkvKiBwYXJhbSBmb3Igc3Vi cGxhbidzIG91dHB1dCAqLwogCVBhcmFtCSAgICpwYXJhbTsKLX0gTWluTWF4QWdnSW5mbzsK K30gTWluTWF4QWdnSW5mbyBwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCk7 CiAKIC8qCiAgKiBBdCBydW50aW1lLCBQQVJBTV9FWEVDIHNsb3RzIGFyZSB1c2VkIHRvIHBh c3MgdmFsdWVzIGFyb3VuZCBmcm9tIG9uZSBwbGFuCkBAIC0yODI1LDcgKzI5MDAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFubmVyUGFyYW1JdGVtCiAKIAlOb2RlCSAgICppdGVtOwkJCS8q IHRoZSBWYXIsIFBsYWNlSG9sZGVyVmFyLCBvciBBZ2dyZWYgKi8KIAlpbnQJCQlwYXJhbUlk OwkJLyogaXRzIGFzc2lnbmVkIFBBUkFNX0VYRUMgc2xvdCBudW1iZXIgKi8KLX0gUGxhbm5l clBhcmFtSXRlbTsKK30gUGxhbm5lclBhcmFtSXRlbSBwZ19ub2RlX2F0dHIobm9fY29weV9l cXVhbCwgbm9fcmVhZCk7CiAKIC8qCiAgKiBXaGVuIG1ha2luZyBjb3N0IGVzdGltYXRlcyBm b3IgYSBTRU1JL0FOVEkvaW5uZXJfdW5pcXVlIGpvaW4sIHRoZXJlIGFyZQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaAppbmRleCBkNWMwZWJlODU5Li44NDY5NzdmNDQzIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaApAQCAtMzgsNiArMzgsOSBAQAogICogbm9kZXM7IGluIHN1Y2ggY2FzZXMs IGNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZLCB0aGUgc3RhdGVtZW50IGl0c2VsZgogICog aXMgaW4gdGhlIHV0aWxpdHlTdG10IGZpZWxkLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cnVj dCBpcyBtb3N0bHkgZHVtbXkuCiAgKiAoV2UgZG8gdXNlIGNhblNldFRhZywgc3RtdF9sb2Nh dGlvbiwgc3RtdF9sZW4sIGFuZCBwb3NzaWJseSBxdWVyeUlkLikKKyAqCisgKiBQbGFubmVk U3RtdCwgYXMgd2VsbCBhcyBhbGwgdmFyaWV0aWVzIG9mIFBsYW4sIGRvIG5vdCBzdXBwb3J0 IGVxdWFsKCksCisgKiBub3QgYmVjYXVzZSBpdCdzIG5vdCBzZW5zaWJsZSBidXQgYmVjYXVz ZSB3ZSBjdXJyZW50bHkgaGF2ZSBubyBuZWVkLgogICogLS0tLS0tLS0tLS0tLS0tLQogICov CiB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdApAQCAtODksNyArOTIsNyBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVkU3RtdAogCS8qIHN0YXRlbWVudCBsb2NhdGlvbiBpbiBzb3VyY2Ug c3RyaW5nIChjb3BpZWQgZnJvbSBRdWVyeSkgKi8KIAlpbnQJCQlzdG10X2xvY2F0aW9uOwkv KiBzdGFydCBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogCWludAkJCXN0bXRfbGVu OwkJLyogbGVuZ3RoIGluIGJ5dGVzOyAwIG1lYW5zICJyZXN0IG9mIHN0cmluZyIgKi8KLX0g UGxhbm5lZFN0bXQ7Cit9IFBsYW5uZWRTdG10IHBnX25vZGVfYXR0cihub19lcXVhbCk7CiAK IC8qIG1hY3JvIGZvciBmZXRjaGluZyB0aGUgUGxhbiBhc3NvY2lhdGVkIHdpdGggYSBTdWJQ bGFuIG5vZGUgKi8KICNkZWZpbmUgZXhlY19zdWJwbGFuX2dldF9wbGFuKHBsYW5uZWRzdG10 LCBzdWJwbGFuKSBcCkBAIC0xNTksNyArMTYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbgog CSAqLwogCUJpdG1hcHNldCAgKmV4dFBhcmFtOwogCUJpdG1hcHNldCAgKmFsbFBhcmFtOwot fSBQbGFuOworfSBQbGFuCQlwZ19ub2RlX2F0dHIoYWJzdHJhY3QsIG5vX2VxdWFsKTsKIAog LyogLS0tLS0tLS0tLS0tLS0tLQogICoJdGhlc2UgYXJlIGRlZmluZWQgdG8gYXZvaWQgY29u ZnVzaW9uIHByb2JsZW1zIHdpdGggImxlZnQiCkBAIC0yODYsMTYgKzI4OSwxNiBAQCB0eXBl ZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBp bmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7 CisJQXR0ck51bWJlciAqc29ydENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1D b2xzKSk7CiAKIAkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlP aWQJCSAgICpzb3J0T3BlcmF0b3JzOworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBjb2xsYXRpb25z ICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsKKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25v ZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIE5VTExTIEZJUlNUL0xBU1Qg ZGlyZWN0aW9ucyAqLwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CisJYm9vbAkgICAqbnVsbHNG aXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBJbmZvIGZv ciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7IE5VTEwgaWYgd2UncmUgbm90IGRvaW5nIHRo YXQgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5lX2luZm87CkBA IC0zMjIsMTEgKzMyNSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBSZWN1cnNpdmVVbmlvbgogCWlu dAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAq LwotCUF0dHJOdW1iZXIgKmR1cENvbElkeDsKKwlBdHRyTnVtYmVyICpkdXBDb2xJZHggcGdf bm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0 b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKmR1cE9wZXJhdG9yczsKLQlPaWQJ CSAgICpkdXBDb2xsYXRpb25zOworCU9pZAkJICAgKmR1cE9wZXJhdG9ycyBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CisJT2lkCQkgICAqZHVwQ29sbGF0aW9ucyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlc3RpbWF0ZWQgbnVtYmVy IG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogCWxvbmcJCW51bUdyb3VwczsKQEAgLTcyNSw2ICs3 MjgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ3VzdG9tU2NhbgogCUxpc3QJICAgKmN1c3RvbV9w cml2YXRlOyAvKiBwcml2YXRlIGRhdGEgZm9yIGN1c3RvbSBjb2RlICovCiAJTGlzdAkgICAq Y3VzdG9tX3NjYW5fdGxpc3Q7CS8qIG9wdGlvbmFsIHRsaXN0IGRlc2NyaWJpbmcgc2NhbiB0 dXBsZSAqLwogCUJpdG1hcHNldCAgKmN1c3RvbV9yZWxpZHM7CS8qIFJUSXMgZ2VuZXJhdGVk IGJ5IHRoaXMgc2NhbiAqLworCisJLyoKKwkgKiBOT1RFOiBUaGUgbWV0aG9kIGZpZWxkIG9m IEN1c3RvbVNjYW4gaXMgcmVxdWlyZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEKKwkgKiBzdGF0 aWMgdGFibGUgb2YgY2FsbGJhY2sgZnVuY3Rpb25zLiAgU28gd2UgZG9uJ3QgY29weSB0aGUg dGFibGUgaXRzZWxmLAorCSAqIGp1c3QgcmVmZXJlbmNlIHRoZSBvcmlnaW5hbCBvbmUuCisJ ICovCiAJY29uc3Qgc3RydWN0IEN1c3RvbVNjYW5NZXRob2RzICptZXRob2RzOwogfSBDdXN0 b21TY2FuOwogCkBAIC03NjIsNyArNzcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pbgogCUpv aW5UeXBlCWpvaW50eXBlOwogCWJvb2wJCWlubmVyX3VuaXF1ZTsKIAlMaXN0CSAgICpqb2lu cXVhbDsJCS8qIEpPSU4gcXVhbHMgKGluIGFkZGl0aW9uIHRvIHBsYW4ucXVhbCkgKi8KLX0g Sm9pbjsKK30gSm9pbgkJcGdfbm9kZV9hdHRyKGFic3RyYWN0KTsKIAogLyogLS0tLS0tLS0t LS0tLS0tLQogICoJCW5lc3QgbG9vcCBqb2luIG5vZGUKQEAgLTc4Niw3ICs3OTUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBOZXN0TG9vcFBhcmFtCiAJTm9kZVRhZwkJdHlwZTsKIAlpbnQJCQlw YXJhbW5vOwkJLyogbnVtYmVyIG9mIHRoZSBQQVJBTV9FWEVDIFBhcmFtIHRvIHNldCAqLwog CVZhcgkJICAgKnBhcmFtdmFsOwkJLyogb3V0ZXItcmVsYXRpb24gVmFyIHRvIGFzc2lnbiB0 byBQYXJhbSAqLwotfSBOZXN0TG9vcFBhcmFtOworfSBOZXN0TG9vcFBhcmFtIHBnX25vZGVf YXR0cihub19lcXVhbCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQltZXJnZSBqb2lu IG5vZGUKQEAgLTgxMiwxNiArODIxLDE2IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlSm9pbgog CS8qIHRoZXNlIGFyZSBhcnJheXMsIGJ1dCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUg bWVyZ2VjbGF1c2VzIGxpc3Q6ICovCiAKIAkvKiBwZXItY2xhdXNlIE9JRHMgb2YgYnRyZWUg b3BmYW1pbGllcyAqLwotCU9pZAkJICAgKm1lcmdlRmFtaWxpZXM7CisJT2lkCQkgICAqbWVy Z2VGYW1pbGllcyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsKIAog CS8qIHBlci1jbGF1c2UgT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lkCQkgICAqbWVyZ2VD b2xsYXRpb25zOworCU9pZAkJICAgKm1lcmdlQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsKIAogCS8qIHBlci1jbGF1c2Ugb3JkZXJpbmcgKEFT QyBvciBERVNDKSAqLwotCWludAkJICAgKm1lcmdlU3RyYXRlZ2llczsKKwlpbnQJCSAgICpt ZXJnZVN0cmF0ZWdpZXMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobWVyZ2VjbGF1c2VzKSk7 CiAKIAkvKiBwZXItY2xhdXNlIG51bGxzIG9yZGVyaW5nICovCi0JYm9vbAkgICAqbWVyZ2VO dWxsc0ZpcnN0OworCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsKIH0gTWVyZ2VKb2luOwogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCkBAIC04NjMsMTAgKzg3MiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vaXplCiAJ aW50CQkJbnVtS2V5czsKIAogCS8qIGhhc2ggb3BlcmF0b3JzIGZvciBlYWNoIGtleSAqLwot CU9pZAkJICAgKmhhc2hPcGVyYXRvcnM7CisJT2lkCQkgICAqaGFzaE9wZXJhdG9ycyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1LZXlzKSk7CiAKIAkvKiBjb2xsYXRpb25zIGZvciBl YWNoIGtleSAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7CisJT2lkCQkgICAqY29sbGF0aW9u cyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1LZXlzKSk7CiAKIAkvKiBjYWNoZSBrZXlz IGluIHRoZSBmb3JtIG9mIGV4cHJzIGNvbnRhaW5pbmcgcGFyYW1ldGVycyAqLwogCUxpc3QJ ICAgKnBhcmFtX2V4cHJzOwpAQCAtOTA1LDE2ICs5MTQsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg U29ydAogCWludAkJCW51bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJn ZXQgbGlzdCAqLwotCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CisJQXR0ck51bWJlciAqc29y dENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBPSURz IG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpzb3J0T3BlcmF0 b3JzOworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo bnVtQ29scykpOwogCiAJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JT2lkCQkgICAqY29s bGF0aW9uczsKKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsKIAogCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwotCWJv b2wJICAgKm51bGxzRmlyc3Q7CisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIo YXJyYXlfc2l6ZShudW1Db2xzKSk7CiB9IFNvcnQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K QEAgLTk0MSwxMSArOTUwLDExIEBAIHR5cGVkZWYgc3RydWN0IEdyb3VwCiAJaW50CQkJbnVt Q29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0 ck51bWJlciAqZ3JwQ29sSWR4OworCUF0dHJOdW1iZXIgKmdycENvbElkeCBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8g Y29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZ3JwT3BlcmF0b3JzOwotCU9pZAkJICAgKmdy cENvbGxhdGlvbnM7CisJT2lkCQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsKKwlPaWQJCSAgICpncnBDb2xsYXRpb25zIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG51bUNvbHMpKTsKIH0gR3JvdXA7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LQpAQCAtOTc2LDExICs5ODUsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnCiAJaW50CQkJbnVt Q29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0 ck51bWJlciAqZ3JwQ29sSWR4OworCUF0dHJOdW1iZXIgKmdycENvbElkeCBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8g Y29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZ3JwT3BlcmF0b3JzOwotCU9pZAkJICAgKmdy cENvbGxhdGlvbnM7CisJT2lkCQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsKKwlPaWQJCSAgICpncnBDb2xsYXRpb25zIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgZ3Jv dXBzIGluIGlucHV0ICovCiAJbG9uZwkJbnVtR3JvdXBzOwpAQCAtMTAxNSwyNSArMTAyNCwy NSBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2cKIAlpbnQJCQlwYXJ0TnVtQ29sczsKIAog CS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAq cGFydENvbElkeDsKKwlBdHRyTnVtYmVyICpwYXJ0Q29sSWR4IHBnX25vZGVfYXR0cihhcnJh eV9zaXplKHBhcnROdW1Db2xzKSk7CiAKIAkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9yIHBh cnRpdGlvbiBjb2x1bW5zICovCi0JT2lkCQkgICAqcGFydE9wZXJhdG9yczsKKwlPaWQJCSAg ICpwYXJ0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7 CiAKIAkvKiBjb2xsYXRpb25zIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLwotCU9pZAkJICAg KnBhcnRDb2xsYXRpb25zOworCU9pZAkJICAgKnBhcnRDb2xsYXRpb25zIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7CiAKIAkvKiBudW1iZXIgb2YgY29sdW1ucyBp biBvcmRlcmluZyBjbGF1c2UgKi8KIAlpbnQJCQlvcmROdW1Db2xzOwogCiAJLyogdGhlaXIg aW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlBdHRyTnVtYmVyICpvcmRDb2xJZHg7 CisJQXR0ck51bWJlciAqb3JkQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG9yZE51 bUNvbHMpKTsKIAogCS8qIGVxdWFsaXR5IG9wZXJhdG9ycyBmb3Igb3JkZXJpbmcgY29sdW1u cyAqLwotCU9pZAkJICAgKm9yZE9wZXJhdG9yczsKKwlPaWQJCSAgICpvcmRPcGVyYXRvcnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwogCiAJLyogY29sbGF0aW9u cyBmb3Igb3JkZXJpbmcgY29sdW1ucyAqLwotCU9pZAkJICAgKm9yZENvbGxhdGlvbnM7CisJ T2lkCQkgICAqb3JkQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShvcmROdW1D b2xzKSk7CiAKIAkvKiBmcmFtZV9jbGF1c2Ugb3B0aW9ucywgc2VlIFdpbmRvd0RlZiAqLwog CWludAkJCWZyYW1lT3B0aW9uczsKQEAgLTEwODYsMTMgKzEwOTUsMTMgQEAgdHlwZWRlZiBz dHJ1Y3QgVW5pcXVlCiAJaW50CQkJbnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4ZXMgaW4g dGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAqdW5pcUNvbElkeDsKKwlBdHRyTnVt YmVyICp1bmlxQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAog CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICp1 bmlxT3BlcmF0b3JzOworCU9pZAkJICAgKnVuaXFPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwogCiAJLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29t cGFyaXNvbnMgKi8KLQlPaWQJCSAgICp1bmlxQ29sbGF0aW9uczsKKwlPaWQJCSAgICp1bmlx Q29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiB9IFVuaXF1 ZTsKIAogLyogLS0tLS0tLS0tLS0tCkBAIC0xMTM3LDE2ICsxMTQ2LDE2IEBAIHR5cGVkZWYg c3RydWN0IEdhdGhlck1lcmdlCiAJaW50CQkJbnVtQ29sczsKIAogCS8qIHRoZWlyIGluZGV4 ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JQXR0ck51bWJlciAqc29ydENvbElkeDsKKwlB dHRyTnVtYmVyICpzb3J0Q29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMp KTsKIAogCS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAqLwotCU9pZAkJ ICAgKnNvcnRPcGVyYXRvcnM7CisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAKIAkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8K LQlPaWQJCSAgICpjb2xsYXRpb25zOworCU9pZAkJICAgKmNvbGxhdGlvbnMgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogTlVMTFMgRklSU1QvTEFTVCBkaXJl Y3Rpb25zICovCi0JYm9vbAkgICAqbnVsbHNGaXJzdDsKKwlib29sCSAgICpudWxsc0ZpcnN0 IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qCiAJICogcGFyYW0g aWQncyBvZiBpbml0cGxhbnMgd2hpY2ggYXJlIHJlZmVycmVkIGF0IGdhdGhlciBtZXJnZSBv ciBvbmUgb2YKQEAgLTExOTcsMTEgKzEyMDYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgU2V0T3AK IAlpbnQJCQludW1Db2xzOwogCiAJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxp c3QgKi8KLQlBdHRyTnVtYmVyICpkdXBDb2xJZHg7CisJQXR0ck51bWJlciAqZHVwQ29sSWR4 IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAogCS8qIGVxdWFsaXR5IG9w ZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpkdXBPcGVyYXRvcnM7Ci0J T2lkCQkgICAqZHVwQ29sbGF0aW9uczsKKwlPaWQJCSAgICpkdXBPcGVyYXRvcnMgcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOworCU9pZAkJICAgKmR1cENvbGxhdGlvbnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCiAJLyogd2hlcmUgaXMgdGhl IGZsYWcgY29sdW1uLCBpZiBhbnkgKi8KIAlBdHRyTnVtYmVyCWZsYWdDb2xJZHg7CkBAIC0x MjUzLDEzICsxMjYyLDEzIEBAIHR5cGVkZWYgc3RydWN0IExpbWl0CiAJaW50CQkJdW5pcU51 bUNvbHM7CiAKIAkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCUF0 dHJOdW1iZXIgKnVuaXFDb2xJZHg7CisJQXR0ck51bWJlciAqdW5pcUNvbElkeCBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29scykpOwogCiAJLyogZXF1YWxpdHkgb3BlcmF0 b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKnVuaXFPcGVyYXRvcnM7CisJT2lk CQkgICAqdW5pcU9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29s cykpOwogCiAJLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMgKi8KLQlP aWQJCSAgICp1bmlxQ29sbGF0aW9uczsKKwlPaWQJCSAgICp1bmlxQ29sbGF0aW9ucyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29scykpOwogfSBMaW1pdDsKIAogCkBAIC0x MzU0LDcgKzEzNjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuUm93TWFyawogCUxvY2tDbGF1 c2VTdHJlbmd0aCBzdHJlbmd0aDsJLyogTG9ja2luZ0NsYXVzZSdzIHN0cmVuZ3RoLCBvciBM Q1NfTk9ORSAqLwogCUxvY2tXYWl0UG9saWN5IHdhaXRQb2xpY3k7CS8qIE5PV0FJVCBhbmQg U0tJUCBMT0NLRUQgb3B0aW9ucyAqLwogCWJvb2wJCWlzUGFyZW50OwkJLyogdHJ1ZSBpZiB0 aGlzIGlzIGEgImR1bW15IiBwYXJlbnQgZW50cnkgKi8KLX0gUGxhblJvd01hcms7Cit9IFBs YW5Sb3dNYXJrIHBnX25vZGVfYXR0cihub19lcXVhbCk7CiAKIAogLyoKQEAgLTEzOTIsNyAr MTQwMSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbwogCU5vZGVUYWcJ CXR5cGU7CiAJTGlzdAkgICAqcHJ1bmVfaW5mb3M7CiAJQml0bWFwc2V0ICAqb3RoZXJfc3Vi cGxhbnM7Ci19IFBhcnRpdGlvblBydW5lSW5mbzsKK30gUGFydGl0aW9uUHJ1bmVJbmZvIHBn X25vZGVfYXR0cihub19lcXVhbCk7CiAKIC8qCiAgKiBQYXJ0aXRpb25lZFJlbFBydW5lSW5m byAtIERldGFpbHMgcmVxdWlyZWQgdG8gYWxsb3cgdGhlIGV4ZWN1dG9yIHRvIHBydW5lCkBA IC0xNDI1LDEzICsxNDM0LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVkUmVsUHJ1 bmVJbmZvCiAJaW50CQkJbnBhcnRzOwogCiAJLyogc3VicGxhbiBpbmRleCBieSBwYXJ0aXRp b24gaW5kZXgsIG9yIC0xICovCi0JaW50CQkgICAqc3VicGxhbl9tYXA7CisJaW50CQkgICAq c3VicGxhbl9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBhcnRzKSk7CiAKIAkvKiBz dWJwYXJ0IGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEgKi8KLQlpbnQJCSAgICpz dWJwYXJ0X21hcDsKKwlpbnQJCSAgICpzdWJwYXJ0X21hcCBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShucGFydHMpKTsKIAogCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgs IG9yIDAgKi8KLQlPaWQJCSAgICpyZWxpZF9tYXA7CisJT2lkCQkgICAqcmVsaWRfbWFwIHBn X25vZGVfYXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwogCiAJLyoKIAkgKiBpbml0aWFsX3By dW5pbmdfc3RlcHMgc2hvd3MgaG93IHRvIHBydW5lIGR1cmluZyBleGVjdXRvciBzdGFydHVw IChpLmUuLApAQCAtMTQ0NCw3ICsxNDUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u ZWRSZWxQcnVuZUluZm8KIAogCS8qIEFsbCBQQVJBTV9FWEVDIFBhcmFtIElEcyBpbiBleGVj X3BydW5pbmdfc3RlcHMgKi8KIAlCaXRtYXBzZXQgICpleGVjcGFyYW1pZHM7Ci19IFBhcnRp dGlvbmVkUmVsUHJ1bmVJbmZvOworfSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBwZ19ub2Rl X2F0dHIobm9fZXF1YWwpOwogCiAvKgogICogQWJzdHJhY3QgTm9kZSB0eXBlIGZvciBwYXJ0 aXRpb24gcHJ1bmluZyBzdGVwcyAodGhlcmUgYXJlIG5vIGNvbmNyZXRlCkBAIC0xNDU2LDcg KzE0NjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0ZXAKIHsKIAlOb2Rl VGFnCQl0eXBlOwogCWludAkJCXN0ZXBfaWQ7Ci19IFBhcnRpdGlvblBydW5lU3RlcDsKK30g UGFydGl0aW9uUHJ1bmVTdGVwIHBnX25vZGVfYXR0cihhYnN0cmFjdCk7CiAKIC8qCiAgKiBQ YXJ0aXRpb25QcnVuZVN0ZXBPcCAtIEluZm9ybWF0aW9uIHRvIHBydW5lIHVzaW5nIGEgc2V0 IG9mIG11dHVhbGx5IEFORGVkCkBAIC0xNDkzLDcgKzE1MDIsNyBAQCB0eXBlZGVmIHN0cnVj dCBQYXJ0aXRpb25QcnVuZVN0ZXBPcAogCUxpc3QJICAgKmV4cHJzOwogCUxpc3QJICAgKmNt cGZuczsKIAlCaXRtYXBzZXQgICpudWxsa2V5czsKLX0gUGFydGl0aW9uUHJ1bmVTdGVwT3A7 Cit9IFBhcnRpdGlvblBydW5lU3RlcE9wIHBnX25vZGVfYXR0cihub19lcXVhbCk7CiAKIC8q CiAgKiBQYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5lIC0gSW5mb3JtYXRpb24gdG8gcHJ1bmUg dXNpbmcgYSBCb29sRXhwciBjbGF1c2UKQEAgLTE1MTMsNyArMTUyMiw3IEBAIHR5cGVkZWYg c3RydWN0IFBhcnRpdGlvblBydW5lU3RlcENvbWJpbmUKIAogCVBhcnRpdGlvblBydW5lQ29t YmluZU9wIGNvbWJpbmVPcDsKIAlMaXN0CSAgICpzb3VyY2Vfc3RlcGlkczsKLX0gUGFydGl0 aW9uUHJ1bmVTdGVwQ29tYmluZTsKK30gUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZSBwZ19u b2RlX2F0dHIobm9fZXF1YWwpOwogCiAKIC8qCkBAIC0xNTMwLDcgKzE1MzksNyBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFuSW52YWxJdGVtCiAJTm9kZVRhZwkJdHlwZTsKIAlpbnQJCQljYWNo ZUlkOwkJLyogYSBzeXNjYWNoZSBJRCwgc2VlIHV0aWxzL3N5c2NhY2hlLmggKi8KIAl1aW50 MzIJCWhhc2hWYWx1ZTsJCS8qIGhhc2ggdmFsdWUgb2Ygb2JqZWN0J3MgY2FjaGUgbG9va3Vw IGtleSAqLwotfSBQbGFuSW52YWxJdGVtOworfSBQbGFuSW52YWxJdGVtIHBnX25vZGVfYXR0 cihub19lcXVhbCk7CiAKIC8qCiAgKiBNb25vdG9uaWNGdW5jdGlvbgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaAppbmRleCA3MzJjMDBjMDk4Li5mZDIyZmUxOWIyIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaApAQCAtNjQsOCArNjQsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIKIHsK IAlOb2RlVGFnCQl0eXBlOwogCi0JLyogdGhlIGNhdGFsb2cgKGRhdGFiYXNlKSBuYW1lLCBv ciBOVUxMICovCi0JY2hhcgkgICAqY2F0YWxvZ25hbWU7CisJLyoKKwkgKiB0aGUgY2F0YWxv ZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEw7IGlnbm9yZWQgZm9yIHJlYWQvd3JpdGUsIHNp bmNlIGl0CisJICogaXMgcHJlc2VudGx5IG5vdCBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bAor CSAqLworCWNoYXIJICAgKmNhdGFsb2duYW1lIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2ln bm9yZSwgcmVhZF9hcyhOVUxMKSk7CiAKIAkvKiB0aGUgc2NoZW1hIG5hbWUsIG9yIE5VTEwg Ki8KIAljaGFyCSAgICpzY2hlbWFuYW1lOwpAQCAtMTU4LDcgKzE2MSw3IEBAIHR5cGVkZWYg c3RydWN0IEludG9DbGF1c2UKIHR5cGVkZWYgc3RydWN0IEV4cHIKIHsKIAlOb2RlVGFnCQl0 eXBlOwotfSBFeHByOworfSBFeHByCQlwZ19ub2RlX2F0dHIoYWJzdHJhY3QpOwogCiAvKgog ICogVmFyIC0gZXhwcmVzc2lvbiBub2RlIHJlcHJlc2VudGluZyBhIHZhcmlhYmxlIChpZSwg YSB0YWJsZSBjb2x1bW4pCkBAIC0yMzMsMTAgKzIzNiwxNSBAQCB0eXBlZGVmIHN0cnVjdCBW YXIKIAkgKi8KIAlJbmRleAkJdmFybGV2ZWxzdXA7CiAKKwkvKgorCSAqIHZhcm5vc3luL3Zh cmF0dG5vc3luIGFyZSBpZ25vcmVkIGZvciBlcXVhbGl0eSwgYmVjYXVzZSBWYXJzIHdpdGgK KwkgKiBkaWZmZXJlbnQgc3ludGFjdGljIGlkZW50aWZpZXJzIGFyZSBzZW1hbnRpY2FsbHkg dGhlIHNhbWUgYXMgbG9uZyBhcworCSAqIHRoZWlyIHZhcm5vL3ZhcmF0dG5vIG1hdGNoLgor CSAqLwogCS8qIHN5bnRhY3RpYyByZWxhdGlvbiBpbmRleCAoMCBpZiB1bmtub3duKSAqLwot CUluZGV4CQl2YXJub3N5bjsKKwlJbmRleAkJdmFybm9zeW4gcGdfbm9kZV9hdHRyKGVxdWFs X2lnbm9yZSk7CiAJLyogc3ludGFjdGljIGF0dHJpYnV0ZSBudW1iZXIgKi8KLQlBdHRyTnVt YmVyCXZhcmF0dG5vc3luOworCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW4gcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CiAKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93 biAqLwogCWludAkJCWxvY2F0aW9uOwpAQCAtMjY1LDcgKzI3Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbnN0CiAJCQkJCQkJCSAqIGluIHRoZSBEYXR1bS4gSWYgZmFsc2UsIHRoZW4gdGhl IERhdHVtCiAJCQkJCQkJCSAqIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgaW5mb3JtYXRp b24uICovCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLwotfSBDb25zdDsKK30gQ29uc3QJCXBnX25vZGVfYXR0cihjdXN0b21fY29w eV9lcXVhbCwgY3VzdG9tX3JlYWRfd3JpdGUpOwogCiAvKgogICogUGFyYW0KQEAgLTM3NCw4 ICszODIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdncmVmCiAJLyogT0lEIG9mIGNvbGxhdGlv biB0aGF0IGZ1bmN0aW9uIHNob3VsZCB1c2UgKi8KIAlPaWQJCQlpbnB1dGNvbGxpZDsKIAot CS8qIHR5cGUgT2lkIG9mIGFnZ3JlZ2F0ZSdzIHRyYW5zaXRpb24gdmFsdWUgKi8KLQlPaWQJ CQlhZ2d0cmFuc3R5cGU7CisJLyoKKwkgKiB0eXBlIE9pZCBvZiBhZ2dyZWdhdGUncyB0cmFu c2l0aW9uIHZhbHVlOyBpZ25vcmVkIGZvciBlcXVhbCBzaW5jZSBpdAorCSAqIG1pZ2h0IG5v dCBiZSBzZXQgeWV0CisJICovCisJT2lkCQkJYWdndHJhbnN0eXBlIHBnX25vZGVfYXR0cihl cXVhbF9pZ25vcmUpOwogCiAJLyogdHlwZSBPaWRzIG9mIGRpcmVjdCBhbmQgYWdncmVnYXRl ZCBhcmdzICovCiAJTGlzdAkgICAqYWdnYXJndHlwZXM7CkBAIC00NTUsMTAgKzQ2NiwxMCBA QCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1bmMKIAlMaXN0CSAgICphcmdzOwogCiAJLyog cmVzc29ydGdyb3VwcmVmcyBvZiBhcmd1bWVudHMgKi8KLQlMaXN0CSAgICpyZWZzOworCUxp c3QJICAgKnJlZnMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBhY3R1YWwg Y29sdW1uIHBvc2l0aW9ucyBzZXQgYnkgcGxhbm5lciAqLwotCUxpc3QJICAgKmNvbHM7CisJ TGlzdAkgICAqY29scyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIHNhbWUg YXMgQWdncmVmLmFnZ2xldmVsc3VwICovCiAJSW5kZXgJCWFnZ2xldmVsc3VwOwpAQCAtNjI1 LDYgKzYzNiw3IEBAIHR5cGVkZWYgc3RydWN0IE5hbWVkQXJnRXhwcgogICogTm90ZSB0aGF0 IG9wZnVuY2lkIGlzIG5vdCBuZWNlc3NhcmlseSBmaWxsZWQgaW4gaW1tZWRpYXRlbHkgb24g Y3JlYXRpb24KICAqIG9mIHRoZSBub2RlLiAgVGhlIHBsYW5uZXIgbWFrZXMgc3VyZSBpdCBp cyB2YWxpZCBiZWZvcmUgcGFzc2luZyB0aGUgbm9kZQogICogdHJlZSB0byB0aGUgZXhlY3V0 b3IsIGJ1dCBkdXJpbmcgcGFyc2luZy9wbGFubmluZyBvcGZ1bmNpZCBjYW4gYmUgMC4KKyAq IFRoZXJlZm9yZSwgZXF1YWwoKSB3aWxsIGFjY2VwdCBhIHplcm8gdmFsdWUgYXMgYmVpbmcg ZXF1YWwgdG8gb3RoZXIgdmFsdWVzLgogICovCiB0eXBlZGVmIHN0cnVjdCBPcEV4cHIKIHsK QEAgLTYzNCw3ICs2NDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPcEV4cHIKIAlPaWQJCQlvcG5v OwogCiAJLyogUEdfUFJPQyBPSUQgb2YgdW5kZXJseWluZyBmdW5jdGlvbiAqLwotCU9pZAkJ CW9wZnVuY2lkOworCU9pZAkJCW9wZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVf aWZfemVybyk7CiAKIAkvKiBQR19UWVBFIE9JRCBvZiByZXN1bHQgdmFsdWUgKi8KIAlPaWQJ CQlvcHJlc3VsdHR5cGU7CkBAIC02OTgsNiArNzEwLDEwIEBAIHR5cGVkZWYgT3BFeHByIE51 bGxJZkV4cHI7CiAgKiBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGFuZCB3b24ndCBiZSB1c2Vk IGR1cmluZyBleGVjdXRpb24uICBGb3IKICAqIG5vbi1oYXNodGFibGUgYmFzZWQgTk9UIElO cywgbmVnZnVuY2lkIHdpbGwgYmUgc2V0IHRvIEludmFsaWRPaWQuICBTZWUKICAqIGNvbnZl cnRfc2FvcF90b19oYXNoZWRfc2FvcCgpLgorICoKKyAqIFNpbWlsYXIgdG8gT3BFeHByLCBv cGZ1bmNpZCwgaGFzaGZ1bmNpZCwgYW5kIG5lZ2Z1bmNpZCBhcmUgbm90IG5lY2Vzc2FyaWx5 CisgKiBmaWxsZWQgaW4gcmlnaHQgYXdheSwgc28gd2lsbCBiZSBpZ25vcmVkIGZvciBlcXVh bGl0eSBpZiB0aGV5IGFyZSBub3Qgc2V0CisgKiB5ZXQuCiAgKi8KIHR5cGVkZWYgc3RydWN0 IFNjYWxhckFycmF5T3BFeHByCiB7CkBAIC03MDcsMTMgKzcyMywxMyBAQCB0eXBlZGVmIHN0 cnVjdCBTY2FsYXJBcnJheU9wRXhwcgogCU9pZAkJCW9wbm87CiAKIAkvKiBQR19QUk9DIE9J RCBvZiBjb21wYXJpc29uIGZ1bmN0aW9uICovCi0JT2lkCQkJb3BmdW5jaWQ7CisJT2lkCQkJ b3BmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsKIAogCS8qIFBH X1BST0MgT0lEIG9mIGhhc2ggZnVuYyBvciBJbnZhbGlkT2lkICovCi0JT2lkCQkJaGFzaGZ1 bmNpZDsKKwlPaWQJCQloYXNoZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVfaWZf emVybyk7CiAKIAkvKiBQR19QUk9DIE9JRCBvZiBuZWdhdG9yIG9mIG9wZnVuY2lkIGZ1bmN0 aW9uIG9yIEludmFsaWRPaWQuICBTZWUgYWJvdmUgKi8KLQlPaWQJCQluZWdmdW5jaWQ7CisJ T2lkCQkJbmVnZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVfaWZfemVybyk7CiAK IAkvKiB0cnVlIGZvciBBTlksIGZhbHNlIGZvciBBTEwgKi8KIAlib29sCQl1c2VPcjsKQEAg LTc0Niw3ICs3NjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCb29sRXhwcgogCUJvb2xFeHByVHlw ZSBib29sb3A7CiAJTGlzdAkgICAqYXJnczsJCQkvKiBhcmd1bWVudHMgdG8gdGhpcyBleHBy ZXNzaW9uICovCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEg aWYgdW5rbm93biAqLwotfSBCb29sRXhwcjsKK30gQm9vbEV4cHIJcGdfbm9kZV9hdHRyKGN1 c3RvbV9yZWFkX3dyaXRlKTsKIAogLyoKICAqIFN1YkxpbmsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3ZhbHVlLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy92YWx1ZS5oCmluZGV4 IGVhZjkzNzA1MWMuLjIwMzQ3ZDM5ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3ZhbHVlLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvdmFsdWUuaApAQCAtMjksNyArMjks NyBAQCB0eXBlZGVmIHN0cnVjdCBJbnRlZ2VyCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlpbnQJ CQlpdmFsOwotfSBJbnRlZ2VyOworfSBJbnRlZ2VyCXBnX25vZGVfYXR0cihzcGVjaWFsX3Jl YWRfd3JpdGUpOwogCiAvKgogICogRmxvYXQgaXMgaW50ZXJuYWxseSByZXByZXNlbnRlZCBh cyBzdHJpbmcuICBVc2luZyBUX0Zsb2F0IGFzIHRoZSBub2RlIHR5cGUKQEAgLTQ2LDI1ICs0 NiwyNSBAQCB0eXBlZGVmIHN0cnVjdCBGbG9hdAogewogCU5vZGVUYWcJCXR5cGU7CiAJY2hh cgkgICAqZnZhbDsKLX0gRmxvYXQ7Cit9IEZsb2F0CQlwZ19ub2RlX2F0dHIoc3BlY2lhbF9y ZWFkX3dyaXRlKTsKIAogdHlwZWRlZiBzdHJ1Y3QgQm9vbGVhbgogewogCU5vZGVUYWcJCXR5 cGU7CiAJYm9vbAkJYm9vbHZhbDsKLX0gQm9vbGVhbjsKK30gQm9vbGVhbglwZ19ub2RlX2F0 dHIoc3BlY2lhbF9yZWFkX3dyaXRlKTsKIAogdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nCiB7CiAJ Tm9kZVRhZwkJdHlwZTsKIAljaGFyCSAgICpzdmFsOwotfSBTdHJpbmc7Cit9IFN0cmluZwlw Z19ub2RlX2F0dHIoc3BlY2lhbF9yZWFkX3dyaXRlKTsKIAogdHlwZWRlZiBzdHJ1Y3QgQml0 U3RyaW5nCiB7CiAJTm9kZVRhZwkJdHlwZTsKIAljaGFyCSAgICpic3ZhbDsKLX0gQml0U3Ry aW5nOworfSBCaXRTdHJpbmcgcGdfbm9kZV9hdHRyKHNwZWNpYWxfcmVhZF93cml0ZSk7CiAK ICNkZWZpbmUgaW50VmFsKHYpCQkoY2FzdE5vZGUoSW50ZWdlciwgdiktPml2YWwpCiAjZGVm aW5lIGZsb2F0VmFsKHYpCQlhdG9mKGNhc3ROb2RlKEZsb2F0LCB2KS0+ZnZhbCkKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVs LmgKaW5kZXggYjc0MTEwNWQxZS4uMDc1YTI2NjlmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTI4Miwx MiArMjgyLDEyIEBAIHR5cGVkZWYgc3RydWN0IEZvcmVpZ25LZXlDYWNoZUluZm8KIAkgKiB0 aGVzZSBhcnJheXMgZWFjaCBoYXZlIG5rZXlzIHZhbGlkIGVudHJpZXM6CiAJICovCiAJLyog Y29scyBpbiByZWZlcmVuY2luZyB0YWJsZSAqLwotCUF0dHJOdW1iZXIJY29ua2V5W0lOREVY X01BWF9LRVlTXTsKKwlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsKIAkvKiBjb2xzIGluIHJlZmVyZW5jZWQgdGFi bGUgKi8KLQlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNdOworCUF0dHJOdW1i ZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtl eXMpKTsKIAkvKiBQSyA9IEZLIG9wZXJhdG9yIE9JRHMgKi8KLQlPaWQJCQljb25wZmVxb3Bb SU5ERVhfTUFYX0tFWVNdOwotfSBGb3JlaWduS2V5Q2FjaGVJbmZvOworCU9pZAkJCWNvbnBm ZXFvcFtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsK K30gRm9yZWlnbktleUNhY2hlSW5mbyBwZ19ub2RlX2F0dHIobm9fZXF1YWwsIG5vX3JlYWQp OwogCiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSBiL3Ny Yy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCmluZGV4IDUyZmY1NmJhODMuLjQyZWFkNWY3ODkg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCisrKyBiL3NyYy90b29s cy9tc3ZjL1NvbHV0aW9uLnBtCkBAIC04MzksNiArODM5LDUyIEBAIEVPRgogCQljbG9zZSgk Y2hzKTsKIAl9CiAKKwlpZiAoSXNOZXdlcignc3JjL2JhY2tlbmQvbm9kZXMvbm9kZS1zdXBw b3J0LXN0YW1wJywKKwkJJ3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwn KSkKKwl7CisJCSMgWFhYIGR1cGxpY2F0ZXMgc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUK KworCQlteSBAbm9kZV9oZWFkZXJzID0gcXcoCisJCQlub2Rlcy9ub2Rlcy5oCisJCQlub2Rl cy9leGVjbm9kZXMuaAorCQkJbm9kZXMvcGxhbm5vZGVzLmgKKwkJCW5vZGVzL3ByaW1ub2Rl cy5oCisJCQlub2Rlcy9wYXRobm9kZXMuaAorCQkJbm9kZXMvZXh0ZW5zaWJsZS5oCisJCQlu b2Rlcy9wYXJzZW5vZGVzLmgKKwkJCW5vZGVzL3JlcGxub2Rlcy5oCisJCQlub2Rlcy92YWx1 ZS5oCisJCQljb21tYW5kcy90cmlnZ2VyLmgKKwkJCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aAorCQkJZm9yZWlnbi9mZHdhcGkuaAorCQkJYWNjZXNzL2FtYXBpLmgKKwkJCWFjY2Vzcy90 YWJsZWFtLmgKKwkJCWFjY2Vzcy90c21hcGkuaAorCQkJdXRpbHMvcmVsLmgKKwkJCW5vZGVz L3N1cHBvcnRub2Rlcy5oCisJCQlleGVjdXRvci90dXB0YWJsZS5oCisJCQlub2Rlcy9sb2Nr b3B0aW9ucy5oCisJCQlhY2Nlc3Mvc2Rpci5oCisJCSk7CisKKwkJY2hkaXIoJ3NyYy9iYWNr ZW5kL25vZGVzJyk7CisKKwkJbXkgQG5vZGVfZmlsZXMgPSBtYXAgeyAiLi4vLi4vLi4vc3Jj L2luY2x1ZGUvJF8iIH0gQG5vZGVfaGVhZGVyczsKKworCQlzeXN0ZW0oInBlcmwgZ2VuX25v ZGVfc3VwcG9ydC5wbCBAbm9kZV9maWxlcyIpOworCQlvcGVuKG15ICRmLCAnPicsICdub2Rl LXN1cHBvcnQtc3RhbXAnKSB8fCBjb25mZXNzICJDb3VsZCBub3QgdG91Y2ggbm9kZS1zdXBw b3J0LXN0YW1wIjsKKwkJY2xvc2UoJGYpOworCQljaGRpcignLi4vLi4vLi4nKTsKKwl9CisK KwlpZiAoSXNOZXdlcigKKwkJCSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJywKKwkJ CSdzcmMvYmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJykpCisJeworCQljb3B5RmlsZSgnc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZXRhZ3MuaCcsCisJCQknc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXRhZ3MuaCcpOworCX0KKwogCW9wZW4obXkgJG8sICc+JywgImRvYy9zcmMvc2dtbC92ZXJz aW9uLnNnbWwiKQogCSAgfHwgY3JvYWsgIkNvdWxkIG5vdCB3cml0ZSB0byB2ZXJzaW9uLnNn bWxcbiI7CiAJcHJpbnQgJG8gPDxFT0Y7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvZXhjbHVkZV9maWxlX3BhdHRlcm5zIGIvc3JjL3Rvb2xzL3BnaW5kZW50L2V4Y2x1ZGVf ZmlsZV9wYXR0ZXJucwppbmRleCBmMDgxODBiMGQwLi5mNWM4ODU3ZTMxIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvZXhjbHVkZV9maWxlX3BhdHRlcm5zCisrKyBiL3NyYy90 b29scy9wZ2luZGVudC9leGNsdWRlX2ZpbGVfcGF0dGVybnMKQEAgLTcsNiArNywxMSBAQCBz cmMvaW5jbHVkZS9wb3J0L2F0b21pY3MvCiAjIFRoaXMgY29udGFpbnMgQysrIGNvbnN0cnVj dHMgdGhhdCBjb25mdXNlIHBnaW5kZW50Lgogc3JjL2luY2x1ZGUvaml0L2xsdm1qaXRcLmgk CiAjCisjIFRoZXNlIGFyZSBnZW5lcmF0ZWQgZmlsZXMgd2l0aCBpbmNvbXBsZXRlIGNvZGUg ZnJhZ21lbnRzIHRoYXQKKyMgY29uZnVzZSBwZ2luZGVudC4KK3NyYy9iYWNrZW5kL25vZGVz L1x3K1wuZnVuY3NcLmMkCitzcmMvYmFja2VuZC9ub2Rlcy9cdytcLnN3aXRjaFwuYyQKKyMK ICMgVGhpcyBjb25mdXNlcyBwZ2luZGVudCwgYW5kIGl0J3MgYSBkZXJpdmVkIGZpbGUgYW55 d2F5Lgogc3JjL2JhY2tlbmQvdXRpbHMvZm1ncnRhYlwuYyQKICMKCmJhc2UtY29tbWl0OiBi ZjFmNGEzNjRkNmM3MmNjNWMzOWE2ZDgxZDE1NmEwMzM1ZmRmMzMyCi0tIAoyLjM2LjEKCg== --------------FGxm4tcbkkIh70V71WhAiW8d--