Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8MF6-009SwC-Dm for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 15:12:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r8MF5-00BJv4-1J for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 15:12:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8MF4-00BJuQ-JQ for pgsql-hackers@lists.postgresql.org; Wed, 29 Nov 2023 15:12:46 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r8MF1-009Bml-OE for pgsql-hackers@postgresql.org; Wed, 29 Nov 2023 15:12:45 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2c9b77be7ceso23470081fa.2 for ; Wed, 29 Nov 2023 07:12:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crunchydata.com; s=google; t=1701270763; x=1701875563; darn=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=4EljMiCpE87pfZheMZK6xQyNP4sGH7q5WaZBPE3iNPE=; b=Yke9IM5KhELsAs4HziixO2O7zuy/VttPDwZTae7fggSaxc6DTuzqKK7UEwVKld0jYb r+yrp1+yxn+CwPGk2kvYJIrHHzU1zMoBKT6p8SR0GdeHa/zGQ1wiqXosGvqDJr4QtRmA 9zENohIJe42tqd8yAyDPtMLZyYgpbAOBWDPCeR1VLyJN0g7OXcU+66SC6UmiWzZ7iVfR 2wzZjDtbsKvOkLruRyAMSxgldBhJbXImVsI1wP8Z3iSf0/A5s8yLmcEucpzqAi5Ds0Gm TcSABeoHQVVQ7WGN0NObzf/k0DmpfxXw6OHxqRcD7fDbrRkgm3Ku/N+aeQ5sgPbYYyJu 2AJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701270763; x=1701875563; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4EljMiCpE87pfZheMZK6xQyNP4sGH7q5WaZBPE3iNPE=; b=izhKZl0dS7iZxhy+7MHrWY50BpYt32YazYXESEPDFa/Buy0yfUB4MHt1IUaivw671D bMHdqbyDuVeByGN82Xz7W3zMB1RUWX0BOcfuNv0fo7QrYsMZj/eS6UGLz8q7sLDIoINm XWnHyHywD1NolqPolIMN6y2dEoAXoDeQ4qGJcSg7am05UldC8/1JxXIrDR/I9hm/x0Wk dRWAf7uKKreE+qg5TGzQRZ5fOSuVQIpldgdqIqb8qaVvspqbH+n/e19fXmOggkbcY27k ezj/wzV+b6/a7Y2r3m9pniUaR7OIfbXkK37KKTBNS+uSjGFPEMthhKHVvEjZqOgl5yPv Amqg== X-Gm-Message-State: AOJu0Yz5U4UKJZscQTdWs2gLSfEvAGGYLUDJIw7WtFL4BYaomgH4uyR8 xkjc+fcNMv29T1MBfdvH2gZu9KYDMohTVaJ/HvUfrA== X-Google-Smtp-Source: AGHT+IGfHEXbKtzP1803oOlukaNKpK+HPL+KiZ4GdMDPLhTXfOzmZweUPqxK5kbNMw41/sGeCGAL2wCZeAs4LR7lAAk= X-Received: by 2002:a2e:92c1:0:b0:2c5:169f:ff02 with SMTP id k1-20020a2e92c1000000b002c5169fff02mr12785414ljh.20.1701270762891; Wed, 29 Nov 2023 07:12:42 -0800 (PST) MIME-Version: 1.0 References: <20231108002011.2c7amddaul7dhkbd@awork3.anarazel.de> In-Reply-To: <20231108002011.2c7amddaul7dhkbd@awork3.anarazel.de> From: David Christensen Date: Wed, 29 Nov 2023 09:12:31 -0600 Message-ID: Subject: Re: [PATCHES] Post-special page storage TDE support To: Andres Freund Cc: Matthias van de Meent , PostgreSQL-development , Stephen Frost Content-Type: multipart/mixed; boundary="0000000000007d57b1060b4bf763" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007d57b1060b4bf763 Content-Type: multipart/alternative; boundary="0000000000007d57af060b4bf761" --0000000000007d57af060b4bf761 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 7, 2023 at 6:20=E2=80=AFPM Andres Freund w= rote: > Hi, > > - IMO the patch touches many places it shouldn't need to touch, because o= f > essentially renaming a lot of existing macro names to *Limit, > necessitating modifying a lot of users. I think instead the few places > that > care about the runtime limit should be modified. > > As-is the patch would cause a lot of fallout in extensions that just do > things like defining an on-stack array of Datums or such - even though > all > they'd need is to change the define to the *Limit one. > > Even leaving extensions aside, it must makes reviewing (and I'm sure > maintaining) the patch very tedious. > Hi Andres et al, So I've been looking at alternate approaches to this issue and considering how to reduce churn, and I think we still need the *Limit variants. Let's take a simple example: Just looking at MaxHeapTuplesPerPage and breaking down instances in the code, loosely partitioning into whether it's used as an array index or other usage (doesn't discriminate against code vs comments, unfortunately) we get the following breakdown: $ git grep -hoE [[]?MaxHeapTuplesPerPage | sort | uniq -c 18 [MaxHeapTuplesPerPage 51 MaxHeapTuplesPerPage This would be 18 places where we would need at adjust in a fairly mechanical fashion to add the MaxHeapTuplesPerPageLimit instead of MaxHeapTuplesPerPage vs some significant fraction of non-comment--even if you assumed half were in comments, there would presumably need to be some sort of adjustments in verbage since we are going to be changing some of the interpretation. I am working on a patch to cleanup some of the assumptions that smgr makes currently about its space usage and how the individual access methods consider it, as they should only be calculating things based on how much space is available after smgr is done with it. That has traditionally been BLCKSZ - SizeOfPageHeaderData, but this patch (included) factors that out into a single expression that we can now use in access methods, so we can then reserve additional page space and not need to adjust the access methods furter. Building on top of this patch, we'd define something like this to handle the #defines that need to be dynamic: extern Size reserved_page_space; #define PageUsableSpace (BLCKSZ - SizeOfPageHeaderData - reserved_page_space) #define MaxHeapTuplesPerPage CalcMaxHeapTuplesPerPage(PageUsableSpace) #define MaxHeapTuplesPerPageLimit CalcMaxHeapTuplesPerPage(BLCKSZ - SizeOfPageHeaderData) #define CalcMaxHeapTuplesPerPage(freesize) ((int) ((freesize) / \ (MAXALIGN(SizeofHeapTupleHeader) + sizeof(ItemIdData)))) In my view, extensions that are expecting to need no changes when it comes to changing how these are interpreted are better off needing to only change the static allocation in a mechanical sense than revisit any other uses of code; this seems more likely to guarantee a correct result than if you exceed the page space and start overwriting things you weren't because you're not aware that you need to check for dynamic limits on your own. Take another thing which would need adjusting for reserving page space, MaxHeapTupleSize: $ git grep -ohE '[[]?MaxHeapTupleSize' | sort | uniq -c 3 [MaxHeapTupleSize 16 MaxHeapTupleSize Here there are 3 static arrays which would need to be adjusted vs 16 other instances. If we kept MaxHeapTupleSize interpretation the same and didn't adjust an extension it would compile just fine, but with too large of a length compared to the smaller PageUsableSpace, so you could conceivably overwrite into the reserved space depending on what you were doing. (since by definition the reserved_page_space >=3D 0, so PageUsableSpace wil= l always be <=3D BLCKSZ - SizeOfPageHeaderData, so any expression based on it as a basis will be smaller). In short, I think the approach I took originally actually will reduce errors out-of-core, and while churn is still necessary churn. I can produce a second patch which implements this calc/limit atop this first one as well. Thanks, David --0000000000007d57af060b4bf761 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Nov 7, 2023 at 6:20=E2=80=AFPM An= dres Freund <andres@anarazel.de> wrote:
Hi,

- IMO the patch touches many places it shouldn't need to touch, because= of
=C2=A0 essentially renaming a lot of existing macro names to *Limit,
=C2=A0 necessitating modifying a lot of users. I think instead the few plac= es that
=C2=A0 care about the runtime limit should be modified.

=C2=A0 As-is the patch would cause a lot of fallout in extensions that just= do
=C2=A0 things like defining an on-stack array of Datums or such - even thou= gh all
=C2=A0 they'd need is to change the define to the *Limit one.

=C2=A0 Even leaving extensions aside, it must makes reviewing (and I'm = sure
=C2=A0 maintaining) the patch very tedious.
=C2=A0Hi Andres et al,

So I've been looking at alternate approaches = to this issue and considering how to reduce churn, and I think we still nee= d the *Limit variants.=C2=A0 Let's take a simple example:

Just l= ooking at MaxHeapTuplesPerPage and breaking down instances in the code, loo= sely partitioning into whether it's used as an array index or other usa= ge (doesn't discriminate against code vs comments, unfortunately) we ge= t the following breakdown:

$ git grep -hoE [[]?MaxHeapTuplesPerPage = | sort | uniq -c
=C2=A0 =C2=A0 =C2=A018 [MaxHeapTuplesPerPage
=C2=A0 = =C2=A0 =C2=A051 MaxHeapTuplesPerPage

This would be 18 places where w= e would need at adjust in a fairly mechanical fashion to add the MaxHeapTup= lesPerPageLimit instead of MaxHeapTuplesPerPage vs some significant fractio= n of non-comment--even if you assumed half were in comments, there would pr= esumably need to be some sort of adjustments in verbage since we are going = to be changing some of the interpretation.

I am working on a patch t= o cleanup some of the assumptions that smgr makes currently about its space= usage and how the individual access methods consider it, as they should on= ly be calculating things based on how much space is available after smgr is= done with it.=C2=A0 That has traditionally been BLCKSZ - SizeOfPageHeaderD= ata, but this patch (included) factors that out into a single expression th= at we can now use in access methods, so we can then reserve additional page= space and not need to adjust the access methods furter.

Building on= top of this patch, we'd define something like this to handle the #defi= nes that need to be dynamic:

extern Size reserved_page_space;
#de= fine PageUsableSpace (BLCKSZ - SizeOfPageHeaderData - reserved_page_space)<= br>#define MaxHeapTuplesPerPage CalcMaxHeapTuplesPerPage(PageUsableSpace)#define MaxHeapTuplesPerPageLimit CalcMaxHeapTuplesPerPage(BLCKSZ - SizeO= fPageHeaderData)
#define CalcMaxHeapTuplesPerPage(freesize)
=C2=A0 = =C2=A0 =C2=A0 ((int) ((freesize) / \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (MAXALIGN(SizeofHeapTupleHeader) = + sizeof(ItemIdData))))

In my view, extensions that are expecting to= need no changes when it comes to changing how these are interpreted are be= tter off needing to only change the static allocation in a mechanical sense= than revisit any other uses of code; this seems more likely to guarantee a= correct result than if you exceed the page space and start overwriting thi= ngs you weren't because you're not aware that you need to check for= dynamic limits on your own.

Take another thing which would need adj= usting for reserving page space, MaxHeapTupleSize:

$ git grep -ohE &= #39;[[]?MaxHeapTupleSize' | sort | uniq -c
=C2=A0 =C2=A0 =C2=A0 3 [M= axHeapTupleSize
=C2=A0 =C2=A0 =C2=A016 MaxHeapTupleSize

Here ther= e are 3 static arrays which would need to be adjusted vs 16 other instances= . If we kept MaxHeapTupleSize interpretation the same and didn't adjust= an extension it would compile just fine, but with too large of a length co= mpared to the smaller PageUsableSpace, so you could conceivably overwrite i= nto the reserved space depending on what you were doing.

(since by d= efinition the reserved_page_space >=3D 0, so PageUsableSpace will always= be <=3D BLCKSZ - SizeOfPageHeaderData, so any expression based on it as= a basis will be smaller).

In short, I think the approach I took ori= ginally actually will reduce errors out-of-core, and while churn is still n= ecessary churn.

I can produce a second patch which implements this c= alc/limit atop this first one as well.

Thanks,

David
= =C2=A0
--0000000000007d57af060b4bf761-- --0000000000007d57b1060b4bf763 Content-Type: application/octet-stream; name="0001-Create-PageUsableSpace-to-represent-space-post-smgr.patch" Content-Disposition: attachment; filename="0001-Create-PageUsableSpace-to-represent-space-post-smgr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lpjwo5sa0 RnJvbSBlZGEzOThjYTA1MjMwZDMwNDY4MTE5YjNjMjNjZDM4NDdkYzRmMjljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBTdW4sIDI2IE5vdiAyMDIzIDE2OjI0OjA5IC0wNTAwClN1 YmplY3Q6IFtQQVRDSF0gQ3JlYXRlIFBhZ2VVc2FibGVTcGFjZSB0byByZXByZXNlbnQgc3BhY2Ug cG9zdC1zbWdyCgpXb3JrIHRvIGFic3RyYWN0IG91dCB0aGUgZGlyZWN0IHVzYWdlIG9mIFNpemVP ZlBhZ2VIZWFkZXJEYXRhIGFuZCBCTENLU1ogZnJvbQphY2Nlc3MgbWV0aG9kczsgdGhleSBzaG91 bGQgb25seSBuZWVkIHRvIG9wZXJhdGUgZnJvbSBhIHNlbnNlIG9mIHdoYXQgc3BhY2UgaXMKYXZh aWxhYmxlIHRvIHRoZW0gYW5kIG5vdCBiZSBwYXJ0eSB0byB0aGUgZGV0YWlscy4KClRoaXMgaXMg aW4gcHJlcGFyYXRpb24gZm9yIGFsbG93aW5nIHNwYWNlIHRvIGJlIHJlc2VydmVkIGF0IHRoZSBl bmQgb2YgdGhlIHBhZ2UKZm9yLCBlLmcuLCBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gdGFncyBh bmQvb3IgZXZzIHdoaWNoIHdpbGwgcHJldmVudCBmdXR1cmUKY2h1cm4gd2hlbiB3ZSByZWRlZmlu ZSB0aGlzIHZhbHVlIGluIHRoZSBmdXR1cmUuCi0tLQogY29udHJpYi9ibG9vbS9ibG9vbS5oICAg ICAgICAgICAgICAgICAgICB8IDQgKystLQogY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNz LmMgICAgICAgICB8IDIgKy0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0YXBwcm94LmMgICAg ICAgfCAyICstCiBjb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdGluZGV4LmMgICAgICAgIHwgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9idWZtYXNrLmMgICAgICB8IDIgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9naW4vZ2luZmFzdC5jICAgICAgICAgfCAyICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0YnVpbGQuYyAgICAgIHwgNCArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYyAgICAgICAgIHwgNCArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIHwgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6 eS5jICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAg fCAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgIHwgMiArLQog c3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYyAgICAgICAgICAgICAgICB8IDIgKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9icmluX3BhZ2UuaCAgICAgICAgICAgfCAyICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvZ2luYmxvY2suaCAgICAgICAgICAgIHwgNCArKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lz dC5oICAgICAgICAgICAgICAgIHwgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oICAgICAgICB8IDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaCAgICAg ICAgfCA0ICsrLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9pdHVwLmggICAgICAgICAgICAgICAgfCAy ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgIHwgMiArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggICAgICAgICAgICB8IDcgKysrKysrKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9mc21faW50ZXJuYWxzLmggICAgICB8IDIgKy0KIDIyIGZpbGVzIGNoYW5n ZWQsIDMzIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYmxvb20vYmxvb20uaCBiL2NvbnRyaWIvYmxvb20vYmxvb20uaAppbmRleCAzMzA4MTFlYzYw Li44MzMxYjJhYjE1IDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2Jsb29tLmgKKysrIGIvY29u dHJpYi9ibG9vbS9ibG9vbS5oCkBAIC0xMTIsNyArMTEyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmxv b21PcHRpb25zCiAgKi8KIHR5cGVkZWYgQmxvY2tOdW1iZXIgRnJlZUJsb2NrTnVtYmVyQXJyYXlb CiAJCQkJCQkJCQkJIE1BWEFMSUdOX0RPV04oCi0JCQkJCQkJCQkJCQkJICAgQkxDS1NaIC0gU2l6 ZU9mUGFnZUhlYWRlckRhdGEgLSBNQVhBTElHTihzaXplb2YoQmxvb21QYWdlT3BhcXVlRGF0YSkp CisJCQkJCQkJCQkJCQkJICAgUGFnZVVzYWJsZVNwYWNlIC0gTUFYQUxJR04oc2l6ZW9mKEJsb29t UGFnZU9wYXF1ZURhdGEpKQogCQkJCQkJCQkJCQkJCSAgIC0gTUFYQUxJR04oc2l6ZW9mKHVpbnQx NikgKiAyICsgc2l6ZW9mKHVpbnQzMikgKyBzaXplb2YoQmxvb21PcHRpb25zKSkKIAkJCQkJCQkJ CQkJCQkgICApIC8gc2l6ZW9mKEJsb2NrTnVtYmVyKQogXTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBCbG9vbVN0YXRlCiB9IEJsb29tU3RhdGU7CiAKICNkZWZpbmUgQmxvb21Q YWdlR2V0RnJlZVNwYWNlKHN0YXRlLCBwYWdlKSBcCi0JKEJMQ0tTWiAtIE1BWEFMSUdOKFNpemVP ZlBhZ2VIZWFkZXJEYXRhKSBcCisJKFBhZ2VVc2FibGVTcGFjZSBcCiAJCS0gQmxvb21QYWdlR2V0 TWF4T2Zmc2V0KHBhZ2UpICogKHN0YXRlKS0+c2l6ZU9mQmxvb21UdXBsZSBcCiAJCS0gTUFYQUxJ R04oc2l6ZW9mKEJsb29tUGFnZU9wYXF1ZURhdGEpKSkKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9w YWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMgYi9jb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3Mu YwppbmRleCA5Y2RjOGUxODJiLi4xZTIwZmVjZjJmIDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2Vp bnNwZWN0L2J0cmVlZnVuY3MuYworKysgYi9jb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3Mu YwpAQCAtMTE2LDcgKzExNiw3IEBAIEdldEJUUGFnZVN0YXRpc3RpY3MoQmxvY2tOdW1iZXIgYmxr bm8sIEJ1ZmZlciBidWZmZXIsIEJUUGFnZVN0YXQgKnN0YXQpCiAKIAlzdGF0LT5ibGtubyA9IGJs a25vOwogCi0Jc3RhdC0+bWF4X2F2YWlsID0gQkxDS1NaIC0gKEJMQ0tTWiAtIHBoZHItPnBkX3Nw ZWNpYWwgKyBTaXplT2ZQYWdlSGVhZGVyRGF0YSk7CisJc3RhdC0+bWF4X2F2YWlsID0gUGFnZVVz YWJsZVNwYWNlIC0gKEJMQ0tTWiAtIHBoZHItPnBkX3NwZWNpYWwpOwogCiAJc3RhdC0+ZGVhZF9p dGVtcyA9IHN0YXQtPmxpdmVfaXRlbXMgPSAwOwogCmRpZmYgLS1naXQgYS9jb250cmliL3Bnc3Rh dHR1cGxlL3Bnc3RhdGFwcHJveC5jIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRhcHByb3gu YwppbmRleCBmNjAxZGM2MTIxLi4zZDJjOWQxODZjIDEwMDY0NAotLS0gYS9jb250cmliL3Bnc3Rh dHR1cGxlL3Bnc3RhdGFwcHJveC5jCisrKyBiL2NvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0YXBw cm94LmMKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0YXBwcm94X2hlYXAoUmVsYXRpb24gcmVsLCBv dXRwdXRfdHlwZSAqc3RhdCkKIAkJaWYgKCFQYWdlSXNOZXcocGFnZSkpCiAJCQlzdGF0LT5mcmVl X3NwYWNlICs9IFBhZ2VHZXRIZWFwRnJlZVNwYWNlKHBhZ2UpOwogCQllbHNlCi0JCQlzdGF0LT5m cmVlX3NwYWNlICs9IEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhOworCQkJc3RhdC0+ZnJl ZV9zcGFjZSArPSBQYWdlVXNhYmxlU3BhY2U7CiAKIAkJLyogV2UgbWF5IGNvdW50IHRoZSBwYWdl IGFzIHNjYW5uZWQgZXZlbiBpZiBpdCdzIG5ldy9lbXB0eSAqLwogCQlzY2FubmVkKys7CmRpZmYg LS1naXQgYS9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdGluZGV4LmMgYi9jb250cmliL3Bnc3Rh dHR1cGxlL3Bnc3RhdGluZGV4LmMKaW5kZXggOGU1YTRkNmE2Ni4uNWNlNDU5NTJjYyAxMDA2NDQK LS0tIGEvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRpbmRleC5jCisrKyBiL2NvbnRyaWIvcGdz dGF0dHVwbGUvcGdzdGF0aW5kZXguYwpAQCAtMzA5LDcgKzMwOSw3IEBAIHBnc3RhdGluZGV4X2lt cGwoUmVsYXRpb24gcmVsLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJewogCQkJaW50CQkJ bWF4X2F2YWlsOwogCi0JCQltYXhfYXZhaWwgPSBCTENLU1ogLSAoQkxDS1NaIC0gKChQYWdlSGVh ZGVyKSBwYWdlKS0+cGRfc3BlY2lhbCArIFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsKKwkJCW1heF9h dmFpbCA9IFBhZ2VVc2FibGVTcGFjZSAtIChCTENLU1ogLSAoKFBhZ2VIZWFkZXIpIHBhZ2UpLT5w ZF9zcGVjaWFsKTsKIAkJCWluZGV4U3RhdC5tYXhfYXZhaWwgKz0gbWF4X2F2YWlsOwogCQkJaW5k ZXhTdGF0LmZyZWVfc3BhY2UgKz0gUGFnZUdldEZyZWVTcGFjZShwYWdlKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9idWZtYXNrLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL2J1Zm1hc2suYwppbmRleCA1ZTM5MmRhYjFlLi5kZDY3YjUzZTAzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2J1Zm1hc2suYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL2J1Zm1hc2suYwpAQCAtMTIwLDcgKzEyMCw3IEBAIG1hc2tfcGFnZV9j b250ZW50KFBhZ2UgcGFnZSkKIHsKIAkvKiBNYXNrIFBhZ2UgQ29udGVudCAqLwogCW1lbXNldChw YWdlICsgU2l6ZU9mUGFnZUhlYWRlckRhdGEsIE1BU0tfTUFSS0VSLAotCQkgICBCTENLU1ogLSBT aXplT2ZQYWdlSGVhZGVyRGF0YSk7CisJCSAgIFBhZ2VVc2FibGVTcGFjZSk7CiAKIAkvKiBNYXNr IHBkX2xvd2VyIGFuZCBwZF91cHBlciAqLwogCW1lbXNldCgmKChQYWdlSGVhZGVyKSBwYWdlKS0+ cGRfbG93ZXIsIE1BU0tfTUFSS0VSLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW5mYXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3QuYwppbmRleCA4Nzk4 ZmJlOTYzLi45YmNiMmIwYjk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bmZhc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3QuYwpAQCAtMzksNyAr MzksNyBAQAogaW50CQkJZ2luX3BlbmRpbmdfbGlzdF9saW1pdCA9IDA7CiAKICNkZWZpbmUgR0lO X1BBR0VfRlJFRVNJWkUgXAotCSggQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRh dGEpIC0gTUFYQUxJR04oc2l6ZW9mKEdpblBhZ2VPcGFxdWVEYXRhKSkgKQorCSggUGFnZVVzYWJs ZVNwYWNlIC0gTUFYQUxJR04oc2l6ZW9mKEdpblBhZ2VPcGFxdWVEYXRhKSkgKQogCiB0eXBlZGVm IHN0cnVjdCBLZXlBcnJheQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGJ1aWxkLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwppbmRleCBh NDVlMmZlMzc1Li5kNzllN2E4MjRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0YnVpbGQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwpA QCAtNzAyLDcgKzcwMiw3IEBAIGdpc3RJbml0QnVmZmVyaW5nKEdJU1RCdWlsZFN0YXRlICpidWls ZHN0YXRlKQogCWludAkJCWxldmVsU3RlcDsKIAogCS8qIENhbGMgc3BhY2Ugb2YgaW5kZXggcGFn ZSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIGluZGV4IHR1cGxlcyAqLwotCXBhZ2VGcmVlU3BhY2Ug PSBCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtIHNpemVvZihHSVNUUGFnZU9wYXF1ZURh dGEpCisJcGFnZUZyZWVTcGFjZSA9IFBhZ2VVc2FibGVTcGFjZSAtIHNpemVvZihHSVNUUGFnZU9w YXF1ZURhdGEpCiAJCS0gc2l6ZW9mKEl0ZW1JZERhdGEpCiAJCS0gYnVpbGRzdGF0ZS0+ZnJlZXNw YWNlOwogCkBAIC04NTgsNyArODU4LDcgQEAgY2FsY3VsYXRlUGFnZXNQZXJCdWZmZXIoR0lTVEJ1 aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIGludCBsZXZlbFN0ZXApCiAJU2l6ZQkJcGFnZUZyZWVTcGFj ZTsKIAogCS8qIENhbGMgc3BhY2Ugb2YgaW5kZXggcGFnZSB3aGljaCBpcyBhdmFpbGFibGUgZm9y IGluZGV4IHR1cGxlcyAqLwotCXBhZ2VGcmVlU3BhY2UgPSBCTENLU1ogLSBTaXplT2ZQYWdlSGVh ZGVyRGF0YSAtIHNpemVvZihHSVNUUGFnZU9wYXF1ZURhdGEpCisJcGFnZUZyZWVTcGFjZSA9IFBh Z2VVc2FibGVTcGFjZSAtIHNpemVvZihHSVNUUGFnZU9wYXF1ZURhdGEpCiAJCS0gc2l6ZW9mKEl0 ZW1JZERhdGEpCiAJCS0gYnVpbGRzdGF0ZS0+ZnJlZXNwYWNlOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCmluZGV4IDE0ZGU4MTU4ZDQuLjdlY2NkNWY1MzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCkBAIC0yMDY0LDcgKzIwNjQsNyBAQCBoZWFwX3ByZXBhcmVfaW5zZXJ0KFJlbGF0aW9u IHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwLCBUcmFuc2FjdGlvbklkIHhpZCwKIHN0YXRpYyBpbnQK IGhlYXBfbXVsdGlfaW5zZXJ0X3BhZ2VzKEhlYXBUdXBsZSAqaGVhcHR1cGxlcywgaW50IGRvbmUs IGludCBudHVwbGVzLCBTaXplIHNhdmVGcmVlU3BhY2UpCiB7Ci0Jc2l6ZV90CQlwYWdlX2F2YWls ID0gQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEgLSBzYXZlRnJlZVNwYWNlOworCXNpemVf dAkJcGFnZV9hdmFpbCA9IFBhZ2VVc2FibGVTcGFjZSAtIHNhdmVGcmVlU3BhY2U7CiAJaW50CQkJ bnBhZ2VzID0gMTsKIAogCWZvciAoaW50IGkgPSBkb25lOyBpIDwgbnR1cGxlczsgaSsrKQpAQCAt MjA3NCw3ICsyMDc0LDcgQEAgaGVhcF9tdWx0aV9pbnNlcnRfcGFnZXMoSGVhcFR1cGxlICpoZWFw dHVwbGVzLCBpbnQgZG9uZSwgaW50IG50dXBsZXMsIFNpemUgc2F2ZUYKIAkJaWYgKHBhZ2VfYXZh aWwgPCB0dXBfc3opCiAJCXsKIAkJCW5wYWdlcysrOwotCQkJcGFnZV9hdmFpbCA9IEJMQ0tTWiAt IFNpemVPZlBhZ2VIZWFkZXJEYXRhIC0gc2F2ZUZyZWVTcGFjZTsKKwkJCXBhZ2VfYXZhaWwgPSBQ YWdlVXNhYmxlU3BhY2UgLSBzYXZlRnJlZVNwYWNlOwogCQl9CiAJCXBhZ2VfYXZhaWwgLT0gdHVw X3N6OwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDdj MjhkYWZiNzIuLjU4ZTkyYjg3YTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtMjA5Miw3ICsyMDkyLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3RvYXN0X2FtKFJl bGF0aW9uIHJlbCkKICNkZWZpbmUgSEVBUF9PVkVSSEVBRF9CWVRFU19QRVJfVFVQTEUgXAogCShN QVhBTElHTihTaXplb2ZIZWFwVHVwbGVIZWFkZXIpICsgc2l6ZW9mKEl0ZW1JZERhdGEpKQogI2Rl ZmluZSBIRUFQX1VTQUJMRV9CWVRFU19QRVJfUEFHRSBcCi0JKEJMQ0tTWiAtIFNpemVPZlBhZ2VI ZWFkZXJEYXRhKQorCShQYWdlVXNhYmxlU3BhY2UpCiAKIHN0YXRpYyB2b2lkCiBoZWFwYW1fZXN0 aW1hdGVfcmVsX3NpemUoUmVsYXRpb24gcmVsLCBpbnQzMiAqYXR0cl93aWR0aHMsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXggNTlmNTFmNDBlMS4uNjlhYWRhMTI4MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAgbGF6 eV9zY2FuX25ld19vcl9lbXB0eShMVlJlbFN0YXRlICp2YWNyZWwsIEJ1ZmZlciBidWYsIEJsb2Nr TnVtYmVyIGJsa25vLAogCiAJCWlmIChHZXRSZWNvcmRlZEZyZWVTcGFjZSh2YWNyZWwtPnJlbCwg Ymxrbm8pID09IDApCiAJCXsKLQkJCWZyZWVzcGFjZSA9IEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFk ZXJEYXRhOworCQkJZnJlZXNwYWNlID0gUGFnZVVzYWJsZVNwYWNlOwogCiAJCQlSZWNvcmRQYWdl V2l0aEZyZWVTcGFjZSh2YWNyZWwtPnJlbCwgYmxrbm8sIGZyZWVzcGFjZSk7CiAJCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCAyZTE4Y2Q4OGJjLi4wYmJkOTVi ZThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCkBAIC0xMDUsNyAr MTA1LDcgQEAKICAqIGV4dHJhIGhlYWRlcnMsIHNvIHRoZSB3aG9sZSBwYWdlIG1pbnVzIHRoZSBz dGFuZGFyZCBwYWdlIGhlYWRlciBpcwogICogdXNlZCBmb3IgdGhlIGJpdG1hcC4KICAqLwotI2Rl ZmluZSBNQVBTSVpFIChCTENLU1ogLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpCisj ZGVmaW5lIE1BUFNJWkUgKFBhZ2VVc2FibGVTcGFjZSkKIAogLyogTnVtYmVyIG9mIGhlYXAgYmxv Y2tzIHdlIGNhbiByZXByZXNlbnQgaW4gb25lIGJ5dGUgKi8KICNkZWZpbmUgSEVBUEJMT0NLU19Q RVJfQllURSAoQklUU19QRVJfQllURSAvIEJJVFNfUEVSX0hFQVBCTE9DSykKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYwppbmRleCA3MTU5Yzc3NWZiLi43ZjQ5YmFlYjc2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0xMDg5LDcgKzEwODksNyBAQCBlc3RpbWF0 ZV9yZWxfc2l6ZShSZWxhdGlvbiByZWwsIGludDMyICphdHRyX3dpZHRocywKIAkJCXR1cGxlX3dp ZHRoICs9IE1BWEFMSUdOKFNpemVvZkhlYXBUdXBsZUhlYWRlcik7CiAJCQl0dXBsZV93aWR0aCAr PSBzaXplb2YoSXRlbUlkRGF0YSk7CiAJCQkvKiBub3RlOiBpbnRlZ2VyIGRpdmlzaW9uIGlzIGlu dGVudGlvbmFsIGhlcmUgKi8KLQkJCWRlbnNpdHkgPSAoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRl ckRhdGEpIC8gdHVwbGVfd2lkdGg7CisJCQlkZW5zaXR5ID0gKFBhZ2VVc2FibGVTcGFjZSkgLyB0 dXBsZV93aWR0aDsKIAkJfQogCQkqdHVwbGVzID0gcmludChkZW5zaXR5ICogKGRvdWJsZSkgY3Vy cGFnZXMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jIGIvc3JjL2Jp bi9wZ191cGdyYWRlL2ZpbGUuYwppbmRleCBkMTczNjAyODgyLi5iZjZjOGNjNWI5IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9m aWxlLmMKQEAgLTE4Nyw3ICsxODcsNyBAQCByZXdyaXRlVmlzaWJpbGl0eU1hcChjb25zdCBjaGFy ICpmcm9tZmlsZSwgY29uc3QgY2hhciAqdG9maWxlLAogCXN0cnVjdCBzdGF0IHN0YXRidWY7CiAK IAkvKiBDb21wdXRlIG51bWJlciBvZiBvbGQtZm9ybWF0IGJ5dGVzIHBlciBuZXcgcGFnZSAqLwot CXJld3JpdGVWbUJ5dGVzUGVyUGFnZSA9IChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkg LyAyOworCXJld3JpdGVWbUJ5dGVzUGVyUGFnZSA9IChQYWdlVXNhYmxlU3BhY2UpIC8gMjsKIAog CWlmICgoc3JjX2ZkID0gb3Blbihmcm9tZmlsZSwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8 IDApCiAJCXBnX2ZhdGFsKCJlcnJvciB3aGlsZSBjb3B5aW5nIHJlbGF0aW9uIFwiJXMuJXNcIjog Y291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzIiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9icmluX3BhZ2UuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX3BhZ2UuaAppbmRl eCAzNjcwY2E2MDEwLi40OWY0NWVlOWU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv YnJpbl9wYWdlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5fcGFnZS5oCkBAIC04Niw3 ICs4Niw3IEBAIHR5cGVkZWYgc3RydWN0IFJldm1hcENvbnRlbnRzCiB9IFJldm1hcENvbnRlbnRz OwogCiAjZGVmaW5lIFJFVk1BUF9DT05URU5UX1NJWkUgXAotCShCTENLU1ogLSBNQVhBTElHTihT aXplT2ZQYWdlSGVhZGVyRGF0YSkgLSBcCisJKFBhZ2VVc2FibGVTcGFjZSAtIFwKIAkgb2Zmc2V0 b2YoUmV2bWFwQ29udGVudHMsIHJtX3RpZHMpIC0gXAogCSBNQVhBTElHTihzaXplb2YoQnJpblNw ZWNpYWxTcGFjZSkpKQogLyogbWF4IG51bSBvZiBpdGVtcyBpbiB0aGUgYXJyYXkgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5ibG9jay5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dpbmJsb2NrLmgKaW5kZXggYzU5NzkwZWM1YS4uMGRiOGZhMGRkYSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dpbmJsb2NrLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbmJs b2NrLmgKQEAgLTMxOCw3ICszMTgsNyBAQCB0eXBlZGVmIHNpZ25lZCBjaGFyIEdpbk51bGxDYXRl Z29yeTsKIAkgR2luUGFnZUdldE9wYXF1ZShwYWdlKS0+bWF4b2ZmICogc2l6ZW9mKFBvc3RpbmdJ dGVtKSkKIAogI2RlZmluZSBHaW5EYXRhUGFnZU1heERhdGFTaXplCVwKLQkoQkxDS1NaIC0gTUFY QUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIFwKKwkoUGFnZVVzYWJsZVNwYWNlIFwKIAkgLSBN QVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSkgXAogCSAtIE1BWEFMSUdOKHNpemVvZihH aW5QYWdlT3BhcXVlRGF0YSkpKQogCkBAIC0zMjYsNyArMzI2LDcgQEAgdHlwZWRlZiBzaWduZWQg Y2hhciBHaW5OdWxsQ2F0ZWdvcnk7CiAgKiBMaXN0IHBhZ2VzCiAgKi8KICNkZWZpbmUgR2luTGlz dFBhZ2VTaXplICBcCi0JKCBCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtIE1BWEFMSUdO KHNpemVvZihHaW5QYWdlT3BhcXVlRGF0YSkpICkKKwkoIFBhZ2VVc2FibGVTcGFjZSAtIE1BWEFM SUdOKHNpemVvZihHaW5QYWdlT3BhcXVlRGF0YSkpICkKIAogLyoKICAqIEEgY29tcHJlc3NlZCBw b3N0aW5nIGxpc3QuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdC5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dpc3QuaAppbmRleCAwMjM1NzE2YzA2Li42ZDczNTIyM2VjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9naXN0LmgKQEAgLTk2LDcgKzk2LDcgQEAgdHlwZWRlZiBHSVNUUGFnZU9wYXF1ZURhdGEgKkdJ U1RQYWdlT3BhcXVlOwogICoga2V5IHNpemUgdXNpbmcgb3BjbGFzcyBwYXJhbWV0ZXJzLgogICov CiAjZGVmaW5lIEdJU1RNYXhJbmRleFR1cGxlU2l6ZQlcCi0JTUFYQUxJR05fRE9XTigoQkxDS1Na IC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEgLSBzaXplb2YoR0lTVFBhZ2VPcGFxdWVEYXRhKSkgLyBc CisJTUFYQUxJR05fRE9XTigoUGFnZVVzYWJsZVNwYWNlIC0gc2l6ZW9mKEdJU1RQYWdlT3BhcXVl RGF0YSkpIC8gXAogCQkJCSAgNCAtIHNpemVvZihJdGVtSWREYXRhKSkKIAogI2RlZmluZSBHSVNU TWF4SW5kZXhLZXlTaXplCVwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3By aXZhdGUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaAppbmRleCA4MmViN2I0 YmQ4Li41YmY1MDAwYzk3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2 YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCkBAIC00NzQsNyAr NDc0LDcgQEAgZXh0ZXJuIHZvaWQgZ2lzdGFkanVzdG1lbWJlcnMoT2lkIG9wZmFtaWx5b2lkLAog LyogZ2lzdHV0aWwuYyAqLwogCiAjZGVmaW5lIEdpU1RQYWdlU2l6ZSAgIFwKLQkoIEJMQ0tTWiAt IFNpemVPZlBhZ2VIZWFkZXJEYXRhIC0gTUFYQUxJR04oc2l6ZW9mKEdJU1RQYWdlT3BhcXVlRGF0 YSkpICkKKwkoIFBhZ2VVc2FibGVTcGFjZSAtIE1BWEFMSUdOKHNpemVvZihHSVNUUGFnZU9wYXF1 ZURhdGEpKSApCiAKICNkZWZpbmUgR0lTVF9NSU5fRklMTEZBQ1RPUgkJCTEwCiAjZGVmaW5lIEdJ U1RfREVGQVVMVF9GSUxMRkFDVE9SCQk5MApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2h0dXBfZGV0YWlscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oCmluZGV4 IDZmZDg3ZGMxMDguLjBmN2E5NjgyMGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o dHVwX2RldGFpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaHR1cF9kZXRhaWxzLmgKQEAg LTU2MCw3ICs1NjAsNyBAQCBTdGF0aWNBc3NlcnREZWNsKE1heE9mZnNldE51bWJlciA8IFNwZWNU b2tlbk9mZnNldE51bWJlciwKICAqIEl0ZW1JZHMgYW5kIHR1cGxlcyBoYXZlIGRpZmZlcmVudCBh bGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBkb24ndCBhc3N1bWUgdGhhdAogICogeW91IGNhbiwgc2F5 LCBmaXQgMiB0dXBsZXMgb2Ygc2l6ZSBNYXhIZWFwVHVwbGVTaXplLzIgb24gdGhlIHNhbWUgcGFn ZS4KICAqLwotI2RlZmluZSBNYXhIZWFwVHVwbGVTaXplICAoQkxDS1NaIC0gTUFYQUxJR04oU2l6 ZU9mUGFnZUhlYWRlckRhdGEgKyBzaXplb2YoSXRlbUlkRGF0YSkpKQorI2RlZmluZSBNYXhIZWFw VHVwbGVTaXplICAoUGFnZVVzYWJsZVNwYWNlIC0gTUFYQUxJR04oc2l6ZW9mKEl0ZW1JZERhdGEp KSkKICNkZWZpbmUgTWluSGVhcFR1cGxlU2l6ZSAgTUFYQUxJR04oU2l6ZW9mSGVhcFR1cGxlSGVh ZGVyKQogCiAvKgpAQCAtNTc1LDcgKzU3NSw3IEBAIFN0YXRpY0Fzc2VydERlY2woTWF4T2Zmc2V0 TnVtYmVyIDwgU3BlY1Rva2VuT2Zmc2V0TnVtYmVyLAogICogcmVxdWlyZSBpbmNyZWFzZXMgaW4g dGhlIHNpemUgb2Ygd29yayBhcnJheXMuCiAgKi8KICNkZWZpbmUgTWF4SGVhcFR1cGxlc1BlclBh Z2UJXAotCSgoaW50KSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAvIFwKKwkoKGlu dCkgKChQYWdlVXNhYmxlU3BhY2UpIC8gXAogCQkJKE1BWEFMSUdOKFNpemVvZkhlYXBUdXBsZUhl YWRlcikgKyBzaXplb2YoSXRlbUlkRGF0YSkpKSkKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9pdHVwLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaXR1cC5oCmluZGV4IDFkNTU1 MzZkYmQuLjRlMjQ4Y2IyYmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pdHVwLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaApAQCAtMTY0LDcgKzE2NCw3IEBAIGluZGV4 X2dldGF0dHIoSW5kZXhUdXBsZSB0dXAsIGludCBhdHRudW0sIFR1cGxlRGVzYyB0dXBsZURlc2Ms IGJvb2wgKmlzbnVsbCkKICAqIEJ1dCBzdWNoIGEgcGFnZSBhbHdheXMgaGFzIGF0IGxlYXN0IE1B WEFMSUdOIHNwZWNpYWwgc3BhY2UsIHNvIHdlJ3JlIHNhZmUuCiAgKi8KICNkZWZpbmUgTWF4SW5k ZXhUdXBsZXNQZXJQYWdlCVwKLQkoKGludCkgKChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0 YSkgLyBcCisJKChpbnQpICgoUGFnZVVzYWJsZVNwYWNlKSAvIFwKIAkJCShNQVhBTElHTihzaXpl b2YoSW5kZXhUdXBsZURhdGEpICsgMSkgKyBzaXplb2YoSXRlbUlkRGF0YSkpKSkKIAogI2VuZGlm CQkJCQkJCS8qIElUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDdiZmJmMzA4NmMuLjE2MDYw ZTA5YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE4Myw3ICsxODMsNyBAQCB0eXBlZGVmIHN0cnVj dCBCVE1ldGFQYWdlRGF0YQogICogdGhhbiBuZWNlc3NhcnkgYXMgYSByZXN1bHQsIHdoaWNoIGlz IGNvbnNpZGVyZWQgYWNjZXB0YWJsZS4KICAqLwogI2RlZmluZSBNYXhUSURzUGVyQlRyZWVQYWdl IFwKLQkoaW50KSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhIC0gc2l6ZW9mKEJUUGFn ZU9wYXF1ZURhdGEpKSAvIFwKKwkoaW50KSAoKFBhZ2VVc2FibGVTcGFjZSAtIHNpemVvZihCVFBh Z2VPcGFxdWVEYXRhKSkgLyBcCiAJCSAgIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1ZnBhZ2UuaAppbmRleCA0MjRlY2JhMDI4Li4zZDM2YTc0Mzg1IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1ZnBhZ2UuaApAQCAtMjEzLDYgKzIxMywxMyBAQCB0eXBlZGVmIFBhZ2VIZWFkZXJEYXRhICpQ YWdlSGVhZGVyOwogICovCiAjZGVmaW5lIFNpemVPZlBhZ2VIZWFkZXJEYXRhIChvZmZzZXRvZihQ YWdlSGVhZGVyRGF0YSwgcGRfbGlucCkpCiAKKy8qCisgKiBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0 IGFmdGVyIHNtZ3IncyBib29ra2VlcGluZywgZXRjCisgKi8KKyNkZWZpbmUgUGFnZVVzYWJsZVNw YWNlIChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkKK1N0YXRpY0Fzc2VydERlY2woUGFn ZVVzYWJsZVNwYWNlID09IE1BWEFMSUdOKFBhZ2VVc2FibGVTcGFjZSksCisJCQkJICJTaXplT2ZQ YWdlSGVhZGVyRGF0YSBtdXN0IGJlIE1BWEFMSUdOJ2QiKTsKKwogLyoKICAqIFBhZ2VJc0VtcHR5 CiAgKgkJcmV0dXJucyB0cnVlIGlmZiBubyBpdGVtaWQgaGFzIGJlZW4gYWxsb2NhdGVkIG9uIHRo ZSBwYWdlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2ZzbV9pbnRlcm5hbHMuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvZnNtX2ludGVybmFscy5oCmluZGV4IDllMzE0YzgzZmEuLjJi OTEzOGY3YTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZnNtX2ludGVybmFscy5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZnNtX2ludGVybmFscy5oCkBAIC00OCw3ICs0OCw3 IEBAIHR5cGVkZWYgRlNNUGFnZURhdGEgKkZTTVBhZ2U7CiAgKiBOdW1iZXIgb2Ygbm9uLWxlYWYg YW5kIGxlYWYgbm9kZXMsIGFuZCBub2RlcyBpbiB0b3RhbCwgb24gYW4gRlNNIHBhZ2UuCiAgKiBU aGVzZSBkZWZpbml0aW9ucyBhcmUgaW50ZXJuYWwgdG8gZnNtcGFnZS5jLgogICovCi0jZGVmaW5l IE5vZGVzUGVyUGFnZSAoQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC0g XAorI2RlZmluZSBOb2Rlc1BlclBhZ2UgKFBhZ2VVc2FibGVTcGFjZSAtIFwKIAkJCQkJICBvZmZz ZXRvZihGU01QYWdlRGF0YSwgZnBfbm9kZXMpKQogCiAjZGVmaW5lIE5vbkxlYWZOb2Rlc1BlclBh Z2UgKEJMQ0tTWiAvIDIgLSAxKQotLSAKMi40MC4xCgo= --0000000000007d57b1060b4bf763--