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 1vLmU3-00ABLU-1F for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 18:00:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLmU1-00ERGP-2k for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 18:00:46 +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 1vLmU0-00ERGA-20 for pgsql-hackers@lists.postgresql.org; Wed, 19 Nov 2025 18:00:45 +0000 Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vLmTx-000NZB-2G for pgsql-hackers@postgresql.org; Wed, 19 Nov 2025 18:00:44 +0000 Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.stl.internal (Postfix) with ESMTP id 416E41D00192 for ; Wed, 19 Nov 2025 13:00:41 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Wed, 19 Nov 2025 13:00:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1763575241; x=1763661641; bh=6ONQQk+i5o bBxUsQ0VQmZis2KUB/n/bGp9h8NY/dsDM=; b=t8hSxejAXAW9wn2EqRaYy68uaY Xilwsiird0jt4Z7yoSoQesyn+gi/tiiQc/P9yU3hHKBOPZtwmrsj3y9NByR0/Mkw /GuieT5VqoHYSfZIOYrwTI/W5cR6CmHFOWcdBwA1ojGEEWbITG6ahMFyoyUkzkEP R8eUtHLznazGLiGMnrzvZ0jkbAB7QQks0wa9TmP34RuKl4jKJXma/SA4XfhHua+h Yk9JIexS4ai5gNP6u0UrgYne7P7n5eExX+8+JaOu/Z8hLUFmFJWiO9NNpZeSFNR0 H8Lxbr4jE6Pb4gBn4cAIGd2t8xUxiyc/LOSrQ4GpoUkPnc7PXQ0gHMRm9J4Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1763575241; x=1763661641; bh=6ONQQk+i5obBxUsQ0VQmZis2KUB/n/bGp9h 8NY/dsDM=; b=f2SD9It7zcSANbwgit98s0vA84WNfMtLf0mnG6bn/1MsekC3JJ7 0I+L94V4toQ6LZEj1aE9ZbHmg3l11zmPHngEUoL8v098Apc4WLctlrzJu1BqhFko 0uIb4s1K6nP3jzWiv/v4SCerOHZorAIkJHrO7aiqo11xfMRMEZEwDLb71TYXvBvi peBqMJ8MCNyixaxED9SzFe8b1eE0xo64m5vo6qbNqgJ/cPvGHwub1w8oLJ8zER6L bn/EfvuLEv4N86qHY7YM5XFxPE876X3/UsDHsw4yI1Gc/c+Le4xOmnQiM7C4IROD FL3+lib3p8aQUZJb29v1b76ixL3zDxx+g5w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvvdegkeejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpeffhffvkfgjfhfuofggtgesmhdtmherre dtjeenucfhrhhomhepifhrvghguceuuhhrugcuoehgrhgvghessghurhgurdhmvgeqnecu ggftrfgrthhtvghrnhepfeeluedutdeludduieekgfduffehffffieelueeuvddtveejve euueegkeeuteeunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhf rhhomhepghhrvghgsegsuhhrugdrmhgvpdhnsggprhgtphhtthhopedupdhmohguvgepsh hmthhpohhuthdprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgv shhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 19 Nov 2025 13:00:40 -0500 (EST) Date: Wed, 19 Nov 2025 13:00:29 -0500 From: Greg Burd To: "=?utf-8?Q?pgsql-hackers=40postgresql.org?=" Message-ID: <3A8869E9-04FA-463C-9FC8-AC1BD0BF73B3@greg.burd.me> In-Reply-To: References: Subject: Re: Expanding HOT updates for expression and partial indexes X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="691e05bd_593c4f2_db0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --691e05bd_593c4f2_db0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Nov 16 2025, at 1:53 pm, Greg Burd wrote: > 0004 - Enable HOT updates for expression and partial indexes > > This finally gets us back to where this project started, but on much > more firm ground than before because we're not going to self-deadlock. > The idea has grown from a small function into something larger, but only > out of necessity. > > In this patch I add ExecWhichIndexesRequireUpdates() in execIndexing.c > which implements (c) finding the set of attributes that force new index > updates. This set can be very different from the modified indexed > attributes. We know that some attributes are not equal to their > previous versions, but does that mean that the index that references > that attribute needs a new index tuple? It may, or it may not. Here's > the comment on that function that explains: > > /* > * ExecWhichIndexesRequireUpdates > * > * Determine which indexes need updating given modified indexed attributes. > * This function is a companion to ExecCheckIndexedAttrsForChanges(). > On the > * surface, they appear similar but they are doing two very different things. > * > * For a standard index on a set of attributes this is the intersection of > * the mix_attrs and the index attrs (key, expression, but not predicate). > * > * For expression indexes and indexes which implement the amcomparedatums() > * index AM API we'll need to form index datum and compare each > attribute to > * see if any actually changed. > * > * For expression indexes the result of the expression might not change > at all, > * this is common with JSONB columns which require expression indexes > and where > * it is commonplace to index a field within a document and have > updates that > * generally don't update that field. > * > * Partial indexes won't trigger index tuples when the old/new tuples > are both > * outside of the predicate range. > * > * For nbtree the amcomparedatums() API is critical as it requires that key > * attributes are equal when they memcmp(), which might not be the case when > * using type-specific comparison or factoring in collation which might make > * an index case insensitive. > * > * All of this is to say that the goal is for the executor to know, > ahead of > * calling into the table AM for the update and before calling into the index > * AM for inserting new index tuples, which attributes at a minimum will > * necessitate a new index tuple. > * > ... > */ Attached are rebased (d5b4f3a6d4e) patches with the only changes happening in the last patch in the series. 0004 - Enable HOT updates for expression and partial indexes I was never happy with the dual functions ExecCheckIndexedAttrsForChanges() and ExecWhichIndexesRequireUpdates(), it felt like too much overhead and duplication of effort. While updating my tests, adding a few cases, I found that there was also a flaw in the logic. So, time to rewrite and combine them. What did I discover? Before the logic was to find the set of modified indexed attributes then review all the indexes for changed attributes using FormIndexDatum() and comparing before/after to see if expressions really changed the value to be indexed or not. The first pass didn't take into account expressions, the second did. So, an expression index over JSONB data wouldn't extract and test the field within the document, it was just comparing the entire document before/after using the jsonb comparison function, no bueno. This approach wraps both functions into one somewhat simplified function. The logic is basically, iterate over the indexes reviewing indexed attributes for changes. Along the way we call into the new index AM's comparison function when present, otherwise we find and use the proper type-specific comparison function for the datum. At the end of the function we have our Bitmapset of attributes that should trigger new index tuples. > What's left undone? > > * I need to check code coverage so that I might I did this and it was quite good, I'll do it again for this new series but it's nice to see that the tests are exercising the vast majority of the code paths. > * create tests covering all the new cases I think the coverage is good, maybe even redundant or overly complex in places. > * update the README.HOT documentation, wiki, etc. Soon, I hope to have this approach solid and under review before solidifying the docs. > * performance... Still as yet unmeasured, I know that there is more work per-update to perform these checks, so some overhead, but I don't know if that overhead is more than before with HeapDetermineColumnsInfo() and index_unchanged_by_update(). Those two functions did essentially the same thing, only with binary comparison (datumIsEqual()). I need to measure that. What about doing all this work outside of the buffer lock in heap_update()? Surely that'll give back a bit or at least add to concurrency. Forming index tuples a few extra times and evaluating the expressions 3 times rather than 1 is going to hurt, I think I can come up with a way to cache the formed datum and use it later on, but is that worth it? Complex expressions, yes. Also, what about expressions that expect to be executed once... and now are 3x? That's what forced my update to the insert-conflict-specconflict.out test, but AFAICT there is no way to test if an expression's value is going to change on update without exercising it once for the old tuple and once for the new tuple. Even if it were possible for an index to provide the key it might have changed after the expression evaluation (as is the case in hash), so I don't think this is avoidable. Maybe that's reason enough to add a reloption to disable the expression evaluation piece of this? Given that it might create a logic or performance regression. The flip side is the potential to use the HOT path, that's a real savings. One concerning thing is that nbtree's assumption that key attributes for TIDs must use binary comparison for equality. This means that for our common case (heap/btree) there is more work per-update than before, which is why I need to measure. I could look into eliminating the nbtree requirement, I don't understand it too well as yet by I believe that on page split there is an attempt to deduplicate TIDs into a TIDBitmap and the test for when that's possible is datumIsEqual(). If that were the same as in this new code, possibly evening using tts_attr_equal(), then... I don't know, I'll have to investigate. Chime in here if you can educate me on this one. :) best. -greg --691e05bd_593c4f2_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v21-0001-Reorganize-heap-update-logic.patch" RnJvbSAwZGUwNTlhZTE3MDQyYTc2NTk0NjEwZTFiN2IzNWRiYjJkYjk0MTVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy IE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjEgMS80XSBSZW9yZ2Fu aXplIGhlYXAgdXBkYXRlIGxvZ2ljCgpUaGlzIGNvbW1pdCByZWZhY3RvcnMgdGhlIGludGVyYWN0 aW9uIGJldHdlZW4gaGVhcF90dXBsZV91cGRhdGUoKSwKaGVhcF91cGRhdGUoKSwgYW5kIHNpbXBs ZV9oZWFwX3VwZGF0ZSgpIHRvIGltcHJvdmUgY29kZSBvcmdhbml6YXRpb24KYW5kIGZsZXhpYmls aXR5LiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlCnByZXZp b3VzIGltcGxlbWVudGF0aW9uIGFuZCBoYXZlIG5vIHBlcmZvcm1hbmNlIGltcGFjdC4KClRoZSBw cmltYXJ5IG1vdGl2YXRpb24gaXMgdG8gcHJlcGFyZSBmb3IgdXBjb21pbmcgbW9kaWZpY2F0aW9u cyB0bwpob3cgYW5kIHdoZXJlIG1vZGlmaWVkIGF0dHJpYnV0ZXMgYXJlIGlkZW50aWZpZWQgZHVy aW5nIHRoZSB1cGRhdGUKcGF0aCwgcGFydGljdWxhcmx5IGZvciBjYXRhbG9nIHVwZGF0ZXMuCgpB cyBwYXJ0IG9mIHRoaXMgcmVvcmdhbml6YXRpb24sIHRoZSBoYW5kbGluZyBvZiByZXBsaWNhIGlk ZW50aXR5IGtleQphdHRyaWJ1dGVzIGhhcyBiZWVuIGFkanVzdGVkLiBJbnN0ZWFkIG9mIGZldGNo aW5nIGEgc2Vjb25kIGNvcHkgb2YKdGhlIGJpdG1hcCBkdXJpbmcgYW4gdXBkYXRlIG9wZXJhdGlv biwgdGhlIGNhbGxlciBpcyBub3cgcmVxdWlyZWQgdG8KcHJvdmlkZSBpdC4gVGhpcyBjaGFuZ2Ug YXBwbGllcyB0byBib3RoIGhlYXBfdXBkYXRlKCkgYW5kCmhlYXBfZGVsZXRlKCkuCgpObyB1c2Vy LXZpc2libGUgY2hhbmdlcy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAg ICAgICAgIHwgNTY4ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTE3ICsrKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggICAgICAgICAgICAgIHwgIDI0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRp b25zKCspLCAyOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA0 YjBjNDlmNGJiMC4uYWZmNDc0ODEzNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0z OSwxOCArMzksMjQgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdmFsaWQuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1 ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9kLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv dmFjdXVtLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pdGVtcHRyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMv aW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1 dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjIsMTYgKzY4LDggQEAgc3RhdGljIFhMb2dSZWNQdHIg bG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBvbGRidWYsCiAJCQkJCQkJCSAg SGVhcFR1cGxlIG5ld3R1cCwgSGVhcFR1cGxlIG9sZF9rZXlfdHVwbGUsCiAJCQkJCQkJCSAgYm9v bCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkKTsKICNp ZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi1zdGF0aWMgdm9pZCBjaGVja19sb2NrX2lmX2lucGxh Y2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLAotCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOwog c3RhdGljIHZvaWQgY2hlY2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVwKTsKICNl bmRpZgotc3RhdGljIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9u IHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywKLQkJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAgSGVhcFR1 cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29sICpoYXNfZXh0 ZXJuYWwpOwogc3RhdGljIGJvb2wgaGVhcF9hY3F1aXJlX3R1cGxvY2soUmVsYXRpb24gcmVsYXRp b24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSBt b2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgKmhhdmVfdHVw bGVfbG9jayk7CkBAIC0xMDMsMTAgKzEwMSwxMCBAQCBzdGF0aWMgYm9vbCBDb25kaXRpb25hbE11 bHRpWGFjdElkV2FpdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0U3RhdHVzIHN0YXR1cwog c3RhdGljIHZvaWQgaW5kZXhfZGVsZXRlX3NvcnQoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUp Owogc3RhdGljIGludAlib3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAq ZGVsc3RhdGUpOwogc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiBy ZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCk7Ci1zdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNh SWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWly ZWQsCitzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVs YXRpb24sIEhlYXBUdXBsZSB0cCwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJpZF9hdHRycywgYm9v bCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJYm9vbCAqY29weSk7CiAKLQogLyoKICAqIEVhY2gg dHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWlnaHQgbG9jaywgYW5k IG9uZSBvciB0d28KICAqIGNvcnJlc3BvbmRpbmcgTXVsdGlYYWN0U3RhdHVzZXMgKG9uZSB0byBt ZXJlbHkgbG9jayB0dXBsZXMsIGFub3RoZXIgb25lIHRvCkBAIC0yNzk5LDYgKzI3OTcsNyBAQCBo ZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQs CiAJQnVmZmVyCQlidWZmZXI7CiAJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAJ VHJhbnNhY3Rpb25JZCBuZXdfeG1heDsKKwlCaXRtYXBzZXQgICpyaWRfYXR0cnM7CiAJdWludDE2 CQluZXdfaW5mb21hc2ssCiAJCQkJbmV3X2luZm9tYXNrMjsKIAlib29sCQloYXZlX3R1cGxlX2xv Y2sgPSBmYWxzZTsKQEAgLTI4MTEsNiArMjgxMCw4IEBAIGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwKIAogCUFzc2VydEhhc1NuYXBzaG90 Rm9yVG9hc3QocmVsYXRpb24pOwogCisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJC aXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisKIAkvKgog CSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxv Y2F0ZSBhIGNvbWJvIENJRC4KIAkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21i byBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKQEAgLTMwMTQsNiArMzAxNSw3IEBA IGwxOgogCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKHRwLnRfc2VsZiksIExvY2tU dXBsZUV4Y2x1c2l2ZSk7CiAJCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQogCQkJUmVs ZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CiAJCXJldHVybiBy ZXN1bHQ7CiAJfQogCkBAIC0zMDM1LDcgKzMwMzcsMTAgQEAgbDE6CiAJICogQ29tcHV0ZSByZXBs aWNhIGlkZW50aXR5IHR1cGxlIGJlZm9yZSBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBz bwogCSAqIHdlIGRvbid0IFBBTklDIHVwb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgog CSAqLwotCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCAm dHAsIHRydWUsICZvbGRfa2V5X2NvcGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBs aWNhSWRlbnRpdHkocmVsYXRpb24sICZ0cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAgIHRydWUs ICZvbGRfa2V5X2NvcGllZCk7CisJYm1zX2ZyZWUocmlkX2F0dHJzKTsKKwlyaWRfYXR0cnMgPSBO VUxMOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwb3NzaWJseS1tdWx0aXhhY3Qt YWJsZSBvcGVyYXRpb24gaW4gdGhlIGN1cnJlbnQKQEAgLTMyNDcsNyArMzI1MiwxMCBAQCBzaW1w bGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq dGlkKQogICoJaGVhcF91cGRhdGUgLSByZXBsYWNlIGEgdHVwbGUKICAqCiAgKiBTZWUgdGFibGVf dHVwbGVfdXBkYXRlKCkgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLCBleGNl cHQgdGhhdAotICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgdHVwbGUgcmF0aGVyIHRo YW4gYSBzbG90LgorICogdGhpcyByb3V0aW5lIGRpcmVjdGx5IHRha2VzIGEgaGVhcCB0dXBsZSBy YXRoZXIgdGhhbiBhIHNsb3QuCisgKgorICogSXQncyByZXF1aXJlZCB0aGF0IHRoZSBjYWxsZXIg aGFzIGFjcXVpcmVkIHRoZSBwaW4gYW5kIGxvY2sgb24gdGhlIGJ1ZmZlci4KKyAqIFRoYXQgbG9j ayBhbmQgcGluIHdpbGwgYmUgbWFuYWdlZCBoZXJlLCBub3QgaW4gdGhlIGNhbGxlci4KICAqCiAg KiBJbiB0aGUgZmFpbHVyZSBjYXNlcywgdGhlIHJvdXRpbmUgZmlsbHMgKnRtZmQgd2l0aCB0aGUg dHVwbGUncyB0X2N0aWQsCiAgKiB0X3htYXggKHJlc29sdmluZyBhIHBvc3NpYmxlIE11bHRpWGFj dCwgaWYgbmVjZXNzYXJ5KSwgYW5kIHRfY21heCAodGhlIGxhc3QKQEAgLTMyNTUsMzAgKzMyNjMs MjEgQEAgc2ltcGxlX2hlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9p bnRlckRhdGEgKnRpZCkKICAqIGdlbmVyYXRlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uKS4KICAq LwogVE1fUmVzdWx0Ci1oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBv aW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAotCQkJQ29tbWFuZElkIGNpZCwgU25h cHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExv Y2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMpCitoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlRGF0YSAqb2xkdHVw LAorCQkJSGVhcFR1cGxlIG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAorCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxv Y2ttb2RlLCBCdWZmZXIgYnVmZmVyLAorCQkJUGFnZSBwYWdlLCBCbG9ja051bWJlciBibG9jaywg SXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKKwkJCUJpdG1hcHNldCAqc3VtX2F0dHJz LCBCaXRtYXBzZXQgKnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCUJpdG1hcHNl dCAqbWl4X2F0dHJzLCBCdWZmZXIgKnZtYnVmZmVyLAorCQkJYm9vbCByZXBfaWRfa2V5X3JlcXVp cmVkLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJcmVz dWx0OwogCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKLQlC aXRtYXBzZXQgICpob3RfYXR0cnM7Ci0JQml0bWFwc2V0ICAqc3VtX2F0dHJzOwotCUJpdG1hcHNl dCAgKmtleV9hdHRyczsKLQlCaXRtYXBzZXQgICppZF9hdHRyczsKLQlCaXRtYXBzZXQgICppbnRl cmVzdGluZ19hdHRyczsKLQlCaXRtYXBzZXQgICptb2RpZmllZF9hdHRyczsKLQlJdGVtSWQJCWxw OwotCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVwOwogCUhlYXBUdXBs ZQlvbGRfa2V5X3R1cGxlID0gTlVMTDsKIAlib29sCQlvbGRfa2V5X2NvcGllZCA9IGZhbHNlOwot CVBhZ2UJCXBhZ2U7Ci0JQmxvY2tOdW1iZXIgYmxvY2s7CiAJTXVsdGlYYWN0U3RhdHVzIG14YWN0 X3N0YXR1czsKLQlCdWZmZXIJCWJ1ZmZlciwKLQkJCQluZXdidWYsCi0JCQkJdm1idWZmZXIgPSBJ bnZhbGlkQnVmZmVyLAorCUJ1ZmZlcgkJbmV3YnVmLAogCQkJCXZtYnVmZmVyX25ldyA9IEludmFs aWRCdWZmZXI7CiAJYm9vbAkJbmVlZF90b2FzdDsKIAlTaXplCQluZXd0dXBzaXplLApAQCAtMzI5 Miw3ICszMjkxLDYgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlib29sCQlhbGxfdmlzaWJsZV9j bGVhcmVkX25ldyA9IGZhbHNlOwogCWJvb2wJCWNoZWNrZWRfbG9ja2VyczsKIAlib29sCQlsb2Nr ZXJfcmVtYWluczsKLQlib29sCQlpZF9oYXNfZXh0ZXJuYWwgPSBmYWxzZTsKIAlUcmFuc2FjdGlv bklkIHhtYXhfbmV3X3R1cGxlLAogCQkJCXhtYXhfb2xkX3R1cGxlOwogCXVpbnQxNgkJaW5mb21h c2tfb2xkX3R1cGxlLApAQCAtMzMwMCwxNDQgKzMyOTgsMTMgQEAgaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1 cCwKIAkJCQlpbmZvbWFza19uZXdfdHVwbGUsCiAJCQkJaW5mb21hc2syX25ld190dXBsZTsKIAot CUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOwotCi0JLyogQ2hlYXAsIHNpbXBsaXN0 aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KLQlB c3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEpIDw9Ci0JCSAgIFJl bGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7Ci0KKwlBc3NlcnQoQnVmZmVy SXNMb2NrZWRCeU1lKGJ1ZmZlcikpOworCUFzc2VydChJdGVtSWRJc05vcm1hbChscCkpOwogCUFz c2VydEhhc1NuYXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwogCi0JLyoKLQkgKiBGb3JiaWQgdGhp cyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBjb21ibyBD SUQuCi0JICogT3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2aXNp YmlsaXR5IGNoZWNrcywgYW5kIHdlCi0JICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJyb2FkY2Fz dGluZyBpdCB0byB0aGVtLgotCSAqLwotCWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRF KSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJhbGxlbCBv cGVyYXRpb24iKSkpOwotCi0jaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotCWNoZWNrX2xvY2tf aWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgbmV3dHVwKTsKLSNlbmRp ZgotCi0JLyoKLQkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQg Zm9yIHZhcmlvdXMgb3BlcmF0aW9ucy4KLQkgKgotCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMs IHRoaXMgaXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgotCSAqIGhhdmUg dG8gcHV0IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNv bXB1dGUgdGhlCi0JICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0 aGUgd29yc3QgY2FzZSwgaWYgd2UgYXJlCi0JICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0 aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAotCSAqIGRlYWRsb2NrIGlmIHdl IHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2FjaGUK LQkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVhcC4KLQkg KgotCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHkg YW5kIGNvbHVtbnMgdGhhdCBhcmUKLQkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiByb3dzIGlu IHRoZSB0YWJsZS4KLQkgKgotCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0 bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAotCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBl bmluZyBtaWR3YXkgdGhyb3VnaC4KLQkgKi8KLQlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4 QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1Rf QkxPQ0tJTkcpOwotCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0 aW9uLAotCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOwotCWtleV9h dHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJ VE1BUF9LRVkpOwotCWlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRp b24sCi0JCQkJCQkJCQkJICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwotCWludGVy ZXN0aW5nX2F0dHJzID0gTlVMTDsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVy cyhpbnRlcmVzdGluZ19hdHRycywgaG90X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJt c19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywgc3VtX2F0dHJzKTsKLQlpbnRlcmVzdGlu Z19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywga2V5X2F0dHJzKTsK LQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywg aWRfYXR0cnMpOwotCi0JYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOwot CUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOwotCWJ1ZmZl ciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWZmZXIpOwotCi0JLyoKLQkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4gdGhlIHZp c2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bwotCSAqIGJlIG5lY2Vzc2FyeS4gIFNp bmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0IGJlCi0J ICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRvIHJlY2hl Y2sgYWZ0ZXIgd2UgaGF2ZQotCSAqIHRoZSBsb2NrLgotCSAqLwotCWlmIChQYWdlSXNBbGxWaXNp YmxlKHBhZ2UpKQotCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssICZ2bWJ1ZmZl cik7Ci0KLQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQotCWxw ID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7 Ci0KLQkvKgotCSAqIFVzdWFsbHksIGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tz IHBydW5pbmcgb2Ygb3RpZCwgZW5zdXJpbmcKLQkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBX aGVuIHRoZSBvdGlkIG9yaWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQotCSAqIG5laXRo ZXIgYSBwaW4gbm9yIGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8gc3Rh dGVzLCBlYWNoCi0JICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmluZy4KLQkg KgotCSAqIEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUuICBI b3dldmVyLCB1bmxpa2Ugb3RoZXIKLQkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2UgZG9uJ3Qg a25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAotCSAqIExQX0RFQUQgY2Fz ZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBUTV9EZWxl dGVkCi0JICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFuZCBNRVJHRSwg dGhvc2UgU1FMIHN0YXRlbWVudHMKLQkgKiBob2xkIGEgc25hcHNob3QgdGhhdCBlbnN1cmVzIExQ X05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KLQkgKiBUTV9VcGRhdGVkIGFuZCBU TV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBlcnJvciBtZXNzYWdlcy4KLQkg KiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFzb25zLiAgRmlyc3QsIGl0IGF2b2lk cyBjb21wbGljYXRpbmcKLQkgKiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB3aGVuIHRtZmQtPmN0aWQg aXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMKLQkgKiBlcnJvciBsb2cgZXZpZGVuY2UgdGhh dCB3ZSB0b29rIHRoaXMgYnJhbmNoLgotCSAqCi0JICogU2luY2UgaXQncyBwb3NzaWJsZSB0byBz ZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKLQkgKiBMUF9O T1JNQUwgZm9yIGEgdHVwbGUgdGhhdCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVw bGUgZm9yIGFuCi0JICogdW5yZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUg a2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSIuCi0JICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUs IG5ld2VyIHZlcnNpb24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKLQkgKiBjaGFu Z2VzIG9yaWdpbmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0ZXIgdGhl IHZlcnNpb24KLQkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5c2NhY2hl LXVwZGF0ZS1wcnVuZWQuc3BlYy4KLQkgKi8KLQlpZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKLQl7 Ci0JCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChyZWxh dGlvbikpKTsKLQotCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCUFzc2VydCghaGF2 ZV90dXBsZV9sb2NrKTsKLQkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCQlSZWxl YXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJdG1mZC0+Y3RpZCA9ICpvdGlkOwotCQl0bWZkLT54bWF4 ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXRtZmQtPmNtYXggPSBJbnZhbGlkQ29tbWFuZElk OwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCi0JCWJtc19mcmVlKGhvdF9hdHRycyk7 Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7Ci0JCWJtc19m cmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWRfYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAq LwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRycyk7Ci0JCXJldHVybiBUTV9EZWxldGVkOwot CX0KLQotCS8qCi0JICogRmlsbCBpbiBlbm91Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhlYXBEZXRl cm1pbmVDb2x1bW5zSW5mbyB0byB3b3JrCi0JICogcHJvcGVybHkuCi0JICovCi0Jb2xkdHVwLnRf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKLQlvbGR0dXAudF9kYXRhID0g KEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCW9sZHR1cC50X2xlbiA9 IEl0ZW1JZEdldExlbmd0aChscCk7Ci0Jb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwotCi0JLyogdGhl IG5ldyB0dXBsZSBpcyByZWFkeSwgZXhjZXB0IGZvciB0aGlzOiAqLworCS8qIFRoZSBuZXcgdHVw bGUgaXMgcmVhZHksIGV4Y2VwdCBmb3IgdGhpcyAqLwogCW5ld3R1cC0+dF90YWJsZU9pZCA9IFJl bGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgY29sdW1ucyBt b2RpZmllZCBieSB0aGUgdXBkYXRlLiAgQWRkaXRpb25hbGx5LCBpZGVudGlmeQotCSAqIHdoZXRo ZXIgYW55IG9mIHRoZSB1bm1vZGlmaWVkIHJlcGxpY2EgaWRlbnRpdHkga2V5IGF0dHJpYnV0ZXMg aW4gdGhlCi0JICogb2xkIHR1cGxlIGlzIGV4dGVybmFsbHkgc3RvcmVkIG9yIG5vdC4gIFRoaXMg aXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IKLQkgKiBzdWNoIGF0dHJpYnV0ZXMgdGhlIGZsYXR0ZW5l ZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzIHBhcnQgb2YgdGhlCi0JICogbmV3IHR1cGxl IHNvIHdlIG11c3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHRoZSBvbGRfa2V5X3R1cGxlLiAgU2Vl Ci0JICogRXh0cmFjdFJlcGxpY2FJZGVudGl0eS4KLQkgKi8KLQltb2RpZmllZF9hdHRycyA9IEhl YXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlvbiwgaW50ZXJlc3RpbmdfYXR0cnMsCi0JCQkJ CQkJCQkJCSAgaWRfYXR0cnMsICZvbGR0dXAsCi0JCQkJCQkJCQkJCSAgbmV3dHVwLCAmaWRfaGFz X2V4dGVybmFsKTsKLQogCS8qCiAJICogSWYgd2UncmUgbm90IHVwZGF0aW5nIGFueSAia2V5IiBj b2x1bW4sIHdlIGNhbiBncmFiIGEgd2Vha2VyIGxvY2sgdHlwZS4KIAkgKiBUaGlzIGFsbG93cyBm b3IgbW9yZSBjb25jdXJyZW5jeSB3aGVuIHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5CkBA IC0zNDQ5LDcgKzMzMTYsNyBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVwZGF0ZXMg dGhhdCBkb24ndCBtYW5pcHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAogCSAqIHNl cmVuZGlwaXRvdXNseSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkgKi8KLQlpZiAo IWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlmICghYm1zX292ZXJs YXAobWl4X2F0dHJzLCBwa19hdHRycykpCiAJewogCQkqbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tl eUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVzTm9LZXlVcGRhdGU7 CkBAIC0zNDczLDE3ICszMzQwLDEwIEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBj b25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCWtleV9pbnRh Y3QgPSBmYWxzZTsKIAl9CiAKLQkvKgotCSAqIE5vdGU6IGJleW9uZCB0aGlzIHBvaW50LCB1c2Ug b2xkdHVwIG5vdCBvdGlkIHRvIHJlZmVyIHRvIG9sZCB0dXBsZS4KLQkgKiBvdGlkIG1heSB2ZXJ5 IHdlbGwgcG9pbnQgYXQgbmV3dHVwLT50X3NlbGYsIHdoaWNoIHdlIHdpbGwgb3ZlcndyaXRlCi0J ICogd2l0aCB0aGUgbmV3IHR1cGxlJ3MgbG9jYXRpb24sIHNvIHRoZXJlJ3MgZ3JlYXQgcmlzayBv ZiBjb25mdXNpb24gaWYgd2UKLQkgKiB1c2Ugb3RpZCBhbnltb3JlLgotCSAqLwotCiBsMjoKIAlj aGVja2VkX2xvY2tlcnMgPSBmYWxzZTsKIAlsb2NrZXJfcmVtYWlucyA9IGZhbHNlOwotCXJlc3Vs dCA9IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZSgmb2xkdHVwLCBjaWQsIGJ1ZmZlcik7CisJcmVz dWx0ID0gSGVhcFR1cGxlU2F0aXNmaWVzVXBkYXRlKG9sZHR1cCwgY2lkLCBidWZmZXIpOwogCiAJ Lyogc2VlIGJlbG93IGFib3V0IHRoZSAibm8gd2FpdCIgY2FzZSAqLwogCUFzc2VydChyZXN1bHQg IT0gVE1fQmVpbmdNb2RpZmllZCB8fCB3YWl0KTsKQEAgLTM1MTUsOCArMzM3NSw4IEBAIGwyOgog CQkgKi8KIAogCQkvKiBtdXN0IGNvcHkgc3RhdGUgZGF0YSBiZWZvcmUgdW5sb2NraW5nIGJ1ZmZl ciAqLwotCQl4d2FpdCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSk7 Ci0JCWluZm9tYXNrID0gb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazsKKwkJeHdhaXQgPSBIZWFw VHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKKwkJaW5mb21hc2sgPSBvbGR0 dXAtPnRfZGF0YS0+dF9pbmZvbWFzazsKIAogCQkvKgogCQkgKiBOb3cgd2UgaGF2ZSB0byBkbyBz b21ldGhpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tlci4gIElmIGl0J3MgYQpAQCAtMzU1Niwx MyArMzQxNiwxMiBAQCBsMjoKIAkJCQkgKiByZXF1ZXN0aW5nIGEgbG9jayBhbmQgYWxyZWFkeSBo YXZlIG9uZTsgYXZvaWRzIGRlYWRsb2NrKS4KIAkJCQkgKi8KIAkJCQlpZiAoIWN1cnJlbnRfaXNf bWVtYmVyKQotCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9z ZWxmKSwgKmxvY2ttb2RlLAorCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJm9s ZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUsCiAJCQkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZoYXZl X3R1cGxlX2xvY2spOwogCiAJCQkJLyogd2FpdCBmb3IgbXVsdGl4YWN0ICovCiAJCQkJTXVsdGlY YWN0SWRXYWl0KChNdWx0aVhhY3RJZCkgeHdhaXQsIG14YWN0X3N0YXR1cywgaW5mb21hc2ssCi0J CQkJCQkJCXJlbGF0aW9uLCAmb2xkdHVwLnRfc2VsZiwgWExUV19VcGRhdGUsCi0JCQkJCQkJCSZy ZW1haW4pOworCQkJCQkJCQlyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCBYTFRXX1VwZGF0ZSwg JnJlbWFpbik7CiAJCQkJY2hlY2tlZF9sb2NrZXJzID0gdHJ1ZTsKIAkJCQlsb2NrZXJfcmVtYWlu cyA9IHJlbWFpbiAhPSAwOwogCQkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENM VVNJVkUpOwpAQCAtMzU3Miw5ICszNDMxLDkgQEAgbDI6CiAJCQkJICogY291bGQgdXBkYXRlIHRo aXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LiAgQ2hlY2sKIAkJCQkgKiBmb3Ig eG1heCBjaGFuZ2UsIGFuZCBzdGFydCBvdmVyIGlmIHNvLgogCQkJCSAqLwotCQkJCWlmICh4bWF4 X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQlpZiAoeG1h eF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAogCQkJCQkJCQkJ CSAgaW5mb21hc2spIHx8Ci0JCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhlYXBUdXBsZUhlYWRl ckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCisJCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAogCQkJCQkJCQkJCSB4d2Fp dCkpCiAJCQkJCWdvdG8gbDI7CiAJCQl9CkBAIC0zNTk5LDggKzM0NTgsOCBAQCBsMjoKIAkJCSAq IGJlZm9yZSB0aGlzIG9uZSwgd2hpY2ggYXJlIGltcG9ydGFudCB0byBrZWVwIGluIGNhc2UgdGhp cwogCQkJICogc3VieGFjdCBhYm9ydHMuCiAJCQkgKi8KLQkJCWlmICghSEVBUF9YTUFYX0lTX0xP Q0tFRF9PTkxZKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2spKQotCQkJCXVwZGF0ZV94YWN0ID0g SGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC50X2RhdGEpOworCQkJaWYgKCFIRUFQX1hNQVhf SVNfTE9DS0VEX09OTFkob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2spKQorCQkJCXVwZGF0ZV94 YWN0ID0gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9sZHR1cC0+dF9kYXRhKTsKIAkJCWVsc2UKIAkJ CQl1cGRhdGVfeGFjdCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCkBAIC0zNjQxLDkgKzM1MDAs OSBAQCBsMjoKIAkJCSAqIGxvY2suCiAJCQkgKi8KIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19VTkxPQ0spOwotCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24sICYob2xk dHVwLnRfc2VsZiksICpsb2NrbW9kZSwKKwkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9u LCAmb2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSwKIAkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZo YXZlX3R1cGxlX2xvY2spOwotCQkJWGFjdExvY2tUYWJsZVdhaXQoeHdhaXQsIHJlbGF0aW9uLCAm b2xkdHVwLnRfc2VsZiwKKwkJCVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlvbiwgJm9s ZHR1cC0+dF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUpOwogCQkJY2hlY2tlZF9sb2NrZXJz ID0gdHJ1ZTsKIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwpA QCAtMzY1MywyMCArMzUxMiwyMCBAQCBsMjoKIAkJCSAqIG90aGVyIHhhY3QgY291bGQgdXBkYXRl IHRoaXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LgogCQkJICogQ2hlY2sgZm9y IHhtYXggY2hhbmdlLCBhbmQgc3RhcnQgb3ZlciBpZiBzby4KIAkJCSAqLwotCQkJaWYgKHhtYXhf aW5mb21hc2tfY2hhbmdlZChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLCBpbmZvbWFzaykgfHwK KwkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ss IGluZm9tYXNrKSB8fAogCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHh3YWl0LAotCQkJCQkJCQkJ IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSkpKQorCQkJCQkJCQkJIEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpKSkKIAkJCQlnb3RvIGwyOwog CiAJCQkvKiBPdGhlcndpc2UgY2hlY2sgaWYgaXQgY29tbWl0dGVkIG9yIGFib3J0ZWQgKi8KLQkJ CVVwZGF0ZVhtYXhIaW50Qml0cyhvbGR0dXAudF9kYXRhLCBidWZmZXIsIHh3YWl0KTsKLQkJCWlm IChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCisJCQlVcGRh dGVYbWF4SGludEJpdHMob2xkdHVwLT50X2RhdGEsIGJ1ZmZlciwgeHdhaXQpOworCQkJaWYgKG9s ZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCiAJCQkJY2FuX2Nv bnRpbnVlID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChjYW5fY29udGludWUpCiAJCQlyZXN1bHQgPSBU TV9PazsKLQkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxmLCAmb2xk dHVwLnRfZGF0YS0+dF9jdGlkKSkKKwkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0 dXAtPnRfc2VsZiwgJm9sZHR1cC0+dF9kYXRhLT50X2N0aWQpKQogCQkJcmVzdWx0ID0gVE1fVXBk YXRlZDsKIAkJZWxzZQogCQkJcmVzdWx0ID0gVE1fRGVsZXRlZDsKQEAgLTM2NzksMzkgKzM1Mzgs MzMgQEAgbDI6CiAJCQkgICByZXN1bHQgPT0gVE1fVXBkYXRlZCB8fAogCQkJICAgcmVzdWx0ID09 IFRNX0RlbGV0ZWQgfHwKIAkJCSAgIHJlc3VsdCA9PSBUTV9CZWluZ01vZGlmaWVkKTsKLQkJQXNz ZXJ0KCEob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBfWE1BWF9JTlZBTElEKSk7CisJ CUFzc2VydCghKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQp KTsKIAkJQXNzZXJ0KHJlc3VsdCAhPSBUTV9VcGRhdGVkIHx8Ci0JCQkgICAhSXRlbVBvaW50ZXJF cXVhbHMoJm9sZHR1cC50X3NlbGYsICZvbGR0dXAudF9kYXRhLT50X2N0aWQpKTsKKwkJCSAgICFJ dGVtUG9pbnRlckVxdWFscygmb2xkdHVwLT50X3NlbGYsICZvbGR0dXAtPnRfZGF0YS0+dF9jdGlk KSk7CiAJfQogCiAJaWYgKGNyb3NzY2hlY2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJlc3VsdCA9 PSBUTV9PaykKIAl7CiAJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJhbnNhY3Rp b24tc25hcHNob3QgbW9kZSBSSSB1cGRhdGVzICovCi0JCWlmICghSGVhcFR1cGxlU2F0aXNmaWVz VmlzaWJpbGl0eSgmb2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQorCQlpZiAoIUhlYXBUdXBs ZVNhdGlzZmllc1Zpc2liaWxpdHkob2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQogCQkJcmVz dWx0ID0gVE1fVXBkYXRlZDsKIAl9CiAKIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsKLQkJdG1m ZC0+Y3RpZCA9IG9sZHR1cC50X2RhdGEtPnRfY3RpZDsKLQkJdG1mZC0+eG1heCA9IEhlYXBUdXBs ZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsKKwkJdG1mZC0+Y3RpZCA9IG9sZHR1 cC0+dF9kYXRhLT50X2N0aWQ7CisJCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRh dGVYaWQob2xkdHVwLT50X2RhdGEpOwogCQlpZiAocmVzdWx0ID09IFRNX1NlbGZNb2RpZmllZCkK LQkJCXRtZmQtPmNtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1cC50X2RhdGEpOwor CQkJdG1mZC0+Y21heCA9IEhlYXBUdXBsZUhlYWRlckdldENtYXgob2xkdHVwLT50X2RhdGEpOwog CQllbHNlCiAJCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJZDsKIAkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCQlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQkJVW5sb2NrVHVwbGVU dXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYpLCAqbG9ja21vZGUpOwotCQlpZiAodm1i dWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCQkJ VW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSk7 CisJCWlmICgqdm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKKwkJCVJlbGVhc2VCdWZmZXIoKnZt YnVmZmVyKTsKIAkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKIAotCQlibXNfZnJlZShob3Rf YXR0cnMpOwotCQlibXNfZnJlZShzdW1fYXR0cnMpOwotCQlibXNfZnJlZShrZXlfYXR0cnMpOwot CQlibXNfZnJlZShpZF9hdHRycyk7Ci0JCWJtc19mcmVlKG1vZGlmaWVkX2F0dHJzKTsKLQkJYm1z X2ZyZWUoaW50ZXJlc3RpbmdfYXR0cnMpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtMzcy NCwxMCArMzU3NywxMCBAQCBsMjoKIAkgKiB0dXBsZSBoYXMgYmVlbiBsb2NrZWQgb3IgdXBkYXRl ZCB1bmRlciB1cywgYnV0IGhvcGVmdWxseSBpdCB3b24ndAogCSAqIGhhcHBlbiB2ZXJ5IG9mdGVu LgogCSAqLwotCWlmICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2li bGUocGFnZSkpCisJaWYgKCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZp c2libGUocGFnZSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKLQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCQl2 aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssIHZtYnVmZmVyKTsKIAkJTG9ja0J1ZmZl cihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCWdvdG8gbDI7CiAJfQpAQCAtMzcz OCw5ICszNTkxLDkgQEAgbDI6CiAJICogSWYgdGhlIHR1cGxlIHdlJ3JlIHVwZGF0aW5nIGlzIGxv Y2tlZCwgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgbG9ja2luZwogCSAqIGluZm8gaW4gdGhlIG9s ZCB0dXBsZSdzIFhtYXguICBQcmVwYXJlIGEgbmV3IFhtYXggdmFsdWUgZm9yIHRoaXMuCiAJICov Ci0JY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9s ZHR1cC50X2RhdGEpLAotCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKLQkJCQkJ CQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCWNvbXB1dGVfbmV3X3htYXhfaW5mb21h c2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSksCisJCQkJCQkJICBv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2lu Zm9tYXNrMiwKIAkJCQkJCQkgIHhpZCwgKmxvY2ttb2RlLCB0cnVlLAogCQkJCQkJCSAgJnhtYXhf b2xkX3R1cGxlLCAmaW5mb21hc2tfb2xkX3R1cGxlLAogCQkJCQkJCSAgJmluZm9tYXNrMl9vbGRf dHVwbGUpOwpAQCAtMzc1MiwxMiArMzYwNSwxMiBAQCBsMjoKIAkgKiB0dXBsZS4gIChJbiByYXJl IGNhc2VzIHRoYXQgbWlnaHQgYWxzbyBiZSBJbnZhbGlkVHJhbnNhY3Rpb25JZCBhbmQgeWV0CiAJ ICogbm90IGhhdmUgdGhlIEhFQVBfWE1BWF9JTlZBTElEIGJpdCBzZXQ7IHRoYXQncyBmaW5lLikK IAkgKi8KLQlpZiAoKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJ RCkgfHwKLQkJSEVBUF9MT0NLRURfVVBHUkFERUQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaykg fHwKKwlpZiAoKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQp IHx8CisJCUhFQVBfTE9DS0VEX1VQR1JBREVEKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrKSB8 fAogCQkoY2hlY2tlZF9sb2NrZXJzICYmICFsb2NrZXJfcmVtYWlucykpCiAJCXhtYXhfbmV3X3R1 cGxlID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJZWxzZQotCQl4bWF4X25ld190dXBsZSA9IEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSk7CisJCXhtYXhfbmV3X3R1cGxl ID0gSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAtPnRfZGF0YSk7CiAKIAlpZiAoIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbmV3X3R1cGxlKSkKIAl7CkBAIC0zNzcyLDcgKzM2MjUs NyBAQCBsMjoKIAkJICogTm90ZSB0aGF0IHNpbmNlIHdlJ3JlIGRvaW5nIGFuIHVwZGF0ZSwgdGhl IG9ubHkgcG9zc2liaWxpdHkgaXMgdGhhdAogCQkgKiB0aGUgbG9ja2VycyBoYWQgRk9SIEtFWSBT SEFSRSBsb2NrLgogCQkgKi8KLQkJaWYgKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQ X1hNQVhfSVNfTVVMVEkpCisJCWlmIChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhFQVBf WE1BWF9JU19NVUxUSSkKIAkJewogCQkJR2V0TXVsdGlYYWN0SWRIaW50Qml0cyh4bWF4X25ld190 dXBsZSwgJmluZm9tYXNrX25ld190dXBsZSwKIAkJCQkJCQkJICAgJmluZm9tYXNrMl9uZXdfdHVw bGUpOwpAQCAtMzgwMCw3ICszNjUzLDcgQEAgbDI6CiAJICogUmVwbGFjZSBjaWQgd2l0aCBhIGNv bWJvIENJRCBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgYWxyZWFkeSBwdXQKIAkgKiB0aGUg cGxhaW4gY2lkIGludG8gdGhlIG5ldyB0dXBsZS4KIAkgKi8KLQlIZWFwVHVwbGVIZWFkZXJBZGp1 c3RDbWF4KG9sZHR1cC50X2RhdGEsICZjaWQsICZpc2NvbWJvKTsKKwlIZWFwVHVwbGVIZWFkZXJB ZGp1c3RDbWF4KG9sZHR1cC0+dF9kYXRhLCAmY2lkLCAmaXNjb21ibyk7CiAKIAkvKgogCSAqIElm IHRoZSB0b2FzdGVyIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCwgT1IgaWYgdGhlIG5ldyB0dXBsZSB3 aWxsIG5vdCBmaXQKQEAgLTM4MTcsMTIgKzM2NzAsMTIgQEAgbDI6CiAJCXJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9NQVRWSUVXKQogCXsKIAkJLyogdG9hc3QgdGFibGUgZW50 cmllcyBzaG91bGQgbmV2ZXIgYmUgcmVjdXJzaXZlbHkgdG9hc3RlZCAqLwotCQlBc3NlcnQoIUhl YXBUdXBsZUhhc0V4dGVybmFsKCZvbGR0dXApKTsKKwkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRl cm5hbChvbGR0dXApKTsKIAkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRlcm5hbChuZXd0dXApKTsK IAkJbmVlZF90b2FzdCA9IGZhbHNlOwogCX0KIAllbHNlCi0JCW5lZWRfdG9hc3QgPSAoSGVhcFR1 cGxlSGFzRXh0ZXJuYWwoJm9sZHR1cCkgfHwKKwkJbmVlZF90b2FzdCA9IChIZWFwVHVwbGVIYXNF eHRlcm5hbChvbGR0dXApIHx8CiAJCQkJCSAgSGVhcFR1cGxlSGFzRXh0ZXJuYWwobmV3dHVwKSB8 fAogCQkJCQkgIG5ld3R1cC0+dF9sZW4gPiBUT0FTVF9UVVBMRV9USFJFU0hPTEQpOwogCkBAIC0z ODU1LDkgKzM3MDgsOSBAQCBsMjoKIAkJICogdXBkYXRpbmcsIGJlY2F1c2UgdGhlIHBvdGVudGlh bGx5IGNyZWF0ZWQgbXVsdGl4YWN0IHdvdWxkIG90aGVyd2lzZQogCQkgKiBiZSB3cm9uZy4KIAkJ ICovCi0JCWNvbXB1dGVfbmV3X3htYXhfaW5mb21hc2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1h eChvbGR0dXAudF9kYXRhKSwKLQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrLAot CQkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAorCQljb21wdXRlX25ld194bWF4 X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAorCQkJ CQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAorCQkJCQkJCQkgIG9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrMiwKIAkJCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgZmFsc2UsCiAJCQkJ CQkJCSAgJnhtYXhfbG9ja19vbGRfdHVwbGUsICZpbmZvbWFza19sb2NrX29sZF90dXBsZSwKIAkJ CQkJCQkJICAmaW5mb21hc2syX2xvY2tfb2xkX3R1cGxlKTsKQEAgLTM4NjcsMTggKzM3MjAsMTgg QEAgbDI6CiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCiAJCS8qIENsZWFyIG9ic29sZXRlIHZp c2liaWxpdHkgZmxhZ3MgLi4uICovCi0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihI RUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOwotCQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr MiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7Ci0JCUhlYXBUdXBsZUNsZWFySG90VXBkYXRlZCgmb2xk dHVwKTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJj0gfihIRUFQX1hNQVhfQklUUyB8 IEhFQVBfTU9WRUQpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZ U19VUERBVEVEOworCQlIZWFwVHVwbGVDbGVhckhvdFVwZGF0ZWQob2xkdHVwKTsKIAkJLyogLi4u IGFuZCBzdG9yZSBpbmZvIGFib3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVwbGUgKi8K IAkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfbG9ja19vbGRfdHVwbGUpKTsKLQkJ SGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAudF9kYXRhLCB4bWF4X2xvY2tfb2xkX3R1cGxl KTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19sb2NrX29sZF90dXBs ZTsKLQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX2xvY2tfb2xkX3R1 cGxlOwotCQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC50X2RhdGEsIGNpZCwgaXNjb21i byk7CisJCUhlYXBUdXBsZUhlYWRlclNldFhtYXgob2xkdHVwLT50X2RhdGEsIHhtYXhfbG9ja19v bGRfdHVwbGUpOworCQlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19sb2Nr X29sZF90dXBsZTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9s b2NrX29sZF90dXBsZTsKKwkJSGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAtPnRfZGF0YSwg Y2lkLCBpc2NvbWJvKTsKIAogCQkvKiB0ZW1wb3JhcmlseSBtYWtlIGl0IGxvb2sgbm90LXVwZGF0 ZWQsIGJ1dCBsb2NrZWQgKi8KLQkJb2xkdHVwLnRfZGF0YS0+dF9jdGlkID0gb2xkdHVwLnRfc2Vs ZjsKKwkJb2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IG9sZHR1cC0+dF9zZWxmOwogCiAJCS8qCiAJ CSAqIENsZWFyIGFsbC1mcm96ZW4gYml0IG9uIHZpc2liaWxpdHkgbWFwIGlmIG5lZWRlZC4gV2Ug Y291bGQKQEAgLTM4ODcsNyArMzc0MCw3IEBAIGwyOgogCQkgKiB3b3J0aHdoaWxlLgogCQkgKi8K IAkJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKLQkJCXZpc2liaWxpdHltYXBfY2xlYXIo cmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlciwKKwkJCXZpc2liaWxpdHltYXBfY2xlYXIocmVsYXRp b24sIGJsb2NrLCAqdm1idWZmZXIsCiAJCQkJCQkJCVZJU0lCSUxJVFlNQVBfQUxMX0ZST1pFTikp CiAJCQljbGVhcmVkX2FsbF9mcm96ZW4gPSB0cnVlOwogCkBAIC0zOTAxLDEwICszNzU0LDEwIEBA IGwyOgogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVm ZmVyLCBSRUdCVUZfU1RBTkRBUkQpOwogCi0JCQl4bHJlYy5vZmZudW0gPSBJdGVtUG9pbnRlckdl dE9mZnNldE51bWJlcigmb2xkdHVwLnRfc2VsZik7CisJCQl4bHJlYy5vZmZudW0gPSBJdGVtUG9p bnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLT50X3NlbGYpOwogCQkJeGxyZWMueG1heCA9IHht YXhfbG9ja19vbGRfdHVwbGU7Ci0JCQl4bHJlYy5pbmZvYml0c19zZXQgPSBjb21wdXRlX2luZm9i aXRzKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJCQkJCQkgIG9sZHR1cC50X2Rh dGEtPnRfaW5mb21hc2syKTsKKwkJCXhscmVjLmluZm9iaXRzX3NldCA9IGNvbXB1dGVfaW5mb2Jp dHMob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ssCisJCQkJCQkJCQkJCQkgIG9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrMik7CiAJCQl4bHJlYy5mbGFncyA9CiAJCQkJY2xlYXJlZF9hbGxfZnJv emVuID8gWExIX0xPQ0tfQUxMX0ZST1pFTl9DTEVBUkVEIDogMDsKIAkJCVhMb2dSZWdpc3RlckRh dGEoJnhscmVjLCBTaXplT2ZIZWFwTG9jayk7CkBAIC0zOTI2LDcgKzM3NzksNyBAQCBsMjoKIAkJ aWYgKG5lZWRfdG9hc3QpCiAJCXsKIAkJCS8qIE5vdGUgd2UgYWx3YXlzIHVzZSBXQUwgYW5kIEZT TSBkdXJpbmcgdXBkYXRlcyAqLwotCQkJaGVhcHR1cCA9IGhlYXBfdG9hc3RfaW5zZXJ0X29yX3Vw ZGF0ZShyZWxhdGlvbiwgbmV3dHVwLCAmb2xkdHVwLCAwKTsKKwkJCWhlYXB0dXAgPSBoZWFwX3Rv YXN0X2luc2VydF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgb2xkdHVwLCAwKTsKIAkJCW5l d3R1cHNpemUgPSBNQVhBTElHTihoZWFwdHVwLT50X2xlbik7CiAJCX0KIAkJZWxzZQpAQCAtMzk2 MiwyMCArMzgxNSwyMCBAQCBsMjoKIAkJCQkvKiBJdCBkb2Vzbid0IGZpdCwgbXVzdCB1c2UgUmVs YXRpb25HZXRCdWZmZXJGb3JUdXBsZS4gKi8KIAkJCQluZXdidWYgPSBSZWxhdGlvbkdldEJ1ZmZl ckZvclR1cGxlKHJlbGF0aW9uLCBoZWFwdHVwLT50X2xlbiwKIAkJCQkJCQkJCQkJCSAgIGJ1ZmZl ciwgMCwgTlVMTCwKLQkJCQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsICZ2bWJ1ZmZlciwKKwkJ CQkJCQkJCQkJCSAgICZ2bWJ1ZmZlcl9uZXcsIHZtYnVmZmVyLAogCQkJCQkJCQkJCQkJICAgMCk7 CiAJCQkJLyogV2UncmUgYWxsIGRvbmUuICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBBY3F1 aXJlIFZNIHBhZ2UgcGluIGlmIG5lZWRlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBpdC4gKi8KLQkJCWlm ICh2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCi0J CQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZmZXIpOworCQkJaWYg KCp2bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCisJ CQkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCB2bWJ1ZmZlcik7CiAJCQkvKiBS ZS1hY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSBvbGQgdHVwbGUncyBwYWdlLiAqLwogCQkJTG9ja0J1 ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCQkvKiBSZS1jaGVjayB1c2lu ZyB0aGUgdXAtdG8tZGF0ZSBmcmVlIHNwYWNlICovCiAJCQlwYWdlZnJlZSA9IFBhZ2VHZXRIZWFw RnJlZVNwYWNlKHBhZ2UpOwogCQkJaWYgKG5ld3R1cHNpemUgPiBwYWdlZnJlZSB8fAotCQkJCSh2 bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyICYmIFBhZ2VJc0FsbFZpc2libGUocGFnZSkpKQorCQkJ CSgqdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlciAmJiBQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKSkK IAkJCXsKIAkJCQkvKgogCQkJCSAqIFJhdHMsIGl0IGRvZXNuJ3QgZml0IGFueW1vcmUsIG9yIHNv bWVib2R5IGp1c3Qgbm93IHNldCB0aGUKQEAgLTQwMTMsNyArMzg2Niw3IEBAIGwyOgogCSAqIHdp bGwgaW5jbHVkZSBjaGVja2luZyB0aGUgcmVsYXRpb24gbGV2ZWwsIHRoZXJlIGlzIG5vIGJlbmVm aXQgdG8gYQogCSAqIHNlcGFyYXRlIGNoZWNrIGZvciB0aGUgbmV3IHR1cGxlLgogCSAqLwotCUNo ZWNrRm9yU2VyaWFsaXphYmxlQ29uZmxpY3RJbihyZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsCisJ Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdEluKHJlbGF0aW9uLCAmb2xkdHVwLT50X3NlbGYs CiAJCQkJCQkJCSAgIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcikpOwogCiAJLyoKQEAgLTQw MjEsNyArMzg3NCw2IEBAIGwyOgogCSAqIGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXcgdHVw bGUuICBJZiB0aGV5IGFyZSB0aGUgc2FtZSBidWZmZXIsIG9ubHkKIAkgKiBvbmUgcGluIGlzIGhl bGQuCiAJICovCi0KIAlpZiAobmV3YnVmID09IGJ1ZmZlcikKIAl7CiAJCS8qCkBAIC00MDI5LDcg KzM4ODEsNyBAQCBsMjoKIAkJICogdG8gZG8gYSBIT1QgdXBkYXRlLiAgQ2hlY2sgaWYgYW55IG9m IHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgogCQkgKiBjaGFuZ2VkLgogCQkgKi8KLQkJaWYg KCFibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaG90X2F0dHJzKSkKKwkJaWYgKCFibXNfb3Zl cmxhcChtaXhfYXR0cnMsIGhvdF9hdHRycykpCiAJCXsKIAkJCXVzZV9ob3RfdXBkYXRlID0gdHJ1 ZTsKIApAQCAtNDA0MCw3ICszODkyLDcgQEAgbDI6CiAJCQkgKiBpbmRleGVzIGlmIHRoZSBjb2x1 bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0CiAJCQkgKiBlLmcuIHZh bHVlIGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KIAkJCSAqLwotCQkJaWYg KGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQorCQkJaWYgKGJtc19vdmVy bGFwKG1peF9hdHRycywgc3VtX2F0dHJzKSkKIAkJCQlzdW1tYXJpemVkX3VwZGF0ZSA9IHRydWU7 CiAJCX0KIAl9CkBAIC00MDU3LDEwICszOTA5LDggQEAgbDI6CiAJICogbG9nZ2VkLiAgUGFzcyBv bGQga2V5IHJlcXVpcmVkIGFzIHRydWUgb25seSBpZiB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXkK IAkgKiBjb2x1bW5zIGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJuYWwgZGF0YS4KIAkgKi8K LQlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0eShyZWxhdGlvbiwgJm9sZHR1 cCwKLQkJCQkJCQkJCQkgICBibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaWRfYXR0cnMpIHx8 Ci0JCQkJCQkJCQkJICAgaWRfaGFzX2V4dGVybmFsLAotCQkJCQkJCQkJCSAgICZvbGRfa2V5X2Nv cGllZCk7CisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVsYXRpb24s IG9sZHR1cCwgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWlyZWQsICZv bGRfa2V5X2NvcGllZCk7CiAKIAkvKiBOTyBFUkVQT1JUKEVSUk9SKSBmcm9tIGhlcmUgdGlsbCBj aGFuZ2VzIGFyZSBsb2dnZWQgKi8KIAlTVEFSVF9DUklUX1NFQ1RJT04oKTsKQEAgLTQwODIsNyAr MzkzMiw3IEBAIGwyOgogCWlmICh1c2VfaG90X3VwZGF0ZSkKIAl7CiAJCS8qIE1hcmsgdGhlIG9s ZCB0dXBsZSBhcyBIT1QtdXBkYXRlZCAqLwotCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKCZvbGR0 dXApOworCQlIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKG9sZHR1cCk7CiAJCS8qIEFuZCBtYXJrIHRo ZSBuZXcgdHVwbGUgYXMgaGVhcC1vbmx5ICovCiAJCUhlYXBUdXBsZVNldEhlYXBPbmx5KGhlYXB0 dXApOwogCQkvKiBNYXJrIHRoZSBjYWxsZXIncyBjb3B5IHRvbywgaW4gY2FzZSBkaWZmZXJlbnQg ZnJvbSBoZWFwdHVwICovCkBAIC00MDkxLDcgKzM5NDEsNyBAQCBsMjoKIAllbHNlCiAJewogCQkv KiBNYWtlIHN1cmUgdHVwbGVzIGFyZSBjb3JyZWN0bHkgbWFya2VkIGFzIG5vdC1IT1QgKi8KLQkJ SGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVkKCZvbGR0dXApOworCQlIZWFwVHVwbGVDbGVhckhvdFVw ZGF0ZWQob2xkdHVwKTsKIAkJSGVhcFR1cGxlQ2xlYXJIZWFwT25seShoZWFwdHVwKTsKIAkJSGVh cFR1cGxlQ2xlYXJIZWFwT25seShuZXd0dXApOwogCX0KQEAgLTQxMDAsMTcgKzM5NTAsMTcgQEAg bDI6CiAKIAogCS8qIENsZWFyIG9ic29sZXRlIHZpc2liaWxpdHkgZmxhZ3MsIHBvc3NpYmx5IHNl dCBieSBvdXJzZWx2ZXMgYWJvdmUuLi4gKi8KLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICY9 IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9t YXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sg Jj0gfihIRUFQX1hNQVhfQklUUyB8IEhFQVBfTU9WRUQpOworCW9sZHR1cC0+dF9kYXRhLT50X2lu Zm9tYXNrMiAmPSB+SEVBUF9LRVlTX1VQREFURUQ7CiAJLyogLi4uIGFuZCBzdG9yZSBpbmZvIGFi b3V0IHRyYW5zYWN0aW9uIHVwZGF0aW5nIHRoaXMgdHVwbGUgKi8KIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeG1heF9vbGRfdHVwbGUpKTsKLQlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9s ZHR1cC50X2RhdGEsIHhtYXhfb2xkX3R1cGxlKTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNr IHw9IGluZm9tYXNrX29sZF90dXBsZTsKLQlvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiB8PSBp bmZvbWFzazJfb2xkX3R1cGxlOwotCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLnRfZGF0 YSwgY2lkLCBpc2NvbWJvKTsKKwlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC0+dF9kYXRh LCB4bWF4X29sZF90dXBsZSk7CisJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5mb21h c2tfb2xkX3R1cGxlOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiB8PSBpbmZvbWFzazJf b2xkX3R1cGxlOworCUhlYXBUdXBsZUhlYWRlclNldENtYXgob2xkdHVwLT50X2RhdGEsIGNpZCwg aXNjb21ibyk7CiAKIAkvKiByZWNvcmQgYWRkcmVzcyBvZiBuZXcgdHVwbGUgaW4gdF9jdGlkIG9m IG9sZCBvbmUgKi8KLQlvbGR0dXAudF9kYXRhLT50X2N0aWQgPSBoZWFwdHVwLT50X3NlbGY7CisJ b2xkdHVwLT50X2RhdGEtPnRfY3RpZCA9IGhlYXB0dXAtPnRfc2VsZjsKIAogCS8qIGNsZWFyIFBE X0FMTF9WSVNJQkxFIGZsYWdzLCByZXNldCBhbGwgdmlzaWJpbGl0eW1hcCBiaXRzICovCiAJaWYg KFBhZ2VJc0FsbFZpc2libGUoQnVmZmVyR2V0UGFnZShidWZmZXIpKSkKQEAgLTQxMTgsNyArMzk2 OCw3IEBAIGwyOgogCQlhbGxfdmlzaWJsZV9jbGVhcmVkID0gdHJ1ZTsKIAkJUGFnZUNsZWFyQWxs VmlzaWJsZShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpOwogCQl2aXNpYmlsaXR5bWFwX2NsZWFyKHJl bGF0aW9uLCBCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXIpLAotCQkJCQkJCXZtYnVmZmVyLCBW SVNJQklMSVRZTUFQX1ZBTElEX0JJVFMpOworCQkJCQkJCSp2bWJ1ZmZlciwgVklTSUJJTElUWU1B UF9WQUxJRF9CSVRTKTsKIAl9CiAJaWYgKG5ld2J1ZiAhPSBidWZmZXIgJiYgUGFnZUlzQWxsVmlz aWJsZShCdWZmZXJHZXRQYWdlKG5ld2J1ZikpKQogCXsKQEAgLTQxNDMsMTIgKzM5OTMsMTIgQEAg bDI6CiAJCSAqLwogCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhy ZWxhdGlvbikpCiAJCXsKLQkJCWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sICZvbGR0dXApOwor CQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgb2xkdHVwKTsKIAkJCWxvZ19oZWFwX25ld19j aWQocmVsYXRpb24sIGhlYXB0dXApOwogCQl9CiAKIAkJcmVjcHRyID0gbG9nX2hlYXBfdXBkYXRl KHJlbGF0aW9uLCBidWZmZXIsCi0JCQkJCQkJCSBuZXdidWYsICZvbGR0dXAsIGhlYXB0dXAsCisJ CQkJCQkJCSBuZXdidWYsIG9sZHR1cCwgaGVhcHR1cCwKIAkJCQkJCQkJIG9sZF9rZXlfdHVwbGUs CiAJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkLAogCQkJCQkJCQkgYWxsX3Zpc2libGVfY2xl YXJlZF9uZXcpOwpAQCAtNDE3Myw3ICs0MDIzLDcgQEAgbDI6CiAJICogYm90aCB0dXBsZSB2ZXJz aW9ucyBpbiBvbmUgY2FsbCB0byBpbnZhbC5jIHNvIHdlIGNhbiBhdm9pZCByZWR1bmRhbnQKIAkg KiBzaW52YWwgbWVzc2FnZXMuKQogCSAqLwotCUNhY2hlSW52YWxpZGF0ZUhlYXBUdXBsZShyZWxh dGlvbiwgJm9sZHR1cCwgaGVhcHR1cCk7CisJQ2FjaGVJbnZhbGlkYXRlSGVhcFR1cGxlKHJlbGF0 aW9uLCBvbGR0dXAsIGhlYXB0dXApOwogCiAJLyogTm93IHdlIGNhbiByZWxlYXNlIHRoZSBidWZm ZXIocykgKi8KIAlpZiAobmV3YnVmICE9IGJ1ZmZlcikKQEAgLTQxODEsMTQgKzQwMzEsMTQgQEAg bDI6CiAJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCWlmIChCdWZmZXJJc1ZhbGlkKHZtYnVmZmVy X25ldykpCiAJCVJlbGVhc2VCdWZmZXIodm1idWZmZXJfbmV3KTsKLQlpZiAoQnVmZmVySXNWYWxp ZCh2bWJ1ZmZlcikpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOworCWlmIChCdWZmZXJJc1Zh bGlkKCp2bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoKnZtYnVmZmVyKTsKIAogCS8qCiAJICog UmVsZWFzZSB0aGUgbG1nciB0dXBsZSBsb2NrLCBpZiB3ZSBoYWQgaXQuCiAJICovCiAJaWYgKGhh dmVfdHVwbGVfbG9jaykKLQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50 X3NlbGYpLCAqbG9ja21vZGUpOworCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICZvbGR0 dXAtPnRfc2VsZiwgKmxvY2ttb2RlKTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX3VwZGF0ZShyZWxh dGlvbiwgdXNlX2hvdF91cGRhdGUsIG5ld2J1ZiAhPSBidWZmZXIpOwogCkBAIC00MjIxLDEzICs0 MDcxLDYgQEAgbDI6CiAJaWYgKG9sZF9rZXlfdHVwbGUgIT0gTlVMTCAmJiBvbGRfa2V5X2NvcGll ZCkKIAkJaGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7CiAKLQlibXNfZnJlZShob3RfYXR0 cnMpOwotCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQlibXNf ZnJlZShpZF9hdHRycyk7Ci0JYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMpOwotCWJtc19mcmVlKGlu dGVyZXN0aW5nX2F0dHJzKTsKLQogCXJldHVybiBUTV9PazsKIH0KIApAQCAtNDIzNiw3ICs0MDc5 LDcgQEAgbDI6CiAgKiBDb25maXJtIGFkZXF1YXRlIGxvY2sgaGVsZCBkdXJpbmcgaGVhcF91cGRh dGUoKSwgcGVyIHJ1bGVzIGZyb20KICAqIFJFQURNRS50dXBsb2NrIHNlY3Rpb24gIkxvY2tpbmcg dG8gd3JpdGUgaW5wbGFjZS11cGRhdGVkIHRhYmxlcyIuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVsYXRpb24s CiAJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAogCQkJCQkJCQkJIEhlYXBU dXBsZSBuZXd0dXApCkBAIC00NDA4LDcgKzQyNTEsNyBAQCBoZWFwX2F0dHJfZXF1YWxzKFR1cGxl RGVzYyB0dXBkZXNjLCBpbnQgYXR0cm51bSwgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIsCiAg KiBsaXN0ZWQgYXMgaW50ZXJlc3RpbmcpIG9mIHRoZSBvbGQgdHVwbGUgaXMgYSBtZW1iZXIgb2Yg ZXh0ZXJuYWxfY29scyBhbmQgaXMKICAqIHN0b3JlZCBleHRlcm5hbGx5LgogICovCi1zdGF0aWMg Qml0bWFwc2V0ICoKK0JpdG1hcHNldCAqCiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRp b24gcmVsYXRpb24sCiAJCQkJCQkgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAogCQkJCQkJ IEJpdG1hcHNldCAqZXh0ZXJuYWxfY29scywKQEAgLTQ0OTEsMjUgKzQzMzQsMTc1IEBAIEhlYXBE ZXRlcm1pbmVDb2x1bW5zSW5mbyhSZWxhdGlvbiByZWxhdGlvbiwKIH0KIAogLyoKLSAqCXNpbXBs ZV9oZWFwX3VwZGF0ZSAtIHJlcGxhY2UgYSB0dXBsZQotICoKLSAqIFRoaXMgcm91dGluZSBtYXkg YmUgdXNlZCB0byB1cGRhdGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZgotICog dGhlIHRhcmdldCB0dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSB3 ZSBoYXZlIGEgbG9jawotICogb24gdGhlIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHVw bGUpLiAgQW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQKLSAqIHZpYSBlcmVwb3J0KCkuCisgKiBUaGlz IHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gdXBkYXRlIGEgdHVwbGUgd2hlbiBjb25jdXJyZW50IHVw ZGF0ZXMgb2YgdGhlCisgKiB0YXJnZXQgdHVwbGUgYXJlIG5vdCBleHBlY3RlZCAoZm9yIGV4YW1w bGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGxvY2sgb24gdGhlCisgKiByZWxhdGlvbiBhc3NvY2lhdGVk IHdpdGggdGhlIHR1cGxlKS4gIEFueSBmYWlsdXJlIGlzIHJlcG9ydGVkIHZpYSBlcmVwb3J0KCku CiAgKi8KIHZvaWQKLXNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwLAorc2ltcGxlX2hlYXBfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBs ZSB0dXBsZSwKIAkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlU TV9SZXN1bHQJcmVzdWx0OwogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJTG9ja1R1cGxlTW9kZSBs b2NrbW9kZTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1 ZmZlcjsKKwlQYWdlCQlwYWdlOworCUJsb2NrTnVtYmVyIGJsb2NrOworCUJpdG1hcHNldCAgKmhv dF9hdHRycywKKwkJCSAgICpzdW1fYXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkgICAqcmlk X2F0dHJzLAorCQkJICAgKm1peF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CisJSXRlbUlkCQls cDsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0g ZmFsc2U7CisKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8qIENoZWFw LCBzaW1wbGlzdGljIGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5 cGUuICovCisJQXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpIDw9 CisJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisKKwkvKgor CSAqIEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxv Y2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBjb21i byBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHByb3Zpc2lv biBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJaWYgKElzSW5QYXJhbGxlbE1v ZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVFJB TlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdHVwbGVzIGR1cmlu ZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVfcmVsKHJlbGF0aW9uLCBvdGlkLCB0 dXBsZSk7CisjZW5kaWYKKworCS8qCisJICogRmV0Y2ggdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyB0 byBiZSBjaGVja2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMuCisJICoKKwkgKiBGb3IgSE9UIGNv bnNpZGVyYXRpb25zLCB0aGlzIGlzIHdhc3RlZCBlZmZvcnQgaWYgd2UgZmFpbCB0byB1cGRhdGUg b3IKKwkgKiBoYXZlIHRvIHB1dCB0aGUgbmV3IHR1cGxlIG9uIGEgZGlmZmVyZW50IHBhZ2UuICBC dXQgd2UgbXVzdCBjb21wdXRlIHRoZQorCSAqIGxpc3QgYmVmb3JlIG9idGFpbmluZyBidWZmZXIg bG9jayAtLS0gaW4gdGhlIHdvcnN0IGNhc2UsIGlmIHdlIGFyZQorCSAqIGRvaW5nIGFuIHVwZGF0 ZSBvbiBvbmUgb2YgdGhlIHJlbGV2YW50IHN5c3RlbSBjYXRhbG9ncywgd2UgY291bGQKKwkgKiBk ZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGxpc3QgbGF0ZXIuICBJbiBhbnkgY2FzZSwg dGhlIHJlbGNhY2hlCisJICogY2FjaGVzIHRoZSBkYXRhIHNvIHRoaXMgaXMgdXN1YWxseSBwcmV0 dHkgY2hlYXAuCisJICoKKwkgKiBXZSBhbHNvIG5lZWQgY29sdW1ucyB1c2VkIGJ5IHRoZSByZXBs aWNhIGlkZW50aXR5IGFuZCBjb2x1bW5zIHRoYXQgYXJlCisJICogY29uc2lkZXJlZCB0aGUgImtl eSIgb2Ygcm93cyBpbiB0aGUgdGFibGUuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgZ2V0IGNvcGll cyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQKKwkgKiByZWxjYWNo ZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2guCisJICovCisJaG90X2F0dHJzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJCQkJCQkJICAgSU5ERVhfQVRU Ul9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKKwlzdW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJ WkVEKTsKKwlwa19hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJ TkRFWF9BVFRSX0JJVE1BUF9LRVkpOworCXJpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRy Qml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZ X0tFWSk7CisKKwlpZHhfYXR0cnMgPSBibXNfY29weShob3RfYXR0cnMpOworCWlkeF9hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhpZHhfYXR0cnMsIHN1bV9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1z X2FkZF9tZW1iZXJzKGlkeF9hdHRycywgcGtfYXR0cnMpOworCWlkeF9hdHRycyA9IGJtc19hZGRf bWVtYmVycyhpZHhfYXR0cnMsIHJpZF9hdHRycyk7CisKKwlibG9jayA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIob3RpZCk7CisJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3VwZGF0ZS1iZWZvcmUt cGluIiwgTlVMTCk7CisJYnVmZmVyID0gUmVhZEJ1ZmZlcihyZWxhdGlvbiwgYmxvY2spOworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisKKwkvKgorCSAqIEJlZm9yZSBsb2NraW5nIHRo ZSBidWZmZXIsIHBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBpZiBpdCBhcHBlYXJzIHRvCisJ ICogYmUgbmVjZXNzYXJ5LiAgU2luY2Ugd2UgaGF2ZW4ndCBnb3QgdGhlIGxvY2sgeWV0LCBzb21l b25lIGVsc2UgbWlnaHQgYmUKKwkgKiBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRoaXMsIHNv IHdlJ2xsIG5lZWQgdG8gcmVjaGVjayBhZnRlciB3ZSBoYXZlCisJICogdGhlIGxvY2suCisJICov CisJaWYgKFBhZ2VJc0FsbFZpc2libGUocGFnZSkpCisJCXZpc2liaWxpdHltYXBfcGluKHJlbGF0 aW9uLCBibG9jaywgJnZtYnVmZmVyKTsKKworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOworCisJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIEl0ZW1Qb2ludGVyR2V0 T2Zmc2V0TnVtYmVyKG90aWQpKTsKKworCS8qCisJICogVXN1YWxseSwgYSBidWZmZXIgcGluIGFu ZC9vciBzbmFwc2hvdCBibG9ja3MgcHJ1bmluZyBvZiBvdGlkLCBlbnN1cmluZworCSAqIHdlIHNl ZSBMUF9OT1JNQUwgaGVyZS4gIFdoZW4gdGhlIG90aWQgb3JpZ2luIGlzIGEgc3lzY2FjaGUsIHdl IG1heSBoYXZlCisJICogbmVpdGhlciBhIHBpbiBub3IgYSBzbmFwc2hvdC4gIEhlbmNlLCB3ZSBt YXkgc2VlIG90aGVyIExQXyBzdGF0ZXMsIGVhY2gKKwkgKiBvZiB3aGljaCBpbmRpY2F0ZXMgY29u Y3VycmVudCBwcnVuaW5nLgorCSAqCisJICogRmFpbGluZyB3aXRoIFRNX1VwZGF0ZWQgd291bGQg YmUgbW9zdCBhY2N1cmF0ZS4gIEhvd2V2ZXIsIHVubGlrZSBvdGhlcgorCSAqIFRNX1VwZGF0ZWQg c2NlbmFyaW9zLCB3ZSBkb24ndCBrbm93IHRoZSBzdWNjZXNzb3IgY3RpZCBpbiBMUF9VTlVTRUQg YW5kCisJICogTFBfREVBRCBjYXNlcy4gIFdoaWxlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFRN X1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQKKwkgKiBkb2VzIG1hdHRlciB0byBTUUwgc3RhdGVtZW50 cyBVUERBVEUgYW5kIE1FUkdFLCB0aG9zZSBTUUwgc3RhdGVtZW50cworCSAqIGhvbGQgYSBzbmFw c2hvdCB0aGF0IGVuc3VyZXMgTFBfTk9STUFMLiAgSGVuY2UsIHRoZSBjaG9pY2UgYmV0d2Vlbgor CSAqIFRNX1VwZGF0ZWQgYW5kIFRNX0RlbGV0ZWQgYWZmZWN0cyBvbmx5IHRoZSB3b3JkaW5nIG9m IGVycm9yIG1lc3NhZ2VzLgorCSAqIFNldHRsZSBvbiBUTV9EZWxldGVkLCBmb3IgdHdvIHJlYXNv bnMuICBGaXJzdCwgaXQgYXZvaWRzIGNvbXBsaWNhdGluZworCSAqIHRoZSBzcGVjaWZpY2F0aW9u IG9mIHdoZW4gdG1mZC0+Y3RpZCBpcyB2YWxpZC4gIFNlY29uZCwgaXQgY3JlYXRlcworCSAqIGVy cm9yIGxvZyBldmlkZW5jZSB0aGF0IHdlIHRvb2sgdGhpcyBicmFuY2guCisJICoKKwkgKiBTaW5j ZSBpdCdzIHBvc3NpYmxlIHRvIHNlZSBMUF9VTlVTRUQgYXQgb3RpZCwgaXQncyBhbHNvIHBvc3Np YmxlIHRvIHNlZQorCSAqIExQX05PUk1BTCBmb3IgYSB0dXBsZSB0aGF0IHJlcGxhY2VkIExQX1VO VVNFRC4gIElmIGl0J3MgYSB0dXBsZSBmb3IgYW4KKwkgKiB1bnJlbGF0ZWQgcm93LCB3ZSdsbCBm YWlsIHdpdGggImR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIi4KKwkgKiBYWFgg aWYgb3RpZCBpcyB0aGUgbGl2ZSwgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbmV3dHVwIHJvdywgd2Un bGwgZGlzY2FyZAorCSAqIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW4gdmVyc2lvbnMgb2YgdGhpcyBj YXRhbG9nIHJvdyBhZnRlciB0aGUgdmVyc2lvbgorCSAqIHRoZSBjYWxsZXIgZ290IGZyb20gc3lz Y2FjaGUuICBTZWUgc3lzY2FjaGUtdXBkYXRlLXBydW5lZC5zcGVjLgorCSAqLworCWlmICghSXRl bUlkSXNOb3JtYWwobHApKQorCXsKKwkJQXNzZXJ0KFJlbGF0aW9uU3VwcG9ydHNTeXNDYWNoZShS ZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKKwkJaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCisJCQlSZWxlYXNlQnVmZmVy KHZtYnVmZmVyKTsKKwkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKKworCQlibXNfZnJlZSho b3RfYXR0cnMpOworCQlibXNfZnJlZShzdW1fYXR0cnMpOworCQlibXNfZnJlZShwa19hdHRycyk7 CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGlkeF9hdHRycyk7CisJCS8qIG1p eF9hdHRycyBub3QgeWV0IGluaXRpYWxpemVkICovCisKKwkJZWxvZyhFUlJPUiwgInR1cGxlIGNv bmN1cnJlbnRseSBkZWxldGVkIik7CisKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUGFydGlh bGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8g d29yayBhbmQKKwkgKiB0aGVuIHBhc3MgdGhhdCBvbiB0byBoZWFwX3VwZGF0ZS4KKwkgKi8KKwlv bGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCW9sZHR1cC50 X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJb2xkdHVw LnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKKwlvbGR0dXAudF9zZWxmID0gKm90aWQ7CisK KwltaXhfYXR0cnMgPSBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGlkeF9hdHRy cywgcmlkX2F0dHJzLAorCQkJCQkJCQkJCSAmb2xkdHVwLCB0dXBsZSwgJnJlcF9pZF9rZXlfcmVx dWlyZWQpOworCisJLyoKKwkgKiBXZSdsbCBuZWVkIHRvIFdBTCBsb2cgdGhlIHJlcGxpY2EgaWRl bnRpdHkgYXR0cmlidXRlcyBpZiBlaXRoZXIgdGhleQorCSAqIG92ZXJsYXAgd2l0aCB0aGUgbW9k aWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIG9yLCBhcyB3ZSd2ZSBjaGVja2VkIGZvcgorCSAqIGp1 c3Qgbm93IGluIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbywgdGhleSB3ZXJlIHVubW9kaWZpZWQg ZXh0ZXJuYWwKKwkgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisJICovCisJcmVwX2lkX2tleV9yZXF1 aXJlZCA9IHJlcF9pZF9rZXlfcmVxdWlyZWQgfHwgYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRf YXR0cnMpOworCisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZvbGR0dXAsIHR1cGxl LCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJIEludmFsaWRTbmFwc2hvdCwgdHJ1 ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLCAmdG1mZCwgJmxvY2ttb2RlLAorCQkJCQkJIGJ1ZmZl ciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywgcGtfYXR0cnMsCisJCQkJ CQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9yZXF1aXJlZCwK KwkJCQkJCSB1cGRhdGVfaW5kZXhlcyk7CisKKwlibXNfZnJlZShob3RfYXR0cnMpOworCWJtc19m cmVlKHN1bV9hdHRycyk7CisJYm1zX2ZyZWUocGtfYXR0cnMpOworCWJtc19mcmVlKHJpZF9hdHRy cyk7CisJYm1zX2ZyZWUobWl4X2F0dHJzKTsKKwlibXNfZnJlZShpZHhfYXR0cnMpOwogCi0JcmVz dWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwKLQkJCQkJCSBHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkgdHJ1ZSAvKiB3YWl0IGZv ciBjb21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsK IAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgpAQCAtOTE0OSwx MiArOTE0MiwxMSBAQCBsb2dfaGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVw bGUgdHVwKQogICogdGhlIHNhbWUgdHVwbGUgdGhhdCB3YXMgcGFzc2VkIGluLgogICovCiBzdGF0 aWMgSGVhcFR1cGxlCi1FeHRyYWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBI ZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVpcmVkLAotCQkJCQkgICBib29sICpjb3B5KQorRXh0 cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHRwLCBCaXRt YXBzZXQgKnJpZF9hdHRycywKKwkJCQkJICAgYm9vbCBrZXlfcmVxdWlyZWQsIGJvb2wgKmNvcHkp CiB7CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAljaGFy CQlyZXBsaWRlbnQgPSByZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXBsaWRlbnQ7Ci0JQml0bWFwc2V0 ICAqaWRhdHRyczsKIAlIZWFwVHVwbGUJa2V5X3R1cGxlOwogCWJvb2wJCW51bGxzW01heEhlYXBB dHRyaWJ1dGVOdW1iZXJdOwogCURhdHVtCQl2YWx1ZXNbTWF4SGVhcEF0dHJpYnV0ZU51bWJlcl07 CkBAIC05MTg1LDE3ICs5MTc3LDEzIEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJaWYgKCFrZXlfcmVx dWlyZWQpCiAJCXJldHVybiBOVUxMOwogCi0JLyogZmluZCBvdXQgdGhlIHJlcGxpY2EgaWRlbnRp dHkgY29sdW1ucyAqLwotCWlkYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxh dGlvbiwKLQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKLQogCS8q CiAJICogSWYgdGhlcmUncyBubyBkZWZpbmVkIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucywgdHJl YXQgYXMgIWtleV9yZXF1aXJlZC4KIAkgKiAoVGhpcyBjYXNlIHNob3VsZCBub3QgYmUgcmVhY2hh YmxlIGZyb20gaGVhcF91cGRhdGUsIHNpbmNlIHRoYXQgc2hvdWxkCiAJICogY2FsY3VsYXRlIGtl eV9yZXF1aXJlZCBhY2N1cmF0ZWx5LiAgQnV0IGhlYXBfZGVsZXRlIGp1c3QgcGFzc2VzCiAJICog Y29uc3RhbnQgdHJ1ZSBmb3Iga2V5X3JlcXVpcmVkLCBzbyB3ZSBjYW4gaGl0IHRoaXMgY2FzZSBp biBkZWxldGVzLikKIAkgKi8KLQlpZiAoYm1zX2lzX2VtcHR5KGlkYXR0cnMpKQorCWlmIChibXNf aXNfZW1wdHkocmlkX2F0dHJzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtOTIwOCw3ICs5 MTk2LDcgQEAgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAlmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5h dHRzOyBpKyspCiAJewogCQlpZiAoYm1zX2lzX21lbWJlcihpICsgMSAtIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGlkYXR0cnMpKQorCQkJCQkJICByaWRfYXR0 cnMpKQogCQkJQXNzZXJ0KCFudWxsc1tpXSk7CiAJCWVsc2UKIAkJCW51bGxzW2ldID0gdHJ1ZTsK QEAgLTkyMTcsOCArOTIwNSw2IEBAIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24gcmVs YXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJa2V5X3R1cGxlID0gaGVh cF9mb3JtX3R1cGxlKGRlc2MsIHZhbHVlcywgbnVsbHMpOwogCSpjb3B5ID0gdHJ1ZTsKIAotCWJt c19mcmVlKGlkYXR0cnMpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHVwbGUsIHdoaWNoIGJ5IGhlcmUg b25seSBjb250YWlucyBpbmRleGVkIGNvbHVtbnMsIHN0aWxsIGhhcwogCSAqIHRvYXN0ZWQgY29s dW1ucywgZm9yY2UgdGhlbSB0byBiZSBpbmxpbmVkLiBUaGlzIGlzIHNvbWV3aGF0IHVubGlrZWx5 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiY2JhYzg0NGJi Ni4uMWNmOWExODc3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog c3RhdGljIHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKQEAg LTMxMiwyMyArMzEzLDEzMyBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAJcmV0dXJuIGhlYXBfZGVsZXRlKHJl bGF0aW9uLCB0aWQsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwgdG1mZCwgY2hhbmdpbmdQYXJ0KTsK IH0KIAotCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJQ29t bWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJ CWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCUxvY2tUdXBsZU1vZGUgKmxv Y2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKKwlib29sCQlyZXBf aWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CiAJSGVh cFR1cGxlCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxk RnJlZSk7CisJSGVhcFR1cGxlRGF0YSBvbGR0dXA7CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVy CQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJUGFnZQkJcGFnZTsKKwlCbG9ja051bWJlciBi bG9jazsKKwlJdGVtSWQJCWxwOworCUJpdG1hcHNldCAgKmhvdF9hdHRycywKKwkJCSAgICpzdW1f YXR0cnMsCisJCQkgICAqcGtfYXR0cnMsCisJCQkgICAqcmlkX2F0dHJzLAorCQkJICAgKm1peF9h dHRycywKKwkJCSAgICppZHhfYXR0cnM7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAorCUFzc2VydChJ dGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCisJLyogQ2hlYXAsIHNpbXBsaXN0aWMgY2hlY2sg dGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KKwlBc3NlcnQoSGVh cFR1cGxlSGVhZGVyR2V0TmF0dHModHVwbGUtPnRfZGF0YSkgPD0KKwkJICAgUmVsYXRpb25HZXRO dW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pKTsKKworCS8qCisJICogRm9yYmlkIHRoaXMgZHVy aW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8gQ0lELgor CSAqIE90aGVyIHdvcmtlcnMgbWlnaHQgbmVlZCB0aGF0IGNvbWJvIENJRCBmb3IgdmlzaWJpbGl0 eSBjaGVja3MsIGFuZCB3ZQorCSAqIGhhdmUgbm8gcHJvdmlzaW9uIGZvciBicm9hZGNhc3Rpbmcg aXQgdG8gdGhlbS4KKwkgKi8KKwlpZiAoSXNJblBhcmFsbGVsTW9kZSgpKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UUkFOU0FDVElPTl9TVEFURSksCisJ CQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0dXBsZXMgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0 aW9uIikpKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwljaGVja19sb2NrX2lmX2lu cGxhY2VfdXBkYXRlYWJsZV9yZWwocmVsYXRpb24sIG90aWQsIHR1cGxlKTsKKyNlbmRpZgorCisJ LyoKKwkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQgZm9yIHZh cmlvdXMgb3BlcmF0aW9ucy4KKwkgKgorCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMsIHRoaXMg aXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgorCSAqIGhhdmUgdG8gcHV0 IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0IGNvbXB1dGUg dGhlCisJICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0tLSBpbiB0aGUgd29y c3QgY2FzZSwgaWYgd2UgYXJlCisJICogZG9pbmcgYW4gdXBkYXRlIG9uIG9uZSBvZiB0aGUgcmVs ZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAorCSAqIGRlYWRsb2NrIGlmIHdlIHRyeSB0 byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNlLCB0aGUgcmVsY2FjaGUKKwkgKiBj YWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5IHByZXR0eSBjaGVhcC4KKwkgKgorCSAq IFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkgdGhlIHJlcGxpY2EgaWRlbnRpdHkgYW5kIGNv bHVtbnMgdGhhdCBhcmUKKwkgKiBjb25zaWRlcmVkIHRoZSAia2V5IiBvZiByb3dzIGluIHRoZSB0 YWJsZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0bWFwLCBz byB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dAorCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZyBt aWR3YXkgdGhyb3VnaC4KKwkgKi8KKwlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJp dG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJ TkcpOworCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAor CQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOworCXBrX2F0dHJzID0g UmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0tF WSk7CisJcmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJ CQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCWlkeF9hdHRy cyA9IGJtc19jb3B5KGhvdF9hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlk eF9hdHRycywgc3VtX2F0dHJzKTsKKwlpZHhfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaWR4X2F0 dHJzLCBwa19hdHRycyk7CisJaWR4X2F0dHJzID0gYm1zX2FkZF9tZW1iZXJzKGlkeF9hdHRycywg cmlkX2F0dHJzKTsKKworCWJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihvdGlkKTsK KwlJTkpFQ1RJT05fUE9JTlQoImhlYXBfdXBkYXRlLWJlZm9yZS1waW4iLCBOVUxMKTsKKwlidWZm ZXIgPSBSZWFkQnVmZmVyKHJlbGF0aW9uLCBibG9jayk7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKTsKKworCS8qCisJICogQmVmb3JlIGxvY2tpbmcgdGhlIGJ1ZmZlciwgcGluIHRoZSB2 aXNpYmlsaXR5IG1hcCBwYWdlIGlmIGl0IGFwcGVhcnMgdG8KKwkgKiBiZSBuZWNlc3NhcnkuICBT aW5jZSB3ZSBoYXZlbid0IGdvdCB0aGUgbG9jayB5ZXQsIHNvbWVvbmUgZWxzZSBtaWdodCBiZQor CSAqIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgdGhpcywgc28gd2UnbGwgbmVlZCB0byByZWNo ZWNrIGFmdGVyIHdlIGhhdmUKKwkgKiB0aGUgbG9jay4KKwkgKi8KKwlpZiAoUGFnZUlzQWxsVmlz aWJsZShwYWdlKSkKKwkJdmlzaWJpbGl0eW1hcF9waW4ocmVsYXRpb24sIGJsb2NrLCAmdm1idWZm ZXIpOworCisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwls cCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIob3RpZCkp OworCisJQXNzZXJ0KEl0ZW1JZElzTm9ybWFsKGxwKSk7CisKKwkvKgorCSAqIFBhcnRpYWxseSBj b25zdHJ1Y3QgdGhlIG9sZHR1cCBmb3IgSGVhcERldGVybWluZUNvbHVtbnNJbmZvIHRvIHdvcmsg YW5kCisJICogdGhlbiBwYXNzIHRoYXQgb24gdG8gaGVhcF91cGRhdGUuCisJICovCisJb2xkdHVw LnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlvbGR0dXAudF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOworCW9sZHR1cC50X2xl biA9IEl0ZW1JZEdldExlbmd0aChscCk7CisJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOworCisJbWl4 X2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsIHJp ZF9hdHRycywKKwkJCQkJCQkJCQkgJm9sZHR1cCwgdHVwbGUsICZyZXBfaWRfa2V5X3JlcXVpcmVk KTsKKworCS8qCisJICogV2UnbGwgbmVlZCB0byBXQUwgbG9nIHRoZSByZXBsaWNhIGlkZW50aXR5 IGF0dHJpYnV0ZXMgaWYgZWl0aGVyIHRoZXkKKwkgKiBvdmVybGFwIHdpdGggdGhlIG1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyBvciwgYXMgd2UndmUgY2hlY2tlZCBmb3IKKwkgKiBqdXN0IG5v dyBpbiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8sIHRoZXkgd2VyZSB1bm1vZGlmaWVkIGV4dGVy bmFsCisJICogaW5kZXhlZCBhdHRyaWJ1dGVzLgorCSAqLworCXJlcF9pZF9rZXlfcmVxdWlyZWQg PSByZXBfaWRfa2V5X3JlcXVpcmVkIHx8IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJz KTsKKwogCS8qIFVwZGF0ZSB0aGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KIAlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKIAl0dXBsZS0+dF90YWJsZU9p ZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9u LCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJIHRtZmQsIGxvY2tt b2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sICZv bGR0dXAsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJ CQkJIGJ1ZmZlciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYXR0cnMsIHN1bV9hdHRycywgcGtfYXR0 cnMsCisJCQkJCQkgcmlkX2F0dHJzLCBtaXhfYXR0cnMsICZ2bWJ1ZmZlciwgcmVwX2lkX2tleV9y ZXF1aXJlZCwgdXBkYXRlX2luZGV4ZXMpOworCisJYm1zX2ZyZWUoaG90X2F0dHJzKTsKKwlibXNf ZnJlZShzdW1fYXR0cnMpOworCWJtc19mcmVlKHBrX2F0dHJzKTsKKwlibXNfZnJlZShyaWRfYXR0 cnMpOworCWJtc19mcmVlKG1peF9hdHRycyk7CisJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKwogCUl0 ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJLyoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaAppbmRleCA5MDlkYjczYjdiYi4uNDFkNTQxYWE2YjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmgKQEAgLTMyMSwxMSArMzIxLDEzIEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwogZXh0ZXJuIHZvaWQgaGVhcF9m aW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVs YXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4dGVybiBUTV9SZXN1bHQgaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwK LQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNo b3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwg TG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0 ZV9pbmRleGVzKTsKK2V4dGVybiBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwgQ29t bWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQkJCSBUTV9G YWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIEJ1ZmZlciBidWZmZXIs CisJCQkJCQkJIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFw c2V0ICpob3RfYXR0cnMsCisJCQkJCQkJIEJpdG1hcHNldCAqc3VtX2F0dHJzLCBCaXRtYXBzZXQg KnBrX2F0dHJzLCBCaXRtYXBzZXQgKnJpZF9hdHRycywKKwkJCQkJCQkgQml0bWFwc2V0ICptaXhf YXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJl ZCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBo ZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJ CQkJIENvbW1hbmRJZCBjaWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2Fp dF9wb2xpY3ksCiAJCQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtMzkxLDYgKzM5Mywx OCBAQCBleHRlcm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0 aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKmRlYWQsIGludCBu ZGVhZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQsIGludCBudW51c2VkKTsKIAor LyogaW4gaGVhcC9oZWFwYW0uYyAqLworZXh0ZXJuIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNv bHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50 ZXJlc3RpbmdfY29scywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCisJ CQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKKwkJCQkJCQkJ CQkgICBib29sICpoYXNfZXh0ZXJuYWwpOworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKK2V4 dGVybiB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlvbiBy ZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJCQkJ CQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCk7CisjZW5kaWYKKwogLyogaW4gaGVhcC92YWN1dW1s YXp5LmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsCiAJCQkJ CQkJY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5KTsKLS0gCjIuNDkuMAoK --691e05bd_593c4f2_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v21-0002-Track-changed-indexed-columns-in-the-executor-du.patch" RnJvbSBlZGMxNzBhM2Y2MWRlMjE0MWIzODMxMzRhZTQwZjEwNWVlOTBhZWJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDIvNF0gVHJhY2sg Y2hhbmdlZCBpbmRleGVkIGNvbHVtbnMgaW4gdGhlIGV4ZWN1dG9yIGR1cmluZwogVVBEQVRFcwoK UmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVybWluZSB3aGljaCBpbmRleGVk IGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmluZyBhbiBVUERBVEUgb3BlcmF0aW9u IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8g aW4gaGVhcF91cGRhdGUuIFRoaXMgZW5hYmxlcyB0aGUgY29tcGFyaXNvbgp0byBoYXBwZW4gd2l0 aG91dCB0YWtpbmcgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBvcGVucyB0aGUgZG9vciB0byByZXVz ZQppbiBvdGhlciBjb2RlIHBhdGhzLgoKQmVjYXVzZSBoZWFwX3VwZGF0ZSBub3cgcmVxdWlyZXMg dGhlIGNhbGxlciB0byBwcm92aWRlIHRoZSBtb2RpZmllZAppbmRleGVkIGNvbHVtbnMgc2ltcGxl X2hlYXBfdXBkYXRlIGhhcyBiZWNvbWUgYSB0YWQgbW9yZSBjb21wbGV4LiAgSXQgaXMKZnJlcXVl bnRseSBjYWxsZWQgZnJvbSBDYXRhbG9nVHVwbGVVcGRhdGUgd2hpY2ggZWl0aGVyIHVwZGF0ZXMg aGVhcAp0dXBsZXMgdmlhIHRoZWlyIGZvcm0gb3IgdXNpbmcgaGVhcF9tb2RpZnlfdHVwbGUuICBJ biBib3RoIGNhc2VzIHRoZQpjYWxsZXIgZG9lcyBrbm93IHRoZSBtb2RpZmllZCBzZXQgb2YgYXR0 cmlidXRlcywgYnV0IHNhZGx5IHRob3NlCmF0dHJpYnV0ZXMgYXJlIGxvc3QgYmVmb3JlIGJlaW5n IHByb3ZpZGVkIHRvIHNpbXBsZV9oZWFwX3VwZGF0ZS4gIER1ZSB0bwp0aGF0IHRoZSAic2ltcGxl IiBwYXRoIGhhcyB0byByZXRhaW4gdGhlIEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyBsb2dpYwpv ZiBvbGQgKGZvciBub3cpLiAgSW4gb3JkZXIgZm9yIHRoYXQgdG8gd29yayBpdCB3YXMgbmVjZXNz YXJ5IHRvIHNwbGl0CnRoZSAob3Zlcmx5IGxhcmdlKSBoZWFwX3VwZGF0ZSBjYWxsIGl0c2VsZiB1 cC4gIFRoaXMgbW92ZXMgdXAgaW50bwpzaW1wbGVfaGVhcF91cGRhdGUgYW5kIGhlYXBfdHVwbGVf dXBkYXRlIGEgYml0IG9mIHdoYXQgZXhpc3RlZCBpbgpoZWFwX3VwZGF0ZSBpdHNlbGYuICBJZGVh bGx5IHRoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIG9uY2UKQ2F0YWxvZ1R1cGxlVXBkYXRlIHBhdGhz IGFyZSBhbGwgcmVjb3JkaW5nIG1vZGlmaWVkIGF0dHJpYnV0ZXMKY29ycmVjdGx5LCB3aGVuIHRo YXQgaGFwcGVucyB0aGUgInNpbXBsZSIgcGF0aCBjYW4gYmUgc2ltcGxpZmllZCBhZ2Fpbi4KCkV4 ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgcmVwbGFjZXMgSGVhcERldGVybWluZXNDb2x1 bW5zSW5mbyBhbmQKdHRzX2F0dHJfZXF1YWwgcmVwbGFjZXMgaGVhcF9hdHRyX2VxdWFsIGNoYW5n aW5nIHRoZSB0ZXN0IGZvciBlcXVhbGl0eQp3aGVuIGNhbGxpbmcgaW50byBoZWFwX3R1cGxlX3Vw ZGF0ZSAoYnV0IG5vdCBzaW1wbGVfaGVhcF91cGRhdGUpLiAgSW4KdGhlIHBhc3Qgd2UgdXNlZCBk YXR1bUlzRXF1YWwoKSwgZXNzZW50aWFsbHkgYSBiaW5hcnkgY29tcGFyaXNvbiB1c2luZwptZW1j bXAoKSwgbm93IHRoZSBjb21wYXJpc29uIGNvZGUgaW4gdHRzX2F0dHJfZXF1YWwgdXNlcyB0eXBl LXNwZWNpZmljCmVxdWFsaXR5IGZ1bmN0aW9uIHdoZW4gYXZhaWxhYmxlIGFuZCBmYWxscyBiYWNr IHRvIGRhdHVtSXNFcXVhbCgpIHdoZW4Kbm90LiAgVGhpcyBjaGFuZ2UgaW4gZXF1YWxpdHkgdGVz dGluZyBoYXMgc29tZSBpbnRlbmRlZCBpbXBsaWNhdGlvbnMgYW5kCm9wZW5zIHRoZSBkb29yIGZv ciBtb3JlIEhPVCB1cGRhdGVzIChmb3Jlc2hhZG93aW5nKS4gIEZvciBpbnN0YW5jZSwKaW5kZXhl cyB3aXRoIGNvbGxhdGlvbiBpbmZvcm1hdGlvbiBhbGxvd2luZyBtb3JlIEhPVCB1cGRhdGVzIHdo ZW4gdGhlCmluZGV4IGlzIHNwZWNpZmllZCB0byBiZSBjYXNlIGluc2Vuc2l0aXZlLgoKVGhpcyBj aGFuZ2UgZm9yY2VkIHNvbWUgbG9naWMgY2hhbmdlcyBpbiBleGVjUmVwbGljYXRpb24gb24gdGhl IHVwZGF0ZQpwYXRocyBpcyBub3cgaXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBrbm93bGVkZ2Ugb2Yg dGhlIHNldCBvZiBhdHRyaWJ1dGVzCnRoYXQgYXJlIGJvdGggY2hhbmdlZCBhbmQgcmVmZXJlbmNl ZCBieSBpbmRleGVzLiAgTHVja2lsbHksIHRoZSB0aGlzIGlzCmF2YWlsYWJsZSB3aXRoaW4gY2Fs bHMgdG8gc2xvdF9tb2RpZnlfZGF0YSgpIHdoZXJlIExvZ2ljYWxSZXBUdXBsZURhdGEKaXMgcHJv Y2Vzc2VkIGFuZCBoYXMgYSBzZXQgb2YgdXBkYXRlZCBhdHRyaWJ1dGVzLiAgSW4gdGhpcyBjYXNl IHJhdGhlcgp0aGFuIHVzaW5nIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgd2UgY2Fu IHByZXNldmUgd2hhdApzbG90X21vZGlmeV9kYXRhKCkgaWRlbnRpZmllcyBhcyB0aGUgbW9kaWZp ZWQgc2V0IGFuZCB0aGVuIGludGVyc2VjdAp0aGF0IHdpdGggdGhlIHNldCBvZiBpbmRleGVzIG9u IHRoZSByZWxhdGlvbiBhbmQgZ2V0IHRoZSBjb3JyZWN0IHNldCBvZgptb2RpZmllZCBpbmRleGVk IGF0dHJpYnV0ZXMgcmVxdWlyZWQgb24gaGVhcF91cGRhdGUoKS4KLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgIDcyICsrKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNN YWluLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMgICB8ICAgNyArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAg IHwgMjQ3ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBz ZXQuYyAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMgfCAgNzIgKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YyAgICAgICB8ICAxNSArKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICB8ICAgOCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICB8ICAg NSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvdXRpbHMvcmVsY2FjaGUuaCAgICAgICAgICAgICB8ICAgMSArCiAxNCBmaWxlcyBjaGFuZ2Vk LCA0MTUgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwppbmRleCBhZmY0NzQ4MTM0NS4uMWNkYjcyYjNhN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCkBAIC0zMjYzLDEyICszMjYzLDEyIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlv biByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiAgKiBnZW5lcmF0ZWQgYnkg YW5vdGhlciB0cmFuc2FjdGlvbikuCiAgKi8KIFRNX1Jlc3VsdAotaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZURhdGEgKm9sZHR1cCwKLQkJCUhlYXBUdXBsZSBuZXd0dXAs IENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCVRNX0Zh aWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwK LQkJCVBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxvY2ssIEl0ZW1JZCBscCwgQml0bWFwc2V0ICpo b3RfYXR0cnMsCi0JCQlCaXRtYXBzZXQgKnN1bV9hdHRycywgQml0bWFwc2V0ICpwa19hdHRycywg Qml0bWFwc2V0ICpyaWRfYXR0cnMsCi0JCQlCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2 bWJ1ZmZlciwKK2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGVEYXRhICpv bGR0dXAsIEhlYXBUdXBsZSBuZXd0dXAsCisJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9z c2NoZWNrLCBib29sIHdhaXQsCisJCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9k ZSAqbG9ja21vZGUsCisJCQlCdWZmZXIgYnVmZmVyLCBQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJs b2NrLCBJdGVtSWQgbHAsCisJCQlCaXRtYXBzZXQgKmhvdF9hdHRycywgQml0bWFwc2V0ICpzdW1f YXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsCisJCQlCaXRtYXBzZXQgKnJpZF9hdHRycywgQml0 bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCiAJCQlib29sIHJlcF9pZF9rZXlf cmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3Vs dAlyZXN1bHQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAx Y2Y5YTE4Nzc1ZC4uZWYwOGUxZDNlMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtMzE1LDkgKzMxNSwxMiBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAKIHN0YXRpYyBU TV9SZXN1bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFw c2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKLQkJCQkJYm9vbCB3YWl0LCBUTV9G YWlsdXJlRGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIFRVX1VwZGF0 ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBz bmFwc2hvdCwKKwkJCQkJU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQlUTV9G YWlsdXJlRGF0YSAqdG1mZCwKKwkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCisJCQkJCUJp dG1hcHNldCAqbWl4X2F0dHJzLAorCQkJCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cykKIHsKIAlib29sCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gZmFsc2U7CiAJYm9vbAkJc2hvdWxk RnJlZSA9IHRydWU7CkBAIC0zMzIsNyArMzM1LDYgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxh dGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJ CQkgICAqc3VtX2F0dHJzLAogCQkJICAgKnBrX2F0dHJzLAogCQkJICAgKnJpZF9hdHRycywKLQkJ CSAgICptaXhfYXR0cnMsCiAJCQkgICAqaWR4X2F0dHJzOwogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAK QEAgLTQxNCwxNiArNDE2LDYxIEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCW9sZHR1cC50X2xl biA9IEl0ZW1JZEdldExlbmd0aChscCk7CiAJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwogCi0JbWl4 X2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsIHJp ZF9hdHRycywKLQkJCQkJCQkJCQkgJm9sZHR1cCwgdHVwbGUsICZyZXBfaWRfa2V5X3JlcXVpcmVk KTsKLQogCS8qCi0JICogV2UnbGwgbmVlZCB0byBXQUwgbG9nIHRoZSByZXBsaWNhIGlkZW50aXR5 IGF0dHJpYnV0ZXMgaWYgZWl0aGVyIHRoZXkKLQkgKiBvdmVybGFwIHdpdGggdGhlIG1vZGlmaWVk IGluZGV4ZWQgYXR0cmlidXRlcyBvciwgYXMgd2UndmUgY2hlY2tlZCBmb3IKLQkgKiBqdXN0IG5v dyBpbiBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8sIHRoZXkgd2VyZSB1bm1vZGlmaWVkIGV4dGVy bmFsCi0JICogaW5kZXhlZCBhdHRyaWJ1dGVzLgorCSAqIFdlJ2xsIG5lZWQgdG8gaW5jbHVkZSB0 aGUgcmVwbGljYSBpZGVudGl0eSBrZXkgd2hlbiBlaXRoZXIgdGhlIGlkZW50aXR5CisJICoga2V5 IGF0dHJpYnV0ZXMgb3ZlcmxhcCB3aXRoIHRoZSBtb2RpZmllZCBpbmRleCBhdHRyaWJ1dGVzIG9y IHdoZW4gdGhlCisJICogcmVwbGljYSBpZGVudGl0eSBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgZXh0 ZXJuYWxseS4gIFRoaXMgaXMgcmVxdWlyZWQKKwkgKiBiZWNhdXNlIGZvciBzdWNoIGF0dHJpYnV0 ZXMgdGhlIGZsYXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzCisJICogcGFydCBv ZiB0aGUgbmV3IHR1cGxlIHNvIHdlIG11c3QgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZXh0cmFj dCBhbmQKKwkgKiBpbmNsdWRlIHRoZW0gYXMgcGFydCBvZiB0aGUgb2xkX2tleV90dXBsZSAoc2Vl IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkpLgogCSAqLwotCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBy ZXBfaWRfa2V5X3JlcXVpcmVkIHx8IGJtc19vdmVybGFwKG1peF9hdHRycywgcmlkX2F0dHJzKTsK KwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRfYXR0cnMp OworCWlmICghcmVwX2lkX2tleV9yZXF1aXJlZCkKKwl7CisJCUJpdG1hcHNldCAgKmF0dHJzOwor CQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCQlpbnQJ CQlhdHRpZHggPSAtMTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBvd24gaWR4X2F0dHJzIHNvIHdl J2xsIGNvcHkgaXQgYW5kIHJlbW92ZSB0aGUgbW9kaWZpZWQgc2V0CisJCSAqIHRvIHJlZHVjZSB0 aGUgYXR0cmlidXRlcyB3ZSBuZWVkIHRvIHRlc3QgaW4gdGhlIHdoaWxlIGxvb3AgYW5kCisJCSAq IGF2b2lkIGEgdHdvIGJyYW5jaGVzIGluIHRoZSBsb29wLgorCQkgKi8KKwkJYXR0cnMgPSBibXNf ZGlmZmVyZW5jZShpZHhfYXR0cnMsIG1peF9hdHRycyk7CisJCWF0dHJzID0gYm1zX2ludF9tZW1i ZXJzKGF0dHJzLCByaWRfYXR0cnMpOworCisJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVt YmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCQl7CisJCQkvKgorCQkJICogYXR0aWR4IGlzIHpl cm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyCisJCQkgKi8K KwkJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXI7CisJCQlEYXR1bQkJdmFsdWU7CisJCQlib29sCQlpc251bGw7CisKKwkJCS8q CisJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBhcmUgbm90IGFkZGVkIGludG8gaW50ZXJlc3Rpbmdf YXR0cnMgaW4KKwkJCSAqIHJlbGNhY2hlCisJCQkgKi8KKwkJCUFzc2VydChhdHRybnVtID4gMCk7 CisKKwkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKCZvbGR0dXAsIGF0dHJudW0sIHR1cGRlc2MsICZp c251bGwpOworCisJCQkvKiBObyBuZWVkIHRvIGNoZWNrIGF0dHJpYnV0ZXMgdGhhdCBjYW4ndCBi ZSBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKGlzbnVsbCB8fAorCQkJCVR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGRlc2MsIGF0dHJudW0gLSAxKS0+YXR0bGVuICE9IC0xKQorCQkJCWNvbnRp bnVlOworCisJCQkvKiBDaGVjayBpZiB0aGUgb2xkIHR1cGxlJ3MgYXR0cmlidXRlIGlzIHN0b3Jl ZCBleHRlcm5hbGx5ICovCisJCQlpZiAoVkFSQVRUX0lTX0VYVEVSTkFMKChzdHJ1Y3QgdmFybGVu YSAqKSBEYXR1bUdldFBvaW50ZXIodmFsdWUpKSkKKwkJCXsKKwkJCQlyZXBfaWRfa2V5X3JlcXVp cmVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWJtc19mcmVlKGF0dHJzKTsK Kwl9CiAKIAkvKiBVcGRhdGUgdGhlIHR1cGxlIHdpdGggdGFibGUgb2lkICovCiAJc2xvdC0+dHRz X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CkBAIC00MzcsNyArNDg0LDYg QEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3Rp ZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKIAlibXNfZnJl ZShwa19hdHRycyk7CiAJYm1zX2ZyZWUocmlkX2F0dHJzKTsKLQlibXNfZnJlZShtaXhfYXR0cnMp OwogCWJtc19mcmVlKGlkeF9hdHRycyk7CiAKIAlJdGVtUG9pbnRlckNvcHkoJnR1cGxlLT50X3Nl bGYsICZzbG90LT50dHNfdGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IDVl NDE0MDQ5MzdlLi5kYWRjZjAzZWQyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBA IC0zMzYsNiArMzM2LDcgQEAgdm9pZAogc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlv biByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAog CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSAgQml0bWFwc2V0ICptb2RpZmllZF9p bmRleGVkX2NvbHMsCiAJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQog ewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC0zNDYsNyArMzQ3LDkgQEAgc2ltcGxlX3RhYmxlX3R1 cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJCUdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSksCiAJCQkJCQkJCXNuYXBzaG90LCBJbnZhbGlkU25hcHNob3Qs CiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCQkJJnRtZmQsICZs b2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkmdG1mZCwgJmxvY2ttb2RlLAorCQkJ CQkJCQltb2RpZmllZF9pbmRleGVkX2NvbHMsCisJCQkJCQkJCXVwZGF0ZV9pbmRleGVzKTsKIAog CXN3aXRjaCAocmVzdWx0KQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDI3YzllZWM2 OTdiLi42YjdiNmJjODAxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0xMjgyLDYgKzEy ODIsNyBAQCBJbml0UmVzdWx0UmVsSW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAog CS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBzZXQgbGF0ZXIgaWYgbmVlZGVkICovCiAJcmVz dWx0UmVsSW5mby0+cmlfUm93SWRBdHRObyA9IDA7CiAJcmVzdWx0UmVsSW5mby0+cmlfZXh0cmFV cGRhdGVkQ29scyA9IE5VTEw7CisJcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xz ID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9wcm9qZWN0TmV3ID0gTlVMTDsKIAlyZXN1bHRS ZWxJbmZvLT5yaV9uZXdUdXBsZVNsb3QgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX29sZFR1 cGxlU2xvdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4 IGRlZjMyNzc0YzkwLi4yNzA5ZTJkYjBmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2lu Y2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKQEAg LTkzNiw3ICs5MzcsMTMgQEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCiAJCQlF eGVjUGFydGl0aW9uQ2hlY2socmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCB0cnVlKTsKIAor CQkvKgorCQkgKiBXZSdyZSBub3QgZ29pbmcgdG8gY2FsbCBFeGVjQ2hlY2tJbmRleGVkQXR0cnNG b3JDaGFuZ2VzIGhlcmUKKwkJICogYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhl IGNoYW5nZXMgZWFybGllciBvbiB0aGFua3MgdG8KKwkJICogc2xvdF9tb2RpZnlfZGF0YS4KKwkJ ICovCiAJCXNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUocmVsLCB0aWQsIHNsb3QsIGVzdGF0ZS0+ ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRD b2xzLAogCQkJCQkJCQkgICZ1cGRhdGVfaW5kZXhlcyk7CiAKIAkJY29uZmxpY3RpbmRleGVzID0g cmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAwMDQyOTMyNmMzNC4uMzRmODY1NDZmYzkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAg KgkJRXhlY01vZGlmeVRhYmxlCQktIHJldHJpZXZlIHRoZSBuZXh0IHR1cGxlIGZyb20gdGhlIG5v ZGUKICAqCQlFeGVjRW5kTW9kaWZ5VGFibGUJLSBzaHV0IGRvd24gdGhlIE1vZGlmeVRhYmxlIG5v ZGUKICAqCQlFeGVjUmVTY2FuTW9kaWZ5VGFibGUgLSByZXNjYW4gdGhlIE1vZGlmeVRhYmxlIG5v ZGUKKyAqCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzIC0gZmluZCBzZXQgb2YgdXBk YXRlZCBpbmRleGVkIGNvbHVtbnMKICAqCiAgKgkgTk9URVMKICAqCQlUaGUgTW9kaWZ5VGFibGUg bm9kZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0cyBvdXRlclBsYW4sIHdoaWNoIGlzCkBAIC01NCwx MSArNTUsMTQgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBjb252ZXJ0LmgiCisjaW5j bHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9u LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC02OCw2ICs3Miw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1 bS5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgog CkBAIC0xNzYsNiArMTgyLDIxOSBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU5v dE1hdGNoZWQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgIGJvb2wg Y2FuU2V0VGFnKTsKIAogCisvKgorICogQ29tcGFyZSB0d28gZGF0dW1zIHVzaW5nIHRoZSB0eXBl J3MgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRvci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhl IHZhbHVlcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSB0eXBlJ3MgZXF1YWxpdHkKKyAqIG9w ZXJhdG9yLCBmYWxzZSBvdGhlcndpc2UuIEZhbGxzIGJhY2sgdG8gYmluYXJ5IGNvbXBhcmlzb24g aWYgbm8KKyAqIHR5cGUtc3BlY2lmaWMgb3BlcmF0b3IgaXMgYXZhaWxhYmxlLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gdXNlcyB0aGUgVHlwZUNhY2hlIGluZnJhc3RydWN0dXJlIHdoaWNoIGNhY2hl cyBvcGVyYXRvcgorICogbG9va3VwcyBmb3IgZWZmaWNpZW5jeS4KKyAqLworYm9vbAordHRzX2F0 dHJfZXF1YWwoT2lkIHR5cGlkLCBPaWQgY29sbGF0aW9uLCBib29sIHR5cGJ5dmFsLCBpbnQxNiB0 eXBsZW4sCisJCQkgICBEYXR1bSB2YWx1ZTEsIERhdHVtIHZhbHVlMikKK3sKKwlUeXBlQ2FjaGVF bnRyeSAqdHlwZW50cnk7CisKKwlMT0NBTF9GQ0lORk8oZmNpbmZvLCAyKTsKKwlEYXR1bQkJcmVz dWx0OworCisJLyoKKwkgKiBGYXN0IHBhdGggZm9yIGNvbW1vbiB0eXBlcyB0byBhdm9pZCBldmVu IHRoZSB0eXBlIGNhY2hlIGxvb2t1cC4gVGhlc2UKKwkgKiB0eXBlcyBoYXZlIHNpbXBsZSBlcXVh bGl0eSBzZW1hbnRpY3MuCisJICovCisJc3dpdGNoICh0eXBpZCkKKwl7CisJCWNhc2UgSU5UMk9J RDoKKwkJCXJldHVybiBEYXR1bUdldEludDE2KHZhbHVlMSkgPT0gRGF0dW1HZXRJbnQxNih2YWx1 ZTIpOworCQljYXNlIElOVDRPSUQ6CisJCQlyZXR1cm4gRGF0dW1HZXRJbnQzMih2YWx1ZTEpID09 IERhdHVtR2V0SW50MzIodmFsdWUyKTsKKwkJY2FzZSBJTlQ4T0lEOgorCQkJcmV0dXJuIERhdHVt R2V0SW50NjQodmFsdWUxKSA9PSBEYXR1bUdldEludDY0KHZhbHVlMik7CisJCWNhc2UgRkxPQVQ0 T0lEOgorCQkJcmV0dXJuICFmbG9hdDRfY21wX2ludGVybmFsKERhdHVtR2V0RmxvYXQ0KHZhbHVl MSksIERhdHVtR2V0RmxvYXQ0KHZhbHVlMikpOworCQljYXNlIEZMT0FUOE9JRDoKKwkJCXJldHVy biAhZmxvYXQ4X2NtcF9pbnRlcm5hbChEYXR1bUdldEZsb2F0OCh2YWx1ZTEpLCBEYXR1bUdldEZs b2F0OCh2YWx1ZTIpKTsKKwkJY2FzZSBCT09MT0lEOgorCQkJcmV0dXJuIERhdHVtR2V0Qm9vbCh2 YWx1ZTEpID09IERhdHVtR2V0Qm9vbCh2YWx1ZTIpOworCQljYXNlIE9JRE9JRDoKKwkJY2FzZSBS RUdQUk9DT0lEOgorCQljYXNlIFJFR1BST0NFRFVSRU9JRDoKKwkJY2FzZSBSRUdPUEVST0lEOgor CQljYXNlIFJFR09QRVJBVE9ST0lEOgorCQljYXNlIFJFR0NMQVNTT0lEOgorCQljYXNlIFJFR1RZ UEVPSUQ6CisJCWNhc2UgUkVHUk9MRU9JRDoKKwkJY2FzZSBSRUdOQU1FU1BBQ0VPSUQ6CisJCWNh c2UgUkVHQ09ORklHT0lEOgorCQljYXNlIFJFR0RJQ1RJT05BUllPSUQ6CisJCQlyZXR1cm4gRGF0 dW1HZXRPYmplY3RJZCh2YWx1ZTEpID09IERhdHVtR2V0T2JqZWN0SWQodmFsdWUyKTsKKwkJY2Fz ZSBDSEFST0lEOgorCQkJcmV0dXJuIERhdHVtR2V0Q2hhcih2YWx1ZTEpID09IERhdHVtR2V0Q2hh cih2YWx1ZTIpOworCQlkZWZhdWx0OgorCQkJLyogQ29udGludWUgdG8gdHlwZSBjYWNoZSBsb29r dXAgKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICogTG9vayB1cCB0aGUgdHlwZSdzIGVxdWFs aXR5IG9wZXJhdG9yIHVzaW5nIHRoZSB0eXBlIGNhY2hlLiBSZXF1ZXN0IGJvdGgKKwkgKiB0aGUg b3BlcmF0b3IgT0lEIGFuZCB0aGUgZnVuY3Rpb24gaW5mbyBmb3IgZWZmaWNpZW5jeS4KKwkgKi8K Kwl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHR5cGlkLAorCQkJCQkJCQkgVFlQRUNBQ0hF X0VRX09QUiB8IFRZUEVDQUNIRV9FUV9PUFJfRklORk8pOworCisJLyoKKwkgKiBJZiBubyBlcXVh bGl0eSBvcGVyYXRvciBpcyBhdmFpbGFibGUsIGZhbGwgYmFjayB0byBiaW5hcnkgY29tcGFyaXNv bi4KKwkgKiBUaGlzIGhhbmRsZXMgdHlwZXMgdGhhdCBkb24ndCBoYXZlIHByb3BlciBlcXVhbGl0 eSBvcGVyYXRvcnMgZGVmaW5lZC4KKwkgKi8KKwlpZiAoIU9pZElzVmFsaWQodHlwZW50cnktPmVx X29wcikpCisJCXJldHVybiBkYXR1bUlzRXF1YWwodmFsdWUxLCB2YWx1ZTIsIHR5cGJ5dmFsLCB0 eXBsZW4pOworCisJLyoKKwkgKiBVc2UgdGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIGlmIGF2YWls YWJsZSwgb3RoZXJ3aXNlIGxvb2sgaXQgdXAuIFRoZQorCSAqIHR5cGUgY2FjaGUga2VlcHMgdGhp cyBhcm91bmQgc28gc3Vic2VxdWVudCBjYWxscyBhcmUgZmFzdC4KKwkgKi8KKwlpZiAodHlwZW50 cnktPmVxX29wcl9maW5mby5mbl9hZGRyID09IE5VTEwpCisJeworCQlPaWQJCQllcV9wcm9jID0g Z2V0X29wY29kZSh0eXBlbnRyeS0+ZXFfb3ByKTsKKworCQlpZiAoIU9pZElzVmFsaWQoZXFfcHJv YykpCisJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLCBidXQgZmFsbCBiYWNrIHRvIGJpbmFyeSBjb21w YXJpc29uICovCisJCQlyZXR1cm4gZGF0dW1Jc0VxdWFsKHZhbHVlMSwgdmFsdWUyLCB0eXBieXZh bCwgdHlwbGVuKTsKKworCQlmbWdyX2luZm9fY3h0KGVxX3Byb2MsICZ0eXBlbnRyeS0+ZXFfb3By X2ZpbmZvLAorCQkJCQkgIENhY2hlTWVtb3J5Q29udGV4dCk7CisJfQorCisJLyogU2V0IHVwIGZ1 bmN0aW9uIGNhbGwgKi8KKwlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKmZjaW5mbywgJnR5cGVu dHJ5LT5lcV9vcHJfZmluZm8sIDIsCisJCQkJCQkJIGNvbGxhdGlvbiwgTlVMTCwgTlVMTCk7CisK KwlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSB2YWx1ZTE7CisJZmNpbmZvLT5hcmdzWzBdLmlzbnVs bCA9IGZhbHNlOworCWZjaW5mby0+YXJnc1sxXS52YWx1ZSA9IHZhbHVlMjsKKwlmY2luZm8tPmFy Z3NbMV0uaXNudWxsID0gZmFsc2U7CisKKwkvKiBJbnZva2UgdGhlIGVxdWFsaXR5IG9wZXJhdG9y ICovCisJcmVzdWx0ID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5mbyk7CisKKwkvKgorCSAqIElm IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIChzaG91bGRuJ3QgaGFwcGVuIGZvciBlcXVhbGl0 eSBvcHMpLAorCSAqIHRyZWF0IGFzIG5vdCBlcXVhbCBmb3Igc2FmZXR5LgorCSAqLworCWlmIChm Y2luZm8tPmlzbnVsbCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIERhdHVtR2V0Qm9vbChy ZXN1bHQpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoaWNoIHVwZGF0ZWQgYXR0cmlidXRlcyBh Y3R1YWxseSBjaGFuZ2VkIHZhbHVlcyBiZXR3ZWVuIG9sZCBhbmQKKyAqIG5ldyB0dXBsZXMgYW5k IGFyZSByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgb24gdGhlIHJlbGF0aW9uLgorICoKKyAqIFJldHVy bnMgYSBCaXRtYXBzZXQgb2YgYXR0cmlidXRlIG9mZnNldHMgKDAtYmFzZWQsIGFkanVzdGVkIGJ5 CisgKiBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKSBvciBOVUxMIGlmIG5vIGF0 dHJpYnV0ZXMgY2hhbmdlZC4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNDaGVja0luZGV4ZWRBdHRy c0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJVHVwbGVUYWJsZVNs b3QgKnR0c19vbGQsCisJCQkJCQkJCVR1cGxlVGFibGVTbG90ICp0dHNfbmV3KQoreworCVJlbGF0 aW9uCXJlbGF0aW9uID0gcmVsaW5mby0+cmlfUmVsYXRpb25EZXNjOworCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJQml0bWFwc2V0ICAqaW5kZXhlZF9h dHRyczsKKwlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7CisJaW50CQkJYXR0aWR4OworCisJ LyogSWYgbm8gaW5kZXhlcywgd2UncmUgZG9uZSAqLworCWlmIChyZWxpbmZvLT5yaV9OdW1JbmRp Y2VzID09IDApCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBHZXQgdGhlIHNldCBvZiBpbmRl eCBrZXkgYXR0cmlidXRlcy4gIFRoaXMgaW5jbHVkZXMgc3VtbWFyaXppbmcsCisJICogZXhwcmVz c2lvbiBpbmRleGVzIGFuZCBhdHRyaWJ1dGVzIG1lbnRpb25lZCBpbiB0aGUgcHJlZGljYXRlIG9m IGEKKwkgKiBwYXJ0aXRpb24gYnV0IG5vdCB0aG9zZSBpbiBJTkNMVURJTkcuCisJICovCisJaW5k ZXhlZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJ CQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKwlBc3NlcnQoIWJtc19pc19lbXB0 eShpbmRleGVkX2F0dHJzKSk7CisKKwkvKgorCSAqIE5PVEU6IEl0IGlzIGltcG9ydGFudCB0byBz Y2FuIGFsbCBpbmRleGVkIGF0dHJpYnV0ZXMgaW4gdGhlIHR1cGxlcworCSAqIGJlY2F1c2UgRXhl Y0dldEFsbFVwZGF0ZWRDb2xzIHdvbid0IGluY2x1ZGUgY29sdW1ucyB0aGF0IG1heSBoYXZlIGJl ZW4KKwkgKiBtb2RpZmllZCB2aWEgaGVhcF9tb2RpZnlfdHVwbGVfYnlfY29sIHdoaWNoIGlzIHRo ZSBjYXNlIGluCisJICogdHN2ZWN0b3JfdXBkYXRlX3RyaWdnZXIuCisJICovCisJYXR0aWR4ID0g LTE7CisJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlZF9hdHRycywgYXR0 aWR4KSkgPj0gMCkKKwl7CisJCS8qIGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRo ZSBub3JtYWwgYXR0cmlidXRlIG51bWJlciAqLworCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRp ZHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRyOworCQlib29sCQlvbGRudWxsLAorCQkJCQluZXdudWxsOworCQlEYXR1bQkJb2xk dmFsLAorCQkJCQluZXd2YWw7CisKKwkJLyoKKwkJICogSWYgaXQncyBhIHdob2xlLXR1cGxlIHJl ZmVyZW5jZSwgcmVjb3JkIGFzIG1vZGlmaWVkLiAgSXQncyBub3QKKwkJICogcmVhbGx5IHdvcnRo IHN1cHBvcnRpbmcgdGhpcyBjYXNlLCBzaW5jZSBpdCBjb3VsZCBvbmx5IHN1Y2NlZWQKKwkJICog YWZ0ZXIgYSBuby1vcCB1cGRhdGUsIHdoaWNoIGlzIGhhcmRseSBhIGNhc2Ugd29ydGggb3B0aW1p emluZyBmb3IuCisJCSAqLworCQlpZiAoYXR0cm51bSA9PSAwKQorCQl7CisJCQltb2RpZmllZCA9 IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29udGludWU7CisJCX0KKwor CQkvKgorCQkgKiBMaWtld2lzZSwgaW5jbHVkZSBpbiB0aGUgbW9kaWZpZWQgc2V0IGFueSBzeXN0 ZW0gYXR0cmlidXRlIG90aGVyCisJCSAqIHRoYW4gdGFibGVPSUQ7IHdlIGNhbm5vdCBleHBlY3Qg dGhlc2UgdG8gYmUgY29uc2lzdGVudCBpbiBhIEhPVAorCQkgKiBjaGFpbiwgb3IgZXZlbiB0byBi ZSBzZXQgY29ycmVjdGx5IHlldCBpbiB0aGUgbmV3IHR1cGxlLgorCQkgKi8KKwkJaWYgKGF0dHJu dW0gPCAwKQorCQl7CisJCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJpYnV0ZU51bWJlcikK KwkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBFeHRyYWN0IHZhbHVlcyBmcm9tIGJvdGggc2xvdHMgKi8KKwkJ b2xkdmFsID0gc2xvdF9nZXRhdHRyKHR0c19vbGQsIGF0dHJudW0sICZvbGRudWxsKTsKKwkJbmV3 dmFsID0gc2xvdF9nZXRhdHRyKHR0c19uZXcsIGF0dHJudW0sICZuZXdudWxsKTsKKworCQkvKiBJ ZiBvbmUgdmFsdWUgaXMgTlVMTCBhbmQgdGhlIG90aGVyIGlzIG5vdCwgdGhleSBhcmUgbm90IGVx dWFsICovCisJCWlmIChvbGRudWxsICE9IG5ld251bGwpCisJCXsKKwkJCW1vZGlmaWVkID0gYm1z X2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q IElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KKwkJaWYgKG9sZG51bGwp CisJCQljb250aW51ZTsKKworCQkvKiBHZXQgYXR0cmlidXRlIG1ldGFkYXRhICovCisJCUFzc2Vy dChhdHRybnVtID4gMCAmJiBhdHRybnVtIDw9IHR1cGRlc2MtPm5hdHRzKTsKKwkJYXR0ciA9IFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0cm51bSAtIDEpOworCisJCS8qIENvbXBhcmUgdXNpbmcg dHlwZS1zcGVjaWZpYyBlcXVhbGl0eSBvcGVyYXRvciAqLworCQlpZiAoIXR0c19hdHRyX2VxdWFs KGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCWF0dHItPmF0dGNvbGxhdGlvbiwKKwkJCQkJCQlhdHRy LT5hdHRieXZhbCwKKwkJCQkJCQlhdHRyLT5hdHRsZW4sCisJCQkJCQkJb2xkdmFsLAorCQkJCQkJ CW5ld3ZhbCkpCisJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgp OworCX0KKworCWJtc19mcmVlKGluZGV4ZWRfYXR0cnMpOworCisJcmV0dXJuIG1vZGlmaWVkOwor fQorCiAvKgogICogVmVyaWZ5IHRoYXQgdGhlIHR1cGxlcyB0byBiZSBwcm9kdWNlZCBieSBJTlNF UlQgbWF0Y2ggdGhlCiAgKiB0YXJnZXQgcmVsYXRpb24ncyByb3d0eXBlCkBAIC0yMTY4LDggKzIz ODcsOCBAQCBFeGVjVXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bywKICAqLwogc3RhdGljIFRNX1Jlc3VsdAogRXhlY1VwZGF0ZUFjdChNb2RpZnlUYWJsZUNvbnRl eHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkgIEl0ZW1Qb2lu dGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0J CQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQpCisJCQkgIEl0ZW1Q b2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKm9sZFNs b3QsCisJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGNhblNldFRhZywgVXBkYXRlQ29u dGV4dCAqdXBkYXRlQ3h0KQogewogCUVTdGF0ZQkgICAqZXN0YXRlID0gY29udGV4dC0+ZXN0YXRl OwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYzsKQEAgLTIyOTEsNiArMjUxMCwxNiBAQCBscmVwbGFjZToKIAlpZiAocmVzdWx0UmVs YXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0cikKIAkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbElu Zm8sIHNsb3QsIGVzdGF0ZSk7CiAKKwkvKgorCSAqIElkZW50aWZ5IHdoaWNoLCBpZiBhbnksIGlu ZGV4ZWQgYXR0cmlidXRlcyB3ZXJlIG1vZGlmaWVkIGhlcmUgc28gdGhhdAorCSAqIHdlIG1pZ2h0 IHJldXNlIGl0IGluIGEgZmV3IHBsYWNlcy4KKwkgKi8KKwlibXNfZnJlZShyZXN1bHRSZWxJbmZv LT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCXJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRl eGVkQ29scyA9IE5VTEw7CisKKwlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMg PQorCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKHJlc3VsdFJlbEluZm8sIG9sZFNs b3QsIHNsb3QpOworCiAJLyoKIAkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCiAJICoKQEAgLTIz MDYsNiArMjUzNSw3IEBAIGxyZXBsYWNlOgogCQkJCQkJCQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tf c25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCQkJ JmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQtPmxvY2ttb2RlLAorCQkJCQkJCQlyZXN1bHRSZWxJ bmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMsCiAJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUlu ZGV4ZXMpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI1MjQsOCArMjc1NCw5IEBAIEV4ZWNVcGRh dGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAogCQkgKi8KIHJlZG9fYWN0OgogCQlsb2NrZWR0aWQgPSAqdHVwbGVpZDsKLQkJcmVzdWx0 ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBsZWlkLCBvbGR0dXBs ZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcsICZ1cGRhdGVDeHQpOworCisJCXJlc3VsdCA9 IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUs IG9sZFNsb3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKIAogCQkv KgogCQkgKiBJZiBFeGVjVXBkYXRlQWN0IHJlcG9ydHMgdGhhdCBhIGNyb3NzLXBhcnRpdGlvbiB1 cGRhdGUgd2FzIGRvbmUsCkBAIC0zMjIyLDggKzM0NTMsOCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJ CQkJQXNzZXJ0KG9sZHR1cGxlID09IE5VTEwpOwogCiAJCQkJCXJlc3VsdCA9IEV4ZWNVcGRhdGVB Y3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwKLQkJCQkJCQkJCQkgICBOVUxMLCBu ZXdzbG90LCBjYW5TZXRUYWcsCi0JCQkJCQkJCQkJICAgJnVwZGF0ZUN4dCk7CisJCQkJCQkJCQkJ ICAgTlVMTCwgcmVzdWx0UmVsSW5mby0+cmlfb2xkVHVwbGVTbG90LAorCQkJCQkJCQkJCSAgIG5l d3Nsb3QsIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CiAKIAkJCQkJLyoKIAkJCQkJICogQXMgaW4g RXhlY1VwZGF0ZSgpLCBpZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTMyNDgs NiArMzQ3OSw3IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJCQkJICAgdHVwbGVpZCwgTlVMTCwg bmV3c2xvdCk7CiAJCQkJCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQgKz0gMTsKIAkJCQl9CisK IAkJCQlicmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpAQCAtNDM1NCw3ICs0NTg2LDcgQEAg RXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBGb3IgVVBEQVRFL0RFTEVU RS9NRVJHRSwgZmV0Y2ggdGhlIHJvdyBpZGVudGl0eSBpbmZvIGZvciB0aGUgdHVwbGUKIAkJICog dG8gYmUgdXBkYXRlZC9kZWxldGVkL21lcmdlZC4gIEZvciBhIGhlYXAgcmVsYXRpb24sIHRoYXQn cyBhIFRJRDsKIAkJICogb3RoZXJ3aXNlIHdlIG1heSBoYXZlIGEgd2hvbGVyb3cganVuayBhdHRy IHRoYXQgY2FycmllcyB0aGUgb2xkCi0JCSAqIHR1cGxlIGluIHRvdG8uICBLZWVwIHRoaXMgaW4g c3RlcCB3aXRoIHRoZSBwYXJ0IG9mCisJCSAqIHR1cGxlIGluIHRvdGFsLiAgS2VlcCB0aGlzIGlu IHN0ZXAgd2l0aCB0aGUgcGFydCBvZgogCQkgKiBFeGVjSW5pdE1vZGlmeVRhYmxlIHRoYXQgc2V0 cyB1cCByaV9Sb3dJZEF0dE5vLgogCQkgKi8KIAkJaWYgKG9wZXJhdGlvbiA9PSBDTURfVVBEQVRF IHx8IG9wZXJhdGlvbiA9PSBDTURfREVMRVRFIHx8CkBAIC00NTMwLDYgKzQ3NjIsNyBAQCBFeGVj TW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRh dGUuICovCiAJCQkJc2xvdCA9IEV4ZWNVcGRhdGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1 cGxlaWQsIG9sZHR1cGxlLAogCQkJCQkJCQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRh Zyk7CisKIAkJCQlpZiAodHVwbG9jaykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLCB0dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2Nr KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvYml0bWFwc2V0LmMKaW5kZXggYjRlY2YwYjAzOTAuLjkwMTQ5OTAyNjdhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMvYmFja2VuZC9u b2Rlcy9iaXRtYXBzZXQuYwpAQCAtMjM4LDYgKzIzOCwxMCBAQCBibXNfbWFrZV9zaW5nbGV0b24o aW50IHgpCiB2b2lkCiBibXNfZnJlZShCaXRtYXBzZXQgKmEpCiB7CisjaWYgVVNFX0FTU0VSVF9D SEVDS0lORworCUFzc2VydChibXNfaXNfdmFsaWRfc2V0KGEpKTsKKyNlbmRpZgorCiAJaWYgKGEp CiAJCXBmcmVlKGEpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK aW5kZXggOTM5NzBjNmFmMjkuLmIzNjNlYWE0OWNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKQEAgLTI0Myw2ICsyNDMsOCBAQAogICovCiAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAibm9kZXMv Yml0bWFwc2V0LmgiCiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o PgpAQCAtMjc1LDcgKzI3Nyw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0 aW9uLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL29yaWdpbi5oIgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIK QEAgLTI5MSw2ICsyOTIsNyBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcGdfbHNuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9ybHMuaCIKICNpbmNsdWRlICJ1dGlscy9z bmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTExMTAsMTUgKzExMTIs MTggQEAgc2xvdF9zdG9yZV9kYXRhKFR1cGxlVGFibGVTbG90ICpzbG90LCBMb2dpY2FsUmVwUmVs TWFwRW50cnkgKnJlbCwKICAqICJzbG90IiBpcyBmaWxsZWQgd2l0aCBhIGNvcHkgb2YgdGhlIHR1 cGxlIGluICJzcmNzbG90IiwgcmVwbGFjaW5nCiAgKiBjb2x1bW5zIHByb3ZpZGVkIGluICJ0dXBs ZURhdGEiIGFuZCBsZWF2aW5nIG90aGVycyBhcy1pcy4KICAqCisgKiBSZXR1cm5zIGEgYml0bWFw IG9mIHRoZSBtb2RpZmllZCBjb2x1bW5zLgorICoKICAqIENhdXRpb246IHVucmVwbGFjZWQgcGFz cy1ieS1yZWYgY29sdW1ucyBpbiAic2xvdCIgd2lsbCBwb2ludCBpbnRvIHRoZQogICogc3RvcmFn ZSBmb3IgInNyY3Nsb3QiLiAgVGhpcyBpcyBPSyBmb3IgY3VycmVudCB1c2FnZSwgYnV0IHNvbWVk YXkgd2UgbWF5CiAgKiBuZWVkIHRvIG1hdGVyaWFsaXplICJzbG90IiBhdCB0aGUgZW5kIHRvIG1h a2UgaXQgaW5kZXBlbmRlbnQgb2YgInNyY3Nsb3QiLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGlj IEJpdG1hcHNldCAqCiBzbG90X21vZGlmeV9kYXRhKFR1cGxlVGFibGVTbG90ICpzbG90LCBUdXBs ZVRhYmxlU2xvdCAqc3Jjc2xvdCwKIAkJCQkgTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWwsCiAJ CQkJIExvZ2ljYWxSZXBUdXBsZURhdGEgKnR1cGxlRGF0YSkKIHsKKwlCaXRtYXBzZXQgICptb2Rp ZmllZCA9IE5VTEw7CiAJaW50CQkJbmF0dHMgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5u YXR0czsKIAlpbnQJCQlpOwogCkBAIC0xMTk1LDYgKzEyMDAsMjggQEAgc2xvdF9tb2RpZnlfZGF0 YShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgVHVwbGVUYWJsZVNsb3QgKnNyY3Nsb3QsCiAJCQkJc2xv dC0+dHRzX2lzbnVsbFtpXSA9IHRydWU7CiAJCQl9CiAKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUg aWYgdGhlIHJlcGxpY2F0ZWQgdmFsdWUgY2hhbmdlZCB0aGUgbG9jYWwgdmFsdWUgYnkKKwkJCSAq IGNvbXBhcmluZyBzbG90cy4gIFRoaXMgaXMgYSBzdWJzZXQgb2YKKwkJCSAqIEV4ZWNDaGVja0lu ZGV4ZWRBdHRyc0ZvckNoYW5nZXMuCisJCQkgKi8KKwkJCWlmIChzcmNzbG90LT50dHNfaXNudWxs W2ldICE9IHNsb3QtPnR0c19pc251bGxbaV0pCisJCQl7CisJCQkJLyogT25lIGlzIE5VTEwsIHRo ZSBvdGhlciBpcyBub3Qgc28gdGhlIHZhbHVlIGNoYW5nZWQgKi8KKwkJCQltb2RpZmllZCA9IGJt c19hZGRfbWVtYmVyKG1vZGlmaWVkLCBpICsgMSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIpOworCQkJfQorCQkJZWxzZSBpZiAoIXNyY3Nsb3QtPnR0c19pc251bGxbaV0pCisJ CQl7CisJCQkJLyogQm90aCBhcmUgbm90IE5VTEwsIGNvbXBhcmUgdGhlaXIgdmFsdWVzICovCisJ CQkJaWYgKCF0dHNfYXR0cl9lcXVhbChhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJYXR0LT5hdHRj b2xsYXRpb24sCisJCQkJCQkJCQlhdHQtPmF0dGJ5dmFsLAorCQkJCQkJCQkJYXR0LT5hdHRsZW4s CisJCQkJCQkJCQlzcmNzbG90LT50dHNfdmFsdWVzW2ldLAorCQkJCQkJCQkJc2xvdC0+dHRzX3Zh bHVlc1tpXSkpCisJCQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGkgKyAx IC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQl9CisKIAkJCS8qIFJl c2V0IGF0dG51bSBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KIAkJCWFwcGx5X2Vycm9yX2NhbGxiYWNr X2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJCX0KQEAgLTEyMDIsNiArMTIyOSw4IEBAIHNsb3Rf bW9kaWZ5X2RhdGEoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFR1cGxlVGFibGVTbG90ICpzcmNzbG90 LAogCiAJLyogQW5kIGZpbmFsbHksIGRlY2xhcmUgdGhhdCAic2xvdCIgY29udGFpbnMgYSB2YWxp ZCB2aXJ0dWFsIHR1cGxlICovCiAJRXhlY1N0b3JlVmlydHVhbFR1cGxlKHNsb3QpOworCisJcmV0 dXJuIG1vZGlmaWVkOwogfQogCiAvKgpAQCAtMjkxOCw2ICsyOTQ3LDcgQEAgYXBwbHlfaGFuZGxl X3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCUNvbmZsaWN0VHVw bGVJbmZvIGNvbmZsaWN0dHVwbGUgPSB7MH07CiAJYm9vbAkJZm91bmQ7CiAJTWVtb3J5Q29udGV4 dCBvbGRjdHg7CisJQml0bWFwc2V0ICAqaW5kZXhlZCA9IE5VTEw7CiAKIAlFdmFsUGxhblF1YWxJ bml0KCZlcHFzdGF0ZSwgZXN0YXRlLCBOVUxMLCBOSUwsIC0xLCBOSUwpOwogCUV4ZWNPcGVuSW5k aWNlcyhyZWxpbmZvLCBmYWxzZSk7CkBAIC0yOTM0LDYgKzI5NjQsOCBAQCBhcHBseV9oYW5kbGVf dXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJICovCiAJaWYgKGZv dW5kKQogCXsKKwkJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOworCiAJCS8qCiAJCSAqIFJl cG9ydCB0aGUgY29uZmxpY3QgaWYgdGhlIHR1cGxlIHdhcyBtb2RpZmllZCBieSBhIGRpZmZlcmVu dAogCQkgKiBvcmlnaW4uCkBAIC0yOTU3LDE1ICsyOTg5LDI5IEBAIGFwcGx5X2hhbmRsZV91cGRh dGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAogCQkvKiBQcm9jZXNzIGFu ZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KIAkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKLQkJc2xvdF9t b2RpZnlfZGF0YShyZW1vdGVzbG90LCBsb2NhbHNsb3QsIHJlbG1hcGVudHJ5LCBuZXd0dXApOwor CQltb2RpZmllZCA9IHNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdCwgbG9jYWxzbG90LCByZWxt YXBlbnRyeSwgbmV3dHVwKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiAKKwkJ LyoKKwkJICogTm9ybWFsbHkgd2UnZCBjYWxsIEV4ZWNDaGVja0luZGV4ZWRBdHRyRm9yQ2hhbmdl cyBidXQgaGVyZSB3ZSBoYXZlCisJCSAqIHRoZSByZWNvcmQgb2YgY2hhbmdlZCBjb2x1bW5zIGlu IHRoZSByZXBsaWNhdGlvbiBzdGF0ZSwgc28gbGV0J3MKKwkJICogdXNlIHRoYXQgaW5zdGVhZC4K KwkJICovCisJCWluZGV4ZWQgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxpbmZvLT5y aV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsK KworCQlibXNfZnJlZShyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQlyZWxpbmZv LT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMgPSBibXNfaW50X21lbWJlcnMobW9kaWZpZWQsIGluZGV4 ZWQpOworCQlibXNfZnJlZShpbmRleGVkKTsKKwogCQlFdmFsUGxhblF1YWxTZXRTbG90KCZlcHFz dGF0ZSwgcmVtb3Rlc2xvdCk7CiAKIAkJSW5pdENvbmZsaWN0SW5kZXhlcyhyZWxpbmZvKTsKIAot CQkvKiBEbyB0aGUgYWN0dWFsIHVwZGF0ZS4gKi8KKwkJLyogRmlyc3QgY2hlY2sgcHJpdmlsZWdl cyAqLwogCQlUYXJnZXRQcml2aWxlZ2VzQ2hlY2socmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLCBB Q0xfVVBEQVRFKTsKKworCQkvKiBUaGVuIGRvIHRoZSBhY3R1YWwgdXBkYXRlLiAqLwogCQlFeGVj U2ltcGxlUmVsYXRpb25VcGRhdGUocmVsaW5mbywgZXN0YXRlLCAmZXBxc3RhdGUsIGxvY2Fsc2xv dCwKIAkJCQkJCQkJIHJlbW90ZXNsb3QpOwogCX0KQEAgLTM0NTUsNiArMzUwMSw4IEBAIGFwcGx5 X2hhbmRsZV90dXBsZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJYm9v bAkJZm91bmQ7CiAJCQkJRVBRU3RhdGUJZXBxc3RhdGU7CiAJCQkJQ29uZmxpY3RUdXBsZUluZm8g Y29uZmxpY3R0dXBsZSA9IHswfTsKKwkJCQlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7CisJ CQkJQml0bWFwc2V0ICAqaW5kZXhlZDsKIAogCQkJCS8qIEdldCB0aGUgbWF0Y2hpbmcgbG9jYWwg dHVwbGUgZnJvbSB0aGUgcGFydGl0aW9uLiAqLwogCQkJCWZvdW5kID0gRmluZFJlcGxUdXBsZUlu TG9jYWxSZWwoZWRhdGEsIHBhcnRyZWwsCkBAIC0zNTIzLDggKzM1NzEsOCBAQCBhcHBseV9oYW5k bGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCSAqIHJlbW90 ZXNsb3RfcGFydC4KIAkJCQkgKi8KIAkJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o R2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwotCQkJCXNsb3RfbW9kaWZ5X2RhdGEo cmVtb3Rlc2xvdF9wYXJ0LCBsb2NhbHNsb3QsIHBhcnRfZW50cnksCi0JCQkJCQkJCSBuZXd0dXAp OworCQkJCW1vZGlmaWVkID0gc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVzbG90X3BhcnQsIGxvY2Fs c2xvdCwgcGFydF9lbnRyeSwKKwkJCQkJCQkJCQkJbmV3dHVwKTsKIAkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKIAogCQkJCUV2YWxQbGFuUXVhbEluaXQoJmVwcXN0YXRlLCBlc3Rh dGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7CkBAIC0zNTQ5LDYgKzM1OTcsMTggQEAgYXBwbHlfaGFu ZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJRXZhbFBs YW5RdWFsU2V0U2xvdCgmZXBxc3RhdGUsIHJlbW90ZXNsb3RfcGFydCk7CiAJCQkJCVRhcmdldFBy aXZpbGVnZXNDaGVjayhwYXJ0cmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkJCSAg QUNMX1VQREFURSk7CisKKwkJCQkJLyoKKwkJCQkJICogTm9ybWFsbHkgd2UnZCBjYWxsIEV4ZWND aGVja0luZGV4ZWRBdHRyRm9yQ2hhbmdlcyBidXQKKwkJCQkJICogaGVyZSB3ZSBoYXZlIHRoZSBy ZWNvcmQgb2YgY2hhbmdlZCBjb2x1bW5zIGluIHRoZQorCQkJCQkgKiByZXBsaWNhdGlvbiBzdGF0 ZSwgc28gbGV0J3MgdXNlIHRoYXQgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWluZGV4ZWQgPSBS ZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChwYXJ0cmVsaW5mby0+cmlfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7CisJCQkJCWJtc19mcmVl KHBhcnRyZWxpbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQkJCQlwYXJ0cmVsaW5mby0+ cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gYm1zX2ludF9tZW1iZXJzKG1vZGlmaWVkLCBpbmRleGVk KTsKKwkJCQkJYm1zX2ZyZWUoaW5kZXhlZCk7CisKIAkJCQkJRXhlY1NpbXBsZVJlbGF0aW9uVXBk YXRlKHBhcnRyZWxpbmZvLCBlc3RhdGUsICZlcHFzdGF0ZSwKIAkJCQkJCQkJCQkJIGxvY2Fsc2xv dCwgcmVtb3Rlc2xvdF9wYXJ0KTsKIAkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpp bmRleCA5MTVkMGJjOTA4NC4uMzI4MjU1OTZiZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYwpAQCAtMjQ4Miw2ICsyNDgyLDcgQEAgUmVsYXRpb25EZXN0cm95UmVsYXRpb24oUmVsYXRp b24gcmVsYXRpb24sIGJvb2wgcmVtZW1iZXJfdHVwZGVzYykKIAlibXNfZnJlZShyZWxhdGlvbi0+ cmRfaWRhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAli bXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOworCWJtc19mcmVlKHJlbGF0aW9u LT5yZF9pbmRleGVkYXR0cik7CiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJkZXNjKQogCQlwZnJlZShy ZWxhdGlvbi0+cmRfcHViZGVzYyk7CiAJaWYgKHJlbGF0aW9uLT5yZF9vcHRpb25zKQpAQCAtNTI4 Myw2ICs1Mjg0LDcgQEAgUmVsYXRpb25HZXRJbmRleFByZWRpY2F0ZShSZWxhdGlvbiByZWxhdGlv bikKICAqCQkJCQkJCQkJaW5kZXggKGVtcHR5IGlmIEZVTEwpCiAgKglJTkRFWF9BVFRSX0JJVE1B UF9IT1RfQkxPQ0tJTkcJQ29sdW1ucyB0aGF0IGJsb2NrIHVwZGF0ZXMgZnJvbSBiZWluZyBIT1QK ICAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBpbmNsdWRlZCBpbiBzdW1t YXJpemluZyBpbmRleGVzCisgKglJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVECQlDb2x1bW5zIHJl ZmVyZW5jZWQgYnkgaW5kZXhlcwogICoKICAqIEF0dHJpYnV0ZSBudW1iZXJzIGFyZSBvZmZzZXQg YnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBzbyB0aGF0CiAgKiB3ZSBjYW4g aW5jbHVkZSBzeXN0ZW0gYXR0cmlidXRlcyAoZS5nLiwgT0lEKSBpbiB0aGUgYml0bWFwIHJlcHJl c2VudGF0aW9uLgpAQCAtNTMwNyw2ICs1MzA5LDcgQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRt YXAoUmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJQml0 bWFwc2V0ICAqaWRpbmRleGF0dHJzOwkvKiBjb2x1bW5zIGluIHRoZSByZXBsaWNhIGlkZW50aXR5 ICovCiAJQml0bWFwc2V0ICAqaG90YmxvY2tpbmdhdHRyczsJLyogY29sdW1ucyB3aXRoIEhPVCBi bG9ja2luZyBpbmRleGVzICovCiAJQml0bWFwc2V0ICAqc3VtbWFyaXplZGF0dHJzOwkvKiBjb2x1 bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLworCUJpdG1hcHNldCAgKmluZGV4ZWRhdHRy czsJLyogY29sdW1ucyByZWZlcmVuY2VkIGJ5IGluZGV4ZXMgKi8KIAlMaXN0CSAgICppbmRleG9p ZGxpc3Q7CiAJTGlzdAkgICAqbmV3aW5kZXhvaWRsaXN0OwogCU9pZAkJCXJlbHBraW5kZXg7CkBA IC01MzI5LDYgKzUzMzIsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiBy ZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAkJCQlyZXR1cm4gYm1zX2Nv cHkocmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0cik7CiAJCQljYXNlIElOREVYX0FUVFJfQklU TUFQX1NVTU1BUklaRUQ6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9zdW1tYXJp emVkYXR0cik7CisJCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQ6CisJCQkJcmV0dXJu IGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJCQlkZWZhdWx0OgogCQkJCWVs b2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwogCQl9CkBAIC01Mzcz LDYgKzUzNzgsNyBAQCByZXN0YXJ0OgogCWlkaW5kZXhhdHRycyA9IE5VTEw7CiAJaG90YmxvY2tp bmdhdHRycyA9IE5VTEw7CiAJc3VtbWFyaXplZGF0dHJzID0gTlVMTDsKKwlpbmRleGVkYXR0cnMg PSBOVUxMOwogCWZvcmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhPaWQg PSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTUwNSwxMCArNTUxMSwxNCBAQCByZXN0YXJ0OgogCQlibXNf ZnJlZShpZGluZGV4YXR0cnMpOwogCQlibXNfZnJlZShob3RibG9ja2luZ2F0dHJzKTsKIAkJYm1z X2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKKwkJYm1zX2ZyZWUoaW5kZXhlZGF0dHJzKTsKIAogCQln b3RvIHJlc3RhcnQ7CiAJfQogCisJLyogQ29tYmluZSBhbGwgaW5kZXggYXR0cmlidXRlcyAqLwor CWluZGV4ZWRhdHRycyA9IGJtc191bmlvbihob3RibG9ja2luZ2F0dHJzLCBzdW1tYXJpemVkYXR0 cnMpOworCiAJLyogRG9uJ3QgbGVhayB0aGUgb2xkIHZhbHVlcyBvZiB0aGVzZSBiaXRtYXBzLCBp ZiBhbnkgKi8KIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IGZhbHNlOwogCWJtc19mcmVlKHJl bGF0aW9uLT5yZF9rZXlhdHRyKTsKQEAgLTU1MjEsNiArNTUzMSw4IEBAIHJlc3RhcnQ6CiAJcmVs YXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IE5VTEw7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJk X3N1bW1hcml6ZWRhdHRyKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBOVUxMOwor CWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CisJcmVsYXRpb24tPnJkX2luZGV4 ZWRhdHRyID0gTlVMTDsKIAogCS8qCiAJICogTm93IHNhdmUgY29waWVzIG9mIHRoZSBiaXRtYXBz IGluIHRoZSByZWxjYWNoZSBlbnRyeS4gIFdlIGludGVudGlvbmFsbHkKQEAgLTU1MzUsNiArNTU0 Nyw3IEBAIHJlc3RhcnQ6CiAJcmVsYXRpb24tPnJkX2lkYXR0ciA9IGJtc19jb3B5KGlkaW5kZXhh dHRycyk7CiAJcmVsYXRpb24tPnJkX2hvdGJsb2NraW5nYXR0ciA9IGJtc19jb3B5KGhvdGJsb2Nr aW5nYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IGJtc19jb3B5KHN1bW1h cml6ZWRhdHRycyk7CisJcmVsYXRpb24tPnJkX2luZGV4ZWRhdHRyID0gYm1zX2NvcHkoaW5kZXhl ZGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IHRydWU7CiAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN4dCk7CiAKQEAgLTU1NTEsNiArNTU2NCw4IEBAIHJlc3RhcnQ6CiAJCQly ZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJ WkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsKKwkJY2FzZSBJTkRFWF9BVFRSX0JJVE1B UF9JTkRFWEVEOgorCQkJcmV0dXJuIGluZGV4ZWRhdHRyczsKIAkJZGVmYXVsdDoKIAkJCWVsb2co RVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwogCQkJcmV0dXJuIE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMTZiZjAyNTY5Mi4uOGE1OTMxYTMxMTggMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaApAQCAtNTQ5LDYgKzU0OSw3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0 aW5lCiAJCQkJCQkJCSBib29sIHdhaXQsCiAJCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwK IAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQkJCQkgQml0bWFwc2V0ICp1 cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7 CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQgcGFyYW1l dGVycyAqLwpAQCAtMTUwMiwxMiArMTUwMywxMiBAQCBzdGF0aWMgaW5saW5lIFRNX1Jlc3VsdAog dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3Qs IFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAq dG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpCisJCQkJICAgQml0bWFwc2V0ICp1cGRhdGVkX2NvbHMsIFRVX1VwZGF0 ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1 cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNy b3NzY2hlY2ssCi0JCQkJCQkJCQkJIHdhaXQsIHRtZmQsCi0JCQkJCQkJCQkJIGxvY2ttb2RlLCB1 cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJCQkJ CQkJCSB1cGRhdGVkX2NvbHMsIHVwZGF0ZV9pbmRleGVzKTsKIH0KIAogLyoKQEAgLTIwMTAsNiAr MjAxMSw3IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV9kZWxldGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4 dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9p bnRlciBvdGlkLAogCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25h cHNob3QsCisJCQkJCQkJCQkgIEJpdG1hcHNldCAqbW9kaWZpZWRfaW5kZXhlX2F0dHJzLAogCQkJ CQkJCQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CiAKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKaW5kZXggZmEyYjY1N2ZiMmYuLjk5M2RjMGU2Y2VkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKQEAgLTgwMCw1ICs4MDAsMTAgQEAgZXh0ZXJuIFJlc3VsdFJlbEluZm8gKkV4 ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJsZVN0YXRlICpub2RlLAogCQkJCQkJCQkJ CQkgICBPaWQgcmVzdWx0b2lkLAogCQkJCQkJCQkJCQkgICBib29sIG1pc3Npbmdfb2ssCiAJCQkJ CQkJCQkJCSAgIGJvb2wgdXBkYXRlX2NhY2hlKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4ZWNDaGVj a0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJ CQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnR0c19vbGQsCisJCQkJCQkJCQkJCQkgIFR1cGxl VGFibGVTbG90ICp0dHNfbmV3KTsKK2V4dGVybiBib29sIHR0c19hdHRyX2VxdWFsKE9pZCB0eXBp ZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAorCQkJCQkJICAg RGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIpOwogCiAjZW5kaWYJCQkJCQkJLyogRVhFQ1VUT1Jf SCAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMThhZThmMGQ0YmIuLjhiMDhlMDA0NWJhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNDk4LDYgKzQ5OCw3IEBAIHR5cGVkZWYgc3RydWN0IFJl c3VsdFJlbEluZm8KIAlCaXRtYXBzZXQgICpyaV9leHRyYVVwZGF0ZWRDb2xzOwogCS8qIHRydWUg aWYgdGhlIGFib3ZlIGhhcyBiZWVuIGNvbXB1dGVkICovCiAJYm9vbAkJcmlfZXh0cmFVcGRhdGVk Q29sc192YWxpZDsKKwlCaXRtYXBzZXQgICpyaV9DaGFuZ2VkSW5kZXhlZENvbHM7CiAKIAkvKiBQ cm9qZWN0aW9uIHRvIGdlbmVyYXRlIG5ldyB0dXBsZSBpbiBhbiBJTlNFUlQvVVBEQVRFICovCiAJ UHJvamVjdGlvbkluZm8gKnJpX3Byb2plY3ROZXc7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDgwMjg2MDc2YTExLi5i MjNhNzMwNmU2OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBS ZWxhdGlvbkRhdGEKIAlCaXRtYXBzZXQgICpyZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBs aWNhIGlkZW50aXR5IGluZGV4ICovCiAJQml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAv KiBjb2xzIGJsb2NraW5nIEhPVCB1cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVk YXR0cjsJLyogY29scyBpbmRleGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBz ZXQgICpyZF9pbmRleGVkYXR0cjsgLyogYWxsIGNvbHMgcmVmZXJlbmNlZCBieSBpbmRleGVzICov CiAKIAlQdWJsaWNhdGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0 b3IsIG9yIE5VTEwgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKaW5kZXggMzU2MWM2YmVmMGIuLmQzZmJi OGIwOTNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKQEAgLTcxLDYgKzcxLDcgQEAgdHlwZWRlZiBlbnVt IEluZGV4QXR0ckJpdG1hcEtpbmQKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVksCiAJ SU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklUTUFQX1NVTU1B UklaRUQsCisJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhBdHRyQml0bWFwS2lu ZDsKIAogZXh0ZXJuIEJpdG1hcHNldCAqUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAoUmVsYXRp b24gcmVsYXRpb24sCi0tIAoyLjQ5LjAKCg== --691e05bd_593c4f2_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?v21-0003-Replace-index=5Funchanged=5Fby=5Fupdate-with-ri=5FChange.patch?=" RnJvbSBjZjQxODI3ZGQyZWQxM2U1ZmEwMjc2M2JkZGVjNTcwMTI1YWY2MjFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogRnJpLCAz MSBPY3QgMjAyNSAxNDo1NToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDMvNF0gUmVwbGFj ZSBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlIHdpdGgKIHJpX0NoYW5nZWRJbmRleGVkQ29scwoK SW4gZXhlY0luZGV4aW5nIG9uIHVwZGF0ZXMgd2UnZCBsaWtlIHRvIHBhc3MgYSBoaW50IHRvIHRo ZSBpbmRleGluZyBjb2RlCndoZW4gdGhlIGluZGV4ZWQgYXR0cmlidXRlcyBhcmUgdW5jaGFuZ2Vk LiAgVGhpcyBjb21taXQgcmVwbGFjZXMgdGhlIG5vdwpyZWR1bmRhbnQgY29kZSBpbiBpbmRleF91 bmNoYW5nZWRfYnlfdXBkYXRlIHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24KZm91bmQgZWFybGll ciBpbiB0aGUgdXBkYXRlIHBhdGguCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5j ICAgICAgfCAgIDIgLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgfCAxNTYg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgfCAg IDQgLQogNCBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTYzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvdG9hc3RpbmcuYwppbmRleCA4NzRhOGZjODlhZC4uNWQ4MTliZGE1NGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3RvYXN0aW5nLmMKQEAgLTMwMCw4ICszMDAsNiBAQCBjcmVhdGVfdG9hc3RfdGFibGUo UmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5m by0+aWlfVW5pcXVlID0gdHJ1ZTsKIAlpbmRleEluZm8tPmlpX051bGxzTm90RGlzdGluY3QgPSBm YWxzZTsKIAlpbmRleEluZm8tPmlpX1JlYWR5Rm9ySW5zZXJ0cyA9IHRydWU7Ci0JaW5kZXhJbmZv LT5paV9DaGVja2VkVW5jaGFuZ2VkID0gZmFsc2U7Ci0JaW5kZXhJbmZvLT5paV9JbmRleFVuY2hh bmdlZCA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IGZhbHNlOwogCWluZGV4 SW5mby0+aWlfQnJva2VuSG90Q2hhaW4gPSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX1BhcmFsbGVs V29ya2VycyA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhp bmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQwMTYwNmY4 NDBhLi5mYjFiYzNhNDgwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0lu ZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEz OCwxMSArMTM4LDYgQEAgc3RhdGljIGJvb2wgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25z dHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogc3RhdGljIGJvb2wgaW5kZXhf cmVjaGVja19jb25zdHJhaW50KFJlbGF0aW9uIGluZGV4LCBjb25zdCBPaWQgKmNvbnN0cl9wcm9j cywKIAkJCQkJCQkJCSBjb25zdCBEYXR1bSAqZXhpc3RpbmdfdmFsdWVzLCBjb25zdCBib29sICpl eGlzdGluZ19pc251bGwsCiAJCQkJCQkJCQkgY29uc3QgRGF0dW0gKm5ld192YWx1ZXMpOwotc3Rh dGljIGJvb2wgaW5kZXhfdW5jaGFuZ2VkX2J5X3VwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAotCQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0ZSwgSW5kZXhJbmZvICppbmRleEluZm8s Ci0JCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4UmVsYXRpb24pOwotc3RhdGljIGJvb2wgaW5kZXhf ZXhwcmVzc2lvbl9jaGFuZ2VkX3dhbGtlcihOb2RlICpub2RlLAotCQkJCQkJCQkJCQlCaXRtYXBz ZXQgKmFsbFVwZGF0ZWRDb2xzKTsKIHN0YXRpYyB2b2lkIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RF bXB0eShSZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwKIAkJCQkJ CQkJCQljaGFyIHR5cHR5cGUsIE9pZCBhdHR0eXBpZCk7CiAKQEAgLTQ0MCwxMCArNDM1LDcgQEAg RXhlY0luc2VydEluZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAq IGluZGV4LiAgSWYgd2UncmUgYmVpbmcgY2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRl bWVudCwKIAkJICogY29uc2lkZXIgaWYgdGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQg c2hvdWxkIGJlIHBhc3NlZC4KIAkJICovCi0JCWluZGV4VW5jaGFuZ2VkID0gdXBkYXRlICYmIGlu ZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUocmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCQkJCQkJCSBl c3RhdGUsCi0JCQkJCQkJCQkJCQkJCQkgaW5kZXhJbmZvLAotCQkJCQkJCQkJCQkJCQkJIGluZGV4 UmVsYXRpb24pOworCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBibXNfaXNfZW1wdHkocmVz dWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKTsKIAogCQlzYXRpc2ZpZXNDb25zdHJh aW50ID0KIAkJCWluZGV4X2luc2VydChpbmRleFJlbGF0aW9uLCAvKiBpbmRleCByZWxhdGlvbiAq LwpAQCAtOTkzLDE1MiArOTg1LDYgQEAgaW5kZXhfcmVjaGVja19jb25zdHJhaW50KFJlbGF0aW9u IGluZGV4LCBjb25zdCBPaWQgKmNvbnN0cl9wcm9jcywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoK LSAqIENoZWNrIGlmIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpIHNob3VsZCBwYXNzIGluZGV4VW5j aGFuZ2VkIGhpbnQuCi0gKgotICogV2hlbiB0aGUgZXhlY3V0b3IgcGVyZm9ybXMgYW4gVVBEQVRF IHRoYXQgcmVxdWlyZXMgYSBuZXcgcm91bmQgb2YgaW5kZXgKLSAqIHR1cGxlcywgZGV0ZXJtaW5l IGlmIHdlIHNob3VsZCBwYXNzICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgZm9yIG9uZQot ICogc2luZ2xlIGluZGV4LgotICovCi1zdGF0aWMgYm9vbAotaW5kZXhfdW5jaGFuZ2VkX2J5X3Vw ZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBFU3RhdGUgKmVzdGF0ZSwKLQkJCQkJ CSAgSW5kZXhJbmZvICppbmRleEluZm8sIFJlbGF0aW9uIGluZGV4UmVsYXRpb24pCi17Ci0JQml0 bWFwc2V0ICAqdXBkYXRlZENvbHM7Ci0JQml0bWFwc2V0ICAqZXh0cmFVcGRhdGVkQ29sczsKLQlC aXRtYXBzZXQgICphbGxVcGRhdGVkQ29sczsKLQlib29sCQloYXNleHByZXNzaW9uID0gZmFsc2U7 Ci0JTGlzdAkgICAqaWR4RXhwcnM7Ci0KLQkvKgotCSAqIENoZWNrIGNhY2hlIGZpcnN0Ci0JICov Ci0JaWYgKGluZGV4SW5mby0+aWlfQ2hlY2tlZFVuY2hhbmdlZCkKLQkJcmV0dXJuIGluZGV4SW5m by0+aWlfSW5kZXhVbmNoYW5nZWQ7Ci0JaW5kZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2VkID0g dHJ1ZTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIGluZGV4ZWQgYXR0cmlidXRlIG92ZXJsYXAgd2l0 aCB1cGRhdGVkIGNvbHVtbnMuCi0JICoKLQkgKiBPbmx5IGRvIHRoaXMgZm9yIGtleSBjb2x1bW5z LiAgQSBjaGFuZ2UgdG8gYSBub24ta2V5IGNvbHVtbiB3aXRoaW4gYW4KLQkgKiBJTkNMVURFIGlu ZGV4IHNob3VsZCBub3QgYmUgY291bnRlZCBoZXJlLiAgTm9uLWtleSBjb2x1bW4gdmFsdWVzIGFy ZQotCSAqIG9wYXF1ZSBwYXlsb2FkIHN0YXRlIHRvIHRoZSBpbmRleCBBTSwgYSBsaXR0bGUgbGlr ZSBhbiBleHRyYSB0YWJsZSBUSUQuCi0JICoKLQkgKiBOb3RlIHRoYXQgcm93LWxldmVsIEJFRk9S RSB0cmlnZ2VycyB3b24ndCBhZmZlY3Qgb3VyIGJlaGF2aW9yLCBzaW5jZQotCSAqIHRoZXkgZG9u J3QgYWZmZWN0IHRoZSB1cGRhdGVkQ29scyBiaXRtYXBzIGdlbmVyYWxseS4gIEl0IGRvZXNuJ3Qg c2VlbQotCSAqIHdvcnRoIHRoZSB0cm91YmxlIG9mIGNoZWNraW5nIHdoaWNoIGF0dHJpYnV0ZXMg d2VyZSBjaGFuZ2VkIGRpcmVjdGx5LgotCSAqLwotCXVwZGF0ZWRDb2xzID0gRXhlY0dldFVwZGF0 ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZXh0cmFVcGRhdGVkQ29scyA9IEV4ZWNH ZXRFeHRyYVVwZGF0ZWRDb2xzKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSk7Ci0JZm9yIChpbnQgYXR0 ciA9IDA7IGF0dHIgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGF0dHIrKykKLQl7 Ci0JCWludAkJCWtleWNvbCA9IGluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1thdHRyXTsK LQotCQlpZiAoa2V5Y29sIDw9IDApCi0JCXsKLQkJCS8qCi0JCQkgKiBTa2lwIGV4cHJlc3Npb25z IGZvciBub3csIGJ1dCByZW1lbWJlciB0byBkZWFsIHdpdGggdGhlbSBsYXRlcgotCQkJICogb24K LQkJCSAqLwotCQkJaGFzZXhwcmVzc2lvbiA9IHRydWU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0J CWlmIChibXNfaXNfbWVtYmVyKGtleWNvbCAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVO dW1iZXIsCi0JCQkJCQkgIHVwZGF0ZWRDb2xzKSB8fAotCQkJYm1zX2lzX21lbWJlcihrZXljb2wg LSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAotCQkJCQkJICBleHRyYVVwZGF0 ZWRDb2xzKSkKLQkJewotCQkJLyogQ2hhbmdlZCBrZXkgY29sdW1uIC0tIGRvbid0IGhpbnQgZm9y IHRoaXMgaW5kZXggKi8KLQkJCWluZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQgPSBmYWxzZTsK LQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCS8qCi0JICogV2hlbiB3ZSBnZXQgdGhpcyBm YXIgYW5kIGluZGV4IGhhcyBubyBleHByZXNzaW9ucywgcmV0dXJuIHRydWUgc28gdGhhdAotCSAq IGluZGV4X2luc2VydCgpIGNhbGwgd2lsbCBnbyBvbiB0byBwYXNzICdpbmRleFVuY2hhbmdlZCcg PSB0cnVlIGhpbnQuCi0JICoKLQkgKiBUaGUgX2Fic2VuY2VfIG9mIGFuIGluZGV4ZWQga2V5IGF0 dHJpYnV0ZSB0aGF0IG92ZXJsYXBzIHdpdGggdXBkYXRlZAotCSAqIGF0dHJpYnV0ZXMgKGluIGFk ZGl0aW9uIHRvIHRoZSB0b3RhbCBhYnNlbmNlIG9mIGluZGV4ZWQgZXhwcmVzc2lvbnMpCi0JICog c2hvd3MgdGhhdCB0aGUgaW5kZXggYXMgYSB3aG9sZSBpcyBsb2dpY2FsbHkgdW5jaGFuZ2VkIGJ5 IFVQREFURS4KLQkgKi8KLQlpZiAoIWhhc2V4cHJlc3Npb24pCi0JewotCQlpbmRleEluZm8tPmlp X0luZGV4VW5jaGFuZ2VkID0gdHJ1ZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiBO ZWVkIHRvIHBhc3Mgb25seSBvbmUgYm1zIHRvIGV4cHJlc3Npb25fdHJlZV93YWxrZXIgaGVscGVy IGZ1bmN0aW9uLgotCSAqIEF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IGluIGNvbW1vbiBjYXNlIHdo ZXJlIHRoZXJlIGFyZSBubyBleHRyYSBjb2xzLgotCSAqLwotCWlmICghZXh0cmFVcGRhdGVkQ29s cykKLQkJYWxsVXBkYXRlZENvbHMgPSB1cGRhdGVkQ29sczsKLQllbHNlCi0JCWFsbFVwZGF0ZWRD b2xzID0gYm1zX3VuaW9uKHVwZGF0ZWRDb2xzLCBleHRyYVVwZGF0ZWRDb2xzKTsKLQotCS8qCi0J ICogV2UgaGF2ZSB0byB3b3JrIHNsaWdodGx5IGhhcmRlciBpbiB0aGUgZXZlbnQgb2YgaW5kZXhl ZCBleHByZXNzaW9ucywKLQkgKiBidXQgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBiZWZv cmU6IHRyeSB0byBmaW5kIGNvbHVtbnMgKFZhcnMsCi0JICogYWN0dWFsbHkpIHRoYXQgb3Zlcmxh cCB3aXRoIGtub3duLXVwZGF0ZWQgY29sdW1ucy4KLQkgKgotCSAqIElmIHdlIGZpbmQgYW55IG1h dGNoaW5nIFZhcnMsIGRvbid0IHBhc3MgaGludCBmb3IgaW5kZXguICBPdGhlcndpc2UKLQkgKiBw YXNzIGhpbnQuCi0JICovCi0JaWR4RXhwcnMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMo aW5kZXhSZWxhdGlvbik7Ci0JaGFzZXhwcmVzc2lvbiA9IGluZGV4X2V4cHJlc3Npb25fY2hhbmdl ZF93YWxrZXIoKE5vZGUgKikgaWR4RXhwcnMsCi0JCQkJCQkJCQkJCQkJYWxsVXBkYXRlZENvbHMp OwotCWxpc3RfZnJlZShpZHhFeHBycyk7Ci0JaWYgKGV4dHJhVXBkYXRlZENvbHMpCi0JCWJtc19m cmVlKGFsbFVwZGF0ZWRDb2xzKTsKLQotCWlmIChoYXNleHByZXNzaW9uKQotCXsKLQkJaW5kZXhJ bmZvLT5paV9JbmRleFVuY2hhbmdlZCA9IGZhbHNlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBEZWxpYmVyYXRlbHkgZG9uJ3QgY29uc2lkZXIgaW5kZXggcHJlZGljYXRlcy4gIFdl IHNob3VsZCBldmVuIGdpdmUgdGhlCi0JICogaGludCB3aGVuIHJlc3VsdCByZWwncyAidXBkYXRl ZCB0dXBsZSIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5kZXgKLQkgKiB0dXBsZSwgd2hpY2ggaXMg cG9zc2libGUgd2l0aCBhIHBhcnRpYWwgaW5kZXggKHByb3ZpZGVkIHRoZSB1c3VhbAotCSAqIGNv bmRpdGlvbnMgYXJlIG1ldCkuCi0JICovCi0JaW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCA9 IHRydWU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJbmRleGVkIGV4cHJlc3Npb24gaGVs cGVyIGZvciBpbmRleF91bmNoYW5nZWRfYnlfdXBkYXRlKCkuCi0gKgotICogUmV0dXJucyB0cnVl IHdoZW4gVmFyIHRoYXQgYXBwZWFycyB3aXRoaW4gYWxsVXBkYXRlZENvbHMgbG9jYXRlZC4KLSAq Lwotc3RhdGljIGJvb2wKLWluZGV4X2V4cHJlc3Npb25fY2hhbmdlZF93YWxrZXIoTm9kZSAqbm9k ZSwgQml0bWFwc2V0ICphbGxVcGRhdGVkQ29scykKLXsKLQlpZiAobm9kZSA9PSBOVUxMKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlpZiAoSXNBKG5vZGUsIFZhcikpCi0JewotCQlWYXIJCSAgICp2YXIg PSAoVmFyICopIG5vZGU7Ci0KLQkJaWYgKGJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubyAtIEZp cnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkgIGFsbFVwZGF0ZWRDb2xz KSkKLQkJewotCQkJLyogVmFyIHdhcyB1cGRhdGVkIC0tIGluZGljYXRlcyB0aGF0IHdlIHNob3Vs ZCBub3QgaGludCAqLwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKiBTdGlsbCBoYXZlbid0 IGZvdW5kIGEgcmVhc29uIHRvIG5vdCBwYXNzIHRoZSBoaW50ICovCi0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBpbmRleF9leHByZXNz aW9uX2NoYW5nZWRfd2Fsa2VyLAotCQkJCQkJCQkgIGFsbFVwZGF0ZWRDb2xzKTsKLX0KLQogLyoK ICAqIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eSAtIHJhaXNlIGFuIGVycm9yIGlmIHRoZSB0 dXBsZSBoYXMgYW4gZW1wdHkKICAqIHJhbmdlIG9yIG11bHRpcmFuZ2UgaW4gdGhlIGdpdmVuIGF0 dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggZTJkOWU5YmU0MWEuLmQ2OWRjMDkwYWE0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpAQCAtODQ1LDggKzg0NSw2IEBAIG1ha2VJbmRleEluZm8o aW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwgTGlzdCAqZXhwcmVzc2lv bnMsCiAJbi0+aWlfVW5pcXVlID0gdW5pcXVlOwogCW4tPmlpX051bGxzTm90RGlzdGluY3QgPSBu dWxsc19ub3RfZGlzdGluY3Q7CiAJbi0+aWlfUmVhZHlGb3JJbnNlcnRzID0gaXNyZWFkeTsKLQlu LT5paV9DaGVja2VkVW5jaGFuZ2VkID0gZmFsc2U7Ci0Jbi0+aWlfSW5kZXhVbmNoYW5nZWQgPSBm YWxzZTsKIAluLT5paV9Db25jdXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemlu ZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFw czsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggOGIwOGUwMDQ1YmEuLjg5ODM2OGZiOGNiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMjAyLDEwICsyMDIsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eEluZm8KIAlib29sCQlpaV9OdWxsc05vdERpc3RpbmN0OwogCS8qIGlzIGl0IHZhbGlkIGZvciBp bnNlcnRzPyAqLwogCWJvb2wJCWlpX1JlYWR5Rm9ySW5zZXJ0czsKLQkvKiBJbmRleFVuY2hhbmdl ZCBzdGF0dXMgZGV0ZXJtaW5lZCB5ZXQ/ICovCi0JYm9vbAkJaWlfQ2hlY2tlZFVuY2hhbmdlZDsK LQkvKiBhbWluc2VydCBoaW50LCBjYWNoZWQgZm9yIHJldGFpbCBpbnNlcnRzICovCi0JYm9vbAkJ aWlfSW5kZXhVbmNoYW5nZWQ7CiAJLyogYXJlIHdlIGRvaW5nIGEgY29uY3VycmVudCBpbmRleCBi dWlsZD8gKi8KIAlib29sCQlpaV9Db25jdXJyZW50OwogCS8qIGRpZCB3ZSBkZXRlY3QgYW55IGJy b2tlbiBIT1QgY2hhaW5zPyAqLwotLSAKMi40OS4wCgo= --691e05bd_593c4f2_db0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v21-0004-Enable-HOT-updates-for-expression-and-partial-in.patch" RnJvbSA2MzIxNzlmY2Q2ODAyMzQ4ZTk0MjRiYWU0YjQxOWQxM2ZlYjI0YzBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogU3VuLCAy NiBPY3QgMjAyNSAxMDo0OToyNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIxIDQvNF0gRW5hYmxl IEhPVCB1cGRhdGVzIGZvciBleHByZXNzaW9uIGFuZCBwYXJ0aWFsIGluZGV4ZXMKCkN1cnJlbnRs eSwgUG9zdGdyZVNRTCBjb25zZXJ2YXRpdmVseSBwcmV2ZW50cyBIT1QgKEhlYXAtT25seSBUdXBs ZSkKdXBkYXRlcyB3aGVuZXZlciBhbnkgaW5kZXhlZCBjb2x1bW4gY2hhbmdlcywgZXZlbiBpZiB0 aGUgaW5kZXhlZApwb3J0aW9uIG9mIHRoYXQgY29sdW1uIHJlbWFpbnMgaWRlbnRpY2FsLiBUaGlz IGlzIG92ZXJseSByZXN0cmljdGl2ZQpmb3IgZXhwcmVzc2lvbiBpbmRleGVzICh3aGVyZSBmKGNv bHVtbikgbWlnaHQgbm90IGNoYW5nZSBldmVuIHdoZW4KY29sdW1uIGNoYW5nZXMpIGFuZCBwYXJ0 aWFsIGluZGV4ZXMgKHdoZXJlIGJvdGggb2xkIGFuZCBuZXcgdHVwbGVzCm1pZ2h0IGZhbGwgb3V0 c2lkZSB0aGUgcHJlZGljYXRlKS4gIEZpbmFsbHksIGluZGV4IEFNcyBwbGF5IG5vIHJvbGUKaW4g ZGVjaWRpbmcgd2hlbiB0aGV5IG5lZWQgYSBuZXcgaW5kZXggZW50cnkgb24gdXBkYXRlLCB0aGUg cnVsZXMKcmVnYXJkaW5nIHRoYXQgYXJlIGJhc2VkIG9uIGJpbmFyeSBlcXVhbGl0eSBhbmQgdGhl IEhFQVAncyBtb2RlbCBmb3IKTVZDQyBhbmQgcmVsYXRlZCBIT1Qgb3B0aW1pemF0aW9uLiAgSGVy ZSB3ZSBvcGVuIHRoYXQgZG9vciBhIGJpdCBzbwphcyB0byBlbmFibGUgbW9yZSBudWFuY2VkIGNv bnRyb2wgb3ZlciB0aGUgcHJvY2Vzcy4gIFRoaXMgZW5hYmxlcwppbmRleCBBTXMgdGhhdCByZXF1 aXJlIGJpbmFyeSBlcXVhbGl0eSAoYXMgaXMgdGhlIGNhc2UgZm9yIG5idHJlZSkKdG8gZG8gdGhh dCB3aXRob3V0IGRpc2FsbG93aW5nIHR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgY2hlY2tpbmcgZm9y Cm90aGVyIGluZGV4ZXMuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBpbXByb3ZlbWVu dHMgdG8gZW5hYmxlIEhPVCB1cGRhdGVzIGluCnRoZXNlIGNhc2VzOgoKQWRkIGFtY29tcGFyZWRh dHVtcygpIGNhbGxiYWNrIHRvIEluZGV4QW1Sb3V0aW5lLiBUaGlzIGFsbG93cyBpbmRleAphY2Nl c3MgbWV0aG9kcyBsaWtlIEdJTiB0byBwcm92aWRlIGN1c3RvbSBsb2dpYyBmb3IgY29tcGFyaW5n IGRhdHVtcyBieQpleHRyYWN0aW5nIGFuZCBjb21wYXJpbmcgaW5kZXgga2V5cyByYXRoZXIgdGhh biBjb21wYXJpbmcgdGhlIHJhdwpkYXR1bXMuIEdJTiBpbmRleGVzIG5vdyBpbXBsZW1lbnQgZ2lu Y29tcGFyZWRhdHVtcygpIHdoaWNoIGV4dHJhY3RzIGtleXMKZnJvbSBib3RoIGRhdHVtcyBhbmQg Y29tcGFyZXMgdGhlIHJlc3VsdGluZyBrZXkgc2V0cy4gIEFsc28sIGFzCm1lbnRpb25lZCBlYXJs aWVyIG5idHJlZSBpbXBsZW1lbnRzIHRoaXMgQVBJIGFuZCB1c2VzIGRhdHVtSXNFcXVhbCgpIGZv cgplcXVhbGl0eSBzbyB0aGF0IHRoZSBtYW5uZXIgaW4gd2hpY2ggaXQgZGVkdXBsaWNhdGVzIFRJ RHMgb24gcGFnZSBzcGxpdApkb2Vzbid0IGhhdmUgdG8gY2hhbmdlLiAgVGhpcyBpcyBub3QgYSBy ZXF1aXJlZCBBUEksIHdoZW4gbm90CmltcGxlbWVudGVkIHRoZSBleGVjdXRvciB3aWxsIGNvbXBh cmUgVHVwbGVUYWJsZVNsb3QgZGF0dW0gZm9yIGVxdWFsaXR5CnVzaW5nIHR5cGUtc3BlY2lmaWMg b3BlcmF0b3JzIGFuZCB0YWtlIGludG8gYWNjb3VudCBjb2xsYXRpb24gc28gdGhhdCBhbgp1cGRh dGUgZnJvbSAiQXBwbGUiIHRvICJBUFBMRSIgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGluZGV4IGNh biBub3cgYmUKSE9ULgoKRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKCkgaXMgcmUtd3Jp dHRlbiB0byBmaW5kIHRoZSBzZXQgb2YKbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQg dHJpZ2dlciBuZXcgaW5kZXggdHVwbGVzIG9uIHVwZGF0ZWQuCkZvciBwYXJ0aWFsIGluZGV4ZXMs IHRoaXMgY2hlY2tzIHdoZXRoZXIgYm90aCBvbGQgYW5kIG5ldyB0dXBsZXMgc2F0aXNmeQpvciBm YWlsIHRoZSBwcmVkaWNhdGUuIEZvciBleHByZXNzaW9uIGluZGV4ZXMsIHRoaXMgdXNlcyB0eXBl LXNwZWNpZmljCmVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIGNvbXB1dGVkIHZhbHVlcy4g Rm9yIGV4dHJhY3Rpb24tYmFzZWQKaW5kZXhlcyAoR0lOL1JVTSkgdGhhdCBpbXBsZW1lbnQgYW1j b21wYXJlZGF0dW1zKCkgaXQgdXNlcyB0aGF0LgoKSW1wb3J0YW50bHksIHRhYmxlIGFjY2VzcyBt ZXRob2RzIGNhbiBzdGlsbCBzaWduYWwgdXNpbmcgVFVfVXBkYXRlIGlmCmFsbCwgbm9uZSwgb3Ig b25seSBzdW1tYXJpemluZyBpbmRleGVzIHNob3VsZCBiZSB1cGRhdGVkLiAgV2hpbGUgdGhlCmV4 ZWN1dG9yIGxheWVyIG5vdyBvd25zIGRldGVybWluaW5nIHdoYXQgaGFzIGNoYW5nZWQgZHVlIHRv IGFuIHVwZGF0ZQphbmQgaXMgaW50ZXJlc3RlZCBpbiBvbmx5IHVwZGF0aW5nIHRoZSBtaW5pbXVt IG51bWJlciBvZiBpbmRleGVzCnBvc3NpYmxlLCB0aGUgdGFibGUgQU0gY2FuIG92ZXJyaWRlIHRo YXQgd2hpbGUgcGVyZm9ybWluZwp0YWJsZV90dXBsZV91cGRhdGUoKSwgd2hpY2ggaXMgd2hhdCBo ZWFwIGRvZXMuICBXaGlsZSB0aGlzIHNpZ25hbCBpcwp2ZXJ5IHNwZWNpZmljIHRvIGhvdyB0aGUg aGVhcCBpbXBsZW1lbnRzIE1WQ0MgYW5kIGl0cyBIT1Qgb3B0aW1pemF0aW9uLAp3ZSdsbCBsZWF2 ZSByZXBsYWNpbmcgdGhhdCBmb3IgYW5vdGhlciBkYXkuCgpUaGlzIG9wdGltaXphdGlvbiB0cmFk ZXMgb2ZmIHNvbWUgbmV3IG92ZXJoZWFkIGZvciB0aGUgcG90ZW50aWFsIGZvcgptb3JlIHVwZGF0 ZXMgdG8gdXNlIHRoZSBIT1Qgb3B0aW1pemVkIHBhdGggYW5kIGF2b2lkIGluZGV4IGFuZCBoZWFw CmJsb2F0LiAgVGhpcyBzaG91bGQgc2lnbmlmaWNhbnRseSBpbXByb3ZlIHVwZGF0ZSBwZXJmb3Jt YW5jZSBmb3IgdGFibGVzCndpdGggZXhwcmVzc2lvbiBpbmRleGVzLCBwYXJ0aWFsIGluZGV4ZXMs IGFuZCBHSU4vR2lTVCBpbmRleGVzIG9uCmNvbXBsZXggZGF0YSB0eXBlcyBsaWtlIEpTT05CIGFu ZCB0c3ZlY3Rvciwgd2hpbGUgbWFpbnRhaW5pbmcgY29ycmVjdAppbmRleCBzZW1hbnRpY3MuICBN aW5pbWFsIGFkZGl0aW9uYWwgb3ZlcmhlYWQgZHVlIHRvIHR5cGUtc3BlY2lmaWMKZXF1YWxpdHkg Y2hlY2tpbmcgc2hvdWxkIGJlIHdhc2hlZCBvdXQgYnkgdGhlIGJlbmVmaXRzIG9mIHVwZGF0aW5n CmluZGV4ZXMgZmV3ZXIgdGltZXMuCgpPbmUgbm90YWJsZSB0cmFkZS1vZmYgaXMgdGhhdCB0aGVy ZSBhcmUgbW9yZSBjYWxscyB0byBGb3JtSW5kZXhEYXR1bSgpCmFzIGEgcmVzdWx0LiAgQ2FjaGlu ZyB0aGVzZSBtaWdodCByZWR1Y2Ugc29tZSBvZiB0aGF0IG92ZXJoZWFkLCBidXQgbm90CmFsbC4g IFRoaXMgbGVhZCB0byB0aGUgY2hhbmdlIGluIHRoZSBmcmVxdWVuY3kgZm9yIGV4cHJlc3Npb25z IGluIHRoZQpzcGVjIHVwZGF0ZSB0ZXN0IHRvIG91dHB1dCBub3RpY2UgbWVzc2FnZXMsIGJ1dCBk b2VzIG5vdCBpbXBhY3QKY29ycmVjdG5lc3MuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYyAgICAgICAgICAgICAgfCAgIDk0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYyAgICAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jICAgICAgfCAgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlZS5jICAgICAgICAgICAgfCAgIDM4ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtLmMgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 c3RyYXAuYyAgICAgICAgICAgICB8ICAgIDggKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j ICAgICAgICAgICAgICAgICAgIHwgICA1NyArCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5n LmMgICAgICAgICAgICAgICAgfCAgIDE2ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5n LmMgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jICAgICAgICAgICB8ICAgNDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jICAgICAgICB8ICA0MzcgKysrKystLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGku aCAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o ICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5o ICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o ICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4Lmgg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggICAgICAgICAgICAgICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgMTkgKwogLi4uL2V4cGVjdGVkL2luc2VydC1jb25mbGljdC1z cGVjY29uZmxpY3Qub3V0IHwgICAyMCArCiAuLi4vZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25faW5k ZXhlcy5vdXQgICAgICAgfCAxMDA3ICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICA2ICsKIC4uLi9yZWdyZXNzL3NxbC9o b3RfZXhwcmVzc2lvbl9pbmRleGVzLnNxbCAgICB8ICA3NDcgKysrKysrKysrKysrCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgICAxICsKIDI2IGZpbGVz IGNoYW5nZWQsIDI0NjEgaW5zZXJ0aW9ucygrKSwgMTI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25faW5kZXhl cy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9ob3RfZXhwcmVz c2lvbl9pbmRleGVzLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBjYjMzMzE5MjFjYi4u MzZlNjM5NTUyZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBi cmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt dmFsaWRhdGUgPSBicmludmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBhcmVkYXR1bXMgPSBO VUxMOwogCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt YmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnJpbnJl c2NhbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggNzhmN2I3YTI0OTUuLjg1ZTI1ZWQ3 M2U4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog CkBAIC03OCw2ICs3OSw3IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRp bmUtPmFtcHJvcGVydHkgPSBOVUxMOwogCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGdp bmJ1aWxkcGhhc2VuYW1lOwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGdpbnZhbGlkYXRlOwor CWFtcm91dGluZS0+YW1jb21wYXJlZGF0dW1zID0gZ2luY29tcGFyZWRhdHVtczsKIAlhbXJvdXRp bmUtPmFtYWRqdXN0bWVtYmVycyA9IGdpbmFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJl Z2luc2NhbiA9IGdpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lucmVzY2Fu OwpAQCAtNDc3LDEzICs0NzksNiBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIsIHZvaWQgKmFyZykKIAlyZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiBFeHRyYWN0IHRo ZSBpbmRleCBrZXkgdmFsdWVzIGZyb20gYW4gaW5kZXhhYmxlIGl0ZW0KLSAqCi0gKiBUaGUgcmVz dWx0aW5nIGtleSB2YWx1ZXMgYXJlIHNvcnRlZCwgYW5kIGFueSBkdXBsaWNhdGVzIGFyZSByZW1v dmVkLgotICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyByZWR1bmRhbnQgaW5kZXggZW50cmllcy4K LSAqLwogRGF0dW0gKgogZ2luRXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZz ZXROdW1iZXIgYXR0bnVtLAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxsLApAQCAtNzI5 LDMgKzcyNCw4OCBAQCBnaW5idWlsZHBoYXNlbmFtZShpbnQ2NCBwaGFzZW51bSkKIAkJCXJldHVy biBOVUxMOwogCX0KIH0KKworLyoKKyAqIGdpbmNvbXBhcmVkYXR1bXMgLSBDb21wYXJlIHR3byBk YXR1bXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgcHJvZHVjZSBpZGVudGljYWwga2V5cworICoKKyAq IFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMga2V5cyBmcm9tIGJvdGggb2xkX2RhdHVtIGFuZCBuZXdf ZGF0dW0gdXNpbmcgdGhlCisgKiBvcGNsYXNzJ3MgZXh0cmFjdFZhbHVlIGZ1bmN0aW9uLCB0aGVu IGNvbXBhcmVzIHRoZSBleHRyYWN0ZWQga2V5IGFycmF5cy4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUga2V5IHNldHMgYXJlIGlkZW50aWNhbCAoc2FtZSBrZXlzLCBzYW1lIGNvdW50cykuCisgKgor ICogVGhpcyBlbmFibGVzIEhPVCB1cGRhdGVzIGZvciBHSU4gaW5kZXhlcyB3aGVuIHRoZSBpbmRl eGVkIHBvcnRpb25zIG9mIGEKKyAqIHZhbHVlIGhhdmVuJ3QgY2hhbmdlZCwgZXZlbiBpZiB0aGUg dmFsdWUgaXRzZWxmIGhhcyBjaGFuZ2VkLgorICoKKyAqIEV4YW1wbGU6IEpTT05CIGNvbHVtbiB3 aXRoIEdJTiBpbmRleC4gSWYgYW4gdXBkYXRlIGNoYW5nZXMgYSBub24taW5kZXhlZAorICoga2V5 IGluIHRoZSBKU09OQiBkb2N1bWVudCwgdGhlIGV4dHJhY3RlZCBrZXlzIGFyZSBpZGVudGljYWwg YW5kIHdlIGNhbgorICogZG8gYSBIT1QgdXBkYXRlLgorICovCitib29sCitnaW5jb21wYXJlZGF0 dW1zKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bnVtLAorCQkJCSBEYXR1bSBvbGRfZGF0dW0sIGJv b2wgb2xkX2lzbnVsbCwKKwkJCQkgRGF0dW0gbmV3X2RhdHVtLCBib29sIG5ld19pc251bGwpCit7 CisJR2luU3RhdGUJZ2luc3RhdGU7CisJRGF0dW0JICAgKm9sZF9rZXlzOworCURhdHVtCSAgICpu ZXdfa2V5czsKKwlHaW5OdWxsQ2F0ZWdvcnkgKm9sZF9jYXRlZ29yaWVzOworCUdpbk51bGxDYXRl Z29yeSAqbmV3X2NhdGVnb3JpZXM7CisJaW50MzIJCW9sZF9ua2V5czsKKwlpbnQzMgkJbmV3X25r ZXlzOworCU1lbW9yeUNvbnRleHQgdG1wY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKworCS8qIEhhbmRsZSBOVUxMIGNhc2VzICovCisJ aWYgKG9sZF9pc251bGwgIT0gbmV3X2lzbnVsbCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChvbGRf aXNudWxsKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIENyZWF0ZSB0ZW1wb3JhcnkgY29udGV4dCBm b3IgZXh0cmFjdGlvbiB3b3JrICovCisJdG1wY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJHSU4gZGF0dW0gY29tcGFyaXNv biIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJaW5pdEdpblN0YXRlKCZnaW5z dGF0ZSwgaW5kZXgpOworCisJLyoKKwkgKiBFeHRyYWN0IGtleXMgZnJvbSBib3RoIGRhdHVtcyB1 c2luZyBleGlzdGluZyBHSU4gaW5mcmFzdHJ1Y3R1cmUuCisJICovCisJb2xkX2tleXMgPSBnaW5F eHRyYWN0RW50cmllcygmZ2luc3RhdGUsIGF0dG51bSwgb2xkX2RhdHVtLCBvbGRfaXNudWxsLAor CQkJCQkJCQkgJm9sZF9ua2V5cywgJm9sZF9jYXRlZ29yaWVzKTsKKwluZXdfa2V5cyA9IGdpbkV4 dHJhY3RFbnRyaWVzKCZnaW5zdGF0ZSwgYXR0bnVtLCBuZXdfZGF0dW0sIG5ld19pc251bGwsCisJ CQkJCQkJCSAmbmV3X25rZXlzLCAmbmV3X2NhdGVnb3JpZXMpOworCisJLyogRGlmZmVyZW50IG51 bWJlciBvZiBrZXlzIOKGkiBkZWZpbml0ZWx5IGRpZmZlcmVudCAqLworCWlmIChvbGRfbmtleXMg IT0gbmV3X25rZXlzKQorCXsKKwkJcmVzdWx0ID0gZmFsc2U7CisJCWdvdG8gY2xlYW51cDsKKwl9 CisKKwkvKgorCSAqIENvbXBhcmUgdGhlIHNvcnRlZCBrZXkgYXJyYXlzIGVsZW1lbnQtYnktZWxl bWVudC4gU2luY2UgYm90aCBhcnJheXMgYXJlCisJICogYWxyZWFkeSBzb3J0ZWQgYnkgZ2luRXh0 cmFjdEVudHJpZXMsIHdlIGNhbiBkbyBhIHNpbXBsZSBPKG4pCisJICogY29tcGFyaXNvbi4KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG9sZF9ua2V5czsgaSsrKQorCXsKKwkJaW50CQkJY21w ID0gZ2luQ29tcGFyZUVudHJpZXMoJmdpbnN0YXRlLCBhdHRudW0sCisJCQkJCQkJCQkJCW9sZF9r ZXlzW2ldLCBvbGRfY2F0ZWdvcmllc1tpXSwKKwkJCQkJCQkJCQkJbmV3X2tleXNbaV0sIG5ld19j YXRlZ29yaWVzW2ldKTsKKworCQlpZiAoY21wICE9IDApCisJCXsKKwkJCXJlc3VsdCA9IGZhbHNl OworCQkJYnJlYWs7CisJCX0KKwl9CisKK2NsZWFudXA6CisJLyogQ2xlYW4gdXAgKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBj b250ZXh0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmlu ZGV4IDFjZGI3MmIzYTdhLi41YjBmZjEzYjEzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMK QEAgLTMyNjgsNyArMzI2OCw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFw VHVwbGVEYXRhICpvbGR0dXAsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQlUTV9GYWlsdXJlRGF0YSAq dG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCiAJCQlCdWZmZXIgYnVmZmVyLCBQYWdlIHBh Z2UsIEJsb2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsCiAJCQlCaXRtYXBzZXQgKmhvdF9hdHRy cywgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsCi0JCQlCaXRtYXBz ZXQgKnJpZF9hdHRycywgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZmZXIsCisJ CQlCaXRtYXBzZXQgKnJpZF9hdHRycywgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZl ciAqdm1idWZmZXIsCiAJCQlib29sIHJlcF9pZF9rZXlfcmVxdWlyZWQsIFRVX1VwZGF0ZUluZGV4 ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC00MzM3LDggKzQz MzcsOSBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCiAgKiBU aGlzIHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gdXBkYXRlIGEgdHVwbGUgd2hlbiBjb25jdXJyZW50 IHVwZGF0ZXMgb2YgdGhlCiAgKiB0YXJnZXQgdHVwbGUgYXJlIG5vdCBleHBlY3RlZCAoZm9yIGV4 YW1wbGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGxvY2sgb24gdGhlCiAgKiByZWxhdGlvbiBhc3NvY2lh dGVkIHdpdGggdGhlIHR1cGxlKS4gIEFueSBmYWlsdXJlIGlzIHJlcG9ydGVkIHZpYSBlcmVwb3J0 KCkuCisgKiBSZXR1cm5zIHRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzLgog ICovCi12b2lkCitCaXRtYXBzZXQgKgogc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkg ICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKQEAgLTQ0NjcsNyArNDQ2OCw3 IEBAIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50 ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwCiAKIAkJZWxvZyhFUlJPUiwgInR1cGxlIGNvbmN1 cnJlbnRseSBkZWxldGVkIik7CiAKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkv KgpAQCAtNDUwMCw3ICs0NTAxLDYgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAKIAlibXNfZnJl ZShzdW1fYXR0cnMpOwogCWJtc19mcmVlKHBrX2F0dHJzKTsKIAlibXNfZnJlZShyaWRfYXR0cnMp OwotCWJtc19mcmVlKG1peF9hdHRycyk7CiAJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKIAogCXN3aXRj aCAocmVzdWx0KQpAQCAtNDUyNiw2ICs0NTI2LDggQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAK IAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgaGVhcF91cGRhdGUgc3RhdHVzOiAldSIsIHJl c3VsdCk7CiAJCQlicmVhazsKIAl9CisKKwlyZXR1cm4gbWl4X2F0dHJzOwogfQogCiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGVmMDhlMWQzZTEwLi43NTI3 ODA5ZWMwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0z MTksNyArMzE5LDcgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRl bVBvaW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCVNuYXBzaG90IGNyb3Nz Y2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCUxvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQlCaXRtYXBzZXQgKm1peF9hdHRycywKKwkJCQkJY29u c3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKQogewogCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKQEAgLTQwNywx MCArNDA3LDYgQEAgaGVhcGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBv aW50ZXIgb3RpZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAKIAlBc3NlcnQoSXRlbUlkSXNOb3Jt YWwobHApKTsKIAotCS8qCi0JICogUGFydGlhbGx5IGNvbnN0cnVjdCB0aGUgb2xkdHVwIGZvciBI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8gd29yayBhbmQKLQkgKiB0aGVuIHBhc3MgdGhhdCBv biB0byBoZWFwX3VwZGF0ZS4KLQkgKi8KIAlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0 UmVsaWQocmVsYXRpb24pOwogCW9sZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdl R2V0SXRlbShwYWdlLCBscCk7CiAJb2xkdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGZkZmY5NjBjMTMwLi43M2NjMzIwODc1 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTUsNiArMTU1LDcgQEAgYnRo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gYnRwcm9w ZXJ0eTsKIAlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBidGJ1aWxkcGhhc2VuYW1lOwog CWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IGJ0dmFsaWRhdGU7CisJYW1yb3V0aW5lLT5hbWNvbXBh cmVkYXR1bXMgPSBidGNvbXBhcmVkYXR1bXM7CiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMg PSBidGFkanVzdG1lbWJlcnM7CiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2Fu OwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJlc2NhbjsKQEAgLTE3OTUsMyArMTc5Niw0MCBA QCBidHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5KQog CQkJcmV0dXJuIEludmFsaWRTdHJhdGVneTsKIAl9CiB9CisKKy8qCisgKiBidGNvbXBhcmVkYXR1 bXMgLSBDb21wYXJlIHR3byBkYXR1bXMgZm9yIGVxdWFsaXR5CisgKgorICogVGhpcyBmdW5jdGlv biBpcyBuZWNlc3NhcnkgYmVjYXVzZSBuYnRyZWUgcmVxdWlyZXMgdGhhdCBrZXlzIHRoYXQgYXJl IG5vdAorICogYmluYXJ5IGlkZW50aWNhbCBub3QgYmUgImVxdWFsIi4gIE90aGVyIGluZGV4ZXMg bWlnaHQgYWxsb3cgIkEiIGFuZCAiYSIgdG8KKyAqIGJlICJlcXVhbCIgd2hlbiBjb2xsYXRpb24g aXMgY2FzZSBpbnNlbnNhdGl2ZSwgYnV0IG5vdCBuYnRyZWUuICBXaHk/ICBXZWxsLAorICogbmJ0 cmVlIGRlZHVwbGljYXRlcyBUSURzIG9uIHBhZ2Ugc3BsaXQgYW5kIHRoZSB3YXkgaXQgYWNjb21w bGlzaCB0aGF0IGlzIGJ5CisgKiBkb2luZyBhIGJpbmFyeSBjb21wYXJpc29uIG9mIHRoZSBrZXlz LgorICovCisKK2Jvb2wKK2J0Y29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dHJu dW0sCisJCQkJRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJRGF0dW0gbmV3 X2RhdHVtLCBib29sIG5ld19pc251bGwpCit7CisJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKGluZGV4KTsKKwlDb21wYWN0QXR0cmlidXRlICphdHQ7CisKKwkvKgorCSAqIElmIG9u ZSB2YWx1ZSBpcyBOVUxMIGFuZCBvdGhlciBpcyBub3QsIHRoZW4gdGhleSBhcmUgY2VydGFpbmx5 IG5vdAorCSAqIGVxdWFsCisJICovCisJaWYgKG9sZF9pc251bGwgIT0gbmV3X2lzbnVsbCkKKwkJ cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBib3RoIGFyZSBOVUxMLCB0aGV5IGNhbiBiZSBj b25zaWRlcmVkIGVxdWFsLgorCSAqLworCWlmIChvbGRfaXNudWxsKQorCQlyZXR1cm4gdHJ1ZTsK KworCS8qIFdlIGRvIHNpbXBsZSBiaW5hcnkgY29tcGFyaXNvbiBvZiB0aGUgdHdvIGRhdHVtcyAq LworCUFzc2VydChhdHRybnVtIDw9IGRlc2MtPm5hdHRzKTsKKwlhdHQgPSBUdXBsZURlc2NDb21w YWN0QXR0cihkZXNjLCBhdHRybnVtIC0gMSk7CisJcmV0dXJuIGRhdHVtSXNFcXVhbChvbGRfZGF0 dW0sIG5ld19kYXR1bSwgYXR0LT5hdHRieXZhbCwgYXR0LT5hdHRsZW4pOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtLmMKaW5kZXggZGFkY2YwM2VkMjQuLmVmNzczNmJmYTc2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkCiBzaW1wbGVf dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJ CQkJICBCaXRtYXBzZXQgKm1vZGlmaWVkX2luZGV4ZWRfY29scywKKwkJCQkJCSAgY29uc3QgQml0 bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJCQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CkBAIC0zNDgsNyArMzQ4LDcgQEAgc2ltcGxlX3Rh YmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAJCQkJCQkJ CXNuYXBzaG90LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29t bWl0ICovICwKIAkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwKLQkJCQkJCQkJbW9kaWZpZWRfaW5k ZXhlZF9jb2xzLAorCQkJCQkJCQltaXhfYXR0cnMsCiAJCQkJCQkJCXVwZGF0ZV9pbmRleGVzKTsK IAogCXN3aXRjaCAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jv b3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IGZjODYz OGMxYjYxLi4zMjljMTEwZDBiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jv b3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwpAQCAtOTYx LDEwICs5NjEsMTggQEAgaW5kZXhfcmVnaXN0ZXIoT2lkIGhlYXAsCiAJbmV3aW5kLT5pbF9pbmZv LT5paV9FeHByZXNzaW9ucyA9CiAJCWNvcHlPYmplY3QoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9u cyk7CiAJbmV3aW5kLT5pbF9pbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOworCS8qIGV4 cHJlc3Npb24gYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkg aXQgKi8KKwluZXdpbmQtPmlsX2luZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMgPQorCQljb3B5T2Jq ZWN0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRycyk7CiAJLyogcHJlZGljYXRlIHdpbGwg bGlrZWx5IGJlIG51bGwsIGJ1dCBtYXkgYXMgd2VsbCBjb3B5IGl0ICovCiAJbmV3aW5kLT5pbF9p bmZvLT5paV9QcmVkaWNhdGUgPQogCQljb3B5T2JqZWN0KGluZGV4SW5mby0+aWlfUHJlZGljYXRl KTsKIAluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwkvKiBwcmVk aWNhdGUgYXR0cnMgd2lsbCBsaWtlbHkgYmUgbnVsbCwgYnV0IG1heSBhcyB3ZWxsIGNvcHkgaXQg Ki8KKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZUF0dHJzID0KKwkJY29weU9iamVjdChp bmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzKTsKKwluZXdpbmQtPmlsX2luZm8tPmlpX0NoZWNr ZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwluZXdpbmQtPmlsX2luZm8tPmlpX1ByZWRpY2F0ZVNhdGlz ZmllZCA9IGZhbHNlOwogCS8qIG5vIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBhdCBib290c3RyYXAg dGltZSwgc28gbm8gbmVlZCB0byBjb3B5ICovCiAJQXNzZXJ0KGluZGV4SW5mby0+aWlfRXhjbHVz aW9uT3BzID09IE5VTEwpOwogCUFzc2VydChpbmRleEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID09 IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDVkOWRiMTY3ZTU5Li4yOWI4Y2M0YmFkZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0u aCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJs ZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RyYW5zYW0uaCIKQEAgLTU4LDYgKzU5LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy90 cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvb3B0aW1pemVyLmgiCkBAIC0yNDE0LDYgKzI0MTYsNjEgQEAgaW5kZXhfZHJvcChPaWQg aW5kZXhJZCwgYm9vbCBjb25jdXJyZW50LCBib29sIGNvbmN1cnJlbnRfbG9ja19tb2RlKQogICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICovCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEJ1aWxkVXBkYXRlSW5kZXhJ bmZvCisgKgorICogRm9yIGV4cHJlc3Npb24gaW5kZXhlcyB1cGRhdGVzIG1heSBub3QgY2hhbmdl IHRoZSBpbmRleGVkIHZhbHVlIGFsbG93aW5nCisgKiBmb3IgYSBIT1QgdXBkYXRlLiAgQWRkIGlu Zm9ybWF0aW9uIHRvIHRoZSBJbmRleEluZm8gdG8gYWxsb3cgZm9yIGNoZWNraW5nCisgKiBpZiB0 aGUgaW5kZXhlZCB2YWx1ZSBoYXMgY2hhbmdlZC4KKyAqCisgKiBEbyB0aGlzIHByb2Nlc3Npbmcg aGVyZSByYXRoZXIgdGhhbiBpbiBCdWlsZEluZGV4SW5mbygpIHRvIG5vdCBpbmN1ciB0aGUKKyAq IG92ZXJoZWFkIGluIHRoZSBjb21tb24gbm9uLWV4cHJlc3Npb24gY2FzZXMuCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK0J1aWxkVXBkYXRlSW5kZXhJbmZvKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8pCit7CisJZm9yIChpbnQgaiA9IDA7IGogPCByZXN1bHRSZWxJbmZvLT5y aV9OdW1JbmRpY2VzOyBqKyspCisJeworCQlpbnQJCQlpOworCQlpbnQJCQlpbmRua2V5YXR0czsK KwkJQml0bWFwc2V0ICAqYXR0cnMgPSBOVUxMOworCQlJbmRleEluZm8gICppaSA9IHJlc3VsdFJl bEluZm8tPnJpX0luZGV4UmVsYXRpb25JbmZvW2pdOworCisJCS8qCisJCSAqIEV4cHJlc3Npb25z IGFyZSBub3QgYWxsb3dlZCBvbiBub24ta2V5IGF0dHJpYnV0ZXMsIHNvIHdlIGNhbiBza2lwCisJ CSAqIHRoZW0gYXMgdGhleSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgaW5kZXggSE9ULWJsb2NraW5n IGF0dHJpYnV0ZXMuCisJCSAqLworCQlpbmRua2V5YXR0cyA9IGlpLT5paV9OdW1JbmRleEtleUF0 dHJzOworCisJCS8qIENvbGxlY3Qga2V5IGF0dHJpYnV0ZXMgdXNlZCBieSB0aGUgaW5kZXggKi8K KwkJZm9yIChpID0gMDsgaSA8IGluZG5rZXlhdHRzOyBpKyspCisJCXsKKwkJCUF0dHJOdW1iZXIJ YXR0bnVtID0gaWktPmlpX0luZGV4QXR0ck51bWJlcnNbaV07CisKKwkJCWlmIChhdHRudW0gIT0g MCkKKwkJCQlhdHRycyA9IGJtc19hZGRfbWVtYmVyKGF0dHJzLCBhdHRudW0gLSBGaXJzdExvd0lu dmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJfQorCisJCS8qIENvbGxlY3QgYXR0cmlidXRl cyB1c2VkIGluIHRoZSBleHByZXNzaW9uICovCisJCWlmIChpaS0+aWlfRXhwcmVzc2lvbnMpCisJ CQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSBpaS0+aWlfRXhwcmVzc2lvbnMsCisJCQkJCQkgICBy ZXN1bHRSZWxJbmZvLT5yaV9SYW5nZVRhYmxlSW5kZXgsCisJCQkJCQkgICAmaWktPmlpX0V4cHJl c3Npb25zQXR0cnMpOworCisJCS8qIENvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVk aWNhdGUgKi8KKwkJaWYgKGlpLT5paV9QcmVkaWNhdGUpCisJCQlwdWxsX3ZhcmF0dG5vcygoTm9k ZSAqKSBpaS0+aWlfUHJlZGljYXRlLAorCQkJCQkJICAgcmVzdWx0UmVsSW5mby0+cmlfUmFuZ2VU YWJsZUluZGV4LAorCQkJCQkJICAgJmlpLT5paV9QcmVkaWNhdGVBdHRycyk7CisKKwkJaWktPmlp X0luZGV4ZWRBdHRycyA9IGJtc191bmlvbihhdHRycywgaWktPmlpX0V4cHJlc3Npb25zQXR0cnMp OworCisJCS8qIEFsbCBpbmRleGVzIHNob3VsZCBpbmRleCAqc29tZXRoaW5nKiEgKi8KKwkJQXNz ZXJ0KCFibXNfaXNfZW1wdHkoaWktPmlpX0luZGV4ZWRBdHRycykpOworCX0KK30KKwogLyogLS0t LS0tLS0tLS0tLS0tLQogICoJCUJ1aWxkSW5kZXhJbmZvCiAgKgkJCUNvbnN0cnVjdCBhbiBJbmRl eEluZm8gcmVjb3JkIGZvciBhbiBvcGVuIGluZGV4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4aW5nLmMKaW5kZXgg MDA0YzUxMjEwMDAuLmEzNjFjMjE1NDkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleGluZy5jCkBAIC0xMDIs NyArMTAyLDcgQEAgQ2F0YWxvZ0luZGV4SW5zZXJ0KENhdGFsb2dJbmRleFN0YXRlIGluZHN0YXRl LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCSAqIEdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGF0 ZSBzdHJ1Y3R1cmUuICBGYWxsIG91dCBpZiBub3RoaW5nIHRvIGRvLgogCSAqLwogCW51bUluZGV4 ZXMgPSBpbmRzdGF0ZS0+cmlfTnVtSW5kaWNlczsKLQlpZiAobnVtSW5kZXhlcyA9PSAwKQorCWlm IChudW1JbmRleGVzID09IDAgfHwgdXBkYXRlSW5kZXhlcyA9PSBUVV9Ob25lKQogCQlyZXR1cm47 CiAJcmVsYXRpb25EZXNjcyA9IGluZHN0YXRlLT5yaV9JbmRleFJlbGF0aW9uRGVzY3M7CiAJaW5k ZXhJbmZvQXJyYXkgPSBpbmRzdGF0ZS0+cmlfSW5kZXhSZWxhdGlvbkluZm87CkBAIC0zMTQsMTUg KzMxNCwxOCBAQCBDYXRhbG9nVHVwbGVVcGRhdGUoUmVsYXRpb24gaGVhcFJlbCwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwKQogewogCUNhdGFsb2dJbmRleFN0YXRl IGluZHN0YXRlOwogCVRVX1VwZGF0ZUluZGV4ZXMgdXBkYXRlSW5kZXhlcyA9IFRVX0FsbDsKKwlC aXRtYXBzZXQgICp1cGRhdGVkQXR0cnM7CiAKIAlDYXRhbG9nVHVwbGVDaGVja0NvbnN0cmFpbnRz KGhlYXBSZWwsIHR1cCk7CiAKIAlpbmRzdGF0ZSA9IENhdGFsb2dPcGVuSW5kZXhlcyhoZWFwUmVs KTsKIAotCXNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlkLCB0dXAsICZ1cGRhdGVJbmRl eGVzKTsKLQorCXVwZGF0ZWRBdHRycyA9IHNpbXBsZV9oZWFwX3VwZGF0ZShoZWFwUmVsLCBvdGlk LCB0dXAsICZ1cGRhdGVJbmRleGVzKTsKKwkoKFJlc3VsdFJlbEluZm8gKikgaW5kc3RhdGUpLT5y aV9DaGFuZ2VkSW5kZXhlZENvbHMgPSB1cGRhdGVkQXR0cnM7CiAJQ2F0YWxvZ0luZGV4SW5zZXJ0 KGluZHN0YXRlLCB0dXAsIHVwZGF0ZUluZGV4ZXMpOworCiAJQ2F0YWxvZ0Nsb3NlSW5kZXhlcyhp bmRzdGF0ZSk7CisJYm1zX2ZyZWUodXBkYXRlZEF0dHJzKTsKIH0KIAogLyoKQEAgLTMzOCwxMiAr MzQxLDE1IEBAIENhdGFsb2dUdXBsZVVwZGF0ZVdpdGhJbmZvKFJlbGF0aW9uIGhlYXBSZWwsIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1CiAJCQkJCQkgICBDYXRhbG9nSW5kZXhT dGF0ZSBpbmRzdGF0ZSkKIHsKIAlUVV9VcGRhdGVJbmRleGVzIHVwZGF0ZUluZGV4ZXMgPSBUVV9B bGw7CisJQml0bWFwc2V0ICAqdXBkYXRlZEF0dHJzOwogCiAJQ2F0YWxvZ1R1cGxlQ2hlY2tDb25z dHJhaW50cyhoZWFwUmVsLCB0dXApOwogCi0Jc2ltcGxlX2hlYXBfdXBkYXRlKGhlYXBSZWwsIG90 aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOwotCisJdXBkYXRlZEF0dHJzID0gc2ltcGxlX2hlYXBf dXBkYXRlKGhlYXBSZWwsIG90aWQsIHR1cCwgJnVwZGF0ZUluZGV4ZXMpOworCSgoUmVzdWx0UmVs SW5mbyAqKSBpbmRzdGF0ZSktPnJpX0NoYW5nZWRJbmRleGVkQ29scyA9IHVwZGF0ZWRBdHRyczsK IAlDYXRhbG9nSW5kZXhJbnNlcnQoaW5kc3RhdGUsIHR1cCwgdXBkYXRlSW5kZXhlcyk7CisJKChS ZXN1bHRSZWxJbmZvICopIGluZHN0YXRlKS0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0gTlVMTDsK KwlibXNfZnJlZSh1cGRhdGVkQXR0cnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmlu ZGV4IDVkODE5YmRhNTRhLi5jNjY1YWE3NDRiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy90b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAt MjkyLDggKzI5MiwxMiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9h c3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVy c1sxXSA9IDI7CiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyA9IE5JTDsKIAlpbmRleEluZm8t PmlpX0V4cHJlc3Npb25zU3RhdGUgPSBOSUw7CisJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc0F0 dHJzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSA9IE5JTDsKIAlpbmRleEluZm8t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJz ID0gTlVMTDsKKwlpbmRleEluZm8tPmlpX0NoZWNrZWRQcmVkaWNhdGUgPSBmYWxzZTsKKwlpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCA9IGZhbHNlOwogCWluZGV4SW5mby0+aWlfRXhj bHVzaW9uT3BzID0gTlVMTDsKIAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblByb2NzID0gTlVMTDsK IAlpbmRleEluZm8tPmlpX0V4Y2x1c2lvblN0cmF0cyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCmluZGV4IGZiMWJjM2E0ODBkLi4yMDk2OGE4MTRkNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOSwxMSArMTA5LDE1IEBACiAjaW5jbHVkZSAiYWNj ZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0 aWxzL211bHRpcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCkBAIC0zMTgsOCArMzIyLDggQEAgRXhlY0luc2VydElu ZGV4VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJUmVsYXRpb24JaGVhcFJl bGF0aW9uOwogCUluZGV4SW5mbyAqKmluZGV4SW5mb0FycmF5OwogCUV4cHJDb250ZXh0ICplY29u dGV4dDsKLQlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKLQlib29sCQlpc251bGxbSU5E RVhfTUFYX0tFWVNdOworCURhdHVtCQlsb2NfdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwlib29s CQlsb2NfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAogCUFzc2VydChJdGVtUG9pbnRlcklzVmFs aWQodHVwbGVpZCkpOwogCkBAIC0zNDMsMTMgKzM0NywxMyBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkvKiBBcnJhbmdlIGZvciBlY29udGV4 dCdzIHNjYW4gdHVwbGUgdG8gYmUgdGhlIHR1cGxlIHVuZGVyIHRlc3QgKi8KIAllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzbG90OwogCi0JLyoKLQkgKiBmb3IgZWFjaCBpbmRleCwgZm9ybSBh bmQgaW5zZXJ0IHRoZSBpbmRleCB0dXBsZQotCSAqLworCS8qIEluc2VydCBpbnRvIGVhY2ggaW5k ZXggdGhhdCBuZWVkcyB1cGRhdGluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1JbmRpY2VzOyBp KyspCiAJewogCQlSZWxhdGlvbglpbmRleFJlbGF0aW9uID0gcmVsYXRpb25EZXNjc1tpXTsKIAkJ SW5kZXhJbmZvICAqaW5kZXhJbmZvOworCQlEYXR1bQkgICAqdmFsdWVzOworCQlib29sCSAgICpp c251bGw7CiAJCWJvb2wJCWFwcGx5Tm9EdXBFcnI7CiAJCUluZGV4VW5pcXVlQ2hlY2sgY2hlY2tV bmlxdWU7CiAJCWJvb2wJCWluZGV4VW5jaGFuZ2VkOwpAQCAtMzY2LDcgKzM3MCw3IEBAIEV4ZWNJ bnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCiAJCS8qCiAJ CSAqIFNraXAgcHJvY2Vzc2luZyBvZiBub24tc3VtbWFyaXppbmcgaW5kZXhlcyBpZiB3ZSBvbmx5 IHVwZGF0ZQotCQkgKiBzdW1tYXJpemluZyBpbmRleGVzCisJCSAqIHN1bW1hcml6aW5nIGluZGV4 ZXMgb3IgaWYgdGhpcyBpbmRleCBpcyB1bmNoYW5nZWQuCiAJCSAqLwogCQlpZiAob25seVN1bW1h cml6aW5nICYmICFpbmRleEluZm8tPmlpX1N1bW1hcml6aW5nKQogCQkJY29udGludWU7CkBAIC0z ODcsOCArMzkxLDE1IEBAIEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBwcmVkaWNhdGU7 CiAJCQl9CiAKKwkJCS8qIENoZWNrIHRoZSBpbmRleCBwcmVkaWNhdGUgaWYgd2UgaGF2ZW4ndCBk b25lIHNvIGVhcmxpZXIgb24gKi8KKwkJCWlmICghaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGlj YXRlKQorCQkJeworCQkJCWluZGV4SW5mby0+aWlfUHJlZGljYXRlU2F0aXNmaWVkID0gRXhlY1F1 YWwocHJlZGljYXRlLCBlY29udGV4dCk7CisJCQkJaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGlj YXRlID0gdHJ1ZTsKKwkJCX0KKwogCQkJLyogU2tpcCB0aGlzIGluZGV4LXVwZGF0ZSBpZiB0aGUg cHJlZGljYXRlIGlzbid0IHNhdGlzZmllZCAqLwotCQkJaWYgKCFFeGVjUXVhbChwcmVkaWNhdGUs IGVjb250ZXh0KSkKKwkJCWlmICghaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTYXRpc2ZpZWQpCiAJ CQkJY29udGludWU7CiAJCX0KIApAQCAtMzk2LDExICs0MDcsMTAgQEAgRXhlY0luc2VydEluZGV4 VHVwbGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAqIEZvcm1JbmRleERhdHVt IGZpbGxzIGluIGl0cyB2YWx1ZXMgYW5kIGlzbnVsbCBwYXJhbWV0ZXJzIHdpdGggdGhlCiAJCSAq IGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgdGhlIGNvbHVtbihzKSBvZiB0aGUgaW5kZXguCiAJCSAq LwotCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCi0JCQkJCSAgIHNsb3QsCi0JCQkJCSAgIGVz dGF0ZSwKLQkJCQkJICAgdmFsdWVzLAotCQkJCQkgICBpc251bGwpOworCQlGb3JtSW5kZXhEYXR1 bShpbmRleEluZm8sIHNsb3QsIGVzdGF0ZSwgbG9jX3ZhbHVlcywgbG9jX2lzbnVsbCk7CisKKwkJ dmFsdWVzID0gbG9jX3ZhbHVlczsKKwkJaXNudWxsID0gbG9jX2lzbnVsbDsKIAogCQkvKiBDaGVj ayB3aGV0aGVyIHRvIGFwcGx5IG5vRHVwRXJyIHRvIHRoaXMgaW5kZXggKi8KIAkJYXBwbHlOb0R1 cEVyciA9IG5vRHVwRXJyICYmCkBAIC00MzUsNyArNDQ1LDkgQEAgRXhlY0luc2VydEluZGV4VHVw bGVzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAqIGluZGV4LiAgSWYgd2UncmUg YmVpbmcgY2FsbGVkIGFzIHBhcnQgb2YgYW4gVVBEQVRFIHN0YXRlbWVudCwKIAkJICogY29uc2lk ZXIgaWYgdGhlICdpbmRleFVuY2hhbmdlZCcgPSB0cnVlIGhpbnQgc2hvdWxkIGJlIHBhc3NlZC4K IAkJICovCi0JCWluZGV4VW5jaGFuZ2VkID0gdXBkYXRlICYmIGJtc19pc19lbXB0eShyZXN1bHRS ZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENvbHMpOworCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0 ZSAmJgorCQkJIWJtc19vdmVybGFwKGluZGV4SW5mby0+aWlfSW5kZXhlZEF0dHJzLAorCQkJCQkJ IHJlc3VsdFJlbEluZm8tPnJpX0NoYW5nZWRJbmRleGVkQ29scyk7CiAKIAkJc2F0aXNmaWVzQ29u c3RyYWludCA9CiAJCQlpbmRleF9pbnNlcnQoaW5kZXhSZWxhdGlvbiwgLyogaW5kZXggcmVsYXRp b24gKi8KQEAgLTYwNCw3ICs2MTYsMTIgQEAgRXhlY0NoZWNrSW5kZXhDb25zdHJhaW50cyhSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJY2hlY2tl ZEluZGV4ID0gdHJ1ZTsKIAogCQkvKiBDaGVjayBmb3IgcGFydGlhbCBpbmRleCAqLwotCQlpZiAo aW5kZXhJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQorCQlpZiAoaW5kZXhJbmZvLT5paV9DaGVj a2VkUHJlZGljYXRlICYmICFpbmRleEluZm8tPmlpX1ByZWRpY2F0ZVNhdGlzZmllZCkKKwkJewor CQkJLyogV2UndmUgYWxyZWFkeSBjaGVja2VkIGFuZCB0aGUgcHJlZGljYXRlIHdhc24ndCBzYXRp c2ZpZWQuICovCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChpbmRleEluZm8tPmlpX1By ZWRpY2F0ZSAhPSBOSUwpCiAJCXsKIAkJCUV4cHJTdGF0ZSAgKnByZWRpY2F0ZTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAzNGY4NjU0NmZjOS4uZTRiMmNkNWEz ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC01NCwxMCArNTQs MTMgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy9hdHRudW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lz YXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1 cGNvbnZlcnQuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTc1LDYgKzc4LDcgQEAKICNpbmNsdWRlICJ1dGls cy9mbG9hdC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25h cG1nci5oIgogCiAKQEAgLTI0NSw2ICsyNDksMTAgQEAgdHRzX2F0dHJfZXF1YWwoT2lkIHR5cGlk LCBPaWQgY29sbGF0aW9uLCBib29sIHR5cGJ5dmFsLCBpbnQxNiB0eXBsZW4sCiAJdHlwZW50cnkg PSBsb29rdXBfdHlwZV9jYWNoZSh0eXBpZCwKIAkJCQkJCQkJIFRZUEVDQUNIRV9FUV9PUFIgfCBU WVBFQ0FDSEVfRVFfT1BSX0ZJTkZPKTsKIAorCS8qIFVzZSB0aGUgdHlwZSdzIGNvbGxhdGlvbiBp ZiBub25lIHByb3ZpZGVkICovCisJaWYgKGNvbGxhdGlvbiA9PSAtMSkKKwkJY29sbGF0aW9uID0g dHlwZW50cnktPnR5cGNvbGxhdGlvbjsKKwogCS8qCiAJICogSWYgbm8gZXF1YWxpdHkgb3BlcmF0 b3IgaXMgYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gYmluYXJ5IGNvbXBhcmlzb24uCiAJICogVGhp cyBoYW5kbGVzIHR5cGVzIHRoYXQgZG9uJ3QgaGF2ZSBwcm9wZXIgZXF1YWxpdHkgb3BlcmF0b3Jz IGRlZmluZWQuCkBAIC0yOTEsMTA4ICsyOTksMzU2IEBAIHR0c19hdHRyX2VxdWFsKE9pZCB0eXBp ZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAogfQogCiAvKgot ICogRGV0ZXJtaW5lIHdoaWNoIHVwZGF0ZWQgYXR0cmlidXRlcyBhY3R1YWxseSBjaGFuZ2VkIHZh bHVlcyBiZXR3ZWVuIG9sZCBhbmQKLSAqIG5ldyB0dXBsZXMgYW5kIGFyZSByZWZlcmVuY2VkIGJ5 IGluZGV4ZXMgb24gdGhlIHJlbGF0aW9uLgorICogRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hh bmdlcworICoKKyAqIERldGVybWluZSB3aGljaCBpbmRleGVzIG5lZWQgdXBkYXRpbmcgYnkgZmlu ZGluZyB0aGUgc2V0IG9mIG1vZGlmaWVkCisgKiBpbmRleGVkIGF0dHJpYnV0ZXMuCisgKgorICog Rm9yIGV4cHJlc3Npb24gaW5kZXhlcyBhbmQgaW5kZXhlcyB3aGljaCBpbXBsZW1lbnQgdGhlIGFt Y29tcGFyZWRhdHVtcygpCisgKiBpbmRleCBBTSBBUEkgd2UnbGwgbmVlZCB0byBmb3JtIGluZGV4 IGRhdHVtIGFuZCBjb21wYXJlIGVhY2ggYXR0cmlidXRlIHRvCisgKiBzZWUgaWYgYW55IGFjdHVh bGx5IGNoYW5nZWQuCisgKgorICogRm9yIGV4cHJlc3Npb24gaW5kZXhlcyB0aGUgcmVzdWx0IG9m IHRoZSBleHByZXNzaW9uIG1pZ2h0IG5vdCBjaGFuZ2UgYXQgYWxsLAorICogdGhpcyBpcyBjb21t b24gd2l0aCBKU09OQiBjb2x1bW5zIHdoaWNoIHJlcXVpcmUgZXhwcmVzc2lvbiBpbmRleGVzIGFu ZCB3aGVyZQorICogaXQgaXMgY29tbW9ucGxhY2UgdG8gaW5kZXggYSBmaWVsZCB3aXRoaW4gYSBk b2N1bWVudCBhbmQgaGF2ZSB1cGRhdGVzIHRoYXQKKyAqIGdlbmVyYWxseSBkb24ndCB1cGRhdGUg dGhhdCBmaWVsZC4KKyAqCisgKiBQYXJ0aWFsIGluZGV4ZXMgd29uJ3QgdHJpZ2dlciBpbmRleCB0 dXBsZXMgd2hlbiB0aGUgb2xkL25ldyB0dXBsZXMgYXJlIGJvdGgKKyAqIG91dHNpZGUgb2YgdGhl IHByZWRpY2F0ZSByYW5nZS4KKyAqCisgKiBBbGwgb3RoZXIgaW5kZXhlcyByZXF1aXJlIHRlc3Rp bmcgb2xkL25ldyBkYXR1bSBmb3IgZXF1YWxpdHkuICBXZSBkbyB0aGlzCisgKiBieSBjYWxsaW5n IHRoZSB0eXBlLXNwZWNpZmljIGVxdWFsaXR5IG9wZXJhdG9yIHdoZW4gcG9zc2libGUsIG90aGVy d2lzZSB3ZQorICogZmFsbCBiYWNrIHRvIGJpbmFyeSBlcXVhbGl0eSB3aXRoIGRhdHVtSXNFcXVh bCgpLgorICoKKyAqIEZvciBuYnRyZWUgdGhlIGFtY29tcGFyZWRhdHVtcygpIEFQSSBpcyBjcml0 aWNhbCBhcyBpdCByZXF1aXJlcyB0aGF0IGtleQorICogYXR0cmlidXRlcyBhcmUgZXF1YWwgd2hl biB0aGV5IG1lbWNtcCgpLCB3aGljaCBtaWdodCBub3QgYmUgdGhlIGNhc2Ugd2hlbgorICogdXNp bmcgdHlwZS1zcGVjaWZpYyBjb21wYXJpc29uIG9yIGZhY3RvcmluZyBpbiBjb2xsYXRpb24gd2hp Y2ggbWlnaHQgbWFrZQorICogYW4gaW5kZXggY2FzZSBpbnNlbnNpdGl2ZS4KICAqCi0gKiBSZXR1 cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBvZmZzZXRzICgwLWJhc2VkLCBhZGp1c3RlZCBi eQotICogRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcikgb3IgTlVMTCBpZiBubyBh dHRyaWJ1dGVzIGNoYW5nZWQuCisgKiBBbGwgb2YgdGhpcyBpcyB0byBzYXkgdGhhdCB0aGUgZ29h bCBpcyBmb3IgdGhlIGV4ZWN1dG9yIHRvIGtub3csIGFoZWFkIG9mCisgKiBjYWxsaW5nIGludG8g dGhlIHRhYmxlIEFNIHRvIHByb2Nlc3MgdGhlIHVwZGF0ZSBhbmQgYmVmb3JlIGNhbGxpbmcgaW50 byB0aGUKKyAqIGluZGV4IEFNIGZvciBpbnNlcnRpbmcgbmV3IGluZGV4IHR1cGxlcywgd2hpY2gg YXR0cmlidXRlcyB0cnVlbHkgbmVjZXNzaXRhdGUKKyAqIGEgbmV3IGluZGV4IHR1cGxlLgorICoK KyAqIFJldHVybnMgYSByZWZpbmVkIEJpdG1hcHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgZm9yY2Ug aW5kZXggdXBkYXRlcy4KICAqLwogQml0bWFwc2V0ICoKIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0Zv ckNoYW5nZXMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKLQkJCQkJCQkJVHVwbGVUYWJsZVNsb3Qg KnR0c19vbGQsCi0JCQkJCQkJCVR1cGxlVGFibGVTbG90ICp0dHNfbmV3KQorCQkJCQkJCQlFU3Rh dGUgKmVzdGF0ZSwKKwkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCVR1 cGxlVGFibGVTbG90ICpuZXdfdHRzKQogewogCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsaW5mby0+ cmlfUmVsYXRpb25EZXNjOwogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWxhdGlvbik7Ci0JQml0bWFwc2V0ICAqaW5kZXhlZF9hdHRyczsKLQlCaXRtYXBzZXQgICptb2Rp ZmllZCA9IE5VTEw7Ci0JaW50CQkJYXR0aWR4OworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5V TEw7CiAKIAkvKiBJZiBubyBpbmRleGVzLCB3ZSdyZSBkb25lICovCiAJaWYgKHJlbGluZm8tPnJp X051bUluZGljZXMgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIEdldCB0aGUgc2V0 IG9mIGluZGV4IGtleSBhdHRyaWJ1dGVzLiAgVGhpcyBpbmNsdWRlcyBzdW1tYXJpemluZywKLQkg KiBleHByZXNzaW9uIGluZGV4ZXMgYW5kIGF0dHJpYnV0ZXMgbWVudGlvbmVkIGluIHRoZSBwcmVk aWNhdGUgb2YgYQotCSAqIHBhcnRpdGlvbiBidXQgbm90IHRob3NlIGluIElOQ0xVRElORy4KKwkg KiBOT1RFOiBFeHByZXNzaW9uIGFuZCBwcmVkaWNhdGVzIHRoYXQgYXJlIG9ic2VydmVkIHRvIGNo YW5nZSB3aWxsIGhhdmUKKwkgKiBhbGwgdGhlaXIgYXR0cmlidXRlcyBhZGRlZCBpbnRvIHRoZSBt X2F0dHJzIHNldCBrbm93aW5nIHRoYXQgc29tZSBvZgorCSAqIHRob3NlIG1pZ2h0IG5vdCBoYXZl IGNoYW5nZWQuICBUYWtlIGZvciBpbnN0YW5jZSBhbiBpbmRleCBvbiAoYSArIGIpCisJICogZm9s bG93ZWQgYnkgYW4gaW5kZXggb24gKGIpIHdpdGggYW4gdXBkYXRlIHRoYXQgY2hhbmdlcyBvbmx5 IHRoZSB2YWx1ZQorCSAqIG9mICdhJy4gIFdlJ2xsIGFkZCBib3RoICdhJyBhbmQgJ2InIHRvIHRo ZSBtX2F0dHJzIHNldCB0aGVuIGxhdGVyIHdoZW4KKwkgKiByZXZpZXdpbmcgdGhlIHNlY29uZCBp bmRleCBhZGQgJ2InIHRvIHRoZSB1X2F0dHJzICh1bmNoYW5nZWQpIHNldC4gIEluCisJICogdGhl IGVuZCwgd2UnbGwgcmVtb3ZlIGFsbCB0aGUgdW5jaGFuZ2VkIGZyb20gdGhlIG1fYXR0cnMgYW5k IGdldCBvdXIKKwkgKiBkZXNpcmVkIHJlc3VsdC4KIAkgKi8KLQlpbmRleGVkX2F0dHJzID0gUmVs YXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgIElOREVYX0FU VFJfQklUTUFQX0lOREVYRUQpOwotCUFzc2VydCghYm1zX2lzX2VtcHR5KGluZGV4ZWRfYXR0cnMp KTsKIAotCS8qCi0JICogTk9URTogSXQgaXMgaW1wb3J0YW50IHRvIHNjYW4gYWxsIGluZGV4ZWQg YXR0cmlidXRlcyBpbiB0aGUgdHVwbGVzCi0JICogYmVjYXVzZSBFeGVjR2V0QWxsVXBkYXRlZENv bHMgd29uJ3QgaW5jbHVkZSBjb2x1bW5zIHRoYXQgbWF5IGhhdmUgYmVlbgotCSAqIG1vZGlmaWVk IHZpYSBoZWFwX21vZGlmeV90dXBsZV9ieV9jb2wgd2hpY2ggaXMgdGhlIGNhc2UgaW4KLQkgKiB0 c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlci4KLQkgKi8KLQlhdHRpZHggPSAtMTsKLQl3aGlsZSAoKGF0 dGlkeCA9IGJtc19uZXh0X21lbWJlcihpbmRleGVkX2F0dHJzLCBhdHRpZHgpKSA+PSAwKQorCS8q IEZpbmQgdGhlIGluZGV4ZXMgdGhhdCByZWZlcmVuY2UgdGhpcyBhdHRyaWJ1dGUgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IHJlbGluZm8tPnJpX051bUluZGljZXM7IGkrKykKIAl7Ci0JCS8qIGF0 dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRoZSBub3JtYWwgYXR0cmlidXRlIG51bWJl ciAqLwotCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRpZHggKyBGaXJzdExvd0ludmFsaWRIZWFw QXR0cmlidXRlTnVtYmVyOwotCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyOwotCQlib29sCQlvbGRu dWxsLAotCQkJCQluZXdudWxsOwotCQlEYXR1bQkJb2xkdmFsLAotCQkJCQluZXd2YWw7CisJCVJl bGF0aW9uCWluZGV4UmVsID0gcmVsaW5mby0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldOworCQlJ bmRleEFtUm91dGluZSAqYW1yb3V0aW5lID0gaW5kZXhSZWwtPnJkX2luZGFtOworCQlJbmRleElu Zm8gICppbmRleEluZm8gPSByZWxpbmZvLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tpXTsKKwkJQml0 bWFwc2V0ICAqbV9hdHRycyA9IE5VTEw7IC8qIChwb3NzaWJseSkgbW9kaWZpZWQga2V5IGF0dHJp YnV0ZXMgKi8KKwkJQml0bWFwc2V0ICAqcF9hdHRycyA9IE5VTEw7IC8qIChwb3NzaWJseSkgbW9k aWZpZWQgcHJlZGljYXRlIGF0dHJpYnV0ZXMgKi8KKwkJQml0bWFwc2V0ICAqdV9hdHRycyA9IE5V TEw7IC8qIHVubW9kaWZpZWQgYXR0cmlidXRlcyAqLworCQlCaXRtYXBzZXQgICpwcmVfYXR0cnMg PSBpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJzOworCQlib29sCQloYXNfZXhwcmVzc2lvbnMg PSAoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwpOworCQlib29sCQloYXNfYW1fY29t cGFyZSA9IChhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyAhPSBOVUxMKTsKKwkJYm9vbAkJaXNf cGFydGlhbCA9IChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZSAhPSBOSUwpOworCQlUdXBsZVRhYmxl U2xvdCAqc2F2ZV9zY2FudHVwbGU7CisJCUV4cHJDb250ZXh0ICplY29udGV4dCA9IEdldFBlclR1 cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKwkJRGF0dW0JCW9sZF92YWx1ZXNbSU5ERVhfTUFYX0tF WVNdOworCQlib29sCQlvbGRfaXNudWxsW0lOREVYX01BWF9LRVlTXTsKKwkJRGF0dW0JCW5ld192 YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCQlib29sCQluZXdfaXNudWxsW0lOREVYX01BWF9LRVlT XTsKKworCQkvKiBJZiB3ZSd2ZSByZXZpZXdlZCBhbGwgdGhlIGF0dHJpYnV0ZXMgb24gdGhpcyBp bmRleCwgbW92ZSBvbiAqLworCQlpZiAoYm1zX2lzX3N1YnNldChpbmRleEluZm8tPmlpX0luZGV4 ZWRBdHRycywgbWl4X2F0dHJzKSkKKwkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIElmIGl0J3Mg YSB3aG9sZS10dXBsZSByZWZlcmVuY2UsIHJlY29yZCBhcyBtb2RpZmllZC4gIEl0J3Mgbm90Ci0J CSAqIHJlYWxseSB3b3J0aCBzdXBwb3J0aW5nIHRoaXMgY2FzZSwgc2luY2UgaXQgY291bGQgb25s eSBzdWNjZWVkCi0JCSAqIGFmdGVyIGEgbm8tb3AgdXBkYXRlLCB3aGljaCBpcyBoYXJkbHkgYSBj YXNlIHdvcnRoIG9wdGltaXppbmcgZm9yLgotCQkgKi8KLQkJaWYgKGF0dHJudW0gPT0gMCkKKwkJ LyogQ2hlY2tpbmcgcGFydGlhbCBhdCB0aGlzIHBvaW50IGlzbid0IHZpYWJsZSB3aGVuIHdlJ3Jl IHNlcmlhbGl6YWJsZSAqLworCQlpZiAoaXNfcGFydGlhbCAmJiBJc29sYXRpb25Jc1NlcmlhbGl6 YWJsZSgpKQogCQl7Ci0JCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRp ZHgpOwotCQkJY29udGludWU7CisJCQlwX2F0dHJzID0gYm1zX2NvcHkocHJlX2F0dHJzKTsKKwkJ fQorCQkvKiBDaGVjayBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSAqLworCQllbHNlIGlmIChpc19w YXJ0aWFsKQorCQl7CisJCQlFeHByU3RhdGUgICpwc3RhdGU7CisJCQlib29sCQlvbGRfcXVhbGlm aWVzLAorCQkJCQkJbmV3X3F1YWxpZmllczsKKworCQkJaWYgKCFpbmRleEluZm8tPmlpX0NoZWNr ZWRQcmVkaWNhdGUpCisJCQkJcHN0YXRlID0gRXhlY1ByZXBhcmVRdWFsKGluZGV4SW5mby0+aWlf UHJlZGljYXRlLCBlc3RhdGUpOworCQkJZWxzZQorCQkJCXBzdGF0ZSA9IGluZGV4SW5mby0+aWlf UHJlZGljYXRlU3RhdGU7CisKKwkJCXNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlOworCisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBvbGRfdHRzOworCQkJb2xk X3F1YWxpZmllcyA9IEV4ZWNRdWFsKHBzdGF0ZSwgZWNvbnRleHQpOworCisJCQllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBuZXdfdHRzOworCQkJbmV3X3F1YWxpZmllcyA9IEV4ZWNRdWFsKHBz dGF0ZSwgZWNvbnRleHQpOworCisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3Nj YW50dXBsZTsKKworCQkJaW5kZXhJbmZvLT5paV9DaGVja2VkUHJlZGljYXRlID0gdHJ1ZTsKKwkJ CWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBwc3RhdGU7CisJCQlpbmRleEluZm8tPmlp X1ByZWRpY2F0ZVNhdGlzZmllZCA9IG5ld19xdWFsaWZpZXM7CisKKwkJCS8qIEJvdGggb3V0c2lk ZSBwcmVkaWNhdGUsIGluZGV4IGRvZXNuJ3QgbmVlZCB1cGRhdGUgKi8KKwkJCWlmICghb2xkX3F1 YWxpZmllcyAmJiAhbmV3X3F1YWxpZmllcykKKwkJCQljb250aW51ZTsKKworCQkJLyogQSB0cmFu c2l0aW9uIG1lYW5zIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbmRleCAqLworCQkJaWYgKG9sZF9x dWFsaWZpZXMgIT0gbmV3X3F1YWxpZmllcykKKwkJCQlwX2F0dHJzID0gYm1zX2NvcHkocHJlX2F0 dHJzKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gYm90aCBhcmUgd2l0aGluIHRoZSBwcmVkaWNhdGUg d2UgbXVzdCB1cGRhdGUgdGhpcyBpbmRleCwKKwkJCSAqIGJ1dCBvbmx5IGlmIG9uZSBvZiB0aGUg aW5kZXgga2V5IGF0dHJpYnV0ZXMgY2hhbmdlZC4KKwkJCSAqLwogCQl9CiAKIAkJLyoKLQkJICog TGlrZXdpc2UsIGluY2x1ZGUgaW4gdGhlIG1vZGlmaWVkIHNldCBhbnkgc3lzdGVtIGF0dHJpYnV0 ZSBvdGhlcgotCQkgKiB0aGFuIHRhYmxlT0lEOyB3ZSBjYW5ub3QgZXhwZWN0IHRoZXNlIHRvIGJl IGNvbnNpc3RlbnQgaW4gYSBIT1QKLQkJICogY2hhaW4sIG9yIGV2ZW4gdG8gYmUgc2V0IGNvcnJl Y3RseSB5ZXQgaW4gdGhlIG5ldyB0dXBsZS4KKwkJICogRXhwcmVzc2lvbiBpbmRleGVzIG9yIGV4 dHJhY3Rpb24tYmFzZWQgaW5kZXggcmVxdWlyZSB1cyB0byBmb3JtCisJCSAqIGluZGV4IGRhdHVt cyBhbmQgY29tcGFyZS4gIFdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiB0byBhdm9pZCB0aGlzCisJCSAq IG92ZXJoZWFkLCBub3cgaXQncyB0aW1lIHRvIGJpdGUgdGhlIGJ1bGxldCBhbmQgZ2V0IGl0IGRv bmUuCisJCSAqCisJCSAqIFhYWDogQ2FjaGluZyB0aGUgdmFsdWVzL2lzbnVsbCBtaWdodCBiZSBh IHdpbiBhbmQgYXZvaWQgb25lIG9mIHRoZQorCQkgKiBhZGRlZCBjYWxscyB0byBGb3JtSW5kZXhE YXR1bSgpLgogCQkgKi8KLQkJaWYgKGF0dHJudW0gPCAwKQorCQlpZiAoaGFzX2V4cHJlc3Npb25z IHx8IGhhc19hbV9jb21wYXJlKQogCQl7Ci0JCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJp YnV0ZU51bWJlcikKLQkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRp ZHgpOwotCQkJY29udGludWU7Ci0JCX0KKwkJCXNhdmVfc2NhbnR1cGxlID0gZWNvbnRleHQtPmVj eHRfc2NhbnR1cGxlOwogCi0JCS8qIEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyAqLwot CQlvbGR2YWwgPSBzbG90X2dldGF0dHIodHRzX29sZCwgYXR0cm51bSwgJm9sZG51bGwpOwotCQlu ZXd2YWwgPSBzbG90X2dldGF0dHIodHRzX25ldywgYXR0cm51bSwgJm5ld251bGwpOworCQkJLyog RXZhbHVhdGUgZXhwcmVzc2lvbnMgKGlmIGFueSkgdG8gZ2V0IGJhc2UgZGF0dW1zICovCisJCQll Y29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBvbGRfdHRzOworCQkJRm9ybUluZGV4RGF0dW0oaW5k ZXhJbmZvLCBvbGRfdHRzLCBlc3RhdGUsIG9sZF92YWx1ZXMsIG9sZF9pc251bGwpOwogCi0JCS8q IElmIG9uZSB2YWx1ZSBpcyBOVUxMIGFuZCB0aGUgb3RoZXIgaXMgbm90LCB0aGV5IGFyZSBub3Qg ZXF1YWwgKi8KLQkJaWYgKG9sZG51bGwgIT0gbmV3bnVsbCkKLQkJewotCQkJbW9kaWZpZWQgPSBi bXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKLQkJCWNvbnRpbnVlOworCQkJZWNvbnRl eHQtPmVjeHRfc2NhbnR1cGxlID0gbmV3X3R0czsKKwkJCUZvcm1JbmRleERhdHVtKGluZGV4SW5m bywgbmV3X3R0cywgZXN0YXRlLCBuZXdfdmFsdWVzLCBuZXdfaXNudWxsKTsKKworCQkJZWNvbnRl eHQtPmVjeHRfc2NhbnR1cGxlID0gc2F2ZV9zY2FudHVwbGU7CisKKwkJCS8qIENvbXBhcmUgdGhl IGluZGV4IGtleSBkYXR1bXMgZm9yIGVxdWFsaXR5ICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8 IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsgaisrKQorCQkJeworCQkJCUF0dHJOdW1i ZXIJaWR4X2F0dHJudW0gPSBpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbal07CisJCQkJ aW50CQkJaWR4X2F0dHJpZHggPSBpZHhfYXR0cm51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXI7CisJCQkJaW50CQkJbnRoX2V4cHIgPSAwOworCQkJCWJvb2wJCXZhbHVlc19l cXVhbCA9IGZhbHNlOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBza2lwIGF0dHJpYnV0ZXMg dGhhdCB3ZSd2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYXMKKwkJCQkgKiB0cmlnZ2VyaW5nIGFuIGlu ZGV4IHVwZGF0ZSBiZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIGFuCisJCQkJICogYXR0cmlidXRl IGZyb20gYW4gZXhwcmVzc2lvbiBpbmRleCB0aGF0IGRpZG4ndCBjaGFuZ2UgYnV0CisJCQkJICog dGhlIGV4cHJlc3Npb24gZGlkIGFuZCB0aGF0IHVuY2hhbmdlZCBhdHRyaWJ1dGUgaXMKKwkJCQkg KiByZWZlcmVuY2VkIGluIGEgc3Vic2VxdWVudCBpbmRleCB3aGVyZSB3ZSB3aWxsIGRpc2NvdmVy IHRoYXQKKwkJCQkgKiBmYWN0LgorCQkJCSAqLworCisJCQkJLyogQSBjaGFuZ2UgdG8vZnJvbSBO VUxMLCByZWNvcmQgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJCQlpZiAob2xkX2lzbnVsbFtqXSAhPSBu ZXdfaXNudWxsW2pdKQorCQkJCXsKKwkJCQkJLyogRXhwcmVzc2lvbnMgd2lsbCBoYXZlIGlkeF9h dHRybnVtID09IDAgKi8KKwkJCQkJaWYgKGlkeF9hdHRybnVtID09IDApCisJCQkJCQltX2F0dHJz ID0gYm1zX2FkZF9tZW1iZXJzKG1fYXR0cnMsIGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNBdHRy cyk7CisJCQkJCWVsc2UKKwkJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21lbWJlcihtX2F0dHJzLCBp ZHhfYXR0cmlkeCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIEJvdGggTlVMTCwg bm8gY2hhbmdlICovCisJCQkJaWYgKG9sZF9pc251bGxbal0pCisJCQkJeworCQkJCQlpZiAoaWR4 X2F0dHJudW0gIT0gMCkKKwkJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1X2F0dHJzLCBp ZHhfYXR0cmlkeCk7CisKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBV c2UgaW5kZXggQU0ncyBjb21wYXJpc29uIGZ1bmN0aW9uIGlmIHByZXNlbnQgd2hlbiBjb21wYXJp bmcKKwkJCQkgKiB0aGUgaW5kZXggZGF0dW0gZm9ybWVkIHdoZW4gY3JlYXRpbmcgYW4gaW5kZXgg a2V5LgorCQkJCSAqLworCQkJCWlmIChoYXNfYW1fY29tcGFyZSkKKwkJCQl7CisJCQkJCS8qCisJ CQkJCSAqIEZvciBuYnRyZWUgdG8gcHJvcGVybHkgZGVkdXBsaWNhdGUgVElEcyBvbiBwYWdlIHNw bGl0IGl0CisJCQkJCSAqIG11c3QgdHJlYXQgZXF1YWxpdHkgYXMgYmluYXJ5IGNvbXBhcmlzb24u ICBTbyBpdCBpcworCQkJCQkgKiB2aXRhbCB0aGF0IHdlIGNhbGwgaXQncyBjb21wYXJlZGF0dW1z KCkgZnVuY3Rpb24uCisJCQkJCSAqCisJCQkJCSAqIEluIHRoZSBjYXNlIG9mIEdJTi9SVU0gaW5k ZXhlcyB0aGV5IHRvbyBiZWhhdmUKKwkJCQkJICogZGlmZmVyZW50bHkgYW5kIGNhbiBldmVuIGV4 dHJhY3Qgb25lIG9yIG1vcmUgcG9ydGlvbnMgb2YKKwkJCQkJICogdGhlIGRhdHVtIHdoZW4gZm9y bWluZyBpbmRleCB0dXBsZXMuICBXZSdkIGxpa2UgdG8ga25vdworCQkJCQkgKiBpZiB0aGlzIHVw ZGF0ZSBuZWVkcyB0byB0cmlnZ2VyIG9uZSBvciBtb3JlIGluZGV4CisJCQkJCSAqIHR1cGxlcywg c28gd2UgbGV0IHRoZSBpbmRleCBBTSBwZXJmb3JtIHRoZWlyIGV4dHJhY3Rpb24KKwkJCQkJICog YW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMuCisJCQkJCSAqCisJCQkJCSAqIFRoZXJlIG1heSBiZSBv dGhlciBzaW1pbGFyIGluZGV4IEFNIGltcGxlbWVudGF0aW9uIHdpdGgKKwkJCQkJICogZXh0cmFj dGlvbiB3aGVyZSBpbmRleGVzIGFyZSBidWlsdCB1c2luZyBvbmx5IHBhcnQocykgb2YKKwkJCQkJ ICogdGhlIERhdHVtIGFuZCBtaWdodCBldmVuIG5lZWQgdG8gaW52b2tlIHR5cGUtc3BlY2lmaWMK KwkJCQkJICogZXF1YWxpdHkgb3BlcmF0b3JzLgorCQkJCQkgKgorCQkJCQkgKiBOT1RFOiBGb3Ig QU0gY29tcGFyaXNvbiwgcGFzcyB0aGUgMS1iYXNlZCBpbmRleAorCQkJCQkgKiBhdHRyaWJ1dGUg bnVtYmVyLiBUaGUgQU0ncyBjb21wYXJlIGZ1bmN0aW9uIGV4cGVjdHMgdGhlCisJCQkJCSAqIHNh bWUgbnVtYmVyaW5nIGFzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQU0uCisJCQkJCSAqLworCQkJ CQl2YWx1ZXNfZXF1YWwgPSBhbXJvdXRpbmUtPmFtY29tcGFyZWRhdHVtcyhpbmRleFJlbCwgaiAr IDEsCisJCQkJCQkJCQkJCQkJCQkgIG9sZF92YWx1ZXNbal0sIG9sZF9pc251bGxbal0sCisJCQkJ CQkJCQkJCQkJCQkgIG5ld192YWx1ZXNbal0sIG5ld19pc251bGxbal0pOworCQkJCX0KKwkJCQll bHNlCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBFeHByZXNzaW9uIGluZGV4IHdpdGhvdXQgY3Vz dG9tIEFNIGNvbXBhcmlzb24uIENvbXBhcmUKKwkJCQkJICogdGhlIGV4cHJlc3Npb24gcmVzdWx0 cyB1c2luZyB0eXBlLXNwZWNpZmljIGVxdWFsaXR5CisJCQkJCSAqIHdoaWNoIGF0IHRoaXMgcG9p bnQgaXMgdGhlIGV4cHJlc3Npb24ncyB0eXBlLCBub3QgdGhlCisJCQkJCSAqIGluZGV4J3MgdHlw ZS4gSXQgaXMgaW4gaW5kZXhfZm9ybV90dXBsZSgpIHRoYXQgaW5kZXgKKwkJCQkJICogYXR0cmli dXRlcyBhcmUgdHJhbnNmb3JtZWQsIG5vdCBGb3JtSW5kZXhEYXR1bSgpLgorCQkJCQkgKi8KKwkJ CQkJT2lkCQkJZXhwcl90eXBlX29pZDsKKwkJCQkJaW50MTYJCXR5cGxlbjsgLyogT3V0cHV0OiB0 eXBlIGxlbmd0aCAqLworCQkJCQlib29sCQl0eXBieXZhbDsKKwkJCQkJRXhwcgkgICAqZXhwciA9 IChFeHByICopIGxpc3RfbnRoKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMsIG50aF9leHByKTsK KworCQkJCQlBc3NlcnQoZXhwciAhPSBOVUxMKTsKKworCQkJCQkvKiBHZXQgdHlwZSBPSUQgZnJv bSB0aGUgZXhwcmVzc2lvbiAqLworCQkJCQlleHByX3R5cGVfb2lkID0gZXhwclR5cGUoKE5vZGUg KikgZXhwcik7CisKKwkJCQkJLyogR2V0IHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgT0lEICov CisJCQkJCWdldF90eXBsZW5ieXZhbChleHByX3R5cGVfb2lkLCAmdHlwbGVuLCAmdHlwYnl2YWwp OworCisJCQkJCXZhbHVlc19lcXVhbCA9IHR0c19hdHRyX2VxdWFsKGV4cHJfdHlwZV9vaWQsCisJ CQkJCQkJCQkJCQkgIC0xLAkvKiB1c2UgVEJEIGV4cHIgdHlwZSAqLworCQkJCQkJCQkJCQkJICB0 eXBieXZhbCwKKwkJCQkJCQkJCQkJCSAgdHlwbGVuLAorCQkJCQkJCQkJCQkJICBvbGRfdmFsdWVz W2pdLAorCQkJCQkJCQkJCQkJICBuZXdfdmFsdWVzW2pdKTsKKwkJCQl9CisKKwkJCQlpZiAoIXZh bHVlc19lcXVhbCkKKwkJCQl7CisJCQkJCS8qIEV4cHJlc3Npb25zIHdpbGwgaGF2ZSBpZHhfYXR0 cm51bSA9PSAwICovCisJCQkJCWlmIChpZHhfYXR0cm51bSA9PSAwKQorCQkJCQkJbV9hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhtX2F0dHJzLCBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zQXR0cnMp OworCQkJCQllbHNlCisJCQkJCQltX2F0dHJzID0gYm1zX2FkZF9tZW1iZXIobV9hdHRycywgaWR4 X2F0dHJpZHgpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAoaWR4X2F0dHJudW0g IT0gMCkKKwkJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1X2F0dHJzLCBpZHhfYXR0cmlk eCk7CisJCQkJfQorCisJCQkJaWYgKGlkeF9hdHRybnVtID09IDApCisJCQkJCW50aF9leHByKys7 CisJCQl9CiAJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSGVyZSB3ZSBrbm93IHRoYXQg d2UncmUgcmV2aWV3aW5nIGFuIGluZGV4IHRoYXQgZG9lc24ndCBoYXZlIGEKKwkJCSAqIHBhcnRp YWwgcHJlZGljYXRlLCBkb2Vzbid0IHVzZSBleHByZXNzaW9ucywgYW5kIGRvZXNuJ3QgaGF2ZSBh CisJCQkgKiBhbWNvbXBhcmVkYXR1bXMoKSBpbXBsZW1lbnRhdGlvbi4KKwkJCSAqLwogCi0JCS8q IElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KLQkJaWYgKG9sZG51bGwp Ci0JCQljb250aW51ZTsKKwkJCS8qIENvbXBhcmUgdGhlIGluZGV4IGtleSBkYXR1bXMgZm9yIGVx dWFsaXR5ICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhL ZXlBdHRyczsgaisrKQorCQkJeworCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7CisJCQkJQXR0 ck51bWJlcglyZWxfYXR0cm51bTsKKwkJCQlpbnQJCQlyZWxfYXR0cmlkeDsKKwkJCQlib29sCQl2 YWx1ZXNfZXF1YWwgPSBmYWxzZTsKKwkJCQlib29sCQlvbGRfbnVsbCwKKwkJCQkJCQluZXdfbnVs bDsKKwkJCQlEYXR1bQkJb2xkX3ZhbCwKKwkJCQkJCQluZXdfdmFsOwogCi0JCS8qIEdldCBhdHRy aWJ1dGUgbWV0YWRhdGEgKi8KLQkJQXNzZXJ0KGF0dHJudW0gPiAwICYmIGF0dHJudW0gPD0gdHVw ZGVzYy0+bmF0dHMpOwotCQlhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRybnVtIC0g MSk7Ci0KLQkJLyogQ29tcGFyZSB1c2luZyB0eXBlLXNwZWNpZmljIGVxdWFsaXR5IG9wZXJhdG9y ICovCi0JCWlmICghdHRzX2F0dHJfZXF1YWwoYXR0ci0+YXR0dHlwaWQsCi0JCQkJCQkJYXR0ci0+ YXR0Y29sbGF0aW9uLAotCQkJCQkJCWF0dHItPmF0dGJ5dmFsLAotCQkJCQkJCWF0dHItPmF0dGxl biwKLQkJCQkJCQlvbGR2YWwsCi0JCQkJCQkJbmV3dmFsKSkKLQkJCW1vZGlmaWVkID0gYm1zX2Fk ZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7Ci0JfQorCQkJCXJlbF9hdHRybnVtID0gaW5kZXhJ bmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2pdOworCQkJCXJlbF9hdHRyaWR4ID0gcmVsX2F0dHJu dW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOwogCi0JYm1zX2ZyZWUoaW5k ZXhlZF9hdHRycyk7CisJCQkJLyogWmVybyB3b3VsZCBtZWFuIGV4cHJlc3Npb24sIHNvbWV0aGlu ZyB3ZSBkb24ndCBleHBlY3QgaGVyZSAqLworCQkJCUFzc2VydChyZWxfYXR0cm51bSA+IDAgJiYg cmVsX2F0dHJudW0gPD0gdHVwZGVzYy0+bmF0dHMpOwogCi0JcmV0dXJuIG1vZGlmaWVkOworCQkJ CS8qIEV4dHJhY3QgdmFsdWVzIGZyb20gYm90aCBzbG90cyBmb3IgdGhpcyBhdHRyaWJ1dGUgKi8K KwkJCQlvbGRfdmFsID0gc2xvdF9nZXRhdHRyKG9sZF90dHMsIHJlbF9hdHRybnVtLCAmb2xkX251 bGwpOworCQkJCW5ld192YWwgPSBzbG90X2dldGF0dHIobmV3X3R0cywgcmVsX2F0dHJudW0sICZu ZXdfbnVsbCk7CisKKwkJCQkvKgorCQkJCSAqIElmIG9uZSB2YWx1ZSBpcyBOVUxMIGFuZCB0aGUg b3RoZXIgaXMgbm90LCB0aGV5IGFyZSBub3QKKwkJCQkgKiBlcXVhbAorCQkJCSAqLworCQkJCWlm IChvbGRfbnVsbCAhPSBuZXdfbnVsbCkKKwkJCQl7CisJCQkJCW1fYXR0cnMgPSBibXNfYWRkX21l bWJlcihtX2F0dHJzLCByZWxfYXR0cmlkeCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJ CS8qIElmIGJvdGggYXJlIE5VTEwsIGNvbnNpZGVyIHRoZW0gZXF1YWwgKi8KKwkJCQlpZiAob2xk X251bGwpCisJCQkJeworCQkJCQl1X2F0dHJzID0gYm1zX2FkZF9tZW1iZXIodV9hdHRycywgcmVs X2F0dHJpZHgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlhdHRyID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCByZWxfYXR0cm51bSAtIDEpOworCisJCQkJLyoKKwkJCQkgKiBDb21wYXJl IHVzaW5nIHR5cGUtc3BlY2lmaWMgZXF1YWxpdHkgd2hpY2ggYXQgdGhpcyBwb2ludCBpcworCQkJ CSAqIHRoZSByZWxhdGlvbidzIHR5cGUgYmVjYXVzZSBGb3JtSW5kZXhEYXR1bSgpIHdpbGwgcG9w dWxhdGUKKwkJCQkgKiB0aGUgdmFsdWVzL251bGxzIGJ1dCB3b24ndCB0cmFuc2Zvcm0gdGhlbSBp bnRvIHRoZSBmaW5hbAorCQkJCSAqIHZhbHVlcyBkZXN0aW5lZCBmb3IgdGhlIGluZGV4IHR1cGxl LCB0aGF0J3MgbGVmdCB0bworCQkJCSAqIGluZGV4X2Zvcm1fdHVwbGUoKSB3aGljaCB3ZSBkb24n dCBjYWxsIChvbiBwdXJwb3NlKS4KKwkJCQkgKi8KKwkJCQl2YWx1ZXNfZXF1YWwgPSB0dHNfYXR0 cl9lcXVhbChhdHRyLT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJICBhdHRyLT5hdHRjb2xsYXRpb24s CisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0bGVu LAorCQkJCQkJCQkJCQkgIG9sZF92YWwsCisJCQkJCQkJCQkJCSAgbmV3X3ZhbCk7CisKKwkJCQlp ZiAoIXZhbHVlc19lcXVhbCkKKwkJCQkJbV9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1fYXR0cnMs IHJlbF9hdHRyaWR4KTsKKwkJCQllbHNlCisJCQkJCXVfYXR0cnMgPSBibXNfYWRkX21lbWJlcih1 X2F0dHJzLCByZWxfYXR0cmlkeCk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBIZXJlIHdlIGtu b3cgYWxsIHRoZSBhdHRyaWJ1dGVzIHdlIHRob3VnaHQgbWlnaHQgYmUgbW9kaWZpZWQgYW5kCisJ CSAqIGFsbCB0aG9zZSB3ZSBrbm93IGhhdmVuJ3QgYmVlbi4gIFRha2UgdGhlIGRpZmZlcmVuY2Ug YW5kIGFkZCBpdCB0bworCQkgKiB0aGUgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHNldC4K KwkJICovCisJCW1fYXR0cnMgPSBibXNfZGVsX21lbWJlcnMobV9hdHRycywgdV9hdHRycyk7CisJ CXBfYXR0cnMgPSBibXNfZGVsX21lbWJlcnMocF9hdHRycywgdV9hdHRycyk7CisJCW1peF9hdHRy cyA9IGJtc19hZGRfbWVtYmVycyhtaXhfYXR0cnMsIG1fYXR0cnMpOworCQltaXhfYXR0cnMgPSBi bXNfYWRkX21lbWJlcnMobWl4X2F0dHJzLCBwX2F0dHJzKTsKKworCQlibXNfZnJlZShtX2F0dHJz KTsKKwkJYm1zX2ZyZWUodV9hdHRycyk7CisJCWJtc19mcmVlKHBfYXR0cnMpOworCX0KKworCXJl dHVybiBtaXhfYXR0cnM7CiB9CiAKIC8qCkBAIC0yMzk1LDYgKzI2NTEsOSBAQCBFeGVjVXBkYXRl QWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKIAlib29sCQlwYXJ0aXRpb25fY29uc3RyYWludF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJl c3VsdDsKIAorCS8qIFRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQg dHJpZ2dlciBuZXcgaW5kZXggZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5V TEw7CisKIAl1cGRhdGVDeHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoKQEAgLTI1 MTcsMTMgKzI3NzYsMzIgQEAgbHJlcGxhY2U6CiAJYm1zX2ZyZWUocmVzdWx0UmVsSW5mby0+cmlf Q2hhbmdlZEluZGV4ZWRDb2xzKTsKIAlyZXN1bHRSZWxJbmZvLT5yaV9DaGFuZ2VkSW5kZXhlZENv bHMgPSBOVUxMOwogCi0JcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzID0KLQkJ RXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBvbGRTbG90LCBz bG90KTsKKwkvKgorCSAqIER1cmluZyB1cGRhdGVzIHdlJ2xsIG5lZWQgYSBiaXQgbW9yZSBpbmZv cm1hdGlvbiBpbiBJbmRleEluZm8gYnV0IHdlJ3ZlCisJICogZGVsYXllZCBhZGRpbmcgaXQgdW50 aWwgaGVyZS4gIFdlIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZQorCSAqIGluZGV4ZXMs IHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIHRoYXQgaXMgaW5kZXhlZCwgYW5kIHRoYXQgdGhl IGZpcnN0CisJICogaW5kZXggZG9lc24ndCB5ZXQgaGF2ZSBpaV9JbmRleGVkQXR0cnMgc2V0IGFz IGEgd2F5IHRvIGVuc3VyZSB3ZSBvbmx5CisJICogYnVpbGQgdGhpcyB3aGVuIG5lZWRlZCBhbmQg b25seSBvbmNlLiAgV2UgZG9uJ3QgYnVpbGQgdGhpcyBpbgorCSAqIEV4ZWNPcGVuSW5kaWNpZXMo KSBhcyBpdCBpcyB1bm5lY2Vzc2FyeSBvdmVyaGVhZCB3aGVuIG5vdCBwZXJmb3JtaW5nIGFuCisJ ICogdXBkYXRlLgorCSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCAm JgorCQlibXNfaXNfZW1wdHkocmVzdWx0UmVsSW5mby0+cmlfSW5kZXhSZWxhdGlvbkluZm9bMF0t PmlpX0luZGV4ZWRBdHRycykpCisJCUJ1aWxkVXBkYXRlSW5kZXhJbmZvKHJlc3VsdFJlbEluZm8p OworCisJLyoKKwkgKiBOZXh0IHVwIHdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIHNldCBvZiBpbmRl eGVkIGF0dHJpYnV0ZXMgdGhhdCBoYXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZSBhbmQgc2hvdWxk IHRyaWdnZXIgYSBuZXcgaW5kZXggdHVwbGUuICBXZSBjb3VsZCBzdGFydAorCSAqIHdpdGggdGhl IHNldCBvZiB1cGRhdGVkIGNvbHVtbnMgdmlhIEV4ZWNHZXRVcGRhdGVkQ29scygpLCBidXQgaWYg d2UgZG8KKwkgKiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJpYnV0ZXMgZGlyZWN0bHkgbW9kaWZpZWQg YnkgaGVhcF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNoIGFyZSBub3Qga25vd24gdG8gRXhlY0dl dFVwZGF0ZWRDb2xzKCkuCisJICovCisJbWl4X2F0dHJzID0gRXhlY0NoZWNrSW5kZXhlZEF0dHJz Rm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIG9sZFNsb3QsIHNsb3QpOwogCiAJLyoK LQkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCisJICogQ2FsbCBpbnRvIHRoZSB0YWJsZSBBTSB0 byB1cGRhdGUgdGhlIGhlYXAgdHVwbGUuCiAJICoKLQkgKiBOb3RlOiBpZiBlc19jcm9zc2NoZWNr X3NuYXBzaG90IGlzbid0IEludmFsaWRTbmFwc2hvdCwgd2UgY2hlY2sgdGhhdAorCSAqIE5PVEU6 IGlmIGVzX2Nyb3NzY2hlY2tfc25hcHNob3QgaXNuJ3QgSW52YWxpZFNuYXBzaG90LCB3ZSBjaGVj ayB0aGF0CiAJICogdGhlIHJvdyB0byBiZSB1cGRhdGVkIGlzIHZpc2libGUgdG8gdGhhdCBzbmFw c2hvdCwgYW5kIHRocm93IGEKIAkgKiBjYW4ndC1zZXJpYWxpemUgZXJyb3IgaWYgbm90LiBUaGlz IGlzIGEgc3BlY2lhbC1jYXNlIGJlaGF2aW9yIG5lZWRlZAogCSAqIGZvciByZWZlcmVudGlhbCBp bnRlZ3JpdHkgdXBkYXRlcyBpbiB0cmFuc2FjdGlvbi1zbmFwc2hvdCBtb2RlCkBAIC0yNTM1LDkg KzI4MTMsMTIgQEAgbHJlcGxhY2U6CiAJCQkJCQkJCWVzdGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFw c2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJCQkJCQkmY29u dGV4dC0+dG1mZCwgJnVwZGF0ZUN4dC0+bG9ja21vZGUsCi0JCQkJCQkJCXJlc3VsdFJlbEluZm8t PnJpX0NoYW5nZWRJbmRleGVkQ29scywKKwkJCQkJCQkJbWl4X2F0dHJzLAogCQkJCQkJCQkmdXBk YXRlQ3h0LT51cGRhdGVJbmRleGVzKTsKIAorCUFzc2VydChibXNfaXNfZW1wdHkocmVzdWx0UmVs SW5mby0+cmlfQ2hhbmdlZEluZGV4ZWRDb2xzKSk7CisJcmVzdWx0UmVsSW5mby0+cmlfQ2hhbmdl ZEluZGV4ZWRDb2xzID0gbWl4X2F0dHJzOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjU1 NSw3ICsyODM2LDcgQEAgRXhlY1VwZGF0ZUVwaWxvZ3VlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29u dGV4dCwgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0LAogCU1vZGlmeVRhYmxlU3RhdGUgKm10c3Rh dGUgPSBjb250ZXh0LT5tdHN0YXRlOwogCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzID0gTklMOwog Ci0JLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1cGxlIGlmIG5lY2Vzc2FyeSAqLworCS8q IEluc2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAocmVz dWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgJiYgKHVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhl cyAhPSBUVV9Ob25lKSkKIAkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMo cmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCQkJICAgc2xvdCwgY29udGV4dC0+ZXN0YXRlLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9tYWtlZnVuY3MuYwppbmRleCBkNjlkYzA5MGFhNC4uZTlhNTNiOTVjYWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jCkBAIC04NTUsMTAgKzg1NSwxNCBAQCBtYWtlSW5kZXhJbmZvKGludCBudW1hdHRy cywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25zLAogCS8qIGV4 cHJlc3Npb25zICovCiAJbi0+aWlfRXhwcmVzc2lvbnMgPSBleHByZXNzaW9uczsKIAluLT5paV9F eHByZXNzaW9uc1N0YXRlID0gTklMOworCW4tPmlpX0V4cHJlc3Npb25zQXR0cnMgPSBOVUxMOwog CiAJLyogcHJlZGljYXRlcyAgKi8KIAluLT5paV9QcmVkaWNhdGUgPSBwcmVkaWNhdGVzOwogCW4t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKwluLT5paV9QcmVkaWNhdGVBdHRycyA9IE5VTEw7 CisJbi0+aWlfQ2hlY2tlZFByZWRpY2F0ZSA9IGZhbHNlOworCW4tPmlpX1ByZWRpY2F0ZVNhdGlz ZmllZCA9IGZhbHNlOwogCiAJLyogZXhjbHVzaW9uIGNvbnN0cmFpbnRzICovCiAJbi0+aWlfRXhj bHVzaW9uT3BzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmMjEuLjliZGY3M2Vk YTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMjExLDYgKzIxMSwzMyBAQCB0eXBlZGVmIHZvaWQgKCph bW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogLyogcmVzdG9yZSBtYXJr ZWQgc2NhbiBwb3NpdGlvbiAqLwogdHlwZWRlZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBhbWNvbXBhcmVkYXR1bXMgLSBDb21wYXJl IGRhdHVtcyB0byBkZXRlcm1pbmUgaWYgaW5kZXggdXBkYXRlIGlzIG5lZWRlZAorICoKKyAqIFRo aXMgZnVuY3Rpb24gY29tcGFyZXMgb2xkX2RhdHVtIGFuZCBuZXdfZGF0dW0gdG8gZGV0ZXJtaW5l IGlmIHRoZXkgd291bGQKKyAqIHByb2R1Y2UgZGlmZmVyZW50IGluZGV4IGVudHJpZXMuIEZvciBl eHRyYWN0aW9uLWJhc2VkIGluZGV4ZXMgKEdJTiwgUlVNKSwKKyAqIHRoaXMgc2hvdWxkOgorICog IDEuIEV4dHJhY3Qga2V5cyBmcm9tIG9sZF9kYXR1bSB1c2luZyB0aGUgb3BjbGFzcydzIGV4dHJh Y3RWYWx1ZSBmdW5jdGlvbgorICogIDIuIEV4dHJhY3Qga2V5cyBmcm9tIG5ld19kYXR1bSB1c2lu ZyB0aGUgb3BjbGFzcydzIGV4dHJhY3RWYWx1ZSBmdW5jdGlvbgorICogIDMuIENvbXBhcmUgdGhl IHR3byBzZXRzIG9mIGtleXMgdXNpbmcgYXBwcm9wcmlhdGUgZXF1YWxpdHkgb3BlcmF0b3JzCisg KiAgNC4gUmV0dXJuIHRydWUgaWYgdGhlIHNldHMgYXJlIGVxdWFsIChubyBpbmRleCB1cGRhdGUg bmVlZGVkKQorICoKKyAqIFRoZSBjb21wYXJpc29uIHNob3VsZCBhY2NvdW50IGZvcjoKKyAqICAt IERpZmZlcmVudCBudW1iZXJzIG9mIGV4dHJhY3RlZCBrZXlzCisgKiAgLSBOVUxMIHZhbHVlcwor ICogIC0gVHlwZS1zcGVjaWZpYyBlcXVhbGl0eSAobm90IGp1c3QgYmluYXJ5IGVxdWFsaXR5KQor ICogIC0gT3BjbGFzcyBwYXJhbWV0ZXJzIChlLmcuLCBwYXRoIGluIGJzb25fcnVtX3NpbmdsZV9w YXRoX29wcykKKyAqCisgKiBGb3IgdGhlIERvY3VtZW50REIgZXhhbXBsZSB3aXRoIHBhdGg9J2En LCB0aGlzIHdvdWxkIGV4dHJhY3QgdmFsdWVzIGF0CisgKiBwYXRoICdhJyBmcm9tIGJvdGggb2xk IGFuZCBuZXcgQlNPTiBkb2N1bWVudHMgYW5kIGNvbXBhcmUgdGhlbSB1c2luZworICogQlNPTidz IGVxdWFsaXR5IG9wZXJhdG9yLgorICovCisvKiBpZGVudGlmeSBpZiB1cGRhdGVkIGRhdHVtcyB3 b3VsZCBwcm9kdWNlIG9uZSBvciBtb3JlIGluZGV4IGVudHJpZXMgKi8KK3R5cGVkZWYgYm9vbCAo KmFtY29tcGFyZWRhdHVtc19mdW5jdGlvbikgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJ CQkJCQkJICBpbnQgYXR0bm8sCisJCQkJCQkJCQkJICBEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xk X2lzbnVsbCwKKwkJCQkJCQkJCQkgIERhdHVtIG5ld19kYXR1bSwgYm9vbCBuZXdfaXNudWxsKTsK KwogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5k ZXggc2NhbnMuCiAgKi8KQEAgLTMxMyw2ICszNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47CiAJYW1tYXJrcG9zX2Z1bmN0 aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbXJlc3RycG9zX2Z1bmN0aW9uIGFt cmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1jb21wYXJlZGF0dW1zX2Z1bmN0aW9uIGFt Y29tcGFyZWRhdHVtczsJLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlv bnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxl bHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9naW4uaAppbmRleCAxM2VhOTE5MjJlZi4uMmYyNjVmNDgxNmMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9naW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luLmgKQEAgLTEw MCw2ICsxMDAsOSBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IGdpbl9wZW5kaW5nX2xpc3RfbGlt aXQ7CiBleHRlcm4gdm9pZCBnaW5HZXRTdGF0cyhSZWxhdGlvbiBpbmRleCwgR2luU3RhdHNEYXRh ICpzdGF0cyk7CiBleHRlcm4gdm9pZCBnaW5VcGRhdGVTdGF0cyhSZWxhdGlvbiBpbmRleCwgY29u c3QgR2luU3RhdHNEYXRhICpzdGF0cywKIAkJCQkJCSAgIGJvb2wgaXNfYnVpbGQpOworZXh0ZXJu IGJvb2wgZ2luY29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJCQkJ CQkgRGF0dW0gb2xkX2RhdHVtLCBib29sIG9sZF9pc251bGwsCisJCQkJCQkJIERhdHVtIG5ld19k YXR1bSwgYm9vbCBuZXdfaXNudWxsKTsKIAogZXh0ZXJuIHZvaWQgX2dpbl9wYXJhbGxlbF9idWls ZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApp bmRleCA0MWQ1NDFhYTZiMi4uNTlkYjM4OWE1NDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTMyNiw3 ICszMjYsNyBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGVEYXRhICpvbGR0dXAsCiAJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBM b2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgQnVmZmVyIGJ1ZmZlciwKIAkJCQkJCQkgUGFnZSBwYWdl LCBCbG9ja051bWJlciBibG9jaywgSXRlbUlkIGxwLCBCaXRtYXBzZXQgKmhvdF9hdHRycywKIAkJ CQkJCQkgQml0bWFwc2V0ICpzdW1fYXR0cnMsIEJpdG1hcHNldCAqcGtfYXR0cnMsIEJpdG1hcHNl dCAqcmlkX2F0dHJzLAotCQkJCQkJCSBCaXRtYXBzZXQgKm1peF9hdHRycywgQnVmZmVyICp2bWJ1 ZmZlciwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIEJ1ZmZlciAqdm1idWZm ZXIsCiAJCQkJCQkJIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCwgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExv Y2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCkBAIC0zNjEsOCAr MzYxLDggQEAgZXh0ZXJuIGJvb2wgaGVhcF90dXBsZV9uZWVkc19ldmVudHVhbF9mcmVlemUoSGVh cFR1cGxlSGVhZGVyIHR1cGxlKTsKIAogZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfaW5zZXJ0KFJl bGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsKIGV4dGVybiB2b2lkIHNpbXBsZV9oZWFw X2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpOwot ZXh0ZXJuIHZvaWQgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJ dGVtUG9pbnRlckRhdGEgKm90aWQsCi0JCQkJCQkJICAgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRl SW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOworZXh0ZXJuIEJpdG1hcHNldCAqc2ltcGxlX2hlYXBf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCisJ CQkJCQkJCQkgSGVhcFR1cGxlIHR1cCwgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMp OwogCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRp b24gcmVsLAogCQkJCQkJCQkJCQkgIFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaAppbmRleCAxNmJlNWM3YTljMS4uNDJiZDMyOWVhYWQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgK QEAgLTEyMTAsNiArMTIxMCwxMCBAQCBleHRlcm4gaW50CWJ0Z2V0dHJlZWhlaWdodChSZWxhdGlv biByZWwpOwogCiBleHRlcm4gQ29tcGFyZVR5cGUgYnR0cmFuc2xhdGVzdHJhdGVneShTdHJhdGVn eU51bWJlciBzdHJhdGVneSwgT2lkIG9wZmFtaWx5KTsKIGV4dGVybiBTdHJhdGVneU51bWJlciBi dHRyYW5zbGF0ZWNtcHR5cGUoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5KTsKK2V4 dGVybiBib29sIGJ0Y29tcGFyZWRhdHVtcyhSZWxhdGlvbiBpbmRleCwgaW50IGF0dG51bSwKKwkJ CQkJCQlEYXR1bSBvbGRfZGF0dW0sIGJvb2wgb2xkX2lzbnVsbCwKKwkJCQkJCQlEYXR1bSBuZXdf ZGF0dW0sIGJvb2wgbmV3X2lzbnVsbCk7CisKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGludGVy bmFsIGZ1bmN0aW9ucyBpbiBuYnRyZWUuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggOGE1OTMxYTMx MTguLjJiOTIwNmZmMjRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTU0OSw3ICs1NDksNyBAQCB0 eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJ CQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJCQkJCSBMb2NrVHVwbGVNb2RlICpsb2NrbW9k ZSwKLQkJCQkJCQkJIEJpdG1hcHNldCAqdXBkYXRlZF9jb2xzLAorCQkJCQkJCQkgY29uc3QgQml0 bWFwc2V0ICp1cGRhdGVkX2NvbHMsCiAJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVf aW5kZXhlcyk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJv dXQgcGFyYW1ldGVycyAqLwpAQCAtMTUwMywxMiArMTUwMywxMiBAQCBzdGF0aWMgaW5saW5lIFRN X1Jlc3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3Rp ZCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qg c25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWls dXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgQml0bWFwc2V0 ICp1cGRhdGVkX2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCSAg IGNvbnN0IEJpdG1hcHNldCAqbWl4X2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRl eGVzKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShyZWwsIG90aWQs IHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCiAJCQkJCQkJCQkJ IHdhaXQsIHRtZmQsIGxvY2ttb2RlLAotCQkJCQkJCQkJCSB1cGRhdGVkX2NvbHMsIHVwZGF0ZV9p bmRleGVzKTsKKwkJCQkJCQkJCQkgbWl4X2NvbHMsIHVwZGF0ZV9pbmRleGVzKTsKIH0KIAogLyoK QEAgLTIwMTEsNyArMjAxMSw3IEBAIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV9kZWxl dGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJCQkgIFNuYXBzaG90IHNu YXBzaG90KTsKIGV4dGVybiB2b2lkIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg U25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIEJpdG1hcHNldCAqbW9kaWZpZWRfaW5kZXhl X2F0dHJzLAorCQkJCQkJCQkJICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCQkJ CSAgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpOwogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApp bmRleCBkZGE5NWU1NDkwMy4uOGQzNjRmOGIzMGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTEzMiw2 ICsxMzIsNyBAQCBleHRlcm4gYm9vbCBDb21wYXJlSW5kZXhJbmZvKGNvbnN0IEluZGV4SW5mbyAq aW5mbzEsIGNvbnN0IEluZGV4SW5mbyAqaW5mbzIsCiAJCQkJCQkJIGNvbnN0IEF0dHJNYXAgKmF0 dG1hcCk7CiAKIGV4dGVybiB2b2lkIEJ1aWxkU3BlY3VsYXRpdmVJbmRleEluZm8oUmVsYXRpb24g aW5kZXgsIEluZGV4SW5mbyAqaWkpOworZXh0ZXJuIHZvaWQgQnVpbGRVcGRhdGVJbmRleEluZm8o UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyk7CiAKIGV4dGVybiB2b2lkIEZvcm1JbmRleERh dHVtKEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA5OTNkYzBlNmNlZC4uYTE5NTg1YmEwNjUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNzM5LDYgKzczOSwxMSBAQCBleHRlcm4gQml0bWFw c2V0ICpFeGVjR2V0QWxsVXBkYXRlZENvbHMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywgRVN0YXRl ICplc3RhdGUpOwogICovCiBleHRlcm4gdm9pZCBFeGVjT3BlbkluZGljZXMoUmVzdWx0UmVsSW5m byAqcmVzdWx0UmVsSW5mbywgYm9vbCBzcGVjdWxhdGl2ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xv c2VJbmRpY2VzKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8pOworZXh0ZXJuIEJpdG1hcHNl dCAqRXhlY1doaWNoSW5kZXhlc1JlcXVpcmVVcGRhdGVzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8s CisJCQkJCQkJCQkJCQkgQml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCQkJCQkJCQkgRVN0YXRl ICplc3RhdGUsCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5ld190dHMpOwogZXh0ZXJuIExpc3QgKkV4ZWNJbnNlcnRJ bmRleFR1cGxlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkgICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgRVN0YXRlICplc3RhdGUsCiAJCQkJCQkJCSAgIGJvb2wgdXBkYXRl LApAQCAtODAwLDkgKzgwNSwxMCBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0xvb2t1cFJl c3VsdFJlbEJ5T2lkKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUsCiAJCQkJCQkJCQkJCSAgIE9pZCBy ZXN1bHRvaWQsCiAJCQkJCQkJCQkJCSAgIGJvb2wgbWlzc2luZ19vaywKIAkJCQkJCQkJCQkJICAg Ym9vbCB1cGRhdGVfY2FjaGUpOwotZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0 dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqdHRzX29sZCwKLQkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnR0c19uZXcpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hh bmdlcyhSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAorCQkJCQkJCQkJCQkJICBFU3RhdGUgKmVzdGF0 ZSwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKTsKIGV4dGVybiBib29sIHR0c19hdHRyX2VxdWFsKE9p ZCB0eXBpZCwgT2lkIGNvbGxhdGlvbiwgYm9vbCB0eXBieXZhbCwgaW50MTYgdHlwbGVuLAogCQkJ CQkJICAgRGF0dW0gdmFsdWUxLCBEYXR1bSB2YWx1ZTIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDg5ODM2OGZiOGNiLi5kOGU4ODgxNzIwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3 NCwxNSArMTc0LDI5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwogCSAqLwogCUF0dHJOdW1i ZXIJaWlfSW5kZXhBdHRyTnVtYmVyc1tJTkRFWF9NQVhfS0VZU107CiAKKwkvKgorCSAqIEFsbCBr ZXksIGV4cHJlc3Npb24sIHN1bWFyaXppbmcsIGFuZCBwYXJ0aXRpb24gYXR0cmlidXRlcyByZWZl cmVuY2VkIGJ5CisJICogdGhpcyBpbmRleAorCSAqLworCUJpdG1hcHNldCAgKmlpX0luZGV4ZWRB dHRyczsKKwogCS8qIGV4cHIgdHJlZXMgZm9yIGV4cHJlc3Npb24gZW50cmllcywgb3IgTklMIGlm IG5vbmUgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9uczsgLyogbGlzdCBvZiBFeHByICovCiAJ LyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBub25lICovCiAJTGlzdAkg ICAqaWlfRXhwcmVzc2lvbnNTdGF0ZTsJLyogbGlzdCBvZiBFeHByU3RhdGUgKi8KKwkvKiBhdHRy aWJ1dGVzIGV4Y2x1c2l2ZWx5IHJlZmVyZW5jZWQgYnkgZXhwcmVzc2lvbiBpbmRleGVzICovCisJ Qml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbnNBdHRyczsKIAogCS8qIHBhcnRpYWwtaW5kZXggcHJl ZGljYXRlLCBvciBOSUwgaWYgbm9uZSAqLwogCUxpc3QJICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlz dCBvZiBFeHByICovCiAJLyogZXhlYyBzdGF0ZSBmb3IgZXhwcmVzc2lvbnMsIG9yIE5JTCBpZiBu b25lICovCiAJRXhwclN0YXRlICAqaWlfUHJlZGljYXRlU3RhdGU7CisJLyogYXR0cmlidXRlcyBy ZWZlcmVuY2VkIGJ5IHRoZSBwcmVkaWNhdGUgKi8KKwlCaXRtYXBzZXQgICppaV9QcmVkaWNhdGVB dHRyczsKKwkvKiBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZSBkZXRlcm1pbmVkIHlldD8gKi8KKwli b29sCQlpaV9DaGVja2VkUHJlZGljYXRlOworCS8qIGFtdXBkYXRlIGhpbnQgdXNlZCB0byBhdm9p ZCByZWNoZWNraW5nIHByZWRpY2F0ZSAqLworCWJvb2wJCWlpX1ByZWRpY2F0ZVNhdGlzZmllZDsK IAogCS8qIFBlci1jb2x1bW4gZXhjbHVzaW9uIG9wZXJhdG9ycywgb3IgTlVMTCBpZiBub25lICov CiAJT2lkCQkgICAqaWlfRXhjbHVzaW9uT3BzOwkvKiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIg Y29sdW1uICovCkBAIC00OTQsNiArNTA4LDExIEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbElu Zm8KIAlCaXRtYXBzZXQgICpyaV9leHRyYVVwZGF0ZWRDb2xzOwogCS8qIHRydWUgaWYgdGhlIGFi b3ZlIGhhcyBiZWVuIGNvbXB1dGVkICovCiAJYm9vbAkJcmlfZXh0cmFVcGRhdGVkQ29sc192YWxp ZDsKKworCS8qCisJICogRm9yIFVQREFURSBhIEJpdG1hcHNldCBvZiB0aGUgYXR0cmlidXRlcyB0 aGF0IGFyZSBib3RoIGluZGV4ZWQgYW5kIGhhdmUKKwkgKiBjaGFuZ2VkIGluIHZhbHVlLgorCSAq LwogCUJpdG1hcHNldCAgKnJpX0NoYW5nZWRJbmRleGVkQ29sczsKIAogCS8qIFByb2plY3Rpb24g dG8gZ2VuZXJhdGUgbmV3IHR1cGxlIGluIGFuIElOU0VSVC9VUERBVEUgKi8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0 Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2Nv bmZsaWN0Lm91dAppbmRleCBlMzRhODIxYzQwMy4uNTRiMzk4MTkxOGMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbnNlcnQtY29uZmxpY3Qtc3BlY2NvbmZsaWN0Lm91 dAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5zZXJ0LWNvbmZsaWN0LXNwZWNj b25mbGljdC5vdXQKQEAgLTgwLDYgKzgwLDEwIEBAIHBnX2Fkdmlzb3J5X3VubG9jawogdCAgICAg ICAgICAgICAgICAgCiAoMSByb3cpCiAKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMo KSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZp c29yeSBsb2NrIG9uIDIKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQg Zm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2Nr IG9uIDIKIHMxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGlu IHNlc3Npb24gMQogczE6IE5PVElDRTogIGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDIKIHMx OiBOT1RJQ0U6ICBibHVydF9hbmRfbG9ja18xMjMoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24g MQpAQCAtMTcyLDYgKzE3NiwxMCBAQCBwZ19hZHZpc29yeV91bmxvY2sKIHQgICAgICAgICAgICAg ICAgIAogKDEgcm93KQogCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVk IGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9j ayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBp biBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBz MjogTk9USUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9u IDIKIHMyOiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzMjogTk9USUNF OiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKQEAgLTM2 OSw2ICszNzcsMTAgQEAga2V5fGRhdGEKIHN0ZXAgczFfY29tbWl0OiBDT01NSVQ7CiBzMjogTk9U SUNFOiAgYmx1cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKIHMy OiBOT1RJQ0U6ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1 cnRfYW5kX2xvY2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6 ICBhY3F1aXJpbmcgYWR2aXNvcnkgbG9jayBvbiAyCitzMjogTk9USUNFOiAgYmx1cnRfYW5kX2xv Y2tfMTIzKCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDIKK3MyOiBOT1RJQ0U6ICBhY3F1aXJp bmcgYWR2aXNvcnkgbG9jayBvbiAyCiBzdGVwIHMyX3Vwc2VydDogPC4uLiBjb21wbGV0ZWQ+CiBz dGVwIGNvbnRyb2xsZXJfc2hvdzogU0VMRUNUICogRlJPTSB1cHNlcnR0ZXN0Owoga2V5fGRhdGEg ICAgICAgCkBAIC01MzAsNiArNTQyLDE0IEBAIGlzb2xhdGlvbi9pbnNlcnQtY29uZmxpY3Qtc3Bl Y2NvbmZsaWN0L3MyfHRyYW5zYWN0aW9uaWR8RXhjbHVzaXZlTG9ja3x0CiBzdGVwIHMyX2NvbW1p dDogQ09NTUlUOwogczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3Ig azEgaW4gc2Vzc2lvbiAxCiBzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24g MgorczE6IE5PVElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vz c2lvbiAxCitzMTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5P VElDRTogIGJsdXJ0X2FuZF9sb2NrXzEyMygpIGNhbGxlZCBmb3IgazEgaW4gc2Vzc2lvbiAxCitz MTogTk9USUNFOiAgYWNxdWlyaW5nIGFkdmlzb3J5IGxvY2sgb24gMgorczE6IE5PVElDRTogIGJs dXJ0X2FuZF9sb2NrXzQoKSBjYWxsZWQgZm9yIGsxIGluIHNlc3Npb24gMQorczE6IE5PVElDRTog IGFjcXVpcmluZyBhZHZpc29yeSBsb2NrIG9uIDQKK3MxOiBOT1RJQ0U6ICBibHVydF9hbmRfbG9j a180KCkgY2FsbGVkIGZvciBrMSBpbiBzZXNzaW9uIDEKK3MxOiBOT1RJQ0U6ICBhY3F1aXJpbmcg YWR2aXNvcnkgbG9jayBvbiA0CiBzdGVwIHMxX3Vwc2VydDogPC4uLiBjb21wbGV0ZWQ+CiBzdGVw IHMxX25vb3A6IAogc3RlcCBjb250cm9sbGVyX3Nob3c6IFNFTEVDVCAqIEZST00gdXBzZXJ0dGVz dDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4cHJlc3Npb25f aW5kZXhlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hvdF9leHByZXNzaW9uX2lu ZGV4ZXMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYTg1NmI1 ZGI2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaG90X2V4 cHJlc3Npb25faW5kZXhlcy5vdXQKQEAgLTAsMCArMSwxMDA3IEBACistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBU ZXN0IFN1aXRlIGZvciBIZWFwLW9ubHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gU2V0 dXA6IENyZWF0ZSBmdW5jdGlvbiB0byBtZWFzdXJlIEhPVCB1cGRhdGVzCitDUkVBVEUgT1IgUkVQ TEFDRSBGVU5DVElPTiBjaGVja19ob3RfdXBkYXRlcygKKyAgICBleHBlY3RlZCBJTlQsCisgICAg cF90YWJsZV9uYW1lIFRFWFQgREVGQVVMVCAndCcsCisgICAgcF9zY2hlbWFfbmFtZSBURVhUIERF RkFVTFQgY3VycmVudF9zY2hlbWEoKQorKQorUkVUVVJOUyBUQUJMRSAoCisgICAgdGFibGVfbmFt ZSBURVhULAorICAgIHRvdGFsX3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVzIEJJR0lO VCwKKyAgICBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgTlVNRVJJQywKKyAgICBtYXRjaGVzX2V4cGVj dGVkIEJPT0xFQU4KKykKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgICAgdl9y ZWxpZCBvaWQ7CisgICAgdl9xdWFsaWZpZWRfbmFtZSBURVhUOworICAgIHZfaG90X3VwZGF0ZXMg QklHSU5UOworICAgIHZfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIEJJ R0lOVDsKKyAgICB2X3hhY3RfdXBkYXRlcyBCSUdJTlQ7CitCRUdJTgorICAgIC0tIEZvcmNlIHN0 YXRpc3RpY3MgdXBkYXRlCisgICAgUEVSRk9STSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsK KworICAgIC0tIEdldCB0YWJsZSBPSUQKKyAgICB2X3F1YWxpZmllZF9uYW1lIDo9IHF1b3RlX2lk ZW50KHBfc2NoZW1hX25hbWUpIHx8ICcuJyB8fCBxdW90ZV9pZGVudChwX3RhYmxlX25hbWUpOwor ICAgIHZfcmVsaWQgOj0gdl9xdWFsaWZpZWRfbmFtZTo6cmVnY2xhc3M7CisKKyAgICBJRiB2X3Jl bGlkIElTIE5VTEwgVEhFTgorCVJBSVNFIEVYQ0VQVElPTiAnVGFibGUgJS4lIG5vdCBmb3VuZCcs IHBfc2NoZW1hX25hbWUsIHBfdGFibGVfbmFtZTsKKyAgICBFTkQgSUY7CisKKyAgICAtLSBHZXQg Y3VtdWxhdGl2ZSArIHRyYW5zYWN0aW9uIHN0YXRzCisgICAgdl9ob3RfdXBkYXRlcyA6PSBDT0FM RVNDRShwZ19zdGF0X2dldF90dXBsZXNfaG90X3VwZGF0ZWQodl9yZWxpZCksIDApOworICAgIHZf dXBkYXRlcyA6PSBDT0FMRVNDRShwZ19zdGF0X2dldF90dXBsZXNfdXBkYXRlZCh2X3JlbGlkKSwg MCk7CisgICAgdl94YWN0X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfdXBkYXRlcyA6PSBD T0FMRVNDRShwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKwor ICAgIHZfaG90X3VwZGF0ZXMgOj0gdl9ob3RfdXBkYXRlcyArIHZfeGFjdF9ob3RfdXBkYXRlczsK KyAgICB2X3VwZGF0ZXMgOj0gdl91cGRhdGVzICsgdl94YWN0X3VwZGF0ZXM7CisKKyAgICBSRVRV Uk4gUVVFUlkKKyAgICBTRUxFQ1QKKwlwX3RhYmxlX25hbWU6OlRFWFQsCisJdl91cGRhdGVzOjpC SUdJTlQsCisJdl9ob3RfdXBkYXRlczo6QklHSU5ULAorCUNBU0UgV0hFTiB2X3VwZGF0ZXMgPiAw CisJICAgICBUSEVOIFJPVU5EKCh2X2hvdF91cGRhdGVzOjpudW1lcmljIC8gdl91cGRhdGVzOjpu dW1lcmljICogMTAwKTo6bnVtZXJpYywgMikKKwkgICAgIEVMU0UgMAorCUVORCwKKwkodl9ob3Rf dXBkYXRlcyA9IGV4cGVjdGVkKTo6Qk9PTEVBTjsKK0VORDsKKyQkOworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g QmFzaWMgSlNPTkIgRXhwcmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5UIFBSSU1BUlkgS0VZLCBkb2NzIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2RvY3NfbmFtZV9p ZHggT04gdCgoZG9jcy0+PiduYW1lJykpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7Im5h bWUiOiAiYWxpY2UiLCAiYWdlIjogMzB9Jyk7CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIg ZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYWxp Y2UiLCAiYWdlIjogMzF9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAg ICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGlu ZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3Mg PSAneyJuYW1lIjogImJvYiIsICJhZ2UiOiAzMX0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRl cyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3Rl ZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAg ICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQor CistLSBVcGRhdGUgbm9uLWluZGV4ZWQgZmllbGQgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYm9iIiwgImFnZSI6IDMyfScgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgNjYuNjcg fCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFBhcnRpYWwgSW5k ZXggd2l0aCBQcmVkaWNhdGUgVHJhbnNpdGlvbnMKKy0tID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0 KGlkIElOVCwgdmFsdWUgSU5UKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwg ZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X3ZhbHVlX2lkeCBPTiB0KHZhbHVlKSBX SEVSRSB2YWx1ZSA+IDEwOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUpOworLS0gQm90aCBv dXRzaWRlIHByZWRpY2F0ZSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDgg V0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOwor IHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3Bl cmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAg ICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUgV0hFUkUgaWQgPSAx OworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUg fCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBt YXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAg fCB0CisoMSByb3cpCisKKy0tIEJvdGggaW5zaWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcyAt IHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAyMCBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8 IHQKKygxIHJvdykKKworLS0gVHJhbnNpdGlvbiBvdXQgb2YgcHJlZGljYXRlIC0gc2hvdWxkIE5P VCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICA0IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMjUuMDAgfCB0CisoMSByb3cp CisKKy0tIEJvdGggb3V0c2lkZSBwcmVkaWNhdGUgYWdhaW4gLSBzaG91bGQgYmUgSE9UCitVUERB VEUgdCBTRVQgdmFsdWUgPSAzIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNSB8ICAgICAg ICAgICAyIHwgICAgICAgICAgICAgICAgIDQwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxF IHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLSBFeHByZXNzaW9uIEluZGV4IHdpdGggUGFydGlhbCBQcmVkaWNh dGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGRvY3MgSlNPTkIpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf aWR4IE9OIHQoKGRvY3MtPj4nc3RhdHVzJykpCisgICAgV0hFUkUgKGRvY3MtPj4ncHJpb3JpdHkn KTo6aW50ID4gNTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgneyJzdGF0dXMiOiAicGVuZGluZyIs ICJwcmlvcml0eSI6IDN9Jyk7CistLSBCb3RoIG91dHNpZGUgcHJlZGljYXRlLCBzdGF0dXMgdW5j aGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAi cGVuZGluZyIsICJwcmlvcml0eSI6IDR9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAx IHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBUcmFuc2l0aW9uIGlu dG8gcHJlZGljYXRlIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3si c3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiAxMH0nOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwg ICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIElu c2lkZSBwcmVkaWNhdGUsIHN0YXR1cyBjaGFuZ2VzIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFU RSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogImFjdGl2ZSIsICJwcmlvcml0eSI6IDEwfSc7CitT RUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRv dGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNo ZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8 ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQK KygxIHJvdykKKworLS0gSW5zaWRlIHByZWRpY2F0ZSwgc3RhdHVzIHVuY2hhbmdlZCAtIHNob3Vs ZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogImFjdGl2ZSIsICJwcmlv cml0eSI6IDh9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAg ICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBH SU4gSW5kZXggb24gSlNPTkIKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0 YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9OIHQgVVNJTkcgZ2luKGRhdGEpOworSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEsICd7InRhZ3MiOiBbInBvc3RncmVzIiwgImRhdGFiYXNlIl19 Jyk7CistLSBDaGFuZ2UgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNxbCJdfScgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5nZSB0YWdzIGFnYWluIC0gR0lOIGtleXMg Y2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6 IFsibXlzcWwiLCAic3FsIl19JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hv dF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBk YXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKworLS0gQWRkIGZp ZWxkIHdpdGhvdXQgY2hhbmdpbmcgZXhpc3Rpbmcga2V5cyAtIEdJTiBrZXlzIGNoYW5nZWQgKGFk ZGVkICJub3RlIiksIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlz cWwiLCAic3FsIl0sICJub3RlIjogInRlc3QifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAzIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisK K0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiBJbmRleCB3aXRoIFVuY2hhbmdlZCBL ZXlzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworLS0gQ3Jl YXRlIEdJTiBpbmRleCBvbiBzcGVjaWZpYyBwYXRoCitDUkVBVEUgSU5ERVggdF9naW5faWR4IE9O IHQgVVNJTkcgZ2luKChkYXRhLT4ndGFncycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAn eyJ0YWdzIjogWyJwb3N0Z3JlcyIsICJzcWwiXSwgInN0YXR1cyI6ICJhY3RpdmUifScpOworLS0g Q2hhbmdlIG5vbi1pbmRleGVkIGZpZWxkIC0gR0lOIGtleXMgb24gJ3RhZ3MnIHVuY2hhbmdlZCwg c2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJwb3N0Z3JlcyIs ICJzcWwiXSwgInN0YXR1cyI6ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykK KworLS0gQ2hhbmdlIGluZGV4ZWQgdGFncyAtIEdJTiBrZXlzIGNoYW5nZWQsIHNob3VsZCBOT1Qg YmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3MiOiBbIm15c3FsIiwgInNxbCJdLCAi c3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRB QkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBHSU4gd2l0aCBqc29uYl9wYXRoX29wcworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbl9p ZHggT04gdCBVU0lORyBnaW4oZGF0YSBqc29uYl9wYXRoX29wcyk7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSJ9LCAidGFncyI6IFsiYSIsICJiIl19 Jyk7CistLSBDaGFuZ2UgdmFsdWUgYXQgZGlmZmVyZW50IHBhdGggLSBrZXlzIGNoYW5nZWQsIE5P VCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6IHsibmFtZSI6ICJib2IifSwgInRh Z3MiOiBbImEiLCAiYiJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAg ICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUg dDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIE11bHRpLUNvbHVtbiBFeHByZXNzaW9uIEluZGV4CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGEgSU5ULCBiIElOVCkKKyAgICBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9p ZHggT04gdChpZCwgYWJzKGEpLCBhYnMoYikpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIC01 LCAtMTApOworLS0gQ2hhbmdlIHNpZ24gYnV0IG5vdCBhYnMgdmFsdWUgLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgYSA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5n ZSBhYnMgdmFsdWUgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGIgPSAtMTUgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAg ICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5nZSBpZCAtIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgdCBTRVQgaWQgPSAyIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tf aG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91 cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAg ICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMzLjMzIHwgdAorKDEgcm93KQorCitEUk9QIFRB QkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBNaXhlZCBJbmRleCBUeXBlcyAoQlJJTiArIEV4cHJlc3Np b24pCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBK U09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3 MCk7CitDUkVBVEUgSU5ERVggdF9icmluX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpOworQ1JF QVRFIElOREVYIHRfZXhwcl9pZHggT04gdCgoZGF0YS0+PidzdGF0dXMnKSk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgMTAwLCAneyJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKy0tIFVwZGF0ZSBv bmx5IEJSSU4gY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMjAw IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgb25seSBleHByZXNzaW9uIGNv bHVtbiAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6 ICJpbmFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGJvdGgg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMzAwLCBkYXRhID0gJ3si c3RhdHVzIjogInBlbmRpbmcifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKK0RST1AgVEFC TEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tIEV4cHJlc3Npb24gd2l0aCBDT0xMQVRJT04gYW5kIEJUUkVF IChuYnRyZWUpIGluZGV4CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgQ09MTEFUSU9OIGNhc2VfaW5zZW5z aXRpdmUgKAorICAgIHByb3ZpZGVyID0gaWN1LAorICAgIGxvY2FsZSA9ICd1bmQtdS1rcy1sZXZl bDInLAorICAgIGRldGVybWluaXN0aWMgPSBmYWxzZQorKTsKK0NSRUFURSBUQUJMRSB0KAorICAg IGlkIElOVCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFRFWFQgQ09MTEFURSBjYXNlX2luc2Vuc2l0 aXZlCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsK K0NSRUFURSBJTkRFWCB0X2xvd2VyX2lkeCBPTiB0IFVTSU5HIEJUUkVFIChuYW1lIENPTExBVEUg Y2FzZV9pbnNlbnNpdGl2ZSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ0FMSUNFJyk7Cist LSBDaGFuZ2UgY2FzZSBidXQgbm90IHZhbHVlIC0gc2hvdWxkIE5PVCBiZSBIT1QgaW4gQlRSRUUK K1VQREFURSB0IFNFVCBuYW1lID0gJ0FsaWNlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKwor LS0gQ2hhbmdlIHRvIG5ldyB2YWx1ZSAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQg bmFtZSA9ICdCT0InIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMCwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwg aG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAw IHwgICAgICAgICAgICAgICAgICAwLjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7Cist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBBcnJheSBFeHByZXNzaW9uIEluZGV4CistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUg VEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2FycmF5X2xlbl9pZHgg T04gdChhcnJheV9sZW5ndGgodGFncywgMSkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIEFS UkFZWydhJywgJ2InLCAnYyddKTsKKy0tIFNhbWUgbGVuZ3RoLCBkaWZmZXJlbnQgZWxlbWVudHMg LSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgdGFncyA9IEFSUkFZWydkJywgJ2UnLCAnZidd IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsK KyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9w ZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAg ICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBEaWZmZXJlbnQgbGVuZ3RoIC0gc2hvdWxk IE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCB0YWdzID0gQVJSQVlbJ2QnLCAnZSddIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9u YW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUw LjAwIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQ7CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBOZXN0ZWQg SlNPTkIgRXhwcmVzc2lvbiBhbmQgSlNPTkIgZXF1YWxpdHkgJy0+JyAobm90ICctPj4nKQorLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9uZXN0ZWRf aWR4IE9OIHQoKGRhdGEtPid1c2VyJy0+J25hbWUnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAo J3sidXNlciI6IHsibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMH19Jyk7CistLSBDaGFuZ2UgbmVz dGVkIG5vbi1pbmRleGVkIGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEg PSAneyJ1c2VyIjogeyJuYW1lIjogImFsaWNlIiwgImFnZSI6IDMxfX0nOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAxIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisK Ky0tIENoYW5nZSBuZXN0ZWQgaW5kZXhlZCBmaWVsZCAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERB VEUgdCBTRVQgZGF0YSA9ICd7InVzZXIiOiB7Im5hbWUiOiAiYm9iIiwgImFnZSI6IDMxfX0nOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0 b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRj aGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg fCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0 CisoMSByb3cpCisKK0RST1AgVEFCTEUgdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIENvbXBsZXggUHJlZGlj YXRlIG9uIE11bHRpcGxlIEpTT05CIEZpZWxkcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo ZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9pZHggT04gdCgoZGF0YS0+PidzdGF0dXMnKSkKKyAg ICBXSEVSRSAoZGF0YS0+Pidwcmlvcml0eScpOjppbnQgPiA1CisgICAgICBBTkQgKGRhdGEtPj4n YWN0aXZlJyk6OmJvb2xlYW4gPSB0cnVlOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKCd7InN0YXR1 cyI6ICJwZW5kaW5nIiwgInByaW9yaXR5IjogMywgImFjdGl2ZSI6IHRydWV9Jyk7CistLSBPdXRz aWRlIHByZWRpY2F0ZSAocHJpb3JpdHkgdG9vIGxvdykgLSBzaG91bGQgYmUgSE9UCitVUERBVEUg dCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJkb25lIiwgInByaW9yaXR5IjogMywgImFjdGl2ZSI6 IHRydWV9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJs ZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50 YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAg MTAwLjAwIHwgdAorKDEgcm93KQorCistLSBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlIC0gc2hv dWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjogImRvbmUiLCAi cHJpb3JpdHkiOiAxMCwgImFjdGl2ZSI6IHRydWV9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAg ICAgICAxIHwgICAgICAgICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBJbnNpZGUg cHJlZGljYXRlLCBjaGFuZ2UgdG8gb3V0c2lkZSAoYWN0aXZlID0gZmFsc2UpIC0gc2hvdWxkIE5P VCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sic3RhdHVzIjogImRvbmUiLCAicHJpb3Jp dHkiOiAxMCwgImFjdGl2ZSI6IGZhbHNlfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRh dGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8 IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICAzMy4zMyB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0Owor LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0gR0lOIEFycmF5IEluZGV4IC0gT3JkZXIgSW5zZW5zaXRpdmUgRXh0cmFj dGlvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoCisgICAgaWQgSU5UIFBSSU1BUlkgS0VZ LAorICAgIGRhdGEgSlNPTkIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxs ZmFjdG9yID0gNzApOworLS0gR0lOIGluZGV4IG9uIEpTT05CIGFycmF5IChleHRyYWN0cyBhbGwg ZWxlbWVudHMpCitDUkVBVEUgSU5ERVggdF9pdGVtc19naW4gT04gdCBVU0lORyBHSU4gKChkYXRh LT4naXRlbXMnKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siaXRlbXMiOiBbMSwgMiwg M10sICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKy0tIFVwZGF0ZTogUmVvcmRlciBhcnJheSBlbGVt ZW50cworLS0gSlNPTkIgZXF1YWxpdHk6IE5PVCBlcXVhbCAoZGlmZmVyZW50IGFycmF5cykKKy0t IEdJTiBleHRyYWN0aW9uOiBTYW1lIGVsZW1lbnRzIGV4dHJhY3RlZCAobWlnaHQgYWxsb3cgSE9U IGlmIG5vdCBjYXJlZnVsKQorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJpdGVtcyI6IFszLCAyLCAx XSwgInN0YXR1cyI6ICJhY3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90 X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwg ICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVw ZGF0ZTogQWRkL3JlbW92ZSBlbGVtZW50CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7Iml0ZW1zIjog WzEsIDIsIDMsIDRdLCAic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJv dykKKworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVE9BU1RlZCBWYWx1ZXMgaW4gRXhw cmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBsYXJnZV90 ZXh0IFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9y ID0gNzApOworQ1JFQVRFIElOREVYIHRfc3Vic3RyX2lkeCBPTiB0KHN1YnN0cihsYXJnZV90ZXh0 LCAxLCAxMCkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIHJlcGVhdCgneCcsIDUwMDApIHx8 ICdpZGVudGlmaWVyJyk7CistLSBDaGFuZ2UgZW5kIG9mIHN0cmluZywgcHJlZml4IHVuY2hhbmdl ZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBsYXJnZV90ZXh0ID0gcmVwZWF0KCd4Jywg NTAwMCkgfHwgJ2RpZmZlcmVudCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3Vw ZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAg ICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIENoYW5n ZSBwcmVmaXggLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGxhcmdlX3RleHQgPSBy ZXBlYXQoJ3knLCA1MDAwKSB8fCAnZGlmZmVyZW50JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0 ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0 ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAg ICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJvdykK KworRFJPUCBUQUJMRSB0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVEVTVDogR0lOIHdpdGggVE9BU1RlZCBU RVhUICh0c3ZlY3RvcikKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY29udGVu dCBURVhULCBzZWFyY2hfdmVjIHRzdmVjdG9yKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0tIENyZWF0ZSB0cmlnZ2VyIHRvIG1haW50YWlu IHRzdmVjdG9yCitDUkVBVEUgVFJJR0dFUiB0c3ZlY3RvcnVwZGF0ZV90b2FzdAorICAgIEJFRk9S RSBJTlNFUlQgT1IgVVBEQVRFIE9OIHQKKyAgICBGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElP TgorICAgIHRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKHNlYXJjaF92ZWMsICdwZ19jYXRhbG9nLmVu Z2xpc2gnLCBjb250ZW50KTsKK0NSRUFURSBJTkRFWCB0X2dpbiBPTiB0IFVTSU5HIGdpbihzZWFy Y2hfdmVjKTsKKy0tIEluc2VydCB3aXRoIGxhcmdlIGNvbnRlbnQgKHdpbGwgYmUgVE9BU1RlZCkK K0lOU0VSVCBJTlRPIHQgKGlkLCBjb250ZW50KSBWQUxVRVMKKyAgICAoMSwgcmVwZWF0KCdpbXBv cnRhbnQga2V5d29yZCAnLCAxMDAwKSB8fCByZXBlYXQoJ2ZpbGxlciB0ZXh0ICcsIDEwMDAwKSk7 CistLSBWZXJpZnkgaW5pdGlhbCBzdGF0ZQorU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBz ZWFyY2hfdmVjIEBAIHRvX3RzcXVlcnkoJ2ltcG9ydGFudCcpOworIGNvdW50IAorLS0tLS0tLQor ICAgICAxCisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIHJvdworLS0gSU1QT1JUQU5UOiBUaGUg QkVGT1JFIFVQREFURSB0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMsIHNvIGJ5IHRoZSB0aW1l CistLSBFeGVjV2hpY2hJbmRleGVzUmVxdWlyZVVwZGF0ZXMoKSBydW5zLCBzZWFyY2hfdmVjIGhh cyBhbHJlYWR5IGNoYW5nZWQuCistLSBUaGlzIG1lYW5zIHRoZSBjb21wYXJpc29uIHNlZXMgb2xk IHRzdmVjdG9yIHZzLiB0cmlnZ2VyLW1vZGlmaWVkIHRzdmVjdG9yLAorLS0gbm90IHRoZSBuYXR1 cmFsIHByb2dyZXNzaW9uLiBIT1Qgd29uJ3QgaGFwcGVuIGJlY2F1c2UgdGhlIHRyaWdnZXIgY2hh bmdlZAorLS0gdGhlIGluZGV4ZWQgY29sdW1uLgorLS0gVXBkYXRlOiBFdmVuIHRob3VnaCBjb250 ZW50IGtleXdvcmRzIHVuY2hhbmdlZCwgdHJpZ2dlciBzdGlsbCBmaXJlcworVVBEQVRFIHQKK1NF VCBjb250ZW50ID0gcmVwZWF0KCdpbXBvcnRhbnQga2V5d29yZCAnLCAxMDAwKSB8fCByZXBlYXQo J2RpZmZlcmVudCBmaWxsZXIgJywgMTAwMDApCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygxIHJvdykKKwor LS0gRXhwZWN0ZWQ6IDAgSE9UICh0cmlnZ2VyIG1vZGlmaWVzIHNlYXJjaF92ZWMsIGJsb2NraW5n IEhPVCkKKy0tIFRoaXMgaXMgYWN0dWFsbHkgY29ycmVjdCBiZWhhdmlvciAtIHRoZSB0cmlnZ2Vy IHVwZGF0ZWQgYW4gaW5kZXhlZCBjb2x1bW4KKy0tIFVwZGF0ZTogQ2hhbmdlIGluZGV4ZWQga2V5 d29yZHMKK1VQREFURSB0CitTRVQgY29udGVudCA9IHJlcGVhdCgnY3JpdGljYWwga2V5d29yZCAn LCAxMDAwKSB8fCByZXBlYXQoJ2RpZmZlcmVudCBmaWxsZXIgJywgMTAwMDApCitXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CisgdGFibGVfbmFt ZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8 IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAg ICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4w MCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgSE9UIChpbmRleCBrZXlzIGNoYW5nZWQp CistLSBWZXJpZnkgcXVlcnkgY29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hF UkUgc2VhcmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdjcml0aWNhbCcpOworIGNvdW50IAorLS0tLS0t LQorICAgICAxCisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIHJvdworRFJPUCBUQUJMRSB0IENB U0NBREU7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBURVNUOiBHSU4gd2l0aCBUT0FTVGVkIEpTT05CCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf Z2luIE9OIHQgVVNJTkcgZ2luKChkYXRhLT4ndGFncycpKTsKKy0tIEluc2VydCB3aXRoIFRPQVNU ZWQgSlNPTkIKK0lOU0VSVCBJTlRPIHQgKGlkLCBkYXRhKSBWQUxVRVMKKyAgICAoMSwganNvbmJf YnVpbGRfb2JqZWN0KAorICAgICAgICAndGFncycsICdbInBvc3RncmVzIiwgImRhdGFiYXNlIl0n Ojpqc29uYiwKKyAgICAgICAgJ2xhcmdlX2ZpZWxkJywgcmVwZWF0KCd4JywgMTAwMDApCisgICAg KSk7CistLSBVcGRhdGU6IENoYW5nZSBsYXJnZV9maWVsZCwgdGFncyB1bmNoYW5nZWQgLSBzaG91 bGQgYmUgSE9UCitVUERBVEUgdAorU0VUIGRhdGEgPSBqc29uYl9idWlsZF9vYmplY3QoCisgICAg J3RhZ3MnLCAnWyJwb3N0Z3JlcyIsICJkYXRhYmFzZSJdJzo6anNvbmIsCisgICAgJ2xhcmdlX2Zp ZWxkJywgcmVwZWF0KCd5JywgMTAwMDApCispCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9N IGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMg fCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAg IDEgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKwor LS0gRXhwZWN0ZWQ6IDEgSE9UIHVwZGF0ZQorLS0gVXBkYXRlOiBDaGFuZ2UgdGFncyAtIHNob3Vs ZCBOT1QgYmUgSE9UCitVUERBVEUgdAorU0VUIGRhdGEgPSBqc29uYl9idWlsZF9vYmplY3QoCisg ICAgJ3RhZ3MnLCAnWyJwb3N0Z3JlcyIsICJzcWwiXSc6Ompzb25iLAorICAgICdsYXJnZV9maWVs ZCcsIHJlcGVhdCgneScsIDEwMDAwKQorKQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwg aG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAy IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0CisoMSByb3cpCisKKy0t IEV4cGVjdGVkOiBTdGlsbCAxIEhPVAorLS0gVmVyaWZ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0IFdIRVJFIGRhdGEtPid0YWdzJyBAPiAnWyJkYXRhYmFzZSJdJzo6anNvbmI7 CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgcm93 cworU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBkYXRhLT4ndGFncycgQD4gJ1sic3FsIl0n Ojpqc29uYjsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCistLSBFeHBlY3Rl ZDogMSByb3cKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVEVTVDogR0lO IHdpdGggQXJyYXkgb2YgTGFyZ2UgU3RyaW5ncworLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQo aWQgSU5ULCB0YWdzIFRFWFRbXSkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9naW4gT04gdCBVU0lORyBnaW4odGFn cyk7CistLSBJbnNlcnQgd2l0aCBsYXJnZSBhcnJheSBlbGVtZW50cyAobWlnaHQgYmUgVE9BU1Rl ZCkKK0lOU0VSVCBJTlRPIHQgKGlkLCB0YWdzKSBWQUxVRVMKKyAgICAoMSwgQVJSQVlbcmVwZWF0 KCd0YWcxJywgMTAwMCksIHJlcGVhdCgndGFnMicsIDEwMDApXSk7CistLSBVcGRhdGU6IENoYW5n ZSB0byBkaWZmZXJlbnQgbGFyZ2UgdmFsdWVzIC0gTk9UIEhPVAorVVBEQVRFIHQKK1NFVCB0YWdz ID0gQVJSQVlbcmVwZWF0KCd0YWczJywgMTAwMCksIHJlcGVhdCgndGFnNCcsIDEwMDApXQorV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRh YmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNl bnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAg ICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVCAoa2V5cyBhY3R1YWxs eSBjaGFuZ2VkKQorLS0gVXBkYXRlOiBLZWVwIHNhbWUgdGFnIHZhbHVlcywganVzdCByZW9yZGVy IC0gU0hPVUxEIEJFIEhPVAorLS0gKEdJTiBpcyBvcmRlci1pbnNlbnNpdGl2ZTogYm90aCBbdGFn Myx0YWc0XSBhbmQgW3RhZzQsdGFnM10KKy0tIGV4dHJhY3QgdG8gdGhlIHNhbWUgc29ydGVkIGtl eSBzZXQgWyd0YWczJywndGFnNCddKQorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0 KCd0YWc0JywgMTAwMCksIHJlcGVhdCgndGFnMycsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAg ICAgICAgICAgICAyIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgNTAuMDAgfCB0Ciso MSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIEhPVCAoR0lOIGtleXMgc2VtYW50aWNhbGx5IGlkZW50 aWNhbCkKKy0tIFVwZGF0ZTogUmVtb3ZlIGFuIGVsZW1lbnQgLSBOT1QgSE9UIChrZXlzIGNoYW5n ZWQpCitVUERBVEUgdAorU0VUIHRhZ3MgPSBBUlJBWVtyZXBlYXQoJ3RhZzQnLCAxMDAwKV0KK1dI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0 YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJj ZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0K KyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAg ICAgIDMzLjMzIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogU3RpbGwgMSBIT1QgKG5vdCB0 aGlzIG9uZSkKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiBJbmRl eCB3aXRoIFBhcnRpYWwgUHJlZGljYXRlCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCgKKyAg ICBpZCBJTlQgUFJJTUFSWSBLRVksCisgICAgdmFsdWUgSU5ULAorICAgIGRlc2NyaXB0aW9uIFRF WFQKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor Q1JFQVRFIElOREVYIHRfYnJpbl9wYXJ0aWFsX2lkeCBPTiB0IFVTSU5HIGJyaW4odmFsdWUpIFdI RVJFIHZhbHVlID4gMTAwOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUwLCAnYmVsb3cgcmFu Z2UnKTsKKy0tIFRlc3QgMTogT3V0c2lkZSBwcmVkaWNhdGUKK1VQREFURSB0IFNFVCBkZXNjcmlw dGlvbiA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRl cyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDEgfCAgICAgICAg ICAgMSB8ICAgICAgICAgICAgICAgIDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gVmFsaWRhdGU6 IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDAgcm93cworU0VMRUNUIENPVU5UKCopIGFzIGNudCBG Uk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisgY250IAorLS0tLS0KKyAgIDAKKygxIHJvdykKKwor LS0gVGVzdCAyOiBUcmFuc2l0aW9uIGludG8gcHJlZGljYXRlCitVUERBVEUgdCBTRVQgdmFsdWUg PSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAn dCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBk YXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAyIHwgICAgICAgICAgIDIgfCAgICAg ICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFZhbGlkYXRlOiBQcmVkaWNhdGUg cXVlcnkgcmV0dXJucyAxIHJvdyB3aXRoIGNvcnJlY3QgdmFsdWUKK1NFTEVDVCBDT1VOVCgqKSBh cyBjbnQsIE1BWCh2YWx1ZSkgYXMgbWF4X3ZhbCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7Cisg Y250IHwgbWF4X3ZhbCAKKy0tLS0tKy0tLS0tLS0tLQorICAgMSB8ICAgICAxNTAKKygxIHJvdykK KworLS0gVGVzdCAzOiBJbnNpZGUgcHJlZGljYXRlLCB2YWx1ZSBjaGFuZ2VzCitVUERBVEUgdCBT RVQgdmFsdWUgPSAxNjAsIGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQgYWdhaW4nIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMywgJ3QnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAzIHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCistLSBWYWxpZGF0ZTogVXBkYXRlZCB2YWx1ZSAoMTYwKSBpcyByZXR1 cm5lZAorU0VMRUNUIENPVU5UKCopIGFzIGNudCwgTUFYKHZhbHVlKSBhcyBtYXhfdmFsIEZST00g dCBXSEVSRSB2YWx1ZSA+IDEwMDsKKyBjbnQgfCBtYXhfdmFsIAorLS0tLS0rLS0tLS0tLS0tCisg ICAxIHwgICAgIDE2MAorKDEgcm93KQorCistLSBUZXN0IDQ6IFRyYW5zaXRpb24gb3V0IG9mIHBy ZWRpY2F0ZQorVVBEQVRFIHQgU0VUIHZhbHVlID0gNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcyg0LCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRh dGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVj dGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAg ICAgICA0IHwgICAgICAgICAgIDQgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cp CisKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworIGNu dCAKKy0tLS0tCisgICAwCisoMSByb3cpCisKK1NFTEVDVCBpZCwgdmFsdWUsIGRlc2NyaXB0aW9u IEZST00gdDsKKyBpZCB8IHZhbHVlIHwgIGRlc2NyaXB0aW9uICAKKy0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0KKyAgMSB8ICAgIDUwIHwgdXBkYXRlZCBhZ2FpbgorKDEgcm93KQorCitEUk9Q IFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggKFNpbXBsZSBDb2x1 bW4pCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNvZGUgVkFSQ0hBUigyMCks IGRlc2NyaXB0aW9uIFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaGFzaF9pZHggT04gdCBVU0lORyBoYXNo KGNvZGUpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdDT0RFMDAxJywgJ2luaXRpYWwnKTsK Ky0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBT RVQgZGVzY3JpcHRpb24gPSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwg aG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAx IHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0t IFVwZGF0ZSBpbmRleGVkIGNvbHVtbiAtIEhBU0ggaW5kZXggcmVxdWlyZXMgdXBkYXRlLCBOT1Qg SE9UCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RFMDAyJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8IHRvdGFsX3Vw ZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNfZXhw ZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICB8ICAgICAg ICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8IHQKKygxIHJv dykKKworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY29kZSA9ICdDT0RF MDAzJywgZGVzY3JpcHRpb24gPSAnY2hhbmdlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJP TSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVz IHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVk IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAg ICAzIHwgICAgICAgICAgIDEgfCAgICAgICAgICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisK Ky0tIEJhY2sgdG8gb3JpZ2luYWwgY29kZSAtIE5PVCBIT1QgKGRpZmZlcmVudCBoYXNoIGJ1Y2tl dCBsb2NhdGlvbikKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDEnIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwg dG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0 Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg IHwgICAgICAgICAgICAgNCB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDI1LjAwIHwg dAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0gg SW5kZXggb24gRXhwcmVzc2lvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBl bWFpbCBURVhULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9m ZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfbG93ZXJfZW1haWxfaWR4 IE9OIHQgVVNJTkcgSEFTSChsb3dlcihlbWFpbCkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEs ICdBbGljZUBFeGFtcGxlLmNvbScsICd7InN0YXR1cyI6ICJuZXcifScpOworLS0gVXBkYXRlIG5v bi1pbmRleGVkIGZpZWxkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJz dGF0dXMiOiAiYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90 X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRh dGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAg ICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUg ZW1haWwgd2l0aCBjYXNlIGNoYW5nZSBvbmx5IChzYW1lIGxvd2VyY2FzZSkgLSBzaG91bGQgYmUg SE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYWxpY2VAZXhhbXBsZS5jb20nIFdIRVJFIGlkID0g MTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9uYW1l IHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwg bWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAg ICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAw IHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgZW1haWwgdG8gZGlmZmVyZW50IGxvd2VyY2FzZSAt IE5PVCBIT1QKK1VQREFURSB0IFNFVCBlbWFpbCA9ICdib2JAZXhhbXBsZS5jb20nIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9u YW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgIDY2 LjY3IHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IEhBU0ggSW5kZXggb24gSlNPTkIgRmllbGQKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlk IElOVCwgZGF0YSBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZp bGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVT SU5HIGhhc2goKGRhdGEtPj4nY2F0ZWdvcnknKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwg J3siY2F0ZWdvcnkiOiAiYm9va3MiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBHdWlkZSJ9Jyk7Cist LSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUg dCBTRVQgZGF0YSA9ICd7ImNhdGVnb3J5IjogImJvb2tzIiwgInRpdGxlIjogIlBvc3RncmVTUUwg SGFuZGJvb2sifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEg fCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBpbmRleGVk IEpTT05CIGZpZWxkIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJjYXRlZ29yeSI6 ICJ2aWRlb3MiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBIYW5kYm9vayJ9JyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVfbmFtZSB8 IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1h dGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1MC4wMCB8 IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGJvdGggLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgZGF0 YSA9ICd7ImNhdGVnb3J5IjogImNvdXJzZXMiLCAidGl0bGUiOiAiUG9zdGdyZVNRTCBCYXNpY3Mi fScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcp OworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRl X3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDEgfCAgICAgICAg ICAgICAgICAgMzMuMzMgfCB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gTXVsdGlwbGUgSEFTSCBJbmRleGVzCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHN0YXR1cyBWQVJDSEFSLCB2YWx1ZSBJTlQp CisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor Q1JFQVRFIElOREVYIHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKGNhdGVnb3J5 KTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfc3RhdHVzX2lkeCBPTiB0IFVTSU5HIGhhc2goc3RhdHVz KTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnZWxlY3Ryb25pY3MnLCAnYWN0aXZlJywgMTAw KTsKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUg dCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAg ICAgIDEgfCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIFVwZGF0ZSBv bmUgaW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSAnYm9v a3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3Qn KTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0 ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgMiB8ICAgICAgICAgICAxIHwgICAgICAg ICAgICAgICAgIDUwLjAwIHwgdAorKDEgcm93KQorCistLSBVcGRhdGUgb3RoZXIgaW5kZXhlZCBj b2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgc3RhdHVzID0gJ2luYWN0aXZlJyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisgdGFibGVf bmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFn ZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICB8ICAgICAgICAgICAgIDMgfCAgICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICAz My4zMyB8IHQKKygxIHJvdykKKworLS0gVXBkYXRlIGJvdGggaW5kZXhlZCBjb2x1bW5zIC0gTk9U IEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ3ZpZGVvcycsIHN0YXR1cyA9ICdwZW5kaW5n JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7 CisgdGFibGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVf cGVyY2VudGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tCisgdCAgICAgICAgICB8ICAgICAgICAgICAgIDQgfCAgICAgICAgICAgMSB8ICAgICAgICAg ICAgICAgICAyNS4wMCB8IHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBCUklOIHZzIEhBU0ggQ29tcGFyaXNvbgorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHRfYnJpbihpZCBJTlQsIHZhbHVlIElOVCwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBUQUJMRSB0X2hh c2goaWQgSU5ULCB2YWx1ZSBJTlQsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9icmluX3ZhbHVl X2lkeCBPTiB0X2JyaW4gVVNJTkcgYnJpbih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9oYXNoX3Zh bHVlX2lkeCBPTiB0X2hhc2ggVVNJTkcgaGFzaCh2YWx1ZSk7CitJTlNFUlQgSU5UTyB0X2JyaW4g VkFMVUVTICgxLCAxMDAsICdpbml0aWFsJyk7CitJTlNFUlQgSU5UTyB0X2hhc2ggVkFMVUVTICgx LCAxMDAsICdpbml0aWFsJyk7CistLSBTYW1lIHVwZGF0ZSBvbiBib3RoIC0gZGlmZmVyZW50IEhP VCBiZWhhdmlvciBleHBlY3RlZAorLS0gQlJJTjogbWlnaHQgYWxsb3cgSE9UIChyYW5nZSBzdW1t YXJ5IHVuY2hhbmdlZCkKKy0tIEhBU0g6IGJsb2NrcyBIT1QgKGhhc2ggYnVja2V0IGNoYW5nZWQp CitVUERBVEUgdF9icmluIFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0X2JyaW4nKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0X2JyaW4gICAgIHwgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBFeHBlY3RlZDogMSBIT1QgKEJSSU4gYWxsb3dzIGl0IGZvciBzaW5nbGUgcm93 KQorVVBEQVRFIHRfaGFzaCBTRVQgdmFsdWUgPSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICog RlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndF9oYXNoJyk7CisgdGFibGVfbmFtZSB8IHRvdGFs X3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2VudGFnZSB8IG1hdGNoZXNf ZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgdF9oYXNoICAgICB8ICAg ICAgICAgICAgIDEgfCAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgMC4wMCB8IHQKKygx IHJvdykKKworLS0gRXhwZWN0ZWQ6IDAgSE9UIChIQVNIIGJsb2NrcyBpdCkKK0RST1AgVEFCTEUg dF9icmluIENBU0NBREU7CitEUk9QIFRBQkxFIHRfaGFzaCBDQVNDQURFOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gSEFTSCBJbmRleCB3aXRoIE5VTEwgVmFsdWVzCistLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUg dChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNo X2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworSU5TRVJUIElOVE8gdCBW QUxVRVMgKDEsICdlbGVjdHJvbmljcycsICdpbml0aWFsJyk7CistLSBVcGRhdGUgaW5kZXhlZCBj b2x1bW4gdG8gTlVMTCAtIE5PVCBIT1QgKGhhc2ggdmFsdWUgY2hhbmdlZCkKK1VQREFURSB0IFNF VCBjYXRlZ29yeSA9IE5VTEwgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0 ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAg ICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVk OiAwIEhPVAorLS0gVXBkYXRlIGluZGV4ZWQgY29sdW1uIGZyb20gTlVMTCB0byB2YWx1ZSAtIE5P VCBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9ICdib29rcycgV0hFUkUgaWQgPSAxOworU0VM RUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygwLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVz X2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAg ICAgICAgICAgICAyIHwgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgIDAuMDAgfCB0Ciso MSByb3cpCisKKy0tIEV4cGVjdGVkOiAwIEhPVAorLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVt biAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9u YW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMyB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDMz LjMzIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QKK0RST1AgVEFCTEUgdCBDQVND QURFOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorLS0gQlJJTiBvbiBKU09OQiBGaWVsZAorLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JF QVRFIFRBQkxFIHQoaWQgSU5ULCBtZXRyaWNzIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0tIEJSSU4gZG9lc24ndCBkaXJlY3Rs eSBzdXBwb3J0IEpTT05CLCBidXQgd2UgY2FuIHRlc3Qgb24gZXhwcmVzc2lvbgorQ1JFQVRFIElO REVYIHRfYnJpbl9jb3VudF9pZHggT04gdCBVU0lORyBicmluKAorICAgIENBU1QobWV0cmljcy0+ Pidjb3VudCcgQVMgSU5URUdFUikKKyk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siY291 bnQiOiAiMTAwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAxIn0nKTsKKy0tIFVwZGF0ZSBub24t aW5kZXhlZCBKU09OQiBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBtZXRyaWNz ID0gJ3siY291bnQiOiAiMTAwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAyIn0nIFdIRVJFIGlk ID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKyB0YWJsZV9u YW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdl IHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAg ICAgICAgIHwgICAgICAgICAgICAgMSB8ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgMTAw LjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDogMSBIT1QKKy0tIFVwZGF0ZSBpbmRleGVk IGZpZWxkIC0gQlJJTiBhbGxvd3MgSE9UIGZvciBzaW5nbGUgcm93CitVUERBVEUgdCBTRVQgbWV0 cmljcyA9ICd7ImNvdW50IjogIjE1MCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMiJ9JyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisgdGFi bGVfbmFtZSB8IHRvdGFsX3VwZGF0ZXMgfCBob3RfdXBkYXRlcyB8IGhvdF91cGRhdGVfcGVyY2Vu dGFnZSB8IG1hdGNoZXNfZXhwZWN0ZWQgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICB8ICAgICAgICAgICAgIDIgfCAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAg IDEwMC4wMCB8IHQKKygxIHJvdykKKworLS0gRXhwZWN0ZWQ6IDIgSE9UIChCUklOIHBlcm1pdHMg c2luZ2xlLXJvdyB1cGRhdGVzKQorRFJPUCBUQUJMRSB0IENBU0NBREU7CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist LSBNaXhlZCBCUklOICsgSEFTSCBvbiBTYW1lIFRhYmxlCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC TEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNIQVIsIHRpbWVzdGFtcCBUSU1FU1RBTVAsIHByaWNl IE5VTUVSSUMsIGRhdGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYs IGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9icmluX3RpbWVzdGFtcF9pZHggT04g dCBVU0lORyBicmluKHRpbWVzdGFtcCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2NhdGVnb3J5X2lk eCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdi b29rcycsICcyMDI0LTAxLTAxIDEwOjAwOjAwJywgMjkuOTksICdpbml0aWFsJyk7CistLSBVcGRh dGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEg PSAndXBkYXRlZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygxLCAndCcpOworIHRhYmxlX25hbWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBo b3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgICAgICAgICAgIDEg fCAgICAgICAgICAgICAgICAxMDAuMDAgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAxIEhP VAorLS0gVXBkYXRlIEJSSU4gaW5kZXhlZCBjb2x1bW4gLSBhbGxvd3MgSE9UCitVUERBVEUgdCBT RVQgdGltZXN0YW1wID0gJzIwMjQtMDEtMDIgMTA6MDA6MDAnIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxf dXBkYXRlcyB8IGhvdF91cGRhdGVzIHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19l eHBlY3RlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAg ICAgICAgICAgMiB8ICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAgMTAwLjAwIHwgdAorKDEg cm93KQorCistLSBFeHBlY3RlZDogMiBIT1QKKy0tIFVwZGF0ZSBIQVNIIGluZGV4ZWQgY29sdW1u IC0gYmxvY2tzIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ3ZpZGVvcycgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcpOworIHRhYmxlX25h bWUgfCB0b3RhbF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCBob3RfdXBkYXRlX3BlcmNlbnRhZ2Ug fCBtYXRjaGVzX2V4cGVjdGVkIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAg ICAgICAgfCAgICAgICAgICAgICAzIHwgICAgICAgICAgIDIgfCAgICAgICAgICAgICAgICAgNjYu NjcgfCB0CisoMSByb3cpCisKKy0tIEV4cGVjdGVkOiAyIEhPVCAoSEFTSCBibG9ja3MgaXQpCist LSBVcGRhdGUgcHJpY2UgKG5vbi1pbmRleGVkKSAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNF VCBwcmljZSA9IDM5Ljk5IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMywgJ3QnKTsKKyB0YWJsZV9uYW1lIHwgdG90YWxfdXBkYXRlcyB8IGhvdF91cGRhdGVz IHwgaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgbWF0Y2hlc19leHBlY3RlZCAKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgIHwgICAgICAgICAgICAgNCB8ICAgICAgICAg ICAzIHwgICAgICAgICAgICAgICAgIDc1LjAwIHwgdAorKDEgcm93KQorCistLSBFeHBlY3RlZDog MyBIT1QKK0RST1AgVEFCTEUgdCBDQVNDQURFOworLS0gQ2xlYW51cAorRFJPUCBGVU5DVElPTiBj aGVja19ob3RfdXBkYXRlcyhpbnQsIHRleHQsIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKaW5kZXggZjU2NDgyZmI5ZjEuLjQ0NTk2MjVhNTliIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUKQEAgLTEyNSw2ICsxMjUsMTIgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBs cGdzcWwgY29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIK ICMgLS0tLS0tLS0tLQogdGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9w dGlvbnMgaGFzaF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2lu Zm8gdHVwbGVzb3J0IGV4cGxhaW4gY29tcHJlc3Npb24gY29tcHJlc3Npb25fbHo0IG1lbW9pemUg c3RhdHMgcHJlZGljYXRlIG51bWEgZWFnZXJfYWdncmVnYXRlCiAKKworIyAtLS0tLS0tLS0tCisj IEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMsIHRoZXNlIGZvY3VzZWQgb24gaGVhcCBI T1QgdXBkYXRlcworIyAtLS0tLS0tLS0tCit0ZXN0OiBob3RfZXhwcmVzc2lvbl9pbmRleGVzCisK ICMgZXZlbnRfdHJpZ2dlciBkZXBlbmRzIG9uIGNyZWF0ZV9hbSBhbmQgY2Fubm90IHJ1biBjb25j dXJyZW50bHkgd2l0aAogIyBhbnkgdGVzdCB0aGF0IHJ1bnMgRERMCiAjIG9pZGpvaW5zIGlzIHJl YWQtb25seSwgdGhvdWdoLCBhbmQgc2hvdWxkIHJ1biBsYXRlIGZvciBiZXN0IGNvdmVyYWdlCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ob3RfZXhwcmVzc2lvbl9pbmRleGVzLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hvdF9leHByZXNzaW9uX2luZGV4ZXMuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTI5YmUxNDRhZQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hvdF9leHByZXNzaW9uX2luZGV4ZXMuc3Fs CkBAIC0wLDAgKzEsNzQ3IEBACistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IFN1aXRlIGZvciBIZWFwLW9u bHkgKEhPVCkgVXBkYXRlcworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBTZXR1cDogQ3JlYXRlIGZ1bmN0aW9u IHRvIG1lYXN1cmUgSE9UIHVwZGF0ZXMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNoZWNr X2hvdF91cGRhdGVzKAorICAgIGV4cGVjdGVkIElOVCwKKyAgICBwX3RhYmxlX25hbWUgVEVYVCBE RUZBVUxUICd0JywKKyAgICBwX3NjaGVtYV9uYW1lIFRFWFQgREVGQVVMVCBjdXJyZW50X3NjaGVt YSgpCispCitSRVRVUk5TIFRBQkxFICgKKyAgICB0YWJsZV9uYW1lIFRFWFQsCisgICAgdG90YWxf dXBkYXRlcyBCSUdJTlQsCisgICAgaG90X3VwZGF0ZXMgQklHSU5ULAorICAgIGhvdF91cGRhdGVf cGVyY2VudGFnZSBOVU1FUklDLAorICAgIG1hdGNoZXNfZXhwZWN0ZWQgQk9PTEVBTgorKQorTEFO R1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgICB2X3JlbGlkIG9pZDsKKyAgICB2X3F1 YWxpZmllZF9uYW1lIFRFWFQ7CisgICAgdl9ob3RfdXBkYXRlcyBCSUdJTlQ7CisgICAgdl91cGRh dGVzIEJJR0lOVDsKKyAgICB2X3hhY3RfaG90X3VwZGF0ZXMgQklHSU5UOworICAgIHZfeGFjdF91 cGRhdGVzIEJJR0lOVDsKK0JFR0lOCisgICAgLS0gRm9yY2Ugc3RhdGlzdGljcyB1cGRhdGUKKyAg ICBQRVJGT1JNIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworCisgICAgLS0gR2V0IHRhYmxl IE9JRAorICAgIHZfcXVhbGlmaWVkX25hbWUgOj0gcXVvdGVfaWRlbnQocF9zY2hlbWFfbmFtZSkg fHwgJy4nIHx8IHF1b3RlX2lkZW50KHBfdGFibGVfbmFtZSk7CisgICAgdl9yZWxpZCA6PSB2X3F1 YWxpZmllZF9uYW1lOjpyZWdjbGFzczsKKworICAgIElGIHZfcmVsaWQgSVMgTlVMTCBUSEVOCisJ UkFJU0UgRVhDRVBUSU9OICdUYWJsZSAlLiUgbm90IGZvdW5kJywgcF9zY2hlbWFfbmFtZSwgcF90 YWJsZV9uYW1lOworICAgIEVORCBJRjsKKworICAgIC0tIEdldCBjdW11bGF0aXZlICsgdHJhbnNh Y3Rpb24gc3RhdHMKKyAgICB2X2hvdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0X3R1 cGxlc19ob3RfdXBkYXRlZCh2X3JlbGlkKSwgMCk7CisgICAgdl91cGRhdGVzIDo9IENPQUxFU0NF KHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkKHZfcmVsaWQpLCAwKTsKKyAgICB2X3hhY3RfaG90 X3VwZGF0ZXMgOj0gQ09BTEVTQ0UocGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo dl9yZWxpZCksIDApOworICAgIHZfeGFjdF91cGRhdGVzIDo9IENPQUxFU0NFKHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX3VwZGF0ZWQodl9yZWxpZCksIDApOworCisgICAgdl9ob3RfdXBkYXRlcyA6 PSB2X2hvdF91cGRhdGVzICsgdl94YWN0X2hvdF91cGRhdGVzOworICAgIHZfdXBkYXRlcyA6PSB2 X3VwZGF0ZXMgKyB2X3hhY3RfdXBkYXRlczsKKworICAgIFJFVFVSTiBRVUVSWQorICAgIFNFTEVD VAorCXBfdGFibGVfbmFtZTo6VEVYVCwKKwl2X3VwZGF0ZXM6OkJJR0lOVCwKKwl2X2hvdF91cGRh dGVzOjpCSUdJTlQsCisJQ0FTRSBXSEVOIHZfdXBkYXRlcyA+IDAKKwkgICAgIFRIRU4gUk9VTkQo KHZfaG90X3VwZGF0ZXM6Om51bWVyaWMgLyB2X3VwZGF0ZXM6Om51bWVyaWMgKiAxMDApOjpudW1l cmljLCAyKQorCSAgICAgRUxTRSAwCisJRU5ELAorCSh2X2hvdF91cGRhdGVzID0gZXhwZWN0ZWQp OjpCT09MRUFOOworRU5EOworJCQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEJhc2ljIEpTT05CIEV4cHJl c3Npb24gSW5kZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCBQUklNQVJZIEtF WSwgZG9jcyBKU09OQikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxm YWN0b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9kb2NzX25hbWVfaWR4IE9OIHQoKGRvY3MtPj4n bmFtZScpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJuYW1lIjogImFsaWNlIiwgImFn ZSI6IDMwfScpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIgZmllbGQgLSBzaG91bGQg YmUgSE9UCitVUERBVEUgdCBTRVQgZG9jcyA9ICd7Im5hbWUiOiAiYWxpY2UiLCAiYWdlIjogMzF9 JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7 CisKKy0tIFVwZGF0ZSBpbmRleGVkIEpTT05CIGZpZWxkIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQ REFURSB0IFNFVCBkb2NzID0gJ3sibmFtZSI6ICJib2IiLCAiYWdlIjogMzF9JyBXSEVSRSBpZCA9 IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFVwZGF0 ZSBub24taW5kZXhlZCBmaWVsZCBhZ2FpbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBk b2NzID0gJ3sibmFtZSI6ICJib2IiLCAiYWdlIjogMzJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1Qg KiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisKK0RST1AgVEFCTEUgdDsKKworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gUGFydGlhbCBJbmRleCB3aXRoIFByZWRpY2F0ZSBUcmFuc2l0aW9ucworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCB2YWx1ZSBJTlQpCisgICAgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRf dmFsdWVfaWR4IE9OIHQodmFsdWUpIFdIRVJFIHZhbHVlID4gMTA7CitJTlNFUlQgSU5UTyB0IFZB TFVFUyAoMSwgNSk7CisKKy0tIEJvdGggb3V0c2lkZSBwcmVkaWNhdGUgLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgdmFsdWUgPSA4IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVHJhbnNpdGlvbiBpbnRvIHByZWRpY2F0ZSAt IHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSAxNSBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIEJvdGggaW5z aWRlIHByZWRpY2F0ZSwgdmFsdWUgY2hhbmdlcyAtIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUg dCBTRVQgdmFsdWUgPSAyMCBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisKKy0tIFRyYW5zaXRpb24gb3V0IG9mIHByZWRpY2F0ZSAtIHNob3Vs ZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgdmFsdWUgPSA1IFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gQm90aCBvdXRzaWRlIHBy ZWRpY2F0ZSBhZ2FpbiAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDMgV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygyLCAndCcpOworCitE Uk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEV4cHJlc3Npb24gSW5kZXggd2l0aCBQYXJ0 aWFsIFByZWRpY2F0ZQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoZG9jcyBKU09OQikKKyAg ICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVB VEUgSU5ERVggdF9pZHggT04gdCgoZG9jcy0+PidzdGF0dXMnKSkKKyAgICBXSEVSRSAoZG9jcy0+ Pidwcmlvcml0eScpOjppbnQgPiA1OworSU5TRVJUIElOVE8gdCBWQUxVRVMgKCd7InN0YXR1cyI6 ICJwZW5kaW5nIiwgInByaW9yaXR5IjogM30nKTsKKworLS0gQm90aCBvdXRzaWRlIHByZWRpY2F0 ZSwgc3RhdHVzIHVuY2hhbmdlZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0g J3sic3RhdHVzIjogInBlbmRpbmciLCAicHJpb3JpdHkiOiA0fSc7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFRyYW5zaXRpb24gaW50byBwcmVkaWNhdGUg LSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRvY3MgPSAneyJzdGF0dXMiOiAicGVu ZGluZyIsICJwcmlvcml0eSI6IDEwfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEsICd0Jyk7CisKKy0tIEluc2lkZSBwcmVkaWNhdGUsIHN0YXR1cyBjaGFuZ2VzIC0gc2hvdWxk IE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkb2NzID0gJ3sic3RhdHVzIjogImFjdGl2ZSIsICJw cmlvcml0eSI6IDEwfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7 CisKKy0tIEluc2lkZSBwcmVkaWNhdGUsIHN0YXR1cyB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9U CitVUERBVEUgdCBTRVQgZG9jcyA9ICd7InN0YXR1cyI6ICJhY3RpdmUiLCAicHJpb3JpdHkiOiA4 fSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisKK0RST1AgVEFC TEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIEluZGV4IG9uIEpTT05CCistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitD UkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfZ2luX2lkeCBP TiB0IFVTSU5HIGdpbihkYXRhKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ0YWdzIjog WyJwb3N0Z3JlcyIsICJkYXRhYmFzZSJdfScpOworCistLSBDaGFuZ2UgdGFncyAtIEdJTiBrZXlz IGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3Mi OiBbInBvc3RncmVzIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygwLCAndCcpOworCistLSBDaGFuZ2UgdGFncyBhZ2FpbiAtIEdJTiBrZXlz IGNoYW5nZWQsIHNob3VsZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InRhZ3Mi OiBbIm15c3FsIiwgInNxbCJdfScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygwLCAndCcpOworCistLSBBZGQgZmllbGQgd2l0aG91dCBjaGFuZ2luZyBleGlz dGluZyBrZXlzIC0gR0lOIGtleXMgY2hhbmdlZCAoYWRkZWQgIm5vdGUiKSwgTk9UIEhPVAorVVBE QVRFIHQgU0VUIGRhdGEgPSAneyJ0YWdzIjogWyJteXNxbCIsICJzcWwiXSwgIm5vdGUiOiAidGVz dCJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0 Jyk7CisKK0RST1AgVEFCTEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gR0lOIEluZGV4IHdpdGggVW5j aGFuZ2VkIEtleXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgZGF0YSBKU09O QikKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7 CistLSBDcmVhdGUgR0lOIGluZGV4IG9uIHNwZWNpZmljIHBhdGgKK0NSRUFURSBJTkRFWCB0X2dp bl9pZHggT04gdCBVU0lORyBnaW4oKGRhdGEtPid0YWdzJykpOworSU5TRVJUIElOVE8gdCBWQUxV RVMgKDEsICd7InRhZ3MiOiBbInBvc3RncmVzIiwgInNxbCJdLCAic3RhdHVzIjogImFjdGl2ZSJ9 Jyk7CisKKy0tIENoYW5nZSBub24taW5kZXhlZCBmaWVsZCAtIEdJTiBrZXlzIG9uICd0YWdzJyB1 bmNoYW5nZWQsIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidGFncyI6IFsi cG9zdGdyZXMiLCAic3FsIl0sICJzdGF0dXMiOiAiaW5hY3RpdmUifScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBDaGFuZ2UgaW5k ZXhlZCB0YWdzIC0gR0lOIGtleXMgY2hhbmdlZCwgc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0 IFNFVCBkYXRhID0gJ3sidGFncyI6IFsibXlzcWwiLCAic3FsIl0sICJzdGF0dXMiOiAiaW5hY3Rp dmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAn dCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEdJTiB3aXRoIGpzb25iX3Bh dGhfb3BzCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisg ICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JF QVRFIElOREVYIHRfZ2luX2lkeCBPTiB0IFVTSU5HIGdpbihkYXRhIGpzb25iX3BhdGhfb3BzKTsK K0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAneyJ1c2VyIjogeyJuYW1lIjogImFsaWNlIn0sICJ0 YWdzIjogWyJhIiwgImIiXX0nKTsKKworLS0gQ2hhbmdlIHZhbHVlIGF0IGRpZmZlcmVudCBwYXRo IC0ga2V5cyBjaGFuZ2VkLCBOT1QgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InVzZXIiOiB7 Im5hbWUiOiAiYm9iIn0sICJ0YWdzIjogWyJhIiwgImIiXX0nIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CistLSBNdWx0aS1Db2x1bW4gRXhwcmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor Q1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBhIElOVCwgYiBJTlQpCisgICAgV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfaWR4IE9O IHQoaWQsIGFicyhhKSwgYWJzKGIpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAtNSwgLTEw KTsKKworLS0gQ2hhbmdlIHNpZ24gYnV0IG5vdCBhYnMgdmFsdWUgLSBzaG91bGQgYmUgSE9UCitV UERBVEUgdCBTRVQgYSA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygxLCAndCcpOworCistLSBDaGFuZ2UgYWJzIHZhbHVlIC0gc2hvdWxkIE5PVCBiZSBI T1QKK1VQREFURSB0IFNFVCBiID0gLTE1IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gQ2hhbmdlIGlkIC0gc2hvdWxkIE5PVCBiZSBI T1QKK1VQREFURSB0IFNFVCBpZCA9IDIgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IE1peGVkIEluZGV4IFR5cGVzIChCUklOICsgRXhwcmVzc2lvbikKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFU RSBUQUJMRSB0KGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2Jy aW5faWR4IE9OIHQgVVNJTkcgYnJpbih2YWx1ZSk7CitDUkVBVEUgSU5ERVggdF9leHByX2lkeCBP TiB0KChkYXRhLT4+J3N0YXR1cycpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAxMDAsICd7 InN0YXR1cyI6ICJhY3RpdmUifScpOworCistLSBVcGRhdGUgb25seSBCUklOIGNvbHVtbiAtIHNo b3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCB2YWx1ZSA9IDIwMCBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFVwZGF0ZSBvbmx5IGV4 cHJlc3Npb24gY29sdW1uIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0g J3sic3RhdHVzIjogImluYWN0aXZlIn0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVXBkYXRlIGJvdGggLSBzaG91bGQgTk9UIGJl IEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMzAwLCBkYXRhID0gJ3sic3RhdHVzIjogInBlbmRp bmcifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAn dCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEV4cHJlc3Npb24gd2l0aCBD T0xMQVRJT04gYW5kIEJUUkVFIChuYnRyZWUpIGluZGV4CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgQ09M TEFUSU9OIGNhc2VfaW5zZW5zaXRpdmUgKAorICAgIHByb3ZpZGVyID0gbGliYywKKyAgICBsb2Nh bGUgPSAnQycKKyk7CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisg ICAgbmFtZSBURVhUIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZQorKSBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CisKK0NSRUFURSBJTkRFWCB0X2xvd2Vy X2lkeCBPTiB0IFVTSU5HIEJUUkVFIChuYW1lIENPTExBVEUgY2FzZV9pbnNlbnNpdGl2ZSk7CisK K0lOU0VSVCBJTlRPIHQgVkFMVUVTICgxLCAnQUxJQ0UnKTsKKworLS0gQ2hhbmdlIGNhc2UgYnV0 IG5vdCB2YWx1ZSAtIHNob3VsZCBOT1QgYmUgSE9UIGluIEJUUkVFCitVUERBVEUgdCBTRVQgbmFt ZSA9ICdBbGljZScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRl cygwLCAndCcpOworCistLSBDaGFuZ2UgdG8gbmV3IHZhbHVlIC0gc2hvdWxkIE5PVCBiZSBIT1QK K1VQREFURSB0IFNFVCBuYW1lID0gJ0JPQicgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygwLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIEFycmF5IEV4cHJlc3Npb24gSW5kZXgKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlk IElOVCwgdGFncyBURVhUW10pCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBm aWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfYXJyYXlfbGVuX2lkeCBPTiB0KGFycmF5 X2xlbmd0aCh0YWdzLCAxKSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgQVJSQVlbJ2EnLCAn YicsICdjJ10pOworCistLSBTYW1lIGxlbmd0aCwgZGlmZmVyZW50IGVsZW1lbnRzIC0gc2hvdWxk IGJlIEhPVAorVVBEQVRFIHQgU0VUIHRhZ3MgPSBBUlJBWVsnZCcsICdlJywgJ2YnXSBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIERp ZmZlcmVudCBsZW5ndGggLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIHRhZ3MgPSBB UlJBWVsnZCcsICdlJ10gV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxLCAndCcpOworCitEUk9QIFRBQkxFIHQ7CisKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIE5lc3RlZCBK U09OQiBFeHByZXNzaW9uIGFuZCBKU09OQiBlcXVhbGl0eSAnLT4nIChub3QgJy0+PicpCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CitDUkVBVEUgVEFCTEUgdChkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X25lc3RlZF9p ZHggT04gdCgoZGF0YS0+J3VzZXInLT4nbmFtZScpKTsKK0lOU0VSVCBJTlRPIHQgVkFMVUVTICgn eyJ1c2VyIjogeyJuYW1lIjogImFsaWNlIiwgImFnZSI6IDMwfX0nKTsKKworLS0gQ2hhbmdlIG5l c3RlZCBub24taW5kZXhlZCBmaWVsZCAtIHNob3VsZCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRh ID0gJ3sidXNlciI6IHsibmFtZSI6ICJhbGljZSIsICJhZ2UiOiAzMX19JzsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gQ2hhbmdlIG5lc3RlZCBpbmRleGVk IGZpZWxkIC0gc2hvdWxkIE5PVCBiZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3sidXNlciI6 IHsibmFtZSI6ICJib2IiLCAiYWdlIjogMzF9fSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91 cGRhdGVzKDEsICd0Jyk7CisKK0RST1AgVEFCTEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQ29tcGxl eCBQcmVkaWNhdGUgb24gTXVsdGlwbGUgSlNPTkIgRmllbGRzCistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUg VEFCTEUgdChkYXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwg ZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2lkeCBPTiB0KChkYXRhLT4+J3N0YXR1 cycpKQorICAgIFdIRVJFIChkYXRhLT4+J3ByaW9yaXR5Jyk6OmludCA+IDUKKyAgICAgIEFORCAo ZGF0YS0+PidhY3RpdmUnKTo6Ym9vbGVhbiA9IHRydWU7CisKK0lOU0VSVCBJTlRPIHQgVkFMVUVT ICgneyJzdGF0dXMiOiAicGVuZGluZyIsICJwcmlvcml0eSI6IDMsICJhY3RpdmUiOiB0cnVlfScp OworCistLSBPdXRzaWRlIHByZWRpY2F0ZSAocHJpb3JpdHkgdG9vIGxvdykgLSBzaG91bGQgYmUg SE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJkb25lIiwgInByaW9yaXR5Ijog MywgImFjdGl2ZSI6IHRydWV9JzsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwg J3QnKTsKKworLS0gVHJhbnNpdGlvbiBpbnRvIHByZWRpY2F0ZSAtIHNob3VsZCBOT1QgYmUgSE9U CitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJkb25lIiwgInByaW9yaXR5IjogMTAs ICJhY3RpdmUiOiB0cnVlfSc7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0 Jyk7CisKKy0tIEluc2lkZSBwcmVkaWNhdGUsIGNoYW5nZSB0byBvdXRzaWRlIChhY3RpdmUgPSBm YWxzZSkgLSBzaG91bGQgTk9UIGJlIEhPVAorVVBEQVRFIHQgU0VUIGRhdGEgPSAneyJzdGF0dXMi OiAiZG9uZSIsICJwcmlvcml0eSI6IDEwLCAiYWN0aXZlIjogZmFsc2V9JzsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBHSU4gQXJyYXkgSW5kZXggLSBPcmRlciBJbnNlbnNpdGl2ZSBFeHRyYWN0aW9uCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdCgKKyAgICBpZCBJTlQgUFJJTUFSWSBLRVksCisgICAg ZGF0YSBKU09OQgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CisKKy0tIEdJTiBpbmRleCBvbiBKU09OQiBhcnJheSAoZXh0cmFjdHMgYWxsIGVsZW1l bnRzKQorQ1JFQVRFIElOREVYIHRfaXRlbXNfZ2luIE9OIHQgVVNJTkcgR0lOICgoZGF0YS0+J2l0 ZW1zJykpOworCitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ3siaXRlbXMiOiBbMSwgMiwgM10s ICJzdGF0dXMiOiAiYWN0aXZlIn0nKTsKKworLS0gVXBkYXRlOiBSZW9yZGVyIGFycmF5IGVsZW1l bnRzCistLSBKU09OQiBlcXVhbGl0eTogTk9UIGVxdWFsIChkaWZmZXJlbnQgYXJyYXlzKQorLS0g R0lOIGV4dHJhY3Rpb246IFNhbWUgZWxlbWVudHMgZXh0cmFjdGVkIChtaWdodCBhbGxvdyBIT1Qg aWYgbm90IGNhcmVmdWwpCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7Iml0ZW1zIjogWzMsIDIsIDFd LCAic3RhdHVzIjogImFjdGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2hvdF91cGRhdGVzKDEsICd0Jyk7CisKKy0tIFVwZGF0ZTogQWRkL3JlbW92ZSBlbGVtZW50CitV UERBVEUgdCBTRVQgZGF0YSA9ICd7Iml0ZW1zIjogWzEsIDIsIDMsIDRdLCAic3RhdHVzIjogImFj dGl2ZSJ9JyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEs ICd0Jyk7CisKK0RST1AgVEFCTEUgdDsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVE9BU1RlZCBWYWx1ZXMg aW4gRXhwcmVzc2lvbiBJbmRleAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBs YXJnZV90ZXh0IFRFWFQpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxs ZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVYIHRfc3Vic3RyX2lkeCBPTiB0KHN1YnN0cihsYXJn ZV90ZXh0LCAxLCAxMCkpOworCitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgcmVwZWF0KCd4Jywg NTAwMCkgfHwgJ2lkZW50aWZpZXInKTsKKworLS0gQ2hhbmdlIGVuZCBvZiBzdHJpbmcsIHByZWZp eCB1bmNoYW5nZWQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgbGFyZ2VfdGV4dCA9IHJl cGVhdCgneCcsIDUwMDApIHx8ICdkaWZmZXJlbnQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gQ2hhbmdlIHByZWZpeCAtIHNob3Vs ZCBOT1QgYmUgSE9UCitVUERBVEUgdCBTRVQgbGFyZ2VfdGV4dCA9IHJlcGVhdCgneScsIDUwMDAp IHx8ICdkaWZmZXJlbnQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMSwgJ3QnKTsKKworRFJPUCBUQUJMRSB0OworCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBURVNUOiBH SU4gd2l0aCBUT0FTVGVkIFRFWFQgKHRzdmVjdG9yKQorLS0gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxF IHQoaWQgSU5ULCBjb250ZW50IFRFWFQsIHNlYXJjaF92ZWMgdHN2ZWN0b3IpCisgICAgV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworCistLSBDcmVhdGUg dHJpZ2dlciB0byBtYWludGFpbiB0c3ZlY3RvcgorQ1JFQVRFIFRSSUdHRVIgdHN2ZWN0b3J1cGRh dGVfdG9hc3QKKyAgICBCRUZPUkUgSU5TRVJUIE9SIFVQREFURSBPTiB0CisgICAgRk9SIEVBQ0gg Uk9XIEVYRUNVVEUgRlVOQ1RJT04KKyAgICB0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcihzZWFyY2hf dmVjLCAncGdfY2F0YWxvZy5lbmdsaXNoJywgY29udGVudCk7CisKK0NSRUFURSBJTkRFWCB0X2dp biBPTiB0IFVTSU5HIGdpbihzZWFyY2hfdmVjKTsKKworLS0gSW5zZXJ0IHdpdGggbGFyZ2UgY29u dGVudCAod2lsbCBiZSBUT0FTVGVkKQorSU5TRVJUIElOVE8gdCAoaWQsIGNvbnRlbnQpIFZBTFVF UworICAgICgxLCByZXBlYXQoJ2ltcG9ydGFudCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgn ZmlsbGVyIHRleHQgJywgMTAwMDApKTsKKworLS0gVmVyaWZ5IGluaXRpYWwgc3RhdGUKK1NFTEVD VCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgc2VhcmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdpbXBvcnRh bnQnKTsKKy0tIEV4cGVjdGVkOiAxIHJvdworCistLSBJTVBPUlRBTlQ6IFRoZSBCRUZPUkUgVVBE QVRFIHRyaWdnZXIgbW9kaWZpZXMgc2VhcmNoX3ZlYywgc28gYnkgdGhlIHRpbWUKKy0tIEV4ZWNX aGljaEluZGV4ZXNSZXF1aXJlVXBkYXRlcygpIHJ1bnMsIHNlYXJjaF92ZWMgaGFzIGFscmVhZHkg Y2hhbmdlZC4KKy0tIFRoaXMgbWVhbnMgdGhlIGNvbXBhcmlzb24gc2VlcyBvbGQgdHN2ZWN0b3Ig dnMuIHRyaWdnZXItbW9kaWZpZWQgdHN2ZWN0b3IsCistLSBub3QgdGhlIG5hdHVyYWwgcHJvZ3Jl c3Npb24uIEhPVCB3b24ndCBoYXBwZW4gYmVjYXVzZSB0aGUgdHJpZ2dlciBjaGFuZ2VkCistLSB0 aGUgaW5kZXhlZCBjb2x1bW4uCisKKy0tIFVwZGF0ZTogRXZlbiB0aG91Z2ggY29udGVudCBrZXl3 b3JkcyB1bmNoYW5nZWQsIHRyaWdnZXIgc3RpbGwgZmlyZXMKK1VQREFURSB0CitTRVQgY29udGVu dCA9IHJlcGVhdCgnaW1wb3J0YW50IGtleXdvcmQgJywgMTAwMCkgfHwgcmVwZWF0KCdkaWZmZXJl bnQgZmlsbGVyICcsIDEwMDAwKQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19o b3RfdXBkYXRlcygwLCAndCcpOworLS0gRXhwZWN0ZWQ6IDAgSE9UICh0cmlnZ2VyIG1vZGlmaWVz IHNlYXJjaF92ZWMsIGJsb2NraW5nIEhPVCkKKy0tIFRoaXMgaXMgYWN0dWFsbHkgY29ycmVjdCBi ZWhhdmlvciAtIHRoZSB0cmlnZ2VyIHVwZGF0ZWQgYW4gaW5kZXhlZCBjb2x1bW4KKworLS0gVXBk YXRlOiBDaGFuZ2UgaW5kZXhlZCBrZXl3b3JkcworVVBEQVRFIHQKK1NFVCBjb250ZW50ID0gcmVw ZWF0KCdjcml0aWNhbCBrZXl3b3JkICcsIDEwMDApIHx8IHJlcGVhdCgnZGlmZmVyZW50IGZpbGxl ciAnLCAxMDAwMCkKK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0 ZXMoMCwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAwIEhPVCAoaW5kZXgga2V5cyBjaGFuZ2VkKQorCist LSBWZXJpZnkgcXVlcnkgY29ycmVjdG5lc3MKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUg c2VhcmNoX3ZlYyBAQCB0b190c3F1ZXJ5KCdjcml0aWNhbCcpOworLS0gRXhwZWN0ZWQ6IDEgcm93 CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBURVNUOiBHSU4gd2l0 aCBUT0FTVGVkIEpTT05CCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEg SlNPTkIpCisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0g NzApOworQ1JFQVRFIElOREVYIHRfZ2luIE9OIHQgVVNJTkcgZ2luKChkYXRhLT4ndGFncycpKTsK KworLS0gSW5zZXJ0IHdpdGggVE9BU1RlZCBKU09OQgorSU5TRVJUIElOVE8gdCAoaWQsIGRhdGEp IFZBTFVFUworICAgICgxLCBqc29uYl9idWlsZF9vYmplY3QoCisgICAgICAgICd0YWdzJywgJ1si cG9zdGdyZXMiLCAiZGF0YWJhc2UiXSc6Ompzb25iLAorICAgICAgICAnbGFyZ2VfZmllbGQnLCBy ZXBlYXQoJ3gnLCAxMDAwMCkKKyAgICApKTsKKworLS0gVXBkYXRlOiBDaGFuZ2UgbGFyZ2VfZmll bGQsIHRhZ3MgdW5jaGFuZ2VkIC0gc2hvdWxkIGJlIEhPVAorVVBEQVRFIHQKK1NFVCBkYXRhID0g anNvbmJfYnVpbGRfb2JqZWN0KAorICAgICd0YWdzJywgJ1sicG9zdGdyZXMiLCAiZGF0YWJhc2Ui XSc6Ompzb25iLAorICAgICdsYXJnZV9maWVsZCcsIHJlcGVhdCgneScsIDEwMDAwKQorKQorV0hF UkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworLS0g RXhwZWN0ZWQ6IDEgSE9UIHVwZGF0ZQorCistLSBVcGRhdGU6IENoYW5nZSB0YWdzIC0gc2hvdWxk IE5PVCBiZSBIT1QKK1VQREFURSB0CitTRVQgZGF0YSA9IGpzb25iX2J1aWxkX29iamVjdCgKKyAg ICAndGFncycsICdbInBvc3RncmVzIiwgInNxbCJdJzo6anNvbmIsCisgICAgJ2xhcmdlX2ZpZWxk JywgcmVwZWF0KCd5JywgMTAwMDApCispCitXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CistLSBFeHBlY3RlZDogU3RpbGwgMSBIT1QKKworLS0g VmVyaWZ5IGNvcnJlY3RuZXNzCitTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGRhdGEtPid0 YWdzJyBAPiAnWyJkYXRhYmFzZSJdJzo6anNvbmI7CistLSBFeHBlY3RlZDogMCByb3dzCitTRUxF Q1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGRhdGEtPid0YWdzJyBAPiAnWyJzcWwiXSc6Ompzb25i OworLS0gRXhwZWN0ZWQ6IDEgcm93CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBURVNUOiBHSU4gd2l0aCBBcnJheSBvZiBMYXJnZSBTdHJpbmdzCistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIHRhZ3MgVEVYVFtdKQorICAgIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2dpbiBP TiB0IFVTSU5HIGdpbih0YWdzKTsKKworLS0gSW5zZXJ0IHdpdGggbGFyZ2UgYXJyYXkgZWxlbWVu dHMgKG1pZ2h0IGJlIFRPQVNUZWQpCitJTlNFUlQgSU5UTyB0IChpZCwgdGFncykgVkFMVUVTCisg ICAgKDEsIEFSUkFZW3JlcGVhdCgndGFnMScsIDEwMDApLCByZXBlYXQoJ3RhZzInLCAxMDAwKV0p OworCistLSBVcGRhdGU6IENoYW5nZSB0byBkaWZmZXJlbnQgbGFyZ2UgdmFsdWVzIC0gTk9UIEhP VAorVVBEQVRFIHQKK1NFVCB0YWdzID0gQVJSQVlbcmVwZWF0KCd0YWczJywgMTAwMCksIHJlcGVh dCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3Rf dXBkYXRlcygwLCAndCcpOworLS0gRXhwZWN0ZWQ6IDAgSE9UIChrZXlzIGFjdHVhbGx5IGNoYW5n ZWQpCisKKy0tIFVwZGF0ZTogS2VlcCBzYW1lIHRhZyB2YWx1ZXMsIGp1c3QgcmVvcmRlciAtIFNI T1VMRCBCRSBIT1QKKy0tIChHSU4gaXMgb3JkZXItaW5zZW5zaXRpdmU6IGJvdGggW3RhZzMsdGFn NF0gYW5kIFt0YWc0LHRhZzNdCistLSBleHRyYWN0IHRvIHRoZSBzYW1lIHNvcnRlZCBrZXkgc2V0 IFsndGFnMycsJ3RhZzQnXSkKK1VQREFURSB0CitTRVQgdGFncyA9IEFSUkFZW3JlcGVhdCgndGFn NCcsIDEwMDApLCByZXBlYXQoJ3RhZzMnLCAxMDAwKV0KK1dIRVJFIGlkID0gMTsKK1NFTEVDVCAq IEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAxIEhPVCAoR0lO IGtleXMgc2VtYW50aWNhbGx5IGlkZW50aWNhbCkKKworLS0gVXBkYXRlOiBSZW1vdmUgYW4gZWxl bWVudCAtIE5PVCBIT1QgKGtleXMgY2hhbmdlZCkKK1VQREFURSB0CitTRVQgdGFncyA9IEFSUkFZ W3JlcGVhdCgndGFnNCcsIDEwMDApXQorV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVj a19ob3RfdXBkYXRlcygxLCAndCcpOworLS0gRXhwZWN0ZWQ6IFN0aWxsIDEgSE9UIChub3QgdGhp cyBvbmUpCisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBCUklOIElu ZGV4IHdpdGggUGFydGlhbCBQcmVkaWNhdGUKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KAor ICAgIGlkIElOVCBQUklNQVJZIEtFWSwKKyAgICB2YWx1ZSBJTlQsCisgICAgZGVzY3JpcHRpb24g VEVYVAorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7 CisKK0NSRUFURSBJTkRFWCB0X2JyaW5fcGFydGlhbF9pZHggT04gdCBVU0lORyBicmluKHZhbHVl KSBXSEVSRSB2YWx1ZSA+IDEwMDsKKworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDUwLCAnYmVs b3cgcmFuZ2UnKTsKKworLS0gVGVzdCAxOiBPdXRzaWRlIHByZWRpY2F0ZQorVVBEQVRFIHQgU0VU IGRlc2NyaXB0aW9uID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hl Y2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVmFsaWRhdGU6IFByZWRpY2F0ZSBxdWVyeSBy ZXR1cm5zIDAgcm93cworU0VMRUNUIENPVU5UKCopIGFzIGNudCBGUk9NIHQgV0hFUkUgdmFsdWUg PiAxMDA7CisKKy0tIFRlc3QgMjogVHJhbnNpdGlvbiBpbnRvIHByZWRpY2F0ZQorVVBEQVRFIHQg U0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3Vw ZGF0ZXMoMiwgJ3QnKTsKKworLS0gVmFsaWRhdGU6IFByZWRpY2F0ZSBxdWVyeSByZXR1cm5zIDEg cm93IHdpdGggY29ycmVjdCB2YWx1ZQorU0VMRUNUIENPVU5UKCopIGFzIGNudCwgTUFYKHZhbHVl KSBhcyBtYXhfdmFsIEZST00gdCBXSEVSRSB2YWx1ZSA+IDEwMDsKKworLS0gVGVzdCAzOiBJbnNp ZGUgcHJlZGljYXRlLCB2YWx1ZSBjaGFuZ2VzCitVUERBVEUgdCBTRVQgdmFsdWUgPSAxNjAsIGRl c2NyaXB0aW9uID0gJ3VwZGF0ZWQgYWdhaW4nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMywgJ3QnKTsKKworLS0gVmFsaWRhdGU6IFVwZGF0ZWQgdmFsdWUg KDE2MCkgaXMgcmV0dXJuZWQKK1NFTEVDVCBDT1VOVCgqKSBhcyBjbnQsIE1BWCh2YWx1ZSkgYXMg bWF4X3ZhbCBGUk9NIHQgV0hFUkUgdmFsdWUgPiAxMDA7CisKKy0tIFRlc3QgNDogVHJhbnNpdGlv biBvdXQgb2YgcHJlZGljYXRlCitVUERBVEUgdCBTRVQgdmFsdWUgPSA1MCBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDQsICd0Jyk7CisKK1NFTEVDVCBDT1VO VCgqKSBhcyBjbnQgRlJPTSB0IFdIRVJFIHZhbHVlID4gMTAwOworCitTRUxFQ1QgaWQsIHZhbHVl LCBkZXNjcmlwdGlvbiBGUk9NIHQ7CisKK0RST1AgVEFCTEUgdCBDQVNDQURFOworCistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLSBIQVNIIEluZGV4IChTaW1wbGUgQ29sdW1uKQorLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRB QkxFIHQoaWQgSU5ULCBjb2RlIFZBUkNIQVIoMjApLCBkZXNjcmlwdGlvbiBURVhUKQorICAgIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJ TkRFWCB0X2hhc2hfaWR4IE9OIHQgVVNJTkcgaGFzaChjb2RlKTsKK0lOU0VSVCBJTlRPIHQgVkFM VUVTICgxLCAnQ09ERTAwMScsICdpbml0aWFsJyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBj b2x1bW4gLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGVzY3JpcHRpb24gPSAndXBkYXRl ZCcgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcp OworCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gLSBIQVNIIGluZGV4IHJlcXVpcmVzIHVwZGF0 ZSwgTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNvZGUgPSAnQ09ERTAwMicgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRhdGUgYm90 aCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDMnLCBkZXNjcmlwdGlvbiA9 ICdjaGFuZ2VkJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEsICd0Jyk7CisKKy0tIEJhY2sgdG8gb3JpZ2luYWwgY29kZSAtIE5PVCBIT1QgKGRpZmZlcmVu dCBoYXNoIGJ1Y2tldCBsb2NhdGlvbikKK1VQREFURSB0IFNFVCBjb2RlID0gJ0NPREUwMDEnIFdI RVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKwor RFJPUCBUQUJMRSB0IENBU0NBREU7CisKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIEhBU0ggSW5kZXggb24gRXhw cmVzc2lvbgorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBlbWFpbCBURVhULCBk YXRhIEpTT05CKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3Rv ciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfbG93ZXJfZW1haWxfaWR4IE9OIHQgVVNJTkcg SEFTSChsb3dlcihlbWFpbCkpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdBbGljZUBFeGFt cGxlLmNvbScsICd7InN0YXR1cyI6ICJuZXcifScpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQg ZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7InN0YXR1cyI6ICJh Y3RpdmUifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygx LCAndCcpOworCistLSBVcGRhdGUgZW1haWwgd2l0aCBjYXNlIGNoYW5nZSBvbmx5IChzYW1lIGxv d2VyY2FzZSkgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYWxpY2VAZXhh bXBsZS5jb20nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMo MiwgJ3QnKTsKKworLS0gVXBkYXRlIGVtYWlsIHRvIGRpZmZlcmVudCBsb3dlcmNhc2UgLSBOT1Qg SE9UCitVUERBVEUgdCBTRVQgZW1haWwgPSAnYm9iQGV4YW1wbGUuY29tJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CisKK0RST1AgVEFCTEUg dCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IG9uIEpTT05CIEZpZWxkCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGRhdGEgSlNPTkIpCisgICAgV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOworQ1JFQVRFIElOREVY IHRfaGFzaF9jYXRlZ29yeV9pZHggT04gdCBVU0lORyBoYXNoKChkYXRhLT4+J2NhdGVnb3J5Jykp OworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICd7ImNhdGVnb3J5IjogImJvb2tzIiwgInRpdGxl IjogIlBvc3RncmVTUUwgR3VpZGUifScpOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgSlNPTkIg ZmllbGQgLSBzaG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd7ImNhdGVnb3J5Ijog ImJvb2tzIiwgInRpdGxlIjogIlBvc3RncmVTUUwgSGFuZGJvb2sifScgV0hFUkUgaWQgPSAxOwor U0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRhdGUgaW5k ZXhlZCBKU09OQiBmaWVsZCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3siY2F0ZWdv cnkiOiAidmlkZW9zIiwgInRpdGxlIjogIlBvc3RncmVTUUwgSGFuZGJvb2sifScgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRh dGUgYm90aCAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3siY2F0ZWdvcnkiOiAiY291 cnNlcyIsICJ0aXRsZSI6ICJQb3N0Z3JlU1FMIEJhc2ljcyJ9JyBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CisKK0RST1AgVEFCTEUgdCBDQVND QURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLSBNdWx0aXBsZSBIQVNIIEluZGV4ZXMKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K K0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY2F0ZWdvcnkgVkFSQ0hBUiwgc3RhdHVzIFZBUkNIQVIs IHZhbHVlIElOVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0 b3IgPSA3MCk7CitDUkVBVEUgSU5ERVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhh c2goY2F0ZWdvcnkpOworQ1JFQVRFIElOREVYIHRfaGFzaF9zdGF0dXNfaWR4IE9OIHQgVVNJTkcg aGFzaChzdGF0dXMpOworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdlbGVjdHJvbmljcycsICdh Y3RpdmUnLCAxMDApOworCistLSBVcGRhdGUgbm9uLWluZGV4ZWQgY29sdW1uIC0gc2hvdWxkIGJl IEhPVAorVVBEQVRFIHQgU0VUIHZhbHVlID0gMTUwIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKworLS0gVXBkYXRlIG9uZSBpbmRleGVkIGNv bHVtbiAtIE5PVCBIT1QKK1VQREFURSB0IFNFVCBjYXRlZ29yeSA9ICdib29rcycgV0hFUkUgaWQg PSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCistLSBVcGRh dGUgb3RoZXIgaW5kZXhlZCBjb2x1bW4gLSBOT1QgSE9UCitVUERBVEUgdCBTRVQgc3RhdHVzID0g J2luYWN0aXZlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVz KDEsICd0Jyk7CisKKy0tIFVwZGF0ZSBib3RoIGluZGV4ZWQgY29sdW1ucyAtIE5PVCBIT1QKK1VQ REFURSB0IFNFVCBjYXRlZ29yeSA9ICd2aWRlb3MnLCBzdGF0dXMgPSAncGVuZGluZycgV0hFUkUg aWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAndCcpOworCitEUk9Q IFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiB2cyBIQVNIIENvbXBhcmlz b24KKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0X2JyaW4oaWQgSU5ULCB2YWx1ZSBJTlQsIGRh dGEgVEVYVCkKKyAgICBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3Ig PSA3MCk7CitDUkVBVEUgVEFCTEUgdF9oYXNoKGlkIElOVCwgdmFsdWUgSU5ULCBkYXRhIFRFWFQp CisgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmLCBmaWxsZmFjdG9yID0gNzApOwor CitDUkVBVEUgSU5ERVggdF9icmluX3ZhbHVlX2lkeCBPTiB0X2JyaW4gVVNJTkcgYnJpbih2YWx1 ZSk7CitDUkVBVEUgSU5ERVggdF9oYXNoX3ZhbHVlX2lkeCBPTiB0X2hhc2ggVVNJTkcgaGFzaCh2 YWx1ZSk7CisKK0lOU0VSVCBJTlRPIHRfYnJpbiBWQUxVRVMgKDEsIDEwMCwgJ2luaXRpYWwnKTsK K0lOU0VSVCBJTlRPIHRfaGFzaCBWQUxVRVMgKDEsIDEwMCwgJ2luaXRpYWwnKTsKKworLS0gU2Ft ZSB1cGRhdGUgb24gYm90aCAtIGRpZmZlcmVudCBIT1QgYmVoYXZpb3IgZXhwZWN0ZWQKKy0tIEJS SU46IG1pZ2h0IGFsbG93IEhPVCAocmFuZ2Ugc3VtbWFyeSB1bmNoYW5nZWQpCistLSBIQVNIOiBi bG9ja3MgSE9UIChoYXNoIGJ1Y2tldCBjaGFuZ2VkKQorVVBEQVRFIHRfYnJpbiBTRVQgdmFsdWUg PSAxNTAgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBkYXRlcygxLCAn dF9icmluJyk7CistLSBFeHBlY3RlZDogMSBIT1QgKEJSSU4gYWxsb3dzIGl0IGZvciBzaW5nbGUg cm93KQorCitVUERBVEUgdF9oYXNoIFNFVCB2YWx1ZSA9IDE1MCBXSEVSRSBpZCA9IDE7CitTRUxF Q1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0X2hhc2gnKTsKKy0tIEV4cGVjdGVkOiAw IEhPVCAoSEFTSCBibG9ja3MgaXQpCisKK0RST1AgVEFCTEUgdF9icmluIENBU0NBREU7CitEUk9Q IFRBQkxFIHRfaGFzaCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBIQVNIIEluZGV4IHdpdGgg TlVMTCBWYWx1ZXMKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KK0NSRUFURSBUQUJMRSB0KGlkIElOVCwgY2F0ZWdvcnkg VkFSQ0hBUiwgZGF0YSBURVhUKQorICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwg ZmlsbGZhY3RvciA9IDcwKTsKK0NSRUFURSBJTkRFWCB0X2hhc2hfY2F0ZWdvcnlfaWR4IE9OIHQg VVNJTkcgaGFzaChjYXRlZ29yeSk7CitJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgJ2VsZWN0cm9u aWNzJywgJ2luaXRpYWwnKTsKKworLS0gVXBkYXRlIGluZGV4ZWQgY29sdW1uIHRvIE5VTEwgLSBO T1QgSE9UIChoYXNoIHZhbHVlIGNoYW5nZWQpCitVUERBVEUgdCBTRVQgY2F0ZWdvcnkgPSBOVUxM IFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMCwgJ3QnKTsK Ky0tIEV4cGVjdGVkOiAwIEhPVAorCistLSBVcGRhdGUgaW5kZXhlZCBjb2x1bW4gZnJvbSBOVUxM IHRvIHZhbHVlIC0gTk9UIEhPVAorVVBEQVRFIHQgU0VUIGNhdGVnb3J5ID0gJ2Jvb2tzJyBXSEVS RSBpZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDAsICd0Jyk7CistLSBF eHBlY3RlZDogMCBIT1QKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIGNvbHVtbiAtIHNob3VsZCBi ZSBIT1QKK1VQREFURSB0IFNFVCBkYXRhID0gJ3VwZGF0ZWQnIFdIRVJFIGlkID0gMTsKK1NFTEVD VCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMSwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAxIEhPVAor CitEUk9QIFRBQkxFIHQgQ0FTQ0FERTsKKworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gQlJJTiBvbiBKU09OQiBG aWVsZAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHQoaWQgSU5ULCBtZXRyaWNzIEpTT05CKQor ICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZiwgZmlsbGZhY3RvciA9IDcwKTsKKy0t IEJSSU4gZG9lc24ndCBkaXJlY3RseSBzdXBwb3J0IEpTT05CLCBidXQgd2UgY2FuIHRlc3Qgb24g ZXhwcmVzc2lvbgorQ1JFQVRFIElOREVYIHRfYnJpbl9jb3VudF9pZHggT04gdCBVU0lORyBicmlu KAorICAgIENBU1QobWV0cmljcy0+Pidjb3VudCcgQVMgSU5URUdFUikKKyk7CitJTlNFUlQgSU5U TyB0IFZBTFVFUyAoMSwgJ3siY291bnQiOiAiMTAwIiwgInRpbWVzdGFtcCI6ICIyMDI0LTAxLTAx In0nKTsKKworLS0gVXBkYXRlIG5vbi1pbmRleGVkIEpTT05CIGZpZWxkIC0gc2hvdWxkIGJlIEhP VAorVVBEQVRFIHQgU0VUIG1ldHJpY3MgPSAneyJjb3VudCI6ICIxMDAiLCAidGltZXN0YW1wIjog IjIwMjQtMDEtMDIifScgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBjaGVja19ob3RfdXBk YXRlcygxLCAndCcpOworLS0gRXhwZWN0ZWQ6IDEgSE9UCisKKy0tIFVwZGF0ZSBpbmRleGVkIGZp ZWxkIC0gQlJJTiBhbGxvd3MgSE9UIGZvciBzaW5nbGUgcm93CitVUERBVEUgdCBTRVQgbWV0cmlj cyA9ICd7ImNvdW50IjogIjE1MCIsICJ0aW1lc3RhbXAiOiAiMjAyNC0wMS0wMiJ9JyBXSEVSRSBp ZCA9IDE7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDIsICd0Jyk7CistLSBFeHBl Y3RlZDogMiBIT1QgKEJSSU4gcGVybWl0cyBzaW5nbGUtcm93IHVwZGF0ZXMpCisKK0RST1AgVEFC TEUgdCBDQVNDQURFOworCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBNaXhlZCBCUklOICsgSEFTSCBvbiBTYW1l IFRhYmxlCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgdChpZCBJTlQsIGNhdGVnb3J5IFZBUkNI QVIsIHRpbWVzdGFtcCBUSU1FU1RBTVAsIHByaWNlIE5VTUVSSUMsIGRhdGEgVEVYVCkKKyAgICBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIGZpbGxmYWN0b3IgPSA3MCk7CitDUkVBVEUg SU5ERVggdF9icmluX3RpbWVzdGFtcF9pZHggT04gdCBVU0lORyBicmluKHRpbWVzdGFtcCk7CitD UkVBVEUgSU5ERVggdF9oYXNoX2NhdGVnb3J5X2lkeCBPTiB0IFVTSU5HIGhhc2goY2F0ZWdvcnkp OworSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsICdib29rcycsICcyMDI0LTAxLTAxIDEwOjAwOjAw JywgMjkuOTksICdpbml0aWFsJyk7CisKKy0tIFVwZGF0ZSBub24taW5kZXhlZCBjb2x1bW4gLSBz aG91bGQgYmUgSE9UCitVUERBVEUgdCBTRVQgZGF0YSA9ICd1cGRhdGVkJyBXSEVSRSBpZCA9IDE7 CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2hvdF91cGRhdGVzKDEsICd0Jyk7CistLSBFeHBlY3RlZDog MSBIT1QKKworLS0gVXBkYXRlIEJSSU4gaW5kZXhlZCBjb2x1bW4gLSBhbGxvd3MgSE9UCitVUERB VEUgdCBTRVQgdGltZXN0YW1wID0gJzIwMjQtMDEtMDIgMTA6MDA6MDAnIFdIRVJFIGlkID0gMTsK K1NFTEVDVCAqIEZST00gY2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAy IEhPVAorCistLSBVcGRhdGUgSEFTSCBpbmRleGVkIGNvbHVtbiAtIGJsb2NrcyBIT1QKK1VQREFU RSB0IFNFVCBjYXRlZ29yeSA9ICd2aWRlb3MnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCAqIEZST00g Y2hlY2tfaG90X3VwZGF0ZXMoMiwgJ3QnKTsKKy0tIEV4cGVjdGVkOiAyIEhPVCAoSEFTSCBibG9j a3MgaXQpCisKKy0tIFVwZGF0ZSBwcmljZSAobm9uLWluZGV4ZWQpIC0gc2hvdWxkIGJlIEhPVAor VVBEQVRFIHQgU0VUIHByaWNlID0gMzkuOTkgV0hFUkUgaWQgPSAxOworU0VMRUNUICogRlJPTSBj aGVja19ob3RfdXBkYXRlcygzLCAndCcpOworLS0gRXhwZWN0ZWQ6IDMgSE9UCisKK0RST1AgVEFC TEUgdCBDQVNDQURFOworCistLSBDbGVhbnVwCitEUk9QIEZVTkNUSU9OIGNoZWNrX2hvdF91cGRh dGVzKGludCwgdGV4dCwgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIzYmNl NzJhZTY0Li41MmVmOGYxMGIzNSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5MCw2 ICszOTAsNyBAQCBDYWNoZWRGdW5jdGlvbkNvbXBpbGVDYWxsYmFjawogQ2FjaGVkRnVuY3Rpb25E ZWxldGVDYWxsYmFjawogQ2FjaGVkRnVuY3Rpb25IYXNoRW50cnkKIENhY2hlZEZ1bmN0aW9uSGFz aEtleQorQ2FjaGVkSW5kZXhEYXR1bQogQ2FjaGVkUGxhbgogQ2FjaGVkUGxhblNvdXJjZQogQ2Fs bENvbnRleHQKLS0gCjIuNDkuMAoK --691e05bd_593c4f2_db0--