Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1svvGr-000jgJ-8Q for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Oct 2024 09:03:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1svvGq-00CwsC-LQ for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Oct 2024 09:03:44 +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.94.2) (envelope-from ) id 1svvGq-00Cws3-1V for pgsql-hackers@lists.postgresql.org; Wed, 02 Oct 2024 09:03:44 +0000 Received: from weasel.tulip.relay.mailchannels.net ([23.83.218.247]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1svvGg-0026pH-VA for pgsql-hackers@postgresql.org; Wed, 02 Oct 2024 09:03:42 +0000 X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 0CE1E9474AB for ; Wed, 2 Oct 2024 09:03:33 +0000 (UTC) Received: from fr-int-smtpout3.hostinger.io (unknown [127.0.0.6]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id 0274D946806 for ; Wed, 2 Oct 2024 09:03:30 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1727859811; a=rsa-sha256; cv=none; b=5viv+AhPl4tnaaTvdz1w2PlRZdZp5N1G+ybS3nQmXdwN6E9Yzpe2pN+fAkYDQ7ogVmCmcA 2h+ZAd3cK7SBRtiDHBsptkORpC6LdE5pV8DLuSlobhzok5yLLlhlhd5n8BJz2uve0OK2Hp yKVeNMdvY7IQwGnB/GTVZilWES4BdyBzqQa0kpdaoEMnJ+iyfOfuPivfaf4xEIAakjvT2o VzmiUMZAmQDZzNMu67YFbYhSBcEs/blreNuaOXQ0EzN3ydU+sdzdVuhuq8vdmu0VgP73je xmwjHxQ7Xp0aNbPtfzTwOV/QLkr5Y+zAW38FWpo4CoxBsc5xo5nZvYgUfQyfxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1727859811; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4pcMQDPzO6ukDTs/6XiX3BW9n4O7ZXyplpbNWkEjTIE=; b=ll+W8m6pIZNrok0XFT/6bwYc110MhqXG5b4qi60BZBP0F27CSlngegVk1b2nzudTb9yqaS TGAYqhxJ9bCp64TLhKjQ0VpxduNya8zZ/XCKi4l8PcI6K7696zl0LhVBnThvXXAoOJChN+ mZ6G94fDsHkN+wYVF5M128DP4fB/Pt1eXjKMkSvwJmILdaFCB6sWDSIEfetqkFTM0RFqJe iaAlw7EfslP53oiCkZJtLsRogebUWcFRwQQNLPSvGKiQkSmMUkgAtxCuUmq5NSQHQh7Zjb BWIDtTvs6qlwXkjVtSKrqR3t4B8hUG359mI+O0Gc6/Z3ahcxgr2x6m1wDyqAJg== ARC-Authentication-Results: i=1; rspamd-7d7d79db7c-9v4ld; auth=pass smtp.auth=hostingeremail smtp.mailfrom=david@pgbackrest.org X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremail|x-authuser|david@pgbackrest.org X-MailChannels-Auth-Id: hostingeremail X-Bottle-Glossy: 404462593471e428_1727859812927_751736607 X-MC-Loop-Signature: 1727859812927:2043445500 X-MC-Ingress-Time: 1727859812927 Received: from fr-int-smtpout3.hostinger.io (fr-int-smtpout3.hostinger.io [89.116.146.82]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.114.165.125 (trex/7.0.2); Wed, 02 Oct 2024 09:03:32 +0000 Content-Type: multipart/mixed; boundary="------------P2shcraPe0HselG0NE8Lr21z" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgbackrest.org; s=hostingermail1; t=1727859809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=4pcMQDPzO6ukDTs/6XiX3BW9n4O7ZXyplpbNWkEjTIE=; b=xNKmdcK49zsmE6+RasRgsOGrR+iELSVpUD0xO1sWN/NLoLZ02BWIS1kJ9rkBhl74FHHngt Tt8aSo0jc7XCIuogn59tcucMxfH7VKPpZzGyGBXzOA7+WcEq4N0zAVjQzGm1low9GBbGda 1motYfxEygIMPBe+Y18AMnwzx0vPcBQzXyZcyky7/Zekd896q6vd9H0VKepJ47tpmdfrBh 3DHktZFkwDqS+h9VlULVnS/pwc229pZXwq4GFvuJ0Z4rMiEugFm00bOD/WUtov+cDC6qR9 5c1Iajv7R9L1OxelUL/VZz4/tGuUtmrOIX+KOyidYrQO4kRExZf6vLNTMjIqzA== Message-ID: <83f5295e-082d-432c-92a4-365707bd2296@pgbackrest.org> MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Return pg_control from pg_backup_stop(). To: Michael Paquier Cc: Pg Hackers References: Content-Language: en-US From: David Steele In-Reply-To: Date: Wed, 02 Oct 2024 09:03:27 +0000 (UTC) X-CM-Analysis: v=2.4 cv=brweB1ai c=1 sm=1 tr=0 ts=66fd0c61 a=90q5jM3B3ZMtdruoK7kaEA==:117 a=90q5jM3B3ZMtdruoK7kaEA==:17 a=r77TgQKjGQsHNAKrUKIA:9 a=epTmVMiNAAAA:8 a=pGLkceISAAAA:8 a=_-H-H_XeVCa2wq7zVB0A:9 a=QEXdDO2ut3YA:10 a=1wDIiH70AAAA:8 a=q-nvjrfBEUS8XgWlyrIA:9 a=B2y7HmGcmWMA:10 a=uCsh6WI2SJRHIg0NT2Eg:22 X-CM-Envelope: MS4xfO0Adt3KblBaCq2RgHa+SlPjp79Yk33qhpZ29MtkIegq+LMxszrO8QXiSXr7IJ26ch0sxfDRirV1GqzuyDVG+d63OVB0u5avzyZeRDn/oBkWaEDOuo8r 3W3pGjiZIRR+Db2wi52+Ota2xiVK9qAzPxpSltMcQ2zhqOdGwt8CSHK08gwSmVfLICNcU2YUJwXkyrQ+Yhz46sxKulDmx1zX5l7IYZ0z93vBj+Xo5mlmhgx2 X-AuthUser: david@pgbackrest.org List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------P2shcraPe0HselG0NE8Lr21z Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10/2/24 10:11, Michael Paquier wrote: > On Fri, May 17, 2024 at 12:46:49PM +1000, David Steele wrote: > >> The basic idea is to harden recovery by returning a copy of pg_control from >> pg_backup_stop() that has a flag set to prevent recovery if the backup_label >> file is missing. Instead of backup software copying pg_control from PGDATA, >> it stores an updated version that is returned from pg_backup_stop(). > > Hmm, okay. There is also a slight impact for BASE_BACKUP, requiring > basebackup_progress_wait_wal_archive() and do_pg_backup_stop() to be > called earlier when sending the main data directory which is the last > one in the list of tablespaces. As far as I can see, this does not > change the logic because do_pg_backup_stop() does not touch the > control file, but it seems to me that we'd rather keep these two > calls as they are now, and send the control file once we are out of > the for loop that processes all the tablespaces. That seems slightly > cleaner to me, still I agree that both are the same things. Sending pg_control later results in even more code churn because of how tar files are terminated. I've updated it that way in v2 so you can see what I mean. I don't have a strong preference, though, so if you prefer the implementation in v2 then that's fine with me. > Anyway, finishing do_pg_backup_stop() and then sending the control > file is just a consequence of the implementation choice driven by the > output required for the SQL function so as this is stored in the > backup state to get it down to pg_backup_stop() in xlogfuncs.c, so we > could also take one step back and forget about the SQL function, > setting only the new flag when sending a BASE_BACKUP, or just not use > the backupState to store this data as the exercise involves forcing > one boolean and recalculate a CRC32. I can definitely see us making other updates to pg_control so I would rather keep this logic centralized, even though it is not too complicated at this point. Still, even 8 lines of code (as it is now) seems better not to duplicate. >> * We don't need to worry about backup software seeing a torn copy of >> pg_control, since Postgres can safely read it out of memory and provide a >> valid copy via pg_backup_stop(). This solves torn reads without needing to >> write pg_control via a temp file, which may affect performance on a standby. > > We're talking about a 8kB file which has a size of 512B > (PG_CONTROL_MAX_SAFE_SIZE) to avoid such issues. So I'm not sure to > see your point here? Even at 512B it is possible to see tears in pg_control and they happen in the build farm right now. In fact, this thread [1] trying to fix the problem was what got me thinking about alternate solutions to preventing tears in pg_control. Thomas' proposed fixes have not been committed to my knowledge so the problem remains, but would be fixed by this commit. > There is a large comment block in do_pg_backup_stop() around > backup_stopped_in_recovery. Perhaps it should be improved based on > this patch. I added a sentence to this comment block in v2. > The main concern that I have over this patch is: who is actually going > to use this extension of the SQL stop function? Primarily existing backup software, I would imagine. The idea is that it would give them feature parity with pg_basebackup, rather than the new protections being exclusive to pg_basebackup. > Perhaps existing > backup solutions are good enough risk vs reward is not worth it? I'm not sure I see the risk here. Saving out pg_control is optional so no changes to current software is required. Of course they miss the benefit of the protection against tears and missing backup_label, but that is a choice. Also, no matter what current backup solutions do, they cannot prevent a user from removing backup_label after restore. This patch prevents invalid recovery when that happens. > The > label_file and the tablespace map are text, this is a series of bytes > that has no visibility for the end-user unless checked on the > client-side. This adds a new step where backups would need to copy > the control file to the data folder. Again, optional, but if I was able to manage these saves using the psql interface in the TAP tests then I'd say it would be pretty easy for anyone with a normal connection to Postgres. Also, we require users to treat tabelspace_map and backup_label as binary so not too big a change here. [1] https://www.postgresql.org/message-id/CA%2BhUKG%2Bjig%2BQdBETj_ab%2B%2BVWSoJjbwT3sLNCnk0wFsY_6tRqoA%40mail.gmail.com --------------P2shcraPe0HselG0NE8Lr21z Content-Type: text/plain; charset=UTF-8; name="pgcontrol-from-backupstop-v2.patch" Content-Disposition: attachment; filename="pgcontrol-from-backupstop-v2.patch" Content-Transfer-Encoding: base64 RnJvbSBmOWViZDEwOGE5YzVkYzU1ZmE0ODVkYzhjNjBlYjExZDJjMTY3MTVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBTdGVlbGUgPGRhdmlkQHBnbWFzdGVycy5u ZXQ+CkRhdGU6IFdlZCwgMiBPY3QgMjAyNCAwODo1OToxMiArMDAwMApTdWJqZWN0OiBSZXR1 cm4gcGdfY29udHJvbCBmcm9tIHBnX2JhY2t1cF9zdG9wKCkuCgpIYXJkZW4gcmVjb3Zlcnkg YnkgcmV0dXJuaW5nIGEgY29weSBvZiBwZ19jb250cm9sIGZyb20gcGdfYmFja3VwX3N0b3Ao KSB0aGF0IGhhcwphIGZsYWcgc2V0IHRvIHByZXZlbnQgcmVjb3ZlcnkgaWYgdGhlIGJhY2t1 cF9sYWJlbCBmaWxlIGlzIG1pc3NpbmcuIEluc3RlYWQgb2YKYmFja3VwIHNvZnR3YXJlIGNv cHlpbmcgcGdfY29udHJvbCBmcm9tIFBHREFUQSwgaXQgc3RvcmVzIGFuIHVwZGF0ZWQgdmVy c2lvbgp0aGF0IGlzIHJldHVybmVkIGZyb20gcGdfYmFja3VwX3N0b3AoKS4gVGhpcyBpcyBi ZXR0ZXIgZm9yIHRoZSBmb2xsb3dpbmcKcmVhc29uczoKCiogVGhlIHVzZXIgY2FuIG5vIGxv bmdlciByZW1vdmUgYmFja3VwX2xhYmVsIGFuZCBnZXQgd2hhdCBsb29rcyBsaWtlIGEKc3Vj Y2Vzc2Z1bCByZWNvdmVyeSAod2hpbGUgYWxtb3N0IGNlcnRhaW5seSBjYXVzaW5nIGNvcnJ1 cHRpb24pLiBJZiBiYWNrdXBfbGFiZWwKaXMgcmVtb3ZlZCB0aGUgY2x1c3RlciB3aWxsIG5v dCBzdGFydC4gVGhlIHVzZXIgbWF5IHRyeSBwZ19yZXNldHdhbCwgYnV0IHRoYXQKdG9vbCBt YWtlcyBpdCBwcmV0dHkgY2xlYXIgdGhhdCBjb3JydXB0aW9uIHdpbGwgcmVzdWx0IGZyb20g aXRzIHVzZS4KCiogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBiYWNrdXAgc29mdHdh cmUgc2VlaW5nIGEgdG9ybiBjb3B5IG9mIHBnX2NvbnRyb2wsCnNpbmNlIFBvc3RncmVzIGNh biBzYWZlbHkgcmVhZCBpdCBvdXQgb2YgbWVtb3J5IGFuZCBwcm92aWRlIGEgdmFsaWQgY29w eSB2aWEKcGdfYmFja3VwX3N0b3AoKS4gVGhpcyBzb2x2ZXMgdG9ybiByZWFkcyB3aXRob3V0 IG5lZWRpbmcgdG8gd3JpdGUgcGdfY29udHJvbCB2aWEKYSB0ZW1wIGZpbGUsIHdoaWNoIG1h eSBhZmZlY3QgcGVyZm9ybWFuY2Ugb24gYSBzdGFuZGJ5LgoKKiBGb3IgYmFja3VwIGZyb20g c3RhbmRieSwgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaW5zdHJ1Y3QgdGhlIGJhY2t1cCBzb2Z0 d2FyZSB0bwpjb3B5IHBnX2NvbnRyb2wgbGFzdC4gSW4gZmFjdCB0aGUgYmFja3VwIHNvZnR3 YXJlIHNob3VsZCBub3QgY29weSBwZ19jb250cm9sIGZyb20KUEdEQVRBIGF0IGFsbC4KClRo ZXNlIGNoYW5nZXMgaGF2ZSBubyBpbXBhY3Qgb24gY3VycmVudCBiYWNrdXAgc29mdHdhcmUg YW5kIHRoZXkgYXJlIGZyZWUgdG8gdXNlCnRoZSBwZ19jb250cm9sIGF2YWlsYWJsZSBmcm9t IHBnX3N0b3BfYmFja3VwKCkgb3IgY29udGludWUgdG8gdXNlIHBnX2NvbnRyb2wgZnJvbQpQ R0RBVEEuIE9mIGNvdXJzZSB0aGV5IHdpbGwgbWlzcyB0aGUgYmVuZWZpdHMgb2YgZ2V0dGlu ZyBhIGNvbnNpc3RlbnQgY29weSBvZgpwZ19jb250cm9sIGFuZCB0aGUgYmFja3VwX2xhYmVs IGNoZWNraW5nLCBidXQgd2lsbCBiZSBubyB3b3JzZSBvZmYgdGhhbiBiZWZvcmUuCgpDb250 cm9sIGFuZCBjYXRhbG9nIHZlcnNpb24gYnVtcHMgYXJlIHJlcXVpcmVkLgotLS0KIGRvYy9z cmMvc2dtbC9iYWNrdXAuc2dtbCAgICAgICAgICAgICAgICAgICAgfCAxOCArKysrKy0KIGRv Yy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAxMCArKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgfCAyMyArKysrKyst CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyAgICAgIHwgMTcgKysr Ky0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgIHwgMTAg KystCiBzcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jICAgICAgICAgICAgIHwgMzQg KysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwg ICAgfCAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wZ19jb250cm9sZGF0YS5jICAg ICB8ICA3ICsrLQogc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jICAg ICB8ICAyICsKIHNyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyAgICAgICAgICAg fCAgMSArCiBzcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYyAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2diYWNrdXAuaCAgICAgICAgICAgICB8ICA4 ICsrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmggICAgICAgICAgICB8ICA0 ICsrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgIHwgMTAg Ky0tCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAwMl9hcmNoaXZpbmcucGwgICAgICAgIHwgMjAg KysrKysrCiBzcmMvdGVzdC9yZWNvdmVyeS90LzA0Ml9sb3dfbGV2ZWxfYmFja3VwLnBsIHwg NjcgKysrKysrKysrKysrKysrKysrKystCiAxNiBmaWxlcyBjaGFuZ2VkLCAxOTIgaW5zZXJ0 aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Jh Y2t1cC5zZ21sIGIvZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21sCmluZGV4IGU0ZTRjNTZjZjEu LjJmY2YxODExMjEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvYmFja3VwLnNnbWwKQEAgLTEwMjEsOSArMTAyMSwxMiBAQCBTRUxF Q1QgKiBGUk9NIHBnX2JhY2t1cF9zdG9wKHdhaXRfZm9yX2FyY2hpdmUgPT4gdHJ1ZSk7CiAg ICAgIHZhbHVlcy4gVGhlIHNlY29uZCBvZiB0aGVzZSBmaWVsZHMgc2hvdWxkIGJlIHdyaXR0 ZW4gdG8gYSBmaWxlIG5hbWVkCiAgICAgIDxmaWxlbmFtZT5iYWNrdXBfbGFiZWw8L2ZpbGVu YW1lPiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGJhY2t1cC4gVGhlCiAgICAgIHRo aXJkIGZpZWxkIHNob3VsZCBiZSB3cml0dGVuIHRvIGEgZmlsZSBuYW1lZAotICAgICA8Zmls ZW5hbWU+dGFibGVzcGFjZV9tYXA8L2ZpbGVuYW1lPiB1bmxlc3MgdGhlIGZpZWxkIGlzIGVt cHR5LiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgPGZpbGVuYW1lPnRhYmxlc3BhY2VfbWFwPC9m aWxlbmFtZT4gdW5sZXNzIHRoZSBmaWVsZCBpcyBlbXB0eS4gVGhlIGZvdXJ0aAorICAgICBm aWVsZCBzaG91bGQgYmUgd3JpdHRlbiBpbnRvIGEgZmlsZSBuYW1lZAorICAgICA8ZmlsZW5h bWU+Z2xvYmFsL3BnX2NvbnRyb2w8L2ZpbGVuYW1lPiAob3ZlcndyaXRpbmcgdGhlIGV4aXN0 aW5nIGZpbGUgd2hlbgorICAgICBwcmVzZW50KS4gVGhlc2UgZmlsZXMgYXJlCiAgICAgIHZp dGFsIHRvIHRoZSBiYWNrdXAgd29ya2luZyBhbmQgbXVzdCBiZSB3cml0dGVuIGJ5dGUgZm9y IGJ5dGUgd2l0aG91dAotICAgICBtb2RpZmljYXRpb24sIHdoaWNoIG1heSByZXF1aXJlIG9w ZW5pbmcgdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUuCisgICAgIG1vZGlmaWNhdGlvbiwgd2hp Y2ggd2lsbCByZXF1aXJlIG9wZW5pbmcgdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUuCiAgICAg PC9wYXJhPgogICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KQEAgLTEwOTUsNyArMTA5 OCwxNiBAQCBTRUxFQ1QgKiBGUk9NIHBnX2JhY2t1cF9zdG9wKHdhaXRfZm9yX2FyY2hpdmUg PT4gdHJ1ZSk7CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotICAgIFlvdSBzaG91bGQsIGhv d2V2ZXIsIG9taXQgZnJvbSB0aGUgYmFja3VwIHRoZSBmaWxlcyB3aXRoaW4gdGhlCisgICAg WW91IHNob3VsZCBleGNsdWRlIDxmaWxlbmFtZT5nbG9iYWwvcGdfY29udHJvbDwvZmlsZW5h bWU+IGZyb20geW91ciBiYWNrdXAKKyAgICBhbmQgcHV0IHRoZSBjb250ZW50cyBvZiB0aGUg PHBhcmFtZXRlcj5jb250cm9sZmlsZTwvcGFyYW1ldGVyPiBjb2x1bW4KKyAgICByZXR1cm5l ZCBmcm9tIDxmdW5jdGlvbj5wZ19iYWNrdXBfc3RvcDwvZnVuY3Rpb24+IGluIHlvdXIgYmFj a3VwIGF0CisgICAgPGZpbGVuYW1lPmdsb2JhbC9wZ19jb250cm9sPC9maWxlbmFtZT4uIFRo aXMgdmVyc2lvbiBvZiBwZ19jb250cm9sIGNvbnRhaW5zCisgICAgc2FmZWd1YXJkcyBhZ2Fp bnN0IHJlY292ZXJ5IHdpdGhvdXQgYmFja3VwX2xhYmVsIHByZXNlbnQgYW5kIGlzIGd1YXJh bnRlZWQKKyAgICBub3QgdG8gYmUgdG9ybi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgWW91IHNob3VsZCBhbHNvIG9taXQgZnJvbSB0aGUgYmFja3VwIHRoZSBmaWxlcyB3aXRo aW4gdGhlCiAgICAgY2x1c3RlcidzIDxmaWxlbmFtZT5wZ193YWwvPC9maWxlbmFtZT4gc3Vi ZGlyZWN0b3J5LiAgVGhpcwogICAgIHNsaWdodCBhZGp1c3RtZW50IGlzIHdvcnRod2hpbGUg YmVjYXVzZSBpdCByZWR1Y2VzIHRoZSByaXNrCiAgICAgb2YgbWlzdGFrZXMgd2hlbiByZXN0 b3JpbmcuICBUaGlzIGlzIGVhc3kgdG8gYXJyYW5nZSBpZgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggZDZhY2Rk MzA1OS4uYTI2MjIwMTRhZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yNzg5OSw2ICsyNzg5OSwxMSBAQCBh Y2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30K ICAgICAgICA8ZW50cnk+PHR5cGU+Ym9vbGVhbjwvdHlwZT48L2VudHJ5PgogICAgICAgPC9y b3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5iYWNrdXBf bGFiZWxfcmVxdWlyZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0 eXBlPmJvb2xlYW48L3R5cGU+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorCiAgICAgIDwvdGJv ZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpAQCAtMjg1NzYsOCArMjg1ODEsOSBA QCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBpbiAyMDEgYmxvY2tzOyA2MjIz NjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgICAgICBUaGUgcmVzdWx0IG9mIHRo ZSBmdW5jdGlvbiBpcyBhIHNpbmdsZSByZWNvcmQuCiAgICAgICAgIFRoZSA8cGFyYW1ldGVy PmxzbjwvcGFyYW1ldGVyPiBjb2x1bW4gaG9sZHMgdGhlIGJhY2t1cCdzIGVuZGluZwogICAg ICAgICB3cml0ZS1haGVhZCBsb2cgbG9jYXRpb24gKHdoaWNoIGFnYWluIGNhbiBiZSBpZ25v cmVkKS4gIFRoZSBzZWNvbmQKLSAgICAgICAgY29sdW1uIHJldHVybnMgdGhlIGNvbnRlbnRz IG9mIHRoZSBiYWNrdXAgbGFiZWwgZmlsZSwgYW5kIHRoZSB0aGlyZAotICAgICAgICBjb2x1 bW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlc3BhY2UgbWFwIGZpbGUuICBU aGVzZSBtdXN0IGJlCisgICAgICAgIGNvbHVtbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0 aGUgYmFja3VwIGxhYmVsIGZpbGUsIHRoZSB0aGlyZCBjb2x1bW4KKyAgICAgICAgcmV0dXJu cyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlc3BhY2UgbWFwIGZpbGUsIGFuZCB0aGUgZm91 cnRoIGNvbHVtbgorICAgICAgICByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBwZ19jb250cm9s LiAgVGhlc2UgbXVzdCBiZQogICAgICAgICBzdG9yZWQgYXMgcGFydCBvZiB0aGUgYmFja3Vw IGFuZCBhcmUgcmVxdWlyZWQgYXMgcGFydCBvZiB0aGUgcmVzdG9yZQogICAgICAgICBwcm9j ZXNzLgogICAgICAgIDwvcGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRl eCA5MTAyYzhkNzcyLi5kMjhmMTU1NzAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCkBAIC05MTEwLDcgKzkxMTAsOSBAQCBnZXRfYmFja3VwX3N0YXR1cyh2b2lkKQogICog d2FpdCBmb3IgV0FMIHNlZ21lbnRzIHRvIGJlIGFyY2hpdmVkLgogICoKICAqICJzdGF0ZSIg aXMgZmlsbGVkIHdpdGggdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZXN0b3JlIGZy b20gdGhpcwotICogYmFja3VwIHdpdGggaXRzIHN0b3AgTFNOIChzdG9wcG9pbnQpLCBpdHMg dGltZWxpbmUgSUQgKHN0b3B0bGkpLCBldGMuCisgKiBiYWNrdXAgd2l0aCBpdHMgc3RvcCBM U04gKHN0b3Bwb2ludCksIGl0cyB0aW1lbGluZSBJRCAoc3RvcHRsaSksIGV0Yy4gVGhpcwor ICogaW5jbHVkZXMgYSBjb3B5IG9mIHBnX2NvbnRyb2wgd2l0aCBzYWZlZ3VhcmRzIGFnYWlu c3QgaXQgYmVpbmcgdXNlZCB3aXRob3V0CisgKiBiYWNrdXBfbGFiZWwuCiAgKgogICogSXQg aXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB0 byB2ZXJpZnkgdGhlCiAgKiBwZXJtaXNzaW9ucyBvZiB0aGUgY2FsbGluZyB1c2VyIQpAQCAt OTEyNywxMSArOTEyOSwzMCBAQCBkb19wZ19iYWNrdXBfc3RvcChCYWNrdXBTdGF0ZSAqc3Rh dGUsIGJvb2wgd2FpdGZvcmFyY2hpdmUpCiAJaW50CQkJc2Vjb25kc19iZWZvcmVfd2Fybmlu ZzsKIAlpbnQJCQl3YWl0cyA9IDA7CiAJYm9vbAkJcmVwb3J0ZWRfd2FpdGluZyA9IGZhbHNl OworCUNvbnRyb2xGaWxlRGF0YSAqY29udHJvbEZpbGVDb3B5ID0gKENvbnRyb2xGaWxlRGF0 YSAqKXN0YXRlLT5jb250cm9sRmlsZTsKIAogCUFzc2VydChzdGF0ZSAhPSBOVUxMKTsKIAog CWJhY2t1cF9zdG9wcGVkX2luX3JlY292ZXJ5ID0gUmVjb3ZlcnlJblByb2dyZXNzKCk7CiAK KwkvKgorCSAqIENyZWF0ZSBhIGNvcHkgb2YgY29udHJvbCBkYXRhIGFuZCB1cGRhdGUgaXQg dG8gcmVxdWlyZSBhIGJhY2t1cCBsYWJlbAorCSAqIGZvciByZWNvdmVyeS4gQWxzbyByZWNh bGN1bGF0ZSB0aGUgQ1JDLgorCSAqLworCW1lbXNldCgKKwkJc3RhdGUtPmNvbnRyb2xGaWxl ICsgc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSksIDAsCisJCVBHX0NPTlRST0xfRklMRV9TSVpF IC0gc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkpOworCisJTFdMb2NrQWNxdWlyZShDb250cm9s RmlsZUxvY2ssIExXX1NIQVJFRCk7CisJbWVtY3B5KGNvbnRyb2xGaWxlQ29weSwgQ29udHJv bEZpbGUsIHNpemVvZihDb250cm9sRmlsZURhdGEpKTsKKwlMV0xvY2tSZWxlYXNlKENvbnRy b2xGaWxlTG9jayk7CisKKwljb250cm9sRmlsZUNvcHktPmJhY2t1cExhYmVsUmVxdWlyZWQg PSB0cnVlOworCisJSU5JVF9DUkMzMkMoY29udHJvbEZpbGVDb3B5LT5jcmMpOworCUNPTVBf Q1JDMzJDKGNvbnRyb2xGaWxlQ29weS0+Y3JjLCBjb250cm9sRmlsZUNvcHksIG9mZnNldG9m KENvbnRyb2xGaWxlRGF0YSwgY3JjKSk7CisJRklOX0NSQzMyQyhjb250cm9sRmlsZUNvcHkt PmNyYyk7CisKIAkvKgogCSAqIER1cmluZyByZWNvdmVyeSwgd2UgZG9uJ3QgbmVlZCB0byBj aGVjayBXQUwgbGV2ZWwuIEJlY2F1c2UsIGlmIFdBTAogCSAqIGxldmVsIGlzIG5vdCBzdWZm aWNpZW50LCBpdCdzIGltcG9zc2libGUgdG8gZ2V0IGhlcmUgZHVyaW5nIHJlY292ZXJ5Lgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwppbmRleCAzZTNkMmJiNjE4 Li5mYzI0MDFkODU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3Mu YwpAQCAtMTE1LDkgKzExNSwxMSBAQCBwZ19iYWNrdXBfc3RhcnQoUEdfRlVOQ1RJT05fQVJH UykKICAqCiAgKiBUaGUgYmFja3VwX2xhYmVsIGNvbnRhaW5zIHRoZSB1c2VyLXN1cHBsaWVk IGxhYmVsIHN0cmluZyAodHlwaWNhbGx5IHRoaXMKICAqIHdvdWxkIGJlIHVzZWQgdG8gdGVs bCB3aGVyZSB0aGUgYmFja3VwIGR1bXAgd2lsbCBiZSBzdG9yZWQpLCB0aGUgc3RhcnRpbmcK LSAqIHRpbWUsIHN0YXJ0aW5nIFdBTCBsb2NhdGlvbiBmb3IgdGhlIGR1bXAgYW5kIHNvIG9u LiAgSXQgaXMgdGhlIGNhbGxlcidzCi0gKiByZXNwb25zaWJpbGl0eSB0byB3cml0ZSB0aGUg YmFja3VwX2xhYmVsIGFuZCB0YWJsZXNwYWNlX21hcCBmaWxlcyBpbiB0aGUKLSAqIGRhdGEg Zm9sZGVyIHRoYXQgd2lsbCBiZSByZXN0b3JlZCBmcm9tIHRoaXMgYmFja3VwLgorICogdGlt ZSwgc3RhcnRpbmcgV0FMIGxvY2F0aW9uIGZvciB0aGUgZHVtcCBhbmQgc28gb24uICBUaGUg cGdfY29udHJvbCBmaWxlCisgKiBjb250YWlucyByZXByZXNlbnRzIGEgY29uc2lzdGVudCBj b3B5IG9mIHBnX2NvbnRyb2wgdGhhdCBhbHNvIGhhcyBhIHNhZmVndWFyZAorICogYWdhaW5z dCBiZWluZyB1c2VkIHdpdGhvdXQgYmFja3VwX2xhYmVsLiAgSXQgaXMgdGhlIGNhbGxlcidz IHJlc3BvbnNpYmlsaXR5CisgKiB0byB3cml0ZSB0aGUgYmFja3VwX2xhYmVsLCBwZ19jb250 cm9sLCBhbmQgdGFibGVzcGFjZV9tYXAgZmlsZXMgaW4gdGhlIGRhdGEKKyAqIGZvbGRlciB0 aGF0IHdpbGwgYmUgcmVzdG9yZWQgZnJvbSB0aGlzIGJhY2t1cC4KICAqCiAgKiBQZXJtaXNz aW9uIGNoZWNraW5nIGZvciB0aGlzIGZ1bmN0aW9uIGlzIG1hbmFnZWQgdGhyb3VnaCB0aGUg bm9ybWFsCiAgKiBHUkFOVCBzeXN0ZW0uCkBAIC0xMjUsMTIgKzEyNywxMyBAQCBwZ19iYWNr dXBfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiBwZ19iYWNrdXBfc3RvcChQR19G VU5DVElPTl9BUkdTKQogewotI2RlZmluZSBQR19CQUNLVVBfU1RPUF9WMl9DT0xTIDMKKyNk ZWZpbmUgUEdfQkFDS1VQX1NUT1BfVjJfQ09MUyA0CiAJVHVwbGVEZXNjCXR1cGRlc2M7CiAJ RGF0dW0JCXZhbHVlc1tQR19CQUNLVVBfU1RPUF9WMl9DT0xTXSA9IHswfTsKIAlib29sCQlu dWxsc1tQR19CQUNLVVBfU1RPUF9WMl9DT0xTXSA9IHswfTsKIAlib29sCQl3YWl0Zm9yYXJj aGl2ZSA9IFBHX0dFVEFSR19CT09MKDApOwogCWNoYXIJICAgKmJhY2t1cF9sYWJlbDsKKwli eXRlYQkgICAqcGdfY29udHJvbF9ieXRlYTsKIAlTZXNzaW9uQmFja3VwU3RhdGUgc3RhdHVz ID0gZ2V0X2JhY2t1cF9zdGF0dXMoKTsKIAogCS8qIEluaXRpYWxpemUgYXR0cmlidXRlcyBp bmZvcm1hdGlvbiBpbiB0aGUgdHVwbGUgZGVzY3JpcHRvciAqLwpAQCAtMTUyLDkgKzE1NSwx NSBAQCBwZ19iYWNrdXBfc3RvcChQR19GVU5DVElPTl9BUkdTKQogCS8qIEJ1aWxkIHRoZSBj b250ZW50cyBvZiBiYWNrdXBfbGFiZWwgKi8KIAliYWNrdXBfbGFiZWwgPSBidWlsZF9iYWNr dXBfY29udGVudChiYWNrdXBfc3RhdGUsIGZhbHNlKTsKIAorCS8qIEJ1aWxkIHRoZSBjb250 ZW50cyBvZiBwZ19jb250cm9sICovCisJcGdfY29udHJvbF9ieXRlYSA9IChieXRlYSAqKSBw YWxsb2MoUEdfQ09OVFJPTF9GSUxFX1NJWkUgKyBWQVJIRFJTWik7CisJU0VUX1ZBUlNJWkUo cGdfY29udHJvbF9ieXRlYSwgUEdfQ09OVFJPTF9GSUxFX1NJWkUgKyBWQVJIRFJTWik7CisJ bWVtY3B5KFZBUkRBVEEocGdfY29udHJvbF9ieXRlYSksIGJhY2t1cF9zdGF0ZS0+Y29udHJv bEZpbGUsIFBHX0NPTlRST0xfRklMRV9TSVpFKTsKKwogCXZhbHVlc1swXSA9IExTTkdldERh dHVtKGJhY2t1cF9zdGF0ZS0+c3RvcHBvaW50KTsKIAl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0 VGV4dERhdHVtKGJhY2t1cF9sYWJlbCk7CiAJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRleHRE YXR1bSh0YWJsZXNwYWNlX21hcC0+ZGF0YSk7CisJdmFsdWVzWzNdID0gUG9pbnRlckdldERh dHVtKHBnX2NvbnRyb2xfYnl0ZWEpOwogCiAJLyogRGVhbGxvY2F0ZSBiYWNrdXAtcmVsYXRl ZCB2YXJpYWJsZXMgKi8KIAlwZnJlZShiYWNrdXBfbGFiZWwpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAzMjBiMTRhZGQxLi4xOTNiN2Uy MDQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zl cnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpA QCAtNzA0LDcgKzcwNCwxNCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpD b250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCX0KIAllbHNlCiAJewotCQkv KiBObyBiYWNrdXBfbGFiZWwgZmlsZSBoYXMgYmVlbiBmb3VuZCBpZiB3ZSBhcmUgaGVyZS4g Ki8KKwkJLyoKKwkJICogTm8gYmFja3VwX2xhYmVsIGZpbGUgaGFzIGJlZW4gZm91bmQgaWYg d2UgYXJlIGhlcmUuIEVycm9yIGlmIHRoZQorCQkgKiBjb250cm9sIGZpbGUgcmVxdWlyZXMg YmFja3VwX2xhYmVsLgorCQkgKi8KKwkJaWYgKENvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJl cXVpcmVkKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGZp bmQgYmFja3VwX2xhYmVsIHJlcXVpcmVkIGZvciByZWNvdmVyeSIpLAorCQkJCQkgZXJyaGlu dCgiYmFja3VwX2xhYmVsIG11c3QgYmUgcHJlc2VudCBmb3IgcmVjb3ZlcnkgdG8gc3VjY2Vl ZCIpKSk7CiAKIAkJLyoKIAkJICogSWYgdGFibGVzcGFjZV9tYXAgZmlsZSBpcyBwcmVzZW50 IHdpdGhvdXQgYmFja3VwX2xhYmVsIGZpbGUsIHRoZXJlCkBAIC05NzcsNiArOTg0LDcgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndh c1NodXRkb3duX3B0ciwKIAkJewogCQkJQ29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnQg PSBjaGVja1BvaW50LnJlZG87CiAJCQlDb250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQg PSBiYWNrdXBFbmRSZXF1aXJlZDsKKwkJCUNvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJlcXVp cmVkID0gZmFsc2U7CiAKIAkJCWlmIChiYWNrdXBGcm9tU3RhbmRieSkKIAkJCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9i YWNrdXAvYmFzZWJhY2t1cC5jCmluZGV4IDE0ZTViYTcyZTkuLmQwZDRlNzRjYjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMKKysrIGIvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYwpAQCAtMzI1LDcgKzMyNSw2IEBAIHBlcmZvcm1fYmFz ZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaywKIAogCQkJ aWYgKHRpLT5wYXRoID09IE5VTEwpCiAJCQl7Ci0JCQkJc3RydWN0IHN0YXQgc3RhdGJ1ZjsK IAkJCQlib29sCQlzZW5kdGJsc3BjbGlua3MgPSB0cnVlOwogCQkJCWNoYXIJICAgKmJhY2t1 cF9sYWJlbDsKIApAQCAtMzQ4LDE2ICszNDcsNiBAQCBwZXJmb3JtX2Jhc2VfYmFja3VwKGJh c2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmssCiAJCQkJLyogVGhlbiB0aGUg YnVsayBvZiB0aGUgZmlsZXMuLi4gKi8KIAkJCQlzZW5kRGlyKHNpbmssICIuIiwgMSwgZmFs c2UsIHN0YXRlLnRhYmxlc3BhY2VzLAogCQkJCQkJc2VuZHRibHNwY2xpbmtzLCAmbWFuaWZl c3QsIEludmFsaWRPaWQsIGliKTsKLQotCQkJCS8qIC4uLiBhbmQgcGdfY29udHJvbCBhZnRl ciBldmVyeXRoaW5nIGVsc2UuICovCi0JCQkJaWYgKGxzdGF0KFhMT0dfQ09OVFJPTF9GSUxF LCAmc3RhdGJ1ZikgIT0gMCkKLQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhdCBm aWxlIFwiJXNcIjogJW0iLAotCQkJCQkJCQkJWExPR19DT05UUk9MX0ZJTEUpKSk7Ci0JCQkJ c2VuZEZpbGUoc2luaywgWExPR19DT05UUk9MX0ZJTEUsIFhMT0dfQ09OVFJPTF9GSUxFLCAm c3RhdGJ1ZiwKLQkJCQkJCSBmYWxzZSwgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwKLQkJCQkJ CSBJbnZhbGlkUmVsRmlsZU51bWJlciwgMCwgJm1hbmlmZXN0LCAwLCBOVUxMLCAwKTsKIAkJ CX0KIAkJCWVsc2UKIAkJCXsKQEAgLTM3NCw3ICszNjMsNyBAQCBwZXJmb3JtX2Jhc2VfYmFj a3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmssCiAJCQkgKiBpbmNs dWRlIHRoZSB4bG9nIGZpbGVzIGJlbG93IGFuZCBzdG9wIGFmdGVyd2FyZHMuIFRoaXMgaXMg c2FmZQogCQkJICogc2luY2UgdGhlIG1haW4gZGF0YSBkaXJlY3RvcnkgaXMgYWx3YXlzIHNl bnQgKmxhc3QqLgogCQkJICovCi0JCQlpZiAob3B0LT5pbmNsdWRld2FsICYmIHRpLT5wYXRo ID09IE5VTEwpCisJCQlpZiAodGktPnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJCQlBc3NlcnQo bG5leHQoc3RhdGUudGFibGVzcGFjZXMsIGxjKSA9PSBOVUxMKTsKIAkJCX0KQEAgLTM5NCw2 ICszODMsMTEgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9w dCwgYmJzaW5rICpzaW5rLAogCQliYXNlYmFja3VwX3Byb2dyZXNzX3dhaXRfd2FsX2FyY2hp dmUoJnN0YXRlKTsKIAkJZG9fcGdfYmFja3VwX3N0b3AoYmFja3VwX3N0YXRlLCAhb3B0LT5u b3dhaXQpOwogCisJCS8qIFNlbmQgcGdfY29udHJvbCAqLworCQlzZW5kRmlsZVdpdGhDb250 ZW50KHNpbmssIFhMT0dfQ09OVFJPTF9GSUxFLAorCQkJCQkJCShjaGFyICopYmFja3VwX3N0 YXRlLT5jb250cm9sRmlsZSwKKwkJCQkJCQlQR19DT05UUk9MX0ZJTEVfU0laRSwgJm1hbmlm ZXN0KTsKKwogCQllbmRwdHIgPSBiYWNrdXBfc3RhdGUtPnN0b3Bwb2ludDsKIAkJZW5kdGxp ID0gYmFja3VwX3N0YXRlLT5zdG9wdGxpOwogCkBAIC02MzIsMTYgKzYyNiwxNiBAQCBwZXJm b3JtX2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmss CiAJCQlTdGF0dXNGaWxlUGF0aChwYXRoYnVmLCBmbmFtZSwgIi5kb25lIik7CiAJCQlzZW5k RmlsZVdpdGhDb250ZW50KHNpbmssIHBhdGhidWYsICIiLCAtMSwgJm1hbmlmZXN0KTsKIAkJ fQorCX0KIAotCQkvKiBQcm9wZXJseSB0ZXJtaW5hdGUgdGhlIHRhciBmaWxlLiAqLwotCQlT dGF0aWNBc3NlcnRTdG10KDIgKiBUQVJfQkxPQ0tfU0laRSA8PSBCTENLU1osCi0JCQkJCQkg IkJMQ0tTWiB0b28gc21hbGwgZm9yIDIgdGFyIGJsb2NrcyIpOwotCQltZW1zZXQoc2luay0+ YmJzX2J1ZmZlciwgMCwgMiAqIFRBUl9CTE9DS19TSVpFKTsKLQkJYmJzaW5rX2FyY2hpdmVf Y29udGVudHMoc2luaywgMiAqIFRBUl9CTE9DS19TSVpFKTsKKwkvKiBQcm9wZXJseSB0ZXJt aW5hdGUgdGhlIHRhciBmaWxlLiAqLworCVN0YXRpY0Fzc2VydFN0bXQoMiAqIFRBUl9CTE9D S19TSVpFIDw9IEJMQ0tTWiwKKwkJCQkJCSJCTENLU1ogdG9vIHNtYWxsIGZvciAyIHRhciBi bG9ja3MiKTsKKwltZW1zZXQoc2luay0+YmJzX2J1ZmZlciwgMCwgMiAqIFRBUl9CTE9DS19T SVpFKTsKKwliYnNpbmtfYXJjaGl2ZV9jb250ZW50cyhzaW5rLCAyICogVEFSX0JMT0NLX1NJ WkUpOwogCi0JCS8qIE9LLCB0aGF0J3MgdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZS4gKi8KLQkJ YmJzaW5rX2VuZF9hcmNoaXZlKHNpbmspOwotCX0KKwkvKiBPSywgdGhhdCdzIHRoZSBlbmQg b2YgdGhlIGFyY2hpdmUuICovCisJYmJzaW5rX2VuZF9hcmNoaXZlKHNpbmspOwogCiAJQWRk V0FMSW5mb1RvQmFja3VwTWFuaWZlc3QoJm1hbmlmZXN0LCBzdGF0ZS5zdGFydHB0ciwgc3Rh dGUuc3RhcnR0bGksCiAJCQkJCQkJICAgZW5kcHRyLCBlbmR0bGkpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggYjBkMGRlMDUxZS4uNzU4Zjkw YjJjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25z LnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBA IC0zOTAsNyArMzkwLDcgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04KIAogQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfYmFja3VwX3N0b3AgKAogICAgICAgICB3YWl0X2Zv cl9hcmNoaXZlIGJvb2xlYW4gREVGQVVMVCB0cnVlLCBPVVQgbHNuIHBnX2xzbiwKLSAgICAg ICAgT1VUIGxhYmVsZmlsZSB0ZXh0LCBPVVQgc3BjbWFwZmlsZSB0ZXh0KQorICAgICAgICBP VVQgbGFiZWxmaWxlIHRleHQsIE9VVCBzcGNtYXBmaWxlIHRleHQsIE9VVCBjb250cm9sZmls ZSBieXRlYSkKICAgUkVUVVJOUyByZWNvcmQgU1RSSUNUIFZPTEFUSUxFIExBTkdVQUdFIGlu dGVybmFsIGFzICdwZ19iYWNrdXBfc3RvcCcKICAgUEFSQUxMRUwgUkVTVFJJQ1RFRDsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wZ19jb250cm9sZGF0YS5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wZ19jb250cm9sZGF0YS5jCmluZGV4IDk4YzkzMmRj N2IuLjllYWYzZjhiOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcGdf Y29udHJvbGRhdGEuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3BnX2NvbnRyb2xk YXRhLmMKQEAgLTE2Miw4ICsxNjIsOCBAQCBwZ19jb250cm9sX2NoZWNrcG9pbnQoUEdfRlVO Q1RJT05fQVJHUykKIERhdHVtCiBwZ19jb250cm9sX3JlY292ZXJ5KFBHX0ZVTkNUSU9OX0FS R1MpCiB7Ci0JRGF0dW0JCXZhbHVlc1s1XTsKLQlib29sCQludWxsc1s1XTsKKwlEYXR1bQkJ dmFsdWVzWzZdOworCWJvb2wJCW51bGxzWzZdOwogCVR1cGxlRGVzYwl0dXBkZXNjOwogCUhl YXBUdXBsZQlodHVwOwogCUNvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGU7CkBAIC0xOTUs NiArMTk1LDkgQEAgcGdfY29udHJvbF9yZWNvdmVyeShQR19GVU5DVElPTl9BUkdTKQogCXZh bHVlc1s0XSA9IEJvb2xHZXREYXR1bShDb250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQp OwogCW51bGxzWzRdID0gZmFsc2U7CiAKKwl2YWx1ZXNbNV0gPSBCb29sR2V0RGF0dW0oQ29u dHJvbEZpbGUtPmJhY2t1cExhYmVsUmVxdWlyZWQpOworCW51bGxzWzVdID0gZmFsc2U7CisK IAlodHVwID0gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOwogCiAJ UEdfUkVUVVJOX0RBVFVNKEhlYXBUdXBsZUdldERhdHVtKGh0dXApKTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYyBiL3NyYy9iaW4vcGdf Y29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwppbmRleCA5M2EwNWQ4MGNhLi44Y2MyOTkw NGM2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRh LmMKKysrIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCkBAIC0y ODMsNiArMjgzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgICBMU05f Rk9STUFUX0FSR1MoQ29udHJvbEZpbGUtPmJhY2t1cEVuZFBvaW50KSk7CiAJcHJpbnRmKF8o IkVuZC1vZi1iYWNrdXAgcmVjb3JkIHJlcXVpcmVkOiAgICAgICAgJXNcbiIpLAogCQkgICBD b250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQgPyBfKCJ5ZXMiKSA6IF8oIm5vIikpOwor CXByaW50ZihfKCJCYWNrdXAgbGFiZWwgcmVxdWlyZWQ6ICAgICAgICAgICAgICAgICVzXG4i KSwKKwkJICAgQ29udHJvbEZpbGUtPmJhY2t1cExhYmVsUmVxdWlyZWQgPyBfKCJ5ZXMiKSA6 IF8oIm5vIikpOwogCXByaW50ZihfKCJ3YWxfbGV2ZWwgc2V0dGluZzogICAgICAgICAgICAg ICAgICAgICVzXG4iKSwKIAkJICAgd2FsX2xldmVsX3N0cihDb250cm9sRmlsZS0+d2FsX2xl dmVsKSk7CiAJcHJpbnRmKF8oIndhbF9sb2dfaGludHMgc2V0dGluZzogICAgICAgICAgICAg ICAgJXNcbiIpLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdh bC5jIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCmluZGV4IGU5ZGNiNWE2 ZDguLjcwNTY3NTJjZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVz ZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKQEAgLTg3 NSw2ICs4NzUsNyBAQCBSZXdyaXRlQ29udHJvbEZpbGUodm9pZCkKIAlDb250cm9sRmlsZS5i YWNrdXBTdGFydFBvaW50ID0gMDsKIAlDb250cm9sRmlsZS5iYWNrdXBFbmRQb2ludCA9IDA7 CiAJQ29udHJvbEZpbGUuYmFja3VwRW5kUmVxdWlyZWQgPSBmYWxzZTsKKwlDb250cm9sRmls ZS5iYWNrdXBMYWJlbFJlcXVpcmVkID0gZmFsc2U7CiAKIAkvKgogCSAqIEZvcmNlIHRoZSBk ZWZhdWx0cyBmb3IgbWF4Xyogc2V0dGluZ3MuIFRoZSB2YWx1ZXMgZG9uJ3QgcmVhbGx5IG1h dHRlcgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMgYi9zcmMv YmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYwppbmRleCA5NjA5MTZhMWU4Li43OWE0NGI3MGVl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYworKysgYi9zcmMv YmluL3BnX3Jld2luZC9wZ19yZXdpbmQuYwpAQCAtNzIyLDYgKzcyMiw3IEBAIHBlcmZvcm1f cmV3aW5kKGZpbGVtYXBfdCAqZmlsZW1hcCwgcmV3aW5kX3NvdXJjZSAqc291cmNlLAogCUNv bnRyb2xGaWxlX25ldy5taW5SZWNvdmVyeVBvaW50ID0gZW5kcmVjOwogCUNvbnRyb2xGaWxl X25ldy5taW5SZWNvdmVyeVBvaW50VExJID0gZW5kdGxpOwogCUNvbnRyb2xGaWxlX25ldy5z dGF0ZSA9IERCX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7CisJQ29udHJvbEZpbGVfbmV3LmJhY2t1 cExhYmVsUmVxdWlyZWQgPSB0cnVlOwogCWlmICghZHJ5X3J1bikKIAkJdXBkYXRlX2NvbnRy b2xmaWxlKGRhdGFkaXJfdGFyZ2V0LCAmQ29udHJvbEZpbGVfbmV3LCBkb19zeW5jKTsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3VwLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ2JhY2t1cC5oCmluZGV4IGMzMGQ0YTU5OTEuLjkzYTBlNWM1Y2Mg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3VwLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2diYWNrdXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmlu ZSBYTE9HX0JBQ0tVUF9ICiAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJwZ3RpbWUuaCIKIAogLyog U3RydWN0dXJlIHRvIGhvbGQgYmFja3VwIHN0YXRlLiAqLwpAQCAtMzUsNiArMzYsMTMgQEAg dHlwZWRlZiBzdHJ1Y3QgQmFja3VwU3RhdGUKIAlYTG9nUmVjUHRyCXN0b3Bwb2ludDsJCS8q IGJhY2t1cCBzdG9wIFdBTCBsb2NhdGlvbiAqLwogCVRpbWVMaW5lSUQJc3RvcHRsaTsJCS8q IGJhY2t1cCBzdG9wIFRMSSAqLwogCXBnX3RpbWVfdAlzdG9wdGltZTsJCS8qIGJhY2t1cCBz dG9wIHRpbWUgKi8KKworCS8qCisJICogQWZ0ZXIgcGdfYmFja3VwX3N0b3AoKSByZXR1cm5z IHRoaXMgZmllbGQgd2lsbCBjb250YWluIGEgY29weSBvZgorCSAqIHBnX2NvbnRyb2wgdGhh dCBzaG91bGQgYmUgc3RvcmVkIHdpdGggdGhlIGJhY2t1cC4gYmFja3VwTGFiZWxSZXF1aXJl ZAorCSAqIGhhcyBiZWVuIHNldCBzbyBiYWNrdXBfbGFiZWwgd2lsbCBiZSByZXF1aXJlZCBm b3IgcmVjb3ZlcnkgdG8gc3RhcnQuCisJICovCisJdWludDhfdCBjb250cm9sRmlsZVtQR19D T05UUk9MX0ZJTEVfU0laRV07CiB9IEJhY2t1cFN0YXRlOwogCiBleHRlcm4gY2hhciAqYnVp bGRfYmFja3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X2NvbnRyb2wuaAppbmRleCBlODBmZjhlNDE0Li5iNDcxYTliMDJlIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2NvbnRyb2wuaApAQCAtMTY0LDEyICsxNjQsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q29udHJvbEZpbGVEYXRhCiAJICogSWYgYmFja3VwRW5kUmVxdWlyZWQgaXMgdHJ1ZSwgd2Ug a25vdyBmb3Igc3VyZSB0aGF0IHdlJ3JlIHJlc3RvcmluZwogCSAqIGZyb20gYSBiYWNrdXAs IGFuZCBtdXN0IHNlZSBhIGJhY2t1cC1lbmQgcmVjb3JkIGJlZm9yZSB3ZSBjYW4gc2FmZWx5 CiAJICogc3RhcnQgdXAuCisJICoKKwkgKiBJZiBiYWNrdXBMYWJlbFJlcXVpcmVkIGlzIHRy dWUsIHRoZW4gYSBiYWNrdXBfbGFiZWwgZmlsZSBtdXN0IGJlCisJICogcHJlc2VudCBpbiBv cmRlciBmb3IgcmVjb3ZlcnkgdG8gc3VjY2VlZC4KIAkgKi8KIAlYTG9nUmVjUHRyCW1pblJl Y292ZXJ5UG9pbnQ7CiAJVGltZUxpbmVJRAltaW5SZWNvdmVyeVBvaW50VExJOwogCVhMb2dS ZWNQdHIJYmFja3VwU3RhcnRQb2ludDsKIAlYTG9nUmVjUHRyCWJhY2t1cEVuZFBvaW50Owog CWJvb2wJCWJhY2t1cEVuZFJlcXVpcmVkOworCWJvb2wJCWJhY2t1cExhYmVsUmVxdWlyZWQ7 CiAKIAkvKgogCSAqIFBhcmFtZXRlciBzZXR0aW5ncyB0aGF0IGRldGVybWluZSBpZiB0aGUg V0FMIGNhbiBiZSB1c2VkIGZvciBhcmNoaXZhbApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggNzdmNTRhNzllNi4uZWE5MzI0MWVlZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC02NTY5LDggKzY1NjksOCBAQAogeyBvaWQgPT4gJzI3MzknLCBkZXNjciA9PiAn ZmluaXNoIHRha2luZyBhbiBvbmxpbmUgYmFja3VwJywKICAgcHJvbmFtZSA9PiAncGdfYmFj a3VwX3N0b3AnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdyJywKICAg cHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wnLAotICBwcm9h bGxhcmd0eXBlcyA9PiAne2Jvb2wscGdfbHNuLHRleHQsdGV4dH0nLCBwcm9hcmdtb2RlcyA9 PiAne2ksbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3t3YWl0X2Zvcl9hcmNoaXZlLGxz bixsYWJlbGZpbGUsc3BjbWFwZmlsZX0nLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2Jvb2ws cGdfbHNuLHRleHQsdGV4dCxieXRlYX0nLCBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG8sb30n LAorICBwcm9hcmduYW1lcyA9PiAne3dhaXRfZm9yX2FyY2hpdmUsbHNuLGxhYmVsZmlsZSxz cGNtYXBmaWxlLGNvbnRyb2xmaWxlfScsCiAgIHByb3NyYyA9PiAncGdfYmFja3VwX3N0b3An IH0sCiB7IG9pZCA9PiAnMzQzNicsIGRlc2NyID0+ICdwcm9tb3RlIHN0YW5kYnkgc2VydmVy JywKICAgcHJvbmFtZSA9PiAncGdfcHJvbW90ZScsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJv cmV0dHlwZSA9PiAnYm9vbCcsCkBAIC0xMjExOSw5ICsxMjExOSw5IEBACiB7IG9pZCA9PiAn MzQ0MycsCiAgIGRlc2NyID0+ICdwZ19jb250cm9sZGF0YSByZWNvdmVyeSBzdGF0ZSBpbmZv cm1hdGlvbiBhcyBhIGZ1bmN0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfY29udHJvbF9yZWNv dmVyeScsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywKLSAg cHJvYXJndHlwZXMgPT4gJycsIHByb2FsbGFyZ3R5cGVzID0+ICd7cGdfbHNuLGludDQscGdf bHNuLHBnX2xzbixib29sfScsCi0gIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvfScsCi0g IHByb2FyZ25hbWVzID0+ICd7bWluX3JlY292ZXJ5X2VuZF9sc24sbWluX3JlY292ZXJ5X2Vu ZF90aW1lbGluZSxiYWNrdXBfc3RhcnRfbHNuLGJhY2t1cF9lbmRfbHNuLGVuZF9vZl9iYWNr dXBfcmVjb3JkX3JlcXVpcmVkfScsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9hbGxhcmd0 eXBlcyA9PiAne3BnX2xzbixpbnQ0LHBnX2xzbixwZ19sc24sYm9vbCxib29sfScsCisgIHBy b2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3ttaW5f cmVjb3ZlcnlfZW5kX2xzbixtaW5fcmVjb3ZlcnlfZW5kX3RpbWVsaW5lLGJhY2t1cF9zdGFy dF9sc24sYmFja3VwX2VuZF9sc24sZW5kX29mX2JhY2t1cF9yZWNvcmRfcmVxdWlyZWQsYmFj a3VwX2xhYmVsX3JlcXVpcmVkfScsCiAgIHByb3NyYyA9PiAncGdfY29udHJvbF9yZWNvdmVy eScgfSwKIAogeyBvaWQgPT4gJzM0NDQnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wMDJfYXJjaGl2aW5nLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDJfYXJjaGl2 aW5nLnBsCmluZGV4IGJjNDQ3MzMwZTEuLjQ2MmYxZGNmMGQgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlY292ZXJ5L3QvMDAyX2FyY2hpdmluZy5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVy eS90LzAwMl9hcmNoaXZpbmcucGwKQEAgLTQxLDYgKzQxLDI2IEBAICRub2RlX3N0YW5kYnkt PmFwcGVuZF9jb25mKAogYXJjaGl2ZV9jbGVhbnVwX2NvbW1hbmQgPSAnZWNobyBhcmNoaXZl X2NsZWFudXBfZG9uZSA+ICRhcmNoaXZlX2NsZWFudXBfY29tbWFuZF9maWxlJwogcmVjb3Zl cnlfZW5kX2NvbW1hbmQgPSAnZWNobyByZWNvdmVyeV9lbmRlZF9kb25lID4gJHJlY292ZXJ5 X2VuZF9jb21tYW5kX2ZpbGUnCiApKTsKKworIyBSZW5hbWUgYmFja3VwX2xhYmVsIHRvIHZl cmlmeSB0aGF0IHJlY292ZXJ5IHdpbGwgbm90IHN0YXJ0IHdpdGhvdXQgaXQKK3JlbmFtZSgi JGRhdGFfZGlyL2JhY2t1cF9sYWJlbCIsICIkZGF0YV9kaXIvYmFja3VwX2xhYmVsLnRtcCIp CisgIG9yIEJBSUxfT1VUICJjb3VsZCBub3QgbW92ZSAkZGF0YV9kaXIvYmFja3VwX2xhYmVs IjsKKworbXkgJHJlcyA9IHJ1bl9sb2coCisJWworCQkncGdfY3RsJywgJy1EJywgJG5vZGVf c3RhbmRieS0+ZGF0YV9kaXIsICctbCcsCisJCSRub2RlX3N0YW5kYnktPmxvZ2ZpbGUsICdz dGFydCcKKwldKTsKK29rKCEkcmVzLCAnaW52YWxpZCByZWNvdmVyeSBzdGFydHVwIGZhaWxz Jyk7CisKK215ICRsb2dmaWxlID0gc2x1cnBfZmlsZSgkbm9kZV9zdGFuZGJ5LT5sb2dmaWxl KCkpOworb2soJGxvZ2ZpbGUgPX4gcXIvY291bGQgbm90IGZpbmQgYmFja3VwX2xhYmVsIHJl cXVpcmVkIGZvciByZWNvdmVyeS8sCisJJ2NvdWxkIG5vdCBmaW5kIGJhY2t1cF9sYWJlbCBy ZXF1aXJlZCBmb3IgcmVjb3ZlcnknKTsKKworIyBSZXN0b3JlIGJhY2t1cF9sYWJlbCBzbyBy ZWNvdmVyeSBwcm9jZWVkcyBub3JtYWxseQorcmVuYW1lKCIkZGF0YV9kaXIvYmFja3VwX2xh YmVsLnRtcCIsICIkZGF0YV9kaXIvYmFja3VwX2xhYmVsIikKKyAgb3IgQkFJTF9PVVQgImNv dWxkIG5vdCBtb3ZlICRkYXRhX2Rpci9iYWNrdXBfbGFiZWwiOworCiAkbm9kZV9zdGFuZGJ5 LT5zdGFydDsKIAogIyBDcmVhdGUgc29tZSBjb250ZW50IG9uIHByaW1hcnkKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQyX2xvd19sZXZlbF9iYWNrdXAucGwgYi9zcmMv dGVzdC9yZWNvdmVyeS90LzA0Ml9sb3dfbGV2ZWxfYmFja3VwLnBsCmluZGV4IDYxZDIzMTg3 ZTAuLmJkM2E5OTk2MGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQyX2xv d19sZXZlbF9iYWNrdXAucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDJfbG93X2xl dmVsX2JhY2t1cC5wbApAQCAtMTMsNiArMTMsNDIgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9y ZTsKIAorIyBEZWNvZGUgaGV4IHRvIGJpbmFyeQorc3ViIGRlY29kZV9oZXgKK3sKKwlteSAo JGVuY29kZWQpID0gQF87CisJbXkgJGRlY29kZWQ7CisKKwkkZW5jb2RlZCA9fiBzL15ccyt8 XHMrJC8vZzsKKworCWZvciAobXkgJGlkeCA9IDA7ICRpZHggPCBsZW5ndGgoJGVuY29kZWQp OyAkaWR4ICs9IDIpCisJeworCQkkZGVjb2RlZCAuPSBwYWNrKCdDJywgaGV4KHN1YnN0cigk ZW5jb2RlZCwgJGlkeCwgMikpKTsKKwl9CisKKwlyZXR1cm4gJGRlY29kZWQ7Cit9CisKKyMg R2V0IGJhY2t1cF9sYWJlbC9wZ19jb250cm9sIGZyb20gcGdfc3RvcF9iYWNrdXAoKQorc3Vi IHN0b3BfYmFja3VwX3Jlc3VsdAoreworCW15ICgkcHNxbCkgPSBAXzsKKworCW15ICRlbmNv ZGVkID0gJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCSJzZWxlY3QgZW5jb2RlKGxhYmVsZmlsZTo6 Ynl0ZWEsICdoZXgnKSB8fCAnLCcgfHwgIiAuCisJCSIgICAgICAgZW5jb2RlKGNvbnRyb2xm aWxlLCAnaGV4JykiIC4KKwkJIiAgZnJvbSBwZ19iYWNrdXBfc3RvcCgpIik7CisKKwlteSBA cmVzdWx0OworCisgICAgZm9yZWFjaCBteSAkY29sdW1uIChzcGxpdCgnLCcsICRlbmNvZGVk KSkKKwl7CisJCXB1c2goQHJlc3VsdCwgZGVjb2RlX2hleCgkY29sdW1uKSk7CisJfQorCisJ cmV0dXJuIEByZXN1bHQ7Cit9CisKICMgU3RhcnQgcHJpbWFyeSBub2RlIHdpdGggYXJjaGl2 aW5nLgogbXkgJG5vZGVfcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygncHJpbWFyeScpOwogJG5vZGVfcHJpbWFyeS0+aW5pdChoYXNfYXJjaGl2aW5nID0+IDEs IGFsbG93c19zdHJlYW1pbmcgPT4gMSk7CkBAIC04MCw4ICsxMTYsNyBAQCBteSAkc3RvcF9z ZWdtZW50X25hbWUgPSAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkn U0VMRUNUIHBnX3dhbGZpbGVfbmFtZShwZ19jdXJyZW50X3dhbF9sc24oKSknKTsKIAogIyBT dG9wIGJhY2t1cCBhbmQgZ2V0IGJhY2t1cF9sYWJlbCwgdGhlIGxhc3Qgc2VnbWVudCBpcyBh cmNoaXZlZC4KLW15ICRiYWNrdXBfbGFiZWwgPQotICAkcHNxbC0+cXVlcnlfc2FmZSgic2Vs ZWN0IGxhYmVsZmlsZSBmcm9tIHBnX2JhY2t1cF9zdG9wKCkiKTsKKyhteSAkYmFja3VwX2xh YmVsLCBteSAkcGdfY29udHJvbCkgPSBzdG9wX2JhY2t1cF9yZXN1bHQoJHBzcWwpOwogCiAk cHNxbC0+cXVpdDsKIApAQCAtMTE4LDEwICsxNTMsMzYgQEAgb2soICRub2RlX3JlcGxpY2Et PmxvZ19jb250YWlucygKICRub2RlX3JlcGxpY2EtPnRlYXJkb3duX25vZGU7CiAkbm9kZV9y ZXBsaWNhLT5jbGVhbl9ub2RlOwogCisjIFNhdmUgb25seSBwZ19jb250cm9sIGludG8gdGhl IGJhY2t1cCB0byBkZW1vbnN0cmF0ZSB0aGF0IHBnX2NvbnRyb2wgcmV0dXJuZWQKKyMgZnJv bSBwZ19zdG9wX2JhY2t1cCgpIHdpbGwgb25seSBwZXJmb3JtIHJlY292ZXJ5IHdoZW4gYmFj a3VwX2xhYmVsIGlzIHByZXNlbnQuCitvcGVuKG15ICRmaCwgIj4iLCAiJGJhY2t1cF9kaXIv Z2xvYmFsL3BnX2NvbnRyb2wiKQorICBvciBkaWUgImNvdWxkIG5vdCBvcGVuIHBnX2NvbnRy b2wiOworYmlubW9kZSgkZmgpOworc3lzd3JpdGUoJGZoLCAkcGdfY29udHJvbCk7CitjbG9z ZSgkZmgpOworCiskbm9kZV9yZXBsaWNhID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdyZXBsaWNhX2ZhaWwyJyk7Ciskbm9kZV9yZXBsaWNhLT5pbml0X2Zyb21fYmFja3Vw KCRub2RlX3ByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNfcmVzdG9yaW5nID0+IDEpOwor CitteSAkcmVzID0gcnVuX2xvZygKKwlbCisJCSdwZ19jdGwnLCAnLUQnLCAkbm9kZV9yZXBs aWNhLT5kYXRhX2RpciwgJy1sJywKKwkJJG5vZGVfcmVwbGljYS0+bG9nZmlsZSwgJ3N0YXJ0 JworCV0pOworb2soISRyZXMsICdpbnZhbGlkIHJlY292ZXJ5IHN0YXJ0dXAgZmFpbHMnKTsK KworbXkgJGxvZ2ZpbGUgPSBzbHVycF9maWxlKCRub2RlX3JlcGxpY2EtPmxvZ2ZpbGUoKSk7 CitvaygkbG9nZmlsZSA9fiBxci9jb3VsZCBub3QgZmluZCBiYWNrdXBfbGFiZWwgcmVxdWly ZWQgZm9yIHJlY292ZXJ5LywKKwknY291bGQgbm90IGZpbmQgYmFja3VwX2xhYmVsIHJlcXVp cmVkIGZvciByZWNvdmVyeScpOworCiskbm9kZV9yZXBsaWNhLT50ZWFyZG93bl9ub2RlOwor JG5vZGVfcmVwbGljYS0+Y2xlYW5fbm9kZTsKKwogIyBTYXZlIGJhY2t1cF9sYWJlbCBpbnRv IHRoZSBiYWNrdXAgZGlyZWN0b3J5IGFuZCByZWNvdmVyIHVzaW5nIHRoZSBwcmltYXJ5J3MK ICMgYXJjaGl2ZS4gIFRoaXMgdGltZSByZWNvdmVyeSB3aWxsIHN1Y2NlZWQgYW5kIHRoZSBj YW5hcnkgdGFibGUgd2lsbCBiZQogIyBwcmVzZW50Lgotb3BlbiBteSAkZmgsICI+PiIsICIk YmFja3VwX2Rpci9iYWNrdXBfbGFiZWwiCitvcGVuICRmaCwgIj4+IiwgIiRiYWNrdXBfZGly L2JhY2t1cF9sYWJlbCIKICAgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBiYWNrdXBfbGFiZWwi OwogIyBCaW5hcnkgbW9kZSBpcyByZXF1aXJlZCBmb3IgV2luZG93cywgYXMgdGhlIGJhY2t1 cF9sYWJlbCBwYXJzaW5nIGlzIG5vdAogIyBhYmxlIHRvIGNvcGUgd2l0aCBDUkxGcy4KLS0g CjIuMzQuMQoK --------------P2shcraPe0HselG0NE8Lr21z--