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 1vtAhl-00768W-2B for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 20:32:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtAhj-005gRm-1f for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 20:32:55 +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 1vtAhi-005gRZ-1D for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 20:32:55 +0000 Received: from fout-a7-smtp.messagingengine.com ([103.168.172.150]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vtAha-00000000Bkp-3Hnt for pgsql-hackers@postgresql.org; Thu, 19 Feb 2026 20:32:53 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.phl.internal (Postfix) with ESMTP id 581F8EC00AB; Thu, 19 Feb 2026 15:32:46 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Thu, 19 Feb 2026 15:32:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc: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=1771533166; x=1771619566; bh=pbai37tQwe Xtejzyl6Q5HRK8v7mMHIuVUSHTi7lfxaI=; b=qEpM5LV/G3NcdSlkjq/e/RlzWf kAw9n01hU1ikcNmV3A2DQrfgzcgTbm/m3nbGAQTPlJbEF0ByyNTsoLlP0uUg5z4p R2RMeEYTvEh697IXDz+go3haLWmL7kE/8siI3ovBRKds4psg07cRez9nnUn/uf0n Q9245xZUh7W64UqbrvqqCNQ2YyMimsy3CIAP6zighc3kR6Ar7rb5bDUSUYb3NY0I cEN4xzX4xRKq2hjZzLjsW9azD6XJZVwiF9cwzmsrYx42RBV2rQEKRiaRPOGf/YBA To0o5nkD+XskojSYt1thpjHXYBqvhr50HKojh3n11vQ6XC342JtLFAHXalYQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc: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= 1771533166; x=1771619566; bh=pbai37tQweXtejzyl6Q5HRK8v7mMHIuVUSH Ti7lfxaI=; b=silYFVbK3i/8b3wwZJoE8vh0COp9Z72AhZCSutPZWRLePrtqz0X BdR2L+6nHv7fQF5KCoJkeuDCIri1SL9yZZdSpSa1Gjb8XP9u2EmL2jLPHtec8vGQ MD13BY+oNjYTfhuqw4Wcrki62MpIyBenSjas2Fdbyc2uinn9596UOJ6eoXs9tqDU tNDzGdSOYSC9Vp0mazBqKxNpRgGEf4L1VEkGHpEtBCtrJMYWEpvfZIibvqwT9Qac og6JCHvhKItmBMXcnlHcy4Rr2se+Q9kBk45m6F0vAAan7UEXFQB3lGDEMQ+gHgM0 aRK1HCQfjUYEiDMaZEQ5GhH5AsNnExDjleQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvvdeiheduucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedfifhrvghguceuuhhrugdfuceoghhrvghgsegsuhhrugdrmhgv qeenucggtffrrghtthgvrhhnpefhveelheeffeffudelvddutdfghfeileeikeeufefhhf elvdffuddvvdejleekleenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgr ihhlfhhrohhmpehgrhgvghessghurhgurdhmvgdpnhgspghrtghpthhtohepvddpmhhoug gvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhqlhesjhdquggrvhhishdrtghomhdp rhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id E8E46C4006E; Thu, 19 Feb 2026 15:32:45 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A1gxZgRQNkgk Date: Thu, 19 Feb 2026 15:32:25 -0500 From: "Greg Burd" To: "Jeff Davis" Cc: pgsql-hackers Message-Id: In-Reply-To: References: <5165C147-B476-4E3D-AAA9-11C0B966FC4D@greg.burd.me> <9394564A-5764-4DCA-8845-8AE102DE61DC@greg.burd.me> <97769442-2ed7-4fe0-a393-7e2b5ff7ff58@app.fastmail.com> <3e1b9075c92808a7356e79087ba51910e5db5a30.camel@j-davis.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=e5f36c1c483d430e859b0a8b4d1b3e57 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --e5f36c1c483d430e859b0a8b4d1b3e57 Content-Type: text/plain Content-Transfer-Encoding: 7bit Hello, This is an updated version of the last patch with a few fixes and a layer on top of it that tries to cleanup heap_update(). v20260219: 0001 - Not much changed in this patch, some clean up and fixed a few mistakes. This patch passes all tests without any need to modify them. I've added ExecCompareSlotAttrs() helper function. 0002 - As before in v29 I've split off the top half of heap_update() and moved that into heapam_tuple_update() and simple_heap_update(). I've created helper functions for different steps in these early stages: HeapUpdateHotAllowable(), HeapUpdateRequiresReplicaId(), HeapUpdateDetermineLockmode(). This allows for a cleaner set of bitmaps and logic (as I read it) on the heapam_tuple_update() path. I reuse these helper functions in simple_heap_update() when possible, even trimming up HeapDeterminColumnsInfo() a bit so as to reuse HeapUpdateRequiresReplicaId(). I've tested with code that validates in heapam_tuple_update() that the modified attr bitmaps are identical: { Bitmapset *hot_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_INDEXED); Bitmapset *id_attrs = RelationGetIndexAttrBitmap(relation, INDEX_ATTR_BITMAP_IDENTITY_KEY); Bitmapset *hdci_attrs = HeapDetermineColumnsInfo(relation, hot_attrs, &oldtup, tuple); Assert(bms_equal(mix_attrs, hdci_attrs)); bms_free(hot_attrs); bms_free(id_attrs); bms_free(hdci_attrs); } Despite that passing two tests became non-deterministic without an "ORDER BY" on a select. You'll see those in generated_virtual.sql and updatable_views.sql in the second patch. I don't know yet why that happened, but the results are otherwise identical. I will continue to performance test. Most things I've tried differ by less than 0.5% before/after this patch. Some operations where multiple rows are matched in an UPDATE and there are concurrent reads are faster (10-20%), I need to dig into this. I'm expanding the tests I'm running to try to find any cases where holding the buffer lock for less time could possibly result in higher TPS. The goals for $subject were faster TPS, but more importantly to lower index bloat and help shorten vacuum times. Next up I'll work on re-introducing some of the other work from $subject and other changes in v29 and earlier patch sets. * avoid the need for index_unchanged_by_update() * re-add the new index AM function, "amcomparedatums()" or similar * add a flag for types indicating that they have "sub-attributes" (JSONB, XML, ARRAY) * store in pg_attribute during CREATE INDEX when types with sub-attributes are in expressions the relation and some representation of what the sub-attribute is * update JSONB functions that mutate content to use the pg_attribute information and record if there were changes to indexed "sub-attributes" or not * use that recorded information later in the executor to identify if the indexed sub-attribute changed or not opening the door for $subject without evaluating the before/after expressions * re-examine partial indexes as well * consider how one might layer a PHOT/WARM-thingie on this... (in a different thread in the future, like next year) best. -greg --e5f36c1c483d430e859b0a8b4d1b3e57 Content-Disposition: attachment; filename*0="v20260219-0001-Idenfity-modified-indexed-attributes-in-th.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v20260219-0001-Idenfity-modified-indexed-attributes-in-th.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSBjOTk2YWIwZTI3NzI0ZmYxNzVhMjRkYTI2NjAzZWMzYzgxYTU3ZDQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyIE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MjAyNjAy MTkgMS8yXSBJZGVuZml0eSBtb2RpZmllZCBpbmRleGVkIGF0dHJpYnV0ZXMgaW4gdGhlCiBl eGVjdXRvciBvbiBVUERBVEUKClJlZmFjdG9yIGV4ZWN1dG9yIHVwZGF0ZSBsb2dpYyB0byBk ZXRlcm1pbmUgd2hpY2ggaW5kZXhlZCBjb2x1bW5zIGhhdmUKYWN0dWFsbHkgY2hhbmdlZCBk dXJpbmcgYW4gVVBEQVRFIG9wZXJhdGlvbiByYXRoZXIgdGhhbiBsZWF2aW5nIHRoaXMgdXAK dG8gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKCkgaW4gaGVhcF91cGRhdGUoKS4KCkV4ZWND aGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoKSByZXBsYWNlcyBIZWFwRGV0ZXJtaW5lc0Nv bHVtbnNJbmZvKCkKYW5kIGlzIGNhbGxlZCBiZWZvcmUgdGFibGVfdHVwbGVfdXBkYXRlKCkg Y3J1Y2lhbGx5IHdpdGhvdXQgdGhlIG5lZWQKZm9yIGFuIGV4Y2x1c2l2ZSBidWZmZXIgbG9j ayBvbiB0aGUgcGFnZSB0aGF0IGhvbGRzIHRoZSB0dXBsZSBiZWluZwp1cGRhdGVkLiAgVGhp cyByZWR1Y2VzIHRoZSB0aW1lIHRoZSBsb2NrIGlzIGhlbGQgbGF0ZXIgd2l0aGluCmhlYXBh bV90dXBsZV91cGRhdGUoKSBhbmQgaGVhcF91cGRhdGUoKS4KCkV4ZWNDaGVja0luZGV4ZWRB dHRyc0ZvckNoYW5nZXMoKSBpbiB0dXJuIHVzZXMgRXhlY0NvbXBhcmVTbG90QXR0cnMoKSB0 bwppZGVudGlmeSB3aGljaCBhdHRyaWJ1dGVzIGhhdmUgY2hhbmdlZCBhbmQgdGhlbiBpbnRl cnNlY3RzIHRoYXQgd2l0aCB0aGUKc2V0IG9mIGluZGV4ZWQgYXR0cmlidXRlcyB0byBpZGVu dGlmeSB0aGUgbW9kaWZpZWQgaW5kZXhlZCBzZXQuCgpCZXNpZGVzIGlkZW50aWZ5aW5nIHRo ZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzCkhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbygpIHdhcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBwYXJ0IG9mIHRoZSBsb2dpYwpp bnZvbGVkIGluIHRoZSBkZWNpc2lvbiB0byBpbmNsdWRlIHRoZSByZXBsaWNhIGlkZW50aXR5 IGtleSBvciBub3QuClRoaXMgbm93IGhhcHBlbnMgaW4gaGVhcF91cGRhdGUoKSB3aGVuIG1v ZGlmaWVkX2F0dHJzX3ZhbGlkIGlzIGZhbHNlLgoKQ2F0YWxvZyB0dXBsZSB1cGRhdGVzIHVz ZSBzaW1wbGVfaGVhcF91cGRhdGUoKSBhbmQgZG9uJ3QgcGFzcyBhCm1vZGlmaWVkX2F0dHJz IEJpdG1hcHNldCBpbnRvIGhlYXBfdXBkYXRlKCkgaW5kaWNhdGVkIGJ5IHRoZQptb2RpZmll ZF9hdHRyc192YWxpZCBib29sIHNldCB0byBmYWxzZS4KClVwZGF0ZXMgc3RlbW1pbmcgZnJv bSBsb2dpY2FsIHJlcGxpY2F0aW9uIGFsc28gdXNlIHRoZSBuZXcKRXhlY0NoZWNrSW5kZXhl ZEF0dHJzRm9yQ2hhbmdlcygpIGluIEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZSgpLgoKQmVm b3JlIHJvdyB0cmlnZ2VycyBvbiBVUERBVEUgbWF5IHVzZSBoZWFwX21vZGlmeV90dXBsZSgp IHRvIHVwZGF0ZQphdHRyaWJ1dGVzIG5vdCBpZGVudGlmaWVkIGJ5IEV4ZWNHZXRBbGxVcGRh dGVkQ29scygpIGFzIGlzIHRoZSBjYXNlIGluCnRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKCku ICBFeGVjQlJVcGRhdGVUcmlnZ2VycygpIG5vdyBpZGVudGlmaWVzCmNoYW5nZXMgdG8gaW5k ZXhlZCBjb2x1bW5zIG5vdCBmb3VuZCBieSBFeGVjR2V0QWxsVXBkYXRlQ29scygpCmFuZCBh ZGRzIHRoZWlyIGF0dHJpYnV0ZXMgdG8gcmlfZXh0cmFVcGRhdGVkQ29scy4gIFNlZQp0c2Vh cmNoLnNxbCB0ZXN0cyBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCA4MCArKysrKysrKysrKysrKysrKy0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICA3ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgIHwgIDUgKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYyAgICAgICAgICAgfCAyMCArKysrLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICB8IDEyICsrLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAgICB8IDkzICsrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgICB8IDc4 ICsrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jIHwgMTAgKy0tCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j ICAgICAgIHwgMTUgKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAg ICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAg fCAgOCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICB8ICA4 ICsrCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaCAgICAgICAgICAgICB8ICAxICsKIDE0IGZp bGVzIGNoYW5nZWQsIDMwMyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDk4ZDUzY2FlZWE4Li5hYjhiNmRkYjhkZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTMzMTEsNiArMzMxMSw3IEBAIFRN X1Jlc3VsdAogaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2lu dGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJCUNvbW1hbmRJZCBjaWQsIFNu YXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKIAkJCVRNX0ZhaWx1cmVEYXRhICp0bWZk LCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCWNvbnN0IEJpdG1hcHNldCAqbW9kaWZp ZWRfYXR0cnMsIGJvb2wgbW9kaWZpZWRfYXR0cnNfdmFsaWQsCiAJCQlUVV9VcGRhdGVJbmRl eGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwpAQCAtMzMyMCw3 ICszMzIxLDYgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAlCaXRtYXBzZXQgICprZXlf YXR0cnM7CiAJQml0bWFwc2V0ICAqaWRfYXR0cnM7CiAJQml0bWFwc2V0ICAqaW50ZXJlc3Rp bmdfYXR0cnM7Ci0JQml0bWFwc2V0ICAqbW9kaWZpZWRfYXR0cnM7CiAJSXRlbUlkCQlscDsK IAlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKIAlIZWFwVHVwbGUJaGVhcHR1cDsKQEAgLTMzNDUs NyArMzM0NSw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVt UG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJYm9vbAkJYWxsX3Zpc2li bGVfY2xlYXJlZF9uZXcgPSBmYWxzZTsKIAlib29sCQljaGVja2VkX2xvY2tlcnM7CiAJYm9v bAkJbG9ja2VyX3JlbWFpbnM7Ci0JYm9vbAkJaWRfaGFzX2V4dGVybmFsID0gZmFsc2U7CisJ Ym9vbAkJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGZhbHNlOwogCVRyYW5zYWN0aW9uSWQgeG1h eF9uZXdfdHVwbGUsCiAJCQkJeG1heF9vbGRfdHVwbGU7CiAJdWludDE2CQlpbmZvbWFza19v bGRfdHVwbGUsCkBAIC0zNDg3LDkgKzM0ODcsNjkgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1 cCwKIAkgKiBuZXcgdHVwbGUgc28gd2UgbXVzdCBpbmNsdWRlIGl0IGFzIHBhcnQgb2YgdGhl IG9sZF9rZXlfdHVwbGUuICBTZWUKIAkgKiBFeHRyYWN0UmVwbGljYUlkZW50aXR5LgogCSAq LwotCW1vZGlmaWVkX2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9u LCBpbnRlcmVzdGluZ19hdHRycywKLQkJCQkJCQkJCQkJICBpZF9hdHRycywgJm9sZHR1cCwK LQkJCQkJCQkJCQkJICBuZXd0dXAsICZpZF9oYXNfZXh0ZXJuYWwpOworCWlmICghbW9kaWZp ZWRfYXR0cnNfdmFsaWQpCisJeworCQlib29sCQlpZF9oYXNfZXh0ZXJuYWwgPSBmYWxzZTsK KworCQltb2RpZmllZF9hdHRycyA9IEhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbyhyZWxhdGlv biwgaW50ZXJlc3RpbmdfYXR0cnMsCisJCQkJCQkJCQkJCQkgIGlkX2F0dHJzLCAmb2xkdHVw LAorCQkJCQkJCQkJCQkJICBuZXd0dXAsICZpZF9oYXNfZXh0ZXJuYWwpOworCQlyZXBfaWRf a2V5X3JlcXVpcmVkID0gaWRfaGFzX2V4dGVybmFsIHx8CisJCQlibXNfb3ZlcmxhcChtb2Rp ZmllZF9hdHRycywgaWRfYXR0cnMpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBFeHRy YWN0UmVwbGljYXRJZGVudGl0eSgpIG5lZWRzIHRvIGtub3cgaWYgYSBtb2RpZmllZCBhdHRy YnV0ZSBpcworCQkgKiB1c2VkIGFzIGEgcmVwbGljYSBpbmRlbnRpdHkgb3IgaWYgYW55IG9m IHRoZSB1bm1vZGlmaWVkIGluZGV4ZWQKKwkJICogYXR0cmlidXRlcyBpbiB0aGUgb2xkIHR1 cGxlIGFyZSBzdG9yZWQgZXh0ZXJuYWxseSBhbmQgdXNlZCBhcyBhCisJCSAqIHJlcGxpY2Eg aWRlbnRpdHkuCisJCSAqLworCQlyZXBfaWRfa2V5X3JlcXVpcmVkID0gYm1zX292ZXJsYXAo bW9kaWZpZWRfYXR0cnMsIGlkX2F0dHJzKTsKKwkJaWYgKCFyZXBfaWRfa2V5X3JlcXVpcmVk KQorCQl7CisJCQlCaXRtYXBzZXQgICphdHRyczsKKwkJCVR1cGxlRGVzYwl0dXBkZXNjID0g UmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJCQlpbnQJCQlhdHRpZHggPSAtMTsKKwor CQkJLyogQ2hlY2sgYWxsIHVubW9kaWZpZWQgaW5kZXhlZCByZXBsaWNhIGlkZW50aXR5IGtl eSBhdHRyaWJ1dGVzICovCisJCQlhdHRycyA9IGJtc19kaWZmZXJlbmNlKGludGVyZXN0aW5n X2F0dHJzLCBtb2RpZmllZF9hdHRycyk7CisJCQlhdHRycyA9IGJtc19pbnRfbWVtYmVycyhh dHRycywgaWRfYXR0cnMpOworCisJCQl3aGlsZSAoKGF0dGlkeCA9IGJtc19uZXh0X21lbWJl cihhdHRycywgYXR0aWR4KSkgPj0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIGF0dGlkeCBp cyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlzIHRoZSBub3JtYWwgYXR0cmlidXRlCisJCQkJICog bnVtYmVyCisJCQkJICovCisJCQkJQXR0ck51bWJlcglhdHRybnVtID0gYXR0aWR4ICsgRmly c3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKwkJCQlEYXR1bQkJdmFsdWU7CisJ CQkJYm9vbAkJaXNudWxsOworCisJCQkJLyoKKwkJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBh cmUgbm90IGFkZGVkIGludG8gaW50ZXJlc3RpbmdfYXR0cnMgaW4KKwkJCQkgKiByZWxjYWNo ZS4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoYXR0cm51bSA+IDApOworCisJCQkJdmFsdWUgPSBo ZWFwX2dldGF0dHIoJm9sZHR1cCwgYXR0cm51bSwgdHVwZGVzYywgJmlzbnVsbCk7CisKKwkJ CQkvKiBObyBuZWVkIHRvIGNoZWNrIGF0dHJpYnV0ZXMgdGhhdCBjYW4ndCBiZSBzdG9yZWQg ZXh0ZXJuYWxseSAqLworCQkJCWlmIChpc251bGwgfHwKKwkJCQkJVHVwbGVEZXNjQ29tcGFj dEF0dHIodHVwZGVzYywgYXR0cm51bSAtIDEpLT5hdHRsZW4gIT0gLTEpCisJCQkJCWNvbnRp bnVlOworCisJCQkJLyogQ2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0ZSBpcyBz dG9yZWQgZXh0ZXJuYWxseSAqLworCQkJCWlmIChWQVJBVFRfSVNfRVhURVJOQUwoKHN0cnVj dCB2YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2YWx1ZSkpKQorCQkJCXsKKwkJCQkJcmVw X2lkX2tleV9yZXF1aXJlZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwor CQkJYm1zX2ZyZWUoYXR0cnMpOworCQl9CisJfQogCiAJLyoKIAkgKiBJZiB3ZSdyZSBub3Qg dXBkYXRpbmcgYW55ICJrZXkiIGNvbHVtbiwgd2UgY2FuIGdyYWIgYSB3ZWFrZXIgbG9jayB0 eXBlLgpAQCAtMzc2Myw3ICszODIzLDcgQEAgbDI6CiAJCWJtc19mcmVlKHN1bV9hdHRycyk7 CiAJCWJtc19mcmVlKGtleV9hdHRycyk7CiAJCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJYm1z X2ZyZWUobW9kaWZpZWRfYXR0cnMpOworCQkvKiBtb2RpZmllZCBhdHRycyBpcyBwYXNzZWQg aW4gYW5kIGZyZWUnZCBieSB0aGUgY2FsbGVyLCBvciBOVUxMICovCiAJCWJtc19mcmVlKGlu dGVyZXN0aW5nX2F0dHJzKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC00MTExLDggKzQx NzEsNyBAQCBsMjoKIAkgKiBjb2x1bW5zIGFyZSBtb2RpZmllZCBvciBpdCBoYXMgZXh0ZXJu YWwgZGF0YS4KIAkgKi8KIAlvbGRfa2V5X3R1cGxlID0gRXh0cmFjdFJlcGxpY2FJZGVudGl0 eShyZWxhdGlvbiwgJm9sZHR1cCwKLQkJCQkJCQkJCQkgICBibXNfb3ZlcmxhcChtb2RpZmll ZF9hdHRycywgaWRfYXR0cnMpIHx8Ci0JCQkJCQkJCQkJICAgaWRfaGFzX2V4dGVybmFsLAor CQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJICAgJm9sZF9r ZXlfY29waWVkKTsKIAogCS8qIE5PIEVSRVBPUlQoRVJST1IpIGZyb20gaGVyZSB0aWxsIGNo YW5nZXMgYXJlIGxvZ2dlZCAqLwpAQCAtNDI3OCw3ICs0MzM3LDcgQEAgbDI6CiAJYm1zX2Zy ZWUoc3VtX2F0dHJzKTsKIAlibXNfZnJlZShrZXlfYXR0cnMpOwogCWJtc19mcmVlKGlkX2F0 dHJzKTsKLQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7CisJLyogbW9kaWZpZWQgYXR0cnMg aXMgcGFzc2VkIGluIGFuZCBmcmVlJ2QgYnkgdGhlIGNhbGxlciwgb3IgTlVMTCAqLwogCWJt c19mcmVlKGludGVyZXN0aW5nX2F0dHJzKTsKIAogCXJldHVybiBUTV9PazsKQEAgLTQ1NjIs NyArNDYyMSw4IEBAIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwCiAJcmVzdWx0ID0gaGVh cF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwKIAkJCQkJCSBHZXRDdXJyZW50Q29tbWFu ZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBj b21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsK KwkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlLAorCQkJCQkJIE5VTEwsIGZhbHNlLCB1cGRhdGVf aW5kZXhlcyk7CiAJc3dpdGNoIChyZXN1bHQpCiAJewogCQljYXNlIFRNX1NlbGZNb2RpZmll ZDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGNi ZWY3M2U1ZDRiLi4yZDc0ZmE5MGM3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCkBAIC0zMTIsMTIgKzMxMiwxMSBAQCBoZWFwYW1fdHVwbGVfZGVs ZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQs CiAJcmV0dXJuIGhlYXBfZGVsZXRlKHJlbGF0aW9uLCB0aWQsIGNpZCwgY3Jvc3NjaGVjaywg d2FpdCwgdG1mZCwgY2hhbmdpbmdQYXJ0KTsKIH0KIAotCiBzdGF0aWMgVE1fUmVzdWx0CiBo ZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlk LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qg c25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCi0JCQkJCWJvb2wgd2FpdCwgVE1fRmFp bHVyZURhdGEgKnRtZmQsCi0JCQkJCUxvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLCBUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJl RGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCisJCQkJCWNvbnN0IEJpdG1h cHNldCAqbW9kaWZpZWRfYXR0cnMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVz KQogewogCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwogCUhlYXBUdXBsZQl0dXBsZSA9IEV4 ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUpOwpAQCAtMzI4 LDcgKzMyNyw3IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0 ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCXR1cGxlLT50X3RhYmxl T2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOwogCiAJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVs YXRpb24sIG90aWQsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1m ZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCSB0bWZkLCBsb2NrbW9kZSwg bW9kaWZpZWRfYXR0cnMsIHRydWUsIHVwZGF0ZV9pbmRleGVzKTsKIAlJdGVtUG9pbnRlckNv cHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCBkZmRhMWFmNDEyZS4uNDJhY2Q1YjE3YTkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMzU5LDYgKzM1OSw3IEBAIHZv aWQKIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRl ciBvdGlkLAogCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCisJCQkJCQkgIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLAogCQkJ CQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlUTV9SZXN1bHQJ cmVzdWx0OwpAQCAtMzY5LDcgKzM3MCw5IEBAIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUo UmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCQlHZXRDdXJyZW50Q29t bWFuZElkKHRydWUpLAogCQkJCQkJCQlzbmFwc2hvdCwgSW52YWxpZFNuYXBzaG90LAogCQkJ CQkJCQl0cnVlIC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkJCSZ0bWZkLCAmbG9j a21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwKKwkJ CQkJCQkJbWl4X2F0dHJzLAorCQkJCQkJCQl1cGRhdGVfaW5kZXhlcyk7CiAKIAlzd2l0Y2gg KHJlc3VsdCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2Vy LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKaW5kZXggOGRmOTE1ZjYzZmIu LjYyODc5YWQzYjRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCkBAIC0yOTc4LDYgKzI5 NzgsNyBAQCBFeGVjQlJVcGRhdGVUcmlnZ2VycyhFU3RhdGUgKmVzdGF0ZSwgRVBRU3RhdGUg KmVwcXN0YXRlLAogCQkJCQkgYm9vbCBpc19tZXJnZV91cGRhdGUpCiB7CiAJVHJpZ2dlckRl c2MgKnRyaWdkZXNjID0gcmVsaW5mby0+cmlfVHJpZ0Rlc2M7CisJVHVwbGVEZXNjCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYyk7CiAJVHVw bGVUYWJsZVNsb3QgKm9sZHNsb3QgPSBFeGVjR2V0VHJpZ2dlck9sZFNsb3QoZXN0YXRlLCBy ZWxpbmZvKTsKIAlIZWFwVHVwbGUJbmV3dHVwbGUgPSBOVUxMOwogCUhlYXBUdXBsZQl0cmln dHVwbGU7CkBAIC0yOTg1LDcgKzI5ODYsOSBAQCBFeGVjQlJVcGRhdGVUcmlnZ2VycyhFU3Rh dGUgKmVzdGF0ZSwgRVBRU3RhdGUgKmVwcXN0YXRlLAogCWJvb2wJCXNob3VsZF9mcmVlX25l dyA9IGZhbHNlOwogCVRyaWdnZXJEYXRhIExvY1RyaWdnZXJEYXRhID0gezB9OwogCWludAkJ CWk7Ci0JQml0bWFwc2V0ICAqdXBkYXRlZENvbHM7CisJQml0bWFwc2V0ICAqdXBkYXRlZENv bHMgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlbWFpbmluZ0NvbHMgPSBOVUxMOworCUJpdG1h cHNldCAgKm1vZGlmaWVkQ29sczsKIAlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOwogCiAJLyog RGV0ZXJtaW5lIGxvY2sgbW9kZSB0byB1c2UgKi8KQEAgLTMxMjcsNiArMzEzMCwyMSBAQCBF eGVjQlJVcGRhdGVUcmlnZ2VycyhFU3RhdGUgKmVzdGF0ZSwgRVBRU3RhdGUgKmVwcXN0YXRl LAogCWlmIChzaG91bGRfZnJlZV90cmlnKQogCQloZWFwX2ZyZWV0dXBsZSh0cmlndHVwbGUp OwogCisJLyoKKwkgKiBCZWZvcmUgVVBEQVRFIHRyaWdnZXJzIG1heSBoYXZlIHVwZGF0ZWQg YXR0cmlidXRlcyBub3Qga25vd24gdG8KKwkgKiBFeGVjR2V0QWxsVXBkYXRlZENvbHVtbnMo KSB1c2luZyBoZWFwX21vZGlmeV90dXBsZSgpIG9yCisJICogaGVhcF9tb2RpZml5X3R1cGxl X2J5X2NvbHMoKS4gIEZpbmQgYW5kIHJlY29yZCB0aG9zZSBub3cuCisJICovCisJcmVtYWlu aW5nQ29scyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMSAtIEZpcnN0TG93SW52YWxpZEhlYXBB dHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJICAgdHVwZGVzYy0+bmF0dHMgLSBGaXJzdExvd0lu dmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwlyZW1haW5pbmdDb2xzID0gYm1zX2RlbF9t ZW1iZXJzKHJlbWFpbmluZ0NvbHMsIHVwZGF0ZWRDb2xzKTsKKwltb2RpZmllZENvbHMgPSBF eGVjQ29tcGFyZVNsb3RBdHRycyh0dXBkZXNjLCByZW1haW5pbmdDb2xzLCBvbGRzbG90LCBu ZXdzbG90KTsKKwlyZWxpbmZvLT5yaV9leHRyYVVwZGF0ZWRDb2xzID0KKwkJYm1zX2FkZF9t ZW1iZXJzKHJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHMsIG1vZGlmaWVkQ29scyk7CisK KwlibXNfZnJlZShyZW1haW5pbmdDb2xzKTsKKwlibXNfZnJlZShtb2RpZmllZENvbHMpOwor CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMKaW5kZXggMjQ5N2VlN2VkYzUuLjYzYTUzZDg4YTgyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgpAQCAtOTA2LDYgKzkwNyw3IEBAIEV4ZWNTaW1w bGVSZWxhdGlvblVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCWJvb2wJ CXNraXBfdHVwbGUgPSBmYWxzZTsKIAlSZWxhdGlvbglyZWwgPSByZXN1bHRSZWxJbmZvLT5y aV9SZWxhdGlvbkRlc2M7CiAJSXRlbVBvaW50ZXIgdGlkID0gJihzZWFyY2hzbG90LT50dHNf dGlkKTsKKwlCaXRtYXBzZXQgICptaXhfYXR0cnM7CiAKIAkvKgogCSAqIFdlIHN1cHBvcnQg b25seSBub24tc3lzdGVtIHRhYmxlcywgd2l0aApAQCAtOTQ0LDggKzk0NiwxNiBAQCBFeGVj U2ltcGxlUmVsYXRpb25VcGRhdGUoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJ aWYgKHJlbC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbikKIAkJCUV4ZWNQYXJ0aXRpb25DaGVj ayhyZXN1bHRSZWxJbmZvLCBzbG90LCBlc3RhdGUsIHRydWUpOwogCisJCW1peF9hdHRycyA9 IEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJ CQkJCQkJCQllc3RhdGUsIHNlYXJjaHNsb3QsIHNsb3QpOworCisJCS8qCisJCSAqIFdlJ3Jl IG5vdCBnb2luZyB0byBjYWxsIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMgaGVy ZQorCQkgKiBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGUgY2hhbmdlcyBl YXJsaWVyIG9uIHRoYW5rcyB0bworCQkgKiBzbG90X21vZGlmeV9kYXRhLgorCQkgKi8KIAkJ c2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShyZWwsIHRpZCwgc2xvdCwgZXN0YXRlLT5lc19z bmFwc2hvdCwKLQkJCQkJCQkJICAmdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkgIG1peF9h dHRycywgJnVwZGF0ZV9pbmRleGVzKTsKIAogCQljb25mbGljdGluZGV4ZXMgPSByZXN1bHRS ZWxJbmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXM7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNUdXBsZXMuYwppbmRleCBiNzY4ZWFlOWU1My4uZTk1ZGRlMmRmMmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJu b2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNs dWRlICJ1dGlscy9leHBhbmRlZGRhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKQEAgLTE5MjksNiArMTkzMCw5OCBA QCBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlRGF0dW0oVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJ cmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIEV4ZWNDb21wYXJlU2xvdHMKKyAqCisgKiBDb21w YXJlIG9sZCBhbmQgbmV3IFR1cGxlVGFibGVTbG90cyB0byBkZXRlY3Qgd2hpY2ggYXR0cmli dXRlcyBoYXZlIGNoYW5nZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgdHdvIHB1 cnBvc2VzOgorICogMSkgQWZ0ZXIgdHJpZ2dlciBleGVjdXRpb246IGRldGVjdCB0cmlnZ2Vy LW1vZGlmaWVkIGNvbHVtbnMKKyAqICAgIChwYXNzIGV4Y2x1ZGluZz1leHBsaWNpdGx5IFNF VCBjb2x1bW5zLCBpbmNsdWRpbmc9TlVMTCkKKyAqIDIpIEluZGV4IG1haW50ZW5hbmNlOiBk ZXRlY3QgY2hhbmdlcyBpbiBpbmRleGVkIGNvbHVtbnMKKyAqICAgIChwYXNzIGluY2x1ZGlu Zz1pbmRleGVkIEFORCBleHBsaWNpdGx5IFNFVCBjb2x1bW5zLCBleGNsdWRpbmc9TlVMTCkK KyAqCisgKiBQYXJhbWV0ZXJzOgorICogICByZXN1bHRSZWxJbmZvIC0gcmVsYXRpb24gaW5m b3JtYXRpb24KKyAqICAgZXhjbHVkaW5nIC0gYml0bWFwc2V0IG9mIGF0dHJpYnV0ZXMgdG8g c2tpcAorICogICBpbmNsdWRpbmcgLSBiaXRtYXBzZXQgb2YgYXR0cmlidXRlcyB0byBjaGVj aworICogICB0dXBkZXNjIC0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbikKKyAqICAgb2xk X3R0cyAtIG9sZCB0dXBsZSBzbG90CisgKiAgIG5ld190dHMgLSBuZXcgdHVwbGUgc2xvdAor ICoKKyAqIElmIGluY2x1ZGluZyBpcyBOVUxMLCBjaGVjayBhbGwgYXR0cmlidXRlcyBFWENF UFQgdGhvc2UgaW4gZXhjbHVkaW5nCisgKiBJZiBleGNsdWRpbmcgaXMgTlVMTCwgY2hlY2sg T05MWSBhdHRyaWJ1dGVzIGluIGluY2x1ZGluZworICogSWYgYm90aCBhcmUgTlVMTCwgY2hl Y2sgYWxsIGF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJp YnV0ZSBpbmRpY2VzICh1c2luZyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVy CisgKiBjb252ZW50aW9uKSB0aGF0IGRpZmZlciBiZXR3ZWVuIHRoZSB0d28gc2xvdHMuCisg Ki8KK0JpdG1hcHNldCAqCitFeGVjQ29tcGFyZVNsb3RBdHRycyhUdXBsZURlc2MgdHVwZGVz YywKKwkJCQkJIGNvbnN0IEJpdG1hcHNldCAqYXR0cnMsCisJCQkJCSBUdXBsZVRhYmxlU2xv dCAqb2xkX3R0cywKKwkJCQkJIFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKQoreworCWludAkJ CWF0dGlkeCA9IC0xOworCUJpdG1hcHNldCAgKm1vZGlmaWVkID0gTlVMTDsKKworCXdoaWxl ICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCXsK KwkJLyogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRy aWJ1dGUgbnVtYmVyICovCisJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZpcnN0 TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCURhdHVtCQlvbGRfdmFsdWUsCisJ CQkJCW5ld192YWx1ZTsKKwkJYm9vbAkJb2xkX251bGwsCisJCQkJCW5ld19udWxsOworCQlD b21wYWN0QXR0cmlidXRlICphdHQ7CisKKwkJLyoKKwkJICogSWYgaXQncyBhIHdob2xlLXR1 cGxlIHJlZmVyZW5jZSwgc2F5ICJub3QgZXF1YWwiLiAgSXQncyBub3QgcmVhbGx5CisJCSAq IHdvcnRoIHN1cHBvcnRpbmcgdGhpcyBjYXNlLCBzaW5jZSBpdCBjb3VsZCBvbmx5IHN1Y2Nl ZWQgYWZ0ZXIgYQorCQkgKiBuby1vcCB1cGRhdGUsIHdoaWNoIGlzIGhhcmRseSBhIGNhc2Ug d29ydGggb3B0aW1pemluZyBmb3IuCisJCSAqLworCQlpZiAoYXR0cm51bSA9PSAwKQorCQl7 CisJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBMaWtld2lzZSwgYXV0b21hdGljYWxseSBz YXkgIm5vdCBlcXVhbCIgZm9yIGFueSBzeXN0ZW0gYXR0cmlidXRlCisJCSAqIG90aGVyIHRo YW4gdGFibGVPSUQ7IHdlIGNhbm5vdCBleHBlY3QgdGhlc2UgdG8gYmUgY29uc2lzdGVudCBp biBhCisJCSAqIEhPVCBjaGFpbiwgb3IgZXZlbiB0byBiZSBzZXQgY29ycmVjdGx5IHlldCBp biB0aGUgbmV3IHR1cGxlLgorCQkgKi8KKwkJaWYgKGF0dHJudW0gPCAwKQorCQl7CisJCQlp ZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJpYnV0ZU51bWJlcikKKwkJCXsKKwkJCQltb2Rp ZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJCWNvbnRpbnVl OworCQkJfQorCQl9CisKKwkJYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywg YXR0cm51bSAtIDEpOworCQlvbGRfdmFsdWUgPSBzbG90X2dldGF0dHIob2xkX3R0cywgYXR0 cm51bSwgJm9sZF9udWxsKTsKKwkJbmV3X3ZhbHVlID0gc2xvdF9nZXRhdHRyKG5ld190dHMs IGF0dHJudW0sICZuZXdfbnVsbCk7CisKKwkJLyogQSBjaGFuZ2UgdG8vZnJvbSBOVUxMLCBz byBub3QgZXF1YWwgKi8KKwkJaWYgKG9sZF9udWxsICE9IG5ld19udWxsKQorCQl7CisJCQlt b2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKiBCb3RoIE5VTEwsIG5vIGNoYW5nZS91bm1vZGlmaWVkICovCisJ CWlmIChvbGRfbnVsbCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZGF0dW1faW1hZ2VfZXEo b2xkX3ZhbHVlLCBuZXdfdmFsdWUsIGF0dC0+YXR0Ynl2YWwsIGF0dC0+YXR0bGVuKSkKKwkJ CW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlkeCk7CisJfQorCisJ cmV0dXJuIG1vZGlmaWVkOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQljb252ZW5pZW5j ZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA3OTNjNzZkNGY4Mi4uMTg3OTZiYWVk MjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0xNyw2 ICsxNyw3IEBACiAgKgkJRXhlY01vZGlmeVRhYmxlCQktIHJldHJpZXZlIHRoZSBuZXh0IHR1 cGxlIGZyb20gdGhlIG5vZGUKICAqCQlFeGVjRW5kTW9kaWZ5VGFibGUJLSBzaHV0IGRvd24g dGhlIE1vZGlmeVRhYmxlIG5vZGUKICAqCQlFeGVjUmVTY2FuTW9kaWZ5VGFibGUgLSByZXNj YW4gdGhlIE1vZGlmeVRhYmxlIG5vZGUKKyAqCQlFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JD aGFuZ2VzIC0gZmluZCBzZXQgb2YgdXBkYXRlZCBpbmRleGVkIGNvbHVtbnMKICAqCiAgKgkg Tk9URVMKICAqCQlUaGUgTW9kaWZ5VGFibGUgbm9kZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0 cyBvdXRlclBsYW4sIHdoaWNoIGlzCkBAIC01NCw2ICs1NSw3IEBACiAKICNpbmNsdWRlICJh Y2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNp bmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaCIKQEAgLTE4OCw2ICsxOTAsNTAgQEAgc3RhdGljIFR1cGxlVGFibGVTbG90 ICpFeGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJ CQkJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJCSAg IGJvb2wgY2FuU2V0VGFnKTsKIAorLyoKKyAqIEV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNo YW5nZXMKKyAqCisgKiBEZXRlcm1pbmUgd2hpY2ggaW5kZXhlcyBuZWVkIHVwZGF0aW5nIGJ5 IGZpbmRpbmcgdGhlIHNldCBvZiBtb2RpZmllZCBpbmRleGVkCisgKiBhdHRyaWJ1dGVzLgor ICoKKyAqIFRoZSBnb2FsIGlzIGZvciB0aGUgZXhlY3V0b3IgdG8ga25vdywgYWhlYWQgb2Yg Y2FsbGluZyBpbnRvIHRoZSB0YWJsZSBBTSB0bworICogcHJvY2VzcyB0aGUgdXBkYXRlIGFu ZCBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBpbmRleCBBTSBmb3IgaW5zZXJ0aW5nIG5ldwor ICogaW5kZXggdHVwbGVzLCB3aGljaCBhdHRyaWJ1dGVzIGluIHRoZSBuZXcgVHVwbGVUYWJs ZVNsb3QsIGlmIGFueSwgdHJ1ZWx5CisgKiBuZWNlc3NpdGF0ZSBhIG5ldyBpbmRleCB0dXBs ZS4KKyAqCisgKiBSZXR1cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBpbnRl cnNlY3RzIHdpdGggaW5kZXhlcyB3aGljaCByZXF1aXJlCisgKiBhIG5ldyBpbmRleCB0dXBs ZS4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMo UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJRVN0YXRlICplc3RhdGUs CisJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkJCQlUdXBsZVRhYmxl U2xvdCAqbmV3X3R0cykKK3sKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlc3VsdFJlbEluZm8t PnJpX1JlbGF0aW9uRGVzYzsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsYXRpb24pOworCUJpdG1hcHNldCAgKmF0dHJzLAorCQkJICAgKm1peF9hdHRyczsK KworCS8qIElmIG5vIGluZGV4ZXMsIHdlJ3JlIGRvbmUgKi8KKwlpZiAocmVzdWx0UmVsSW5m by0+cmlfTnVtSW5kaWNlcyA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRmV0 Y2ggdGhlIHNldCBvZiBhdHRyaWJ1dGVzIGV4cGxpY2l0eSBTRVQgaW4gdGhlIFVQREFURSBz dGF0ZW1lbnQgb3IKKwkgKiBzZXQgYnkgYSBiZWZvcmUgcm93IHRyaWdnZXIgKGV2ZW4gaWYg bm90IG1lbnRpb25lZCBpbiB0aGUgU1FMKSBhbmQgZ2V0CisJICogdGhlIHN1YnNldCB0aGF0 IGFyZSBhbHNvIGluZGV4ZWQuCisJICovCisJYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7CisJYXR0cnMg PSBibXNfaW50X21lbWJlcnMoYXR0cnMsIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyhyZXN1bHRS ZWxJbmZvLCBlc3RhdGUpKTsKKworCS8qIEZpbmQgb3V0IHdoaWNoLCBpZiBhbnksIG1vZGlm aWVkIGluZGV4ZWQgYXR0cmlidXRlcyBjaGFuZ2VkICovCisJbWl4X2F0dHJzID0gRXhlY0Nv bXBhcmVTbG90QXR0cnModHVwZGVzYywgYXR0cnMsIG9sZF90dHMsIG5ld190dHMpOworCisJ Ym1zX2ZyZWUoYXR0cnMpOworCisJcmV0dXJuIG1peF9hdHRyczsKK30KIAogLyoKICAqIFZl cmlmeSB0aGF0IHRoZSB0dXBsZXMgdG8gYmUgcHJvZHVjZWQgYnkgSU5TRVJUIG1hdGNoIHRo ZQpAQCAtMjE5NSwxNCArMjI0MSwxNyBAQCBFeGVjVXBkYXRlUHJlcGFyZVNsb3QoUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKICAqLwogc3RhdGljIFRNX1Jlc3VsdAogRXhlY1Vw ZGF0ZUFjdChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCi0JCQkgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0 dXBsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkgIGJvb2wgY2FuU2V0VGFnLCBVcGRh dGVDb250ZXh0ICp1cGRhdGVDeHQpCisJCQkgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBU dXBsZSBvbGR0dXBsZSwgVHVwbGVUYWJsZVNsb3QgKm9sZFNsb3QsCisJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90LCBib29sIGNhblNldFRhZywgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0 KQogewogCUVTdGF0ZQkgICAqZXN0YXRlID0gY29udGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9u CXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsK IAlib29sCQlwYXJ0aXRpb25fY29uc3RyYWludF9mYWlsZWQ7CiAJVE1fUmVzdWx0CXJlc3Vs dDsKIAorCS8qIFRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQg dHJpZ2dlciBuZXcgaW5kZXggZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9 IE5VTEw7CisKIAl1cGRhdGVDeHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwogCiAJLyoK QEAgLTIzMTksNyArMjM2OCwxNiBAQCBscmVwbGFjZToKIAkJRXhlY0NvbnN0cmFpbnRzKHJl c3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSk7CiAKIAkvKgotCSAqIHJlcGxhY2UgdGhlIGhl YXAgdHVwbGUKKwkgKiBOZXh0IHVwIHdlIG5lZWQgdG8gZmluZCBvdXQgdGhlIHNldCBvZiBp bmRleGVkIGF0dHJpYnV0ZXMgdGhhdCBoYXZlCisJICogY2hhbmdlZCBpbiB2YWx1ZSBhbmQg c2hvdWxkIHRyaWdnZXIgYSBuZXcgaW5kZXggdHVwbGUuICBXZSBjb3VsZCBzdGFydAorCSAq IHdpdGggdGhlIHNldCBvZiB1cGRhdGVkIGNvbHVtbnMgdmlhIEV4ZWNHZXRVcGRhdGVkQ29s cygpLCBidXQgaWYgd2UgZG8KKwkgKiB3ZSB3aWxsIG92ZXJsb29rIGF0dHJpYnV0ZXMgZGly ZWN0bHkgbW9kaWZpZWQgYnkgaGVhcF9tb2RpZnlfdHVwbGUoKQorCSAqIHdoaWNoIGFyZSBu b3Qga25vd24gdG8gRXhlY0dldFVwZGF0ZWRDb2xzKCkuCisJICovCisJbWl4X2F0dHJzID0g RXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUs IG9sZFNsb3QsIHNsb3QpOworCisJLyoKKwkgKiBDYWxsIGludG8gdGhlIHRhYmxlIEFNIHRv IHVwZGF0ZSB0aGUgaGVhcCB0dXBsZS4KIAkgKgogCSAqIE5vdGU6IGlmIGVzX2Nyb3NzY2hl Y2tfc25hcHNob3QgaXNuJ3QgSW52YWxpZFNuYXBzaG90LCB3ZSBjaGVjayB0aGF0CiAJICog dGhlIHJvdyB0byBiZSB1cGRhdGVkIGlzIHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdCwgYW5k IHRocm93IGEKQEAgLTIzMzMsNiArMjM5MSw3IEBAIGxyZXBsYWNlOgogCQkJCQkJCQllc3Rh dGUtPmVzX2Nyb3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3Ig Y29tbWl0ICovICwKIAkJCQkJCQkJJmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQtPmxvY2tt b2RlLAorCQkJCQkJCQltaXhfYXR0cnMsCiAJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUlu ZGV4ZXMpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI1NTUsOCArMjYxNCw5IEBAIEV4ZWNV cGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCQkgKi8KIHJlZG9fYWN0OgogCQlsb2NrZWR0aWQgPSAqdHVwbGVpZDsK LQkJcmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBs ZWlkLCBvbGR0dXBsZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcsICZ1cGRhdGVDeHQp OworCisJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywg dHVwbGVpZCwgb2xkdHVwbGUsIG9sZFNsb3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFn LCAmdXBkYXRlQ3h0KTsKIAogCQkvKgogCQkgKiBJZiBFeGVjVXBkYXRlQWN0IHJlcG9ydHMg dGhhdCBhIGNyb3NzLXBhcnRpdGlvbiB1cGRhdGUgd2FzIGRvbmUsCkBAIC0zNDA2LDggKzM0 NjYsOCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJCQkJQXNzZXJ0KG9sZHR1cGxlID09IE5VTEwp OwogCiAJCQkJCXJlc3VsdCA9IEV4ZWNVcGRhdGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5m bywgdHVwbGVpZCwKLQkJCQkJCQkJCQkgICBOVUxMLCBuZXdzbG90LCBjYW5TZXRUYWcsCi0J CQkJCQkJCQkJICAgJnVwZGF0ZUN4dCk7CisJCQkJCQkJCQkJICAgTlVMTCwgcmVzdWx0UmVs SW5mby0+cmlfb2xkVHVwbGVTbG90LAorCQkJCQkJCQkJCSAgIG5ld3Nsb3QsIGNhblNldFRh ZywgJnVwZGF0ZUN4dCk7CiAKIAkJCQkJLyoKIAkJCQkJICogQXMgaW4gRXhlY1VwZGF0ZSgp LCBpZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0cyB0aGF0IGEKQEAgLTM0MzIsNiArMzQ5Miw3 IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJCQkJICAgdHVwbGVpZCwgTlVMTCwgbmV3c2xv dCk7CiAJCQkJCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQgKz0gMTsKIAkJCQl9CisKIAkJ CQlicmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpAQCAtNDUzOSw3ICs0NjAwLDcgQEAg RXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBGb3IgVVBEQVRFL0RF TEVURS9NRVJHRSwgZmV0Y2ggdGhlIHJvdyBpZGVudGl0eSBpbmZvIGZvciB0aGUgdHVwbGUK IAkJICogdG8gYmUgdXBkYXRlZC9kZWxldGVkL21lcmdlZC4gIEZvciBhIGhlYXAgcmVsYXRp b24sIHRoYXQncyBhIFRJRDsKIAkJICogb3RoZXJ3aXNlIHdlIG1heSBoYXZlIGEgd2hvbGVy b3cganVuayBhdHRyIHRoYXQgY2FycmllcyB0aGUgb2xkCi0JCSAqIHR1cGxlIGluIHRvdG8u ICBLZWVwIHRoaXMgaW4gc3RlcCB3aXRoIHRoZSBwYXJ0IG9mCisJCSAqIHR1cGxlIGluIHRv dGFsLiAgS2VlcCB0aGlzIGluIHN0ZXAgd2l0aCB0aGUgcGFydCBvZgogCQkgKiBFeGVjSW5p dE1vZGlmeVRhYmxlIHRoYXQgc2V0cyB1cCByaV9Sb3dJZEF0dE5vLgogCQkgKi8KIAkJaWYg KG9wZXJhdGlvbiA9PSBDTURfVVBEQVRFIHx8IG9wZXJhdGlvbiA9PSBDTURfREVMRVRFIHx8 CkBAIC00NzE5LDYgKzQ3ODAsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3Rh dGUpCiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRhdGUuICovCiAJCQkJc2xvdCA9IEV4ZWNV cGRhdGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9sZHR1cGxlLAogCQkJ CQkJCQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRhZyk7CisKIAkJCQlpZiAodHVw bG9jaykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNj LCB0dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2NrKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDMyNzI1YzQ4NjIzLi4w YjA0NDE1NDE5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jCkBAIC0yOTE3LDcgKzI5MTcsNiBAQCBhcHBseV9oYW5kbGVfdXBkYXRlX2ludGVybmFs KEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJVHVwbGVUYWJsZVNsb3QgKmxvY2Fsc2xv dCA9IE5VTEw7CiAJQ29uZmxpY3RUdXBsZUluZm8gY29uZmxpY3R0dXBsZSA9IHswfTsKIAli b29sCQlmb3VuZDsKLQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKIAogCUV2YWxQbGFuUXVhbElu aXQoJmVwcXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7CiAJRXhlY09wZW5J bmRpY2VzKHJlbGluZm8sIGZhbHNlKTsKQEAgLTI5NTYsMTUgKzI5NTUsMTMgQEAgYXBwbHlf aGFuZGxlX3VwZGF0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQl9 CiAKIAkJLyogUHJvY2VzcyBhbmQgc3RvcmUgcmVtb3RlIHR1cGxlIGluIHRoZSBzbG90ICov Ci0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNv bnRleHQoZXN0YXRlKSk7CiAJCXNsb3RfbW9kaWZ5X2RhdGEocmVtb3Rlc2xvdCwgbG9jYWxz bG90LCByZWxtYXBlbnRyeSwgbmV3dHVwKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN0eCk7CiAKIAkJRXZhbFBsYW5RdWFsU2V0U2xvdCgmZXBxc3RhdGUsIHJlbW90ZXNsb3Qp OwogCiAJCUluaXRDb25mbGljdEluZGV4ZXMocmVsaW5mbyk7CiAKLQkJLyogRG8gdGhlIGFj dHVhbCB1cGRhdGUuICovCisJCS8qIEZpcnN0IGNoZWNrIHByaXZpbGVnZXMgKi8KIAkJVGFy Z2V0UHJpdmlsZWdlc0NoZWNrKHJlbGluZm8tPnJpX1JlbGF0aW9uRGVzYywgQUNMX1VQREFU RSk7CiAJCUV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShyZWxpbmZvLCBlc3RhdGUsICZlcHFz dGF0ZSwgbG9jYWxzbG90LAogCQkJCQkJCQkgcmVtb3Rlc2xvdCk7CkBAIC0zNTIyLDEwICsz NTE5LDcgQEAgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRh ICplZGF0YSwKIAkJCQkgKiBBcHBseSB0aGUgdXBkYXRlIHRvIHRoZSBsb2NhbCB0dXBsZSwg cHV0dGluZyB0aGUgcmVzdWx0IGluCiAJCQkJICogcmVtb3Rlc2xvdF9wYXJ0LgogCQkJCSAq LwotCQkJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9y eUNvbnRleHQoZXN0YXRlKSk7Ci0JCQkJc2xvdF9tb2RpZnlfZGF0YShyZW1vdGVzbG90X3Bh cnQsIGxvY2Fsc2xvdCwgcGFydF9lbnRyeSwKLQkJCQkJCQkJIG5ld3R1cCk7Ci0JCQkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJCQkJc2xvdF9tb2RpZnlfZGF0YShyZW1v dGVzbG90X3BhcnQsIGxvY2Fsc2xvdCwgcGFydF9lbnRyeSwgbmV3dHVwKTsKIAogCQkJCUV2 YWxQbGFuUXVhbEluaXQoJmVwcXN0YXRlLCBlc3RhdGUsIE5VTEwsIE5JTCwgLTEsIE5JTCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDZiNjM0YzlmZmYxLi41 NDdjZjFkMDU0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC0yNDc3 LDYgKzI0NzcsNyBAQCBSZWxhdGlvbkRlc3Ryb3lSZWxhdGlvbihSZWxhdGlvbiByZWxhdGlv biwgYm9vbCByZW1lbWJlcl90dXBkZXNjKQogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0 dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwogCWJtc19m cmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7CisJYm1zX2ZyZWUocmVsYXRpb24t PnJkX2luZGV4ZWRhdHRyKTsKIAlpZiAocmVsYXRpb24tPnJkX3B1YmRlc2MpCiAJCXBmcmVl KHJlbGF0aW9uLT5yZF9wdWJkZXNjKTsKIAlpZiAocmVsYXRpb24tPnJkX29wdGlvbnMpCkBA IC01Mjc4LDYgKzUyNzksNyBAQCBSZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKFJlbGF0aW9u IHJlbGF0aW9uKQogICoJCQkJCQkJCQlpbmRleCAoZW1wdHkgaWYgRlVMTCkKICAqCUlOREVY X0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORwlDb2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRlcyBm cm9tIGJlaW5nIEhPVAogICoJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1bW5z IGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQ X0lOREVYRUQJCUNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRleGVzCiAgKgogICogQXR0cmli dXRlIG51bWJlcnMgYXJlIG9mZnNldCBieSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyIHNvIHRoYXQKICAqIHdlIGNhbiBpbmNsdWRlIHN5c3RlbSBhdHRyaWJ1dGVzIChl LmcuLCBPSUQpIGluIHRoZSBiaXRtYXAgcmVwcmVzZW50YXRpb24uCkBAIC01MzAxLDYgKzUz MDMsNyBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwg SW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAlCaXRtYXBzZXQgICpwa2luZGV4YXR0 cnM7CS8qIGNvbHVtbnMgaW4gdGhlIHByaW1hcnkgaW5kZXggKi8KIAlCaXRtYXBzZXQgICpp ZGluZGV4YXR0cnM7CS8qIGNvbHVtbnMgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkgKi8KIAlC aXRtYXBzZXQgICpob3RibG9ja2luZ2F0dHJzOwkvKiBjb2x1bW5zIHdpdGggSE9UIGJsb2Nr aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICppbmRleGVkYXR0cnM7CS8qIGNvbHVtbnMg cmVmZXJlbmNlZCBieSBpbmRleGVzICovCiAJQml0bWFwc2V0ICAqc3VtbWFyaXplZGF0dHJz OwkvKiBjb2x1bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLwogCUxpc3QJICAgKmlu ZGV4b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7CkBAIC01MzI0LDYgKzUz MjcsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwg SW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2luZCkKIAkJCQlyZXR1cm4gYm1zX2NvcHkocmVs YXRpb24tPnJkX2hvdGJsb2NraW5nYXR0cik7CiAJCQljYXNlIElOREVYX0FUVFJfQklUTUFQ X1NVTU1BUklaRUQ6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9zdW1tYXJp emVkYXR0cik7CisJCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQ6CisJCQkJcmV0 dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJCQlkZWZhdWx0Ogog CQkJCWVsb2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5kICV1IiwgYXR0cktpbmQpOwogCQl9 CkBAIC01MzY4LDYgKzUzNzMsNyBAQCByZXN0YXJ0OgogCWlkaW5kZXhhdHRycyA9IE5VTEw7 CiAJaG90YmxvY2tpbmdhdHRycyA9IE5VTEw7CiAJc3VtbWFyaXplZGF0dHJzID0gTlVMTDsK KwlpbmRleGVkYXR0cnMgPSBOVUxMOwogCWZvcmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsK IAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTUwMCwxMCArNTUwNiwx NCBAQCByZXN0YXJ0OgogCQlibXNfZnJlZShpZGluZGV4YXR0cnMpOwogCQlibXNfZnJlZSho b3RibG9ja2luZ2F0dHJzKTsKIAkJYm1zX2ZyZWUoc3VtbWFyaXplZGF0dHJzKTsKKwkJLyog aW5kZXhlZGF0dHJzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KIAogCQlnb3RvIHJlc3RhcnQ7 CiAJfQogCisJLyogU2V0IGluZGV4ZWQgYXR0cmlidXRlcyB0byB0cmFjayBhbGwgcmVmZXJl bmNlZCBhdHRyaWJ1dGVzICovCisJaW5kZXhlZGF0dHJzID0gYm1zX3VuaW9uKGhvdGJsb2Nr aW5nYXR0cnMsIHN1bW1hcml6ZWRhdHRycyk7CisKIAkvKiBEb24ndCBsZWFrIHRoZSBvbGQg dmFsdWVzIG9mIHRoZXNlIGJpdG1hcHMsIGlmIGFueSAqLwogCXJlbGF0aW9uLT5yZF9hdHRy c3ZhbGlkID0gZmFsc2U7CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2tleWF0dHIpOwpAQCAt NTUxNiw2ICs1NTI2LDggQEAgcmVzdGFydDoKIAlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdh dHRyID0gTlVMTDsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOwog CXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IE5VTEw7CisJYm1zX2ZyZWUocmVsYXRp b24tPnJkX2luZGV4ZWRhdHRyKTsKKwlyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBOVUxM OwogCiAJLyoKIAkgKiBOb3cgc2F2ZSBjb3BpZXMgb2YgdGhlIGJpdG1hcHMgaW4gdGhlIHJl bGNhY2hlIGVudHJ5LiAgV2UgaW50ZW50aW9uYWxseQpAQCAtNTUzMCw2ICs1NTQyLDcgQEAg cmVzdGFydDoKIAlyZWxhdGlvbi0+cmRfaWRhdHRyID0gYm1zX2NvcHkoaWRpbmRleGF0dHJz KTsKIAlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyID0gYm1zX2NvcHkoaG90YmxvY2tp bmdhdHRycyk7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gYm1zX2NvcHkoc3Vt bWFyaXplZGF0dHJzKTsKKwlyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBibXNfY29weShp bmRleGVkYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9hdHRyc3ZhbGlkID0gdHJ1ZTsKIAlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIApAQCAtNTU0Niw2ICs1NTU5LDggQEAgcmVz dGFydDoKIAkJCXJldHVybiBob3RibG9ja2luZ2F0dHJzOwogCQljYXNlIElOREVYX0FUVFJf QklUTUFQX1NVTU1BUklaRUQ6CiAJCQlyZXR1cm4gc3VtbWFyaXplZGF0dHJzOworCQljYXNl IElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQ6CisJCQlyZXR1cm4gaW5kZXhlZGF0dHJzOwog CQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRy S2luZCk7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzYzA5NjFh YjM2Yi4uYTU2ZjNkMWYzNzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTM2OCw2ICszNjgs NyBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBj b25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsCiAJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXAs CiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2Fp dCwKIAkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2tt b2RlLAorCQkJCQkJCSBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywgYm9vbCBtaXhfYXR0 cnNfdmFsaWQsCiAJCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsK IGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9uIHJlbGF0aW9uLCBI ZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2NrVHVwbGVNb2Rl IG1vZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK aW5kZXggMjUxMzc5MDE2YjAuLjNiMDgwYWEzNzExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK QEAgLTU0OSw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJ CQkJCQkgYm9vbCB3YWl0LAogCQkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsCiAJCQkJ CQkJCSBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJCQkJIGNvbnN0IEJpdG1hcHNl dCAqdXBkYXRlZF9jb2xzLAogCQkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2lu ZGV4ZXMpOwogCiAJLyogc2VlIHRhYmxlX3R1cGxlX2xvY2soKSBmb3IgcmVmZXJlbmNlIGFi b3V0IHBhcmFtZXRlcnMgKi8KQEAgLTE1MjQsMTIgKzE1MjUsMTIgQEAgc3RhdGljIGlubGlu ZSBUTV9SZXN1bHQKIHRhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2lu dGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCSAgIENvbW1hbmRJZCBjaWQs IFNuYXBzaG90IHNuYXBzaG90LCBTbmFwc2hvdCBjcm9zc2NoZWNrLAogCQkJCSAgIGJvb2wg d2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAot CQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCSAgIGNvbnN0 IEJpdG1hcHNldCAqbWl4X2NvbHMsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVz KQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShyZWwsIG90aWQs IHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCi0JCQkJCQkJ CQkJIHdhaXQsIHRtZmQsCi0JCQkJCQkJCQkJIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7 CisJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJCQkJCQkJCSBtaXhfY29s cywgdXBkYXRlX2luZGV4ZXMpOwogfQogCiAvKgpAQCAtMjAxMCw2ICsyMDExLDcgQEAgZXh0 ZXJuIHZvaWQgc2ltcGxlX3RhYmxlX3R1cGxlX2RlbGV0ZShSZWxhdGlvbiByZWwsIEl0ZW1Q b2ludGVyIHRpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QpOwogZXh0ZXJuIHZv aWQgc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVy IG90aWQsCiAJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBTbmFwc2hvdCBzbmFw c2hvdCwKKwkJCQkJCQkJCSAgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJCQkJ CQkgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKIAogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAppbmRleCBkNDZiYTU5ODk1ZC4uN2IwMDE5ZmUxNWIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNjA2LDYgKzYwNiwxMCBAQCBleHRlcm4gVHVwbGVE ZXNjIEV4ZWNDbGVhblR5cGVGcm9tVEwoTGlzdCAqdGFyZ2V0TGlzdCk7CiBleHRlcm4gVHVw bGVEZXNjIEV4ZWNUeXBlRnJvbUV4cHJMaXN0KExpc3QgKmV4cHJMaXN0KTsKIGV4dGVybiB2 b2lkIEV4ZWNUeXBlU2V0Q29sTmFtZXMoVHVwbGVEZXNjIHR5cGVJbmZvLCBMaXN0ICpuYW1l c0xpc3QpOwogZXh0ZXJuIHZvaWQgVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KFBsYW5TdGF0ZSAq bm9kZSwgQml0bWFwc2V0ICpuZXdjaGcpOworZXh0ZXJuIEJpdG1hcHNldCAqRXhlY0NvbXBh cmVTbG90QXR0cnMoVHVwbGVEZXNjIHR1cGRlc2MsCisJCQkJCQkJCQkgICBjb25zdCBCaXRt YXBzZXQgKmF0dHJzLAorCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCisJ CQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cyk7CiAKIHR5cGVkZWYgc3RydWN0 IFR1cE91dHB1dFN0YXRlCiB7CkBAIC04MDMsNSArODA3LDkgQEAgZXh0ZXJuIFJlc3VsdFJl bEluZm8gKkV4ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJsZVN0YXRlICpub2Rl LAogCQkJCQkJCQkJCQkgICBPaWQgcmVzdWx0b2lkLAogCQkJCQkJCQkJCQkgICBib29sIG1p c3Npbmdfb2ssCiAJCQkJCQkJCQkJCSAgIGJvb2wgdXBkYXRlX2NhY2hlKTsKK2V4dGVybiBC aXRtYXBzZXQgKkV4ZWNDaGVja0luZGV4ZWRBdHRyc0ZvckNoYW5nZXMoUmVzdWx0UmVsSW5m byAqcmVsaW5mbywKKwkJCQkJCQkJCQkJCSAgRVN0YXRlICplc3RhdGUsCisJCQkJCQkJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxl U2xvdCAqbmV3X3R0cyk7CiAKICNlbmRpZgkJCQkJCQkvKiBFWEVDVVRPUl9IICAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9y ZWwuaAppbmRleCAyMzY4MzBmNmI5My4uZGY1NDI2ZmQ3ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0x NjQsNiArMTY0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25EYXRhCiAJQml0bWFwc2V0 ICAqcmRfaWRhdHRyOwkJLyogaW5jbHVkZWQgaW4gcmVwbGljYSBpZGVudGl0eSBpbmRleCAq LwogCUJpdG1hcHNldCAgKnJkX2hvdGJsb2NraW5nYXR0cjsgLyogY29scyBibG9ja2luZyBI T1QgdXBkYXRlICovCiAJQml0bWFwc2V0ICAqcmRfc3VtbWFyaXplZGF0dHI7CS8qIGNvbHMg aW5kZXhlZCBieSBzdW1tYXJpemluZyBpbmRleGVzICovCisJQml0bWFwc2V0ICAqcmRfaW5k ZXhlZGF0dHI7IC8qIGFsbCBjb2xzIHJlZmVyZW5jZWQgYnkgaW5kZXhlcyAqLwogCiAJUHVi bGljYXRpb25EZXNjICpyZF9wdWJkZXNjOwkvKiBwdWJsaWNhdGlvbiBkZXNjcmlwdG9yLCBv ciBOVUxMICovCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCmluZGV4IDI3MDAyMjQ5MzlhLi41ODM0 YWI3YjkwMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCkBAIC03MSw2ICs3MSw3IEBAIHR5cGVk ZWYgZW51bSBJbmRleEF0dHJCaXRtYXBLaW5kCiAJSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJ VFlfS0VZLAogCUlOREVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORywKIAlJTkRFWF9BVFRS X0JJVE1BUF9TVU1NQVJJWkVELAorCUlOREVYX0FUVFJfQklUTUFQX0lOREVYRUQsCiB9IElu ZGV4QXR0ckJpdG1hcEtpbmQ7CiAKIGV4dGVybiBCaXRtYXBzZXQgKlJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLAotLSAKMi41MS4yCgo= --e5f36c1c483d430e859b0a8b4d1b3e57 Content-Disposition: attachment; filename*0="v20260219-0002-Refactor-heap_update-and-move-attribute-de.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v20260219-0002-Refactor-heap=5Fupdate-and-move-attribute-de.pa?= =?UTF-8?Q?tch?=" Content-Transfer-Encoding: base64 RnJvbSA5YWJhNDQ2NjAwOGE3OTU1NmUzMTU3MGIzYTZiZDk0NDUxMDA3ZGFhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog VGh1LCAxOSBGZWIgMjAyNiAxNDowODoxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjYw MjE5IDIvMl0gUmVmYWN0b3IgaGVhcF91cGRhdGUoKSBhbmQgbW92ZSBhdHRyaWJ1dGUKIGRl dGVybWluYXRpb24gaW50byBjYWxsZXJzCgpUaGlzIHJlZmFjdG9yaW5nIHJlbG9jYXRlcyBj b2x1bW4gbW9kaWZpY2F0aW9uIGRldGVybWluYXRpb24gZnJvbQpoZWFwX3VwZGF0ZSgpIHRv IGl0cyBjYWxsZXJzIChzaW1wbGVfaGVhcF91cGRhdGUgYW5kCmhlYXBhbV90dXBsZV91cGRh dGUpLCBtb3ZpbmcgdGhlIGxvZ2ljIHVwc3RyZWFtIHRvIGV4ZWN1dG9yL2hhbmRsZXIKbGV2 ZWwuCgotIFJlbW92ZSBtb2RpZmllZF9hdHRycyBhbmQgbW9kaWZpZWRfYXR0cnNfdmFsaWQg cGFyYW1ldGVycyBmcm9tCiAgaGVhcF91cGRhdGUoKQotIEV4dHJhY3QgYnVmZmVyIG1hbmFn ZW1lbnQgKHBpbiwgbG9jaywgcGFnZSBmZXRjaCkgaW50bwogIHNpbXBsZV9oZWFwX3VwZGF0 ZSgpIGFuZCBoZWFwYW1fdHVwbGVfdXBkYXRlKCkgYmVmb3JlIGNhbGxpbmcKICBoZWFwX3Vw ZGF0ZSgpCi0gQ3JlYXRlIGhlbHBlciBmdW5jdGlvbnM6IEhlYXBVcGRhdGVIb3RBbGxvd2Fi bGUoKSwKICBIZWFwVXBkYXRlUmVxdWlyZXNSZXBsaWNhSWQoKSwgSGVhcFVwZGF0ZURldGVy bWluZUxvY2ttb2RlKCkKLSBQYXNzIHByZS1jYWxjdWxhdGVkIGF0dHJpYnV0ZXMgKGhvdF9h bGxvd2VkLCByZXBfaWRfa2V5X3JlcXVpcmVkLCBhbmQKICBsb2NrbW9kZSkgdG8gaGVhcF91 cGRhdGUoKSBpbnN0ZWFkIG9mIGRlcml2aW5nIHRoZW0gd2l0aGluIGZ1bmN0aW9uCi0gQWRk IE9SREVSIEJZIGNsYXVzZXMgdG8gZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGFuZCB1cGRhdGFi bGVfdmlld3Muc3FsCiAgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgcmVzdWx0IG9yZGVyaW5n IChYWFg6IHVuZGVyIHJldmlldy4uLikKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYyAgICAgICAgICAgICAgfCA3NzUgKysrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAxMDUgKystCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgICAgICAgfCAgNTUgKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jICAgICAgICB8ICAgNyArLQog c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgIDM1ICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgMjUg Ky0KIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAg MSAtCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAg IDEgLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0ICAgIHwg ICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQg fCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbCAg ICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbCAg ICAgIHwgICAyICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA1MzkgaW5zZXJ0aW9ucygrKSwgNDc5 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggYWI4YjZk ZGI4ZGUuLjkzZmQ3MTRjZTU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAt MjksNiArMjksOCBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCisjaW5jbHVk ZSAiYWNjZXNzL3N5c2F0dHIuaCIKKyNpbmNsdWRlICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCkBA IC0zNyw2ICszOSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgogI2luY2x1 ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeW5jc2Nhbi5oIgor I2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3ZhbGlkLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2luc2VydC5oIgpAQCAtNTEsNiArNTQsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRp bHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3NwY2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjIs MTYgKzY2LDggQEAgc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9u IHJlbG4sIEJ1ZmZlciBvbGRidWYsCiAJCQkJCQkJCSAgSGVhcFR1cGxlIG5ld3R1cCwgSGVh cFR1cGxlIG9sZF9rZXlfdHVwbGUsCiAJCQkJCQkJCSAgYm9vbCBhbGxfdmlzaWJsZV9jbGVh cmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkKTsKICNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCi1zdGF0aWMgdm9pZCBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJs ZV9yZWwoUmVsYXRpb24gcmVsYXRpb24sCi0JCQkJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50 ZXJEYXRhICpvdGlkLAotCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOwogc3RhdGlj IHZvaWQgY2hlY2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVwbGUgb2xkdHVwKTsKICNlbmRp Zgotc3RhdGljIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9u IHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywK LQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkJCQkJICAg SGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkJCQkgICBib29s ICpoYXNfZXh0ZXJuYWwpOwogc3RhdGljIGJvb2wgaGVhcF9hY3F1aXJlX3R1cGxvY2soUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCQkg TG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJ CQkJIGJvb2wgKmhhdmVfdHVwbGVfbG9jayk7CkBAIC0zMzAwLDcgKzMyOTYsMTAgQEAgc2lt cGxlX2hlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKnRpZCkKICAqCWhlYXBfdXBkYXRlIC0gcmVwbGFjZSBhIHR1cGxlCiAgKgogICogU2Vl IHRhYmxlX3R1cGxlX3VwZGF0ZSgpIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgcGFyYW1l dGVycywgZXhjZXB0IHRoYXQKLSAqIHRoaXMgcm91dGluZSBkaXJlY3RseSB0YWtlcyBhIHR1 cGxlIHJhdGhlciB0aGFuIGEgc2xvdC4KKyAqIHRoaXMgcm91dGluZSBkaXJlY3RseSB0YWtl cyBhIGhlYXAgdHVwbGUgcmF0aGVyIHRoYW4gYSBzbG90LgorICoKKyAqIEl0J3MgcmVxdWly ZWQgdGhhdCB0aGUgY2FsbGVyIGhhcyBhY3F1aXJlZCB0aGUgcGluIGFuZCBsb2NrIG9uIHRo ZSBidWZmZXIuCisgKiBUaGF0IGxvY2sgYW5kIHBpbiB3aWxsIGJlIG1hbmFnZWQgaGVyZSwg bm90IGluIHRoZSBjYWxsZXIuCiAgKgogICogSW4gdGhlIGZhaWx1cmUgY2FzZXMsIHRoZSBy b3V0aW5lIGZpbGxzICp0bWZkIHdpdGggdGhlIHR1cGxlJ3MgdF9jdGlkLAogICogdF94bWF4 IChyZXNvbHZpbmcgYSBwb3NzaWJsZSBNdWx0aVhhY3QsIGlmIG5lY2Vzc2FyeSksIGFuZCB0 X2NtYXggKHRoZSBsYXN0CkBAIC0zMzA4LDMwICszMzA3LDE5IEBAIHNpbXBsZV9oZWFwX2Rl bGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiAg KiBnZW5lcmF0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbikuCiAgKi8KIFRNX1Jlc3VsdAot aGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq b3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKK2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGVEYXRhICpvbGR0dXAsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQlDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCi0JCQlUTV9GYWlsdXJl RGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQljb25zdCBCaXRtYXBz ZXQgKm1vZGlmaWVkX2F0dHJzLCBib29sIG1vZGlmaWVkX2F0dHJzX3ZhbGlkLAotCQkJVFVf VXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQlUTV9GYWlsdXJlRGF0YSAqdG1m ZCwgY29uc3QgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCisJCQlCdWZmZXIgYnVmZmVyLCBQ YWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsCisJCQlib29sIGhvdF9h bGxvd2VkLCBCdWZmZXIgdm1idWZmZXIsIGJvb2wgcmVwX2lkX2tleV9yZXF1aXJlZCkKIHsK IAlUTV9SZXN1bHQJcmVzdWx0OwogCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRy YW5zYWN0aW9uSWQoKTsKLQlCaXRtYXBzZXQgICpob3RfYXR0cnM7Ci0JQml0bWFwc2V0ICAq c3VtX2F0dHJzOwotCUJpdG1hcHNldCAgKmtleV9hdHRyczsKLQlCaXRtYXBzZXQgICppZF9h dHRyczsKLQlCaXRtYXBzZXQgICppbnRlcmVzdGluZ19hdHRyczsKLQlJdGVtSWQJCWxwOwot CUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQloZWFwdHVwOwogCUhlYXBUdXBs ZQlvbGRfa2V5X3R1cGxlID0gTlVMTDsKIAlib29sCQlvbGRfa2V5X2NvcGllZCA9IGZhbHNl OwotCVBhZ2UJCXBhZ2U7Ci0JQmxvY2tOdW1iZXIgYmxvY2s7CiAJTXVsdGlYYWN0U3RhdHVz IG14YWN0X3N0YXR1czsKLQlCdWZmZXIJCWJ1ZmZlciwKLQkJCQluZXdidWYsCi0JCQkJdm1i dWZmZXIgPSBJbnZhbGlkQnVmZmVyLAorCUJ1ZmZlcgkJbmV3YnVmLAogCQkJCXZtYnVmZmVy X25ldyA9IEludmFsaWRCdWZmZXI7CiAJYm9vbAkJbmVlZF90b2FzdDsKIAlTaXplCQluZXd0 dXBzaXplLApAQCAtMzMzOSwxMyArMzMyNywxMSBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVw LAogCWJvb2wJCWhhdmVfdHVwbGVfbG9jayA9IGZhbHNlOwogCWJvb2wJCWlzY29tYm87CiAJ Ym9vbAkJdXNlX2hvdF91cGRhdGUgPSBmYWxzZTsKLQlib29sCQlzdW1tYXJpemVkX3VwZGF0 ZSA9IGZhbHNlOwogCWJvb2wJCWtleV9pbnRhY3Q7CiAJYm9vbAkJYWxsX3Zpc2libGVfY2xl YXJlZCA9IGZhbHNlOwogCWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWRfbmV3ID0gZmFsc2U7 CiAJYm9vbAkJY2hlY2tlZF9sb2NrZXJzOwogCWJvb2wJCWxvY2tlcl9yZW1haW5zOwotCWJv b2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKIAlUcmFuc2FjdGlvbklkIHhtYXhf bmV3X3R1cGxlLAogCQkJCXhtYXhfb2xkX3R1cGxlOwogCXVpbnQxNgkJaW5mb21hc2tfb2xk X3R1cGxlLApAQCAtMzM1MywyMDQgKzMzMzksMTMgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1 cCwKIAkJCQlpbmZvbWFza19uZXdfdHVwbGUsCiAJCQkJaW5mb21hc2syX25ld190dXBsZTsK IAotCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOwotCi0JLyogQ2hlYXAsIHNp bXBsaXN0aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlw ZS4gKi8KLQlBc3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEp IDw9Ci0JCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7Ci0K KwlBc3NlcnQoQnVmZmVySXNMb2NrZWRCeU1lKGJ1ZmZlcikpOworCUFzc2VydChJdGVtSWRJ c05vcm1hbChscCkpOwogCUFzc2VydEhhc1NuYXBzaG90Rm9yVG9hc3QocmVsYXRpb24pOwog Ci0JLyoKLQkgKiBGb3JiaWQgdGhpcyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24sIGxl c3QgaXQgYWxsb2NhdGUgYSBjb21ibyBDSUQuCi0JICogT3RoZXIgd29ya2VycyBtaWdodCBu ZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHdlCi0JICog aGF2ZSBubyBwcm92aXNpb24gZm9yIGJyb2FkY2FzdGluZyBpdCB0byB0aGVtLgotCSAqLwot CWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFKSwKLQkJCQkgZXJybXNnKCJj YW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJhbGxlbCBvcGVyYXRpb24iKSkpOwot Ci0jaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotCWNoZWNrX2xvY2tfaWZfaW5wbGFjZV91 cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgbmV3dHVwKTsKLSNlbmRpZgotCi0JLyoK LQkgKiBGZXRjaCB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGNoZWNrZWQgZm9yIHZh cmlvdXMgb3BlcmF0aW9ucy4KLQkgKgotCSAqIEZvciBIT1QgY29uc2lkZXJhdGlvbnMsIHRo aXMgaXMgd2FzdGVkIGVmZm9ydCBpZiB3ZSBmYWlsIHRvIHVwZGF0ZSBvcgotCSAqIGhhdmUg dG8gcHV0IHRoZSBuZXcgdHVwbGUgb24gYSBkaWZmZXJlbnQgcGFnZS4gIEJ1dCB3ZSBtdXN0 IGNvbXB1dGUgdGhlCi0JICogbGlzdCBiZWZvcmUgb2J0YWluaW5nIGJ1ZmZlciBsb2NrIC0t LSBpbiB0aGUgd29yc3QgY2FzZSwgaWYgd2UgYXJlCi0JICogZG9pbmcgYW4gdXBkYXRlIG9u IG9uZSBvZiB0aGUgcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzLCB3ZSBjb3VsZAotCSAqIGRl YWRsb2NrIGlmIHdlIHRyeSB0byBmZXRjaCB0aGUgbGlzdCBsYXRlci4gIEluIGFueSBjYXNl LCB0aGUgcmVsY2FjaGUKLQkgKiBjYWNoZXMgdGhlIGRhdGEgc28gdGhpcyBpcyB1c3VhbGx5 IHByZXR0eSBjaGVhcC4KLQkgKgotCSAqIFdlIGFsc28gbmVlZCBjb2x1bW5zIHVzZWQgYnkg dGhlIHJlcGxpY2EgaWRlbnRpdHkgYW5kIGNvbHVtbnMgdGhhdCBhcmUKLQkgKiBjb25zaWRl cmVkIHRoZSAia2V5IiBvZiByb3dzIGluIHRoZSB0YWJsZS4KLQkgKgotCSAqIE5vdGUgdGhh dCB3ZSBnZXQgY29waWVzIG9mIGVhY2ggYml0bWFwLCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSBh Ym91dAotCSAqIHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZyBtaWR3YXkgdGhyb3VnaC4KLQkg Ki8KLQlob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwK LQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkcpOwotCXN1bV9h dHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAotCQkJCQkJCQkJ CSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQpOwotCWtleV9hdHRycyA9IFJlbGF0 aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9LRVkp OwotCWlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCi0J CQkJCQkJCQkJICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwotCWludGVyZXN0 aW5nX2F0dHJzID0gTlVMTDsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVy cyhpbnRlcmVzdGluZ19hdHRycywgaG90X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9 IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywgc3VtX2F0dHJzKTsKLQlpbnRl cmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVzdGluZ19hdHRycywga2V5 X2F0dHJzKTsKLQlpbnRlcmVzdGluZ19hdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbnRlcmVz dGluZ19hdHRycywgaWRfYXR0cnMpOwotCi0JYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKG90aWQpOwotCUlOSkVDVElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBp biIsIE5VTEwpOwotCWJ1ZmZlciA9IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKLQlw YWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwotCi0JLyoKLQkgKiBCZWZvcmUgbG9ja2lu ZyB0aGUgYnVmZmVyLCBwaW4gdGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFy cyB0bwotCSAqIGJlIG5lY2Vzc2FyeS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2Nr IHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0IGJlCi0JICogaW4gdGhlIG1pZGRsZSBvZiBjaGFu Z2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRvIHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQotCSAq IHRoZSBsb2NrLgotCSAqLwotCWlmIChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQotCQl2aXNp YmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxvY2ssICZ2bWJ1ZmZlcik7Ci0KLQlMb2NrQnVm ZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKLQotCWxwID0gUGFnZUdldEl0 ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihvdGlkKSk7Ci0KLQkvKgot CSAqIFVzdWFsbHksIGEgYnVmZmVyIHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tzIHBydW5p bmcgb2Ygb3RpZCwgZW5zdXJpbmcKLQkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBXaGVu IHRoZSBvdGlkIG9yaWdpbiBpcyBhIHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQotCSAqIG5laXRo ZXIgYSBwaW4gbm9yIGEgc25hcHNob3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8g c3RhdGVzLCBlYWNoCi0JICogb2Ygd2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmlu Zy4KLQkgKgotCSAqIEZhaWxpbmcgd2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNj dXJhdGUuICBIb3dldmVyLCB1bmxpa2Ugb3RoZXIKLQkgKiBUTV9VcGRhdGVkIHNjZW5hcmlv cywgd2UgZG9uJ3Qga25vdyB0aGUgc3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAot CSAqIExQX0RFQUQgY2FzZXMuICBXaGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9V cGRhdGVkIGFuZCBUTV9EZWxldGVkCi0JICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVu dHMgVVBEQVRFIGFuZCBNRVJHRSwgdGhvc2UgU1FMIHN0YXRlbWVudHMKLQkgKiBob2xkIGEg c25hcHNob3QgdGhhdCBlbnN1cmVzIExQX05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJl dHdlZW4KLQkgKiBUTV9VcGRhdGVkIGFuZCBUTV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUg d29yZGluZyBvZiBlcnJvciBtZXNzYWdlcy4KLQkgKiBTZXR0bGUgb24gVE1fRGVsZXRlZCwg Zm9yIHR3byByZWFzb25zLiAgRmlyc3QsIGl0IGF2b2lkcyBjb21wbGljYXRpbmcKLQkgKiB0 aGUgc3BlY2lmaWNhdGlvbiBvZiB3aGVuIHRtZmQtPmN0aWQgaXMgdmFsaWQuICBTZWNvbmQs IGl0IGNyZWF0ZXMKLQkgKiBlcnJvciBsb2cgZXZpZGVuY2UgdGhhdCB3ZSB0b29rIHRoaXMg YnJhbmNoLgotCSAqCi0JICogU2luY2UgaXQncyBwb3NzaWJsZSB0byBzZWUgTFBfVU5VU0VE IGF0IG90aWQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZWUKLQkgKiBMUF9OT1JNQUwgZm9y IGEgdHVwbGUgdGhhdCByZXBsYWNlZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVwbGUgZm9y IGFuCi0JICogdW5yZWxhdGVkIHJvdywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUga2V5 IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSIuCi0JICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUs IG5ld2VyIHZlcnNpb24gb2YgdGhlIG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKLQkgKiBj aGFuZ2VzIG9yaWdpbmF0aW5nIGluIHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0 ZXIgdGhlIHZlcnNpb24KLQkgKiB0aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2Vl IHN5c2NhY2hlLXVwZGF0ZS1wcnVuZWQuc3BlYy4KLQkgKi8KLQlpZiAoIUl0ZW1JZElzTm9y bWFsKGxwKSkKLQl7Ci0JCUFzc2VydChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRp b25HZXRSZWxpZChyZWxhdGlvbikpKTsKLQotCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZl cik7Ci0JCUFzc2VydCghaGF2ZV90dXBsZV9sb2NrKTsKLQkJaWYgKHZtYnVmZmVyICE9IElu dmFsaWRCdWZmZXIpCi0JCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJdG1mZC0+Y3Rp ZCA9ICpvdGlkOwotCQl0bWZkLT54bWF4ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCXRt ZmQtPmNtYXggPSBJbnZhbGlkQ29tbWFuZElkOwotCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9O b25lOwotCi0JCWJtc19mcmVlKGhvdF9hdHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7 Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7Ci0JCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJLyog bW9kaWZpZWRfYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwotCQlibXNfZnJlZShpbnRl cmVzdGluZ19hdHRycyk7Ci0JCXJldHVybiBUTV9EZWxldGVkOwotCX0KLQotCS8qCi0JICog RmlsbCBpbiBlbm91Z2ggZGF0YSBpbiBvbGR0dXAgZm9yIEhlYXBEZXRlcm1pbmVDb2x1bW5z SW5mbyB0byB3b3JrCi0JICogcHJvcGVybHkuCi0JICovCi0Jb2xkdHVwLnRfdGFibGVPaWQg PSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKLQlvbGR0dXAudF9kYXRhID0gKEhlYXBU dXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCW9sZHR1cC50X2xlbiA9IEl0 ZW1JZEdldExlbmd0aChscCk7Ci0Jb2xkdHVwLnRfc2VsZiA9ICpvdGlkOwotCi0JLyogdGhl IG5ldyB0dXBsZSBpcyByZWFkeSwgZXhjZXB0IGZvciB0aGlzOiAqLworCS8qIFRoZSBuZXcg dHVwbGUgaXMgcmVhZHksIGV4Y2VwdCBmb3IgdGhpcyAqLwogCW5ld3R1cC0+dF90YWJsZU9p ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUg Y29sdW1ucyBtb2RpZmllZCBieSB0aGUgdXBkYXRlLiAgQWRkaXRpb25hbGx5LCBpZGVudGlm eQotCSAqIHdoZXRoZXIgYW55IG9mIHRoZSB1bm1vZGlmaWVkIHJlcGxpY2EgaWRlbnRpdHkg a2V5IGF0dHJpYnV0ZXMgaW4gdGhlCi0JICogb2xkIHR1cGxlIGlzIGV4dGVybmFsbHkgc3Rv cmVkIG9yIG5vdC4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBmb3IKLQkgKiBzdWNoIGF0 dHJpYnV0ZXMgdGhlIGZsYXR0ZW5lZCB2YWx1ZSB3b24ndCBiZSBXQUwgbG9nZ2VkIGFzIHBh cnQgb2YgdGhlCi0JICogbmV3IHR1cGxlIHNvIHdlIG11c3QgaW5jbHVkZSBpdCBhcyBwYXJ0 IG9mIHRoZSBvbGRfa2V5X3R1cGxlLiAgU2VlCi0JICogRXh0cmFjdFJlcGxpY2FJZGVudGl0 eS4KLQkgKi8KLQlpZiAoIW1vZGlmaWVkX2F0dHJzX3ZhbGlkKQotCXsKLQkJYm9vbAkJaWRf aGFzX2V4dGVybmFsID0gZmFsc2U7Ci0KLQkJbW9kaWZpZWRfYXR0cnMgPSBIZWFwRGV0ZXJt aW5lQ29sdW1uc0luZm8ocmVsYXRpb24sIGludGVyZXN0aW5nX2F0dHJzLAotCQkJCQkJCQkJ CQkJICBpZF9hdHRycywgJm9sZHR1cCwKLQkJCQkJCQkJCQkJCSAgbmV3dHVwLCAmaWRfaGFz X2V4dGVybmFsKTsKLQkJcmVwX2lkX2tleV9yZXF1aXJlZCA9IGlkX2hhc19leHRlcm5hbCB8 fAotCQkJYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIGlkX2F0dHJzKTsKLQl9Ci0JZWxz ZQotCXsKLQkJLyoKLQkJICogRXh0cmFjdFJlcGxpY2F0SWRlbnRpdHkoKSBuZWVkcyB0byBr bm93IGlmIGEgbW9kaWZpZWQgYXR0cmJ1dGUgaXMKLQkJICogdXNlZCBhcyBhIHJlcGxpY2Eg aW5kZW50aXR5IG9yIGlmIGFueSBvZiB0aGUgdW5tb2RpZmllZCBpbmRleGVkCi0JCSAqIGF0 dHJpYnV0ZXMgaW4gdGhlIG9sZCB0dXBsZSBhcmUgc3RvcmVkIGV4dGVybmFsbHkgYW5kIHVz ZWQgYXMgYQotCQkgKiByZXBsaWNhIGlkZW50aXR5LgotCQkgKi8KLQkJcmVwX2lkX2tleV9y ZXF1aXJlZCA9IGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBpZF9hdHRycyk7Ci0JCWlm ICghcmVwX2lkX2tleV9yZXF1aXJlZCkKLQkJewotCQkJQml0bWFwc2V0ICAqYXR0cnM7Ci0J CQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOwotCQkJ aW50CQkJYXR0aWR4ID0gLTE7Ci0KLQkJCS8qIENoZWNrIGFsbCB1bm1vZGlmaWVkIGluZGV4 ZWQgcmVwbGljYSBpZGVudGl0eSBrZXkgYXR0cmlidXRlcyAqLwotCQkJYXR0cnMgPSBibXNf ZGlmZmVyZW5jZShpbnRlcmVzdGluZ19hdHRycywgbW9kaWZpZWRfYXR0cnMpOwotCQkJYXR0 cnMgPSBibXNfaW50X21lbWJlcnMoYXR0cnMsIGlkX2F0dHJzKTsKLQotCQkJd2hpbGUgKChh dHRpZHggPSBibXNfbmV4dF9tZW1iZXIoYXR0cnMsIGF0dGlkeCkpID49IDApCi0JCQl7Ci0J CQkJLyoKLQkJCQkgKiBhdHRpZHggaXMgemVyby1iYXNlZCwgYXR0cm51bSBpcyB0aGUgbm9y bWFsIGF0dHJpYnV0ZQotCQkJCSAqIG51bWJlcgotCQkJCSAqLwotCQkJCUF0dHJOdW1iZXIJ YXR0cm51bSA9IGF0dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7 Ci0JCQkJRGF0dW0JCXZhbHVlOwotCQkJCWJvb2wJCWlzbnVsbDsKLQotCQkJCS8qCi0JCQkJ ICogU3lzdGVtIGF0dHJpYnV0ZXMgYXJlIG5vdCBhZGRlZCBpbnRvIGludGVyZXN0aW5nX2F0 dHJzIGluCi0JCQkJICogcmVsY2FjaGUuCi0JCQkJICovCi0JCQkJQXNzZXJ0KGF0dHJudW0g PiAwKTsKLQotCQkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKCZvbGR0dXAsIGF0dHJudW0sIHR1 cGRlc2MsICZpc251bGwpOwotCi0JCQkJLyogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVz IHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4dGVybmFsbHkgKi8KLQkJCQlpZiAoaXNudWxsIHx8 Ci0JCQkJCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIGF0dHJudW0gLSAxKS0+YXR0 bGVuICE9IC0xKQotCQkJCQljb250aW51ZTsKLQotCQkJCS8qIENoZWNrIGlmIHRoZSBvbGQg dHVwbGUncyBhdHRyaWJ1dGUgaXMgc3RvcmVkIGV4dGVybmFsbHkgKi8KLQkJCQlpZiAoVkFS QVRUX0lTX0VYVEVSTkFMKChzdHJ1Y3QgdmFybGVuYSAqKSBEYXR1bUdldFBvaW50ZXIodmFs dWUpKSkKLQkJCQl7Ci0JCQkJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSB0cnVlOwotCQkJCQli cmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWJtc19mcmVlKGF0dHJzKTsKLQkJfQotCX0KLQog CS8qCiAJICogSWYgd2UncmUgbm90IHVwZGF0aW5nIGFueSAia2V5IiBjb2x1bW4sIHdlIGNh biBncmFiIGEgd2Vha2VyIGxvY2sgdHlwZS4KIAkgKiBUaGlzIGFsbG93cyBmb3IgbW9yZSBj b25jdXJyZW5jeSB3aGVuIHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5CkBAIC0zNTYy LDkgKzMzNTcsOCBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVwZGF0ZXMg dGhhdCBkb24ndCBtYW5pcHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAogCSAq IHNlcmVuZGlwaXRvdXNseSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkgKi8K LQlpZiAoIWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlmICgq bG9ja21vZGUgPT0gTG9ja1R1cGxlTm9LZXlFeGNsdXNpdmUpCiAJewotCQkqbG9ja21vZGUg PSBMb2NrVHVwbGVOb0tleUV4Y2x1c2l2ZTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0 U3RhdHVzTm9LZXlVcGRhdGU7CiAJCWtleV9pbnRhY3QgPSB0cnVlOwogCkBAIC0zNTgxLDIy ICszMzc1LDE1IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVt UG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJfQogCWVsc2UKIAl7Ci0J CSpsb2NrbW9kZSA9IExvY2tUdXBsZUV4Y2x1c2l2ZTsKKwkJQXNzZXJ0KCpsb2NrbW9kZSA9 PSBMb2NrVHVwbGVFeGNsdXNpdmUpOwogCQlteGFjdF9zdGF0dXMgPSBNdWx0aVhhY3RTdGF0 dXNVcGRhdGU7CiAJCWtleV9pbnRhY3QgPSBmYWxzZTsKIAl9CiAKLQkvKgotCSAqIE5vdGU6 IGJleW9uZCB0aGlzIHBvaW50LCB1c2Ugb2xkdHVwIG5vdCBvdGlkIHRvIHJlZmVyIHRvIG9s ZCB0dXBsZS4KLQkgKiBvdGlkIG1heSB2ZXJ5IHdlbGwgcG9pbnQgYXQgbmV3dHVwLT50X3Nl bGYsIHdoaWNoIHdlIHdpbGwgb3ZlcndyaXRlCi0JICogd2l0aCB0aGUgbmV3IHR1cGxlJ3Mg bG9jYXRpb24sIHNvIHRoZXJlJ3MgZ3JlYXQgcmlzayBvZiBjb25mdXNpb24gaWYgd2UKLQkg KiB1c2Ugb3RpZCBhbnltb3JlLgotCSAqLwotCiBsMjoKIAljaGVja2VkX2xvY2tlcnMgPSBm YWxzZTsKIAlsb2NrZXJfcmVtYWlucyA9IGZhbHNlOwotCXJlc3VsdCA9IEhlYXBUdXBsZVNh dGlzZmllc1VwZGF0ZSgmb2xkdHVwLCBjaWQsIGJ1ZmZlcik7CisJcmVzdWx0ID0gSGVhcFR1 cGxlU2F0aXNmaWVzVXBkYXRlKG9sZHR1cCwgY2lkLCBidWZmZXIpOwogCiAJLyogc2VlIGJl bG93IGFib3V0IHRoZSAibm8gd2FpdCIgY2FzZSAqLwogCUFzc2VydChyZXN1bHQgIT0gVE1f QmVpbmdNb2RpZmllZCB8fCB3YWl0KTsKQEAgLTM2MjgsOCArMzQxNSw4IEBAIGwyOgogCQkg Ki8KIAogCQkvKiBtdXN0IGNvcHkgc3RhdGUgZGF0YSBiZWZvcmUgdW5sb2NraW5nIGJ1ZmZl ciAqLwotCQl4d2FpdCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0 YSk7Ci0JCWluZm9tYXNrID0gb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazsKKwkJeHdhaXQg PSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRhKTsKKwkJaW5mb21h c2sgPSBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazsKIAogCQkvKgogCQkgKiBOb3cgd2Ug aGF2ZSB0byBkbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tlci4gIElmIGl0 J3MgYQpAQCAtMzY2OSwxMyArMzQ1NiwxMiBAQCBsMjoKIAkJCQkgKiByZXF1ZXN0aW5nIGEg bG9jayBhbmQgYWxyZWFkeSBoYXZlIG9uZTsgYXZvaWRzIGRlYWRsb2NrKS4KIAkJCQkgKi8K IAkJCQlpZiAoIWN1cnJlbnRfaXNfbWVtYmVyKQotCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9j ayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2ttb2RlLAorCQkJCQloZWFwX2Fj cXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUsCiAJ CQkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZoYXZlX3R1cGxlX2xvY2spOwogCiAJCQkJLyog d2FpdCBmb3IgbXVsdGl4YWN0ICovCiAJCQkJTXVsdGlYYWN0SWRXYWl0KChNdWx0aVhhY3RJ ZCkgeHdhaXQsIG14YWN0X3N0YXR1cywgaW5mb21hc2ssCi0JCQkJCQkJCXJlbGF0aW9uLCAm b2xkdHVwLnRfc2VsZiwgWExUV19VcGRhdGUsCi0JCQkJCQkJCSZyZW1haW4pOworCQkJCQkJ CQlyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCBYTFRXX1VwZGF0ZSwgJnJlbWFpbik7CiAJ CQkJY2hlY2tlZF9sb2NrZXJzID0gdHJ1ZTsKIAkJCQlsb2NrZXJfcmVtYWlucyA9IHJlbWFp biAhPSAwOwogCQkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OwpAQCAtMzY4NSw5ICszNDcxLDkgQEAgbDI6CiAJCQkJICogY291bGQgdXBkYXRlIHRoaXMg dHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50LiAgQ2hlY2sKIAkJCQkgKiBmb3Ig eG1heCBjaGFuZ2UsIGFuZCBzdGFydCBvdmVyIGlmIHNvLgogCQkJCSAqLwotCQkJCWlmICh4 bWF4X2luZm9tYXNrX2NoYW5nZWQob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQlp ZiAoeG1heF9pbmZvbWFza19jaGFuZ2VkKG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrLAog CQkJCQkJCQkJCSAgaW5mb21hc2spIHx8Ci0JCQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKEhl YXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLnRfZGF0YSksCisJCQkJCSFUcmFuc2Fj dGlvbklkRXF1YWxzKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEp LAogCQkJCQkJCQkJCSB4d2FpdCkpCiAJCQkJCWdvdG8gbDI7CiAJCQl9CkBAIC0zNzEyLDgg KzM0OTgsOCBAQCBsMjoKIAkJCSAqIGJlZm9yZSB0aGlzIG9uZSwgd2hpY2ggYXJlIGltcG9y dGFudCB0byBrZWVwIGluIGNhc2UgdGhpcwogCQkJICogc3VieGFjdCBhYm9ydHMuCiAJCQkg Ki8KLQkJCWlmICghSEVBUF9YTUFYX0lTX0xPQ0tFRF9PTkxZKG9sZHR1cC50X2RhdGEtPnRf aW5mb21hc2spKQotCQkJCXVwZGF0ZV94YWN0ID0gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKG9s ZHR1cC50X2RhdGEpOworCQkJaWYgKCFIRUFQX1hNQVhfSVNfTE9DS0VEX09OTFkob2xkdHVw LT50X2RhdGEtPnRfaW5mb21hc2spKQorCQkJCXVwZGF0ZV94YWN0ID0gSGVhcFR1cGxlR2V0 VXBkYXRlWGlkKG9sZHR1cC0+dF9kYXRhKTsKIAkJCWVsc2UKIAkJCQl1cGRhdGVfeGFjdCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOwogCkBAIC0zNzU0LDkgKzM1NDAsOSBAQCBsMjoKIAkJ CSAqIGxvY2suCiAJCQkgKi8KIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19V TkxPQ0spOwotCQkJaGVhcF9hY3F1aXJlX3R1cGxvY2socmVsYXRpb24sICYob2xkdHVwLnRf c2VsZiksICpsb2NrbW9kZSwKKwkJCWhlYXBfYWNxdWlyZV90dXBsb2NrKHJlbGF0aW9uLCAm b2xkdHVwLT50X3NlbGYsICpsb2NrbW9kZSwKIAkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZo YXZlX3R1cGxlX2xvY2spOwotCQkJWGFjdExvY2tUYWJsZVdhaXQoeHdhaXQsIHJlbGF0aW9u LCAmb2xkdHVwLnRfc2VsZiwKKwkJCVhhY3RMb2NrVGFibGVXYWl0KHh3YWl0LCByZWxhdGlv biwgJm9sZHR1cC0+dF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUpOwogCQkJY2hlY2tl ZF9sb2NrZXJzID0gdHJ1ZTsKIAkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19F WENMVVNJVkUpOwpAQCAtMzc2NiwyMCArMzU1MiwyMCBAQCBsMjoKIAkJCSAqIG90aGVyIHhh Y3QgY291bGQgdXBkYXRlIHRoaXMgdHVwbGUgYmVmb3JlIHdlIGdldCB0byB0aGlzIHBvaW50 LgogCQkJICogQ2hlY2sgZm9yIHhtYXggY2hhbmdlLCBhbmQgc3RhcnQgb3ZlciBpZiBzby4K IAkJCSAqLwotCQkJaWYgKHhtYXhfaW5mb21hc2tfY2hhbmdlZChvbGR0dXAudF9kYXRhLT50 X2luZm9tYXNrLCBpbmZvbWFzaykgfHwKKwkJCWlmICh4bWF4X2luZm9tYXNrX2NoYW5nZWQo b2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ssIGluZm9tYXNrKSB8fAogCQkJCSFUcmFuc2Fj dGlvbklkRXF1YWxzKHh3YWl0LAotCQkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFJhd1ht YXgob2xkdHVwLnRfZGF0YSkpKQorCQkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFJhd1ht YXgob2xkdHVwLT50X2RhdGEpKSkKIAkJCQlnb3RvIGwyOwogCiAJCQkvKiBPdGhlcndpc2Ug Y2hlY2sgaWYgaXQgY29tbWl0dGVkIG9yIGFib3J0ZWQgKi8KLQkJCVVwZGF0ZVhtYXhIaW50 Qml0cyhvbGR0dXAudF9kYXRhLCBidWZmZXIsIHh3YWl0KTsKLQkJCWlmIChvbGR0dXAudF9k YXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCisJCQlVcGRhdGVYbWF4SGlu dEJpdHMob2xkdHVwLT50X2RhdGEsIGJ1ZmZlciwgeHdhaXQpOworCQkJaWYgKG9sZHR1cC0+ dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpCiAJCQkJY2FuX2NvbnRp bnVlID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChjYW5fY29udGludWUpCiAJCQlyZXN1bHQgPSBU TV9PazsKLQkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxmLCAm b2xkdHVwLnRfZGF0YS0+dF9jdGlkKSkKKwkJZWxzZSBpZiAoIUl0ZW1Qb2ludGVyRXF1YWxz KCZvbGR0dXAtPnRfc2VsZiwgJm9sZHR1cC0+dF9kYXRhLT50X2N0aWQpKQogCQkJcmVzdWx0 ID0gVE1fVXBkYXRlZDsKIAkJZWxzZQogCQkJcmVzdWx0ID0gVE1fRGVsZXRlZDsKQEAgLTM3 OTIsMzkgKzM1NzgsMzIgQEAgbDI6CiAJCQkgICByZXN1bHQgPT0gVE1fVXBkYXRlZCB8fAog CQkJICAgcmVzdWx0ID09IFRNX0RlbGV0ZWQgfHwKIAkJCSAgIHJlc3VsdCA9PSBUTV9CZWlu Z01vZGlmaWVkKTsKLQkJQXNzZXJ0KCEob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhF QVBfWE1BWF9JTlZBTElEKSk7CisJCUFzc2VydCghKG9sZHR1cC0+dF9kYXRhLT50X2luZm9t YXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpKTsKIAkJQXNzZXJ0KHJlc3VsdCAhPSBUTV9VcGRh dGVkIHx8Ci0JCQkgICAhSXRlbVBvaW50ZXJFcXVhbHMoJm9sZHR1cC50X3NlbGYsICZvbGR0 dXAudF9kYXRhLT50X2N0aWQpKTsKKwkJCSAgICFJdGVtUG9pbnRlckVxdWFscygmb2xkdHVw LT50X3NlbGYsICZvbGR0dXAtPnRfZGF0YS0+dF9jdGlkKSk7CiAJfQogCiAJaWYgKGNyb3Nz Y2hlY2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJlc3VsdCA9PSBUTV9PaykKIAl7CiAJCS8q IFBlcmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJhbnNhY3Rpb24tc25hcHNob3QgbW9k ZSBSSSB1cGRhdGVzICovCi0JCWlmICghSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eSgm b2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQorCQlpZiAoIUhlYXBUdXBsZVNhdGlzZmll c1Zpc2liaWxpdHkob2xkdHVwLCBjcm9zc2NoZWNrLCBidWZmZXIpKQogCQkJcmVzdWx0ID0g VE1fVXBkYXRlZDsKIAl9CiAKIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsKLQkJdG1mZC0+ Y3RpZCA9IG9sZHR1cC50X2RhdGEtPnRfY3RpZDsKLQkJdG1mZC0+eG1heCA9IEhlYXBUdXBs ZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsKKwkJdG1mZC0+Y3RpZCA9IG9s ZHR1cC0+dF9kYXRhLT50X2N0aWQ7CisJCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFkZXJH ZXRVcGRhdGVYaWQob2xkdHVwLT50X2RhdGEpOwogCQlpZiAocmVzdWx0ID09IFRNX1NlbGZN b2RpZmllZCkKLQkJCXRtZmQtPmNtYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KG9sZHR1 cC50X2RhdGEpOworCQkJdG1mZC0+Y21heCA9IEhlYXBUdXBsZUhlYWRlckdldENtYXgob2xk dHVwLT50X2RhdGEpOwogCQllbHNlCiAJCQl0bWZkLT5jbWF4ID0gSW52YWxpZENvbW1hbmRJ ZDsKIAkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCQlpZiAoaGF2ZV90dXBsZV9s b2NrKQotCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmKG9sZHR1cC50X3NlbGYp LCAqbG9ja21vZGUpOworCQkJVW5sb2NrVHVwbGVUdXBsb2NrKHJlbGF0aW9uLCAmb2xkdHVw LT50X3NlbGYsICpsb2NrbW9kZSk7CiAJCWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVy KQogCQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7Ci0JCSp1cGRhdGVfaW5kZXhlcyA9IFRV X05vbmU7CiAKLQkJYm1zX2ZyZWUoaG90X2F0dHJzKTsKLQkJYm1zX2ZyZWUoc3VtX2F0dHJz KTsKLQkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQkJYm1zX2ZyZWUoaWRfYXR0cnMpOwotCQkv KiBtb2RpZmllZCBhdHRycyBpcyBwYXNzZWQgaW4gYW5kIGZyZWUnZCBieSB0aGUgY2FsbGVy LCBvciBOVUxMICovCi0JCWJtc19mcmVlKGludGVyZXN0aW5nX2F0dHJzKTsKIAkJcmV0dXJu IHJlc3VsdDsKIAl9CiAKQEAgLTM4NTEsOSArMzYzMCw5IEBAIGwyOgogCSAqIElmIHRoZSB0 dXBsZSB3ZSdyZSB1cGRhdGluZyBpcyBsb2NrZWQsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhl IGxvY2tpbmcKIAkgKiBpbmZvIGluIHRoZSBvbGQgdHVwbGUncyBYbWF4LiAgUHJlcGFyZSBh IG5ldyBYbWF4IHZhbHVlIGZvciB0aGlzLgogCSAqLwotCWNvbXB1dGVfbmV3X3htYXhfaW5m b21hc2soSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heChvbGR0dXAudF9kYXRhKSwKLQkJCQkJ CQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJCQkJICBvbGR0dXAudF9kYXRh LT50X2luZm9tYXNrMiwKKwljb21wdXRlX25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhl YWRlckdldFJhd1htYXgob2xkdHVwLT50X2RhdGEpLAorCQkJCQkJCSAgb2xkdHVwLT50X2Rh dGEtPnRfaW5mb21hc2ssCisJCQkJCQkJICBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIs CiAJCQkJCQkJICB4aWQsICpsb2NrbW9kZSwgdHJ1ZSwKIAkJCQkJCQkgICZ4bWF4X29sZF90 dXBsZSwgJmluZm9tYXNrX29sZF90dXBsZSwKIAkJCQkJCQkgICZpbmZvbWFzazJfb2xkX3R1 cGxlKTsKQEAgLTM4NjUsMTIgKzM2NDQsMTIgQEAgbDI6CiAJICogdHVwbGUuICAoSW4gcmFy ZSBjYXNlcyB0aGF0IG1pZ2h0IGFsc28gYmUgSW52YWxpZFRyYW5zYWN0aW9uSWQgYW5kIHll dAogCSAqIG5vdCBoYXZlIHRoZSBIRUFQX1hNQVhfSU5WQUxJRCBiaXQgc2V0OyB0aGF0J3Mg ZmluZS4pCiAJICovCi0JaWYgKChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9Y TUFYX0lOVkFMSUQpIHx8Ci0JCUhFQVBfTE9DS0VEX1VQR1JBREVEKG9sZHR1cC50X2RhdGEt PnRfaW5mb21hc2spIHx8CisJaWYgKChvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzayAmIEhF QVBfWE1BWF9JTlZBTElEKSB8fAorCQlIRUFQX0xPQ0tFRF9VUEdSQURFRChvbGR0dXAtPnRf ZGF0YS0+dF9pbmZvbWFzaykgfHwKIAkJKGNoZWNrZWRfbG9ja2VycyAmJiAhbG9ja2VyX3Jl bWFpbnMpKQogCQl4bWF4X25ld190dXBsZSA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCWVs c2UKLQkJeG1heF9uZXdfdHVwbGUgPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1 cC50X2RhdGEpOworCQl4bWF4X25ld190dXBsZSA9IEhlYXBUdXBsZUhlYWRlckdldFJhd1ht YXgob2xkdHVwLT50X2RhdGEpOwogCiAJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4bWF4 X25ld190dXBsZSkpCiAJewpAQCAtMzg4NSw3ICszNjY0LDcgQEAgbDI6CiAJCSAqIE5vdGUg dGhhdCBzaW5jZSB3ZSdyZSBkb2luZyBhbiB1cGRhdGUsIHRoZSBvbmx5IHBvc3NpYmlsaXR5 IGlzIHRoYXQKIAkJICogdGhlIGxvY2tlcnMgaGFkIEZPUiBLRVkgU0hBUkUgbG9jay4KIAkJ ICovCi0JCWlmIChvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lTX01V TFRJKQorCQlpZiAob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSVNf TVVMVEkpCiAJCXsKIAkJCUdldE11bHRpWGFjdElkSGludEJpdHMoeG1heF9uZXdfdHVwbGUs ICZpbmZvbWFza19uZXdfdHVwbGUsCiAJCQkJCQkJCSAgICZpbmZvbWFzazJfbmV3X3R1cGxl KTsKQEAgLTM5MTMsNyArMzY5Miw3IEBAIGwyOgogCSAqIFJlcGxhY2UgY2lkIHdpdGggYSBj b21ibyBDSUQgaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGFscmVhZHkgcHV0CiAJICog dGhlIHBsYWluIGNpZCBpbnRvIHRoZSBuZXcgdHVwbGUuCiAJICovCi0JSGVhcFR1cGxlSGVh ZGVyQWRqdXN0Q21heChvbGR0dXAudF9kYXRhLCAmY2lkLCAmaXNjb21ibyk7CisJSGVhcFR1 cGxlSGVhZGVyQWRqdXN0Q21heChvbGR0dXAtPnRfZGF0YSwgJmNpZCwgJmlzY29tYm8pOwog CiAJLyoKIAkgKiBJZiB0aGUgdG9hc3RlciBuZWVkcyB0byBiZSBhY3RpdmF0ZWQsIE9SIGlm IHRoZSBuZXcgdHVwbGUgd2lsbCBub3QgZml0CkBAIC0zOTMwLDEyICszNzA5LDEyIEBAIGwy OgogCQlyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfTUFUVklFVykKIAl7 CiAJCS8qIHRvYXN0IHRhYmxlIGVudHJpZXMgc2hvdWxkIG5ldmVyIGJlIHJlY3Vyc2l2ZWx5 IHRvYXN0ZWQgKi8KLQkJQXNzZXJ0KCFIZWFwVHVwbGVIYXNFeHRlcm5hbCgmb2xkdHVwKSk7 CisJCUFzc2VydCghSGVhcFR1cGxlSGFzRXh0ZXJuYWwob2xkdHVwKSk7CiAJCUFzc2VydCgh SGVhcFR1cGxlSGFzRXh0ZXJuYWwobmV3dHVwKSk7CiAJCW5lZWRfdG9hc3QgPSBmYWxzZTsK IAl9CiAJZWxzZQotCQluZWVkX3RvYXN0ID0gKEhlYXBUdXBsZUhhc0V4dGVybmFsKCZvbGR0 dXApIHx8CisJCW5lZWRfdG9hc3QgPSAoSGVhcFR1cGxlSGFzRXh0ZXJuYWwob2xkdHVwKSB8 fAogCQkJCQkgIEhlYXBUdXBsZUhhc0V4dGVybmFsKG5ld3R1cCkgfHwKIAkJCQkJICBuZXd0 dXAtPnRfbGVuID4gVE9BU1RfVFVQTEVfVEhSRVNIT0xEKTsKIApAQCAtMzk2OCw5ICszNzQ3 LDkgQEAgbDI6CiAJCSAqIHVwZGF0aW5nLCBiZWNhdXNlIHRoZSBwb3RlbnRpYWxseSBjcmVh dGVkIG11bHRpeGFjdCB3b3VsZCBvdGhlcndpc2UKIAkJICogYmUgd3JvbmcuCiAJCSAqLwot CQljb21wdXRlX25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgo b2xkdHVwLnRfZGF0YSksCi0JCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywK LQkJCQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiwKKwkJY29tcHV0ZV9uZXdf eG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KG9sZHR1cC0+dF9kYXRh KSwKKwkJCQkJCQkJICBvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzaywKKwkJCQkJCQkJICBv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIsCiAJCQkJCQkJCSAgeGlkLCAqbG9ja21vZGUs IGZhbHNlLAogCQkJCQkJCQkgICZ4bWF4X2xvY2tfb2xkX3R1cGxlLCAmaW5mb21hc2tfbG9j a19vbGRfdHVwbGUsCiAJCQkJCQkJCSAgJmluZm9tYXNrMl9sb2NrX29sZF90dXBsZSk7CkBA IC0zOTgwLDE4ICszNzU5LDE4IEBAIGwyOgogCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKIAog CQkvKiBDbGVhciBvYnNvbGV0ZSB2aXNpYmlsaXR5IGZsYWdzIC4uLiAqLwotCQlvbGR0dXAu dF9kYXRhLT50X2luZm9tYXNrICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsK LQkJb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZU19VUERBVEVEOwot CQlIZWFwVHVwbGVDbGVhckhvdFVwZGF0ZWQoJm9sZHR1cCk7CisJCW9sZHR1cC0+dF9kYXRh LT50X2luZm9tYXNrICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKKwkJb2xk dHVwLT50X2RhdGEtPnRfaW5mb21hc2syICY9IH5IRUFQX0tFWVNfVVBEQVRFRDsKKwkJSGVh cFR1cGxlQ2xlYXJIb3RVcGRhdGVkKG9sZHR1cCk7CiAJCS8qIC4uLiBhbmQgc3RvcmUgaW5m byBhYm91dCB0cmFuc2FjdGlvbiB1cGRhdGluZyB0aGlzIHR1cGxlICovCiAJCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZCh4bWF4X2xvY2tfb2xkX3R1cGxlKSk7Ci0JCUhlYXBUdXBs ZUhlYWRlclNldFhtYXgob2xkdHVwLnRfZGF0YSwgeG1heF9sb2NrX29sZF90dXBsZSk7Ci0J CW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5mb21hc2tfbG9ja19vbGRfdHVwbGU7 Ci0JCW9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syIHw9IGluZm9tYXNrMl9sb2NrX29sZF90 dXBsZTsKLQkJSGVhcFR1cGxlSGVhZGVyU2V0Q21heChvbGR0dXAudF9kYXRhLCBjaWQsIGlz Y29tYm8pOworCQlIZWFwVHVwbGVIZWFkZXJTZXRYbWF4KG9sZHR1cC0+dF9kYXRhLCB4bWF4 X2xvY2tfb2xkX3R1cGxlKTsKKwkJb2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2sgfD0gaW5m b21hc2tfbG9ja19vbGRfdHVwbGU7CisJCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMiB8 PSBpbmZvbWFzazJfbG9ja19vbGRfdHVwbGU7CisJCUhlYXBUdXBsZUhlYWRlclNldENtYXgo b2xkdHVwLT50X2RhdGEsIGNpZCwgaXNjb21ibyk7CiAKIAkJLyogdGVtcG9yYXJpbHkgbWFr ZSBpdCBsb29rIG5vdC11cGRhdGVkLCBidXQgbG9ja2VkICovCi0JCW9sZHR1cC50X2RhdGEt PnRfY3RpZCA9IG9sZHR1cC50X3NlbGY7CisJCW9sZHR1cC0+dF9kYXRhLT50X2N0aWQgPSBv bGR0dXAtPnRfc2VsZjsKIAogCQkvKgogCQkgKiBDbGVhciBhbGwtZnJvemVuIGJpdCBvbiB2 aXNpYmlsaXR5IG1hcCBpZiBuZWVkZWQuIFdlIGNvdWxkCkBAIC00MDE0LDEwICszNzkzLDEw IEBAIGwyOgogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIo MCwgYnVmZmVyLCBSRUdCVUZfU1RBTkRBUkQpOwogCi0JCQl4bHJlYy5vZmZudW0gPSBJdGVt UG9pbnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLnRfc2VsZik7CisJCQl4bHJlYy5vZmZu dW0gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmb2xkdHVwLT50X3NlbGYpOwogCQkJ eGxyZWMueG1heCA9IHhtYXhfbG9ja19vbGRfdHVwbGU7Ci0JCQl4bHJlYy5pbmZvYml0c19z ZXQgPSBjb21wdXRlX2luZm9iaXRzKG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2ssCi0JCQkJ CQkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syKTsKKwkJCXhscmVjLmluZm9i aXRzX3NldCA9IGNvbXB1dGVfaW5mb2JpdHMob2xkdHVwLT50X2RhdGEtPnRfaW5mb21hc2ss CisJCQkJCQkJCQkJCQkgIG9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrMik7CiAJCQl4bHJl Yy5mbGFncyA9CiAJCQkJY2xlYXJlZF9hbGxfZnJvemVuID8gWExIX0xPQ0tfQUxMX0ZST1pF Tl9DTEVBUkVEIDogMDsKIAkJCVhMb2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZIZWFw TG9jayk7CkBAIC00MDM5LDcgKzM4MTgsNyBAQCBsMjoKIAkJaWYgKG5lZWRfdG9hc3QpCiAJ CXsKIAkJCS8qIE5vdGUgd2UgYWx3YXlzIHVzZSBXQUwgYW5kIEZTTSBkdXJpbmcgdXBkYXRl cyAqLwotCQkJaGVhcHR1cCA9IGhlYXBfdG9hc3RfaW5zZXJ0X29yX3VwZGF0ZShyZWxhdGlv biwgbmV3dHVwLCAmb2xkdHVwLCAwKTsKKwkJCWhlYXB0dXAgPSBoZWFwX3RvYXN0X2luc2Vy dF9vcl91cGRhdGUocmVsYXRpb24sIG5ld3R1cCwgb2xkdHVwLCAwKTsKIAkJCW5ld3R1cHNp emUgPSBNQVhBTElHTihoZWFwdHVwLT50X2xlbik7CiAJCX0KIAkJZWxzZQpAQCAtNDEyNiw0 MiArMzkwNSwyMSBAQCBsMjoKIAkgKiB3aWxsIGluY2x1ZGUgY2hlY2tpbmcgdGhlIHJlbGF0 aW9uIGxldmVsLCB0aGVyZSBpcyBubyBiZW5lZml0IHRvIGEKIAkgKiBzZXBhcmF0ZSBjaGVj ayBmb3IgdGhlIG5ldyB0dXBsZS4KIAkgKi8KLQlDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZs aWN0SW4ocmVsYXRpb24sICZvbGR0dXAudF9zZWxmLAorCUNoZWNrRm9yU2VyaWFsaXphYmxl Q29uZmxpY3RJbihyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLAogCQkJCQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXIpKTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCBu ZXdidWYgYW5kIGJ1ZmZlciBhcmUgYm90aCBwaW5uZWQgYW5kIGxvY2tlZCwgYW5kIG5ld2J1 ZgotCSAqIGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBuZXcgdHVwbGUuICBJZiB0aGV5IGFy ZSB0aGUgc2FtZSBidWZmZXIsIG9ubHkKLQkgKiBvbmUgcGluIGlzIGhlbGQuCisJICogaGFz IGVub3VnaCBzcGFjZSBmb3IgdGhlIG5ldyB0dXBsZSBzbyB3ZSBjYW4gdXNlIHRoZSBIT1Qg dXBkYXRlIHBhdGggaWYKKwkgKiB0aGUgY2FsbGVyIGRldGVybWluZWQgdGhhdCBpdCBpcyBh bGxvd2FibGUuCisJICoKKwkgKiBOT1RFOiBJZiBuZXdidWYgPT0gYnVmZmVyIHRoZW4gb25s eSBvbmUgcGluIGlzIGhlbGQuCiAJICovCi0KLQlpZiAobmV3YnVmID09IGJ1ZmZlcikKLQl7 Ci0JCS8qCi0JCSAqIFNpbmNlIHRoZSBuZXcgdHVwbGUgaXMgZ29pbmcgaW50byB0aGUgc2Ft ZSBwYWdlLCB3ZSBtaWdodCBiZSBhYmxlCi0JCSAqIHRvIGRvIGEgSE9UIHVwZGF0ZS4gIENo ZWNrIGlmIGFueSBvZiB0aGUgaW5kZXggY29sdW1ucyBoYXZlIGJlZW4KLQkJICogY2hhbmdl ZC4KLQkJICovCi0JCWlmICghYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIGhvdF9hdHRy cykpCi0JCXsKLQkJCXVzZV9ob3RfdXBkYXRlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIElm IG5vbmUgb2YgdGhlIGNvbHVtbnMgdGhhdCBhcmUgdXNlZCBpbiBob3QtYmxvY2tpbmcgaW5k ZXhlcwotCQkJICogd2VyZSB1cGRhdGVkLCB3ZSBjYW4gYXBwbHkgSE9ULCBidXQgd2UgZG8g c3RpbGwgbmVlZCB0byBjaGVjawotCQkJICogaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN1 bW1hcml6aW5nIGluZGV4ZXMsIGFuZCB1cGRhdGUgdGhvc2UKLQkJCSAqIGluZGV4ZXMgaWYg dGhlIGNvbHVtbnMgd2VyZSB1cGRhdGVkLCBvciB3ZSBtYXkgZmFpbCB0byBkZXRlY3QKLQkJ CSAqIGUuZy4gdmFsdWUgYm91bmQgY2hhbmdlcyBpbiBCUklOIG1pbm1heCBpbmRleGVzLgot CQkJICovCi0JCQlpZiAoYm1zX292ZXJsYXAobW9kaWZpZWRfYXR0cnMsIHN1bV9hdHRycykp Ci0JCQkJc3VtbWFyaXplZF91cGRhdGUgPSB0cnVlOwotCQl9Ci0JfQorCWlmICgobmV3YnVm ID09IGJ1ZmZlcikgJiYgaG90X2FsbG93ZWQpCisJCXVzZV9ob3RfdXBkYXRlID0gdHJ1ZTsK IAllbHNlCi0JewogCQkvKiBTZXQgYSBoaW50IHRoYXQgdGhlIG9sZCBwYWdlIGNvdWxkIHVz ZSBwcnVuZS9kZWZyYWcgKi8KIAkJUGFnZVNldEZ1bGwocGFnZSk7Ci0JfQogCiAJLyoKIAkg KiBDb21wdXRlIHJlcGxpY2EgaWRlbnRpdHkgdHVwbGUgYmVmb3JlIGVudGVyaW5nIHRoZSBj cml0aWNhbCBzZWN0aW9uIHNvCkBAIC00MTcwLDggKzM5MjgsNyBAQCBsMjoKIAkgKiBsb2dn ZWQuICBQYXNzIG9sZCBrZXkgcmVxdWlyZWQgYXMgdHJ1ZSBvbmx5IGlmIHRoZSByZXBsaWNh IGlkZW50aXR5IGtleQogCSAqIGNvbHVtbnMgYXJlIG1vZGlmaWVkIG9yIGl0IGhhcyBleHRl cm5hbCBkYXRhLgogCSAqLwotCW9sZF9rZXlfdHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50 aXR5KHJlbGF0aW9uLCAmb2xkdHVwLAotCQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWly ZWQsCisJb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVsYXRpb24s IG9sZHR1cCwgcmVwX2lkX2tleV9yZXF1aXJlZCwKIAkJCQkJCQkJCQkgICAmb2xkX2tleV9j b3BpZWQpOwogCiAJLyogTk8gRVJFUE9SVChFUlJPUikgZnJvbSBoZXJlIHRpbGwgY2hhbmdl cyBhcmUgbG9nZ2VkICovCkBAIC00MTk0LDcgKzM5NTEsNyBAQCBsMjoKIAlpZiAodXNlX2hv dF91cGRhdGUpCiAJewogCQkvKiBNYXJrIHRoZSBvbGQgdHVwbGUgYXMgSE9ULXVwZGF0ZWQg Ki8KLQkJSGVhcFR1cGxlU2V0SG90VXBkYXRlZCgmb2xkdHVwKTsKKwkJSGVhcFR1cGxlU2V0 SG90VXBkYXRlZChvbGR0dXApOwogCQkvKiBBbmQgbWFyayB0aGUgbmV3IHR1cGxlIGFzIGhl YXAtb25seSAqLwogCQlIZWFwVHVwbGVTZXRIZWFwT25seShoZWFwdHVwKTsKIAkJLyogTWFy ayB0aGUgY2FsbGVyJ3MgY29weSB0b28sIGluIGNhc2UgZGlmZmVyZW50IGZyb20gaGVhcHR1 cCAqLwpAQCAtNDIwMyw3ICszOTYwLDcgQEAgbDI6CiAJZWxzZQogCXsKIAkJLyogTWFrZSBz dXJlIHR1cGxlcyBhcmUgY29ycmVjdGx5IG1hcmtlZCBhcyBub3QtSE9UICovCi0JCUhlYXBU dXBsZUNsZWFySG90VXBkYXRlZCgmb2xkdHVwKTsKKwkJSGVhcFR1cGxlQ2xlYXJIb3RVcGRh dGVkKG9sZHR1cCk7CiAJCUhlYXBUdXBsZUNsZWFySGVhcE9ubHkoaGVhcHR1cCk7CiAJCUhl YXBUdXBsZUNsZWFySGVhcE9ubHkobmV3dHVwKTsKIAl9CkBAIC00MjEyLDE3ICszOTY5LDE3 IEBAIGwyOgogCiAKIAkvKiBDbGVhciBvYnNvbGV0ZSB2aXNpYmlsaXR5IGZsYWdzLCBwb3Nz aWJseSBzZXQgYnkgb3Vyc2VsdmVzIGFib3ZlLi4uICovCi0Jb2xkdHVwLnRfZGF0YS0+dF9p bmZvbWFzayAmPSB+KEhFQVBfWE1BWF9CSVRTIHwgSEVBUF9NT1ZFRCk7Ci0Jb2xkdHVwLnRf ZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZU19VUERBVEVEOworCW9sZHR1cC0+dF9k YXRhLT50X2luZm9tYXNrICY9IH4oSEVBUF9YTUFYX0JJVFMgfCBIRUFQX01PVkVEKTsKKwlv bGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgJj0gfkhFQVBfS0VZU19VUERBVEVEOwogCS8q IC4uLiBhbmQgc3RvcmUgaW5mbyBhYm91dCB0cmFuc2FjdGlvbiB1cGRhdGluZyB0aGlzIHR1 cGxlICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXhfb2xkX3R1cGxlKSk7 Ci0JSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAudF9kYXRhLCB4bWF4X29sZF90dXBs ZSk7Ci0Jb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayB8PSBpbmZvbWFza19vbGRfdHVwbGU7 Ci0Jb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX29sZF90dXBsZTsK LQlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC50X2RhdGEsIGNpZCwgaXNjb21ibyk7 CisJSGVhcFR1cGxlSGVhZGVyU2V0WG1heChvbGR0dXAtPnRfZGF0YSwgeG1heF9vbGRfdHVw bGUpOworCW9sZHR1cC0+dF9kYXRhLT50X2luZm9tYXNrIHw9IGluZm9tYXNrX29sZF90dXBs ZTsKKwlvbGR0dXAtPnRfZGF0YS0+dF9pbmZvbWFzazIgfD0gaW5mb21hc2syX29sZF90dXBs ZTsKKwlIZWFwVHVwbGVIZWFkZXJTZXRDbWF4KG9sZHR1cC0+dF9kYXRhLCBjaWQsIGlzY29t Ym8pOwogCiAJLyogcmVjb3JkIGFkZHJlc3Mgb2YgbmV3IHR1cGxlIGluIHRfY3RpZCBvZiBv bGQgb25lICovCi0Jb2xkdHVwLnRfZGF0YS0+dF9jdGlkID0gaGVhcHR1cC0+dF9zZWxmOwor CW9sZHR1cC0+dF9kYXRhLT50X2N0aWQgPSBoZWFwdHVwLT50X3NlbGY7CiAKIAkvKiBjbGVh ciBQRF9BTExfVklTSUJMRSBmbGFncywgcmVzZXQgYWxsIHZpc2liaWxpdHltYXAgYml0cyAq LwogCWlmIChQYWdlSXNBbGxWaXNpYmxlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkpCkBAIC00 MjU1LDEyICs0MDEyLDEyIEBAIGwyOgogCQkgKi8KIAkJaWYgKFJlbGF0aW9uSXNBY2Nlc3Np YmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pKQogCQl7Ci0JCQlsb2dfaGVhcF9uZXdf Y2lkKHJlbGF0aW9uLCAmb2xkdHVwKTsKKwkJCWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24s IG9sZHR1cCk7CiAJCQlsb2dfaGVhcF9uZXdfY2lkKHJlbGF0aW9uLCBoZWFwdHVwKTsKIAkJ fQogCiAJCXJlY3B0ciA9IGxvZ19oZWFwX3VwZGF0ZShyZWxhdGlvbiwgYnVmZmVyLAotCQkJ CQkJCQkgbmV3YnVmLCAmb2xkdHVwLCBoZWFwdHVwLAorCQkJCQkJCQkgbmV3YnVmLCBvbGR0 dXAsIGhlYXB0dXAsCiAJCQkJCQkJCSBvbGRfa2V5X3R1cGxlLAogCQkJCQkJCQkgYWxsX3Zp c2libGVfY2xlYXJlZCwKIAkJCQkJCQkJIGFsbF92aXNpYmxlX2NsZWFyZWRfbmV3KTsKQEAg LTQyODUsNyArNDA0Miw3IEBAIGwyOgogCSAqIGJvdGggdHVwbGUgdmVyc2lvbnMgaW4gb25l IGNhbGwgdG8gaW52YWwuYyBzbyB3ZSBjYW4gYXZvaWQgcmVkdW5kYW50CiAJICogc2ludmFs IG1lc3NhZ2VzLikKIAkgKi8KLQlDYWNoZUludmFsaWRhdGVIZWFwVHVwbGUocmVsYXRpb24s ICZvbGR0dXAsIGhlYXB0dXApOworCUNhY2hlSW52YWxpZGF0ZUhlYXBUdXBsZShyZWxhdGlv biwgb2xkdHVwLCBoZWFwdHVwKTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVsZWFzZSB0aGUgYnVm ZmVyKHMpICovCiAJaWYgKG5ld2J1ZiAhPSBidWZmZXIpCkBAIC00MzAwLDcgKzQwNTcsNyBA QCBsMjoKIAkgKiBSZWxlYXNlIHRoZSBsbWdyIHR1cGxlIGxvY2ssIGlmIHdlIGhhZCBpdC4K IAkgKi8KIAlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQlVbmxvY2tUdXBsZVR1cGxvY2socmVs YXRpb24sICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSk7CisJCVVubG9ja1R1cGxlVHVw bG9jayhyZWxhdGlvbiwgJm9sZHR1cC0+dF9zZWxmLCAqbG9ja21vZGUpOwogCiAJcGdzdGF0 X2NvdW50X2hlYXBfdXBkYXRlKHJlbGF0aW9uLCB1c2VfaG90X3VwZGF0ZSwgbmV3YnVmICE9 IGJ1ZmZlcik7CiAKQEAgLTQzMTQsMzIgKzQwNzEsOSBAQCBsMjoKIAkJaGVhcF9mcmVldHVw bGUoaGVhcHR1cCk7CiAJfQogCi0JLyoKLQkgKiBJZiBpdCBpcyBhIEhPVCB1cGRhdGUsIHRo ZSB1cGRhdGUgbWF5IHN0aWxsIG5lZWQgdG8gdXBkYXRlIHN1bW1hcml6ZWQKLQkgKiBpbmRl eGVzLCBsZXN0IHdlIGZhaWwgdG8gdXBkYXRlIHRob3NlIHN1bW1hcmllcyBhbmQgZ2V0IGlu Y29ycmVjdAotCSAqIHJlc3VsdHMgKGZvciBleGFtcGxlLCBtaW5tYXggYm91bmRzIG9mIHRo ZSBibG9jayBtYXkgY2hhbmdlIHdpdGggdGhpcwotCSAqIHVwZGF0ZSkuCi0JICovCi0JaWYg KHVzZV9ob3RfdXBkYXRlKQotCXsKLQkJaWYgKHN1bW1hcml6ZWRfdXBkYXRlKQotCQkJKnVw ZGF0ZV9pbmRleGVzID0gVFVfU3VtbWFyaXppbmc7Ci0JCWVsc2UKLQkJCSp1cGRhdGVfaW5k ZXhlcyA9IFRVX05vbmU7Ci0JfQotCWVsc2UKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfQWxs OwotCiAJaWYgKG9sZF9rZXlfdHVwbGUgIT0gTlVMTCAmJiBvbGRfa2V5X2NvcGllZCkKIAkJ aGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7CiAKLQlibXNfZnJlZShob3RfYXR0cnMp OwotCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQlibXNf ZnJlZShpZF9hdHRycyk7Ci0JLyogbW9kaWZpZWQgYXR0cnMgaXMgcGFzc2VkIGluIGFuZCBm cmVlJ2QgYnkgdGhlIGNhbGxlciwgb3IgTlVMTCAqLwotCWJtc19mcmVlKGludGVyZXN0aW5n X2F0dHJzKTsKLQogCXJldHVybiBUTV9PazsKIH0KIApAQCAtNDM0OCw3ICs0MDgyLDcgQEAg bDI6CiAgKiBDb25maXJtIGFkZXF1YXRlIGxvY2sgaGVsZCBkdXJpbmcgaGVhcF91cGRhdGUo KSwgcGVyIHJ1bGVzIGZyb20KICAqIFJFQURNRS50dXBsb2NrIHNlY3Rpb24gIkxvY2tpbmcg dG8gd3JpdGUgaW5wbGFjZS11cGRhdGVkIHRhYmxlcyIuCiAgKi8KLXN0YXRpYyB2b2lkCit2 b2lkCiBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9yZWwoUmVsYXRpb24gcmVs YXRpb24sCiAJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLAogCQkJCQkJ CQkJIEhlYXBUdXBsZSBuZXd0dXApCkBAIC00NTEwLDYgKzQyNDQsMTYyIEBAIGhlYXBfYXR0 cl9lcXVhbHMoVHVwbGVEZXNjIHR1cGRlc2MsIGludCBhdHRybnVtLCBEYXR1bSB2YWx1ZTEs IERhdHVtIHZhbHVlMiwKIAl9CiB9CiAKKy8qCisgKiBIT1QgdXBkYXRlcyBhcmUgcG9zc2li bGUgd2hlbiBlaXRoZXI6IGEpIHRoZXJlIGFyZSBubyBtb2RpZmllZCBpbmRleGVkCisgKiBh dHRyaWJ1dGVzLCBvciBiKSB0aGUgbW9kaWZpZWQgYXR0cmlidXRlcyBhcmUgYWxsIG9uIHN1 bW1hcml6aW5nIGluZGV4ZXMuCisgKiBMYXRlciwgaW4gaGVhcF91cGRhdGUoKSwgd2UgY2Fu IGNob29zZSB0byBwZXJmb3JtIGEgSE9UIHVwZGF0ZSBpZiB0aGVyZSBpcworICogc3BhY2Ug b24gdGhlIHBhZ2UgZm9yIHRoZSBuZXcgdHVwbGUgYW5kIHRoZSBmb2xsb3dpbmcgY29kZSBo YXMgZGV0ZXJtaW5lZAorICogdGhhdCBIT1QgaXMgYWxsb3dlZC4KKyAqLworYm9vbAorSGVh cFVwZGF0ZUhvdEFsbG93YWJsZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgQml0bWFwc2V0 ICptaXhfYXR0cnMsIGJvb2wgKnN1bW1hcml6ZWRfb25seSkKK3sKKwlib29sCQlob3RfYWxs b3dlZDsKKworCS8qCisJICogTGV0J3MgYmUgb3B0aW1pc3RpYyBhbmQgc3RhcnQgb2ZmIGJ5 IGFzc3VtaW5nIHRoZSBiZXN0IGNhc2UsIG5vIGluZGV4ZXMKKwkgKiBuZWVkIHVwZGF0aW5n IGFuZCBIT1QgaXMgYWxsb3dhYmxlLgorCSAqLworCWhvdF9hbGxvd2VkID0gdHJ1ZTsKKwkq c3VtbWFyaXplZF9vbmx5ID0gZmFsc2U7CisKKwkvKgorCSAqIENoZWNrIGZvciBjYXNlIChh KTsgd2hlbiB0aGVyZSBhcmUgbm8gbW9kaWZpZWQgaW5kZXggYXR0cmlidXRlcyBIT1QgaXMK KwkgKiBhbGxvd2VkLgorCSAqLworCWlmIChibXNfaXNfZW1wdHkobWl4X2F0dHJzKSkKKwkJ aG90X2FsbG93ZWQgPSB0cnVlOworCWVsc2UKKwl7CisJCUJpdG1hcHNldCAgKnN1bV9hdHRy cyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCQkJ CQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEKTsKKworCQkvKgorCQkgKiBBdCBs ZWFzdCBvbmUgaW5kZXggYXR0cmlidXRlIHdhcyBtb2RpZmllZCwgYnV0IGlzIHRoaXMgY2Fz ZSAoYikKKwkJICogd2hlcmUgYWxsIHRoZSBtb2RpZmllZCBpbmRleCBhdHRyaWJ1dGVzIGFy ZSBvbmx5IHVzZWQgYnkKKwkJICogc3VtbWFyaXppbmcgaW5kZXhlcz8KKwkJICovCisJCWlm IChibXNfaXNfc3Vic2V0KG1peF9hdHRycywgc3VtX2F0dHJzKSkKKwkJeworCQkJaG90X2Fs bG93ZWQgPSB0cnVlOworCQkJKnN1bW1hcml6ZWRfb25seSA9IHRydWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQkvKgorCQkJICogTm93IHdlIGtub3cgdGhhdCBvbmUgb3IgbW9yZSBpbmRl eGVkIGF0dHJpYnV0ZSB3ZXJlIHVwZGF0ZWQgYW5kCisJCQkgKiB0aGF0IHRoZXJlIHdhcyBh dCBsZWFzdCBvbmUgb2YgdGhvc2UgYXR0cmlidXRlcyB3ZXJlIHJlZmVyZW5jZWQKKwkJCSAq IGJ5IGEgbm9uLXN1bW1hcml6aW5nIGluZGV4LiBIT1QgaXMgbm90IGFsbG93ZWQuCisJCQkg Ki8KKwkJCWhvdF9hbGxvd2VkID0gZmFsc2U7CisJCX0KKworCQlibXNfZnJlZShzdW1fYXR0 cnMpOworCX0KKworCXJldHVybiBob3RfYWxsb3dlZDsKK30KKworYm9vbAorSGVhcFVwZGF0 ZVJlcXVpcmVzUmVwbGljYUlkKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBCaXRtYXBzZXQg Km1peF9hdHRycywKKwkJCQkJCQlIZWFwVHVwbGVEYXRhICp0dXBsZSkKK3sKKwlib29sCQly ZXBfaWRfa2V5X3JlcXVpcmVkOworCUJpdG1hcHNldCAgKnJpZF9hdHRycywKKwkJCSAgICpp ZHhfYXR0cnM7CisKKwlyaWRfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChy ZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkp OworCisJaWYgKGJtc19pc19lbXB0eShyaWRfYXR0cnMpKQorCXsKKwkJYm1zX2ZyZWUocmlk X2F0dHJzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlkeF9hdHRycyA9IFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJf QklUTUFQX0lOREVYRUQpOworCisJLyoKKwkgKiBFeHRyYWN0UmVwbGljYXRJZGVudGl0eSgp IG5lZWRzIHRvIGtub3cgaWYgYSBtb2RpZmllZCBpbmRleGVkIGF0dHJidXRlCisJICogaXMg dXNlZCBhcyBhIHJlcGxpY2EgaW5kZW50aXR5IG9yIGlmIGFueSBvZiB0aGUgdW5tb2RpZmll ZCBpbmRleGVkCisJICogYXR0cmlidXRlcyBpbiB0aGUgb2xkIHR1cGxlIGFyZSBzdG9yZWQg ZXh0ZXJuYWxseSBhbmQgdXNlZCBhcyBhIHJlcGxpY2EKKwkgKiBpZGVudGl0eS4KKwkgKi8K KwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gYm1zX292ZXJsYXAobWl4X2F0dHJzLCByaWRfYXR0 cnMpOworCWlmICghcmVwX2lkX2tleV9yZXF1aXJlZCkKKwl7CisJCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJCWludAkJCWF0dGlkeDsKKwor CQkvKiBDaGVjayBvbmx5IHVubW9kaWZpZWQgaW5kZXhlZCByZXBsaWNhIGlkZW50aXR5IGtl eSBhdHRyaWJ1dGVzICovCisJCWlkeF9hdHRycyA9IGJtc19kZWxfbWVtYmVycyhpZHhfYXR0 cnMsIG1peF9hdHRycyk7CisJCXJpZF9hdHRycyA9IGJtc19pbnRfbWVtYmVycyhyaWRfYXR0 cnMsIGlkeF9hdHRycyk7CisKKwkJLyoKKwkJICogU3RhcnQgdHJhdmVyc2luZyB0aGUgYml0 bWFwIGFmdGVyIGFueSBzeXN0ZW0gb3Igd2hvbGUgcm93CisJCSAqIGF0dHJpYnV0ZXMsIHRo ZXkgZG9uJ3QgaW5mbHVlbmNlIHJlcGxpY2EgaWRlbnRpdHkuCisJCSAqLworCQlhdHRpZHgg PSAtRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQl3aGlsZSAoKGF0 dGlkeCA9IGJtc19uZXh0X21lbWJlcihyaWRfYXR0cnMsIGF0dGlkeCkpID49IDApCisJCXsK KwkJCS8qCisJCQkgKiBhdHRpZHggaXMgemVyby1iYXNlZCwgYXR0cm51bSBpcyB0aGUgbm9y bWFsIGF0dHJpYnV0ZSBudW1iZXIKKwkJCSAqLworCQkJQXR0ck51bWJlcglhdHRybnVtID0g YXR0aWR4ICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKwkJCURhdHVt CQl2YWx1ZTsKKwkJCWJvb2wJCWlzbnVsbDsKKworCQkJLyoKKwkJCSAqIFN5c3RlbSBhdHRy aWJ1dGVzIGFyZSBub3QgYWRkZWQgaW50byBpbnRlcmVzdGluZ19hdHRycyBpbgorCQkJICog cmVsY2FjaGUuCisJCQkgKi8KKwkJCUFzc2VydChhdHRybnVtID4gMCk7CisKKwkJCXZhbHVl ID0gaGVhcF9nZXRhdHRyKHR1cGxlLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNudWxsKTsKKwor CQkJLyogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUgc3RvcmVk IGV4dGVybmFsbHkgKi8KKwkJCWlmIChpc251bGwgfHwKKwkJCQlUdXBsZURlc2NDb21wYWN0 QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKKwkJCQljb250aW51 ZTsKKworCQkJLyogQ2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0ZSBpcyBzdG9y ZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgoc3RydWN0IHZh cmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJCQkJcmVwX2lkX2tl eV9yZXF1aXJlZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlibXNf ZnJlZShyaWRfYXR0cnMpOworCWJtc19mcmVlKGlkeF9hdHRycyk7CisKKwlyZXR1cm4gcmVw X2lkX2tleV9yZXF1aXJlZDsKK30KKworLyoKKyAqIElmIHdlJ3JlIG5vdCB1cGRhdGluZyBh bnkgImtleSIgYXR0cmlidXRlcywgd2UgY2FuIGdyYWIgYSB3ZWFrZXIgbG9jayB0eXBlLgor ICogVGhpcyBhbGxvd3MgZm9yIG1vcmUgY29uY3VycmVuY3kgd2hlbiB3ZSBhcmUgcnVubmlu ZyBzaW11bHRhbmVvdXNseSB3aXRoCisgKiBmb3JlaWduIGtleSBjaGVja3MuCisgKi8KK0xv Y2tUdXBsZU1vZGUKK0hlYXBVcGRhdGVEZXRlcm1pbmVMb2NrbW9kZShSZWxhdGlvbiByZWxh dGlvbiwgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMpCit7CisJTG9ja1R1cGxlTW9kZSBs b2NrbW9kZSA9IExvY2tUdXBsZUV4Y2x1c2l2ZTsKKworCUJpdG1hcHNldCAgKmtleV9hdHRy cyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCQkJ CSAgIElOREVYX0FUVFJfQklUTUFQX0tFWSk7CisKKwlpZiAoIWJtc19vdmVybGFwKG1peF9h dHRycywga2V5X2F0dHJzKSkKKwkJbG9ja21vZGUgPSBMb2NrVHVwbGVOb0tleUV4Y2x1c2l2 ZTsKKworCWJtc19mcmVlKGtleV9hdHRycyk7CisKKwlyZXR1cm4gbG9ja21vZGU7Cit9CisK IC8qCiAgKiBDaGVjayB3aGljaCBjb2x1bW5zIGFyZSBiZWluZyB1cGRhdGVkLgogICoKQEAg LTQ1MjAsMTIgKzQ0MTAsMTAgQEAgaGVhcF9hdHRyX2VxdWFscyhUdXBsZURlc2MgdHVwZGVz YywgaW50IGF0dHJudW0sIERhdHVtIHZhbHVlMSwgRGF0dW0gdmFsdWUyLAogICogbGlzdGVk IGFzIGludGVyZXN0aW5nKSBvZiB0aGUgb2xkIHR1cGxlIGlzIGEgbWVtYmVyIG9mIGV4dGVy bmFsX2NvbHMgYW5kIGlzCiAgKiBzdG9yZWQgZXh0ZXJuYWxseS4KICAqLwotc3RhdGljIEJp dG1hcHNldCAqCitCaXRtYXBzZXQgKgogSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0 aW9uIHJlbGF0aW9uLAogCQkJCQkJIEJpdG1hcHNldCAqaW50ZXJlc3RpbmdfY29scywKLQkJ CQkJCSBCaXRtYXBzZXQgKmV4dGVybmFsX2NvbHMsCi0JCQkJCQkgSGVhcFR1cGxlIG9sZHR1 cCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCSBib29sICpoYXNfZXh0ZXJuYWwpCisJCQkJ CQkgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCkKIHsKIAlpbnQJCQlhdHRp ZHg7CiAJQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOwpAQCAtNDU2NywxMCArNDQ1NSwx MSBAQCBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCiAJCX0K IAogCQkvKgotCQkgKiBFeHRyYWN0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gIFhYWCB0 aGlzIGlzIHByZXR0eSBpbmVmZmljaWVudAotCQkgKiBpZiB0aGVyZSBhcmUgbWFueSBpbmRl eGVkIGNvbHVtbnMuICBTaG91bGQgd2UgZG8gYSBzaW5nbGUKLQkJICogaGVhcF9kZWZvcm1f dHVwbGUgY2FsbCBvbiBlYWNoIHR1cGxlLCBpbnN0ZWFkPwlCdXQgdGhhdCBkb2Vzbid0Ci0J CSAqIHdvcmsgZm9yIHN5c3RlbSBjb2x1bW5zIC4uLgorCQkgKiBFeHRyYWN0IHRoZSBjb3Jy ZXNwb25kaW5nIHZhbHVlcy4KKwkJICoKKwkJICogWFhYIHRoaXMgaXMgcHJldHR5IGluZWZm aWNpZW50IGlmIHRoZXJlIGFyZSBtYW55IGluZGV4ZWQgY29sdW1ucy4KKwkJICogU2hvdWxk IHdlIGRvIGEgc2luZ2xlIGhlYXBfZGVmb3JtX3R1cGxlIGNhbGwgb24gZWFjaCB0dXBsZSwK KwkJICogaW5zdGVhZD8gQnV0IHRoYXQgZG9lc24ndCB3b3JrIGZvciBzeXN0ZW0gY29sdW1u cyAuLi4KIAkJICovCiAJCXZhbHVlMSA9IGhlYXBfZ2V0YXR0cihvbGR0dXAsIGF0dHJudW0s IHR1cGRlc2MsICZpc251bGwxKTsKIAkJdmFsdWUyID0gaGVhcF9nZXRhdHRyKG5ld3R1cCwg YXR0cm51bSwgdHVwZGVzYywgJmlzbnVsbDIpOwpAQCAtNDU4MSw0OCArNDQ3MCwxNDYgQEAg SGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJbW9kaWZp ZWQgPSBibXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKIAkJCWNvbnRpbnVlOwog CQl9Ci0KLQkJLyoKLQkJICogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2Fu J3QgYmUgc3RvcmVkIGV4dGVybmFsbHkuIE5vdGUKLQkJICogdGhhdCBzeXN0ZW0gYXR0cmli dXRlcyBjYW4ndCBiZSBzdG9yZWQgZXh0ZXJuYWxseS4KLQkJICovCi0JCWlmIChhdHRybnVt IDwgMCB8fCBpc251bGwxIHx8Ci0JCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBh dHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAq IENoZWNrIGlmIHRoZSBvbGQgdHVwbGUncyBhdHRyaWJ1dGUgaXMgc3RvcmVkIGV4dGVybmFs bHkgYW5kIGlzIGEKLQkJICogbWVtYmVyIG9mIGV4dGVybmFsX2NvbHMuCi0JCSAqLwotCQlp ZiAoVkFSQVRUX0lTX0VYVEVSTkFMKCh2YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2YWx1 ZTEpKSAmJgotCQkJYm1zX2lzX21lbWJlcihhdHRpZHgsIGV4dGVybmFsX2NvbHMpKQotCQkJ Kmhhc19leHRlcm5hbCA9IHRydWU7CiAJfQogCiAJcmV0dXJuIG1vZGlmaWVkOwogfQogCiAv KgotICoJc2ltcGxlX2hlYXBfdXBkYXRlIC0gcmVwbGFjZSBhIHR1cGxlCi0gKgotICogVGhp cyByb3V0aW5lIG1heSBiZSB1c2VkIHRvIHVwZGF0ZSBhIHR1cGxlIHdoZW4gY29uY3VycmVu dCB1cGRhdGVzIG9mCi0gKiB0aGUgdGFyZ2V0IHR1cGxlIGFyZSBub3QgZXhwZWN0ZWQgKGZv ciBleGFtcGxlLCBiZWNhdXNlIHdlIGhhdmUgYSBsb2NrCi0gKiBvbiB0aGUgcmVsYXRpb24g YXNzb2NpYXRlZCB3aXRoIHRoZSB0dXBsZSkuICBBbnkgZmFpbHVyZSBpcyByZXBvcnRlZAot ICogdmlhIGVyZXBvcnQoKS4KKyAqIFRoaXMgcm91dGluZSBtYXkgYmUgdXNlZCB0byB1cGRh dGUgYSB0dXBsZSB3aGVuIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiB0aGUKKyAqIHRhcmdldCB0 dXBsZSBhcmUgbm90IGV4cGVjdGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSB3ZSBoYXZlIGEg bG9jayBvbiB0aGUKKyAqIHJlbGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHVwbGUpLiAg QW55IGZhaWx1cmUgaXMgcmVwb3J0ZWQgdmlhIGVyZXBvcnQoKS4KICAqLwogdm9pZAotc2lt cGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRh dGEgKm90aWQsIEhlYXBUdXBsZSB0dXAsCitzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cGxl LAogCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQogewogCVRNX1Jl c3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsKIAlMb2NrVHVwbGVNb2RlIGxv Y2ttb2RlOworCUJ1ZmZlcgkJYnVmZmVyOworCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlk QnVmZmVyOworCVBhZ2UJCXBhZ2U7CisJQmxvY2tOdW1iZXIgYmxvY2s7CisJQml0bWFwc2V0 ICAqc3VtX2F0dHJzLAorCQkJICAgKm1peF9hdHRycywKKwkJCSAgICppZHhfYXR0cnM7CisJ SXRlbUlkCQlscDsKKwlIZWFwVHVwbGVEYXRhIG9sZHR1cDsKKwlib29sCQlob3RfYWxsb3dl ZDsKKwlib29sCQlzdW1tYXJpemVkX29ubHk7CisJYm9vbAkJcmVwX2lkX2tleV9yZXF1aXJl ZCA9IGZhbHNlOwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1 cCwKLQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3Qs Ci0JCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCAm bG9ja21vZGUsCi0JCQkJCQkgTlVMTCwgZmFsc2UsIHVwZGF0ZV9pbmRleGVzKTsKKwlBc3Nl cnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8qIENoZWFwLCBzaW1wbGlzdGlj IGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5cGUuICovCisJ QXNzZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cGxlLT50X2RhdGEpIDw9CisJCSAg IFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CisKKwkvKgorCSAq IEZvcmJpZCB0aGlzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiwgbGVzdCBpdCBhbGxv Y2F0ZSBhIGNvbWJvIENJRC4KKwkgKiBPdGhlciB3b3JrZXJzIG1pZ2h0IG5lZWQgdGhhdCBj b21ibyBDSUQgZm9yIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgd2UKKwkgKiBoYXZlIG5vIHBy b3Zpc2lvbiBmb3IgYnJvYWRjYXN0aW5nIGl0IHRvIHRoZW0uCisJICovCisJaWYgKElzSW5Q YXJhbGxlbE1vZGUoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRh dGUgdHVwbGVzIGR1cmluZyBhIHBhcmFsbGVsIG9wZXJhdGlvbiIpKSk7CisKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCisJY2hlY2tfbG9ja19pZl9pbnBsYWNlX3VwZGF0ZWFibGVf cmVsKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSk7CisjZW5kaWYKKworCS8qCisJICogV2UgbXVz dCBmZXRjaCB0aGVzZSBiaXRtYXBzIG9mIGF0dHJpYnV0ZXMgZnJvbSByZWxjYWNoZSB0byBi ZSBjaGVja2VkCisJICogZm9yIHZhcmlvdXMgb3BlcmF0aW9ucyBiZWxvdyBiZWZvcmUgb2J0 YWluaW5nIGEgYnVmZmVyIGxvY2sgYmVjYXVzZSBpZgorCSAqIHdlIGFyZSBkb2luZyBhbiB1 cGRhdGUgb24gb25lIG9mIHRoZSByZWxldmFudCBzeXN0ZW0gY2F0YWxvZ3Mgd2UgY291bGQK KwkgKiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlbSBsYXRlciBvbi4gUmVsY2Fj aGUgd2lsbCByZXR1cm4gY29waWVzCisJICogb2YgZWFjaCBiaXRtYXAsIHNvIHdlIG5lZWQg bm90IHdvcnJ5IGFib3V0IHJlbGNhY2hlIGZsdXNoIGhhcHBlbmluZworCSAqIG1pZHdheSB0 aHJvdWdoIHRoaXMgb3BlcmF0aW9uLgorCSAqLworCWlkeF9hdHRycyA9IFJlbGF0aW9uR2V0 SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklU TUFQX0lOREVYRUQpOworCXN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFw KHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIElOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQp OworCisJYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOworCUlOSkVD VElPTl9QT0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOworCWJ1ZmZlciA9 IFJlYWRCdWZmZXIocmVsYXRpb24sIGJsb2NrKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWZmZXIpOworCisJLyoKKwkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4gdGhl IHZpc2liaWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bworCSAqIGJlIG5lY2Vzc2Fy eS4gIFNpbmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1p Z2h0IGJlCisJICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBu ZWVkIHRvIHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQorCSAqIHRoZSBsb2NrLgorCSAqLworCWlm IChQYWdlSXNBbGxWaXNpYmxlKHBhZ2UpKQorCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlv biwgYmxvY2ssICZ2bWJ1ZmZlcik7CisKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xP Q0tfRVhDTFVTSVZFKTsKKworCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRl ckdldE9mZnNldE51bWJlcihvdGlkKSk7CisKKwkvKgorCSAqIFVzdWFsbHksIGEgYnVmZmVy IHBpbiBhbmQvb3Igc25hcHNob3QgYmxvY2tzIHBydW5pbmcgb2Ygb3RpZCwgZW5zdXJpbmcK KwkgKiB3ZSBzZWUgTFBfTk9STUFMIGhlcmUuICBXaGVuIHRoZSBvdGlkIG9yaWdpbiBpcyBh IHN5c2NhY2hlLCB3ZSBtYXkgaGF2ZQorCSAqIG5laXRoZXIgYSBwaW4gbm9yIGEgc25hcHNo b3QuICBIZW5jZSwgd2UgbWF5IHNlZSBvdGhlciBMUF8gc3RhdGVzLCBlYWNoCisJICogb2Yg d2hpY2ggaW5kaWNhdGVzIGNvbmN1cnJlbnQgcHJ1bmluZy4KKwkgKgorCSAqIEZhaWxpbmcg d2l0aCBUTV9VcGRhdGVkIHdvdWxkIGJlIG1vc3QgYWNjdXJhdGUuICBIb3dldmVyLCB1bmxp a2Ugb3RoZXIKKwkgKiBUTV9VcGRhdGVkIHNjZW5hcmlvcywgd2UgZG9uJ3Qga25vdyB0aGUg c3VjY2Vzc29yIGN0aWQgaW4gTFBfVU5VU0VEIGFuZAorCSAqIExQX0RFQUQgY2FzZXMuICBX aGlsZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBUTV9VcGRhdGVkIGFuZCBUTV9EZWxldGVk CisJICogZG9lcyBtYXR0ZXIgdG8gU1FMIHN0YXRlbWVudHMgVVBEQVRFIGFuZCBNRVJHRSwg dGhvc2UgU1FMIHN0YXRlbWVudHMKKwkgKiBob2xkIGEgc25hcHNob3QgdGhhdCBlbnN1cmVz IExQX05PUk1BTC4gIEhlbmNlLCB0aGUgY2hvaWNlIGJldHdlZW4KKwkgKiBUTV9VcGRhdGVk IGFuZCBUTV9EZWxldGVkIGFmZmVjdHMgb25seSB0aGUgd29yZGluZyBvZiBlcnJvciBtZXNz YWdlcy4KKwkgKiBTZXR0bGUgb24gVE1fRGVsZXRlZCwgZm9yIHR3byByZWFzb25zLiAgRmly c3QsIGl0IGF2b2lkcyBjb21wbGljYXRpbmcKKwkgKiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB3 aGVuIHRtZmQtPmN0aWQgaXMgdmFsaWQuICBTZWNvbmQsIGl0IGNyZWF0ZXMKKwkgKiBlcnJv ciBsb2cgZXZpZGVuY2UgdGhhdCB3ZSB0b29rIHRoaXMgYnJhbmNoLgorCSAqCisJICogU2lu Y2UgaXQncyBwb3NzaWJsZSB0byBzZWUgTFBfVU5VU0VEIGF0IG90aWQsIGl0J3MgYWxzbyBw b3NzaWJsZSB0byBzZWUKKwkgKiBMUF9OT1JNQUwgZm9yIGEgdHVwbGUgdGhhdCByZXBsYWNl ZCBMUF9VTlVTRUQuICBJZiBpdCdzIGEgdHVwbGUgZm9yIGFuCisJICogdW5yZWxhdGVkIHJv dywgd2UnbGwgZmFpbCB3aXRoICJkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSIuCisJICogWFhYIGlmIG90aWQgaXMgdGhlIGxpdmUsIG5ld2VyIHZlcnNpb24gb2YgdGhl IG5ld3R1cCByb3csIHdlJ2xsIGRpc2NhcmQKKwkgKiBjaGFuZ2VzIG9yaWdpbmF0aW5nIGlu IHZlcnNpb25zIG9mIHRoaXMgY2F0YWxvZyByb3cgYWZ0ZXIgdGhlIHZlcnNpb24KKwkgKiB0 aGUgY2FsbGVyIGdvdCBmcm9tIHN5c2NhY2hlLiAgU2VlIHN5c2NhY2hlLXVwZGF0ZS1wcnVu ZWQuc3BlYy4KKwkgKi8KKwlpZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKKwl7CisJCUFzc2Vy dChSZWxhdGlvblN1cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikp KTsKKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCWlmICh2bWJ1ZmZlciAh PSBJbnZhbGlkQnVmZmVyKQorCQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJCSp1cGRh dGVfaW5kZXhlcyA9IFRVX05vbmU7CisKKwkJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKwkJYm1z X2ZyZWUoc3VtX2F0dHJzKTsKKwkJLyogbWl4X2F0dHJzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQg Ki8KKworCQllbG9nKEVSUk9SLCAidHVwbGUgY29uY3VycmVudGx5IGRlbGV0ZWQiKTsKKwl9 CisKKwkvKgorCSAqIFBhcnRpYWxseSBjb25zdHJ1Y3QgdGhlIG9sZHR1cCBmb3IgSGVhcERl dGVybWluZUNvbHVtbnNJbmZvIHRvIHdvcmsgYW5kCisJICogdGhlbiBwYXNzIHRoYXQgb24g dG8gaGVhcF91cGRhdGUuCisJICovCisJb2xkdHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdl dFJlbGlkKHJlbGF0aW9uKTsKKwlvbGR0dXAudF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikg UGFnZUdldEl0ZW0ocGFnZSwgbHApOworCW9sZHR1cC50X2xlbiA9IEl0ZW1JZEdldExlbmd0 aChscCk7CisJb2xkdHVwLnRfc2VsZiA9ICpvdGlkOworCisJbWl4X2F0dHJzID0gSGVhcERl dGVybWluZUNvbHVtbnNJbmZvKHJlbGF0aW9uLCBpZHhfYXR0cnMsICZvbGR0dXAsIHR1cGxl KTsKKwlsb2NrbW9kZSA9IEhlYXBVcGRhdGVEZXRlcm1pbmVMb2NrbW9kZShyZWxhdGlvbiwg bWl4X2F0dHJzKTsKKwlyZXBfaWRfa2V5X3JlcXVpcmVkID0gSGVhcFVwZGF0ZVJlcXVpcmVz UmVwbGljYUlkKHJlbGF0aW9uLCBtaXhfYXR0cnMsICZvbGR0dXApOworCWhvdF9hbGxvd2Vk ID0gSGVhcFVwZGF0ZUhvdEFsbG93YWJsZShyZWxhdGlvbiwgbWl4X2F0dHJzLCAmc3VtbWFy aXplZF9vbmx5KTsKKworCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCAmb2xkdHVw LCB0dXBsZSwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCSBJbnZhbGlkU25h cHNob3QsIHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKKwkJCQkJCSAmdG1mZCwgJmxv Y2ttb2RlLCBidWZmZXIsIHBhZ2UsIGJsb2NrLCBscCwgaG90X2FsbG93ZWQsCisJCQkJCQkg dm1idWZmZXIsIHJlcF9pZF9rZXlfcmVxdWlyZWQpOworCisJKnVwZGF0ZV9pbmRleGVzID0g VFVfTm9uZTsKIAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVk OgpAQCAtNDYzMiw2ICs0NjE5LDEwIEBAIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgdHVwCiAK IAkJY2FzZSBUTV9PazoKIAkJCS8qIGRvbmUgc3VjY2Vzc2Z1bGx5ICovCisJCQlpZiAoIUhl YXBUdXBsZUlzSGVhcE9ubHkodHVwbGUpKQorCQkJCSp1cGRhdGVfaW5kZXhlcyA9IFRVX0Fs bDsKKwkJCWVsc2UgaWYgKHN1bW1hcml6ZWRfb25seSkKKwkJCQkqdXBkYXRlX2luZGV4ZXMg PSBUVV9TdW1tYXJpemluZzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVE1fVXBkYXRlZDoKQEAg LTQ2NDYsOCArNDYzNywxMCBAQCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRp b24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIHR1cAogCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBoZWFwX3VwZGF0ZSBzdGF0dXM6ICV1IiwgcmVzdWx0 KTsKIAkJCWJyZWFrOwogCX0KLX0KIAorCWJtc19mcmVlKGlkeF9hdHRycyk7CisJYm1zX2Zy ZWUoc3VtX2F0dHJzKTsKK30KIAogLyoKICAqIFJldHVybiB0aGUgTXVsdGlYYWN0U3RhdHVz IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHR1cGxlIGxvY2sgbW9kZS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDJkNzRmYTkwYzdmLi41 NGQxMTdlYTE1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgogCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1 cGxlIHR1cGxlLApAQCAtMzE2LDE4ICszMTcsOTcgQEAgc3RhdGljIFRNX1Jlc3VsdAogaGVh cGFtX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90IHNu YXBzaG90LCBTbmFwc2hvdCBjcm9zc2NoZWNrLAogCQkJCQlib29sIHdhaXQsIFRNX0ZhaWx1 cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJY29uc3QgQml0 bWFwc2V0ICptb2RpZmllZF9hdHRycywgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMpCisJCQkJCWNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBUVV9VcGRhdGVJbmRleGVz ICp1cGRhdGVfaW5kZXhlcykKIHsKLQlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKLQlIZWFw VHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91 bGRGcmVlKTsKKwlib29sCQlzaG91bGRGcmVlID0gZmFsc2U7CisJSGVhcFR1cGxlCXR1cGxl OworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBmYWxzZTsKKwlib29sCQlob3RfYWxs b3dlZDsKKwlib29sCQlzdW1tYXJpemVkX29ubHk7CisJSGVhcFR1cGxlRGF0YSBvbGR0dXA7 CisJQnVmZmVyCQlidWZmZXI7CisJQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CisJUGFnZQkJcGFnZTsKKwlCbG9ja051bWJlciBibG9jazsKKwlJdGVtSWQJCWxwOwogCVRN X1Jlc3VsdAlyZXN1bHQ7CiAKKwlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsK KworCXR1cGxlID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxk RnJlZSk7CisKKwkvKiBDaGVhcCwgc2ltcGxpc3RpYyBjaGVjayB0aGF0IHRoZSB0dXBsZSBt YXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLworCUFzc2VydChIZWFwVHVwbGVIZWFkZXJH ZXROYXR0cyh0dXBsZS0+dF9kYXRhKSA8PQorCQkgICBSZWxhdGlvbkdldE51bWJlck9mQXR0 cmlidXRlcyhyZWxhdGlvbikpOworCisJLyoKKwkgKiBGb3JiaWQgdGhpcyBkdXJpbmcgYSBw YXJhbGxlbCBvcGVyYXRpb24sIGxlc3QgaXQgYWxsb2NhdGUgYSBjb21ibyBDSUQuCisJICog T3RoZXIgd29ya2VycyBtaWdodCBuZWVkIHRoYXQgY29tYm8gQ0lEIGZvciB2aXNpYmlsaXR5 IGNoZWNrcywgYW5kIHdlCisJICogaGF2ZSBubyBwcm92aXNpb24gZm9yIGJyb2FkY2FzdGlu ZyBpdCB0byB0aGVtLgorCSAqLworCWlmIChJc0luUGFyYWxsZWxNb2RlKCkpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NU QVRFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHR1cGxlcyBkdXJpbmcgYSBwYXJh bGxlbCBvcGVyYXRpb24iKSkpOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWNo ZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChyZWxhdGlvbiwgb3RpZCwgdHVw bGUpOworI2VuZGlmCisKKwlob3RfYWxsb3dlZCA9IEhlYXBVcGRhdGVIb3RBbGxvd2FibGUo cmVsYXRpb24sIG1peF9hdHRycywgJnN1bW1hcml6ZWRfb25seSk7CisJKmxvY2ttb2RlID0g SGVhcFVwZGF0ZURldGVybWluZUxvY2ttb2RlKHJlbGF0aW9uLCBtaXhfYXR0cnMpOworCisJ YmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKG90aWQpOworCUlOSkVDVElPTl9Q T0lOVCgiaGVhcF91cGRhdGUtYmVmb3JlLXBpbiIsIE5VTEwpOworCWJ1ZmZlciA9IFJlYWRC dWZmZXIocmVsYXRpb24sIGJsb2NrKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIp OworCisJLyoKKwkgKiBCZWZvcmUgbG9ja2luZyB0aGUgYnVmZmVyLCBwaW4gdGhlIHZpc2li aWxpdHkgbWFwIHBhZ2UgaWYgaXQgYXBwZWFycyB0bworCSAqIGJlIG5lY2Vzc2FyeS4gIFNp bmNlIHdlIGhhdmVuJ3QgZ290IHRoZSBsb2NrIHlldCwgc29tZW9uZSBlbHNlIG1pZ2h0IGJl CisJICogaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGlzLCBzbyB3ZSdsbCBuZWVkIHRv IHJlY2hlY2sgYWZ0ZXIgd2UgaGF2ZQorCSAqIHRoZSBsb2NrLgorCSAqLworCWlmIChQYWdl SXNBbGxWaXNpYmxlKHBhZ2UpKQorCQl2aXNpYmlsaXR5bWFwX3BpbihyZWxhdGlvbiwgYmxv Y2ssICZ2bWJ1ZmZlcik7CisKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhD TFVTSVZFKTsKKworCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBJdGVtUG9pbnRlckdldE9m ZnNldE51bWJlcihvdGlkKSk7CisKKwlBc3NlcnQoSXRlbUlkSXNOb3JtYWwobHApKTsKKwor CW9sZHR1cC50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJb2xk dHVwLnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBhZ2UsIGxwKTsK KwlvbGR0dXAudF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCW9sZHR1cC50X3NlbGYg PSAqb3RpZDsKKworCXJlcF9pZF9rZXlfcmVxdWlyZWQgPSBIZWFwVXBkYXRlUmVxdWlyZXNS ZXBsaWNhSWQocmVsYXRpb24sIG1peF9hdHRycywgJm9sZHR1cCk7CisKKyNpZiAxCisJewor CQlCaXRtYXBzZXQgICpob3RfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChy ZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7 CisJCUJpdG1hcHNldCAgKmlkX2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAo cmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCSAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlf S0VZKTsKKwkJQml0bWFwc2V0ICAqaGRjaV9hdHRycyA9IEhlYXBEZXRlcm1pbmVDb2x1bW5z SW5mbyhyZWxhdGlvbiwgaG90X2F0dHJzLAorCQkJCQkJCQkJCQkJCQkgICZvbGR0dXAsIHR1 cGxlKTsKKworCQlBc3NlcnQoYm1zX2VxdWFsKG1peF9hdHRycywgaGRjaV9hdHRycykpOwor CQlibXNfZnJlZShob3RfYXR0cnMpOworCQlibXNfZnJlZShpZF9hdHRycyk7CisJCWJtc19m cmVlKGhkY2lfYXR0cnMpOworCX0KKyNlbmRpZgorCiAJLyogVXBkYXRlIHRoZSB0dXBsZSB3 aXRoIHRhYmxlIG9pZCAqLwogCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsYXRpb24pOwogCXR1cGxlLT50X3RhYmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lk OwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cGxlLCBjaWQs IGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1mZCwgbG9ja21vZGUsIG1vZGlmaWVkX2F0 dHJzLCB0cnVlLCB1cGRhdGVfaW5kZXhlcyk7CisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVs YXRpb24sICZvbGR0dXAsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQsCisJ CQkJCQkgbG9ja21vZGUsIGJ1ZmZlciwgcGFnZSwgYmxvY2ssIGxwLCBob3RfYWxsb3dlZCwK KwkJCQkJCSB2bWJ1ZmZlciwgcmVwX2lkX2tleV9yZXF1aXJlZCk7CisKIAlJdGVtUG9pbnRl ckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIAogCS8qCkBAIC0zMzUs MjEgKzQxNSwxNiBAQCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJ dGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkgKgogCSAqIE5vdGU6 IGhlYXBfdXBkYXRlIHJldHVybnMgdGhlIHRpZCAobG9jYXRpb24pIG9mIHRoZSBuZXcgdHVw bGUgaW4gdGhlCiAJICogdF9zZWxmIGZpZWxkLgotCSAqCi0JICogSWYgdGhlIHVwZGF0ZSBp cyBub3QgSE9ULCB3ZSBtdXN0IHVwZGF0ZSBhbGwgaW5kZXhlcy4gSWYgdGhlIHVwZGF0ZSBp cwotCSAqIEhPVCwgaXQgY291bGQgYmUgdGhhdCB3ZSB1cGRhdGVkIHN1bW1hcml6ZWQgY29s dW1ucywgc28gd2UgZWl0aGVyCi0JICogdXBkYXRlIG9ubHkgc3VtbWFyaXplZCBpbmRleGVz LCBvciBub25lIGF0IGFsbC4KIAkgKi8KKwkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwog CWlmIChyZXN1bHQgIT0gVE1fT2spCi0JewotCQlBc3NlcnQoKnVwZGF0ZV9pbmRleGVzID09 IFRVX05vbmUpOwogCQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOwotCX0KIAllbHNlIGlm ICghSGVhcFR1cGxlSXNIZWFwT25seSh0dXBsZSkpCi0JCUFzc2VydCgqdXBkYXRlX2luZGV4 ZXMgPT0gVFVfQWxsKTsKKwkJKnVwZGF0ZV9pbmRleGVzID0gVFVfQWxsOworCWVsc2UgaWYg KHN1bW1hcml6ZWRfb25seSkKKwkJKnVwZGF0ZV9pbmRleGVzID0gVFVfU3VtbWFyaXppbmc7 CiAJZWxzZQotCQlBc3NlcnQoKCp1cGRhdGVfaW5kZXhlcyA9PSBUVV9TdW1tYXJpemluZykg fHwKLQkJCSAgICgqdXBkYXRlX2luZGV4ZXMgPT0gVFVfTm9uZSkpOworCQkqdXBkYXRlX2lu ZGV4ZXMgPSBUVV9Ob25lOwogCiAJaWYgKHNob3VsZEZyZWUpCiAJCXBmcmVlKHR1cGxlKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRleCBlOTVkZGUyZGYyZS4uMmQ3ZTJj NDY1ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTE5MzMsNDYgKzE5 MzMsMzEgQEAgRXhlY0ZldGNoU2xvdEhlYXBUdXBsZURhdHVtKFR1cGxlVGFibGVTbG90ICpz bG90KQogLyoKICAqIEV4ZWNDb21wYXJlU2xvdHMKICAqCi0gKiBDb21wYXJlIG9sZCBhbmQg bmV3IFR1cGxlVGFibGVTbG90cyB0byBkZXRlY3Qgd2hpY2ggYXR0cmlidXRlcyBoYXZlIGNo YW5nZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgotICog MSkgQWZ0ZXIgdHJpZ2dlciBleGVjdXRpb246IGRldGVjdCB0cmlnZ2VyLW1vZGlmaWVkIGNv bHVtbnMKLSAqICAgIChwYXNzIGV4Y2x1ZGluZz1leHBsaWNpdGx5IFNFVCBjb2x1bW5zLCBp bmNsdWRpbmc9TlVMTCkKLSAqIDIpIEluZGV4IG1haW50ZW5hbmNlOiBkZXRlY3QgY2hhbmdl cyBpbiBpbmRleGVkIGNvbHVtbnMKLSAqICAgIChwYXNzIGluY2x1ZGluZz1pbmRleGVkIEFO RCBleHBsaWNpdGx5IFNFVCBjb2x1bW5zLCBleGNsdWRpbmc9TlVMTCkKLSAqCi0gKiBQYXJh bWV0ZXJzOgotICogICByZXN1bHRSZWxJbmZvIC0gcmVsYXRpb24gaW5mb3JtYXRpb24KLSAq ICAgZXhjbHVkaW5nIC0gYml0bWFwc2V0IG9mIGF0dHJpYnV0ZXMgdG8gc2tpcAotICogICBp bmNsdWRpbmcgLSBiaXRtYXBzZXQgb2YgYXR0cmlidXRlcyB0byBjaGVjawotICogICB0dXBk ZXNjIC0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbikKLSAqICAgb2xkX3R0cyAtIG9sZCB0 dXBsZSBzbG90Ci0gKiAgIG5ld190dHMgLSBuZXcgdHVwbGUgc2xvdAotICoKLSAqIElmIGlu Y2x1ZGluZyBpcyBOVUxMLCBjaGVjayBhbGwgYXR0cmlidXRlcyBFWENFUFQgdGhvc2UgaW4g ZXhjbHVkaW5nCi0gKiBJZiBleGNsdWRpbmcgaXMgTlVMTCwgY2hlY2sgT05MWSBhdHRyaWJ1 dGVzIGluIGluY2x1ZGluZwotICogSWYgYm90aCBhcmUgTlVMTCwgY2hlY2sgYWxsIGF0dHJp YnV0ZXMKLSAqCi0gKiBSZXR1cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBpbmRpY2Vz ICh1c2luZyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyCi0gKiBjb252ZW50 aW9uKSB0aGF0IGRpZmZlciBiZXR3ZWVuIHRoZSB0d28gc2xvdHMuCisgKiBDb21wYXJlIHRo ZSBzdWJzZXQgb2YgYXR0cmlidXRlcyBpbiBhdHRycyBiZXd0d2VlbiBUdXBsZVRhYmxlU2xv dHMgdG8gZGV0ZWN0CisgKiB3aGljaCBhdHRyaWJ1dGVzIGhhdmUgY2hhbmdlZC4KKyAqCisg KiBSZXR1cm5zIGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBpbmRpY2VzICh1c2luZworICog Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBjb252ZW50aW9uKSB0aGF0IGRp ZmZlciBiZXR3ZWVuIHRoZSB0d28KKyAqIHNsb3RzLgogICovCiBCaXRtYXBzZXQgKgotRXhl Y0NvbXBhcmVTbG90QXR0cnMoVHVwbGVEZXNjIHR1cGRlc2MsCi0JCQkJCSBjb25zdCBCaXRt YXBzZXQgKmF0dHJzLAotCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm9sZF90dHMsCi0JCQkJCSBU dXBsZVRhYmxlU2xvdCAqbmV3X3R0cykKK0V4ZWNDb21wYXJlU2xvdEF0dHJzKFR1cGxlRGVz YyB0dXBkZXNjLCBjb25zdCBCaXRtYXBzZXQgKmF0dHJzLAorCQkJCQkgVHVwbGVUYWJsZVNs b3QgKnMxLCBUdXBsZVRhYmxlU2xvdCAqczIpCiB7CiAJaW50CQkJYXR0aWR4ID0gLTE7CiAJ Qml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOwogCisJLyogWFhYIHdoYXQgaWYgc2xvdHMg ZG9uJ3Qgc2hhcmUgdGhlIHNhbWUgdHVwbGVEZXNjcmlwdG9yLi4uICovCisJLyogQXNzZXJ0 KHMxLT50dHNfdHVwbGVEZXNjcmlwdG9yID09IHMyLT50dHNfdHVwbGVEZXNjcmlwdG9yKTsg Ki8KKwogCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgp KSA+PSAwKQogCXsKIAkJLyogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhl IG5vcm1hbCBhdHRyaWJ1dGUgbnVtYmVyICovCiAJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0 dGlkeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7Ci0JCURhdHVtCQlv bGRfdmFsdWUsCi0JCQkJCW5ld192YWx1ZTsKLQkJYm9vbAkJb2xkX251bGwsCi0JCQkJCW5l d19udWxsOworCQlEYXR1bQkJdmFsdWUxLAorCQkJCQl2YWx1ZTI7CisJCWJvb2wJCW51bGwx LAorCQkJCQludWxsMjsKIAkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0OwogCiAJCS8qCkBAIC0y MDAxLDIxICsxOTg2LDIxIEBAIEV4ZWNDb21wYXJlU2xvdEF0dHJzKFR1cGxlRGVzYyB0dXBk ZXNjLAogCQl9CiAKIAkJYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgYXR0 cm51bSAtIDEpOwotCQlvbGRfdmFsdWUgPSBzbG90X2dldGF0dHIob2xkX3R0cywgYXR0cm51 bSwgJm9sZF9udWxsKTsKLQkJbmV3X3ZhbHVlID0gc2xvdF9nZXRhdHRyKG5ld190dHMsIGF0 dHJudW0sICZuZXdfbnVsbCk7CisJCXZhbHVlMSA9IHNsb3RfZ2V0YXR0cihzMSwgYXR0cm51 bSwgJm51bGwxKTsKKwkJdmFsdWUyID0gc2xvdF9nZXRhdHRyKHMyLCBhdHRybnVtLCAmbnVs bDIpOwogCiAJCS8qIEEgY2hhbmdlIHRvL2Zyb20gTlVMTCwgc28gbm90IGVxdWFsICovCi0J CWlmIChvbGRfbnVsbCAhPSBuZXdfbnVsbCkKKwkJaWYgKG51bGwxICE9IG51bGwyKQogCQl7 CiAJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOwogCQkJ Y29udGludWU7CiAJCX0KIAogCQkvKiBCb3RoIE5VTEwsIG5vIGNoYW5nZS91bm1vZGlmaWVk ICovCi0JCWlmIChvbGRfbnVsbCkKKwkJaWYgKG51bGwyKQogCQkJY29udGludWU7CiAKLQkJ aWYgKCFkYXR1bV9pbWFnZV9lcShvbGRfdmFsdWUsIG5ld192YWx1ZSwgYXR0LT5hdHRieXZh bCwgYXR0LT5hdHRsZW4pKQorCQlpZiAoIWRhdHVtX2ltYWdlX2VxKHZhbHVlMSwgdmFsdWUy LCBhdHQtPmF0dGJ5dmFsLCBhdHQtPmF0dGxlbikpCiAJCQltb2RpZmllZCA9IGJtc19hZGRf bWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuYwppbmRleCAxODc5NmJhZWQyOC4uMDgyZGVlOTQ0MjIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0yMTMsNyArMjEzLDcg QEAgRXhlY0NoZWNrSW5kZXhlZEF0dHJzRm9yQ2hhbmdlcyhSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVzdWx0UmVsSW5mby0+cmlfUmVs YXRpb25EZXNjOwogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxh dGlvbik7CiAJQml0bWFwc2V0ICAqYXR0cnMsCi0JCQkgICAqbWl4X2F0dHJzOworCQkJICAg Km1peF9hdHRycyA9IE5VTEw7CiAKIAkvKiBJZiBubyBpbmRleGVzLCB3ZSdyZSBkb25lICov CiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPT0gMCkKQEAgLTIyNyw4ICsy MjcsOSBAQCBFeGVjQ2hlY2tJbmRleGVkQXR0cnNGb3JDaGFuZ2VzKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChy ZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCk7CiAJYXR0cnMgPSBibXNfaW50 X21lbWJlcnMoYXR0cnMsIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyhyZXN1bHRSZWxJbmZvLCBl c3RhdGUpKTsKIAotCS8qIEZpbmQgb3V0IHdoaWNoLCBpZiBhbnksIG1vZGlmaWVkIGluZGV4 ZWQgYXR0cmlidXRlcyBjaGFuZ2VkICovCi0JbWl4X2F0dHJzID0gRXhlY0NvbXBhcmVTbG90 QXR0cnModHVwZGVzYywgYXR0cnMsIG9sZF90dHMsIG5ld190dHMpOworCS8qIEZpbmQgb3V0 IHdoaWNoLCBpZiBhbnksIG1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyBjaGFuZ2VkIHZh bHVlICovCisJaWYgKCFibXNfaXNfZW1wdHkoYXR0cnMpKQorCQltaXhfYXR0cnMgPSBFeGVj Q29tcGFyZVNsb3RBdHRycyh0dXBkZXNjLCBhdHRycywgb2xkX3R0cywgbmV3X3R0cyk7CiAK IAlibXNfZnJlZShhdHRycyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmlu ZGV4IDU0N2NmMWQwNTRkLi5mMzA1MDVkOGFlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jCkBAIC0yNDc1LDcgKzI0NzUsNiBAQCBSZWxhdGlvbkRlc3Ryb3lSZWxhdGlv bihSZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZW1lbWJlcl90dXBkZXNjKQogCWJtc19mcmVl KHJlbGF0aW9uLT5yZF9rZXlhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfcGthdHRy KTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfaWRhdHRyKTsKLQlibXNfZnJlZShyZWxhdGlv bi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFy aXplZGF0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pbmRleGVkYXR0cik7CiAJaWYg KHJlbGF0aW9uLT5yZF9wdWJkZXNjKQpAQCAtNTI3Nyw4ICs1Mjc2LDcgQEAgUmVsYXRpb25H ZXRJbmRleFByZWRpY2F0ZShSZWxhdGlvbiByZWxhdGlvbikKICAqCQkJCQkJCQkJKGJld2Fy ZTogZXZlbiBpZiBQSyBpcyBkZWZlcnJhYmxlISkKICAqCUlOREVYX0FUVFJfQklUTUFQX0lE RU5USVRZX0tFWQlDb2x1bW5zIGluIHRoZSB0YWJsZSdzIHJlcGxpY2EgaWRlbnRpdHkKICAq CQkJCQkJCQkJaW5kZXggKGVtcHR5IGlmIEZVTEwpCi0gKglJTkRFWF9BVFRSX0JJVE1BUF9I T1RfQkxPQ0tJTkcJQ29sdW1ucyB0aGF0IGJsb2NrIHVwZGF0ZXMgZnJvbSBiZWluZyBIT1QK LSAqCUlOREVYX0FUVFJfQklUTUFQX1NVTU1BUklaRUQJQ29sdW1ucyBpbmNsdWRlZCBpbiBz dW1tYXJpemluZyBpbmRleGVzCisgKglJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVECUNv bHVtbnMgb25seSBpbmNsdWRlZCBpbiBzdW1tYXJpemluZyBpbmRleGVzCiAgKglJTkRFWF9B VFRSX0JJVE1BUF9JTkRFWEVECQlDb2x1bW5zIHJlZmVyZW5jZWQgYnkgaW5kZXhlcwogICoK ICAqIEF0dHJpYnV0ZSBudW1iZXJzIGFyZSBvZmZzZXQgYnkgRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlciBzbyB0aGF0CkBAIC01MzAyLDkgKzUzMDAsOCBAQCBSZWxhdGlv bkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFw S2luZCBhdHRyS2luZCkKIAlCaXRtYXBzZXQgICp1aW5kZXhhdHRyczsJLyogY29sdW1ucyBp biB1bmlxdWUgaW5kZXhlcyAqLwogCUJpdG1hcHNldCAgKnBraW5kZXhhdHRyczsJLyogY29s dW1ucyBpbiB0aGUgcHJpbWFyeSBpbmRleCAqLwogCUJpdG1hcHNldCAgKmlkaW5kZXhhdHRy czsJLyogY29sdW1ucyBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSAqLwotCUJpdG1hcHNldCAg KmhvdGJsb2NraW5nYXR0cnM7CS8qIGNvbHVtbnMgd2l0aCBIT1QgYmxvY2tpbmcgaW5kZXhl cyAqLworCUJpdG1hcHNldCAgKnN1bW1hcml6ZWRhdHRyczsJLyogY29sdW1ucyBvbmx5IGlu IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KIAlCaXRtYXBzZXQgICppbmRleGVkYXR0cnM7CS8q IGNvbHVtbnMgcmVmZXJlbmNlZCBieSBpbmRleGVzICovCi0JQml0bWFwc2V0ICAqc3VtbWFy aXplZGF0dHJzOwkvKiBjb2x1bW5zIHdpdGggc3VtbWFyaXppbmcgaW5kZXhlcyAqLwogCUxp c3QJICAgKmluZGV4b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7CiAJT2lk CQkJcmVscGtpbmRleDsKQEAgLTUzMjMsOCArNTMyMCw2IEBAIFJlbGF0aW9uR2V0SW5kZXhB dHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJL aW5kKQogCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfcGthdHRyKTsKIAkJCWNh c2UgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZOgogCQkJCXJldHVybiBibXNfY29w eShyZWxhdGlvbi0+cmRfaWRhdHRyKTsKLQkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSE9U X0JMT0NLSU5HOgotCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaG90YmxvY2tp bmdhdHRyKTsKIAkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRDoKIAkJCQly ZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKIAkJCWNhc2Ug SU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKQEAgLTUzNzEsNyArNTM2Niw2IEBAIHJlc3Rh cnQ6CiAJdWluZGV4YXR0cnMgPSBOVUxMOwogCXBraW5kZXhhdHRycyA9IE5VTEw7CiAJaWRp bmRleGF0dHJzID0gTlVMTDsKLQlob3RibG9ja2luZ2F0dHJzID0gTlVMTDsKIAlzdW1tYXJp emVkYXR0cnMgPSBOVUxMOwogCWluZGV4ZWRhdHRycyA9IE5VTEw7CiAJZm9yZWFjaChsLCBp bmRleG9pZGxpc3QpCkBAIC01NDMyLDcgKzU0MjYsNyBAQCByZXN0YXJ0OgogCQlpZiAoaW5k ZXhEZXNjLT5yZF9pbmRhbS0+YW1zdW1tYXJpemluZykKIAkJCWF0dHJzID0gJnN1bW1hcml6 ZWRhdHRyczsKIAkJZWxzZQotCQkJYXR0cnMgPSAmaG90YmxvY2tpbmdhdHRyczsKKwkJCWF0 dHJzID0gJmluZGV4ZWRhdHRyczsKIAogCQkvKiBDb2xsZWN0IHNpbXBsZSBhdHRyaWJ1dGUg cmVmZXJlbmNlcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhEZXNjLT5yZF9pbmRleC0+ aW5kbmF0dHM7IGkrKykKQEAgLTU0NDEsOSArNTQzNSw5IEBAIHJlc3RhcnQ6CiAKIAkJCS8q CiAJCQkgKiBTaW5jZSB3ZSBoYXZlIGNvdmVyaW5nIGluZGV4ZXMgd2l0aCBub24ta2V5IGNv bHVtbnMsIHdlIG11c3QKLQkJCSAqIGhhbmRsZSB0aGVtIGFjY3VyYXRlbHkgaGVyZS4gbm9u LWtleSBjb2x1bW5zIG11c3QgYmUgYWRkZWQgaW50bwotCQkJICogaG90YmxvY2tpbmdhdHRy cyBvciBzdW1tYXJpemVkYXR0cnMsIHNpbmNlIHRoZXkgYXJlIGluIGluZGV4LAotCQkJICog YW5kIHVwZGF0ZSBzaG91bGRuJ3QgbWlzcyB0aGVtLgorCQkJICogaGFuZGxlIHRoZW0gYWNj dXJhdGVseSBoZXJlLiBOb24ta2V5IGNvbHVtbnMgbXVzdCBiZSBhZGRlZCBpbnRvCisJCQkg KiBpbmRleGVkYXR0cnMgb3Igc3VtbWFyaXplZGF0dHJzLCBzaW5jZSB0aGV5IGFyZSBpbiBp bmRleCwgYW5kCisJCQkgKiB1cGRhdGUgc2hvdWxkbid0IG1pc3MgdGhlbS4KIAkJCSAqCiAJ CQkgKiBTdW1tYXJpemluZyBpbmRleGVzIGRvIG5vdCBibG9jayBIT1QsIGJ1dCBkbyBuZWVk IHRvIGJlIHVwZGF0ZWQKIAkJCSAqIHdoZW4gdGhlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzLCB0 aHVzIHJlcXVpcmUgYSBzZXBhcmF0ZQpAQCAtNTUwNCwxNSArNTQ5OCwxOSBAQCByZXN0YXJ0 OgogCQlibXNfZnJlZSh1aW5kZXhhdHRycyk7CiAJCWJtc19mcmVlKHBraW5kZXhhdHRycyk7 CiAJCWJtc19mcmVlKGlkaW5kZXhhdHRycyk7Ci0JCWJtc19mcmVlKGhvdGJsb2NraW5nYXR0 cnMpOwogCQlibXNfZnJlZShzdW1tYXJpemVkYXR0cnMpOwotCQkvKiBpbmRleGVkYXR0cnMg bm90IHlldCBpbml0aWFsaXplZCAqLworCQlibXNfZnJlZShpbmRleGVkYXR0cnMpOwogCiAJ CWdvdG8gcmVzdGFydDsKIAl9CiAKLQkvKiBTZXQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRvIHRy YWNrIGFsbCByZWZlcmVuY2VkIGF0dHJpYnV0ZXMgKi8KLQlpbmRleGVkYXR0cnMgPSBibXNf dW5pb24oaG90YmxvY2tpbmdhdHRycywgc3VtbWFyaXplZGF0dHJzKTsKKwkvKgorCSAqIFJl Y29yZCB3aGF0IGF0dHJpYnV0ZXMgYXJlIG9ubHkgcmVmZXJlbmNlZCBieSBzdW1tYXJpemlu ZyBpbmRleGVzLiBUaGVuCisJICogYWRkIHRoYXQgaW50byB0aGUgb3RoZXIgaW5kZXhlZCBh dHRyaWJ1dGVzIHRvIHRyYWNrIGFsbCByZWZlcmVuY2VkCisJICogYXR0cmlidXRlcy4KKwkg Ki8KKwlzdW1tYXJpemVkYXR0cnMgPSBibXNfZGVsX21lbWJlcnMoc3VtbWFyaXplZGF0dHJz LCBpbmRleGVkYXR0cnMpOworCWluZGV4ZWRhdHRycyA9IGJtc19hZGRfbWVtYmVycyhpbmRl eGVkYXR0cnMsIHN1bW1hcml6ZWRhdHRycyk7CiAKIAkvKiBEb24ndCBsZWFrIHRoZSBvbGQg dmFsdWVzIG9mIHRoZXNlIGJpdG1hcHMsIGlmIGFueSAqLwogCXJlbGF0aW9uLT5yZF9hdHRy c3ZhbGlkID0gZmFsc2U7CkBAIC01NTIyLDggKzU1MjAsNiBAQCByZXN0YXJ0OgogCXJlbGF0 aW9uLT5yZF9wa2F0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIp OwogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBOVUxMOwotCWJtc19mcmVlKHJlbGF0aW9uLT5y ZF9ob3RibG9ja2luZ2F0dHIpOwotCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBO VUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7CiAJcmVsYXRp b24tPnJkX3N1bW1hcml6ZWRhdHRyID0gTlVMTDsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRf aW5kZXhlZGF0dHIpOwpAQCAtNTU0MCw3ICs1NTM2LDYgQEAgcmVzdGFydDoKIAlyZWxhdGlv bi0+cmRfa2V5YXR0ciA9IGJtc19jb3B5KHVpbmRleGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRf cGthdHRyID0gYm1zX2NvcHkocGtpbmRleGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfaWRhdHRy ID0gYm1zX2NvcHkoaWRpbmRleGF0dHJzKTsKLQlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdh dHRyID0gYm1zX2NvcHkoaG90YmxvY2tpbmdhdHRycyk7CiAJcmVsYXRpb24tPnJkX3N1bW1h cml6ZWRhdHRyID0gYm1zX2NvcHkoc3VtbWFyaXplZGF0dHJzKTsKIAlyZWxhdGlvbi0+cmRf aW5kZXhlZGF0dHIgPSBibXNfY29weShpbmRleGVkYXR0cnMpOwogCXJlbGF0aW9uLT5yZF9h dHRyc3ZhbGlkID0gdHJ1ZTsKQEAgLTU1NTUsOCArNTU1MCw2IEBAIHJlc3RhcnQ6CiAJCQly ZXR1cm4gcGtpbmRleGF0dHJzOwogCQljYXNlIElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZ X0tFWToKIAkJCXJldHVybiBpZGluZGV4YXR0cnM7Ci0JCWNhc2UgSU5ERVhfQVRUUl9CSVRN QVBfSE9UX0JMT0NLSU5HOgotCQkJcmV0dXJuIGhvdGJsb2NraW5nYXR0cnM7CiAJCWNhc2Ug SU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRDoKIAkJCXJldHVybiBzdW1tYXJpemVkYXR0 cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRDoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aAppbmRleCBhNTZmM2QxZjM3OC4uZjE4NThkMTRiNDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTM2NCwxMiArMzY0LDExIEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogCQkJCQkJCSBU TV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpOwogZXh0ZXJuIHZvaWQg aGVhcF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUo UmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKLWV4dGVy biBUTV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqb3RpZCwKLQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKK2V4dGVybiBU TV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSBvbGR0 dXAsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90 IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQs IExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQkJCSBjb25zdCBCaXRtYXBzZXQgKm1p eF9hdHRycywgYm9vbCBtaXhfYXR0cnNfdmFsaWQsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4 ZXMgKnVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGNv bnN0IExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJCQkJCSBCdWZmZXIgYnVmZmVyLCBQ YWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsb2NrLCBJdGVtSWQgbHAsCisJCQkJCQkJIGJvb2wg aG90X2FsbG93ZWQsIEJ1ZmZlciB2bWJ1ZmZlciwgYm9vbCByZXBfaWRfa2V5X3JlcXVpcmVk KTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2NrVHVwbGVN b2RlIG1vZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LAogCQkJCQkJCQkgYm9vbCBm b2xsb3dfdXBkYXRlcywKQEAgLTQzMSw2ICs0MzAsMjIgQEAgZXh0ZXJuIHZvaWQgbG9nX2hl YXBfcHJ1bmVfYW5kX2ZyZWV6ZShSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwK IAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICpkZWFkLCBpbnQgbmRlYWQsCiAJCQkJCQkJCQkg IE9mZnNldE51bWJlciAqdW51c2VkLCBpbnQgbnVudXNlZCk7CiAKKy8qIGluIGhlYXAvaGVh cGFtLmMgKi8KK2V4dGVybiBib29sIEhlYXBVcGRhdGVIb3RBbGxvd2FibGUoUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLAorCQkJCQkJCQkgICBib29s ICpzdW1tYXJpemVkX29ubHkpOworZXh0ZXJuIGJvb2wgSGVhcFVwZGF0ZVJlcXVpcmVzUmVw bGljYUlkKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywK KwkJCQkJCQkJCQlIZWFwVHVwbGVEYXRhICp0dXBsZSk7CitleHRlcm4gQml0bWFwc2V0ICpI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJ ICAgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAorCQkJCQkJCQkJCSAgIEhlYXBUdXBs ZSBvbGR0dXAsIEhlYXBUdXBsZSBuZXd0dXApOworZXh0ZXJuIExvY2tUdXBsZU1vZGUgSGVh cFVwZGF0ZURldGVybWluZUxvY2ttb2RlKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJ CQkJIGNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzKTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCitleHRlcm4gdm9pZCBjaGVja19sb2NrX2lmX2lucGxhY2VfdXBkYXRlYWJsZV9y ZWwoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJCQkJCQkgY29uc3QgSXRlbVBvaW50ZXJE YXRhICpvdGlkLAorCQkJCQkJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXApOworI2VuZGlmCisK IC8qIGluIGhlYXAvdmFjdXVtbGF6eS5jICovCiBleHRlcm4gdm9pZCBoZWFwX3ZhY3V1bV9y ZWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCWNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGRmNTQyNmZk N2ZiLi4xMGU1ZTkwNDRlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2Miw3ICsxNjIsNiBAQCB0eXBl ZGVmIHN0cnVjdCBSZWxhdGlvbkRhdGEKIAlCaXRtYXBzZXQgICpyZF9rZXlhdHRyOwkJLyog Y29scyB0aGF0IGNhbiBiZSByZWYnZCBieSBmb3JlaWduIGtleXMgKi8KIAlCaXRtYXBzZXQg ICpyZF9wa2F0dHI7CQkvKiBjb2xzIGluY2x1ZGVkIGluIHByaW1hcnkga2V5ICovCiAJQml0 bWFwc2V0ICAqcmRfaWRhdHRyOwkJLyogaW5jbHVkZWQgaW4gcmVwbGljYSBpZGVudGl0eSBp bmRleCAqLwotCUJpdG1hcHNldCAgKnJkX2hvdGJsb2NraW5nYXR0cjsgLyogY29scyBibG9j a2luZyBIT1QgdXBkYXRlICovCiAJQml0bWFwc2V0ICAqcmRfc3VtbWFyaXplZGF0dHI7CS8q IGNvbHMgaW5kZXhlZCBieSBzdW1tYXJpemluZyBpbmRleGVzICovCiAJQml0bWFwc2V0ICAq cmRfaW5kZXhlZGF0dHI7IC8qIGFsbCBjb2xzIHJlZmVyZW5jZWQgYnkgaW5kZXhlcyAqLwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsY2FjaGUuaAppbmRleCA1ODM0YWI3YjkwMy4uNTdiNDZlZTU0ZTUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsY2FjaGUuaApAQCAtNjksNyArNjksNiBAQCB0eXBlZGVmIGVudW0gSW5k ZXhBdHRyQml0bWFwS2luZAogCUlOREVYX0FUVFJfQklUTUFQX0tFWSwKIAlJTkRFWF9BVFRS X0JJVE1BUF9QUklNQVJZX0tFWSwKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVks Ci0JSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklUTUFQ X1NVTU1BUklaRUQsCiAJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhBdHRy Qml0bWFwS2luZDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2Vu ZXJhdGVkX3ZpcnR1YWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0 ZWRfdmlydHVhbC5vdXQKaW5kZXggMjQ5ZTY4YmU2NTQuLjZhZWEwMzQ2ZWUyIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dApA QCAtMjYwLDcgKzI2MCw3IEBAIE1FUkdFIElOVE8gZ3Rlc3RtIHQgVVNJTkcgZ3Rlc3RtIEFT IHMgT04gMiAqIHQuYSA9IHMuYiBXSEVOIE1BVENIRUQgVEhFTiBERUxFVEUKIERST1AgVEFC TEUgZ3Rlc3RtOwogLS0gdmlld3MKIENSRUFURSBWSUVXIGd0ZXN0MXYgQVMgU0VMRUNUICog RlJPTSBndGVzdDE7Ci1TRUxFQ1QgKiBGUk9NIGd0ZXN0MXY7CitTRUxFQ1QgKiBGUk9NIGd0 ZXN0MXYgT1JERVIgQlkgYTsKICBhIHwgYiAKIC0tLSstLS0KICAzIHwgNgpAQCAtMjg3LDcg KzI4Nyw3IEBAIERFVEFJTDogIENvbHVtbiAiYiIgaXMgYSBnZW5lcmF0ZWQgY29sdW1uLgog SU5TRVJUIElOVE8gZ3Rlc3QxdiBWQUxVRVMgKDgsIERFRkFVTFQpLCAoOSwgREVGQVVMVCk7 ICAtLSBlcnJvcgogRVJST1I6ICBjYW5ub3QgaW5zZXJ0IGEgbm9uLURFRkFVTFQgdmFsdWUg aW50byBjb2x1bW4gImIiCiBERVRBSUw6ICBDb2x1bW4gImIiIGlzIGEgZ2VuZXJhdGVkIGNv bHVtbi4KLVNFTEVDVCAqIEZST00gZ3Rlc3QxdjsKK1NFTEVDVCAqIEZST00gZ3Rlc3QxdiBP UkRFUiBCWSBhOwogIGEgfCBiICAKIC0tLSstLS0tCiAgMyB8ICA2CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3VwZGF0YWJsZV92aWV3cy5vdXQKaW5kZXggOWNlYTUzOGI4 ZTguLjQ4NzdhMWRkY2U5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3VwZGF0YWJsZV92aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91 cGRhdGFibGVfdmlld3Mub3V0CkBAIC0zNzIsMTUgKzM3MiwxNSBAQCBJTlNFUlQgSU5UTyBy d192aWV3MTYgKGEsIGIpIFZBTFVFUyAoMywgJ1JvdyAzJyk7IC0tIHNob3VsZCBiZSBPSwog VVBEQVRFIHJ3X3ZpZXcxNiBTRVQgYT0zLCBhYT0tMyBXSEVSRSBhPTM7IC0tIHNob3VsZCBm YWlsCiBFUlJPUjogIG11bHRpcGxlIGFzc2lnbm1lbnRzIHRvIHNhbWUgY29sdW1uICJhIgog VVBEQVRFIHJ3X3ZpZXcxNiBTRVQgYWE9LTMgV0hFUkUgYT0zOyAtLSBzaG91bGQgYmUgT0sK LVNFTEVDVCAqIEZST00gYmFzZV90Ymw7CitTRUxFQ1QgKiBGUk9NIGJhc2VfdGJsIE9SREVS IEJZIGE7CiAgYSAgfCAgIGIgICAgCiAtLS0tKy0tLS0tLS0tCisgLTMgfCBSb3cgMwogIC0y IHwgUm93IC0yCiAgLTEgfCBSb3cgLTEKICAgMCB8IFJvdyAwCiAgIDEgfCBSb3cgMQogICAy IHwgUm93IDIKLSAtMyB8IFJvdyAzCiAoNiByb3dzKQogCiBERUxFVEUgRlJPTSByd192aWV3 MTYgV0hFUkUgYT0tMzsgLS0gc2hvdWxkIGJlIE9LCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKaW5kZXggODExNTJiMzlhNzkuLjExNDJiYjkzNTI1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCkBA IC0xMTUsNyArMTE1LDcgQEAgRFJPUCBUQUJMRSBndGVzdG07CiAKIC0tIHZpZXdzCiBDUkVB VEUgVklFVyBndGVzdDF2IEFTIFNFTEVDVCAqIEZST00gZ3Rlc3QxOwotU0VMRUNUICogRlJP TSBndGVzdDF2OworU0VMRUNUICogRlJPTSBndGVzdDF2IE9SREVSIEJZIGE7CiBJTlNFUlQg SU5UTyBndGVzdDF2IFZBTFVFUyAoNCwgOCk7ICAtLSBlcnJvcgogSU5TRVJUIElOVE8gZ3Rl c3QxdiBWQUxVRVMgKDUsIERFRkFVTFQpOyAgLS0gb2sKIElOU0VSVCBJTlRPIGd0ZXN0MXYg VkFMVUVTICg2LCA2NiksICg3LCA3Nyk7ICAtLSBlcnJvcgpAQCAtMTI3LDcgKzEyNyw3IEBA IEFMVEVSIFZJRVcgZ3Rlc3QxdiBBTFRFUiBDT0xVTU4gYiBTRVQgREVGQVVMVCAxMDA7CiBJ TlNFUlQgSU5UTyBndGVzdDF2IFZBTFVFUyAoOCwgREVGQVVMVCk7ICAtLSBlcnJvcgogSU5T RVJUIElOVE8gZ3Rlc3QxdiBWQUxVRVMgKDgsIERFRkFVTFQpLCAoOSwgREVGQVVMVCk7ICAt LSBlcnJvcgogCi1TRUxFQ1QgKiBGUk9NIGd0ZXN0MXY7CitTRUxFQ1QgKiBGUk9NIGd0ZXN0 MXYgT1JERVIgQlkgYTsKIERFTEVURSBGUk9NIGd0ZXN0MXYgV0hFUkUgYSA+PSA1OwogRFJP UCBWSUVXIGd0ZXN0MXY7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Vw ZGF0YWJsZV92aWV3cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVfdmll d3Muc3FsCmluZGV4IDE2MzVhZGRlMmQ0Li4xNjBlNzc5OTcxNSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC91cGRhdGFibGVfdmlld3Muc3FsCkBAIC0xMjUsNyArMTI1LDcgQEAgSU5T RVJUIElOVE8gcndfdmlldzE2IFZBTFVFUyAoMywgJ1JvdyAzJywgMyk7IC0tIHNob3VsZCBm YWlsCiBJTlNFUlQgSU5UTyByd192aWV3MTYgKGEsIGIpIFZBTFVFUyAoMywgJ1JvdyAzJyk7 IC0tIHNob3VsZCBiZSBPSwogVVBEQVRFIHJ3X3ZpZXcxNiBTRVQgYT0zLCBhYT0tMyBXSEVS RSBhPTM7IC0tIHNob3VsZCBmYWlsCiBVUERBVEUgcndfdmlldzE2IFNFVCBhYT0tMyBXSEVS RSBhPTM7IC0tIHNob3VsZCBiZSBPSwotU0VMRUNUICogRlJPTSBiYXNlX3RibDsKK1NFTEVD VCAqIEZST00gYmFzZV90YmwgT1JERVIgQlkgYTsKIERFTEVURSBGUk9NIHJ3X3ZpZXcxNiBX SEVSRSBhPS0zOyAtLSBzaG91bGQgYmUgT0sKIC0tIFJlYWQtb25seSB2aWV3cwogSU5TRVJU IElOVE8gcm9fdmlldzE3IFZBTFVFUyAoMywgJ1JPVyAzJyk7Ci0tIAoyLjUxLjIKCg== --e5f36c1c483d430e859b0a8b4d1b3e57--