Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vhzM0-00BrJj-3B for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jan 2026 00:12:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vhzLy-00F5m2-2a for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jan 2026 00:12:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vhzLx-00F5lu-2w for pgsql-hackers@lists.postgresql.org; Tue, 20 Jan 2026 00:12:14 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vhzLt-001KHg-0P for pgsql-hackers@lists.postgresql.org; Tue, 20 Jan 2026 00:12:13 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-432755545fcso2704640f8f.1 for ; Mon, 19 Jan 2026 16:12:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768867927; cv=none; d=google.com; s=arc-20240605; b=gVA+KKQHEjwdX8P3U3UxGNceOJhFT+uzACO5Qxod5hETTvxvtrAta6AcRQCvNEwuh5 Pe9LczyruQJBLekbLBAzPM11IIsycG5p2AiGffZBmuVmFtwz2+La9qnVerBHSg+yCPvX WdrkWYhB8Jr3TxiWmhfCC0OAVIGLrMn5LLKLWvrhoF3CY08t3J9AKE++nbrycR9dvfnu gofmByt9VP+dqZ9qdEByOCSCTH1KIriKj9NZl/dctMB0hNSzA9cKKfagPKtQdPorjczs k762awuMiJR6Y9S89hr3njhaUjfYRg1aOJdNrHDwfeXnYeVoW9whPAQ8LYuiWQrAy47B UudA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=wZe6tbHqGtYTOEUJTbwgZ3KjWXgLEkuWbNLoSQ6Tgy4=; fh=LA2qZ/6HKYFgZLyjr3PAPoC/mq1PVnhF0UcOyu06kOQ=; b=iel35nTlOjLG1JMpNQDwjxyc5Ev5w2l9VixQdzvpTeSoUFyNHK4bRg678ADY5y+hpT 6CaFlYGiOeoy1ZmpvlgmfsaCJKFbU7ziuKBQiL1NVR2sk3knnoTUb/ALr/IO0X/U0Sdf HKRcyKCEXPaRHZn12OCSKnFvO8vV1E0hQlk3gf6nY3y2hnynBzgG8fDUSBEWLK7oK2Zh dDRjtme3MUzCrp3SWUTuIFfUlHSJskDlDzUybK9JVyWgvgaaJcsmi3uNfYuETeZWc5Dk pbmjuLCv6cqGokezDvGF+9nq6mpu7ges5f8OBte3BfV7of+wEmXlFbegh1W77ZTm9M9F XfiA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768867927; x=1769472727; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wZe6tbHqGtYTOEUJTbwgZ3KjWXgLEkuWbNLoSQ6Tgy4=; b=PchwHQYSIVdb+L0T9pETAj5j1VuIcwuv/jqfr+tOf0ZhxQ2cZUf/3FNVs09zH/UJ+U vWVglkCoivP6ufwwSqebltamEgSEL7ovJCZNCVK1z0ob/jaZqPZDCnyCcvOYOJRRvHLb gA2gPJKC8DvfjwypcIdHeUxZkqrOJozqMv6iQXExjDth9Ja3TTrg3FGjBVgpYAY3o7Ka WVekNB1xtzGCDTuaAjqtXHxM3gSQsR5g4R74jy6v0e+AZFK3JOTN2nJLyRdeaOIuMf0+ EiZH5WCQczpnI8m03O23qo0UYABU1wSr4Bk8PmPuvkz3HCvxGndlDrIrbFSOyYEfX1o0 rSHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768867927; x=1769472727; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wZe6tbHqGtYTOEUJTbwgZ3KjWXgLEkuWbNLoSQ6Tgy4=; b=MMpIEZLZHA7/hPRPuPyAJOwIZp7nxKuX6LKbCaicMY27bsNxk8yQDmosex8Lp5sVQV iTm6OEKjAcuv3/jI5aO+of2lkJq2k7SKxK/0JM/7LtA67ebtUHVlxLUft9tqZDjH2vhX n2LcbgeaFVjBMyObkjSPW33WOB96Y4hY/QwGPVeWkuxpLRJObO+5CedvrEDEvKm/q+wM UYGDVL53AmQz2fJuTKguXEJ6dQRlQUTDYnT+rgRyEfUdtaFfXkoEp4rYDQzKaHqo4eGL q4QWRm++2W4aCQOWVJqYra1F6HeGNUUQoLJ2ILOoBql32VN4Y9SSX+WpvC4tzS6xGWeS 1gvg== X-Gm-Message-State: AOJu0Yy+XHeLZGK+zODrvwoTE9jsmHaLkqH2fityTeT+l1awnwfQ2aOt co2ZutWdLTco8pThk6yYxB+hknZWmEOCcSG8xpZZczwCL1t03kdDfKGygvB1Ozu3WcuzKklcXRI nUYYnT7N2kukzHOm7tOxraCICA6Eoe30= X-Gm-Gg: AZuq6aJmgpG51kpJJYZbg82+Z5eF0nVnZDlDoT6vEb2L9Oo+fA2kw1znu/8DOdzKUTe ciRmcsCDh5HF0a+q0ePReFJcQmw+Lpd44GgEPb4oqUhRMZ6740FM7VSdpwy4HvWP/g4kDUj/Z4e YhVMh/nZH1oWs7DnkBmgZUs3n3H9eHUO+Q9DTg8DyssKDdFJthqtf0tvmJf3LHAZLGIofTGJdAo 25E/ucVv+F8/ddwR9xEGOLgpzVBDLt6TECdenr0Pl7gHQXWMS4OErYtJNFbgyULRSnf3DDx7H4E 8yXoG9ZAjX4mheFnFkU6zC6fpGi/oNIgLKLM3D7NiMJ8yaK30ZW3Jz8H6wko6A== X-Received: by 2002:a05:6000:2903:b0:432:c05b:d8c7 with SMTP id ffacd0b85a97d-43569bc7761mr15840724f8f.49.1768867926993; Mon, 19 Jan 2026 16:12:06 -0800 (PST) MIME-Version: 1.0 References: <9A17C43D-7A28-4885-8974-555A40C9523E@gmail.com> In-Reply-To: <9A17C43D-7A28-4885-8974-555A40C9523E@gmail.com> From: David Rowley Date: Tue, 20 Jan 2026 13:11:55 +1300 X-Gm-Features: AZwV_QgD6C_35fh0siVpLwkm1zzzHKtZNV7bDSaaDQcU3vhU7UWUAtP9SErU0jY Message-ID: Subject: Re: More speedups for tuple deformation To: Chao Li Cc: PostgreSQL Developers Content-Type: multipart/mixed; boundary="00000000000071839d0648c6a88b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000071839d0648c6a88b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 19 Jan 2026 at 18:48, Chao Li wrote: > I reviewed the patch and traced some basic workflows. But I haven=E2=80= =99t done a load test to compare performance differences with and without t= his patch, I will do that if I get some bandwidth later. Here comes some re= view comments: > > 1 - tupmacs.h > ``` > + /* Create a mask with all bits beyond natts's bit set to off */ > + mask =3D 0xFF & ((((uint8) 1) << (natts & 7)) - 1); > + byte =3D (~bits[lastByte]) & mask; > ``` > > When I read the code, I got an impression bits[lastByte] might overflow w= hen natts % 8 =3D=3D 0, so I traced the code, then I realized that, this fu= nction is only called when a row has null values, so that, when reaching he= re, natts % 8 !=3D 0, otherwise it should return earlier within the for loo= p. It certainly is possible to get to that part of the code when natts is a multiple of 8 and the tuple contains NULLs after that (we may not be deforming the entire tuple). The code you quoted that's setting "mask" in that case will produce a zero mask, resulting in not finding any NULLs. I don't quite see any risk of overflowing any of the types here. If natts is 16 then effectively the code does 0xFF & ((1 << 0) - 1); so no overflow. Just left shift by 0 bits and bitwise AND with zero, resulting in the mask becoming zero. How about if I write the comment as follows? /* * Create a mask with all bits beyond natts's bit set to off. The code * below will generate a zero mask when natts & 7 =3D=3D 0. When that happe= ns * all bytes that need to be checked were done so in the loop above. The * code below will create an empty mask and end up returning natts. This * has been done to avoid having to write a special case to check if we've * covered all bytes already. */ > In TupleDescFinalize(), given firstNonCachedOffAttr =3D i + 1, firstNonCa= chedOffAttr will never be 0. > But in nocachegetattr(), it checks firstNonCachedOffAttr >=3D 0: > This is kinda inconsistent, and may potentially lead to some confusion to= code readers. I've changed things around so that firstNonCachedOffAttr =3D=3D 0 means there are no attributes with cached offsets. -1 becomes uninitialised. I've added Asserts to check for firstNonCachedOffAttr >=3D 0 with a comment directing anyone who's facing debugging one of those failing to add the missing call to TupleDescFinalize(). Thanks for reviewing. I've attached the v4 patch, which also fixes the LLVM compiler warning that I introduced. David --00000000000071839d0648c6a88b Content-Type: text/plain; charset="US-ASCII"; name="v4-0001-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Disposition: attachment; filename="v4-0001-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mklu44xr0 RnJvbSAyMWNmNzZiOTdmYzhiM2E0N2VmNzFmZjg5MjFjNGIzNzBjMGY3MTRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjRdIFBy ZWNhbGN1bGF0ZSBDb21wYWN0QXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYKClRoaXMgYWxsb3dzIGNv ZGUgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSB0dXBsZSBkZWZvcm0gcm91dGluZXMgd2hpY2gKc2hy aW5rcyBkb3duIHRoZSBjb2RlIGEgbGl0dGxlLCB3aGljaCBjYW4gbWFrZSBpdCBydW4gbW9yZSBx dWlja2x5LgpUaGlzIGFsc28gbWFrZXMgYSBkZWRpY2F0ZWQgZGVmb3JtZXIgbG9vcCB0byBkZWZv cm0gdGhlIHBvcnRpb24gb2YgdGhlCnR1cGxlIHdoaWNoIGhhcyBhIGtub3duIG9mZnNldCwgd2hp Y2ggbWFrZXMgZGVmb3JtaW5nIG11Y2ggZmFzdGVyIHdoZW4KYSBsZWFkaW5nIHNldCBvZiB0aGUg dGFibGUncyBjb2x1bW5zIGFyZSBub24tTlVMTCB2YWx1ZXMgYW5kIGZpeGVkLXdpZHRoCnR5cGVz LgotLS0KIGNvbnRyaWIvZGJsaW5rL2RibGluay5jICAgICAgICAgICAgICAgICAgICAgICB8ICAg MyArCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgIDIg KwogY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYyAgICAgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyAgICAgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jICAgICAgICAgfCAzMjMgKysrKysr LS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMgICAgICAg IHwgMzYxICsrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBk ZXNjLmMgICAgICAgICAgIHwgIDU5ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGls LmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2Fu LmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNl LmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3Mu YyAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfY29weS5jICAg ICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgICAg IHwgICA2ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyAgICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgNCAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jICAgICAgICAgICAgICAgIHwgICAyICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAgICAgICAgICAgICB8IDMwNSArKysrKysr LS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4uYyAgICAgICB8 ICAgMiArCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jICAgICAgICAgfCAg IDYgLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgICAgICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgICAgICAgICAgICAgfCAgIDIg KwogLi4uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jICAgICAgICAgICB8ICAgNSArCiBz cmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYyAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgICAgICAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgMjAgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL2ZtZ3IvZnVuY2FwaS5jICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19mdW5jcy5jICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvYWNjZXNz L2h0dXBfZGV0YWlscy5oICAgICAgICAgICAgIHwgIDE5ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv aXR1cC5oICAgICAgICAgICAgICAgICAgICAgfCAgMjAgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90 dXBkZXNjLmggICAgICAgICAgICAgICAgICB8ICAxNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHVw bWFjcy5oICAgICAgICAgICAgICAgICAgfCAgNjQgKysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv dHVwdGFibGUuaCAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxf Y29tcC5jICAgICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0 YXRzLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3RfcHJlZHRlc3Qv dGVzdF9wcmVkdGVzdC5jICAgICB8ICAgMSArCiA0NiBmaWxlcyBjaGFuZ2VkLCA2NDIgaW5zZXJ0 aW9ucygrKSwgNjM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGJsaW5rL2Ri bGluay5jIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKaW5kZXggOGNiMzE2NjQ5NWMuLmVkMDI2 N2QyMTgzIDEwMDY0NAotLS0gYS9jb250cmliL2RibGluay9kYmxpbmsuYworKysgYi9jb250cmli L2RibGluay9kYmxpbmsuYwpAQCAtODgxLDYgKzg4MSw3IEBAIG1hdGVyaWFsaXplUmVzdWx0KEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBQR2Nvbm4gKmNvbm4sIFBHcmVzdWx0ICpyZXMpCiAJCXR1 cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5 KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic3RhdHVzIiwKIAkJCQkJCSAgIFRFWFRPSUQsIC0x LCAwKTsKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCW50dXBsZXMgPSAxOwogCQlu ZmllbGRzID0gMTsKIAl9CkBAIC0xMDQ1LDYgKzEwNDYsNyBAQCBtYXRlcmlhbGl6ZVF1ZXJ5UmVz dWx0KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSAxLCAic3RhdHVzIiwKIAkJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7 CiAJCQlhdHRpbm1ldGEgPSBUdXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOworCQkJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocnNpbmZvLT5lY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5KTsKIAkJ CXR1cHN0b3JlID0gdHVwbGVzdG9yZV9iZWdpbl9oZWFwKHRydWUsIGZhbHNlLCB3b3JrX21lbSk7 CkBAIC0xNTM0LDYgKzE1MzYsNyBAQCBkYmxpbmtfZ2V0X3BrZXkoUEdfRlVOQ1RJT05fQVJHUykK IAkJICogQyBzdHJpbmdzCiAJCSAqLwogCQlhdHRpbm1ldGEgPSBUdXBsZURlc2NHZXRBdHRJbk1l dGFkYXRhKHR1cGRlc2MpOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+YXR0aW5tZXRhID0gYXR0aW5tZXRhOwogCiAJCWlmICgocmVzdWx0cyAhPSBOVUxMKSAmJiAo aW5kbmtleWF0dHMgPiAwKSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdf YnVmZmVyY2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGVfcGFnZXMuYwppbmRleCBkY2JhM2ZiNTQ3My4uMmZkZjVhMzQxZjYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTE3NCw2ICsxNzQsNyBA QCBwZ19idWZmZXJjYWNoZV9wYWdlcyhQR19GVU5DVElPTl9BUkdTKQogCQkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDksICJwaW5uaW5nX2JhY2tlbmRzIiwKIAkJ CQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwbGVkZXNj KTsKIAkJZmN0eC0+dHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGxlZGVzYyk7CiAKIAkJLyog QWxsb2NhdGUgTkJ1ZmZlcnMgd29ydGggb2YgQnVmZmVyQ2FjaGVQYWdlc1JlYyByZWNvcmRzLiAq LwpAQCAtNDQyLDYgKzQ0Myw3IEBAIHBnX2J1ZmZlcmNhY2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGluY2x1ZGVfbnVtYSkKIAkJVHVwbGVEZXNjSW5p dEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDMsICJudW1hX25vZGUiLAogCQkJCQkJICAg SU5UNE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZj dHgtPnR1cGRlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCQlmY3R4LT5pbmNsdWRl X251bWEgPSBpbmNsdWRlX251bWE7CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0 eS9wZ192aXNpYmlsaXR5LmMgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5j CmluZGV4IDliYzNhNzg0YmY3Li5kZmFiMGI2NGNmNSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192 aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYworKysgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdf dmlzaWJpbGl0eS5jCkBAIC00NjksNiArNDY5LDggQEAgcGdfdmlzaWJpbGl0eV90dXBkZXNjKGJv b2wgaW5jbHVkZV9ibGtubywgYm9vbCBpbmNsdWRlX3BkKQogCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKythLCAicGRfYWxsX3Zpc2libGUiLCBCT09MT0lELCAtMSwgMCk7CiAJQXNzZXJ0 KGEgPT0gbWF4YXR0cik7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCXJldHVy biBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90 dXBsZS5jCmluZGV4IDcwNjM4N2UzNmQ2Li43ZjE1MGRmOWVlNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW5fdHVwbGUuYwpAQCAtODQsNiArODQsNyBAQCBicnR1cGxlX2Rpc2tfdHVwZGVzYyhC cmluRGVzYyAqYnJkZXNjKQogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlicmRlc2MtPmJkX2Rpc2t0ZGVzYyA9IHR1 cGRlc2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2hlYXB0 dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYwppbmRleCAxMWJl YzIwZTgyZS4uODViNDJmMzMzMTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vaGVhcHR1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUu YwpAQCAtNDk3LDIwICs0OTcsOCBAQCBoZWFwX2F0dGlzbnVsbChIZWFwVHVwbGUgdHVwLCBpbnQg YXR0bnVtLCBUdXBsZURlc2MgdHVwbGVEZXNjKQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCW5v Y2FjaGVnZXRhdHRyCiAgKgotICoJCVRoaXMgb25seSBnZXRzIGNhbGxlZCBmcm9tIGZhc3RnZXRh dHRyKCksIGluIGNhc2VzIHdoZXJlIHdlCi0gKgkJY2FuJ3QgdXNlIGEgY2FjaGVvZmZzZXQgYW5k IHRoZSB2YWx1ZSBpcyBub3QgbnVsbC4KLSAqCi0gKgkJVGhpcyBjYWNoZXMgYXR0cmlidXRlIG9m ZnNldHMgaW4gdGhlIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgotICoKLSAqCQlBbiBhbHRlcm5hdGl2 ZSB3YXkgdG8gc3BlZWQgdGhpbmdzIHVwIHdvdWxkIGJlIHRvIGNhY2hlIG9mZnNldHMKLSAqCQl3 aXRoIHRoZSB0dXBsZSwgYnV0IHRoYXQgc2VlbXMgbW9yZSBkaWZmaWN1bHQgdW5sZXNzIHlvdSB0 YWtlCi0gKgkJdGhlIHN0b3JhZ2UgaGl0IG9mIGFjdHVhbGx5IHB1dHRpbmcgdGhvc2Ugb2Zmc2V0 cyBpbnRvIHRoZQotICoJCXR1cGxlIHlvdSBzZW5kIHRvIGRpc2suICBZdWNrLgotICoKLSAqCQlU aGlzIHNjaGVtZSB3aWxsIGJlIHNsaWdodGx5IHNsb3dlciB0aGFuIHRoYXQsIGJ1dCBzaG91bGQK LSAqCQlwZXJmb3JtIHdlbGwgZm9yIHF1ZXJpZXMgd2hpY2ggaGl0IGxhcmdlICMncyBvZiB0dXBs ZXMuICBBZnRlcgotICoJCXlvdSBjYWNoZSB0aGUgb2Zmc2V0cyBvbmNlLCBleGFtaW5pbmcgYWxs IHRoZSBvdGhlciB0dXBsZXMgdXNpbmcKLSAqCQl0aGUgc2FtZSBhdHRyaWJ1dGUgZGVzY3JpcHRv ciB3aWxsIGdvIG11Y2ggcXVpY2tlci4gLWNpbSA1LzQvOTEKKyAqCQlUaGlzIG9ubHkgZ2V0cyBj YWxsZWQgZnJvbSBmYXN0Z2V0YXR0cigpLCBpbiBjYXNlcyB3aGVyZSB0aGUKKyAqCQlhdHRjYWNo ZW9mZiBpcyBub3Qgc2V0LgogICoKICAqCQlOT1RFOiBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhp cyBjb2RlLCBzZWUgYWxzbyBoZWFwX2RlZm9ybV90dXBsZS4KICAqCQlBbHNvIHNlZSBub2NhY2hl X2luZGV4X2dldGF0dHIsIHdoaWNoIGlzIHRoZSBzYW1lIGNvZGUgZm9yIGluZGV4CkBAIC01MjIs MTk0ICs1MTAsMTA0IEBAIG5vY2FjaGVnZXRhdHRyKEhlYXBUdXBsZSB0dXAsCiAJCQkgICBpbnQg YXR0bnVtLAogCQkJICAgVHVwbGVEZXNjIHR1cGxlRGVzYykKIHsKKwlDb21wYWN0QXR0cmlidXRl ICpjYXR0cjsKIAlIZWFwVHVwbGVIZWFkZXIgdGQgPSB0dXAtPnRfZGF0YTsKIAljaGFyCSAgICp0 cDsJCQkJLyogcHRyIHRvIGRhdGEgcGFydCBvZiB0dXBsZSAqLwogCWJpdHM4CSAgICpicCA9IHRk LT50X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwotCWJvb2wJCXNsb3cg PSBmYWxzZTsJLyogZG8gd2UgaGF2ZSB0byB3YWxrIGF0dHJzPyAqLwogCWludAkJCW9mZjsJCQkv KiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAqLworCWludAkJCXN0YXJ0QXR0cjsKKwlpbnQJ CQlmaXJzdG51bGxhdHRyOworCWJvb2wJCWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVw KTsKIAotCS8qIC0tLS0tLS0tLS0tLS0tLS0KLQkgKgkgVGhyZWUgY2FzZXM6Ci0JICoKLQkgKgkg MTogTm8gbnVsbHMgYW5kIG5vIHZhcmlhYmxlLXdpZHRoIGF0dHJpYnV0ZXMuCi0JICoJIDI6IEhh cyBhIG51bGwgb3IgYSB2YXItd2lkdGggQUZURVIgYXR0LgotCSAqCSAzOiBIYXMgbnVsbHMgb3Ig dmFyLXdpZHRocyBCRUZPUkUgYXR0LgotCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KKwkvKiBE aWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6ZSgpPyAqLworCUFzc2Vy dCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+PSAwKTsKIAorCS8qCisJICogSWYg dGhlcmUgYXJlIG5vIE5VTExzIGJlZm9yZSB0aGUgcmVxdWlyZWQgYXR0bnVtLCB0aGVuIHdlIGNh biBzdGFydCBhdAorCSAqIHRoZSBoaWdoZXN0IGF0dHJpYnV0ZSB3aXRoIGEga25vd24gb2Zmc2V0 LCBvciB0aGUgZmlyc3QgYXR0cmlidXRlIGlmCisJICogbm9uZSBoYXZlIGEgY2FjaGVkIG9mZnNl dC4gIElmIHRoZSB0dXBsZSBoYXMgbm8gdmFyaWFibGUgd2lkdGggdHlwZXMsCisJICogdGhlbiB3 ZSBjYW4gdXNlIGEgc2xpZ2h0bHkgY2hlYXBlciBtZXRob2Qgb2Ygb2Zmc2V0IGNhbGN1bGF0aW9u LCBhcyB3ZQorCSAqIGp1c3QgbmVlZCB0byBhZGQgdGhlIGF0dGxlbiB0byB0aGUgYWxpZ25lZCBv ZmZzZXQgd2hlbiBza2lwcGluZyBvdmVyCisJICogY29sdW1ucy4gIFdoZW4gdGhlIHR1cGxlIGNv bnRhaW5zIHZhcmlhYmxlLXdpZHRoIHR5cGVzLCB3ZSBtdXN0IHVzZQorCSAqIGF0dF9hZGRsZW5n dGhfcG9pbnRlcigpLCB3aGljaCBkb2VzIGEgYml0IG1vcmUgYnJhbmNoaW5nIGFuZCBpcworCSAq IHNsaWdodGx5IGxlc3MgZWZmaWNpZW50LgorCSAqLwogCWF0dG51bS0tOwogCi0JaWYgKCFIZWFw VHVwbGVOb051bGxzKHR1cCkpCi0JewotCQkvKgotCQkgKiB0aGVyZSdzIGEgbnVsbCBzb21ld2hl cmUgaW4gdGhlIHR1cGxlCi0JCSAqCi0JCSAqIGNoZWNrIHRvIHNlZSBpZiBhbnkgcHJlY2VkaW5n IGJpdHMgYXJlIG51bGwuLi4KLQkJICovCi0JCWludAkJCWJ5dGUgPSBhdHRudW0gPj4gMzsKLQkJ aW50CQkJZmluYWxiaXQgPSBhdHRudW0gJiAweDA3OwotCi0JCS8qIGNoZWNrIGZvciBudWxscyAi YmVmb3JlIiBmaW5hbCBiaXQgb2YgbGFzdCBieXRlICovCi0JCWlmICgofmJwW2J5dGVdKSAmICgo MSA8PCBmaW5hbGJpdCkgLSAxKSkKLQkJCXNsb3cgPSB0cnVlOwotCQllbHNlCi0JCXsKLQkJCS8q IGNoZWNrIGZvciBudWxscyBpbiBhbnkgImVhcmxpZXIiIGJ5dGVzICovCi0JCQlpbnQJCQlpOwor CWlmIChoYXNudWxscykKKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgYXR0 bnVtKTsKKwllbHNlCisJCWZpcnN0bnVsbGF0dHIgPSBhdHRudW07CiAKLQkJCWZvciAoaSA9IDA7 IGkgPCBieXRlOyBpKyspCi0JCQl7Ci0JCQkJaWYgKGJwW2ldICE9IDB4RkYpCi0JCQkJewotCQkJ CQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9CisJaWYgKHR1cGxl RGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyID4gMCkKKwl7CisJCXN0YXJ0QXR0ciA9IE1pbih0 dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciAtIDEsIGZpcnN0bnVsbGF0dHIpOworCQlv ZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIHN0YXJ0QXR0ciktPmF0dGNhY2hl b2ZmOworCX0KKwllbHNlCisJeworCQlzdGFydEF0dHIgPSAwOworCQlvZmYgPSAwOwogCX0KIAog CXRwID0gKGNoYXIgKikgdGQgKyB0ZC0+dF9ob2ZmOwogCi0JaWYgKCFzbG93KQorCWlmIChoYXNu dWxscykKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKKwkJZm9yIChpbnQgaSA9IHN0YXJ0 QXR0cjsgaSA8IGF0dG51bTsgaSsrKQorCQl7CisJCQlDb21wYWN0QXR0cmlidXRlICphdHQ7CiAK LQkJLyoKLQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGFyZSBubyBudWxscyB1cCB0byBhbmQg aW5jbHVkaW5nIHRoZSB0YXJnZXQKLQkJICogYXR0cmlidXRlLiAgSWYgd2UgaGF2ZSBhIGNhY2hl ZCBvZmZzZXQsIHdlIGNhbiB1c2UgaXQuCi0JCSAqLwotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0 QXR0cih0dXBsZURlc2MsIGF0dG51bSk7Ci0JCWlmIChhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0J CQlyZXR1cm4gZmV0Y2hhdHQoYXR0LCB0cCArIGF0dC0+YXR0Y2FjaGVvZmYpOworCQkJaWYgKGF0 dF9pc251bGwoaSwgYnApKQorCQkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIE90aGVyd2lzZSwg Y2hlY2sgZm9yIG5vbi1maXhlZC1sZW5ndGggYXR0cnMgdXAgdG8gYW5kIGluY2x1ZGluZwotCQkg KiB0YXJnZXQuICBJZiB0aGVyZSBhcmVuJ3QgYW55LCBpdCdzIHNhZmUgdG8gY2hlYXBseSBpbml0 aWFsaXplIHRoZQotCQkgKiBjYWNoZWQgb2Zmc2V0cyBmb3IgdGhlc2UgYXR0cnMuCi0JCSAqLwot CQlpZiAoSGVhcFR1cGxlSGFzVmFyV2lkdGgodHVwKSkKLQkJewotCQkJaW50CQkJajsKKwkJCWF0 dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CiAKLQkJCWZvciAoaiA9IDA7 IGogPD0gYXR0bnVtOyBqKyspCi0JCQl7Ci0JCQkJaWYgKFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgaiktPmF0dGxlbiA8PSAwKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJ CWJyZWFrOwotCQkJCX0KLQkJCX0KKwkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAor CQkJCQkJCQkJICBhdHQtPmF0dGFsaWduYnksCisJCQkJCQkJCQkgIGF0dC0+YXR0bGVuLAorCQkJ CQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBh dHQtPmF0dGxlbiwgdHAgKyBvZmYpOwogCQl9CisJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBhdHRudW0pOworCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwK KwkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJICBjYXR0ci0+YXR0bGVuLAor CQkJCQkJCQkgIHRwICsgb2ZmKTsKIAl9Ci0KLQlpZiAoIXNsb3cpCisJZWxzZSBpZiAoIUhlYXBU dXBsZUhhc1ZhcldpZHRoKHR1cCkpCiAJewotCQlpbnQJCQluYXR0cyA9IHR1cGxlRGVzYy0+bmF0 dHM7Ci0JCWludAkJCWogPSAxOwotCi0JCS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZl IGEgdHVwbGUgd2l0aCBubyBudWxscyBvciB2YXItd2lkdGhzIHVwIHRvCi0JCSAqIGFuZCBpbmNs dWRpbmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCBvZmZz ZXQKLQkJICogLi4uIG9ubHkgd2UgZG9uJ3QgaGF2ZSBpdCB5ZXQsIG9yIHdlJ2Qgbm90IGhhdmUg Z290IGhlcmUuICBTaW5jZQotCQkgKiBpdCdzIGNoZWFwIHRvIGNvbXB1dGUgb2Zmc2V0cyBmb3Ig Zml4ZWQtd2lkdGggY29sdW1ucywgd2UgdGFrZSB0aGUKLQkJICogb3Bwb3J0dW5pdHkgdG8gaW5p dGlhbGl6ZSB0aGUgY2FjaGVkIG9mZnNldHMgZm9yICphbGwqIHRoZSBsZWFkaW5nCi0JCSAqIGZp eGVkLXdpZHRoIGNvbHVtbnMsIGluIGhvcGUgb2YgYXZvaWRpbmcgZnV0dXJlIHZpc2l0cyB0byB0 aGlzCi0JCSAqIHJvdXRpbmUuCi0JCSAqLwotCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2MsIDApLT5hdHRjYWNoZW9mZiA9IDA7Ci0KLQkJLyogd2UgbWlnaHQgaGF2ZSBzZXQgc29tZSBv ZmZzZXRzIGluIHRoZSBzbG93IHBhdGggcHJldmlvdXNseSAqLwotCQl3aGlsZSAoaiA8IG5hdHRz ICYmIFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiktPmF0dGNhY2hlb2ZmID4gMCkK LQkJCWorKzsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGogLSAx KS0+YXR0Y2FjaGVvZmYgKwotCQkJVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqIC0g MSktPmF0dGxlbjsKLQotCQlmb3IgKDsgaiA8IG5hdHRzOyBqKyspCisJCWZvciAoaW50IGkgPSBz dGFydEF0dHI7IGkgPCBhdHRudW07IGkrKykKIAkJewotCQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0 ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKTsKLQotCQkJaWYgKGF0dC0+YXR0 bGVuIDw9IDApCi0JCQkJYnJlYWs7CisJCQlDb21wYWN0QXR0cmlidXRlICphdHQgPSBUdXBsZURl c2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCiAJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGln bmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsK LQogCQkJb2ZmICs9IGF0dC0+YXR0bGVuOwogCQl9Ci0KLQkJQXNzZXJ0KGogPiBhdHRudW0pOwot Ci0JCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKS0+YXR0Y2Fj aGVvZmY7CisJCWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0p OworCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnkpOwog CX0KIAllbHNlCiAJewotCQlib29sCQl1c2VjYWNoZSA9IHRydWU7Ci0JCWludAkJCWk7Ci0KLQkJ LyoKLQkJICogTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRvIHdhbGsgdGhlIHR1cGxlIENBUkVG VUxMWS4gIEJ1dCB3ZSBzdGlsbAotCQkgKiBtaWdodCBiZSBhYmxlIHRvIGNhY2hlIHNvbWUgb2Zm c2V0cyBmb3IgbmV4dCB0aW1lLgotCQkgKgotCQkgKiBOb3RlIC0gVGhpcyBsb29wIGlzIGEgbGl0 dGxlIHRyaWNreS4gIEZvciBlYWNoIG5vbi1udWxsIGF0dHJpYnV0ZSwKLQkJICogd2UgaGF2ZSB0 byBmaXJzdCBhY2NvdW50IGZvciBhbGlnbm1lbnQgcGFkZGluZyBiZWZvcmUgdGhlIGF0dHIsCi0J CSAqIHRoZW4gYWR2YW5jZSBvdmVyIHRoZSBhdHRyIGJhc2VkIG9uIGl0cyBsZW5ndGguICBOdWxs cyBoYXZlIG5vCi0JCSAqIHN0b3JhZ2UgYW5kIG5vIGFsaWdubWVudCBwYWRkaW5nIGVpdGhlci4g IFdlIGNhbiB1c2Uvc2V0Ci0JCSAqIGF0dGNhY2hlb2ZmIHVudGlsIHdlIHJlYWNoIGVpdGhlciBh IG51bGwgb3IgYSB2YXItd2lkdGggYXR0cmlidXRlLgotCQkgKi8KLQkJb2ZmID0gMDsKLQkJZm9y IChpID0gMDs7IGkrKykJCS8qIGxvb3AgZXhpdCBpcyBhdCAiYnJlYWsiICovCisJCWZvciAoaW50 IGkgPSBzdGFydEF0dHI7IGkgPCBhdHRudW07IGkrKykKIAkJewogCQkJQ29tcGFjdEF0dHJpYnV0 ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKIAotCQkJaWYgKEhl YXBUdXBsZUhhc051bGxzKHR1cCkgJiYgYXR0X2lzbnVsbChpLCBicCkpCi0JCQl7Ci0JCQkJdXNl Y2FjaGUgPSBmYWxzZTsKLQkJCQljb250aW51ZTsJCS8qIHRoaXMgY2Fubm90IGJlIHRoZSB0YXJn ZXQgYXR0ICovCi0JCQl9Ci0KLQkJCS8qIElmIHdlIGtub3cgdGhlIG5leHQgb2Zmc2V0LCB3ZSBj YW4gc2tpcCB0aGUgcmVzdCAqLwotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0Y2FjaGVvZmYg Pj0gMCkKLQkJCQlvZmYgPSBhdHQtPmF0dGNhY2hlb2ZmOwotCQkJZWxzZSBpZiAoYXR0LT5hdHRs ZW4gPT0gLTEpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBjYW4gb25seSBjYWNoZSB0aGUgb2Zm c2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJCSAqIG9mZnNldCBpcyBhbHJl YWR5IHN1aXRhYmx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQgYmUKLQkJCQkgKiBubyBw YWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4gdGhlIG9mZnNldCB3aWxsIGJlIHZhbGlkIGZvcgot CQkJCSAqIGVpdGhlciBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1ZS4KLQkJCQkgKi8KLQkJ CQlpZiAodXNlY2FjaGUgJiYKLQkJCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBh dHQtPmF0dGFsaWduYnkpKQotCQkJCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQkJCWVsc2UK LQkJCQl7Ci0JCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWdu YnksIC0xLAotCQkJCQkJCQkJCQkgIHRwICsgb2ZmKTsKLQkJCQkJdXNlY2FjaGUgPSBmYWxzZTsK LQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogbm90IHZhcmxlbmEsIHNvIHNhZmUg dG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGln bmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KTsKLQotCQkJCWlmICh1c2VjYWNoZSkKLQkJCQkJYXR0 LT5hdHRjYWNoZW9mZiA9IG9mZjsKLQkJCX0KLQotCQkJaWYgKGkgPT0gYXR0bnVtKQotCQkJCWJy ZWFrOwotCisJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAgYXR0 LT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBhdHQtPmF0dGxlbiwKKwkJCQkJCQkJCSAgdHAgKyBv ZmYpOwogCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgYXR0LT5hdHRsZW4sIHRw ICsgb2ZmKTsKIAotCQkJaWYgKHVzZWNhY2hlICYmIGF0dC0+YXR0bGVuIDw9IDApCi0JCQkJdXNl Y2FjaGUgPSBmYWxzZTsKIAkJfQorCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxl RGVzYywgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJ CSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJ ICB0cCArIG9mZik7CiAJfQogCi0JcmV0dXJuIGZldGNoYXR0KFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgYXR0bnVtKSwgdHAgKyBvZmYpOworCXJldHVybiBmZXRjaGF0dChjYXR0ciwg dHAgKyBvZmYpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzU0LDcwICsxMjUyLDkx IEBAIGhlYXBfZGVmb3JtX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGxlRGVz YywKIAljaGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KIAl1aW50MzIJCW9m ZjsJCQkvKiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwogCWJpdHM4CSAgICpicCA9IHR1cC0+dF9i aXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4gdHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFs c2U7CS8qIGNhbiB3ZSB1c2Uvc2V0IGF0dGNhY2hlb2ZmPyAqLworCWludAkJCWNhY2hlb2ZmYXR0 cnM7CisJaW50CQkJZmlyc3RudWxsYXR0cjsKIAogCW5hdHRzID0gSGVhcFR1cGxlSGVhZGVyR2V0 TmF0dHModHVwKTsKIAorCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0Zp bmFsaXplKCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyID49 IDApOworCiAJLyoKIAkgKiBJbiBpbmhlcml0YW5jZSBzaXR1YXRpb25zLCBpdCBpcyBwb3NzaWJs ZSB0aGF0IHRoZSBnaXZlbiB0dXBsZSBhY3R1YWxseQogCSAqIGhhcyBtb3JlIGZpZWxkcyB0aGFu IHRoZSBjYWxsZXIgaXMgZXhwZWN0aW5nLiAgRG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mCiAJICog dGhlIGNhbGxlcidzIGFycmF5cy4KIAkgKi8KIAluYXR0cyA9IE1pbihuYXR0cywgdGRlc2NfbmF0 dHMpOworCWNhY2hlb2ZmYXR0cnMgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0 dHIsIG5hdHRzKTsKIAotCXRwID0gKGNoYXIgKikgdHVwICsgdHVwLT50X2hvZmY7CisJaWYgKGhh c251bGxzKQorCXsKKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgbmF0dHMp OworCQljYWNoZW9mZmF0dHJzID0gTWluKGNhY2hlb2ZmYXR0cnMsIGZpcnN0bnVsbGF0dHIpOwor CX0KKwllbHNlCisJCWZpcnN0bnVsbGF0dHIgPSBuYXR0czsKIAorCXRwID0gKGNoYXIgKikgdHVw ICsgdHVwLT50X2hvZmY7CiAJb2ZmID0gMDsKIAotCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwg bmF0dHM7IGF0dG51bSsrKQorCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgY2FjaGVvZmZhdHRy czsgYXR0bnVtKyspCisJeworCQlDb21wYWN0QXR0cmlidXRlICpjYXR0ciA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKworCQlBc3NlcnQoY2F0dHItPmF0dGNhY2hl b2ZmID49IDApOworCisJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hfYXR0KHRwICsgY2F0dHItPmF0 dGNhY2hlb2ZmLCBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCSAgIGNhdHRyLT5hdHRsZW4pOwor CQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQlvZmYgPSBjYXR0ci0+YXR0Y2FjaGVvZmYgKyBj YXR0ci0+YXR0bGVuOworCX0KKworCWZvciAoOyBhdHRudW0gPCBmaXJzdG51bGxhdHRyOyBhdHRu dW0rKykKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQgPSBUdXBsZURlc2NDb21wYWN0 QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyID0gVHVw bGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOwogCi0JCWlmIChoYXNudWxscyAm JiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQlpZiAoY2F0dHItPmF0dGxlbiA9PSAtMSkKKwkJ CW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwgLTEsCisJ CQkJCQkJCQkgIHRwICsgb2ZmKTsKKwkJZWxzZQogCQl7Ci0JCQl2YWx1ZXNbYXR0bnVtXSA9IChE YXR1bSkgMDsKLQkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyog Y2FuJ3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KLQkJCWNvbnRpbnVlOworCQkJLyogbm90 IHZhcmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KKwkJCW9mZiA9 IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSk7CiAJCX0KIAogCQlp c251bGxbYXR0bnVtXSA9IGZhbHNlOworCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRy LCB0cCArIG9mZik7CisKKwkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHIt PmF0dGxlbiwgdHAgKyBvZmYpOworCX0KKworCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVt KyspCisJeworCQlDb21wYWN0QXR0cmlidXRlICpjYXR0cjsKKworCQlBc3NlcnQoaGFzbnVsbHMp OwogCi0JCWlmICghc2xvdyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJb2ZmID0g dGhpc2F0dC0+YXR0Y2FjaGVvZmY7Ci0JCWVsc2UgaWYgKHRoaXNhdHQtPmF0dGxlbiA9PSAtMSkK KwkJaWYgKGF0dF9pc251bGwoYXR0bnVtLCBicCkpCiAJCXsKLQkJCS8qCi0JCQkgKiBXZSBjYW4g b25seSBjYWNoZSB0aGUgb2Zmc2V0IGZvciBhIHZhcmxlbmEgYXR0cmlidXRlIGlmIHRoZQotCQkJ ICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3Vs ZCBiZSBubwotCQkJICogcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQgd2ls bCBiZSB2YWxpZCBmb3IgZWl0aGVyCi0JCQkgKiBhbiBhbGlnbmVkIG9yIHVuYWxpZ25lZCB2YWx1 ZS4KLQkJCSAqLwotCQkJaWYgKCFzbG93ICYmCi0JCQkJb2ZmID09IGF0dF9ub21pbmFsX2FsaWdu Ynkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9 IG9mZjsKLQkJCWVsc2UKLQkJCXsKLQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwg dGhpc2F0dC0+YXR0YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJc2xv dyA9IHRydWU7Ci0JCQl9CisJCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKKwkJCWlzbnVs bFthdHRudW1dID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJY2F0dHIgPSBUdXBsZURl c2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCWlmIChjYXR0ci0+YXR0bGVuID09 IC0xKQorCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5 LCAtMSwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOwogCQllbHNlCiAJCXsKIAkJCS8qIG5vdCB2YXJs ZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQlvZmYgPSBhdHRf bm9taW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7Ci0KLQkJCWlmICghc2xv dykKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9IG9mZjsKKwkJCW9mZiA9IGF0dF9ub21pbmFs X2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSk7CiAJCX0KIAotCQl2YWx1ZXNbYXR0bnVt XSA9IGZldGNoYXR0KHRoaXNhdHQsIHRwICsgb2ZmKTsKLQotCQlvZmYgPSBhdHRfYWRkbGVuZ3Ro X3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKKwkJaXNudWxsW2F0dG51 bV0gPSBmYWxzZTsKKwkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYp OwogCi0JCWlmICh0aGlzYXR0LT5hdHRsZW4gPD0gMCkKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2Fu J3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KKwkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2lu dGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOwogCX0KIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9jb21tb24vaW5kZXh0dXBsZS5jCmluZGV4IGQ3YzhjNTNmZDhkLi43ZTFiZGU5NzAzYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKQEAgLTIyMywxOCArMjIzLDYg QEAgaW5kZXhfZm9ybV90dXBsZV9jb250ZXh0KFR1cGxlRGVzYyB0dXBsZURlc2NyaXB0b3IsCiAg KgogICoJCVRoaXMgZ2V0cyBjYWxsZWQgZnJvbSBpbmRleF9nZXRhdHRyKCkgbWFjcm8sIGFuZCBv bmx5IGluIGNhc2VzCiAgKgkJd2hlcmUgd2UgY2FuJ3QgdXNlIGNhY2hlb2Zmc2V0IGFuZCB0aGUg dmFsdWUgaXMgbm90IG51bGwuCi0gKgotICoJCVRoaXMgY2FjaGVzIGF0dHJpYnV0ZSBvZmZzZXRz IGluIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KLSAqCi0gKgkJQW4gYWx0ZXJuYXRpdmUgd2F5 IHRvIHNwZWVkIHRoaW5ncyB1cCB3b3VsZCBiZSB0byBjYWNoZSBvZmZzZXRzCi0gKgkJd2l0aCB0 aGUgdHVwbGUsIGJ1dCB0aGF0IHNlZW1zIG1vcmUgZGlmZmljdWx0IHVubGVzcyB5b3UgdGFrZQot ICoJCXRoZSBzdG9yYWdlIGhpdCBvZiBhY3R1YWxseSBwdXR0aW5nIHRob3NlIG9mZnNldHMgaW50 byB0aGUKLSAqCQl0dXBsZSB5b3Ugc2VuZCB0byBkaXNrLiAgWXVjay4KLSAqCi0gKgkJVGhpcyBz Y2hlbWUgd2lsbCBiZSBzbGlnaHRseSBzbG93ZXIgdGhhbiB0aGF0LCBidXQgc2hvdWxkCi0gKgkJ cGVyZm9ybSB3ZWxsIGZvciBxdWVyaWVzIHdoaWNoIGhpdCBsYXJnZSAjJ3Mgb2YgdHVwbGVzLiAg QWZ0ZXIKLSAqCQl5b3UgY2FjaGUgdGhlIG9mZnNldHMgb25jZSwgZXhhbWluaW5nIGFsbCB0aGUg b3RoZXIgdHVwbGVzIHVzaW5nCi0gKgkJdGhlIHNhbWUgYXR0cmlidXRlIGRlc2NyaXB0b3Igd2ls bCBnbyBtdWNoIHF1aWNrZXIuIC1jaW0gNS80LzkxCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8K IERhdHVtCkBAIC0yNDIsMjA1ICsyMzAsMTI5IEBAIG5vY2FjaGVfaW5kZXhfZ2V0YXR0cihJbmRl eFR1cGxlIHR1cCwKIAkJCQkJICBpbnQgYXR0bnVtLAogCQkJCQkgIFR1cGxlRGVzYyB0dXBsZURl c2MpCiB7CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJY2hhcgkgICAqdHA7CQkJCS8qIHB0 ciB0byBkYXRhIHBhcnQgb2YgdHVwbGUgKi8KIAliaXRzOAkgICAqYnAgPSBOVUxMOwkJLyogcHRy IHRvIG51bGwgYml0bWFwIGluIHR1cGxlICovCi0JYm9vbAkJc2xvdyA9IGZhbHNlOwkvKiBkbyB3 ZSBoYXZlIHRvIHdhbGsgYXR0cnM/ICovCiAJaW50CQkJZGF0YV9vZmY7CQkvKiB0dXBsZSBkYXRh IG9mZnNldCAqLwogCWludAkJCW9mZjsJCQkvKiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAq LworCWludAkJCXN0YXJ0QXR0cjsKKwlpbnQJCQlmaXJzdG51bGxhdHRyOworCWJvb2wJCWhhc251 bGxzID0gSW5kZXhUdXBsZUhhc051bGxzKHR1cCk7CisJaW50CQkJaTsKIAotCS8qIC0tLS0tLS0t LS0tLS0tLS0KLQkgKgkgVGhyZWUgY2FzZXM6Ci0JICoKLQkgKgkgMTogTm8gbnVsbHMgYW5kIG5v IHZhcmlhYmxlLXdpZHRoIGF0dHJpYnV0ZXMuCi0JICoJIDI6IEhhcyBhIG51bGwgb3IgYSB2YXIt d2lkdGggQUZURVIgYXR0LgotCSAqCSAzOiBIYXMgbnVsbHMgb3IgdmFyLXdpZHRocyBCRUZPUkUg YXR0LgotCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KLQotCWRhdGFfb2ZmID0gSW5kZXhJbmZv RmluZERhdGFPZmZzZXQodHVwLT50X2luZm8pOworCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBj YWxsIFR1cGxlRGVzY0ZpbmFsaXplKCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25D YWNoZWRPZmZBdHRyID49IDApOwogCiAJYXR0bnVtLS07CiAKLQlpZiAoSW5kZXhUdXBsZUhhc051 bGxzKHR1cCkpCi0JewotCQkvKgotCQkgKiB0aGVyZSdzIGEgbnVsbCBzb21ld2hlcmUgaW4gdGhl IHR1cGxlCi0JCSAqCi0JCSAqIGNoZWNrIHRvIHNlZSBpZiBkZXNpcmVkIGF0dCBpcyBudWxsCi0J CSAqLworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIE5VTExzIGJlZm9yZSB0aGUgcmVxdWlyZWQg YXR0bnVtLCB0aGVuIHdlIGNhbiBzdGFydCBhdAorCSAqIHRoZSBoaWdoZXN0IGF0dHJpYnV0ZSB3 aXRoIGEga25vd24gb2Zmc2V0LCBvciB0aGUgZmlyc3QgYXR0cmlidXRlIGlmCisJICogbm9uZSBo YXZlIGEgY2FjaGVkIG9mZnNldC4gIElmIHRoZSB0dXBsZSBoYXMgbm8gdmFyaWFibGUgd2lkdGgg dHlwZXMsCisJICogd2hpY2ggaXMgY29tbW9uIHdpdGggaW5kZXhlcywgdGhlbiB3ZSBjYW4gdXNl IGEgc2xpZ2h0bHkgY2hlYXBlciBtZXRob2QKKwkgKiBvZiBvZmZzZXQgY2FsY3VsYXRpb24sIGFz IHdlIGp1c3QgbmVlZCB0byBhZGQgdGhlIGF0dGxlbiB0byB0aGUgYWxpZ25lZAorCSAqIG9mZnNl dCB3aGVuIHNraXBwaW5nIG92ZXIgY29sdW1ucy4gIFdoZW4gdGhlIHR1cGxlIGNvbnRhaW5zCisJ ICogdmFyaWFibGUtd2lkdGggdHlwZXMsIHdlIG11c3QgdXNlIGF0dF9hZGRsZW5ndGhfcG9pbnRl cigpLCB3aGljaCBkb2VzIGEKKwkgKiBiaXQgbW9yZSBicmFuY2hpbmcgYW5kIGlzIHNsaWdodGx5 IGxlc3MgZWZmaWNpZW50LgorCSAqLworCWRhdGFfb2ZmID0gSW5kZXhJbmZvRmluZERhdGFPZmZz ZXQodHVwLT50X2luZm8pOworCXRwID0gKGNoYXIgKikgdHVwICsgZGF0YV9vZmY7CiAKLQkJLyog WFhYICJrbm93cyIgdF9iaXRzIGFyZSBqdXN0IGFmdGVyIGZpeGVkIHR1cGxlIGhlYWRlciEgKi8K KwkvKgorCSAqIEZpbmQgdGhlIGZpcnN0IE5VTEwgY29sdW1uLCBvciBpZiB0aGVyZSdzIG5vbmUg c2V0IHRoZSBmaXJzdCBOVUxMIHRvCisJICogYXR0bnVtIHNvIHRoYXQgd2UgY2FuIGZvcmVnbyBO VUxMIGNoZWNraW5nIGFsbCB0aGUgd2F5IHRvIGF0dG51bS4KKwkgKi8KKwlpZiAoaGFzbnVsbHMp CisJewogCQlicCA9IChiaXRzOCAqKSAoKGNoYXIgKikgdHVwICsgc2l6ZW9mKEluZGV4VHVwbGVE YXRhKSk7Ci0KLQkJLyoKLQkJICogTm93IGNoZWNrIHRvIHNlZSBpZiBhbnkgcHJlY2VkaW5nIGJp dHMgYXJlIG51bGwuLi4KLQkJICovCi0JCXsKLQkJCWludAkJCWJ5dGUgPSBhdHRudW0gPj4gMzsK LQkJCWludAkJCWZpbmFsYml0ID0gYXR0bnVtICYgMHgwNzsKLQotCQkJLyogY2hlY2sgZm9yIG51 bGxzICJiZWZvcmUiIGZpbmFsIGJpdCBvZiBsYXN0IGJ5dGUgKi8KLQkJCWlmICgofmJwW2J5dGVd KSAmICgoMSA8PCBmaW5hbGJpdCkgLSAxKSkKLQkJCQlzbG93ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJ CXsKLQkJCQkvKiBjaGVjayBmb3IgbnVsbHMgaW4gYW55ICJlYXJsaWVyIiBieXRlcyAqLwotCQkJ CWludAkJCWk7Ci0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgYnl0ZTsgaSsrKQotCQkJCXsKLQkJCQkJ aWYgKGJwW2ldICE9IDB4RkYpCi0JCQkJCXsKLQkJCQkJCXNsb3cgPSB0cnVlOwotCQkJCQkJYnJl YWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0X251 bGxfYXR0cihicCwgYXR0bnVtKTsKIAl9CisJZWxzZQorCQlmaXJzdG51bGxhdHRyID0gYXR0bnVt OwogCi0JdHAgPSAoY2hhciAqKSB0dXAgKyBkYXRhX29mZjsKLQotCWlmICghc2xvdykKKwlpZiAo dHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPiAwKQogCXsKLQkJQ29tcGFjdEF0dHJp YnV0ZSAqYXR0OwotCi0JCS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB0aGVyZSBhcmUgbm8gbnVs bHMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgdGFyZ2V0Ci0JCSAqIGF0dHJpYnV0ZS4gIElmIHdl IGhhdmUgYSBjYWNoZWQgb2Zmc2V0LCB3ZSBjYW4gdXNlIGl0LgotCQkgKi8KLQkJYXR0ID0gVHVw bGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOwotCQlpZiAoYXR0LT5hdHRjYWNo ZW9mZiA+PSAwKQotCQkJcmV0dXJuIGZldGNoYXR0KGF0dCwgdHAgKyBhdHQtPmF0dGNhY2hlb2Zm KTsKLQotCQkvKgotCQkgKiBPdGhlcndpc2UsIGNoZWNrIGZvciBub24tZml4ZWQtbGVuZ3RoIGF0 dHJzIHVwIHRvIGFuZCBpbmNsdWRpbmcKLQkJICogdGFyZ2V0LiAgSWYgdGhlcmUgYXJlbid0IGFu eSwgaXQncyBzYWZlIHRvIGNoZWFwbHkgaW5pdGlhbGl6ZSB0aGUKLQkJICogY2FjaGVkIG9mZnNl dHMgZm9yIHRoZXNlIGF0dHJzLgotCQkgKi8KLQkJaWYgKEluZGV4VHVwbGVIYXNWYXJ3aWR0aHMo dHVwKSkKLQkJewotCQkJaW50CQkJajsKLQotCQkJZm9yIChqID0gMDsgaiA8PSBhdHRudW07IGor KykKLQkJCXsKLQkJCQlpZiAoVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKS0+YXR0 bGVuIDw9IDApCi0JCQkJewotCQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQot CQkJfQotCQl9CisJCXN0YXJ0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2Zm QXR0ciAtIDEsIGZpcnN0bnVsbGF0dHIpOworCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIHN0YXJ0QXR0ciktPmF0dGNhY2hlb2ZmOwogCX0KLQotCWlmICghc2xvdykKKwll bHNlCiAJewotCQlpbnQJCQluYXR0cyA9IHR1cGxlRGVzYy0+bmF0dHM7Ci0JCWludAkJCWogPSAx OwotCi0JCS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgdHVwbGUgd2l0aCBubyBu dWxscyBvciB2YXItd2lkdGhzIHVwIHRvCi0JCSAqIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdldCBh dHRyaWJ1dGUsIHNvIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCBvZmZzZXQKLQkJICogLi4uIG9ubHkg d2UgZG9uJ3QgaGF2ZSBpdCB5ZXQsIG9yIHdlJ2Qgbm90IGhhdmUgZ290IGhlcmUuICBTaW5jZQot CQkgKiBpdCdzIGNoZWFwIHRvIGNvbXB1dGUgb2Zmc2V0cyBmb3IgZml4ZWQtd2lkdGggY29sdW1u cywgd2UgdGFrZSB0aGUKLQkJICogb3Bwb3J0dW5pdHkgdG8gaW5pdGlhbGl6ZSB0aGUgY2FjaGVk IG9mZnNldHMgZm9yICphbGwqIHRoZSBsZWFkaW5nCi0JCSAqIGZpeGVkLXdpZHRoIGNvbHVtbnMs IGluIGhvcGUgb2YgYXZvaWRpbmcgZnV0dXJlIHZpc2l0cyB0byB0aGlzCi0JCSAqIHJvdXRpbmUu Ci0JCSAqLwotCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIDApLT5hdHRjYWNoZW9m ZiA9IDA7CisJCXN0YXJ0QXR0ciA9IDA7CisJCW9mZiA9IDA7CisJfQogCi0JCS8qIHdlIG1pZ2h0 IGhhdmUgc2V0IHNvbWUgb2Zmc2V0cyBpbiB0aGUgc2xvdyBwYXRoIHByZXZpb3VzbHkgKi8KLQkJ d2hpbGUgKGogPCBuYXR0cyAmJiBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopLT5h dHRjYWNoZW9mZiA+IDApCi0JCQlqKys7CisJLyogSGFuZGxlIHR1cGxlcyB3aXRoIHZhci13aWR0 aCBhdHRyaWJ1dGVzICovCisJaWYgKEluZGV4VHVwbGVIYXNWYXJ3aWR0aHModHVwKSkKKwl7CisJ CS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHVwIHVudGlsIHRoZSBmaXJzdCBOVUxMICovCisJCWZv ciAoaSA9IHN0YXJ0QXR0cjsgaSA8IGZpcnN0bnVsbGF0dHI7IGkrKykKKwkJeworCQkJY2F0dHIg PSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCW9mZiA9IFR1cGxlRGVz Y0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaiAtIDEpLT5hdHRjYWNoZW9mZiArCi0JCQlUdXBsZURl c2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGogLSAxKS0+YXR0bGVuOworCQkJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJ CQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgPSBhdHRf YWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CisJCX0KIAot CQlmb3IgKDsgaiA8IG5hdHRzOyBqKyspCisJCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGZvciBh bnkgcmVtYWluaW5nIGNvbHVtbnMuICovCisJCWZvciAoOyBpIDwgYXR0bnVtOyBpKyspCiAJCXsK LQkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz Yywgaik7Ci0KLQkJCWlmIChhdHQtPmF0dGxlbiA8PSAwKQotCQkJCWJyZWFrOworCQkJQXNzZXJ0 KGhhc251bGxzKTsKIAotCQkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0 YWxpZ25ieSk7CisJCQlpZiAoYXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGludWU7CiAKLQkJ CWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgaSk7CiAKLQkJCW9mZiArPSBhdHQtPmF0dGxlbjsKKwkJCW9mZiA9IGF0dF9w b2ludGVyX2FsaWduYnkob2ZmLAorCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJ CQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0 X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOwogCQl9Ci0K LQkJQXNzZXJ0KGogPiBhdHRudW0pOwotCi0JCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgYXR0bnVtKS0+YXR0Y2FjaGVvZmY7CiAJfQogCWVsc2UKIAl7Ci0JCWJvb2wJCXVz ZWNhY2hlID0gdHJ1ZTsKLQkJaW50CQkJaTsKKwkJLyogSGFuZGxlIHR1cGxlcyB3aXRoIG9ubHkg Zml4ZWQtd2lkdGggYXR0cmlidXRlcyAqLwogCi0JCS8qCi0JCSAqIE5vdyB3ZSBrbm93IHRoYXQg d2UgaGF2ZSB0byB3YWxrIHRoZSB0dXBsZSBDQVJFRlVMTFkuICBCdXQgd2Ugc3RpbGwKLQkJICog bWlnaHQgYmUgYWJsZSB0byBjYWNoZSBzb21lIG9mZnNldHMgZm9yIG5leHQgdGltZS4KLQkJICoK LQkJICogTm90ZSAtIFRoaXMgbG9vcCBpcyBhIGxpdHRsZSB0cmlja3kuICBGb3IgZWFjaCBub24t bnVsbCBhdHRyaWJ1dGUsCi0JCSAqIHdlIGhhdmUgdG8gZmlyc3QgYWNjb3VudCBmb3IgYWxpZ25t ZW50IHBhZGRpbmcgYmVmb3JlIHRoZSBhdHRyLAotCQkgKiB0aGVuIGFkdmFuY2Ugb3ZlciB0aGUg YXR0ciBiYXNlZCBvbiBpdHMgbGVuZ3RoLiAgTnVsbHMgaGF2ZSBubwotCQkgKiBzdG9yYWdlIGFu ZCBubyBhbGlnbm1lbnQgcGFkZGluZyBlaXRoZXIuICBXZSBjYW4gdXNlL3NldAotCQkgKiBhdHRj YWNoZW9mZiB1bnRpbCB3ZSByZWFjaCBlaXRoZXIgYSBudWxsIG9yIGEgdmFyLXdpZHRoIGF0dHJp YnV0ZS4KLQkJICovCi0JCW9mZiA9IDA7Ci0JCWZvciAoaSA9IDA7OyBpKyspCQkvKiBsb29wIGV4 aXQgaXMgYXQgImJyZWFrIiAqLworCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCB1cCB1bnRpbCB0 aGUgZmlyc3QgTlVMTCAqLworCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkgPCBmaXJzdG51bGxhdHRy OyBpKyspCiAJCXsKLQkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzYywgaSk7Ci0KLQkJCWlmIChJbmRleFR1cGxlSGFzTnVsbHModHVwKSAmJiBh dHRfaXNudWxsKGksIGJwKSkKLQkJCXsKLQkJCQl1c2VjYWNoZSA9IGZhbHNlOwotCQkJCWNvbnRp bnVlOwkJLyogdGhpcyBjYW5ub3QgYmUgdGhlIHRhcmdldCBhdHQgKi8KLQkJCX0KLQotCQkJLyog SWYgd2Uga25vdyB0aGUgbmV4dCBvZmZzZXQsIHdlIGNhbiBza2lwIHRoZSByZXN0ICovCi0JCQlp ZiAodXNlY2FjaGUgJiYgYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJCW9mZiA9IGF0dC0+YXR0 Y2FjaGVvZmY7Ci0JCQllbHNlIGlmIChhdHQtPmF0dGxlbiA9PSAtMSkKLQkJCXsKLQkJCQkvKgot CQkJCSAqIFdlIGNhbiBvbmx5IGNhY2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1 dGUgaWYgdGhlCi0JCQkJICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28g dGhhdCB0aGVyZSB3b3VsZCBiZQotCQkJCSAqIG5vIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhl biB0aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yCi0JCQkJICogZWl0aGVyIGFuIGFsaWduZWQg b3IgdW5hbGlnbmVkIHZhbHVlLgotCQkJCSAqLwotCQkJCWlmICh1c2VjYWNoZSAmJgotCQkJCQlv ZmYgPT0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSkpCi0JCQkJCWF0 dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJCSAgdHAg KyBvZmYpOwotCQkJCQl1c2VjYWNoZSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJ CXsKLQkJCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25i eSAqLwotCQkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkp OworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOworCisJCQlB c3NlcnQoY2F0dHItPmF0dGxlbiA+IDApOworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKKwkJ fQogCi0JCQkJaWYgKHVzZWNhY2hlKQotCQkJCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQkJ fQorCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgYW55IHJlbWFpbmluZyBjb2x1bW5zLiAq LworCQlmb3IgKDsgaSA8IGF0dG51bTsgaSsrKQorCQl7CisJCQlBc3NlcnQoaGFzbnVsbHMpOwog Ci0JCQlpZiAoaSA9PSBhdHRudW0pCi0JCQkJYnJlYWs7CisJCQlpZiAoYXR0X2lzbnVsbChpLCBi cCkpCisJCQkJY29udGludWU7CiAKLQkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYs IGF0dC0+YXR0bGVuLCB0cCArIG9mZik7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgaSk7CiAKLQkJCWlmICh1c2VjYWNoZSAmJiBhdHQtPmF0dGxlbiA8PSAwKQot CQkJCXVzZWNhY2hlID0gZmFsc2U7CisJCQlBc3NlcnQoY2F0dHItPmF0dGxlbiA+IDApOworCQkJ b2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGln bmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJ CQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKIAkJfQogCX0KIAotCXJldHVybiBmZXRjaGF0dChUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSksIHRwICsgb2ZmKTsKKwljYXR0ciA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwlvZmYgPSBhdHRfcG9p bnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLCB0cCArIG9mZik7CisJcmV0dXJuIGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiB9CiAK IC8qCkBAIC00ODEsNjIgKzM5Myw3OSBAQCBpbmRleF9kZWZvcm1fdHVwbGVfaW50ZXJuYWwoVHVw bGVEZXNjIHR1cGxlRGVzY3JpcHRvciwKIAkJCQkJCQljaGFyICp0cCwgYml0czggKmJwLCBpbnQg aGFzbnVsbHMpCiB7CiAJaW50CQkJbmF0dHMgPSB0dXBsZURlc2NyaXB0b3ItPm5hdHRzOyAvKiBu dW1iZXIgb2YgYXR0cyB0byBleHRyYWN0ICovCi0JaW50CQkJYXR0bnVtOworCWludAkJCWF0dG51 bSA9IDA7CiAJaW50CQkJb2ZmID0gMDsJCS8qIG9mZnNldCBpbiB0dXBsZSBkYXRhICovCi0JYm9v bAkJc2xvdyA9IGZhbHNlOwkvKiBjYW4gd2UgdXNlL3NldCBhdHRjYWNoZW9mZj8gKi8KKwlpbnQJ CQljYWNoZW9mZmF0dHJzOworCWludAkJCWZpcnN0bnVsbGF0dHI7CiAKIAkvKiBBc3NlcnQgdG8g cHJvdGVjdCBjYWxsZXJzIHdobyBhbGxvY2F0ZSBmaXhlZC1zaXplIGFycmF5cyAqLwogCUFzc2Vy dChuYXR0cyA8PSBJTkRFWF9NQVhfS0VZUyk7CiAKLQlmb3IgKGF0dG51bSA9IDA7IGF0dG51bSA8 IG5hdHRzOyBhdHRudW0rKykKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURl c2NGaW5hbGl6ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2NyaXB0b3ItPmZpcnN0Tm9uQ2FjaGVk T2ZmQXR0ciA+PSAwKTsKKworCWNhY2hlb2ZmYXR0cnMgPSBNaW4odHVwbGVEZXNjcmlwdG9yLT5m aXJzdE5vbkNhY2hlZE9mZkF0dHIsIG5hdHRzKTsKKworCWlmIChoYXNudWxscykKKwl7CisJCWZp cnN0bnVsbGF0dHIgPSBmaXJzdF9udWxsX2F0dHIoYnAsIG5hdHRzKTsKKwkJY2FjaGVvZmZhdHRy cyA9IE1pbihjYWNoZW9mZmF0dHJzLCBmaXJzdG51bGxhdHRyKTsKKwl9CisJZWxzZQorCQlmaXJz dG51bGxhdHRyID0gbmF0dHM7CisKKwlpZiAoYXR0bnVtIDwgY2FjaGVvZmZhdHRycykKIAl7Ci0J CUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2NyaXB0b3IsIGF0dG51bSk7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNhdHRyOwogCi0JCWlmICho YXNudWxscyAmJiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQlkbwogCQl7Ci0JCQl2YWx1ZXNb YXR0bnVtXSA9IChEYXR1bSkgMDsKLQkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cg PSB0cnVlOwkJLyogY2FuJ3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KLQkJCWNvbnRpbnVl OwotCQl9CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwg YXR0bnVtKTsKKworCQkJQXNzZXJ0KGNhdHRyLT5hdHRjYWNoZW9mZiA+PSAwKTsKKworCQkJdmFs dWVzW2F0dG51bV0gPSBmZXRjaF9hdHQodHAgKyBjYXR0ci0+YXR0Y2FjaGVvZmYsIGNhdHRyLT5h dHRieXZhbCwKKwkJCQkJCQkJCSAgIGNhdHRyLT5hdHRsZW4pOworCQkJaXNudWxsW2F0dG51bV0g PSBmYWxzZTsKKwkJfSB3aGlsZSAoKythdHRudW0gPCBjYWNoZW9mZmF0dHJzKTsKKworCQlvZmYg PSBjYXR0ci0+YXR0Y2FjaGVvZmYgKyBjYXR0ci0+YXR0bGVuOworCX0KKworCWZvciAoOyBhdHRu dW0gPCBmaXJzdG51bGxhdHRyOyBhdHRudW0rKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmNh dHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjcmlwdG9yLCBhdHRudW0pOworCisJ CW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwgY2F0dHIt PmF0dGxlbiwKKwkJCQkJCQkJICB0cCArIG9mZik7CiAKIAkJaXNudWxsW2F0dG51bV0gPSBmYWxz ZTsKKwkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOwogCi0JCWlm ICghc2xvdyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJb2ZmID0gdGhpc2F0dC0+ YXR0Y2FjaGVvZmY7Ci0JCWVsc2UgaWYgKHRoaXNhdHQtPmF0dGxlbiA9PSAtMSkKLQkJewotCQkJ LyoKLQkJCSAqIFdlIGNhbiBvbmx5IGNhY2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRy aWJ1dGUgaWYgdGhlCi0JCQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0YWJseSBhbGlnbmVkLCBz byB0aGF0IHRoZXJlIHdvdWxkIGJlIG5vCi0JCQkgKiBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRo ZW4gdGhlIG9mZnNldCB3aWxsIGJlIHZhbGlkIGZvciBlaXRoZXIKLQkJCSAqIGFuIGFsaWduZWQg b3IgdW5hbGlnbmVkIHZhbHVlLgotCQkJICovCi0JCQlpZiAoIXNsb3cgJiYKLQkJCQlvZmYgPT0g YXR0X25vbWluYWxfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnkpKQotCQkJCXRoaXNh dHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQkJZWxzZQotCQkJewotCQkJCW9mZiA9IGF0dF9wb2lu dGVyX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5LCAtMSwKLQkJCQkJCQkJCQkgIHRw ICsgb2ZmKTsKLQkJCQlzbG93ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8q IG5vdCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQlv ZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7CisJCW9m ZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsK Kwl9CisKKwlmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQorCXsKKwkJQ29tcGFjdEF0 dHJpYnV0ZSAqY2F0dHI7CiAKLQkJCWlmICghc2xvdykKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9m ZiA9IG9mZjsKKwkJQXNzZXJ0KGhhc251bGxzKTsKKworCQlpZiAoYXR0X2lzbnVsbChhdHRudW0s IGJwKSkKKwkJeworCQkJdmFsdWVzW2F0dG51bV0gPSAoRGF0dW0pIDA7CisJCQlpc251bGxbYXR0 bnVtXSA9IHRydWU7CisJCQljb250aW51ZTsKIAkJfQogCi0JCXZhbHVlc1thdHRudW1dID0gZmV0 Y2hhdHQodGhpc2F0dCwgdHAgKyBvZmYpOworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsIGNhdHRyLT5hdHRhbGlnbmJ5LCBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkgIHRwICsgb2Zm KTsKIAotCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5hdHRsZW4s IHRwICsgb2ZmKTsKKwkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJdmFsdWVzW2F0dG51bV0g PSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOwogCi0JCWlmICh0aGlzYXR0LT5hdHRsZW4gPD0g MCkKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8K KwkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBv ZmYpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBk ZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYwppbmRleCA5NGI0ZjFm OTk3NS4uNGNmMTNiNzk4MDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v dHVwZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdHVwZGVzYy5jCkBAIC0y MTQsNiArMjE0LDkgQEAgQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoaW50IG5hdHRzKQogCWRlc2Mt PnRkdHlwbW9kID0gLTE7CiAJZGVzYy0+dGRyZWZjb3VudCA9IC0xOwkJLyogYXNzdW1lIG5vdCBy ZWZlcmVuY2UtY291bnRlZCAqLwogCisJLyogVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgY29ycmVj dCB2YWx1ZSBieSBUdXBsZURlc2NGaW5hbGl6ZSgpICovCisJZGVzYy0+Zmlyc3ROb25DYWNoZWRP ZmZBdHRyID0gLTE7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtMjM4LDYgKzI0MSw5IEBAIENy ZWF0ZVR1cGxlRGVzYyhpbnQgbmF0dHMsIEZvcm1fcGdfYXR0cmlidXRlICphdHRycykKIAkJbWVt Y3B5KFR1cGxlRGVzY0F0dHIoZGVzYywgaSksIGF0dHJzW2ldLCBBVFRSSUJVVEVfRklYRURfUEFS VF9TSVpFKTsKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUoZGVzYywgaSk7CiAJfQorCisJ VHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtMjgyLDYg KzI4OCw4IEBAIENyZWF0ZVR1cGxlRGVzY0NvcHkoVHVwbGVEZXNjIHR1cGRlc2MpCiAJZGVzYy0+ dGR0eXBlaWQgPSB0dXBkZXNjLT50ZHR5cGVpZDsKIAlkZXNjLT50ZHR5cG1vZCA9IHR1cGRlc2Mt PnRkdHlwbW9kOwogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsK IH0KIApAQCAtMzI4LDYgKzMzNiw4IEBAIENyZWF0ZVR1cGxlRGVzY1RydW5jYXRlZENvcHkoVHVw bGVEZXNjIHR1cGRlc2MsIGludCBuYXR0cykKIAlkZXNjLT50ZHR5cGVpZCA9IHR1cGRlc2MtPnRk dHlwZWlkOwogCWRlc2MtPnRkdHlwbW9kID0gdHVwZGVzYy0+dGR0eXBtb2Q7CiAKKwlUdXBsZURl c2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCkBAIC00MTMsNiArNDIzLDgg QEAgQ3JlYXRlVHVwbGVEZXNjQ29weUNvbnN0cihUdXBsZURlc2MgdHVwZGVzYykKIAlkZXNjLT50 ZHR5cGVpZCA9IHR1cGRlc2MtPnRkdHlwZWlkOwogCWRlc2MtPnRkdHlwbW9kID0gdHVwZGVzYy0+ dGR0eXBtb2Q7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwog fQogCkBAIC00NTUsNiArNDY3LDggQEAgVHVwbGVEZXNjQ29weShUdXBsZURlc2MgZHN0LCBUdXBs ZURlc2Mgc3JjKQogCSAqIHNvdXJjZSdzIHJlZmNvdW50IHdvdWxkIGJlIHdyb25nIGluIGFueSBj YXNlLikKIAkgKi8KIAlkc3QtPnRkcmVmY291bnQgPSAtMTsKKworCVR1cGxlRGVzY0ZpbmFsaXpl KGRzdCk7CiB9CiAKIC8qCkBAIC00NjMsNiArNDc3LDkgQEAgVHVwbGVEZXNjQ29weShUdXBsZURl c2MgZHN0LCBUdXBsZURlc2Mgc3JjKQogICoJCWRlc2NyaXB0b3IgdG8gYW5vdGhlci4KICAqCiAg KiAhISEgQ29uc3RyYWludHMgYW5kIGRlZmF1bHRzIGFyZSBub3QgY29waWVkICEhIQorICoKKyAq IFRoZSBjYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2YgY2FsbGluZyBUdXBsZURlc2NGaW5hbGl6ZSgp IG9uIG9uY2UgYWxsCisgKiBUdXBsZURlc2MgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KICAqLwog dm9pZAogVHVwbGVEZXNjQ29weUVudHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0 bm8sCkBAIC00OTUsNiArNTEyLDQ2IEBAIFR1cGxlRGVzY0NvcHlFbnRyeShUdXBsZURlc2MgZHN0 LCBBdHRyTnVtYmVyIGRzdEF0dG5vLAogCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKGRzdCwg ZHN0QXR0bm8gLSAxKTsKIH0KIAorLyoKKyAqIFR1cGxlRGVzY0ZpbmFsaXplCisgKgkJRmluYWxp emUgdGhlIGdpdmVuIFR1cGxlRGVzYy4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisg KgkJYXR0cmlidXRlcyBhcnJheXMgaGF2ZSBiZWVuIHBvcHVsYXRlZCBvciBhZGp1c3RlZCBieSBh bnkgY29kZS4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBwb3B1bGF0ZV9jb21wYWN0X2F0 dHJpYnV0ZSgpCisgKi8KK3ZvaWQKK1R1cGxlRGVzY0ZpbmFsaXplKFR1cGxlRGVzYyB0dXBkZXNj KQoreworCWludAkJCWZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA9IDA7CisjaWZkZWYgT1BUSU1JWkVf QllWQUwKKwlpbnQJCQlmaXJzdEJ5UmVmQXR0ciA9IHR1cGRlc2MtPm5hdHRzOworI2VuZGlmCisJ aW50CQkJb2ZmcCA9IDA7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBp KyspCisJeworCQlDb21wYWN0QXR0cmlidXRlICpjYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGRlc2MsIGkpOworCisjaWZkZWYgT1BUSU1JWkVfQllWQUwKKwkJaWYgKCFjYXR0ci0+YXR0 Ynl2YWwpCisJCQlmaXJzdEJ5UmVmQXR0ciA9IE1pbihmaXJzdEJ5UmVmQXR0ciwgaSk7CisjZW5k aWYKKwkJaWYgKGNhdHRyLT5hdHRsZW4gPD0gMCkKKwkJCWJyZWFrOworCisJCW9mZnAgPSBhdHRf bm9taW5hbF9hbGlnbmJ5KG9mZnAsIGNhdHRyLT5hdHRhbGlnbmJ5KTsKKwkJY2F0dHItPmF0dGNh Y2hlb2ZmID0gb2ZmcDsKKworCQlvZmZwICs9IGNhdHRyLT5hdHRsZW47CisJCWZpcnN0Tm9uQ2Fj aGVkT2ZmQXR0ciA9IGkgKyAxOworCX0KKworCXR1cGRlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0 ciA9IGZpcnN0Tm9uQ2FjaGVkT2ZmQXR0cjsKKyNpZmRlZiBPUFRJTUlaRV9CWVZBTAorCXR1cGRl c2MtPmZpcnN0QnlSZWZBdHRyID0gZmlyc3RCeVJlZkF0dHI7CisjZW5kaWYKK30KKwogLyoKICAq IEZyZWUgYSBUdXBsZURlc2MgaW5jbHVkaW5nIGFsbCBzdWJzdHJ1Y3R1cmUKICAqLwpAQCAtMTA4 Miw2ICsxMTM5LDggQEAgQnVpbGREZXNjRnJvbUxpc3RzKGNvbnN0IExpc3QgKm5hbWVzLCBjb25z dCBMaXN0ICp0eXBlcywgY29uc3QgTGlzdCAqdHlwbW9kcywgY28KIAkJVHVwbGVEZXNjSW5pdEVu dHJ5Q29sbGF0aW9uKGRlc2MsIGF0dG51bSwgYXR0Y29sbGF0aW9uKTsKIAl9CiAKKwlUdXBsZURl c2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu dXRpbC5jCmluZGV4IGQyMDUwOTNlMjFkLi5hNTMzZDc5ZTI2ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW51dGlsLmMKQEAgLTEyOSw2ICsxMjksNyBAQCBpbml0R2luU3RhdGUoR2luU3RhdGUgKnN0YXRl LCBSZWxhdGlvbiBpbmRleCkKIAkJCQkJCQkgICBhdHRyLT5hdHRuZGltcyk7CiAJCQlUdXBsZURl c2NJbml0RW50cnlDb2xsYXRpb24oc3RhdGUtPnR1cGRlc2NbaV0sIChBdHRyTnVtYmVyKSAyLAog CQkJCQkJCQkJCWF0dHItPmF0dGNvbGxhdGlvbik7CisJCQlUdXBsZURlc2NGaW5hbGl6ZShzdGF0 ZS0+dHVwZGVzY1tpXSk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMK aW5kZXggZjIzYmM0YTY3NTcuLmM2NWY5M2FiZGFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Rz Y2FuLmMKQEAgLTIwMSw2ICsyMDEsNyBAQCBnaXN0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJCQkJCQkJIGF0dG5vIC0gMSktPmF0dHR5cGlk LAogCQkJCQkJCSAgIC0xLCAwKTsKIAkJfQorCQlUdXBsZURlc2NGaW5hbGl6ZShzby0+Z2lzdHN0 YXRlLT5mZXRjaFR1cGRlc2MpOwogCQlzY2FuLT54c19oaXR1cGRlc2MgPSBzby0+Z2lzdHN0YXRl LT5mZXRjaFR1cGRlc2M7CiAKIAkJLyogQWxzbyBjcmVhdGUgYSBtZW1vcnkgY29udGV4dCB0aGF0 IHdpbGwgaG9sZCB0aGUgcmV0dXJuZWQgdHVwbGVzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKaW5kZXggOWY1Mzc5Yjg3YWMuLmE0Njk0YmQ4MDY1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jCkBAIC0zMzUsMTEgKzMzNSw5IEBAIGdldFNwR2lzdFR1cGxlRGVz YyhSZWxhdGlvbiBpbmRleCwgU3BHaXN0VHlwZURlc2MgKmtleVR5cGUpCiAJCS8qIFdlIHNob3Vs ZG4ndCBuZWVkIHRvIGJvdGhlciB3aXRoIG1ha2luZyB0aGVzZSB2YWxpZDogKi8KIAkJYXR0LT5h dHRjb21wcmVzc2lvbiA9IEludmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAkJYXR0LT5hdHRjb2xs YXRpb24gPSBJbnZhbGlkT2lkOwotCQkvKiBJbiBjYXNlIHdlIGNoYW5nZWQgdHlwbGVuLCB3ZSdk IGJldHRlciByZXNldCBmb2xsb3dpbmcgb2Zmc2V0cyAqLwotCQlmb3IgKGludCBpID0gc3BnRmly c3RJbmNsdWRlQ29sdW1uOyBpIDwgb3V0VHVwRGVzYy0+bmF0dHM7IGkrKykKLQkJCVR1cGxlRGVz Y0NvbXBhY3RBdHRyKG91dFR1cERlc2MsIGkpLT5hdHRjYWNoZW9mZiA9IC0xOwogCiAJCXBvcHVs YXRlX2NvbXBhY3RfYXR0cmlidXRlKG91dFR1cERlc2MsIHNwZ0tleUNvbHVtbik7CisJCVR1cGxl RGVzY0ZpbmFsaXplKG91dFR1cERlc2MpOwogCX0KIAlyZXR1cm4gb3V0VHVwRGVzYzsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IGU1MGFiYjMzMWNjLi45ZjcwOGY4 NDMzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC03NDQsNiArNzQ0 LDcgQEAgcGdfcHJlcGFyZWRfeGFjdChQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJbml0 RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUsICJkYmlkIiwKIAkJCQkJCSAgIE9JRE9JRCwg LTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlmdW5jY3R4LT50dXBs ZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ2Z1bmNzLmMKaW5kZXggMmVmZTQxMDVlZmIuLmI2YmM2MTZjNzRjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwpAQCAtNDAwLDYgKzQwMCw3IEBAIHBn X3dhbGZpbGVfbmFtZV9vZmZzZXQoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJbml0RW50 cnkocmVzdWx0VHVwbGVEZXNjLCAoQXR0ck51bWJlcikgMiwgImZpbGVfb2Zmc2V0IiwKIAkJCQkJ ICAgSU5UNE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0VHVwbGVEZXNj KTsKIAlyZXN1bHRUdXBsZURlc2MgPSBCbGVzc1R1cGxlRGVzYyhyZXN1bHRUdXBsZURlc2MpOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2NvcHkuYyBi L3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2NvcHkuYwppbmRleCBmZWNmYWQ5YWI3Yi4u MjlkYmQwY2IzMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2Nv cHkuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKQEAgLTM1Nyw2 ICszNTcsOCBAQCBTZW5kWGxvZ1JlY1B0clJlc3VsdChYTG9nUmVjUHRyIHB0ciwgVGltZUxpbmVJ RCB0bGkpCiAJICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51 bWJlcikgMiwgInRsaSIsIElOVDhPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1 cGRlc2MpOworCiAJLyogc2VuZCBSb3dEZXNjcmlwdGlvbiAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1 cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CiAKQEAgLTM4 OCw2ICszOTAsNyBAQCBTZW5kVGFibGVzcGFjZUxpc3QoTGlzdCAqdGFibGVzcGFjZXMpCiAJVHVw bGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInNwY29pZCIs IE9JRE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0 dHJOdW1iZXIpIDIsICJzcGNsb2NhdGlvbiIsIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJ bml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAic2l6ZSIsIElOVDhPSUQs IC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHNlbmQgUm93RGVz Y3JpcHRpb24gKi8KIAl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVw ZGVzYywgJlRUU09wc1ZpcnR1YWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDQzZGU0MmNlMzllLi43 NWU5N2ZiMzk0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNDgxLDYgKzQ4MSw4IEBAIENvbnN0cnVj dFR1cGxlRGVzY3JpcHRvcihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXBvcHVsYXRlX2NvbXBh Y3RfYXR0cmlidXRlKGluZGV4VHVwRGVzYywgaSk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUo aW5kZXhUdXBEZXNjKTsKKwogCXJldHVybiBpbmRleFR1cERlc2M7CiB9CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwppbmRleCA5YTQ3OTFjNTczZS4uZmEzNTNhMGRkMzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEyMzAsNiArMTIzMCw3IEBAIHBnX2dl dF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNjSW5pdEVu dHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAicXVhbCIsCiAJCQkJCQkgICBQR19OT0RFX1RS RUVPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0 eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCQlmdW5jY3R4LT51c2Vy X2ZjdHggPSB0YWJsZV9pbmZvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IGM3OGRjZWE5 OGMxLi4wNzhhMWNmNTEyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGlu Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMjI5LDYgKzIyOSwx MiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0 b2FzdEluZGV4T2lkLAogCVR1cGxlRGVzY0F0dHIodHVwZGVzYywgMSktPmF0dGNvbXByZXNzaW9u ID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCVR1cGxlRGVzY0F0dHIodHVwZGVzYywgMikt PmF0dGNvbXByZXNzaW9uID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCisJcG9wdWxhdGVf Y29tcGFjdF9hdHRyaWJ1dGUodHVwZGVzYywgMCk7CisJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1 dGUodHVwZGVzYywgMSk7CisJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUodHVwZGVzYywgMik7 CisKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCS8qCiAJICogVG9hc3QgdGFibGVz IGZvciByZWd1bGFyIHJlbGF0aW9ucyBnbyBpbiBwZ190b2FzdDsgdGhvc2UgZm9yIHRlbXAKIAkg KiByZWxhdGlvbnMgZ28gaW50byB0aGUgcGVyLWJhY2tlbmQgdGVtcC10b2FzdC10YWJsZSBuYW1l c3BhY2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4OGMuLjdhYmQ5ZWQyNzJm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0yODEsNiArMjgxLDcgQEAgRXhwbGFpblJlc3Vs dERlc2MoRXhwbGFpblN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVE ZXNjKDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgIlFV RVJZIFBMQU4iLAogCQkJCQkgICByZXN1bHRfdHlwZSwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFs aXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Z1bmN0 aW9uY21kcy5jCmluZGV4IGE1MTZiMDM3ZGVhLi42YThmMTYyYjY0MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZnVuY3Rpb25jbWRzLmMKQEAgLTI0MjMsNiArMjQyMyw3IEBAIENhbGxTdG10UmVzdWx0RGVz YyhDYWxsU3RtdCAqc3RtdCkKIAkJCQkJCQkgICAtMSwKIAkJCQkJCQkgICAwKTsKIAkJfQorCQlU dXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAl9CiAKIAlyZXR1cm4gdHVwZGVzYzsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zZXF1ZW5jZS5jCmluZGV4IGUxYjgwOGJiYjYwLi41NTE2Njc2NTBiYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zZXF1ZW5jZS5jCkBAIC0xODA4LDYgKzE4MDgsNyBAQCBwZ19nZXRfc2VxdWVuY2VfZGF0 YShQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDMsICJwYWdlX2xzbiIsCiAJ CQkJCSAgIExTTk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1cGxlRGVz Yyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVEZXNjKTsK IAogCXNlcXJlbCA9IHRyeV9yZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBmOTc2YzBlNWM3ZS4uYWU3YzlkYjlmYTkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xMDI5LDYgKzEwMjksOCBAQCBEZWZpbmVSZWxh dGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkLAogCQl9CiAJ fQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzY3JpcHRvcik7CisKIAkvKgogCSAqIEZvciByZWxh dGlvbnMgd2l0aCB0YWJsZSBBTSBhbmQgcGFydGl0aW9uZWQgdGFibGVzLCBzZWxlY3QgYWNjZXNz CiAJICogbWV0aG9kIHRvIHVzZTogYW4gZXhwbGljaXRseSBpbmRpY2F0ZWQgb25lLCBvciAoaW4g dGhlIGNhc2Ugb2YgYQpAQCAtMTQ0OCw2ICsxNDUwLDggQEAgQnVpbGREZXNjRm9yUmVsYXRpb24o Y29uc3QgTGlzdCAqY29sdW1ucykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUoZGVzYywg YXR0bnVtIC0gMSk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4g ZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCmluZGV4IDk3ZjFlNzc4NDg4Li45ZTU1ZDliZmI4MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3dhaXQuYwpAQCAtMzQxLDUgKzM0MSw2IEBAIFdhaXRTdG10UmVzdWx0RGVzYyhX YWl0U3RtdCAqc3RtdCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJ VHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic3RhdHVzIiwKIAkJ CQkJICAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCXJl dHVybiB0dXBkZXNjOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NS Ri5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jCmluZGV4IGEwYjExMWRjMGU0Li5i NDgxZTUwYWNmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwpAQCAtMjcyLDYgKzI3Miw3IEBAIEV4 ZWNNYWtlVGFibGVGdW5jdGlvblJlc3VsdChTZXRFeHByU3RhdGUgKnNldGV4cHIsCiAJCQkJCQkJ CQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkJCSAgIC0xLAogCQkJCQkJCQkJICAgMCk7CisJCQkJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJCQlyc2luZm8uc2V0RGVzYyA9IHR1cGRl c2M7CiAJCQkJfQogCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKQEAgLTc3 Niw2ICs3NzcsNyBAQCBpbml0X3NleHByKE9pZCBmb2lkLCBPaWQgaW5wdXRfY29sbGF0aW9uLCBF eHByICpub2RlLAogCQkJCQkJCSAgIGZ1bmNyZXR0eXBlLAogCQkJCQkJCSAgIC0xLAogCQkJCQkJ CSAgIDApOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCQlzZXhwci0+ZnVuY1Jl c3VsdERlc2MgPSB0dXBkZXNjOwogCQkJc2V4cHItPmZ1bmNSZXR1cm5zVHVwbGUgPSBmYWxzZTsK IAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5ZTUzLi45NjgzYWNj ODAyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtOTkyLDExOCArOTkyLDYgQEAg dHRzX2J1ZmZlcl9oZWFwX3N0b3JlX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVw bGUgdHVwbGUsCiAJfQogfQogCi0vKgotICogc2xvdF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5h bAotICoJCUFuIGFsd2F5cyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGZvciB1c2UgaW4gc2xvdF9k ZWZvcm1faGVhcF90dXBsZSB0bwotICoJCWFsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHNwZWNp YWxpemVkIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gZm9yCi0gKgkJdmFyaW91cyBjb21iaW5h dGlvbnMgb2YgInNsb3ciIGFuZCAiaGFzbnVsbHMiLiAgRm9yIGV4YW1wbGUsIGlmIGEKLSAqCQln aXZlbiB0dXBsZSBoYXMgbm8gbnVsbHMsIHRoZW4gd2UgbmVlZG4ndCBjaGVjayAiaGFzbnVsbHMi IGZvciBldmVyeQotICoJCWF0dHJpYnV0ZSB0aGF0IHdlJ3JlIGRlZm9ybWluZy4gIFRoZSBjYWxs ZXIgY2FuIGp1c3QgY2FsbCB0aGlzCi0gKgkJZnVuY3Rpb24gd2l0aCBoYXNudWxscyBzZXQgdG8g Y29uc3RhbnQtZmFsc2UgYW5kIGhhdmUgdGhlIGNvbXBpbGVyCi0gKgkJcmVtb3ZlIHRoZSBjb25z dGFudC1mYWxzZSBicmFuY2hlcyBhbmQgZW1pdCBtb3JlIG9wdGltYWwgY29kZS4KLSAqCi0gKiBS ZXR1cm5zIHRoZSBuZXh0IGF0dG51bSB0byBkZWZvcm0sIHdoaWNoIGNhbiBiZSBlcXVhbCB0byBu YXR0cyB3aGVuIHRoZQotICogZnVuY3Rpb24gbWFuYWdlcyB0byBkZWZvcm0gYWxsIHJlcXVlc3Rl ZCBhdHRyaWJ1dGVzLiAgKm9mZnAgaXMgYW4gaW5wdXQgYW5kCi0gKiBvdXRwdXQgcGFyYW1ldGVy IHdoaWNoIGlzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIHR1cGxlIHRvIHN0YXJ0IGRlZm9y bWluZwotICogZnJvbSB3aGljaCwgb24gcmV0dXJuLCBnZXRzIHNldCB0byB0aGUgb2Zmc2V0IHdo ZXJlIHRoZSBuZXh0IGF0dHJpYnV0ZQotICogc2hvdWxkIGJlIGRlZm9ybWVkIGZyb20uICAqc2xv d3AgaXMgc2V0IHRvIHRydWUgd2hlbiBzdWJzZXF1ZW50IGRlZm9ybWluZwotICogb2YgdGhpcyB0 dXBsZSBtdXN0IHVzZSBhIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoICJzbG93IiBwYXNz ZWQgYXMKLSAqIHRydWUuCi0gKgotICogQ2FsbGVycyBjYW5ub3QgYXNzdW1lIHdoZW4gd2UgcmV0 dXJuICJhdHRudW0iIChpLmUuIGFsbCByZXF1ZXN0ZWQKLSAqIGF0dHJpYnV0ZXMgaGF2ZSBiZWVu IGRlZm9ybWVkKSB0aGF0IHNsb3cgbW9kZSBpc24ndCByZXF1aXJlZCBmb3IgYW55Ci0gKiBhZGRp dGlvbmFsIGRlZm9ybWluZyBhcyB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlIGNhdXNlZCBh IHN3aXRjaCB0bwotICogc2xvdyBtb2RlLgotICovCi1zdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5 c19pbmxpbmUgaW50Ci1zbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsKFR1cGxlVGFibGVT bG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsCi0JCQkJCQkJCWludCBhdHRudW0sIGludCBuYXR0 cywgYm9vbCBzbG93LAotCQkJCQkJCQlib29sIGhhc251bGxzLCB1aW50MzIgKm9mZnAsIGJvb2wg KnNsb3dwKQotewotCVR1cGxlRGVzYwl0dXBsZURlc2MgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlw dG9yOwotCURhdHVtCSAgICp2YWx1ZXMgPSBzbG90LT50dHNfdmFsdWVzOwotCWJvb2wJICAgKmlz bnVsbCA9IHNsb3QtPnR0c19pc251bGw7Ci0JSGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50 X2RhdGE7Ci0JY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byB0dXBsZSBkYXRhICovCi0JYml0czgJ ICAgKmJwID0gdHVwLT50X2JpdHM7CS8qIHB0ciB0byBudWxsIGJpdG1hcCBpbiB0dXBsZSAqLwot CWJvb2wJCXNsb3duZXh0ID0gZmFsc2U7Ci0KLQl0cCA9IChjaGFyICopIHR1cCArIHR1cC0+dF9o b2ZmOwotCi0JZm9yICg7IGF0dG51bSA8IG5hdHRzOyBhdHRudW0rKykKLQl7Ci0JCUNvbXBhY3RB dHRyaWJ1dGUgKnRoaXNhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51 bSk7Ci0KLQkJaWYgKGhhc251bGxzICYmIGF0dF9pc251bGwoYXR0bnVtLCBicCkpCi0JCXsKLQkJ CXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAwOwotCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOwot CQkJaWYgKCFzbG93KQotCQkJewotCQkJCSpzbG93cCA9IHRydWU7Ci0JCQkJcmV0dXJuIGF0dG51 bSArIDE7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpc251bGxbYXR0 bnVtXSA9IGZhbHNlOwotCi0JCS8qIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoaXMgYXR0cmli dXRlICovCi0JCWlmICghc2xvdyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJKm9m ZnAgPSB0aGlzYXR0LT5hdHRjYWNoZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09 IC0xKQotCQl7Ci0JCQkvKgotCQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3Ig YSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRh Ymx5IGFsaWduZWQsIHNvIHRoYXQgdGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBp biBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJ ICogYW4gYWxpZ25lZCBvciB1bmFsaWduZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAm JiAqb2ZmcCA9PSBhdHRfbm9taW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5hdHRhbGlnbmJ5 KSkKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9ICpvZmZwOwotCQkJZWxzZQotCQkJewotCQkJ CSpvZmZwID0gYXR0X3BvaW50ZXJfYWxpZ25ieSgqb2ZmcCwKLQkJCQkJCQkJCQkJdGhpc2F0dC0+ YXR0YWxpZ25ieSwKLQkJCQkJCQkJCQkJLTEsCi0JCQkJCQkJCQkJCXRwICsgKm9mZnApOwotCi0J CQkJaWYgKCFzbG93KQotCQkJCQlzbG93bmV4dCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZQot CQl7Ci0JCQkvKiBub3QgdmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25i eSAqLwotCQkJKm9mZnAgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KCpvZmZwLCB0aGlzYXR0LT5hdHRh bGlnbmJ5KTsKLQotCQkJaWYgKCFzbG93KQotCQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gKm9m ZnA7Ci0JCX0KLQotCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KHRoaXNhdHQsIHRwICsgKm9m ZnApOwotCi0JCSpvZmZwID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKCpvZmZwLCB0aGlzYXR0LT5h dHRsZW4sIHRwICsgKm9mZnApOwotCi0JCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3dpdGNoIHRv IHNsb3cgbW9kZSAqLwotCQlpZiAoIXNsb3cpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSdyZSB1bmFi bGUgdG8gZGVmb3JtIGFueSBmdXJ0aGVyIGlmIHRoZSBhYm92ZSBjb2RlIHNldAotCQkJICogJ3Ns b3duZXh0Jywgb3IgaWYgdGhpcyBpc24ndCBhIGZpeGVkLXdpZHRoIGF0dHJpYnV0ZS4KLQkJCSAq LwotCQkJaWYgKHNsb3duZXh0IHx8IHRoaXNhdHQtPmF0dGxlbiA8PSAwKQotCQkJewotCQkJCSpz bG93cCA9IHRydWU7Ci0JCQkJcmV0dXJuIGF0dG51bSArIDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQly ZXR1cm4gbmF0dHM7Ci19Ci0KIC8qCiAgKiBzbG90X2RlZm9ybV9oZWFwX3R1cGxlCiAgKgkJR2l2 ZW4gYSBUdXBsZVRhYmxlU2xvdCwgZXh0cmFjdCBkYXRhIGZyb20gdGhlIHNsb3QncyBwaHlzaWNh bCB0dXBsZQpAQCAtMTEyMiw3OCArMTAxMCwxNjcgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIHZvaWQKIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNs b3QsIEhlYXBUdXBsZSB0dXBsZSwgdWludDMyICpvZmZwLAogCQkJCQkgICBpbnQgbmF0dHMpCiB7 CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CisJVHVwbGVEZXNjCXR1cGxlRGVzYyA9IHNsb3Qt PnR0c190dXBsZURlc2NyaXB0b3I7CiAJYm9vbAkJaGFzbnVsbHMgPSBIZWFwVHVwbGVIYXNOdWxs cyh0dXBsZSk7CisJSGVhcFR1cGxlSGVhZGVyIHR1cCA9IHR1cGxlLT50X2RhdGE7CisJYml0czgJ ICAgKmJwOwkJCQkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4gdHVwbGUgKi8KIAlpbnQJCQlhdHRu dW07CisJaW50CQkJZmlyc3ROb25DYWNoZU9mZnNldEF0dHI7CisKKyNpZmRlZiBPUFRJTUlaRV9C WVZBTAorCWludAkJCWZpcnN0QnlSZWZBdHRyOworI2VuZGlmCisJaW50CQkJZmlyc3ROdWxsQXR0 cjsKKwlEYXR1bQkgICAqdmFsdWVzOworCWJvb2wJICAgKmlzbnVsbDsKKwljaGFyCSAgICp0cDsJ CQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KIAl1aW50MzIJCW9mZjsJCQkvKiBvZmZzZXQgaW4g dHVwbGUgZGF0YSAqLwotCWJvb2wJCXNsb3c7CQkJLyogY2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVv ZmY/ICovCisKKwkvKiBEaWQgc29tZW9uZSBmb3JnZXQgdG8gY2FsbCBUdXBsZURlc2NGaW5hbGl6 ZSgpPyAqLworCUFzc2VydCh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+PSAwKTsK IAogCS8qIFdlIGNhbiBvbmx5IGZldGNoIGFzIG1hbnkgYXR0cmlidXRlcyBhcyB0aGUgdHVwbGUg aGFzLiAqLwotCW5hdHRzID0gTWluKEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2Rh dGEpLCBuYXR0cyk7CisJbmF0dHMgPSBNaW4oSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwKSwg bmF0dHMpOworCWF0dG51bSA9IHNsb3QtPnR0c19udmFsaWQ7CisJZmlyc3ROb25DYWNoZU9mZnNl dEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIsIG5hdHRzKTsKKwor CWlmIChoYXNudWxscykKKwl7CisJCWJwID0gdHVwLT50X2JpdHM7CisJCWZpcnN0TnVsbEF0dHIg PSBmaXJzdF9udWxsX2F0dHIoYnAsIG5hdHRzKTsKKwkJZmlyc3ROb25DYWNoZU9mZnNldEF0dHIg PSBNaW4oZmlyc3ROb25DYWNoZU9mZnNldEF0dHIsIGZpcnN0TnVsbEF0dHIpOworCX0KKwllbHNl CisJeworCQlicCA9IE5VTEw7CisJCWZpcnN0TnVsbEF0dHIgPSBuYXR0czsKKwl9CisKKyNpZmRl ZiBPUFRJTUlaRV9CWVZBTAorCWZpcnN0QnlSZWZBdHRyID0gTWluKGZpcnN0Tm9uQ2FjaGVPZmZz ZXRBdHRyLCB0dXBsZURlc2MtPmZpcnN0QnlSZWZBdHRyKTsKKyNlbmRpZgorCXZhbHVlcyA9IHNs b3QtPnR0c192YWx1ZXM7CisJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbDsKKwl0cCA9IChjaGFy ICopIHR1cCArIHR1cC0+dF9ob2ZmOworCisjaWZkZWYgT1BUSU1JWkVfQllWQUwKIAogCS8qCi0J ICogQ2hlY2sgd2hldGhlciB0aGUgZmlyc3QgY2FsbCBmb3IgdGhpcyB0dXBsZSwgYW5kIGluaXRp YWxpemUgb3IgcmVzdG9yZQotCSAqIGxvb3Agc3RhdGUuCisJICogTWFueSB0dXBsZXMgaGF2ZSBs ZWFkaW5nIGJ5dmFsIGF0dHJpYnV0ZXMsIHRyeSBhbmQgcHJvY2VzcyBhcyBtYW55IG9mCisJICog dGhvc2UgYXMgcG9zc2libGUgd2l0aCBhIHNwZWNpYWwgbG9vcCB0aGF0IGNhbid0IGhhbmRsZSBi eXJlZiB0eXBlcy4KIAkgKi8KLQlhdHRudW0gPSBzbG90LT50dHNfbnZhbGlkOwotCWlmIChhdHRu dW0gPT0gMCkKKwlpZiAoYXR0bnVtIDwgZmlyc3RCeVJlZkF0dHIpCisJeworCQkvKiBVc2UgZG8v d2hpbGUgYXMgd2UgYWxyZWFkeSBrbm93IHdlIG5lZWQgdG8gbG9vcCBhdCBsZWFzdCBvbmNlLiAq LworCQlkbworCQl7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg YXR0bnVtKTsKKworCQkJQXNzZXJ0KGNhdHRyLT5hdHRjYWNoZW9mZiA+PSAwKTsKKworCQkJLyoK KwkJCSAqIEhhcmQgY29kZSBieXZhbCA9PSB0cnVlIHRvIGFsbG93IHRoZSBjb21waWxlciB0byBy ZW1vdmUgdGhlCisJCQkgKiBieXZhbCBjaGVjayB3aGVuIGlubGluaW5nIGZldGNoX2F0dCgpLgor CQkJICovCisJCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dCh0cCArIGNhdHRyLT5hdHRjYWNo ZW9mZiwgdHJ1ZSwgY2F0dHItPmF0dGxlbik7CisJCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOwor CQl9IHdoaWxlICgrK2F0dG51bSA8IGZpcnN0QnlSZWZBdHRyKTsKKworCQkvKgorCQkgKiBQb2lu dCB0aGUgb2Zmc2V0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxhc3QgYXR0cmlidXRlIHdpdGggYSBj YWNoZWQKKwkJICogb2Zmc2V0LiAgV2UgZXhwZWN0IHRoZSBmaW5hbCBjYWNoZWQgb2Zmc2V0IGF0 dHJpYnV0ZSB0byBoYXZlIGEKKwkJICogZml4ZWQgd2lkdGgsIHNvIGp1c3QgYWRkIHRoZSBhdHRs ZW4gdG8gdGhlIGF0dGNhY2hlb2ZmLgorCQkgKi8KKwkJQXNzZXJ0KGNhdHRyLT5hdHRsZW4gPiAw KTsKKwkJb2ZmID0gY2F0dHItPmF0dGNhY2hlb2ZmICsgY2F0dHItPmF0dGxlbjsKKwl9CisjZW5k aWYKKworCS8qCisJICogSGFuZGxlIHRoZSBwb3J0aW9uIG9mIHRoZSB0dXBsZSB0aGF0IHdlIGhh dmUgY2FjaGVkIHRoZSBvZmZzZXQgZm9yIHVwCisJICogdG8gdGhlIGZpcnN0IE5VTEwgYXR0cmli dXRlLiAgVGhlIG9mZnNldCBpcyBlZmZlY3RpdmVseSBmaXhlZCBmb3IgdGhlc2UKKwkgKiBzbyB3 ZSBjYW4gdXNlIHRoZSBDb21wYWN0QXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYuCisJICovCisJaWYg KGF0dG51bSA8IGZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyKQorCXsKKwkJZG8KKwkJeworCQkJY2F0 dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisKKwkJCUFzc2Vy dChjYXR0ci0+YXR0Y2FjaGVvZmYgPj0gMCk7CisKKwkJCXZhbHVlc1thdHRudW1dID0gZmV0Y2hh dHQoY2F0dHIsIHRwICsgY2F0dHItPmF0dGNhY2hlb2ZmKTsKKwkJCWlzbnVsbFthdHRudW1dID0g ZmFsc2U7CisJCX0gd2hpbGUgKCsrYXR0bnVtIDwgZmlyc3ROb25DYWNoZU9mZnNldEF0dHIpOwor CisJCS8qCisJCSAqIFBvaW50IHRoZSBvZmZzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBh dHRyaWJ1dGUgd2l0aCBhIGNhY2hlZAorCQkgKiBvZmZzZXQuICBXZSBleHBlY3QgdGhlIGZpbmFs IGNhY2hlZCBvZmZzZXQgYXR0cmlidXRlIHRvIGhhdmUgYQorCQkgKiBmaXhlZCB3aWR0aCwgc28g anVzdCBhZGQgdGhlIGF0dGxlbiB0byB0aGUgYXR0Y2FjaGVvZmYKKwkJICovCisJCUFzc2VydChj YXR0ci0+YXR0bGVuID4gMCk7CisJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZiArIGNhdHRyLT5h dHRsZW47CisJfQorCWVsc2UgaWYgKGF0dG51bSA9PSAwKQogCXsKIAkJLyogU3RhcnQgZnJvbSB0 aGUgZmlyc3QgYXR0cmlidXRlICovCiAJCW9mZiA9IDA7Ci0JCXNsb3cgPSBmYWxzZTsKIAl9CiAJ ZWxzZQogCXsKIAkJLyogUmVzdG9yZSBzdGF0ZSBmcm9tIHByZXZpb3VzIGV4ZWN1dGlvbiAqLwog CQlvZmYgPSAqb2ZmcDsKLQkJc2xvdyA9IFRUU19TTE9XKHNsb3QpOwogCX0KIAogCS8qCi0JICog SWYgJ3Nsb3cnIGlzbid0IHNldCwgdHJ5IGRlZm9ybWluZyB1c2luZyBkZWZvcm1pbmcgY29kZSB0 aGF0IGRvZXMgbm90Ci0JICogY29udGFpbiBhbnkgb2YgdGhlIGV4dHJhIGNoZWNrcyByZXF1aXJl ZCBmb3Igbm9uLWZpeGVkIG9mZnNldAotCSAqIGRlZm9ybWluZy4gIER1cmluZyBkZWZvcm1pbmcs IGlmIG9yIHdoZW4gd2UgZmluZCBhIE5VTEwgb3IgYSB2YXJpYWJsZQotCSAqIGxlbmd0aCBhdHRy aWJ1dGUsIHdlJ2xsIHN3aXRjaCB0byBhIGRlZm9ybWluZyBtZXRob2Qgd2hpY2ggaW5jbHVkZXMg dGhlCi0JICogZXh0cmEgY29kZSByZXF1aXJlZCBmb3Igbm9uLWZpeGVkIG9mZnNldCBkZWZvcm1p bmcsIGEuay5hIHNsb3cgbW9kZS4KLQkgKiBCZWNhdXNlIHRoaXMgaXMgcGVyZm9ybWFuY2UgY3Jp dGljYWwsIHdlIGlubGluZQotCSAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwgcGFz c2luZyB0aGUgJ3Nsb3cnIGFuZCAnaGFzbnVsbCcKLQkgKiBwYXJhbWV0ZXJzIGFzIGNvbnN0YW50 cyB0byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCBzcGVjaWFsaXplZCBjb2RlCi0JICogd2l0 aCB0aGUga25vd24tY29uc3QgZmFsc2UgY29tcGFyaXNvbnMgYW5kIHN1YnNlcXVlbnQgYnJhbmNo ZXMgcmVtb3ZlZC4KKwkgKiBIYW5kbGUgYW55IHBvcnRpb24gb2YgdGhlIHR1cGxlIHRoYXQgZG9l c24ndCBoYXZlIGEgZml4ZWQgb2Zmc2V0IHVwCisJICogdW50aWwgdGhlIGZpcnN0IE5VTEwgYXR0 cmlidXRlLiAgVGhpcyBsb29wcyBvbmx5IGRpZmZlcnMgZnJvbSB0aGUgb25lCisJICogYWZ0ZXIg aXQgYnkgdGhlIE5VTEwgY2hlY2tzLgogCSAqLwotCWlmICghc2xvdykKKwlmb3IgKDsgYXR0bnVt IDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVtKyspCiAJewotCQkvKiBUdXBsZSB3aXRob3V0IGFueSBO VUxMcz8gV2UgY2FuIHNraXAgZG9pbmcgYW55IE5VTEwgY2hlY2tpbmcgKi8KLQkJaWYgKCFoYXNu dWxscykKLQkJCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwoc2xvdCwK LQkJCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJCQkJIGF0dG51bSwKLQkJCQkJCQkJCQkJ CQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAvKiBzbG93ICovCi0JCQkJCQkJCQkJCQkJ IGZhbHNlLCAvKiBoYXNudWxscyAqLwotCQkJCQkJCQkJCQkJCSAmb2ZmLAotCQkJCQkJCQkJCQkJ CSAmc2xvdyk7Ci0JCWVsc2UKLQkJCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50 ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJCQkJIGF0dG51bSwK LQkJCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAvKiBzbG93ICovCi0J CQkJCQkJCQkJCQkJIHRydWUsCS8qIGhhc251bGxzICovCi0JCQkJCQkJCQkJCQkJICZvZmYsCi0J CQkJCQkJCQkJCQkJICZzbG93KTsKKwkJY2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBs ZURlc2MsIGF0dG51bSk7CisKKwkJLyogYWxpZ24gdGhlIG9mZnNldCBmb3IgdGhpcyBhdHRyaWJ1 dGUgKi8KKwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCSAgY2F0dHIt PmF0dGFsaWduYnksCisJCQkJCQkJCSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJICB0cCArIG9m Zik7CisKKwkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOworCQlp c251bGxbYXR0bnVtXSA9IGZhbHNlOworCisJCS8qIG1vdmUgdGhlIG9mZnNldCBiZXlvbmQgdGhp cyBhdHRyaWJ1dGUgKi8KKwkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHIt PmF0dGxlbiwgdHAgKyBvZmYpOwogCX0KIAotCS8qIElmIHRoZXJlJ3Mgc3RpbGwgd29yayB0byBk byB0aGVuIHdlIG11c3QgYmUgaW4gc2xvdyBtb2RlICovCi0JaWYgKGF0dG51bSA8IG5hdHRzKQor CS8qCisJICogTm93IGhhbmRsZSBhbnkgcmVtYWluaW5nIHR1cGxlcywgdGhpcyB0aW1lIGluY2x1 ZGUgTlVMTCBjaGVja3MgYXMgd2UncmUKKwkgKiBub3cgYXQgdGhlIGZpcnN0IE5VTEwgYXR0cmli dXRlLgorCSAqLworCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCiAJewotCQkvKiBY WFggaXMgaXQgd29ydGggYWRkaW5nIGEgc2VwYXJhdGUgY2FsbCB3aGVuIGhhc251bGxzIGlzIGZh bHNlPyAqLwotCQlhdHRudW0gPSBzbG90X2RlZm9ybV9oZWFwX3R1cGxlX2ludGVybmFsKHNsb3Qs Ci0JCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJCQkgYXR0bnVtLAotCQkJCQkJCQkJCQkJ IG5hdHRzLAotCQkJCQkJCQkJCQkJIHRydWUsCS8qIHNsb3cgKi8KLQkJCQkJCQkJCQkJCSBoYXNu dWxscywKLQkJCQkJCQkJCQkJCSAmb2ZmLAotCQkJCQkJCQkJCQkJICZzbG93KTsKKwkJaWYgKGF0 dF9pc251bGwoYXR0bnVtLCBicCkpCisJCXsKKwkJCXZhbHVlc1thdHRudW1dID0gKERhdHVtKSAw OworCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQljYXR0 ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKworCQkvKiBhbGln biB0aGUgb2Zmc2V0IGZvciB0aGlzIGF0dHJpYnV0ZSAqLworCQlvZmYgPSBhdHRfcG9pbnRlcl9h bGlnbmJ5KG9mZiwKKwkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJICBjYXR0 ci0+YXR0bGVuLAorCQkJCQkJCQkgIHRwICsgb2ZmKTsKKworCQl2YWx1ZXNbYXR0bnVtXSA9IGZl dGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CisJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisKKwkJ LyogbW92ZSB0aGUgb2Zmc2V0IGJleW9uZCB0aGlzIGF0dHJpYnV0ZSAqLworCQlvZmYgPSBhdHRf YWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CiAJfQogCiAJ LyoKQEAgLTEyMDEsMTAgKzExNzgsNiBAQCBzbG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFi bGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVpbnQzMiAqb2ZmcCwKIAkgKi8KIAlzbG90 LT50dHNfbnZhbGlkID0gYXR0bnVtOwogCSpvZmZwID0gb2ZmOwotCWlmIChzbG93KQotCQlzbG90 LT50dHNfZmxhZ3MgfD0gVFRTX0ZMQUdfU0xPVzsKLQllbHNlCi0JCXNsb3QtPnR0c19mbGFncyAm PSB+VFRTX0ZMQUdfU0xPVzsKIH0KIAogY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgVFRTT3BzVmly dHVhbCA9IHsKQEAgLTIxNzMsNiArMjE0Niw4IEBAIEV4ZWNUeXBlRnJvbVRMSW50ZXJuYWwoTGlz dCAqdGFyZ2V0TGlzdCwgYm9vbCBza2lwanVuaykKIAkJY3VyX3Jlc25vKys7CiAJfQogCisJVHVw bGVEZXNjRmluYWxpemUodHlwZUluZm8pOworCiAJcmV0dXJuIHR5cGVJbmZvOwogfQogCkBAIC0y MjA3LDYgKzIxODIsOCBAQCBFeGVjVHlwZUZyb21FeHByTGlzdChMaXN0ICpleHByTGlzdCkKIAkJ Y3VyX3Jlc25vKys7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUodHlwZUluZm8pOworCiAJcmV0 dXJuIHR5cGVJbmZvOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl RnVuY3Rpb25zY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMK aW5kZXggNjNlNjA1ZTFmODEuLmZlYjgyZDY0OTY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUZ1bmN0aW9uc2Nhbi5jCkBAIC00MTQsNiArNDE0LDcgQEAgRXhlY0luaXRGdW5jdGlvblNjYW4o RnVuY3Rpb25TY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQlUdXBs ZURlc2NJbml0RW50cnlDb2xsYXRpb24odHVwZGVzYywKIAkJCQkJCQkJCQkJKEF0dHJOdW1iZXIp IDEsCiAJCQkJCQkJCQkJCWV4cHJDb2xsYXRpb24oZnVuY2V4cHIpKTsKKwkJCQlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTQ4NSw2ICs0ODYsNyBA QCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihGdW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCQkJCQkJCSAgIDApOwogCQl9CiAKKwkJVHVwbGVEZXNjRmluYWxpemUo c2Nhbl90dXBkZXNjKTsKIAkJQXNzZXJ0KGF0dG5vID09IG5hdHRzKTsKIAl9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZGVmb3JtLmMgYi9zcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCmluZGV4IDNlYjA4N2ViNTZiLi4xMjUyMWUzZTQ2YSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9kZWZvcm0uYworKysgYi9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2RlZm9ybS5jCkBAIC02Miw3ICs2Miw2IEBAIHNs b3RfY29tcGlsZV9kZWZvcm0oTExWTUppdENvbnRleHQgKmNvbnRleHQsIFR1cGxlRGVzYyBkZXNj LAogCUxMVk1WYWx1ZVJlZiB2X3R0c192YWx1ZXM7CiAJTExWTVZhbHVlUmVmIHZfdHRzX251bGxz OwogCUxMVk1WYWx1ZVJlZiB2X3Nsb3RvZmZwOwotCUxMVk1WYWx1ZVJlZiB2X2ZsYWdzcDsKIAlM TFZNVmFsdWVSZWYgdl9udmFsaWRwOwogCUxMVk1WYWx1ZVJlZiB2X252YWxpZDsKIAlMTFZNVmFs dWVSZWYgdl9tYXhhdHQ7CkBAIC0xNzgsNyArMTc3LDYgQEAgc2xvdF9jb21waWxlX2RlZm9ybShM TFZNSml0Q29udGV4dCAqY29udGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJdl90dHNfbnVsbHMgPQog CQlsX2xvYWRfc3RydWN0X2dlcChiLCBTdHJ1Y3RUdXBsZVRhYmxlU2xvdCwgdl9zbG90LCBGSUVM RE5PX1RVUExFVEFCTEVTTE9UX0lTTlVMTCwKIAkJCQkJCSAgInR0c19JU05VTEwiKTsKLQl2X2Zs YWdzcCA9IGxfc3RydWN0X2dlcChiLCBTdHJ1Y3RUdXBsZVRhYmxlU2xvdCwgdl9zbG90LCBGSUVM RE5PX1RVUExFVEFCTEVTTE9UX0ZMQUdTLCAiIik7CiAJdl9udmFsaWRwID0gbF9zdHJ1Y3RfZ2Vw KGIsIFN0cnVjdFR1cGxlVGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJMRVNMT1Rf TlZBTElELCAiIik7CiAKIAlpZiAob3BzID09ICZUVFNPcHNIZWFwVHVwbGUgfHwgb3BzID09ICZU VFNPcHNCdWZmZXJIZWFwVHVwbGUpCkBAIC03NDcsMTQgKzc0NSwxMCBAQCBzbG90X2NvbXBpbGVf ZGVmb3JtKExMVk1KaXRDb250ZXh0ICpjb250ZXh0LCBUdXBsZURlc2MgZGVzYywKIAogCXsKIAkJ TExWTVZhbHVlUmVmIHZfb2ZmID0gbF9sb2FkKGIsIFR5cGVTaXplVCwgdl9vZmZwLCAiIik7Ci0J CUxMVk1WYWx1ZVJlZiB2X2ZsYWdzOwogCiAJCUxMVk1CdWlsZFN0b3JlKGIsIGxfaW50MTZfY29u c3QobGMsIG5hdHRzKSwgdl9udmFsaWRwKTsKIAkJdl9vZmYgPSBMTFZNQnVpbGRUcnVuYyhiLCB2 X29mZiwgTExWTUludDMyVHlwZUluQ29udGV4dChsYyksICIiKTsKIAkJTExWTUJ1aWxkU3RvcmUo Yiwgdl9vZmYsIHZfc2xvdG9mZnApOwotCQl2X2ZsYWdzID0gbF9sb2FkKGIsIExMVk1JbnQxNlR5 cGVJbkNvbnRleHQobGMpLCB2X2ZsYWdzcCwgInR0c19mbGFncyIpOwotCQl2X2ZsYWdzID0gTExW TUJ1aWxkT3IoYiwgdl9mbGFncywgbF9pbnQxNl9jb25zdChsYywgVFRTX0ZMQUdfU0xPVyksICIi KTsKLQkJTExWTUJ1aWxkU3RvcmUoYiwgdl9mbGFncywgdl9mbGFnc3ApOwogCQlMTFZNQnVpbGRS ZXRWb2lkKGIpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jl bGF0aW9uLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRleCAzZWM4 ZDhkZTAxMS4uMGFkNzY3ZDgyN2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCkBA IC0xODkxLDYgKzE4OTEsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24odHVwZGVzYywKIAkJ CQkJCQkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGZ1bmNleHBy KSk7CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJfQogCQllbHNlIGlmIChmdW5j dHlwY2xhc3MgPT0gVFlQRUZVTkNfUkVDT1JEKQogCQl7CkBAIC0xOTQ4LDYgKzE5NDksNyBAQCBh ZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsCiAKIAkJCQlp Kys7CiAJCQl9CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCQkJLyoKIAkJCSAq IEVuc3VyZSB0aGF0IHRoZSBjb2xkZWZsaXN0IGRlZmluZXMgYSBsZWdhbCBzZXQgb2YgbmFtZXMg KG5vCkBAIC0yMDE2LDcgKzIwMTgsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAgMCk7CiAJCQkvKiBubyBuZWVkIHRvIHNldCBj b2xsYXRpb24gKi8KIAkJfQotCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlBc3Nl cnQobmF0dHMgPT0gdG90YWxhdHRzKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Rhcmdl dC5jCmluZGV4IGI1YTJmOTE1YjY3Li41ZmQxN2YzZDhkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90 YXJnZXQuYwpAQCAtMTU3MCw2ICsxNTcwLDggQEAgZXhwYW5kUmVjb3JkVmFyaWFibGUoUGFyc2VT dGF0ZSAqcHN0YXRlLCBWYXIgKnZhciwgaW50IGxldmVsc3VwKQogCQl9CiAJCUFzc2VydChsbmFt ZSA9PSBOVUxMICYmIGx2YXIgPT0gTlVMTCk7CS8qIGxpc3RzIHNhbWUgbGVuZ3RoPyAqLwogCisJ CVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlRGVzYyk7CisKIAkJcmV0dXJuIHR1cGxlRGVzYzsKIAl9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIv bGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNl aXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggN2M4NjM5YjMyZTkuLjRiMmQ2MGZlM2MyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBx d2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2Vp dmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtMTA3NCw2ICsxMDc0LDcgQEAgbGlicHFyY3ZfcHJv Y2Vzc1R1cGxlcyhQR3Jlc3VsdCAqcGdyZXMsIFdhbFJjdkV4ZWNSZXN1bHQgKndhbHJlcywKIAkJ VHVwbGVEZXNjSW5pdEVudHJ5KHdhbHJlcy0+dHVwbGVkZXNjLCAoQXR0ck51bWJlcikgY29sbiAr IDEsCiAJCQkJCQkgICBQUWZuYW1lKHBncmVzLCBjb2xuKSwgcmV0VHlwZXNbY29sbl0sIC0xLCAw KTsKIAlhdHRpbm1ldGEgPSBUdXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHdhbHJlcy0+dHVwbGVk ZXNjKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh3YWxyZXMtPnR1cGxlZGVzYyk7CiAKIAkvKiBObyBw b2ludCBpbiBkb2luZyBtb3JlIGhlcmUgaWYgdGhlcmUgd2VyZSBubyB0dXBsZXMgcmV0dXJuZWQu ICovCiAJaWYgKFBRbnR1cGxlcyhwZ3JlcykgPT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmMKaW5kZXggMWFiMDk2NTVhNzAuLjI2OWIwODFiYWMwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi93YWxzZW5kZXIuYwpAQCAtNDUyLDYgKzQ1Miw3IEBAIElkZW50aWZ5U3lzdGVtKHZvaWQpCiAJ CQkJCQkJICBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgNCwgImRibmFtZSIsCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7 CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0 aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0 LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CkBAIC00OTcsNiArNDk4LDcgQEAgUmVhZFJlcGxp Y2F0aW9uU2xvdChSZWFkUmVwbGljYXRpb25TbG90Q21kICpjbWQpCiAJLyogVGltZUxpbmVJRCBp cyB1bnNpZ25lZCwgc28gaW50NCBpcyBub3Qgd2lkZSBlbm91Z2guICovCiAJVHVwbGVEZXNjSW5p dEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgInJlc3RhcnRfdGxpIiwKIAkJ CQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAog CW1lbXNldChudWxscywgdHJ1ZSwgUkVBRF9SRVBMSUNBVElPTl9TTE9UX0NPTFMgKiBzaXplb2Yo Ym9vbCkpOwogCkBAIC01OTksNiArNjAxLDcgQEAgU2VuZFRpbWVMaW5lSGlzdG9yeShUaW1lTGlu ZUhpc3RvcnlDbWQgKmNtZCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMik7 CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgImZp bGVuYW1lIiwgVEVYVE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDIsICJjb250ZW50IiwgVEVYVE9JRCwgLTEsIDApOworCVR1cGxl RGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJVExIaXN0b3J5RmlsZU5hbWUoaGlzdGZuYW1lLCBj bWQtPnRpbWVsaW5lKTsKIAlUTEhpc3RvcnlGaWxlUGF0aChwYXRoLCBjbWQtPnRpbWVsaW5lKTsK QEAgLTEwMTYsNiArMTAxOSw3IEBAIFN0YXJ0UmVwbGljYXRpb24oU3RhcnRSZXBsaWNhdGlvbkNt ZCAqY21kKQogCQkJCQkJCQkgIElOVDhPSUQsIC0xLCAwKTsKIAkJVHVwbGVEZXNjSW5pdEJ1aWx0 aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgIm5leHRfdGxpX3N0YXJ0cG9zIiwKIAkJ CQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CiAJCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGUgKi8KIAkJdHN0YXRlID0gYmVn aW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAg LTEzNzAsNiArMTM3NCw3IEBAIENyZWF0ZVJlcGxpY2F0aW9uU2xvdChDcmVhdGVSZXBsaWNhdGlv blNsb3RDbWQgKmNtZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0 QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAib3V0cHV0X3BsdWdpbiIsCiAJ CQkJCQkJICBURVhUT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAK IAkvKiBwcmVwYXJlIGZvciBwcm9qZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2lu X3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvYWNsLmMKaW5kZXggM2E2OTA1Zjk1NDYuLjlkMzcwNTNjODFlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvYWNsLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FjbC5j CkBAIC0xODE4LDYgKzE4MTgsNyBAQCBhY2xleHBsb2RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNCwgImlzX2dyYW50YWJsZSIs CiAJCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAog CQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgY29udGV4dCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9nZW5m aWxlLmMKaW5kZXggYzA4MzYwOGIxZDUuLmJmYjk0OTQwMWQwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9nZW5m aWxlLmMKQEAgLTQ1NCw2ICs0NTQsNyBAQCBwZ19zdGF0X2ZpbGUoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJICAgImNyZWF0aW9uIiwgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJ bml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDYsCiAJCQkJCSAgICJpc2RpciIsIEJPT0xP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1cGxlRGVz Yyh0dXBkZXNjKTsKIAogCW1lbXNldChpc251bGwsIGZhbHNlLCBzaXplb2YoaXNudWxsKSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggOWRhZGQ2ZGE2NzIuLjQ0ODFjMzU0ZmQ2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCkBAIC0xNDYsNiArMTQ2LDcgQEAgcGdfbG9ja19z dGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChB dHRyTnVtYmVyKSAxNiwgIndhaXRzdGFydCIsCiAJCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEs IDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlmdW5jY3R4LT50dXBsZV9k ZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L29yZGVyZWRzZXRhZ2dzLmMKaW5kZXggM2I2ZGE4ZTM2YWMuLmZkOGI4Njc2NDcwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwpAQCAtMjMzLDYgKzIzMyw3IEBAIG9yZGVy ZWRfc2V0X3N0YXJ0dXAoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdXNlX3R1cGxlcykK IAkJCQkJCQkJICAgLTEsCiAJCQkJCQkJCSAgIDApOwogCisJCQkJVHVwbGVEZXNjRmluYWxpemUo bmV3ZGVzYyk7CiAJCQkJRnJlZVR1cGxlRGVzYyhxc3RhdGUtPnR1cGRlc2MpOwogCQkJCXFzdGF0 ZS0+dHVwZGVzYyA9IG5ld2Rlc2M7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5j CmluZGV4IDczY2EwYmIwYjdmLi4wOGFkMjdlNTdjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3Rh dGZ1bmNzLmMKQEAgLTc2OSw2ICs3NjksNyBAQCBwZ19zdGF0X2dldF9iYWNrZW5kX3N1YnhhY3Qo UEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1i ZXIpIDIsICJzdWJ4YWN0X292ZXJmbG93IiwKIAkJCQkJICAgQk9PTE9JRCwgLTEsIDApOwogCisJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAK IAlpZiAoKGxvY2FsX2JlZW50cnkgPSBwZ3N0YXRfZ2V0X2xvY2FsX2JlZW50cnlfYnlfcHJvY19u dW1iZXIocHJvY051bWJlcikpICE9IE5VTEwpCkBAIC0xNjU4LDYgKzE2NTksNyBAQCBwZ19zdGF0 X3dhbF9idWlsZF90dXBsZShQZ1N0YXRfV2FsQ291bnRlcnMgd2FsX2NvdW50ZXJzLAogCVR1cGxl RGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNiwgInN0YXRzX3Jlc2V0IiwKIAkJ CQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJLyogRmlsbCB2YWx1ZXMgYW5kIE5V TExzICovCkBAIC0yMDg1LDYgKzIwODcsNyBAQCBwZ19zdGF0X2dldF9hcmNoaXZlcihQR19GVU5D VElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNywg InN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAorCVR1cGxl RGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJLyog R2V0IHN0YXRpc3RpY3MgYWJvdXQgdGhlIGFyY2hpdmVyIHByb2Nlc3MgKi8KQEAgLTIxNjYsNiAr MjE2OSw3IEBAIHBnX3N0YXRfZ2V0X3JlcGxpY2F0aW9uX3Nsb3QoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVw ZGVzYywgKEF0dHJOdW1iZXIpIDEzLCAic3RhdHNfcmVzZXQiLAogCQkJCQkgICBUSU1FU1RBTVBU Wk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCUJsZXNzVHVwbGVE ZXNjKHR1cGRlc2MpOwogCiAJbmFtZXN0cmNweSgmc2xvdG5hbWUsIHRleHRfdG9fY3N0cmluZyhz bG90bmFtZV90ZXh0KSk7CkBAIC0yMjUzLDYgKzIyNTcsNyBAQCBwZ19zdGF0X2dldF9zdWJzY3Jp cHRpb25fc3RhdHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwog CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMTMsICJzdGF0c19yZXNl dCIsCiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUo dHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAlpZiAoIXN1YmVudHJ5KQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX29wLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdHN2ZWN0b3Jfb3AuYwppbmRleCA5NGUwZmVkODMwOS4uN2NhMTlhOTc4 ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jCkBAIC02NTEsNiArNjUxLDcgQEAg dHN2ZWN0b3JfdW5uZXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkgICBURVhUQVJSQVlPSUQs IC0xLCAwKTsKIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRl c2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKIAkJCWVsb2coRVJST1IsICJyZXR1cm4gdHlwZSBt dXN0IGJlIGEgcm93IHR5cGUiKTsKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCWZ1 bmNjdHgtPnR1cGxlX2Rlc2MgPSB0dXBkZXNjOwogCiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IFBH X0dFVEFSR19UU1ZFQ1RPUl9DT1BZKDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5k ZXggNmI2MzRjOWZmZjEuLjk5OGJlMjRhYzQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMKQEAgLTY2NiwxNCArNjY2LDYgQEAgUmVsYXRpb25CdWlsZFR1cGxlRGVzYyhSZWxhdGlvbiBy ZWxhdGlvbikKIAkJZWxvZyhFUlJPUiwgInBnX2F0dHJpYnV0ZSBjYXRhbG9nIGlzIG1pc3Npbmcg JWQgYXR0cmlidXRlKHMpIGZvciByZWxhdGlvbiBPSUQgJXUiLAogCQkJIG5lZWQsIFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pKTsKIAotCS8qCi0JICogV2UgY2FuIGVhc2lseSBzZXQgdGhlIGF0 dGNhY2hlb2ZmIHZhbHVlIGZvciB0aGUgZmlyc3QgYXR0cmlidXRlOiBpdAotCSAqIG11c3QgYmUg emVyby4gIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3Igc3BlY2lhbCBjYXNlcyBmb3IgYXR0 bnVtPTEKLQkgKiB0aGF0IHVzZWQgdG8gZXhpc3QgaW4gZmFzdGdldGF0dHIoKSBhbmQgaW5kZXhf Z2V0YXR0cigpLgotCSAqLwotCWlmIChSZWxhdGlvbkdldE51bWJlck9mQXR0cmlidXRlcyhyZWxh dGlvbikgPiAwKQotCQlUdXBsZURlc2NDb21wYWN0QXR0cihyZWxhdGlvbi0+cmRfYXR0LCAwKS0+ YXR0Y2FjaGVvZmYgPSAwOwotCiAJLyoKIAkgKiBTZXQgdXAgY29uc3RyYWludC9kZWZhdWx0IGlu Zm8KIAkgKi8KQEAgLTcyOSw2ICs3MjEsOCBAQCBSZWxhdGlvbkJ1aWxkVHVwbGVEZXNjKFJlbGF0 aW9uIHJlbGF0aW9uKQogCQlwZnJlZShjb25zdHIpOwogCQlyZWxhdGlvbi0+cmRfYXR0LT5jb25z dHIgPSBOVUxMOwogCX0KKworCVR1cGxlRGVzY0ZpbmFsaXplKHJlbGF0aW9uLT5yZF9hdHQpOwog fQogCiAvKgpAQCAtMTk4Myw4ICsxOTc3LDcgQEAgZm9ybXJkZXNjKGNvbnN0IGNoYXIgKnJlbGF0 aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1 dGUocmVsYXRpb24tPnJkX2F0dCwgaSk7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSBmaXJzdCBhdHRy aWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVsYXRpb25CdWlsZFR1cGxlRGVzYyAqLwotCVR1cGxl RGVzY0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7CisJ VHVwbGVEZXNjRmluYWxpemUocmVsYXRpb24tPnJkX2F0dCk7CiAKIAkvKiBtYXJrIG5vdC1udWxs IHN0YXR1cyAqLwogCWlmIChoYXNfbm90X251bGwpCkBAIC0zNjg4LDYgKzM2ODEsOCBAQCBSZWxh dGlvbkJ1aWxkTG9jYWxSZWxhdGlvbihjb25zdCBjaGFyICpyZWxuYW1lLAogCWZvciAoaSA9IDA7 IGkgPCBuYXR0czsgaSsrKQogCQlUdXBsZURlc2NBdHRyKHJlbC0+cmRfYXR0LCBpKS0+YXR0cmVs aWQgPSByZWxpZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRfYXR0KTsKKwogCXJlbC0+ cmRfcmVsLT5yZWx0YWJsZXNwYWNlID0gcmVsdGFibGVzcGFjZTsKIAogCWlmIChtYXBwZWRfcmVs YXRpb24pCkBAIC00NDQxLDggKzQ0MzYsNyBAQCBCdWlsZEhhcmRjb2RlZERlc2NyaXB0b3IoaW50 IG5hdHRzLCBjb25zdCBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgKmF0dHJzKQogCQlwb3B1bGF0ZV9j b21wYWN0X2F0dHJpYnV0ZShyZXN1bHQsIGkpOwogCX0KIAotCS8qIGluaXRpYWxpemUgZmlyc3Qg YXR0cmlidXRlJ3MgYXR0Y2FjaGVvZmYsIGNmIFJlbGF0aW9uQnVpbGRUdXBsZURlc2MgKi8KLQlU dXBsZURlc2NDb21wYWN0QXR0cihyZXN1bHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7CisJVHVwbGVE ZXNjRmluYWxpemUocmVzdWx0KTsKIAogCS8qIE5vdGU6IHdlIGRvbid0IGJvdGhlciB0byBzZXQg dXAgYSBUdXBsZUNvbnN0ciBlbnRyeSAqLwogCkBAIC02MjY4LDYgKzYyNjIsOCBAQCBsb2FkX3Jl bGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkKIAkJCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmli dXRlKHJlbC0+cmRfYXR0LCBpKTsKIAkJfQogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRf YXR0KTsKKwogCQkvKiBuZXh0IHJlYWQgdGhlIGFjY2VzcyBtZXRob2Qgc3BlY2lmaWMgZmllbGQg Ki8KIAkJaWYgKGZyZWFkKCZsZW4sIDEsIHNpemVvZihsZW4pLCBmcCkgIT0gc2l6ZW9mKGxlbikp CiAJCQlnb3RvIHJlYWRfZmFpbGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1n ci9mdW5jYXBpLmMgYi9zcmMvYmFja2VuZC91dGlscy9mbWdyL2Z1bmNhcGkuYwppbmRleCA4YTkz NGVhOGRjYS4uNTE2ZDAyY2ZiODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3Iv ZnVuY2FwaS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZnVuY2FwaS5jCkBAIC0zNDAs NiArMzQwLDggQEAgZ2V0X2V4cHJfcmVzdWx0X3R5cGUoTm9kZSAqZXhwciwKIAkJCQkJCQkJCQll eHByQ29sbGF0aW9uKGNvbCkpOwogCQkJaSsrOwogCQl9CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1 cGRlc2MpOworCiAJCWlmIChyZXN1bHRUeXBlSWQpCiAJCQkqcmVzdWx0VHlwZUlkID0gcmV4cHIt PnJvd190eXBlaWQ7CiAJCWlmIChyZXN1bHRUdXBsZURlc2MpCkBAIC0xMDQ0LDYgKzEwNDYsNyBA QCByZXNvbHZlX3BvbHltb3JwaGljX3R1cGRlc2MoVHVwbGVEZXNjIHR1cGRlc2MsIG9pZHZlY3Rv ciAqZGVjbGFyZWRfYXJncywKIAkJfQogCX0KIAorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xODUzLDYgKzE4NTYsOCBAQCBidWlsZF9mdW5jdGlv bl9yZXN1bHRfdHVwZGVzY19kKGNoYXIgcHJva2luZCwKIAkJCQkJCSAgIDApOwogCX0KIAorCVR1 cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTE5NzAsNiAr MTk3NSw3IEBAIFR5cGVHZXRUdXBsZURlc2MoT2lkIHR5cGVvaWQsIExpc3QgKmNvbGFsaWFzZXMp CiAJCQkJCQkgICB0eXBlb2lkLAogCQkJCQkJICAgLTEsCiAJCQkJCQkgICAwKTsKKwkJVHVwbGVE ZXNjRmluYWxpemUodHVwZGVzYyk7CiAJfQogCWVsc2UgaWYgKGZ1bmN0eXBjbGFzcyA9PSBUWVBF RlVOQ19SRUNPUkQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX2Z1bmNzLmMKaW5kZXggNGYzZTQw YmY0NzAuLmI1NjZhOGVmNjAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX2Z1bmNzLmMKQEAgLTQ0 NCw2ICs0NDQsNyBAQCBHZXRQR1ZhcmlhYmxlUmVzdWx0RGVzYyhjb25zdCBjaGFyICpuYW1lKQog CQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIHZhcm5hbWUsCiAJ CQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAJfQorCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCXJldHVybiB0dXBkZXNjOwogfQogCkBAIC00NjUsNiArNDY2LDcgQEAgU2hvd0dVQ0NvbmZp Z09wdGlvbihjb25zdCBjaGFyICpuYW1lLCBEZXN0UmVjZWl2ZXIgKmRlc3QpCiAJdHVwZGVzYyA9 IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIHZhcm5hbWUsCiAJCQkJCQkJICBURVhUT0lELCAtMSwg MCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAkvKiBwcmVwYXJlIGZvciBwcm9q ZWN0aW9uIG9mIHR1cGxlcyAqLwogCXRzdGF0ZSA9IGJlZ2luX3R1cF9vdXRwdXRfdHVwZGVzYyhk ZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CkBAIC00OTksNiArNTAxLDcgQEAgU2hvd0Fs bEdVQ0NvbmZpZyhEZXN0UmVjZWl2ZXIgKmRlc3QpCiAJCQkJCQkJICBURVhUT0lELCAtMSwgMCk7 CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMywgImRl c2NyaXB0aW9uIiwKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6 ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJ dHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNW aXJ0dWFsKTsKQEAgLTkzOSw2ICs5NDIsOCBAQCBzaG93X2FsbF9zZXR0aW5ncyhQR19GVU5DVElP Tl9BUkdTKQogCQkgKiBDIHN0cmluZ3MKIAkJICovCiAJCWF0dGlubWV0YSA9IFR1cGxlRGVzY0dl dEF0dEluTWV0YWRhdGEodHVwZGVzYyk7CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwor CiAJCWZ1bmNjdHgtPmF0dGlubWV0YSA9IGF0dGlubWV0YTsKIAogCQkvKiBjb2xsZWN0IHRoZSB2 YXJpYWJsZXMsIGluIHNvcnRlZCBvcmRlciAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2h0dXBfZGV0YWlscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oCmlu ZGV4IGQ0MDY4MjVmZjIyLi45NGI0Mjc5YjdmMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2h0dXBfZGV0YWlscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMu aApAQCAtODY1LDIwICs4NjUsMTcgQEAgZXh0ZXJuIE1pbmltYWxUdXBsZSBtaW5pbWFsX2V4cGFu ZF90dXBsZShIZWFwVHVwbGUgc291cmNlVHVwbGUsIFR1cGxlRGVzYyB0dXBsZUQKIHN0YXRpYyBp bmxpbmUgRGF0dW0KIGZhc3RnZXRhdHRyKEhlYXBUdXBsZSB0dXAsIGludCBhdHRudW0sIFR1cGxl RGVzYyB0dXBsZURlc2MsIGJvb2wgKmlzbnVsbCkKIHsKLQlBc3NlcnQoYXR0bnVtID4gMCk7CisJ Q29tcGFjdEF0dHJpYnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBh dHRudW0gLSAxKTsKIAorCUFzc2VydChhdHRudW0gPiAwKTsKIAkqaXNudWxsID0gZmFsc2U7Ci0J aWYgKEhlYXBUdXBsZU5vTnVsbHModHVwKSkKLQl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsK IAotCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSAtIDEpOwot CQlpZiAoYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJcmV0dXJuIGZldGNoYXR0KGF0dCwgKGNo YXIgKikgdHVwLT50X2RhdGEgKyB0dXAtPnRfZGF0YS0+dF9ob2ZmICsKLQkJCQkJCQlhdHQtPmF0 dGNhY2hlb2ZmKTsKLQkJZWxzZQotCQkJcmV0dXJuIG5vY2FjaGVnZXRhdHRyKHR1cCwgYXR0bnVt LCB0dXBsZURlc2MpOwotCX0KKwlpZiAoYXR0LT5hdHRjYWNoZW9mZiA+PSAwICYmICFIZWFwVHVw bGVIYXNOdWxscyh0dXApKQorCQlyZXR1cm4gZmV0Y2hhdHQoYXR0LCAoY2hhciAqKSB0dXAtPnRf ZGF0YSArIHR1cC0+dF9kYXRhLT50X2hvZmYgKworCQkJCQkJYXR0LT5hdHRjYWNoZW9mZik7CisK KwlpZiAoSGVhcFR1cGxlTm9OdWxscyh0dXApKQorCQlyZXR1cm4gbm9jYWNoZWdldGF0dHIodHVw LCBhdHRudW0sIHR1cGxlRGVzYyk7CiAJZWxzZQogCXsKIAkJaWYgKGF0dF9pc251bGwoYXR0bnVt IC0gMSwgdHVwLT50X2RhdGEtPnRfYml0cykpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaXR1cC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaAppbmRleCA1N2U0ZGFhZmIwZC4u ZTRiYjI3YjdlNTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pdHVwLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaApAQCAtMTMxLDI0ICsxMzEsMjAgQEAgSW5kZXhJbmZv RmluZERhdGFPZmZzZXQodW5zaWduZWQgc2hvcnQgdF9pbmZvKQogc3RhdGljIGlubGluZSBEYXR1 bQogaW5kZXhfZ2V0YXR0cihJbmRleFR1cGxlIHR1cCwgaW50IGF0dG51bSwgVHVwbGVEZXNjIHR1 cGxlRGVzYywgYm9vbCAqaXNudWxsKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dHIgPSBUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSAtIDEpOworCiAJQXNzZXJ0KGlzbnVs bCk7CiAJQXNzZXJ0KGF0dG51bSA+IDApOwogCiAJKmlzbnVsbCA9IGZhbHNlOwogCi0JaWYgKCFJ bmRleFR1cGxlSGFzTnVsbHModHVwKSkKLQl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dHIgPSBU dXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSAtIDEpOworCWlmIChhdHRyLT5h dHRjYWNoZW9mZiA+PSAwICYmICFJbmRleFR1cGxlSGFzTnVsbHModHVwKSkKKwkJcmV0dXJuIGZl dGNoYXR0KGF0dHIsCisJCQkJCQkoY2hhciAqKSB0dXAgKyBJbmRleEluZm9GaW5kRGF0YU9mZnNl dCh0dXAtPnRfaW5mbykgKworCQkJCQkJYXR0ci0+YXR0Y2FjaGVvZmYpOwogCi0JCWlmIChhdHRy LT5hdHRjYWNoZW9mZiA+PSAwKQotCQl7Ci0JCQlyZXR1cm4gZmV0Y2hhdHQoYXR0ciwKLQkJCQkJ CQkoY2hhciAqKSB0dXAgKyBJbmRleEluZm9GaW5kRGF0YU9mZnNldCh0dXAtPnRfaW5mbykgKwot CQkJCQkJCWF0dHItPmF0dGNhY2hlb2ZmKTsKLQkJfQotCQllbHNlCi0JCQlyZXR1cm4gbm9jYWNo ZV9pbmRleF9nZXRhdHRyKHR1cCwgYXR0bnVtLCB0dXBsZURlc2MpOwotCX0KKwlpZiAoIUluZGV4 VHVwbGVIYXNOdWxscyh0dXApKQorCQlyZXR1cm4gbm9jYWNoZV9pbmRleF9nZXRhdHRyKHR1cCwg YXR0bnVtLCB0dXBsZURlc2MpOwogCWVsc2UKIAl7CiAJCWlmIChhdHRfaXNudWxsKGF0dG51bSAt IDEsIChiaXRzOCAqKSB0dXAgKyBzaXplb2YoSW5kZXhUdXBsZURhdGEpKSkKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVz Yy5oCmluZGV4IGQ0NmNkYmY3YTNjLi4zYzQ0ZjJhYzExOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3R1cGRlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oCkBA IC0xMzEsNiArMTMxLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbXBhY3RBdHRyaWJ1dGUKICAqIEFu eSBjb2RlIG1ha2luZyBjaGFuZ2VzIG1hbnVhbGx5IHRvIGFuZCBmaWVsZHMgaW4gdGhlIEZvcm1E YXRhX3BnX2F0dHJpYnV0ZQogICogYXJyYXkgbXVzdCBzdWJzZXF1ZW50bHkgY2FsbCBwb3B1bGF0 ZV9jb21wYWN0X2F0dHJpYnV0ZSgpIHRvIGZsdXNoIHRoZQogICogY2hhbmdlcyBvdXQgdG8gdGhl IGNvcnJlc3BvbmRpbmcgJ2NvbXBhY3RfYXR0cnMnIGVsZW1lbnQuCisgKgorICogZmlyc3ROb25D YWNoZWRPZmZBdHRyIHN0b3JlcyB0aGUgaW5kZXggaW50byB0aGUgY29tcGFjdF9hdHRycyBhcnJh eSBmb3IgdGhlCisgKiBmaXJzdCBhdHRyaWJ1dGUgdGhhdCB3ZSBkb24ndCBoYXZlIGEga25vd24g YXR0Y2FjaGVvZmYgZm9yLgorICoKKyAqIE9uY2UgYSBUdXBsZURlc2MgaGFzIGJlZW4gcG9wdWxh dGVkLCBiZWZvcmUgaXQgaXMgdXNlZCBmb3IgYW55IHB1cnBvc2UKKyAqIFR1cGxlRGVzY0ZpbmFs aXplKCkgbXVzdCBiZSBjYWxsZWQgb24gaXQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IFR1cGxlRGVz Y0RhdGEKIHsKQEAgLTEzOCw2ICsxNDQsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgVHVwbGVEZXNjRGF0 YQogCU9pZAkJCXRkdHlwZWlkOwkJLyogY29tcG9zaXRlIHR5cGUgSUQgZm9yIHR1cGxlIHR5cGUg Ki8KIAlpbnQzMgkJdGR0eXBtb2Q7CQkvKiB0eXBtb2QgZm9yIHR1cGxlIHR5cGUgKi8KIAlpbnQJ CQl0ZHJlZmNvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50LCBvciAtMSBpZiBub3QgY291bnRpbmcg Ki8KKwlpbnQJCQlmaXJzdE5vbkNhY2hlZE9mZkF0dHI7CS8qIGluZGV4IG9mIHRoZSBmaXJzdCBh dHQgd2l0aG91dCBhbgorCQkJCQkJCQkJCSAqIGF0dGNhY2hlb2ZmICovCisjaWZkZWYgT1BUSU1J WkVfQllWQUwKKwlpbnQJCQlmaXJzdEJ5UmVmQXR0cjsgLyogaW5kZXggb2YgdGhlIGZpcnN0IGF0 dHIgd2l0aCAhYXR0Ynl2YWwsIG9yCisJCQkJCQkJCSAqIG5hdHRzIGlmIG5vbmUuICovCisjZW5k aWYKIAlUdXBsZUNvbnN0ciAqY29uc3RyOwkJLyogY29uc3RyYWludHMsIG9yIE5VTEwgaWYgbm9u ZSAqLwogCS8qIGNvbXBhY3RfYXR0cnNbTl0gaXMgdGhlIGNvbXBhY3QgbWV0YWRhdGEgb2YgQXR0 cmlidXRlIE51bWJlciBOKzEgKi8KIAlDb21wYWN0QXR0cmlidXRlIGNvbXBhY3RfYXR0cnNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKQEAgLTIwNSw2ICsyMTcsOCBAQCBleHRlcm4gdm9pZCBUdXBs ZURlc2NDb3B5KFR1cGxlRGVzYyBkc3QsIFR1cGxlRGVzYyBzcmMpOwogZXh0ZXJuIHZvaWQgVHVw bGVEZXNjQ29weUVudHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCiAJCQkJ CQkJICAgVHVwbGVEZXNjIHNyYywgQXR0ck51bWJlciBzcmNBdHRubyk7CiAKK2V4dGVybiB2b2lk IFR1cGxlRGVzY0ZpbmFsaXplKFR1cGxlRGVzYyB0dXBkZXNjKTsKKwogZXh0ZXJuIHZvaWQgRnJl ZVR1cGxlRGVzYyhUdXBsZURlc2MgdHVwZGVzYyk7CiAKIGV4dGVybiB2b2lkIEluY3JUdXBsZURl c2NSZWZDb3VudChUdXBsZURlc2MgdHVwZGVzYyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHVwbWFjcy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaAppbmRleCBlNmRm ODI2NDc1MC4uYTI2ZjE4YzM5ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBt YWNzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaApAQCAtMTUsNiArMTUsNyBA QAogI2RlZmluZSBUVVBNQUNTX0gKIAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZV9kLmgiCS8q IGZvciBUWVBBTElHTiBtYWNyb3MgKi8KKyNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAK IAogLyoKQEAgLTY5LDYgKzcwLDY5IEBAIGZldGNoX2F0dChjb25zdCB2b2lkICpULCBib29sIGF0 dGJ5dmFsLCBpbnQgYXR0bGVuKQogCWVsc2UKIAkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShUKTsK IH0KKworLyoKKyAqIGZpcnN0X251bGxfYXR0cgorICoJCUluc3BlY3QgYSBOVUxMIGJpdG1hc2sg ZnJvbSBhIHR1cGxlIGFuZCByZXR1cm4gdGhlIDAtYmFzZWQgYXR0bnVtIG9mIHRoZQorICoJCWZp cnN0IE5VTEwgYXR0cmlidXRlLiAgUmV0dXJucyBuYXR0cyBpZiBubyBOVUxMcyB3ZXJlIGZvdW5k LgorICovCitzdGF0aWMgaW5saW5lIGludAorZmlyc3RfbnVsbF9hdHRyKGNvbnN0IGJpdHM4ICpi aXRzLCBpbnQgbmF0dHMpCit7CisJaW50CQkJbGFzdEJ5dGUgPSBuYXR0cyA+PiAzOworCXVpbnQ4 CQltYXNrOworCWludAkJCXJlcyA9IG5hdHRzOworCXVpbnQ4CQlieXRlOworCisjaWZkZWYgVVNF X0FTU0VSVF9DSEVDS0lORworCWludAkJCWZpcnN0bnVsbF9jaGVjayA9IG5hdHRzOworCisJLyog RG8gaXQgdGhlIHNsb3cgd2F5IGFuZCBjaGVjayB3ZSBnZXQgdGhlIHNhbWUgYW5zd2VyLiAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKKwl7CisJCWlmIChhdHRfaXNudWxsKGks IGJpdHMpKQorCQl7CisJCQlmaXJzdG51bGxfY2hlY2sgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9 CisjZW5kaWYKKworCS8qIFByb2Nlc3MgYWxsIGJ5dGVzIHVwIHRvIGp1c3QgYmVmb3JlIHRoZSBi eXRlIGZvciB0aGUgbmF0dHMgaW5kZXggKi8KKwlmb3IgKGludCBieXRlbnVtID0gMDsgYnl0ZW51 bSA8IGxhc3RCeXRlOyBieXRlbnVtKyspCisJeworCQlpZiAoYml0c1tieXRlbnVtXSAhPSAweEZG KQorCQl7CisJCQlieXRlID0gfmJpdHNbYnl0ZW51bV07CisJCQlyZXMgPSBieXRlbnVtIDw8IDM7 CisJCQlyZXMgKz0gcGdfcmlnaHRtb3N0X29uZV9wb3NbYnl0ZV07CisKKwkJCUFzc2VydChyZXMg PT0gZmlyc3RudWxsX2NoZWNrKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwkvKgorCSAq IENyZWF0ZSBhIG1hc2sgd2l0aCBhbGwgYml0cyBiZXlvbmQgbmF0dHMncyBiaXQgc2V0IHRvIG9m Zi4gIFRoZSBjb2RlCisJICogYmVsb3cgd2lsbCBnZW5lcmF0ZSBhIHplcm8gbWFzayB3aGVuIG5h dHRzICYgNyA9PSAwLiAgV2hlbiB0aGF0CisJICogaGFwcGVucywgYWxsIGJ5dGVzIHRoYXQgbmVl ZCB0byBiZSBjaGVja2VkIHdlcmUgZG9uZSBzbyBpbiB0aGUgbG9vcAorCSAqIGFib3ZlLiAgVGhl IGNvZGUgYmVsb3cgd2lsbCBjcmVhdGUgYW4gZW1wdHkgbWFzayBhbmQgZW5kIHVwIHJldHVybmlu ZworCSAqIG5hdHRzLiAgVGhpcyBoYXMgYmVlbiBkb25lIHRvIGF2b2lkIGhhdmluZyB0byB3cml0 ZSBhIHNwZWNpYWwgY2FzZSB0bworCSAqIGNoZWNrIGlmIHdlJ3ZlIGNvdmVyZWQgYWxsIGJ5dGVz IGFscmVhZHkuCisJICovCisJbWFzayA9IDB4RkYgJiAoKCgodWludDgpIDEpIDw8IChuYXR0cyAm IDcpKSAtIDEpOworCWJ5dGUgPSAofmJpdHNbbGFzdEJ5dGVdKSAmIG1hc2s7CisKKwlpZiAoYnl0 ZSAhPSAwKQorCXsKKwkJcmVzID0gbGFzdEJ5dGUgPDwgMzsKKwkJcmVzICs9IHBnX3JpZ2h0bW9z dF9vbmVfcG9zW2J5dGVdOworCX0KKworCUFzc2VydChyZXMgPT0gZmlyc3RudWxsX2NoZWNrKTsK KworCXJldHVybiByZXM7Cit9CiAjZW5kaWYJCQkJCQkJLyogRlJPTlRFTkQgKi8KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVkZS9l eGVjdXRvci90dXB0YWJsZS5oCmluZGV4IGEyZGZkNzA3ZTc4Li4zNjNjNWYzMzY5NyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci90dXB0YWJsZS5oCkBAIC04NCw5ICs4NCw2IEBACiAgKiB0dHNfdmFsdWVzL3R0c19p c251bGwgYXJlIGFsbG9jYXRlZCBlaXRoZXIgd2hlbiB0aGUgc2xvdCBpcyBjcmVhdGVkICh3aGVu CiAgKiB0aGUgZGVzY3JpcHRvciBpcyBwcm92aWRlZCksIG9yIHdoZW4gYSBkZXNjcmlwdG9yIGlz IGFzc2lnbmVkIHRvIHRoZSBzbG90OwogICogdGhleSBhcmUgb2YgbGVuZ3RoIGVxdWFsIHRvIHRo ZSBkZXNjcmlwdG9yJ3MgbmF0dHMuCi0gKgotICogVGhlIFRUU19GTEFHX1NMT1cgZmxhZyBpcyBz YXZlZCBzdGF0ZSBmb3IKLSAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUsIGFuZCBzaG91bGQgbm90 IGJlIHRvdWNoZWQgYnkgYW55IG90aGVyIGNvZGUuCiAgKi0tLS0tLS0tLS0KICAqLwogCkBAIC05 OCwxMiArOTUsOCBAQAogI2RlZmluZQkJCVRUU19GTEFHX1NIT1VMREZSRUUJCSgxIDw8IDIpCiAj ZGVmaW5lIFRUU19TSE9VTERGUkVFKHNsb3QpICgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxB R19TSE9VTERGUkVFKSAhPSAwKQogCi0vKiBzYXZlZCBzdGF0ZSBmb3Igc2xvdF9kZWZvcm1faGVh cF90dXBsZSAqLwotI2RlZmluZQkJCVRUU19GTEFHX1NMT1cJCSgxIDw8IDMpCi0jZGVmaW5lIFRU U19TTE9XKHNsb3QpICgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19TTE9XKSAhPSAwKQot CiAvKiBmaXhlZCB0dXBsZSBkZXNjcmlwdG9yICovCi0jZGVmaW5lCQkJVFRTX0ZMQUdfRklYRUQJ CSgxIDw8IDQpCisjZGVmaW5lCQkJVFRTX0ZMQUdfRklYRUQJCSgxIDw8IDQpCS8qIFhYWCBjaGFu Z2UgdG8gIzM/ICovCiAjZGVmaW5lIFRUU19GSVhFRChzbG90KSAoKChzbG90KS0+dHRzX2ZsYWdz ICYgVFRTX0ZMQUdfRklYRUQpICE9IDApCiAKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdE9wczsKZGlm ZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9jb21wLmMgYi9zcmMvcGwvcGxwZ3NxbC9z cmMvcGxfY29tcC5jCmluZGV4IDdkNjQ4Yzk0MWMwLi5iMjExMmMyOWZjZiAxMDA2NDQKLS0tIGEv c3JjL3BsL3BscGdzcWwvc3JjL3BsX2NvbXAuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxf Y29tcC5jCkBAIC0xOTEyLDYgKzE5MTIsOCBAQCBidWlsZF9yb3dfZnJvbV92YXJzKFBMcGdTUUxf dmFyaWFibGUgKip2YXJzLCBpbnQgbnVtdmFycykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0 aW9uKHJvdy0+cm93dHVwZGVzYywgaSArIDEsIHR5cGNvbGwpOwogCX0KIAorCVR1cGxlRGVzY0Zp bmFsaXplKHJvdy0+cm93dHVwZGVzYyk7CisKIAlyZXR1cm4gcm93OwogfQogCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0 YXRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2Zp eGVkX3N0YXRzLmMKaW5kZXggOTA4YmQxOGE3YzcuLmZhMTcxOWJmM2I1IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRz LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV9m aXhlZF9zdGF0cy5jCkBAIC0yMDUsNiArMjA1LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRf cmVwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAlUdXBs ZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJzdGF0c19yZXNldCIsCiAJ CQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0gPSBJbnQ2NEdldERh dHVtKHN0YXRzLT5udW1jYWxscyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf cHJlZHRlc3QvdGVzdF9wcmVkdGVzdC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3ByZWR0ZXN0 L3Rlc3RfcHJlZHRlc3QuYwppbmRleCA2NzlhNWRlNDU2ZC4uNDhjYTJhNGVhNzAgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0ZXN0LmMKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYwpAQCAtMjMwLDYg KzIzMCw3IEBAIHRlc3RfcHJlZHRlc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJICAgInNfcl9o b2xkcyIsIEJPT0xPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0 dHJOdW1iZXIpIDgsCiAJCQkJCSAgICJ3X3JfaG9sZHMiLCBCT09MT0lELCAtMSwgMCk7CisJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJdHVwZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRl c2MpOwogCiAJdmFsdWVzWzBdID0gQm9vbEdldERhdHVtKHN0cm9uZ19pbXBsaWVkX2J5KTsKLS0g CjIuNTEuMAoK --00000000000071839d0648c6a88b--