Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozzSA-0005pq-Ox for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Nov 2022 12:11:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ozzS9-00048O-7o for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Nov 2022 12:11:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozzS8-00044I-0A for pgsql-hackers@lists.postgresql.org; Tue, 29 Nov 2022 12:11:08 +0000 Received: from mail-4322.protonmail.ch ([185.70.43.22]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ozzRy-0002rh-SP for pgsql-hackers@lists.postgresql.org; Tue, 29 Nov 2022 12:11:06 +0000 Date: Tue, 29 Nov 2022 12:10:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1669723851; x=1669983051; bh=3pMG7/7XK0UNHnlcP+/izMC18Rq46NT2uaz2RbO60WA=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=kmjo4nMhN+ER1/4rConuCt3eJEtVj39KEtXmN1EqhxH7Vo9cW/JpHEC4A/X44Pm74 NhEmpDuBRwkjM4gS+Vmku7Odqou2YY2Ykv6dpFf+DZ9uaDw9LmSFKx8hoNOvwvBOzy ILSNujuj/e/KWTeSlv3f74eOFn1+ga02mcVRLurwH8c9dfb/XdmVgZPKohU7uprOcj aOMsGXYhZVLcNdqxg4OqWNKHHlfvMT+sx1zC51zMPl0Tr5Ct6sNmvzLrqNa01OZP+r wdy0bpGh2UjgQ6KOtAhK3DCF3yH8p43510b87AAX1mXGa8pWEeMquCqdgmJMwsohWT j9xrDVa8e3Yeg== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <165970942594.29780.15623018354659505573.pgcf@coridan.postgresql.org> <-pU80vtiyXMfSSpn4SWOR97t71MVmDOyHaJtvGsdEfroFsFUDdc-UaqD-8LMPMw2sy-7B2_IVnlrATfVvXwtv8n3kexLePZ7iWgiOnE4jRI=@pm.me> <20221120172611.GQ11463@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc" 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. --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Tuesday, November 29th, 2022 at 7:19 AM, Michael Paquier wrote: >=20 >=20 > On Mon, Nov 28, 2022 at 04:32:43PM +0000, gkokolatos@pm.me wrote: >=20 > > The focus of this version of this series is 0001 and 0002. > >=20 > > Admittedly 0001 could be presented in a separate thread though given it= s size and > > proximity to the topic, I present it here. >=20 >=20 > I don't mind. This was a hole in meson.build, so nice catch! I have > noticed a second defect with pg_verifybackup for all the commands, and > applied both at the same time. Thank you. >=20 > > In an earlier review you spotted the similarity between pg_dump's and p= g_receivewal's > > parsing of compression options. However there exists a substantial diff= erence in the > > behaviour of the two programs; one treats the lack of support for the r= equested > > algorithm as a fatal error, whereas the other does not. The existing fu= nctions in > > common/compression.c do not account for the later. 0002 proposes an imp= lementation > > for this. It's usefulness is shown in 0003. >=20 >=20 > In what does it matter? The logic in compression.c provides an error > when looking at a spec or validating it, but the caller is free to > consume it as it wants because this is shared between the frontend and > the backend, and that includes consuming it as a warning rather than a > ahrd failure. If we don't want to issue an error and force > non-compression if attempting to use a compression method not > supported in pg_dump, that's fine by me as a historical behavior, but > I don't see why these routines have any need to be split more as > proposed in 0002. I understand. The reason for the change in the routines was because it was impossible to distinguish a genuine parse error from a missing library in parse_compress_specification(). If the zlib library is missing, then both '--compress=3Dgzip:garbage' and '--compress=3Dgzip:7' would populate the parse_error member of the struct and subsequent calls to validate_compress_specification() would error out, although only one of the two options is truly an error. Historically the code would fail on invalid input regardless of whether the library was present or not. > Saying that, I do agree that it would be nice to remove the > duplication between the option parsing of pg_basebackup and > pg_receivewal. Your patch is very close to that, actually, and it > occured to me that if we move the check on "server-" and "client-" in > pg_basebackup to be just before the integer-only check then we can > consolidate the whole thing. Great. I did notice the possible benefit but chose to not tread too far off the necessary in my patch. =20 > Attached is an alternative that does not sacrifice the pluggability of > the existing routines while allowing 0003~ to still use them (I don't > really want to move around the checks on the supported build options > now in parse_compress_specification(), that was hard enough to settle > on this location). Yeah, I thought that it would be a hard sell, hence an "earlier" version. The attached version 10, contains verbatim your proposed v9 as 0001. Then 0002 is switching a bit the parsing order in pg_dump and will not fail as described above on missing libraries. Now, it will first parse the algorithm, discard it when unsupported, and only parse the rest of the option if the algorithm is supported. Granted it is a bit 'uglier' with the preprocessing blocks, yet it maintains most of the historic behaviour without altering the common compression interfaces. Now, as shown in 001_basic.pl, invalid detail will fail only if the algorithm is supported. > On top of that, pg_basebackup is able to cope with > the case of --compress=3D0 already, enforcing "none" (BaseBackup could > be simplified a bit more before StartLogStreamer). This refactoring > shaves a little bit of code. >=20 > > Please consider 0003-0005 as work in progress. They are differences fro= m v7 yet they > > may contain unaddressed comments for now. >=20 >=20 > Okay. Thank you. Please advice if is preferable to split 0002 in two parts. I think not but I will happily do so if you think otherwise. Cheers, //Georgios > -- > Michael --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc Content-Type: text/x-patch; name=v10-0001-Make-the-pg_receivewal-compression-parsing-funct.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0001-Make-the-pg_receivewal-compression-parsing-funct.patch RnJvbSBmOTczOGFjZjNmNjY3MzQ0N2UxMTk5OWFiMDJkZTcwM2UyZDAxOTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTm92IDIwMjIgMTE6MjI6MzggKzAwMDAKU3ViamVjdDogW1BBVENIIHYx MCAxLzRdIE1ha2UgdGhlIHBnX3JlY2VpdmV3YWwgY29tcHJlc3Npb24gcGFyc2luZyBmdW5jdGlv bgogY29tbW9uCgpBbHNvIGFuZCByZWxheCBwYXJzaW5nIGVycm9ycyBpbiB0aGUgaGVscGVyIGZ1 bmN0aW9ucyBhbmQgcmUtaW50cm9kdWNlIHRob3NlIGFzCmFuIGluZGVwZW5kZWQgZnVuY3Rpb24u CgpBcyBpdCBpcyBzaG93biBpbiB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggc2VyaWVzLCB0aGVyZSBp cyBhIGxvdCBvZiBkdXBsaWNhdGlvbgpiZXR3ZWVuIHBnX2R1bXAncyBwYXJzaW5nIG9mIGNvbXBy ZXNzaW9uIG9wdGlvbnMgYW5kIHBnX3JlY2VpdmV3YWwncy4gTm93IHRoZQpjb3JlIHdvcmsgaXMg ZG9uZSBpbiBjb21tb24uIEhvd2V2ZXIgcGdfZHVtcCB3b3VsZCBub3QgZXJyb3Igb3V0IGlmIHRo ZQpyZXF1ZXN0ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl IGJ1aWxkLCB3aGVyZWFzIG90aGVyCmNhbGxlcnMgd2lsbCBlcnJvciBvdXQuIEFsc28gaXQgc2Vl bXMgYSBiaXQgd2VpcmQgZm9yIG9ubHkgb25lIG9mIHRoZSBwYXJzaW5nCmZ1bmN0aW9ucyBmb3Ig Y29tcHJlc3Npb25zIHRvIGVycm9yIG91dCBvbiBtaXNzaW5nIHN1cHBvcnQgYW5kIHRoYXQgb25l IHRvIG5vdApiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBpZGVudGlmeWluZyB0aGUgY29tcHJl c3Npb24gYWxnb3JpdGhtLgoKQSBuZXcgZnVuY3Rpb24gaXMgYWRkZWQgdG8gdGVzdCB0aGUgc3Vw cG9ydCBvZiB0aGUgYWxnb3JpdGhtIGFsbG93aW5nIHRoZSB1c2VyCnRvIHR1bmUgdGhlIGJlaGF2 aW91ci4KCkF1dGhvcmVkIGJ5IE1pY2hlYWwgUGFxdWllcgotLS0KIHNyYy9iaW4vcGdfYmFzZWJh Y2t1cC9wZ19iYXNlYmFja3VwLmMgfCA0OSArKysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4v cGdfYmFzZWJhY2t1cC9wZ19yZWNlaXZld2FsLmMgfCA2MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jICAgICAgICAgICAgICB8IDYzICsrKysrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggICAg ICB8ICAyICsKIDQgZmlsZXMgY2hhbmdlZCwgNzMgaW5zZXJ0aW9ucygrKSwgMTAyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMg Yi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCmluZGV4IDIyODM2Y2EwMWEu LjRmNTZjOWY0NjQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFj a3VwLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYwpAQCAtOTU2 LDI3ICs5NTYsMTMgQEAgcGFyc2VfbWF4X3JhdGUoY2hhciAqc3JjKQogICogYXQgYSBsYXRlciBz dGFnZS4KICAqLwogc3RhdGljIHZvaWQKLXBhcnNlX2NvbXByZXNzX29wdGlvbnMoY2hhciAqb3B0 aW9uLCBjaGFyICoqYWxnb3JpdGhtLCBjaGFyICoqZGV0YWlsLAotCQkJCQkgICBDb21wcmVzc2lv bkxvY2F0aW9uICpsb2NhdGlvbnJlcykKK2JhY2t1cF9wYXJzZV9jb21wcmVzc19vcHRpb25zKGNo YXIgKm9wdGlvbiwgY2hhciAqKmFsZ29yaXRobSwgY2hhciAqKmRldGFpbCwKKwkJCQkJCQkgIENv bXByZXNzaW9uTG9jYXRpb24gKmxvY2F0aW9ucmVzKQogewotCWNoYXIJICAgKnNlcDsKLQljaGFy CSAgICplbmRwOwotCiAJLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wcmVzc2lvbiBzcGVj aWZpY2F0aW9uIGNvbnNpc3RzIG9mIGEgYmFyZSBpbnRlZ2VyLgotCSAqCi0JICogSWYgc28sIGZv ciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhc3N1bWUgZ3ppcC4KKwkgKiBTdHJpcCBvZmYgYW55 ICJjbGllbnQtIiBvciAic2VydmVyLSIgcHJlZml4LCBjYWxjdWxhdGluZyB0aGUKKwkgKiBsb2Nh dGlvbi4KIAkgKi8KLQkodm9pZCkgc3RydG9sKG9wdGlvbiwgJmVuZHAsIDEwKTsKLQlpZiAoKmVu ZHAgPT0gJ1wwJykKLQl7Ci0JCSpsb2NhdGlvbnJlcyA9IENPTVBSRVNTX0xPQ0FUSU9OX1VOU1BF Q0lGSUVEOwotCQkqYWxnb3JpdGhtID0gcHN0cmR1cCgiZ3ppcCIpOwotCQkqZGV0YWlsID0gcHN0 cmR1cChvcHRpb24pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogU3RyaXAgb2ZmIGFueSAiY2xpZW50 LSIgb3IgInNlcnZlci0iIHByZWZpeC4gKi8KIAlpZiAoc3RybmNtcChvcHRpb24sICJzZXJ2ZXIt IiwgNykgPT0gMCkKIAl7CiAJCSpsb2NhdGlvbnJlcyA9IENPTVBSRVNTX0xPQ0FUSU9OX1NFUlZF UjsKQEAgLTk5MCwyNyArOTc2LDggQEAgcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhjaGFyICpvcHRp b24sIGNoYXIgKiphbGdvcml0aG0sIGNoYXIgKipkZXRhaWwsCiAJZWxzZQogCQkqbG9jYXRpb25y ZXMgPSBDT01QUkVTU19MT0NBVElPTl9VTlNQRUNJRklFRDsKIAotCS8qCi0JICogQ2hlY2sgd2hl dGhlciB0aGVyZSBpcyBhIGNvbXByZXNzaW9uIGRldGFpbCBmb2xsb3dpbmcgdGhlIGFsZ29yaXRo bQotCSAqIG5hbWUuCi0JICovCi0Jc2VwID0gc3RyY2hyKG9wdGlvbiwgJzonKTsKLQlpZiAoc2Vw ID09IE5VTEwpCi0JewotCQkqYWxnb3JpdGhtID0gcHN0cmR1cChvcHRpb24pOwotCQkqZGV0YWls ID0gTlVMTDsKLQl9Ci0JZWxzZQotCXsKLQkJY2hhcgkgICAqYWxnOwotCi0JCWFsZyA9IHBhbGxv Yygoc2VwIC0gb3B0aW9uKSArIDEpOwotCQltZW1jcHkoYWxnLCBvcHRpb24sIHNlcCAtIG9wdGlv bik7Ci0JCWFsZ1tzZXAgLSBvcHRpb25dID0gJ1wwJzsKLQotCQkqYWxnb3JpdGhtID0gYWxnOwot CQkqZGV0YWlsID0gcHN0cmR1cChzZXAgKyAxKTsKLQl9CisJLyogZmFsbGJhY2sgdG8gdGhlIGNv bW1vbiBwYXJzaW5nIGZvciB0aGUgYWxnb3JpdGhtIGFuZCBkZXRhaWwgKi8KKwlwYXJzZV9jb21w cmVzc19vcHRpb25zKG9wdGlvbiwgYWxnb3JpdGhtLCBkZXRhaWwpOwogfQogCiAvKgpAQCAtMjQx MSw4ICsyMzc4LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJY29tcHJlc3Ns b2MgPSBDT01QUkVTU19MT0NBVElPTl9VTlNQRUNJRklFRDsKIAkJCQlicmVhazsKIAkJCWNhc2Ug J1onOgotCQkJCXBhcnNlX2NvbXByZXNzX29wdGlvbnMob3B0YXJnLCAmY29tcHJlc3Npb25fYWxn b3JpdGhtLAotCQkJCQkJCQkJICAgJmNvbXByZXNzaW9uX2RldGFpbCwgJmNvbXByZXNzbG9jKTsK KwkJCQliYWNrdXBfcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhvcHRhcmcsICZjb21wcmVzc2lvbl9h bGdvcml0aG0sCisJCQkJCQkJCQkJCSAgJmNvbXByZXNzaW9uX2RldGFpbCwgJmNvbXByZXNzbG9j KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2MnOgogCQkJCWlmIChwZ19zdHJjYXNlY21wKG9wdGFy ZywgImZhc3QiKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX3Jl Y2VpdmV3YWwuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19yZWNlaXZld2FsLmMKaW5kZXgg NjMyMDdjYTAyNS4uYzdhNDZiOGEyYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3Vw L3BnX3JlY2VpdmV3YWwuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfcmVjZWl2ZXdh bC5jCkBAIC01Nyw4ICs1Nyw2IEBAIHN0YXRpYyBYTG9nUmVjUHRyIGVuZHBvcyA9IEludmFsaWRY TG9nUmVjUHRyOwogCiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwotc3RhdGljIHZvaWQgcGFy c2VfY29tcHJlc3Nfb3B0aW9ucyhjaGFyICpvcHRpb24sIGNoYXIgKiphbGdvcml0aG0sCi0JCQkJ CQkJCSAgIGNoYXIgKipkZXRhaWwpOwogc3RhdGljIERJUiAqZ2V0X2Rlc3RpbmF0aW9uX2Rpcihj aGFyICpkZXN0X2ZvbGRlcik7CiBzdGF0aWMgdm9pZCBjbG9zZV9kZXN0aW5hdGlvbl9kaXIoRElS ICpkZXN0X2RpciwgY2hhciAqZGVzdF9mb2xkZXIpOwogc3RhdGljIFhMb2dSZWNQdHIgRmluZFN0 cmVhbWluZ1N0YXJ0KHVpbnQzMiAqdGxpKTsKQEAgLTEwOSw2NSArMTA3LDYgQEAgdXNhZ2Uodm9p ZCkKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNL QUdFX1VSTCk7CiB9CiAKLS8qCi0gKiBCYXNpYyBwYXJzaW5nIG9mIGEgdmFsdWUgc3BlY2lmaWVk IGZvciAtWi8tLWNvbXByZXNzCi0gKgotICogVGhlIHBhcnNpbmcgY29uc2lzdHMgb2YgYSBNRVRI T0Q6REVUQUlMIHN0cmluZyBmZWQgbGF0ZXIgb24gdG8gYSBtb3JlCi0gKiBhZHZhbmNlZCByb3V0 aW5lIGluIGNoYXJnZSBvZiBwcm9wZXIgdmFsaWRhdGlvbiBjaGVja3MuICBUaGlzIG9ubHkgZXh0 cmFjdHMKLSAqIE1FVEhPRCBhbmQgREVUQUlMLiAgSWYgb25seSBhbiBpbnRlZ2VyIGlzIGZvdW5k LCB0aGUgbWV0aG9kIGlzIGltcGxpZWQgYnkKLSAqIHRoZSB2YWx1ZSBzcGVjaWZpZWQuCi0gKi8K LXN0YXRpYyB2b2lkCi1wYXJzZV9jb21wcmVzc19vcHRpb25zKGNoYXIgKm9wdGlvbiwgY2hhciAq KmFsZ29yaXRobSwgY2hhciAqKmRldGFpbCkKLXsKLQljaGFyCSAgICpzZXA7Ci0JY2hhcgkgICAq ZW5kcDsKLQlsb25nCQlyZXN1bHQ7Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBy ZXNzaW9uIHNwZWNpZmljYXRpb24gY29uc2lzdHMgb2YgYSBiYXJlIGludGVnZXIuCi0JICoKLQkg KiBGb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSwgYXNzdW1lICJub25lIiBpZiB0aGUgaW50ZWdl ciBmb3VuZCBpcyB6ZXJvCi0JICogYW5kICJnemlwIiBvdGhlcndpc2UuCi0JICovCi0JcmVzdWx0 ID0gc3RydG9sKG9wdGlvbiwgJmVuZHAsIDEwKTsKLQlpZiAoKmVuZHAgPT0gJ1wwJykKLQl7Ci0J CWlmIChyZXN1bHQgPT0gMCkKLQkJewotCQkJKmFsZ29yaXRobSA9IHBzdHJkdXAoIm5vbmUiKTsK LQkJCSpkZXRhaWwgPSBOVUxMOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJKmFsZ29yaXRobSA9IHBz dHJkdXAoImd6aXAiKTsKLQkJCSpkZXRhaWwgPSBwc3RyZHVwKG9wdGlvbik7Ci0JCX0KLQkJcmV0 dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGNvbXByZXNzaW9u IGRldGFpbCBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobQotCSAqIG5hbWUuCi0JICovCi0Jc2VwID0g c3RyY2hyKG9wdGlvbiwgJzonKTsKLQlpZiAoc2VwID09IE5VTEwpCi0JewotCQkqYWxnb3JpdGht ID0gcHN0cmR1cChvcHRpb24pOwotCQkqZGV0YWlsID0gTlVMTDsKLQl9Ci0JZWxzZQotCXsKLQkJ Y2hhcgkgICAqYWxnOwotCi0JCWFsZyA9IHBhbGxvYygoc2VwIC0gb3B0aW9uKSArIDEpOwotCQlt ZW1jcHkoYWxnLCBvcHRpb24sIHNlcCAtIG9wdGlvbik7Ci0JCWFsZ1tzZXAgLSBvcHRpb25dID0g J1wwJzsKLQotCQkqYWxnb3JpdGhtID0gYWxnOwotCQkqZGV0YWlsID0gcHN0cmR1cChzZXAgKyAx KTsKLQl9Ci19CiAKIC8qCiAgKiBDaGVjayBpZiB0aGUgZmlsZW5hbWUgbG9va3MgbGlrZSBhIFdB TCBmaWxlLCBsZXR0aW5nIGNhbGxlciBrbm93IGlmIHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9jb21t b24vY29tcHJlc3Npb24uYyBiL3NyYy9jb21tb24vY29tcHJlc3Npb24uYwppbmRleCBkZjViNjI3 ODM0Li41Mjc0YmE1YmE4IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL2NvbXByZXNzaW9uLmMKKysr IGIvc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jCkBAIC0zNTYsMyArMzU2LDY2IEBAIHZhbGlkYXRl X2NvbXByZXNzX3NwZWNpZmljYXRpb24ocGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqc3BlYykK IAogCXJldHVybiBOVUxMOwogfQorCisjaWZkZWYgRlJPTlRFTkQKKworLyoKKyAqIEJhc2ljIHBh cnNpbmcgb2YgYSB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaCBhIGNvbW1hbmQtbGluZSBvcHRpb24s IGNvbW1vbmx5CisgKiAtWi8tLWNvbXByZXNzLgorICoKKyAqIFRoZSBwYXJzaW5nIGNvbnNpc3Rz IG9mIGEgTUVUSE9EOkRFVEFJTCBzdHJpbmcgZmVkIGxhdGVyIHRvCisgKiBwYXJzZV9jb21wcmVz c19zcGVjaWZpY2F0aW9uKCkuICBUaGlzIG9ubHkgZXh0cmFjdHMgTUVUSE9EIGFuZCBERVRBSUwu CisgKiBJZiBvbmx5IGFuIGludGVnZXIgaXMgZm91bmQsIHRoZSBtZXRob2QgaXMgaW1wbGllZCBi eSB0aGUgdmFsdWUgc3BlY2lmaWVkLgorICovCit2b2lkCitwYXJzZV9jb21wcmVzc19vcHRpb25z KGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqKmFsZ29yaXRobSwgY2hhciAqKmRldGFpbCkKK3sK KwljaGFyCSAgICpzZXA7CisJY2hhcgkgICAqZW5kcDsKKwlsb25nCQlyZXN1bHQ7CisKKwkvKgor CSAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbXByZXNzaW9uIHNwZWNpZmljYXRpb24gY29uc2lzdHMg b2YgYSBiYXJlIGludGVnZXIuCisJICoKKwkgKiBGb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSwg YXNzdW1lICJub25lIiBpZiB0aGUgaW50ZWdlciBmb3VuZCBpcyB6ZXJvCisJICogYW5kICJnemlw IiBvdGhlcndpc2UuCisJICovCisJcmVzdWx0ID0gc3RydG9sKG9wdGlvbiwgJmVuZHAsIDEwKTsK KwlpZiAoKmVuZHAgPT0gJ1wwJykKKwl7CisJCWlmIChyZXN1bHQgPT0gMCkKKwkJeworCQkJKmFs Z29yaXRobSA9IHBzdHJkdXAoIm5vbmUiKTsKKwkJCSpkZXRhaWwgPSBOVUxMOworCQl9CisJCWVs c2UKKwkJeworCQkJKmFsZ29yaXRobSA9IHBzdHJkdXAoImd6aXAiKTsKKwkJCSpkZXRhaWwgPSBw c3RyZHVwKG9wdGlvbik7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQ2hlY2sgd2hl dGhlciB0aGVyZSBpcyBhIGNvbXByZXNzaW9uIGRldGFpbCBmb2xsb3dpbmcgdGhlIGFsZ29yaXRo bQorCSAqIG5hbWUuCisJICovCisJc2VwID0gc3RyY2hyKG9wdGlvbiwgJzonKTsKKwlpZiAoc2Vw ID09IE5VTEwpCisJeworCQkqYWxnb3JpdGhtID0gcHN0cmR1cChvcHRpb24pOworCQkqZGV0YWls ID0gTlVMTDsKKwl9CisJZWxzZQorCXsKKwkJY2hhcgkgICAqYWxnOworCisJCWFsZyA9IHBhbGxv Yygoc2VwIC0gb3B0aW9uKSArIDEpOworCQltZW1jcHkoYWxnLCBvcHRpb24sIHNlcCAtIG9wdGlv bik7CisJCWFsZ1tzZXAgLSBvcHRpb25dID0gJ1wwJzsKKworCQkqYWxnb3JpdGhtID0gYWxnOwor CQkqZGV0YWlsID0gcHN0cmR1cChzZXAgKyAxKTsKKwl9Cit9CisjZW5kaWYJLyogRlJPTlRFTkQg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lvbi5oIGIvc3JjL2lu Y2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKaW5kZXggNWQ2ODAwNThlZC4uNDY4NTViMWEzYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKQEAgLTMzLDYgKzMzLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbgogCWNoYXIJICAgKnBhcnNlX2Vycm9yOwkvKiBO VUxMIGlmIHBhcnNpbmcgd2FzIE9LLCBlbHNlIG1lc3NhZ2UgKi8KIH0gcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbjsKIAorZXh0ZXJuIHZvaWQgcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhjb25zdCBj aGFyICpvcHRpb24sIGNoYXIgKiphbGdvcml0aG0sCisJCQkJCQkJCSAgIGNoYXIgKipkZXRhaWwp OwogZXh0ZXJuIGJvb2wgcGFyc2VfY29tcHJlc3NfYWxnb3JpdGhtKGNoYXIgKm5hbWUsIHBnX2Nv bXByZXNzX2FsZ29yaXRobSAqYWxnb3JpdGhtKTsKIGV4dGVybiBjb25zdCBjaGFyICpnZXRfY29t cHJlc3NfYWxnb3JpdGhtX25hbWUocGdfY29tcHJlc3NfYWxnb3JpdGhtIGFsZ29yaXRobSk7CiAK LS0gCjIuMzQuMQoK --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc Content-Type: text/x-patch; name=v10-0004-Add-LZ4-compression-in-pg_-dump-restore.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0004-Add-LZ4-compression-in-pg_-dump-restore.patch RnJvbSA4NDM3Y2U4MTJjNDVjYzg0Nzc0NDVlNWMxNzhlNmM2OWZkNDU2NjZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTm92IDIwMjIgMTE6MjM6MDAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYx MCA0LzRdIEFkZCBMWjQgY29tcHJlc3Npb24gaW4gcGdfe2R1bXB8cmVzdG9yZX0KCldpdGhpbiBj b21wcmVzc19sejQue2MsaH0gdGhlIHN0cmVhbWluZyBBUEkgYW5kIGEgZmlsZSBBUEkgY29tcHJl c3Npb24gaXMKaW1wbGVtZW50ZWQuLiBUaGUgZmlyc3Qgb25lLCBpcyBhaW1lZCBhdCBpbmxpbmVk IHVzZSBjYXNlcyBhbmQgdGh1cyBzaW1wbGUKbHo0LmggY2FsbHMgY2FuIGJlIHVzZWQgZGlyZWN0 bHkuIFRoZSBzZWNvbmQgb25lIGlzIGdlbmVyYXRpbmcgb3V0cHV0LCBvciBpcwpwYXJzaW5nIGlu cHV0LCB3aGljaCBjYW4gYmUgcmVhZC9nZW5lcmF0ZWQgdmlhIHRoZSBsejQgdXRpbGl0eS4KCldo ZXJldmVyIHRoZSBMWjRGIGFwaSBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsIHRoZSBmdW5jdGlvbmFs aXR5IGNvcnJlc3BvbmRpbmcKdG8gZnJlYWQoKSwgZndyaXRlKCksIGZnZXRzKCksIGZnZXRjKCks IGZlb2YoKSwgYW5kIGZjbG9zZSgpLCBpdCBoYXMgYmVlbgppbXBsZW1lbnRlZCBsb2NhbHkuCi0t LQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgIHwgIDIzICstCiBzcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmMgICAgICAgIHwgIDQxICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmMgICAgICAgfCA1OTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfbHo0LmggICAgICAgfCAgIDkgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkICAgICAgICAgIHwgICA4ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgfCAgMTQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAxMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICAyICstCiBzcmMvYmlu L3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgfCAgNjkgKysrLQogMTAgZmlsZXMgY2hhbmdl ZCwgNzQyIGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19sejQuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYv cGdfZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggM2ZiOGZk Y2U4MS4uODRkMzc3OGM5OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTMyOCw5ICszMjgsMTAg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUg Zm9ybWF0IHRoYXQgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgICAg ICAgICBjYW4gcmVhZC4gQSBkaXJlY3RvcnkgZm9ybWF0IGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxh dGVkIHdpdGgKICAgICAgICAgICAgc3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1wbGUsIGZp bGVzIGluIGFuIHVuY29tcHJlc3NlZCBhcmNoaXZlCi0gICAgICAgICAgIGNhbiBiZSBjb21wcmVz c2VkIHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gdG9vbC4KLSAgICAg ICAgICAgVGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IGFuZCBhbHNvIHN1cHBv cnRzIHBhcmFsbGVsCi0gICAgICAgICAgIGR1bXBzLgorICAgICAgICAgICBjYW4gYmUgY29tcHJl c3NlZCB3aXRoIHRoZSA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IG9yCisgICAgICAg ICAgIDxhcHBsaWNhdGlvbj5sejQ8L2FwcGxpY2F0aW9uPnRvb2wuCisgICAgICAgICAgIFRoaXMg Zm9ybWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCB1c2luZyA8bGl0ZXJhbD5nemlwPC9saXRl cmFsPgorICAgICAgICAgICBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KICAgICAg ICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KQEAgLTY1MiwxMiArNjUzLDEyIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAg IDxwYXJhPgogICAgICAgICBTcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYW5kL29yIHRo ZSBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UuCiAgICAgICAgIFRoZSBjb21wcmVzc2lvbiBtZXRo b2QgY2FuIGJlIHNldCB0byA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBvcgotICAgICAgICA8bGl0 ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uIEEgY29tcHJlc3Npb24gbGV2 ZWwgY2FuCi0gICAgICAgIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkLCBieSBhcHBlbmRpbmcgdGhl IGxldmVsIG51bWJlciBhZnRlciBhIGNvbG9uCi0gICAgICAgICg8bGl0ZXJhbD46PC9saXRlcmFs PikuIElmIG5vIGxldmVsIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24KLSAg ICAgICAgbGV2ZWwgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZC4gSWYgb25s eSBhIGxldmVsIGlzCi0gICAgICAgIHNwZWNpZmllZCB3aXRob3V0IG1lbnRpb25pbmcgYSBtZXRo b2QsIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IGNvbXByZXNzaW9uCi0gICAgICAgIHdpbGwgYmUg dXNlZC4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5ub25lPC9s aXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uIEEKKyAgICAgICAgY29tcHJlc3Npb24gbGV2ZWwg Y2FuIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkLCBieSBhcHBlbmRpbmcgdGhlIGxldmVsCisgICAg ICAgIG51bWJlciBhZnRlciBhIGNvbG9uICg8bGl0ZXJhbD46PC9saXRlcmFsPikuIElmIG5vIGxl dmVsIGlzIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwg d2lsbCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZC4gSWYKKyAgICAgICAgb25seSBh IGxldmVsIGlzIHNwZWNpZmllZCB3aXRob3V0IG1lbnRpb25pbmcgYSBtZXRob2QsCisgICAgICAg IDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+IGNvbXByZXNzaW9uIHdpbGxiZSB1c2VkLgogICAgICAg IDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtNjY1LDggKzY2Niw4IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2VnbWVudHMsIGFu ZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8bGl0ZXJhbD5nemlw PC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBvdXRwdXQsCiAg ICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcyB0aGUgZW50 aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFzIHRob3VnaCBpdCBo YWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+OyBidXQg dGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgICBhcyB0aG91 Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9u PiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47IGJ1dCB0aGUgZGVm YXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgog ICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAyOWVhYjAyZDM3Li4yOGMxZmMyN2Nj IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBp bmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIGV4cG9ydCBHWklQ X1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1CiAKIG92ZXJyaWRl IENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBAIC0yNSw2ICsyNiw3 IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1s cGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCiAJY29t cHJlc3NfZ3ppcC5vIFwKKwljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3NfaW8ubyBcCiAJZHVt cHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCAzMDY1YmQ3 NmZhLi4yOWUyMzUyYzMxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u YworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtMzgsMTMgKzM4LDE1IEBA CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhlIGNvbXByZXNzZWQgc3RyZWFt IEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0gKgls aWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rp b25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9y ZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJdGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1lLCBh bmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0aCB0 aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkgb3BlbnMgYSBmaWxlIGZvciB3cml0aW5nLCBh bgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBjb21w cmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBzdWZmaXggdG8gdGhlIGZpbGVuYW1lIGlmIHNv LiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZSBib3RoCi0gKgljb21wcmVzc2VkIGFu ZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcyBhbmQgY3VzdG9t IExaNCBjYWxscyB3aGljaCBwcm92aWRlIHNpbWlsYXIKKyAqCWZ1bmN0aW9uYWxpdHkuIEl0IGFs bG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBmb3IgY29tcHJlc3NlZCBhbmQKKyAq CXVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9wZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9wZW4g dGhlIGZpbGUgd2l0aCBnaXZlbgorICoJbmFtZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0 byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeCwKKyAqCWZhaWxpbmcgdGhh dCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmx6NCBzdWZmaXguCisg KgljZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdyaXRpbmcsIGFuIGV4dHJhIGFyZ3Vt ZW50IHNwZWNpZmllcyB0aGUKKyAqCW1ldGhvZCB0byB1c2Ugc2hvdWxkIHRoZSBmaWxlIGJlIGNv bXByZXNzZWQsIGFuZCBhZGRzIHRoZSBhcHByb3ByaWF0ZQorICoJc3VmZml4LCAuZ3ogb3IgLmx6 NCwgdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRs ZQorICoJYm90aCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCiAgKgogICogSURF TlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Nyw2 ICs1OSw3IEBACiAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImNvbXByZXNz X2d6aXAuaCIKKyNpbmNsdWRlICJjb21wcmVzc19sejQuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBf dXRpbHMuaCIKIAogI2lmZGVmIEhBVkVfTElCWgpAQCAtMTI5LDYgKzEzMiw5IEBAIEFsbG9jYXRl Q29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMs CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKIAkJCUluaXRDb21wcmVzc29yR3ppcChjcywg Y29tcHJlc3Nfc3BlYy5sZXZlbCk7CiAJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9M WjQ6CisJCQlJbml0Q29tcHJlc3NvckxaNChjcywgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CisJCQli cmVhazsKIAkJZGVmYXVsdDoKIAkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhv ZCIpOwogCQkJYnJlYWs7CkBAIC0xNzksNiArMTg1LDcgQEAgZnJlZV9rZWVwX2Vycm5vKHZvaWQg KnApCiAvKgogICogQ29tcHJlc3Npb24gTm9uZSBpbXBsZW1lbnRhdGlvbgogICovCisKIHN0YXRp YyBzaXplX3QKIF9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqIENGSCkKIHsKQEAgLTMxNCw2ICszMjEsOSBAQCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKIAkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgogCQkJSW5pdENvbXByZXNzR3ppcChDRkgsIGNvbXByZXNzX3NwZWMu bGV2ZWwpOwogCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJSW5pdENv bXByZXNzTFo0KENGSCwgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CisJCQlicmVhazsKIAkJZGVmYXVs dDoKIAkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwogCQkJYnJlYWs7 CkBAIC0zMjYsMTIgKzMzNiwxMiBAQCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKICAqIE9wZW4gYSBmaWxlIGZvciBy ZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKICAq IGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9l cyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZgorICogSWYgdGhlIGZp bGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICJ7Lmd6LC5sejR9IiBz dWZmaXggKGkKICAqICdwYXRoJyBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fp bi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMKLSAqICdwYXRoJywgdGhpcyB3aWxsIG9wZW4gZWl0 aGVyICJmb28iIG9yICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqICdwYXRoJywg dGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5 aW5nIGluIHRoYXQKKyAqIG9yZGVyLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdp dGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqCiAgKi8KIENvbXByZXNzRmlsZUhhbmRsZSAq CiBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qg Y2hhciAqbW9kZSkKQEAgLTM2Nyw2ICszNzcsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxl SGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3Rz KQogCQkJCWNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJ fQorI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9r ZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOwor CQkJZXhpc3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJ CQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0KICNl bmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jIGIv c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjZmNDY4MGMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw1OTMgQEAKKyNpbmNsdWRlICJwb3N0Z3Jlc19m ZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3Nf bHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0CisjaW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0 ZnJhbWUuaD4KKworI2RlZmluZSBMWjRfT1VUX1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRf SU5fU0laRQkJKDE2ICogMTAyNCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21w cmVzc29yIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBzdHJ1 Y3QgTFo0Q29tcHJlc3NvclN0YXRlCit7CisJY2hhcgkgICAqb3V0YnVmOworCXNpemVfdAkJb3V0 c2l6ZTsKK30JCQlMWjRDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhh dCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZCBSZWFkRGF0 YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsK K3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVMWjQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJTFo0X3N0cmVhbURl Y29kZV90IGx6NFN0cmVhbURlY29kZTsKKwljaGFyCSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVm OworCXNpemVfdAkJYnVmbGVuOworCXNpemVfdAkJY250OworCisJYnVmbGVuID0gTFo0X0lOX1NJ WkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxl bik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2RlKCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOwor CisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWlu dAkJCWRlY0J5dGVzID0gTFo0X2RlY29tcHJlc3Nfc2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVj b2RlLAorCQkJCQkJCQkJCQkJCQkJYnVmLCBkZWNidWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1 Zmxlbik7CisKKwkJYWh3cml0ZShkZWNidWYsIDEsIGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdf ZnJlZShidWYpOworCXBnX2ZyZWUoZGVjYnVmKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0 YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJ CQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlMWjRDb21wcmVzc29yU3Rh dGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZTsKKwlzaXplX3QJ CWNvbXByZXNzZWQ7CisJc2l6ZV90CQlyZXF1aXJlZHNpemUgPSBMWjRfY29tcHJlc3NCb3VuZChk TGVuKTsKKworCWlmIChyZXF1aXJlZHNpemUgPiBMWjRjcy0+b3V0c2l6ZSkKKwl7CisJCUxaNGNz LT5vdXRidWYgPSBwZ19yZWFsbG9jKExaNGNzLT5vdXRidWYsIHJlcXVpcmVkc2l6ZSk7CisJCUxa NGNzLT5vdXRzaXplID0gcmVxdWlyZWRzaXplOworCX0KKworCWNvbXByZXNzZWQgPSBMWjRfY29t cHJlc3NfZGVmYXVsdChkYXRhLCBMWjRjcy0+b3V0YnVmLAorCQkJCQkJCQkJICBkTGVuLCBMWjRj cy0+b3V0c2l6ZSk7CisKKwlpZiAoY29tcHJlc3NlZCA8PSAwKQorCQlwZ19mYXRhbCgiZmFpbGVk IHRvIExaNCBjb21wcmVzcyBkYXRhIik7CisKKwljcy0+d3JpdGVGKEFILCBMWjRjcy0+b3V0YnVm LCBjb21wcmVzc2VkKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JMWjQoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJTFo0Q29tcHJlc3NvclN0YXRl ICpMWjRjczsKKworCUxaNGNzID0gKExaNENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZTsK KwlpZiAoTFo0Y3MpCisJeworCQlwZ19mcmVlKExaNGNzLT5vdXRidWYpOworCQlwZ19mcmVlKExa NGNzKTsKKwkJY3MtPnByaXZhdGUgPSBOVUxMOworCX0KK30KKworCisvKiBQdWJsaWMgcm91dGlu ZXMgdGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PICovCit2b2lkCitJbml0Q29t cHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgY29tcHJlc3Npb25MZXZlbCkKK3sK Kwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEg PSBXcml0ZURhdGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisK KwkvKiBXaWxsIGJlIGxhenkgaW5pdCdkICovCisJY3MtPnByaXZhdGUgPSBwZ19tYWxsb2MwKHNp emVvZihMWjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor LyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lvbiB1c2luZyB0aGUgQ29t cHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFo0RmlsZQoreworCUZJ TEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOworCisJTFo0Rl9jb21wcmVz c2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4dF90IGR0eDsKKwor CWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNpemVfdAkJYnVmbGVuOwor CWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxvY2xlbjsKKwlzaXplX3QJ CW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJc2l6ZV90CQllcnJjb2Rl OworfQkJCUxaNEZpbGU7CisKKy8qCisgKiBMWjQgZXF1aXZhbGVudCB0byBmZW9mKCkgb3IgZ3pl b2YoKS4gVGhlIGVuZCBvZiBmaWxlCisgKiBpcyByZWFjaGVkIGlmIHRoZXJlIGlzIG5vIGRlY29t cHJlc3NlZCBvdXRwdXQgaW4gdGhlCisgKiBvdmVyZmxvdyBidWZmZXIgYW5kIHRoZSBlbmQgb2Yg dGhlIGZpbGUgaXMgcmVhY2hlZC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9lb2YoQ29tcHJl c3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZI LT5wcml2YXRlOworCisJcmV0dXJuIGZzLT5vdmVyZmxvd2xlbiA9PSAwICYmIGZlb2YoZnMtPmZw KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorTFo0RmlsZV9nZXRfZXJyb3IoQ29tcHJlc3NG aWxlSGFuZGxlICogQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5w cml2YXRlOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKworCWlmIChMWjRGX2lzRXJyb3IoZnMtPmVy cmNvZGUpKQorCQllcnJtc2cgPSBMWjRGX2dldEVycm9yTmFtZShmcy0+ZXJyY29kZSk7CisJZWxz ZQorCQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCisv KgorICogUHJlcGFyZSBhbiBhbHJlYWR5IGFsbG9jJ2VkIExaNEZpbGUgc3RydWN0IGZvciBzdWJz ZXF1ZW50IGNhbGxzLgorICoKKyAqIEl0IGNyZWF0ZXMgdGhlIG5lc3NhcnkgY29udGV4dHMgZm9y IHRoZSBvcGVyYXRpb25zLiBXaGVuIGNvbXByZXNzaW5nLAorICogaXQgYWRkaXRpb25hbGx5IHdy aXRlcyB0aGUgTFo0IGhlYWRlciBpbiB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqLworc3RhdGljIGlu dAorTFo0RmlsZV9pbml0KExaNEZpbGUgKiBmcywgaW50IHNpemUsIGJvb2wgY29tcHJlc3Npbmcp Cit7CisJc2l6ZV90CQlzdGF0dXM7CisKKwlpZiAoZnMtPmluaXRlZCkKKwkJcmV0dXJuIDA7CisK Kwlmcy0+Y29tcHJlc3NpbmcgPSBjb21wcmVzc2luZzsKKwlmcy0+aW5pdGVkID0gdHJ1ZTsKKwor CWlmIChmcy0+Y29tcHJlc3NpbmcpCisJeworCQlmcy0+YnVmbGVuID0gTFo0Rl9jb21wcmVzc0Jv dW5kKExaNF9JTl9TSVpFLCAmZnMtPnByZWZzKTsKKwkJaWYgKGZzLT5idWZsZW4gPCBMWjRGX0hF QURFUl9TSVpFX01BWCkKKwkJCWZzLT5idWZsZW4gPSBMWjRGX0hFQURFUl9TSVpFX01BWDsKKwor CQlzdGF0dXMgPSBMWjRGX2NyZWF0ZUNvbXByZXNzaW9uQ29udGV4dCgmZnMtPmN0eCwgTFo0Rl9W RVJTSU9OKTsKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29k ZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJZnMtPmJ1ZmZlciA9IHBnX21hbGxv Yyhmcy0+YnVmbGVuKTsKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc0JlZ2luKGZzLT5jdHgsIGZz LT5idWZmZXIsIGZzLT5idWZsZW4sCisJCQkJCQkJCQkmZnMtPnByZWZzKTsKKworCQlpZiAoTFo0 Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0 dXJuIDE7CisJCX0KKworCQlpZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZw KSAhPSBzdGF0dXMpCisJCXsKKwkJCWVycm5vID0gZXJybm8gPyA6IEVOT1NQQzsKKwkJCXJldHVy biAxOworCQl9CisJfQorCWVsc2UKKwl7CisJCXN0YXR1cyA9IExaNEZfY3JlYXRlRGVjb21wcmVz c2lvbkNvbnRleHQoJmZzLT5kdHgsIExaNEZfVkVSU0lPTik7CisJCWlmIChMWjRGX2lzRXJyb3Io c3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJ fQorCisJCWZzLT5idWZsZW4gPSBzaXplID4gTFo0X09VVF9TSVpFID8gc2l6ZSA6IExaNF9PVVRf U0laRTsKKwkJZnMtPmJ1ZmZlciA9IHBnX21hbGxvYyhmcy0+YnVmbGVuKTsKKworCQlmcy0+b3Zl cmZsb3dhbGxvY2xlbiA9IGZzLT5idWZsZW47CisJCWZzLT5vdmVyZmxvd2J1ZiA9IHBnX21hbGxv Yyhmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCWZzLT5vdmVyZmxvd2xlbiA9IDA7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGFscmVhZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQg ZnJvbSB0aGUgb3ZlcmZsb3cgYnVmZmVyIGludG8gJ3B0cicgdXAgdG8KKyAqICdzaXplJyBieXRl cywgaWYgYXZhaWxhYmxlLiBJZiB0aGUgZW9sX2ZsYWcgaXMgc2V0LCB0aGVuIHN0b3AgYXQgdGhl IGZpcnN0CisgKiBvY2N1cmFuY2Ugb2YgdGhlIG5ldyBsaW5lIGNoYXIgcHJpb3IgdG8gJ3NpemUn IGJ5dGVzLgorICoKKyAqIEFueSB1bnJlYWQgY29udGVudCBpbiB0aGUgb3ZlcmZsb3cgYnVmZmVy LCBpcyBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX3Jl YWRfb3ZlcmZsb3coTFo0RmlsZSAqIGZzLCB2b2lkICpwdHIsIGludCBzaXplLCBib29sIGVvbF9m bGFnKQoreworCWNoYXIJICAgKnA7CisJaW50CQkJcmVhZGxlbiA9IDA7CisKKwlpZiAoZnMtPm92 ZXJmbG93bGVuID09IDApCisJCXJldHVybiAwOworCisJaWYgKGZzLT5vdmVyZmxvd2xlbiA+PSBz aXplKQorCQlyZWFkbGVuID0gc2l6ZTsKKwllbHNlCisJCXJlYWRsZW4gPSBmcy0+b3ZlcmZsb3ds ZW47CisKKwlpZiAoZW9sX2ZsYWcgJiYgKHAgPSBtZW1jaHIoZnMtPm92ZXJmbG93YnVmLCAnXG4n LCByZWFkbGVuKSkpCisJCS8qIEluY2x1ZGUgdGhlIGxpbmUgdGVybWluYXRpbmcgY2hhciAqLwor CQlyZWFkbGVuID0gcCAtIGZzLT5vdmVyZmxvd2J1ZiArIDE7CisKKwltZW1jcHkocHRyLCBmcy0+ b3ZlcmZsb3didWYsIHJlYWRsZW4pOworCWZzLT5vdmVyZmxvd2xlbiAtPSByZWFkbGVuOworCisJ aWYgKGZzLT5vdmVyZmxvd2xlbiA+IDApCisJCW1lbW1vdmUoZnMtPm92ZXJmbG93YnVmLCBmcy0+ b3ZlcmZsb3didWYgKyByZWFkbGVuLCBmcy0+b3ZlcmZsb3dsZW4pOworCisJcmV0dXJuIHJlYWRs ZW47Cit9CisKKy8qCisgKiBUaGUgd29ya2hvcnNlIGZvciByZWFkaW5nIGRlY29tcHJlc3NlZCBj b250ZW50IG91dCBvZiBhbiBMWjQgY29tcHJlc3NlZAorICogc3RyZWFtLgorICoKKyAqIEl0IHdp bGwgcmVhZCB1cCB0byAncHRyc2l6ZScgZGVjb21wcmVzc2VkIGNvbnRlbnQsIG9yIHVwIHRvIHRo ZSBuZXcgbGluZSBjaGFyCisgKiBpZiBmb3VuZCBmaXJzdCB3aGVuIHRoZSBlb2xfZmxhZyBpcyBz ZXQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGRlY29tcHJlc3NlZAorICogb3V0cHV0IGdlbmVy YXRlZCBieSByZWFkaW5nIGFueSBjb21wcmVzc2VkIGlucHV0IHZpYSB0aGUgTFo0RiBBUEksIGV4 Y2VlZHMKKyAqICdwdHJzaXplJy4gQW55IGV4Y2VlZGluZyBkZWNvbXByZXNzZWQgY29udGVudCBp cyBzdG9yZWQgYXQgYW4gb3ZlcmZsb3cKKyAqIGJ1ZmZlciB3aXRoaW4gTFo0RmlsZS4gT2YgY291 cnNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHdpbGwgZmlyc3QKKyAqIHRyeSB0 byBjb25zdW1lIGFueSBkZWNvbXByZXNzZWQgY29udGVudCBhbHJlYWR5IHByZXNlbnQgaW4gdGhl IG92ZXJmbG93CisgKiBidWZmZXIsIGJlZm9yZSBkZWNvbXByZXNzaW5nIG5ldyBjb250ZW50Lgor ICovCitzdGF0aWMgaW50CitMWjRGaWxlX3JlYWRfaW50ZXJuYWwoTFo0RmlsZSAqIGZzLCB2b2lk ICpwdHIsIGludCBwdHJzaXplLCBib29sIGVvbF9mbGFnKQoreworCXNpemVfdAkJZHNpemUgPSAw OworCXNpemVfdAkJcnNpemU7CisJc2l6ZV90CQlzaXplID0gcHRyc2l6ZTsKKwlib29sCQllb2xf Zm91bmQgPSBmYWxzZTsKKworCXZvaWQJICAgKnJlYWRidWY7CisKKwkvKiBMYXp5IGluaXQgKi8K KwlpZiAoIWZzLT5pbml0ZWQgJiYgTFo0RmlsZV9pbml0KGZzLCBzaXplLCBmYWxzZSAvKiBkZWNv bXByZXNzaW5nICovICkpCisJCXJldHVybiAtMTsKKworCS8qIFZlcmZpeSB0aGF0IHRoZXJlIGlz IGVub3VnaCBzcGFjZSBpbiB0aGUgb3V0YnVmICovCisJaWYgKHNpemUgPiBmcy0+YnVmbGVuKQor CXsKKwkJZnMtPmJ1ZmxlbiA9IHNpemU7CisJCWZzLT5idWZmZXIgPSBwZ19yZWFsbG9jKGZzLT5i dWZmZXIsIHNpemUpOworCX0KKworCS8qIHVzZSBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50 IGlmIGF2YWlsYWJsZSAqLworCWRzaXplID0gTFo0RmlsZV9yZWFkX292ZXJmbG93KGZzLCBwdHIs IHNpemUsIGVvbF9mbGFnKTsKKwlpZiAoZHNpemUgPT0gc2l6ZSB8fCAoZW9sX2ZsYWcgJiYgbWVt Y2hyKHB0ciwgJ1xuJywgZHNpemUpKSkKKwkJcmV0dXJuIGRzaXplOworCisJcmVhZGJ1ZiA9IHBn X21hbGxvYyhzaXplKTsKKworCWRvCisJeworCQljaGFyCSAgICpycDsKKwkJY2hhcgkgICAqcmVu ZDsKKworCQlyc2l6ZSA9IGZyZWFkKHJlYWRidWYsIDEsIHNpemUsIGZzLT5mcCk7CisJCWlmIChy c2l6ZSA8IHNpemUgJiYgIWZlb2YoZnMtPmZwKSkKKwkJCXJldHVybiAtMTsKKworCQlycCA9IChj aGFyICopIHJlYWRidWY7CisJCXJlbmQgPSAoY2hhciAqKSByZWFkYnVmICsgcnNpemU7CisKKwkJ d2hpbGUgKHJwIDwgcmVuZCkKKwkJeworCQkJc2l6ZV90CQlzdGF0dXM7CisJCQlzaXplX3QJCW91 dGxlbiA9IGZzLT5idWZsZW47CisJCQlzaXplX3QJCXJlYWRfcmVtYWluID0gcmVuZCAtIHJwOwor CisJCQltZW1zZXQoZnMtPmJ1ZmZlciwgMCwgb3V0bGVuKTsKKwkJCXN0YXR1cyA9IExaNEZfZGVj b21wcmVzcyhmcy0+ZHR4LCBmcy0+YnVmZmVyLCAmb3V0bGVuLAorCQkJCQkJCQkJIHJwLCAmcmVh ZF9yZW1haW4sIE5VTEwpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJeworCQkJ CWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJcnAgKz0g cmVhZF9yZW1haW47CisKKwkJCS8qCisJCQkgKiBmaWxsIGluIHdoYXQgc3BhY2UgaXMgYXZhaWxh YmxlIGluIHB0ciBpZiB0aGUgZW9sIGZsYWcgaXMgc2V0LAorCQkJICogZWl0aGVyIHNraXAgaWYg b25lIGFscmVhZHkgZm91bmQgb3IgZmlsbCB1cCB0byBFT0wgaWYgcHJlc2VudAorCQkJICogaW4g dGhlIG91dGJ1ZgorCQkJICovCisJCQlpZiAob3V0bGVuID4gMCAmJiBkc2l6ZSA8IHNpemUgJiYg ZW9sX2ZvdW5kID09IGZhbHNlKQorCQkJeworCQkJCWNoYXIJICAgKnA7CisJCQkJc2l6ZV90CQls aWIgPSAoZW9sX2ZsYWcgPT0gMCkgPyBzaXplIC0gZHNpemUgOiBzaXplIC0gMSAtIGRzaXplOwor CQkJCXNpemVfdAkJbGVuID0gb3V0bGVuIDwgbGliID8gb3V0bGVuIDogbGliOworCisJCQkJaWYg KGVvbF9mbGFnID09IHRydWUgJiYKKwkJCQkJKHAgPSBtZW1jaHIoZnMtPmJ1ZmZlciwgJ1xuJywg b3V0bGVuKSkgJiYKKwkJCQkJKHNpemVfdCkgKHAgLSBmcy0+YnVmZmVyICsgMSkgPD0gbGVuKQor CQkJCXsKKwkJCQkJbGVuID0gcCAtIGZzLT5idWZmZXIgKyAxOworCQkJCQllb2xfZm91bmQgPSB0 cnVlOworCQkJCX0KKworCQkJCW1lbWNweSgoY2hhciAqKSBwdHIgKyBkc2l6ZSwgZnMtPmJ1ZmZl ciwgbGVuKTsKKwkJCQlkc2l6ZSArPSBsZW47CisKKwkJCQkvKiBtb3ZlIHdoYXQgZGlkIG5vdCBm aXQsIGlmIGFueSwgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBidWYgKi8KKwkJCQlpZiAobGVuIDwg b3V0bGVuKQorCQkJCQltZW1tb3ZlKGZzLT5idWZmZXIsIGZzLT5idWZmZXIgKyBsZW4sIG91dGxl biAtIGxlbik7CisJCQkJb3V0bGVuIC09IGxlbjsKKwkJCX0KKworCQkJLyogaWYgdGhlcmUgaXMg YXZhaWxhYmxlIG91dHB1dCwgc2F2ZSBpdCAqLworCQkJaWYgKG91dGxlbiA+IDApCisJCQl7CisJ CQkJd2hpbGUgKGZzLT5vdmVyZmxvd2xlbiArIG91dGxlbiA+IGZzLT5vdmVyZmxvd2FsbG9jbGVu KQorCQkJCXsKKwkJCQkJZnMtPm92ZXJmbG93YWxsb2NsZW4gKj0gMjsKKwkJCQkJZnMtPm92ZXJm bG93YnVmID0gcGdfcmVhbGxvYyhmcy0+b3ZlcmZsb3didWYsCisJCQkJCQkJCQkJCQkgZnMtPm92 ZXJmbG93YWxsb2NsZW4pOworCQkJCX0KKworCQkJCW1lbWNweShmcy0+b3ZlcmZsb3didWYgKyBm cy0+b3ZlcmZsb3dsZW4sIGZzLT5idWZmZXIsIG91dGxlbik7CisJCQkJZnMtPm92ZXJmbG93bGVu ICs9IG91dGxlbjsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJzaXplID09IHNpemUgJiYgZHNpemUg PCBzaXplICYmIGVvbF9mb3VuZCA9PSAwKTsKKworCXBnX2ZyZWUocmVhZGJ1Zik7CisKKwlyZXR1 cm4gKGludCkgZHNpemU7Cit9CisKKy8qCisgKiBDb21wcmVzcyBzaXplIGJ5dGVzIGZyb20gcHRy IGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBzdHJlYW0uCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZp bGVfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxl ICogQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlOwor CXNpemVfdAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNpemU7CisKKwlpZiAoIWZzLT5p bml0ZWQgJiYgTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkKKwkJcmV0dXJuIC0xOworCisJ d2hpbGUgKHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVuayA9IHJlbWFpbmluZyA8IExa NF9JTl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisKKwkJcmVtYWluaW5nIC09IGNo dW5rOworCisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUoZnMtPmN0eCwgZnMtPmJ1ZmZl ciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBOVUxMKTsKKwkJaWYgKExaNEZf aXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVy biAtMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnAp ICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOworCQkJcmV0dXJu IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGZyZWFkKCkgZXF1aXZh bGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRp YyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKiBDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnBy aXZhdGU7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9yZWFkX2ludGVybmFsKGZzLCBw dHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIUxaNEZpbGVfZW9mKENGSCkp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0Rmls ZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZmdldGMoKSBl cXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlM WjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBjaGFy IGM7CisKKwlpZiAoTFo0RmlsZV9yZWFkX2ludGVybmFsKGZzLCAmYywgMSwgZmFsc2UpICE9IDEp CisJeworCQlpZiAoIUxaNEZpbGVfZW9mKENGSCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJl YWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOworCQllbHNl CisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmls ZSIpOworCX0KKworCXJldHVybiBjOworfQorCisvKgorICogZmdldHMoKSBlcXVpdmFsZW50IGlt cGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLworc3RhdGljIGNoYXIg KgorTFo0RmlsZV9nZXRzKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq IENGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZTsKKwlz aXplX3QJCWRzaXplOworCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0ciwg c2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXplIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFk IGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8qIERv bmUgcmVhZGluZyAqLworCWlmIChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVy biBwdHI7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0u IFdoZW4gY29tcHJlc3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50 IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBp bnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUZJTEUJICAg KmZwOworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlOworCXNpemVf dAkJc3RhdHVzOworCWludAkJCXJldDsKKworCWZwID0gZnMtPmZwOworCWlmIChmcy0+aW5pdGVk KQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2luZykKKwkJeworCQkJc3RhdHVzID0gTFo0Rl9jb21w cmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLCBOVUxMKTsKKwkJCWlmIChM WjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVz c2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykpOworCQkJZWxzZSBp ZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkpICE9IHN0YXR1 cykKKwkJCXsKKwkJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQkJV1JJVEVfRVJST1Jf RVhJVDsKKwkJCX0KKworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Npb25Db250ZXh0KGZz LT5jdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWls ZWQgdG8gZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3Rh dHVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVEZWNvbXByZXNz aW9uQ29udGV4dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlw Z19mYXRhbCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9n ZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxvd2J1Zik7CisJCX0K KworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMpOworCisJcmV0dXJu IGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihjb25zdCBjaGFyICpw YXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NGaWxlSGFuZGxlICog Q0ZIKQoreworCUZJTEUJICAgKmZwOworCUxaNEZpbGUgICAgKmx6NGZwID0gKExaNEZpbGUgKikg Q0ZILT5wcml2YXRlOworCisJaWYgKGZkID49IDApCisJCWZwID0gZmRvcGVuKGZkLCBtb2RlKTsK KwllbHNlCisJCWZwID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKGZwID09IE5VTEwpCisJewor CQlsejRmcC0+ZXJyY29kZSA9IGVycm5vOworCQlyZXR1cm4gMTsKKwl9CisKKwlsejRmcC0+ZnAg PSBmcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitMWjRGaWxlX29wZW5fd3JpdGUo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICog Q0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKworCWZuYW1lID0gcHNwcmlu dGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3BlbihmbmFtZSwgLTEsIG1vZGUsIENG SCk7CisJcGdfZnJlZShmbmFtZSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitJbml0Q29t cHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZILCBpbnQgY29tcHJlc3Npb25MZXZlbCkK K3sKKwlMWjRGaWxlICAgICpsejRmcDsKKworCUNGSC0+b3BlbiA9IExaNEZpbGVfb3BlbjsKKwlD RkgtPm9wZW5fd3JpdGUgPSBMWjRGaWxlX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkID0gTFo0Rmls ZV9yZWFkOworCUNGSC0+d3JpdGUgPSBMWjRGaWxlX3dyaXRlOworCUNGSC0+Z2V0cyA9IExaNEZp bGVfZ2V0czsKKwlDRkgtPmdldGMgPSBMWjRGaWxlX2dldGM7CisJQ0ZILT5lb2YgPSBMWjRGaWxl X2VvZjsKKwlDRkgtPmNsb3NlID0gTFo0RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvciA9IExa NEZpbGVfZ2V0X2Vycm9yOworCisJbHo0ZnAgPSBwZ19tYWxsb2MwKHNpemVvZigqbHo0ZnApKTsK KwlpZiAoY29tcHJlc3Npb25MZXZlbCA+PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25M ZXZlbCA9IGNvbXByZXNzaW9uTGV2ZWw7CisKKwlDRkgtPnByaXZhdGUgPSBsejRmcDsKK30KKyNl bHNlCQkJCQkJCS8qIFVTRV9MWjQgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNz b3JTdGF0ZSAqY3MsIGludCBjb21wcmVzc2lvbkxldmVsKQoreworCXBnX2ZhdGFsKCJub3QgYnVp bHQgd2l0aCBMWjQgc3VwcG9ydCIpOworfQorCit2b2lkCitJbml0Q29tcHJlc3NMWjQoQ29tcHJl c3NGaWxlSGFuZGxlICogQ0ZILCBpbnQgY29tcHJlc3Npb25MZXZlbCkKK3sKKwlwZ19mYXRhbCgi bm90IGJ1aWx0IHdpdGggTFo0IHN1cHBvcnQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTFo0 ICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmggYi9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfbHo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uZmJlYzlhNTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19sejQuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2Rl ZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRl cm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgY29tcHJl c3Npb25MZXZlbCk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFu ZGxlICogQ0ZILCBpbnQgY29tcHJlc3Npb25MZXZlbCk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09N UFJFU1NfTFo0X0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQg Yi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggMGM3M2E0NzA3ZS4uYjI3ZTkyZmZk MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAKIHBnX2R1bXBfY29tbW9uX3NvdXJj ZXMgPSBmaWxlcygKICAgJ2NvbXByZXNzX2lvLmMnLAogICAnY29tcHJlc3NfZ3ppcC5jJywKKyAg J2NvbXByZXNzX2x6NC5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ3BhcmFsbGVsLmMnLAogICAn cGdfYmFja3VwX2FyY2hpdmVyLmMnLApAQCAtMTUsNyArMTYsNyBAQCBwZ19kdW1wX2NvbW1vbl9z b3VyY2VzID0gZmlsZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1 bXBfY29tbW9uJywKICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0 Z3Jlc19mZV9oLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxpYl0s CisgIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWJdLAogICBr d2FyZ3M6IGludGVybmFsX2xpYl9hcmdzLAogKQogCkBAIC04Myw3ICs4NCwxMCBAQCB0ZXN0cyAr PSB7CiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5j dXJyZW50X2J1aWxkX2RpcigpLAogICAndGFwJzogewotICAgICdlbnYnOiB7J0daSVBfUFJPR1JB TSc6IGd6aXAucGF0aCgpfSwKKyAgICAnZW52JzogeworICAgICAgJ0daSVBfUFJPR1JBTSc6IGd6 aXAucGF0aCgpLAorICAgICAgJ0xaNCc6IHByb2dyYW1fbHo0LmZvdW5kKCkgPyBwcm9ncmFtX2x6 NC5wYXRoKCkgOiAnJywKKyAgICB9LAogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9iYXNp Yy5wbCcsCiAgICAgICAndC8wMDJfcGdfZHVtcC5wbCcsCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMKaW5kZXggMDllMjBmYjk3Yi4uYzliMDUzZDU3MiAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYwpAQCAtMzk0LDYgKzM5NCwxMCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNo aXZlICpBSFgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQkJCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCQkJc3VwcG9ydHNfY29tcHJlc3Np b24gPSBmYWxzZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCQkJaWYgKEFILT5jb21wcmVz c19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCQkJCXN1cHBvcnRzX2Nv bXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKIAkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Npb24g PT0gZmFsc2UpCiAJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQg YXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbiki KTsKQEAgLTIwNzMsNyArMjA3Nyw3IEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhh bmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBhcmNoaXZlIGlz IGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sgaWYKLQkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAo b3IgInRvYy5kYXQuZ3oiKSBmaWxlIGluIGl0LgorCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChv ciAidG9jLmRhdC57Z3osbHo0fSIpIGZpbGUgaW4gaXQuCiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7CkBAIC0yMDgzLDYg KzIwODcsMTAgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKICNp ZmRlZiBIQVZFX0xJQloKIAkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywg InRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVmIFVT RV9MWjQKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQu bHo0IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwidG9j LmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpAQCAtMzc0Niw2ICsz NzU0LDEwIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogI2lmbmRlZiBIQVZFX0xJQloK IAkJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQogCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQKKwkJaWYg KEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCQl1 bnN1cHBvcnRlZCA9IHRydWU7CiAjZW5kaWYKIAkJaWYgKHVuc3VwcG9ydGVkKQogCQl7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwppbmRleCA2MmMwOWU2ZWQ0Li5kM2ZlYjA2MmNkIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEyNzQs MjAgKzEyNzQsMjUgQEAgcGFyc2VfY29tcHJlc3Npb24oY29uc3QgY2hhciAqb3B0LCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uICpjb21wcmVzc19zcGVjKQogCXBhcnNlX2NvbXByZXNzX29wdGlv bnMob3B0LCAmYWxnb3JpdGhtX3N0ciwgJmxldmVsX3N0cik7CiAJaWYgKCFwYXJzZV9jb21wcmVz c19hbGdvcml0aG0oYWxnb3JpdGhtX3N0ciwgJihjb21wcmVzc19zcGVjLT5hbGdvcml0aG0pKSkK IAl7Ci0JCXBnX2xvZ19lcnJvcigiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2Q6IFwiJXNcIiAo Z3ppcCwgbm9uZSkiLAorCQlwZ19sb2dfZXJyb3IoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9k OiBcIiVzXCIgKGd6aXAsIGx6NCwgbm9uZSkiLAogCQkJCQkgYWxnb3JpdGhtX3N0cik7CiAJCXJl dHVybiBmYWxzZTsKIAl9CiAKIAkvKiBTd2l0Y2ggb2ZmIHVuaW1wbGVtZW50ZWQgb3IgdW5hdmFp bGFibGUgY29tcHJlc3Npb25zLiAqLwogCWlmIChjb21wcmVzc19zcGVjLT5hbGdvcml0aG0gIT0g UEdfQ09NUFJFU1NJT05fTk9ORSAmJgotCQljb21wcmVzc19zcGVjLT5hbGdvcml0aG0gIT0gUEdf Q09NUFJFU1NJT05fR1pJUCkKKwkJY29tcHJlc3Nfc3BlYy0+YWxnb3JpdGhtICE9IFBHX0NPTVBS RVNTSU9OX0daSVAgJiYKKwkJY29tcHJlc3Nfc3BlYy0+YWxnb3JpdGhtICE9IFBHX0NPTVBSRVNT SU9OX0xaNCkKIAkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKIAogI2lmbmRlZiBIQVZF X0xJQloKIAlpZiAoY29tcHJlc3Nfc3BlYy0+YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0da SVApCiAJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKKyNpZm5kZWYgVVNF X0xaNAorCWlmIChjb21wcmVzc19zcGVjLT5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0 KQorCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOworI2VuZGlmCiAKIAlpZiAoIXN1cHBv cnRzX2NvbXByZXNzaW9uKQogCXsKQEAgLTEzMTAsNiArMTMxNSw5IEBAIHBhcnNlX2NvbXByZXNz aW9uKGNvbnN0IGNoYXIgKm9wdCwgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY29tcHJlc3Nf c3BlYykKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCXBnX2ZyZWUoYWxnb3JpdGhtX3N0cik7CisJ cGdfZnJlZShsZXZlbF9zdHIpOworCiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNp Yy5wbAppbmRleCBmOGQwYjJmY2U1Li4yZjdmMzg5NjgxIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs CkBAIC0xMjIsNyArMTIyLDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCiBjb21tYW5kX2ZhaWxz X2xpa2UoCiAJWyAncGdfZHVtcCcsICctLWNvbXByZXNzJywgJ2dhcmJhZ2UnIF0sCi0JcXIvXFFw Z19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2Q6ICJnYXJiYWdlIiAoZ3pp cCwgbm9uZSlcRS8sCisJcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBt ZXRob2Q6ICJnYXJiYWdlIiAoZ3ppcCwgbHo0LCBub25lKVxFLywKIAkncGdfZHVtcDogaW52YWxp ZCAtLWNvbXByZXNzJyk7CiAKIGNvbW1hbmRfZmFpbHNfbGlrZSgKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1 bXAucGwKaW5kZXggZDYwNDU1OGYwMy4uMGJlYzgyNDgzNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1 bXAucGwKQEAgLTExNiw2ICsxMTYsNjcgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJYXJncyAg ICA9PiBbICctZCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX3BsYWluLnNxbC5neiIsIF0s CiAJCX0sCiAJfSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVy YWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2N1c3RvbSA9PiB7CisJCXRlc3Rf a2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAor CQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgJy0tZm9ybWF0PWN1c3Rv bScsCisJCQknLS1jb21wcmVzcz0xJywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRf Y3VzdG9tLmR1bXAiLAorCQkJJ3Bvc3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3Vz dG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJ XSwKKwl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2Ug Zm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfZGlyID0+IHsKKwkJdGVzdF9rZXkgICAg ICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJCWR1bXBf Y21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnLS1qb2JzPTInLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAgICAgICAgICAgICAg ICctLWNvbXByZXNzPWx6NDoxJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0 X2RpciIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkg Y29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0b3JlLgorCQljb21wcmVz c19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWwor CQkJCScteicsICctZicsICctLXJtJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rp ci9ibG9icy50b2MiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL2Jsb2JzLnRv Yy5sejQiLAorCQkJXSwKKwkJfSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUn LCAnLS1qb2JzPTInLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLnNx bCIsCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2RpciIsCisJCV0sCisJfSwKKworCWNv bXByZXNzaW9uX2x6NF9wbGFpbiA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lv bicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJ CQkncGdfZHVtcCcsICctLWZvcm1hdD1wbGFpbicsICctLWNvbXByZXNzPWx6NCcsCisJCQkiLS1m aWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwgJ3Bvc3RncmVzJywK KwkJXSwKKwkJIyBEZWNvbXByZXNzIHRoZSBnZW5lcmF0ZWQgZmlsZSB0byBydW4gdGhyb3VnaCB0 aGUgdGVzdHMuCisJCWNvbXByZXNzX2NtZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9 LAorCQkJYXJncyAgICA9PiBbCisJCQkJJy1kJywgJy1mJywKKwkJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X3BsYWluLnNxbC5sejQiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRf cGxhaW4uc3FsIiwKKwkJCV0sCisJCX0sCisJfSwKKwogCWNsZWFuID0+IHsKIAkJZHVtcF9jbWQg PT4gWwogCQkJJ3BnX2R1bXAnLApAQCAtNDEyNywxMSArNDE4OCwxMSBAQCBmb3JlYWNoIG15ICRy dW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1bnMpCiAJbXkgJHJ1bl9kYiAgID0gJ3Bvc3RncmVzJzsK IAogCSMgU2tpcCBjb21tYW5kLWxldmVsIHRlc3RzIGZvciBnemlwIGlmIHRoZXJlIGlzIG5vIHN1 cHBvcnQgZm9yIGl0LgotCWlmICggICBkZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSkKLQkJJiYgJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVx ICdnemlwJwotCQkmJiAhJHN1cHBvcnRzX2d6aXApCisJaWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+ e2NvbXBpbGVfb3B0aW9ufSAmJgorCQkoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRp b259IGVxICdnemlwJyAmJiAhJHN1cHBvcnRzX2d6aXApIHx8CisJCSgkcGdkdW1wX3J1bnN7JHJ1 bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2x6NCcgJiYgISRzdXBwb3J0c19sejQpKQogCXsKLQkJ bm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUgdG8gbm8gZ3ppcCBzdXBwb3J0IjsKKwkJbm90ZSAiJHJ1 bjogc2tpcHBlZCBkdWUgdG8gbm8gJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259 IHN1cHBvcnQiOwogCQluZXh0OwogCX0KIAotLSAKMi4zNC4xCgo= --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc Content-Type: text/x-patch; name=v10-0002-Prepare-pg_dump-for-additional-compression-metho.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0002-Prepare-pg_dump-for-additional-compression-metho.patch RnJvbSA1MTZlYTFiYjcwYTQyNDM5NjVlMjMxMDkyZWU0NjBiYjRhZGUzMTFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTm92IDIwMjIgMTE6MjI6NDQgKzAwMDAKU3ViamVjdDogW1BBVENIIHYx MCAyLzRdIFByZXBhcmUgcGdfZHVtcCBmb3IgYWRkaXRpb25hbCBjb21wcmVzc2lvbiBtZXRob2Rz CgpUaGlzIGNvbW1taXQgZG9lcyBzb21lIG9mIHRoZSBoZWF2eSBsaWZ0aW5nIHJlcXVpcmVkIGZv ciBhZGRpdGlvbmFsIGNvbXByZXNzaW9uCm1ldGhvZHMuCgpGaXJzdCBpdCBpcyB0ZWFjaGluZyBw Z19kdW1wLmMgYWJvdXQgdGhlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2VzIGZvdW5kIGluCmNv bW1vbi9jb21wcmVzc2lvbi5oLiBUaGVuIGl0IGlzIHByb3BhZ2F0aW5nIHRob3NlIHRocm91Z2hv dXQgdGhlIGNvZGUuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg Y2ZwIGFuZCBpcyB1c2luZyBpdCB0aHJvdWdoIG91dC4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXAuc2dtbCAgICAgICAgIHwgIDMwICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u YyAgICAgICAgIHwgNDMxICsrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uaCAgICAgICAgIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwLmggICAgICAgICAgIHwgICA3ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMgIHwgMTkyICsrKysrKy0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5oICB8ICAzNyArLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgICAg fCAgIDYgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgMTMgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICAgfCAgMTIgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgfCAgOTkgKysrKy0tCiBzcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwgICAgICAgIHwgIDI3ICstCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJf cGdfZHVtcC5wbCAgICAgIHwgICAyICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA1MTQgaW5zZXJ0aW9u cygrKSwgMzYyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggOGI5ZDlmNGNh ZC4uM2ZiOGZkY2U4MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTY0NCwxNyArNjQ0LDMxIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8 dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+PG9wdGlvbj4tWiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+MC4uOTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgotICAgICAgPHRl cm0+PG9wdGlvbj4tLWNvbXByZXNzPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj4wLi45 PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi1aIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5sZXZlbDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tWiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bWV0aG9kPC9yZXBsYWNlYWJsZT48L29wdGlvbj5bOjxyZXBsYWNlYWJsZT5sZXZlbDwv cmVwbGFjZWFibGU+XTwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb21wcmVzcz08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bGV2ZWw8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1jb21wcmVzcz08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bWV0aG9kPC9yZXBsYWNlYWJsZT48L29wdGlvbj5bOjxyZXBsYWNlYWJsZT5s ZXZlbDwvcmVwbGFjZWFibGU+XTwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFy YT4KLSAgICAgICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlLiAgWmVybyBt ZWFucyBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgU3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbWV0 aG9kIGFuZC9vciB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gdXNlLgorICAgICAgICBUaGUgY29t cHJlc3Npb24gbWV0aG9kIGNhbiBiZSBzZXQgdG8gPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gb3IK KyAgICAgICAgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLiBBIGNv bXByZXNzaW9uIGxldmVsIGNhbgorICAgICAgICBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCwgYnkg YXBwZW5kaW5nIHRoZSBsZXZlbCBudW1iZXIgYWZ0ZXIgYSBjb2xvbgorICAgICAgICAoPGxpdGVy YWw+OjwvbGl0ZXJhbD4pLiBJZiBubyBsZXZlbCBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGNv bXByZXNzaW9uCisgICAgICAgIGxldmVsIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBt ZXRob2QuIElmIG9ubHkgYSBsZXZlbCBpcworICAgICAgICBzcGVjaWZpZWQgd2l0aG91dCBtZW50 aW9uaW5nIGEgbWV0aG9kLCA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBjb21wcmVzc2lvbgorICAg ICAgICB3aWxsIGJlIHVzZWQuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CiAgICAg ICAgIEZvciB0aGUgY3VzdG9tIGFuZCBkaXJlY3RvcnkgYXJjaGl2ZSBmb3JtYXRzLCB0aGlzIHNw ZWNpZmllcyBjb21wcmVzc2lvbiBvZgotICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2Vn bWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcwotICAgICAgICBhdCBhIG1vZGVy YXRlIGxldmVsLgotICAgICAgICBGb3IgcGxhaW4gdGV4dCBvdXRwdXQsIHNldHRpbmcgYSBub256 ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcwotICAgICAgICB0aGUgZW50aXJlIG91dHB1dCBm aWxlIHRvIGJlIGNvbXByZXNzZWQsIGFzIHRob3VnaCBpdCBoYWQgYmVlbgotICAgICAgICBmZWQg dGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+OyBidXQgdGhlIGRlZmF1bHQg aXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2VnbWVu dHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZworICAgICAgICA8bGl0ZXJh bD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBvdXRw dXQsCisgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNlcyB0 aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCisgICAgICAgIGFzIHRob3Vn aCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRpb24+ OyBidXQgdGhlIGRlZmF1bHQKKyAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIHRhciBhcmNoaXZlIGZvcm1hdCBjdXJy ZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiBhdCBhbGwuCiAgICAgICAgPC9wYXJh PgogICAgICAgPC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggNjJmOTQwZmY3YS4u NGE4ZmMxZTMwNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU2LDYgKzU2LDEwIEBACiAjaW5j bHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAorI2lm ZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCiAvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqIENvbXByZXNzb3IgQVBJCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K QEAgLTY0LDcgKzY4LDcgQEAKIC8qIHR5cGVkZWYgYXBwZWFycyBpbiBjb21wcmVzc19pby5oICov CiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlCiB7Ci0JQ29tcHJlc3Npb25BbGdvcml0aG0gY29tcHJB bGc7CisJcGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobTsKIAlXcml0ZUZ1 bmMJd3JpdGVGOwogCiAjaWZkZWYgSEFWRV9MSUJaCkBAIC03NCw5ICs3OCw2IEBAIHN0cnVjdCBD b21wcmVzc29yU3RhdGUKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQgUGFyc2VDb21wcmVzc2lv bk9wdGlvbihpbnQgY29tcHJlc3Npb24sIENvbXByZXNzaW9uQWxnb3JpdGhtICphbGcsCi0JCQkJ CQkJCSAgIGludCAqbGV2ZWwpOwotCiAvKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgemxpYiBjb21w cmVzc2VkIGRhdGEgSS9PICovCiAjaWZkZWYgSEFWRV9MSUJaCiBzdGF0aWMgdm9pZCBJbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsKQEAgLTkzLDU3ICs5 NCwzMCBAQCBzdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxl ICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwogc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIAkJCQkJCQkJICAgY29u c3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pOwogCi0vKgotICogSW50ZXJwcmV0cyBhIG51bWVy aWMgJ2NvbXByZXNzaW9uJyB2YWx1ZS4gVGhlIGFsZ29yaXRobSBpbXBsaWVkIGJ5IHRoZQotICog dmFsdWUgKHpsaWIgb3Igbm9uZSBhdCB0aGUgbW9tZW50KSwgaXMgcmV0dXJuZWQgaW4gKmFsZywg YW5kIHRoZQotICogemxpYiBjb21wcmVzc2lvbiBsZXZlbCBpbiAqbGV2ZWwuCi0gKi8KLXN0YXRp YyB2b2lkCi1QYXJzZUNvbXByZXNzaW9uT3B0aW9uKGludCBjb21wcmVzc2lvbiwgQ29tcHJlc3Np b25BbGdvcml0aG0gKmFsZywgaW50ICpsZXZlbCkKLXsKLQlpZiAoY29tcHJlc3Npb24gPT0gWl9E RUZBVUxUX0NPTVBSRVNTSU9OIHx8Ci0JCShjb21wcmVzc2lvbiA+IDAgJiYgY29tcHJlc3Npb24g PD0gOSkpCi0JCSphbGcgPSBDT01QUl9BTEdfTElCWjsKLQllbHNlIGlmIChjb21wcmVzc2lvbiA9 PSAwKQotCQkqYWxnID0gQ09NUFJfQUxHX05PTkU7Ci0JZWxzZQotCXsKLQkJcGdfZmF0YWwoImlu dmFsaWQgY29tcHJlc3Npb24gY29kZTogJWQiLCBjb21wcmVzc2lvbik7Ci0JCSphbGcgPSBDT01Q Ul9BTEdfTk9ORTsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCX0KLQotCS8qIFRoZSBsZXZl bCBpcyBqdXN0IHRoZSBwYXNzZWQtaW4gdmFsdWUuICovCi0JaWYgKGxldmVsKQotCQkqbGV2ZWwg PSBjb21wcmVzc2lvbjsKLX0KLQogLyogUHVibGljIGludGVyZmFjZSByb3V0aW5lcyAqLwogCiAv KiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVzc29yICovCiBDb21wcmVzc29yU3RhdGUgKgotQWxsb2Nh dGVDb21wcmVzc29yKGludCBjb21wcmVzc2lvbiwgV3JpdGVGdW5jIHdyaXRlRikKK0FsbG9jYXRl Q29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMs CisJCQkJICAgV3JpdGVGdW5jIHdyaXRlRikKIHsKIAlDb21wcmVzc29yU3RhdGUgKmNzOwotCUNv bXByZXNzaW9uQWxnb3JpdGhtIGFsZzsKLQlpbnQJCQlsZXZlbDsKLQotCVBhcnNlQ29tcHJlc3Np b25PcHRpb24oY29tcHJlc3Npb24sICZhbGcsICZsZXZlbCk7CiAKICNpZm5kZWYgSEFWRV9MSUJa Ci0JaWYgKGFsZyA9PSBDT01QUl9BTEdfTElCWikKKwlpZiAoY29tcHJlc3Nfc3BlYy5hbGdvcml0 aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHps aWIgc3VwcG9ydCIpOwogI2VuZGlmCiAKIAljcyA9IChDb21wcmVzc29yU3RhdGUgKikgcGdfbWFs bG9jMChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7CiAJY3MtPndyaXRlRiA9IHdyaXRlRjsKLQlj cy0+Y29tcHJBbGcgPSBhbGc7CisJY3MtPmNvbXByZXNzX2FsZ29yaXRobSA9IGNvbXByZXNzX3Nw ZWMuYWxnb3JpdGhtOwogCiAJLyoKIAkgKiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRobSBz cGVjaWZpYyBpbml0aWFsaXphdGlvbi4KIAkgKi8KICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoYWxn ID09IENPTVBSX0FMR19MSUJaKQotCQlJbml0Q29tcHJlc3NvclpsaWIoY3MsIGxldmVsKTsKKwlp ZiAoY3MtPmNvbXByZXNzX2FsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlJbml0 Q29tcHJlc3NvclpsaWIoY3MsIGNvbXByZXNzX3NwZWMubGV2ZWwpOwogI2VuZGlmCiAKIAlyZXR1 cm4gY3M7CkBAIC0xNTQsMjEgKzEyOCwyNCBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoaW50IGNvbXBy ZXNzaW9uLCBXcml0ZUZ1bmMgd3JpdGVGKQogICogb3V0IHdpdGggYWh3cml0ZSgpLgogICovCiB2 b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBpbnQgY29tcHJlc3Np b24sIFJlYWRGdW5jIHJlYWRGKQorUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQlSZWFkRnVu YyByZWFkRikKIHsKLQlDb21wcmVzc2lvbkFsZ29yaXRobSBhbGc7Ci0KLQlQYXJzZUNvbXByZXNz aW9uT3B0aW9uKGNvbXByZXNzaW9uLCAmYWxnLCBOVUxMKTsKLQotCWlmIChhbGcgPT0gQ09NUFJf QUxHX05PTkUpCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFILCByZWFkRik7Ci0JaWYgKGFs ZyA9PSBDT01QUl9BTEdfTElCWikKKwlzd2l0Y2ggKGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtKQog CXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5v bmUoQUgsIHJlYWRGKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAj aWZkZWYgSEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7CisJ CQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOwogI2Vsc2UKLQkJcGdfZmF0YWwo Im5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOworCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3 aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBn X2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CiAJfQogfQog CkBAIC0xNzksMTggKzE1NiwyMSBAQCB2b2lkCiBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiAJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pCiB7Ci0Jc3dpdGNoIChjcy0+Y29tcHJBbGcpCisJc3dpdGNoIChjcy0+Y29t cHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJY2FzZSBDT01QUl9BTEdfTElCWjoKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgogCQkJV3JpdGVEYXRhVG9BcmNoaXZl WmxpYihBSCwgY3MsIGRhdGEsIGRMZW4pOwogI2Vsc2UKIAkJCXBnX2ZhdGFsKCJub3QgYnVpbHQg d2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgogCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUFJfQUxH X05PTkU6CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKIAkJCVdyaXRlRGF0YVRvQXJjaGl2 ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdf ZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CiB9CiAK QEAgLTIwMCwxMSArMTgwLDIzIEBAIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7CisJc3dpdGNoIChjcy0+Y29tcHJlc3NfYWxn b3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElC WgotCWlmIChjcy0+Y29tcHJBbGcgPT0gQ09NUFJfQUxHX0xJQlopCi0JCUVuZENvbXByZXNzb3Ja bGliKEFILCBjcyk7CisJCQlFbmRDb21wcmVzc29yWmxpYihBSCwgY3MpOworI2Vsc2UKKwkJCXBn X2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNlbmRpZgotCWZyZWUoY3Mp OworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCWZyZWUoY3MpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9u IG1ldGhvZCIpOworCQkJYnJlYWs7CisJfQogfQogCiAvKiBQcml2YXRlIHJvdXRpbmVzLCBzcGVj aWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KQEAgLTQxOCwxMCArNDEwLDggQEAg V3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcywKICAqLwogc3RydWN0IGNmcAogewotCUZJTEUJICAgKnVuY29tcHJlc3NlZGZwOwotI2lm ZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJY29tcHJlc3NlZGZwOwotI2VuZGlmCisJcGdfY29tcHJl c3NfYWxnb3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobTsKKwl2b2lkCSAgICpmcDsKIH07CiAKICNp ZmRlZiBIQVZFX0xJQloKQEAgLTQ1MiwyMSArNDQyLDI1IEBAIGNmcCAqCiBjZm9wZW5fcmVhZChj b25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogewogCWNmcAkJICAgKmZwOworCXBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyA9IHswfTsKIAorCWNvbXByZXNz X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKICNpZmRlZiBIQVZFX0xJQloK IAlpZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oiKSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwg MSk7CisJCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzX3NwZWMpOwogCWVsc2UKICNl bmRpZgogCXsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgMCk7CisJCWNvbXByZXNzX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwkJZnAgPSBjZm9wZW4ocGF0aCwgbW9k ZSwgY29tcHJlc3Nfc3BlYyk7CiAjaWZkZWYgSEFWRV9MSUJaCiAJCWlmIChmcCA9PSBOVUxMKQog CQl7CiAJCQljaGFyCSAgICpmbmFtZTsKIAorCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQ R19DT01QUkVTU0lPTl9HWklQOwogCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsK LQkJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCAxKTsKKwkJCWZwID0gY2ZvcGVuKGZuYW1lLCBt b2RlLCBjb21wcmVzc19zcGVjKTsKIAkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAJCX0KICNl bmRpZgpAQCAtNDc5LDI2ICs0NzMsMjcgQEAgY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqbW9kZSkKICAqIGJlIGEgZmlsZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4o KSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMgd3JpdGluZwogICogKCJ3IiwgIndiIiwgImEi LCBvciAiYWIiKS4KICAqCi0gKiBJZiAnY29tcHJlc3Npb24nIGlzIG5vbi16ZXJvLCBhIGd6aXAg Y29tcHJlc3NlZCBzdHJlYW0gaXMgb3BlbmVkLCBhbmQKLSAqICdjb21wcmVzc2lvbicgaW5kaWNh dGVzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB1c2VkLiBUaGUgIi5neiIgc3VmZml4Ci0gKiBpcyBh dXRvbWF0aWNhbGx5IGFkZGVkIHRvICdwYXRoJyBpbiB0aGF0IGNhc2UuCisgKiBJZiAnY29tcHJl c3Nfc3BlYy5hbGdvcml0aG0nIGlzIEdaSVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBv cGVuZWQsCisgKiBhbmQgJ2NvbXByZXNzX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZm aXggaXMgYXV0b21hdGljYWxseSBhZGRlZCB0bworICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KICAq CiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8u CiAgKi8KIGNmcCAqCi1jZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwgaW50IGNvbXByZXNzaW9uKQorY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNv bnN0IGNoYXIgKm1vZGUsCisJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc19zcGVjKQogewogCWNmcAkJICAgKmZwOwogCi0JaWYgKGNvbXByZXNzaW9uID09IDApCi0J CWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIDApOworCWlmIChjb21wcmVzc19zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQorCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21w cmVzc19zcGVjKTsKIAllbHNlCiAJewogI2lmZGVmIEhBVkVfTElCWgogCQljaGFyCSAgICpmbmFt ZTsKIAogCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQlmcCA9IGNmb3Blbihm bmFtZSwgbW9kZSwgY29tcHJlc3Npb24pOworCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29t cHJlc3Nfc3BlYyk7CiAJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAjZWxzZQogCQlwZ19mYXRh bCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CkBAIC01MDksNjAgKzUwNCw5NiBAQCBj Zm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50IGNvbXBy ZXNzaW9uKQogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0aCcgaW4gJ21vZGUnLiBJZiAnY29t cHJlc3Npb24nIGlzIG5vbi16ZXJvLCB0aGUgZmlsZQotICogaXMgb3BlbmVkIHdpdGggbGlieiBn em9wZW4oKSwgb3RoZXJ3aXNlIHdpdGggcGxhaW4gZm9wZW4oKS4KKyAqIFRoaXMgaXMgdGhlIHdv cmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBmaWxlICdwYXRoJyBv cgorICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3Jp cHRvciwgaW4gJ21vZGUnLiBUaGUKKyAqIGRlc2NyaXB0b3IgaXMgbm90IGR1cCdlZCBhbmQgaXQg aXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgorICogVGhlIGNhbGxlciBt dXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBzdXBwb3J0ZWQgYnkg dGhlCisgKiBjdXJyZW50IGJ1aWxkLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdp dGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNmb3Blbihjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJlc3Npb24pCitzdGF0aWMgY2ZwICoK K2Nmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1v ZGUsCisJCQkJcGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzX2FsZ29yaXRobSwgaW50IGNv bXByZXNzaW9uTGV2ZWwpCiB7CiAJY2ZwCQkgICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkp OwogCi0JaWYgKGNvbXByZXNzaW9uICE9IDApCisJZnAtPmNvbXByZXNzX2FsZ29yaXRobSA9IGNv bXByZXNzX2FsZ29yaXRobTsKKworCXN3aXRjaCAoY29tcHJlc3NfYWxnb3JpdGhtKQogCXsKLSNp ZmRlZiBIQVZFX0xJQloKLQkJaWYgKGNvbXByZXNzaW9uICE9IFpfREVGQVVMVF9DT01QUkVTU0lP TikKLQkJewotCQkJLyogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNv IHRlbGwgemxpYiB0byB1c2UgaXQgKi8KLQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOwor CQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlmcC0+ZnAg PSBmZG9wZW4oZmQsIG1vZGUpOworCQkJZWxzZQorCQkJCWZwLT5mcCA9IGZvcGVuKHBhdGgsIG1v ZGUpOworCQkJaWYgKGZwLT5mcCA9PSBOVUxMKQorCQkJeworCQkJCWZyZWVfa2VlcF9lcnJubyhm cCk7CisJCQkJZnAgPSBOVUxMOworCQkJfQogCi0JCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9u LCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJIG1vZGUsIGNvbXByZXNz aW9uKTsKLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lv bik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3Qg dXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0 aCwgbW9kZSk7Ci0JCX0KKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Cisj aWZkZWYgSEFWRV9MSUJaCisJCQlpZiAoY29tcHJlc3Npb25MZXZlbCAhPSBaX0RFRkFVTFRfQ09N UFJFU1NJT04pCisJCQl7CisJCQkJLyoKKwkJCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21w cmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZQorCQkJCSAqIGl0CisJCQkJICovCisJ CQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07CisKKwkJCQlzbnByaW50Zihtb2RlX2NvbXBy ZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJCQkJCSBtb2RlLCBj b21wcmVzc2lvbkxldmVsKTsKKwkJCQlpZiAoZmQgPj0gMCkKKwkJCQkJZnAtPmZwID0gZ3pkb3Bl bihmZCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQkJZWxzZQorCQkJCQlmcC0+ZnAgPSBnem9wZW4o cGF0aCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogZG9u J3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCisJCQkJaWYg KGZkID49IDApCisJCQkJCWZwLT5mcCA9IGd6ZG9wZW4oZmQsIG1vZGUpOworCQkJCWVsc2UKKwkJ CQkJZnAtPmZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOworCQkJfQogCi0JCWZwLT51bmNvbXByZXNz ZWRmcCA9IE5VTEw7Ci0JCWlmIChmcC0+Y29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZy ZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KKwkJCWlmIChmcC0+ZnAgPT0g TlVMTCkKKwkJCXsKKwkJCQlmcmVlX2tlZXBfZXJybm8oZnApOworCQkJCWZwID0gTlVMTDsKKwkJ CX0KICNlbHNlCi0JCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKLSNl bmRpZgotCX0KLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQlmcC0+Y29tcHJlc3NlZGZw ID0gTlVMTDsKKwkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNl bmRpZgotCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKLQkJaWYgKGZw LT51bmNvbXByZXNzZWRmcCA9PSBOVUxMKQotCQl7Ci0JCQlmcmVlX2tlZXBfZXJybm8oZnApOwot CQkJZnAgPSBOVUxMOwotCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBnX2ZhdGFsKCJp bnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGZw OwogfQogCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUs CisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQorewor CXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsCisJCQkJCQkgICBjb21wcmVz c19zcGVjLmFsZ29yaXRobSwKKwkJCQkJCSAgIGNvbXByZXNzX3NwZWMubGV2ZWwpOworfQorCitj ZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVy bmFsKE5VTEwsIGZkLCBtb2RlLAorCQkJCQkJICAgY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0sCisJ CQkJCQkgICBjb21wcmVzc19zcGVjLmxldmVsKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRy LCBpbnQgc2l6ZSwgY2ZwICpmcCkKQEAgLTU3MiwzOCArNjAzLDYxIEBAIGNmcmVhZCh2b2lkICpw dHIsIGludCBzaXplLCBjZnAgKmZwKQogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCi0j aWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCisJc3dpdGNoIChmcC0+Y29t cHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pyZWFkKGZwLT5jb21wcmVzc2VkZnAsIHB0 ciwgc2l6ZSk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZnAtPmNvbXByZXNzZWRmcCkp Ci0JCXsKLQkJCWludAkJCWVycm51bTsKLQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3Io ZnAtPmNvbXByZXNzZWRmcCwgJmVycm51bSk7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToK KwkJCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnAtPmZwKTsKKwkJCWlmIChyZXQgIT0gc2l6 ZSAmJiAhZmVvZihmcC0+ZnApKQorCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOwogCi0JCQlw Z19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJu dW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9Ci0JZWxz ZQorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJ QloKKwkJCXJldCA9IGd6cmVhZChmcC0+ZnAsIHB0ciwgc2l6ZSk7CisJCQlpZiAocmV0ICE9IHNp emUgJiYgIWd6ZW9mKGZwLT5mcCkpCisJCQl7CisJCQkJaW50CQkJZXJybnVtOworCQkJCWNvbnN0 IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmZwLCAmZXJybnVtKTsKKworCQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwKKwkJCQkJCSBlcnJudW0gPT0g Wl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7CisJCQl9CisjZWxzZQorCQkJcGdf ZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JewotCQlyZXQg PSBmcmVhZChwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgIT0g c2l6ZSAmJiAhZmVvZihmcC0+dW5jb21wcmVzc2VkZnApKQotCQkJUkVBRF9FUlJPUl9FWElUKGZw LT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwo ImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CisKIAlyZXR1cm4g cmV0OwogfQogCiBpbnQKIGNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpm cCkKIHsKKwlpbnQJCQlyZXQgPSAwOworCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGht KQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZndyaXRlKHB0ciwg MSwgc2l6ZSwgZnAtPmZwKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6 CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnendy aXRlKGZwLT5jb21wcmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0JZWxzZQorCQkJcmV0ID0gZ3p3cml0 ZShmcC0+ZnAsIHB0ciwgc2l6ZSk7CisjZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRo IHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0JCXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCBm cC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZ19mYXRhbCgi aW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBy ZXQ7CiB9CiAKIGludApAQCAtNjExLDI0ICs2NjUsMzEgQEAgY2ZnZXRjKGNmcCAqZnApCiB7CiAJ aW50CQkJcmV0OwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCisJ c3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5j b21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVvZihmcC0+ Y29tcHJlc3NlZGZwKSkKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0KLQllbHNl CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZnZXRjKGZwLT5mcCk7CisJ CQlpZiAocmV0ID09IEVPRikKKwkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZwKTsKKworCQkJYnJl YWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJl dCA9IGd6Z2V0YygoZ3pGaWxlKSBmcC0+ZnApOworCQkJaWYgKHJldCA9PSBFT0YpCisJCQl7CisJ CQkJaWYgKCFnemVvZihmcC0+ZnApKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJ fQorI2Vsc2UKKwkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKICNl bmRpZgotCXsKLQkJcmV0ID0gZmdldGMoZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9 PSBFT0YpCi0JCQlSRUFEX0VSUk9SX0VYSVQoZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7 CisJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjM3LDY1ICs2OTgsMTA3IEBAIGNm Z2V0YyhjZnAgKmZwKQogY2hhciAqCiBjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVu KQogeworCWNoYXIJICAgKnJldDsKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSkK Kwl7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVu LCBmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lm ZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3pnZXRzKGZw LT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVuKTsKLQllbHNlCisJCQlyZXQgPSBnemdldHMoZnAtPmZw LCBidWYsIGxlbik7CisjZWxzZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3Vw cG9ydCIpOwogI2VuZGlmCi0JCXJldHVybiBmZ2V0cyhidWYsIGxlbiwgZnAtPnVuY29tcHJlc3Nl ZGZwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJl c3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQK IGNmY2xvc2UoY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXN1bHQ7CisJaW50CQkJcmV0OwogCiAJaWYg KGZwID09IE5VTEwpCiAJewogCQllcnJubyA9IEVCQURGOwogCQlyZXR1cm4gRU9GOwogCX0KLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKworCXN3aXRjaCAoZnAtPmNv bXByZXNzX2FsZ29yaXRobSkKIAl7Ci0JCXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRm cCk7Ci0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxMOwotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09N UFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZjbG9zZShmcC0+ZnApOworCQkJZnAtPmZwID0gTlVM TDsKKworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZF X0xJQloKKwkJCXJldCA9IGd6Y2xvc2UoZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisjZWxz ZQorCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwogI2VuZGlmCi0J ewotCQlyZXN1bHQgPSBmY2xvc2UoZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJZnAtPnVuY29tcHJl c3NlZGZwID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFs aWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKIAl9CisKIAlmcmVlX2tlZXBfZXJy bm8oZnApOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmZW9m KGNmcCAqZnApCiB7CisJaW50CQkJcmV0OworCisJc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3Jp dGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZmVvZihmcC0+ ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgogI2lmZGVmIEhB VkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXBy ZXNzZWRmcCk7Ci0JZWxzZQorCQkJcmV0ID0gZ3plb2YoZnAtPmZwKTsKKyNlbHNlCisJCQlwZ19m YXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7CiAjZW5kaWYKLQkJcmV0dXJuIGZl b2YoZnAtPnVuY29tcHJlc3NlZGZwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGdfZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gcmV0OwogfQogCiBjb25zdCBjaGFyICoKIGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlpZiAoZnAtPmNvbXByZXNz X2FsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCXsKKyNpZmRlZiBIQVZFX0xJQloK IAkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21w cmVzc2VkZnAsICZlcnJudW0pOworCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5m cCwgJmVycm51bSk7CiAKIAkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQogCQkJcmV0dXJuIGVycm1z ZzsKLQl9CisjZWxzZQorCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7 CiAjZW5kaWYKKwl9CisKIAlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwogfQogCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oCmluZGV4IGY2MzU3ODc2OTIuLmQ2MzM1ZmZmMDIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5o CkBAIC0yMSwxMiArMjEsNiBAQAogI2RlZmluZSBaTElCX09VVF9TSVpFCTQwOTYKICNkZWZpbmUg WkxJQl9JTl9TSVpFCTQwOTYKIAotdHlwZWRlZiBlbnVtCi17Ci0JQ09NUFJfQUxHX05PTkUsCi0J Q09NUFJfQUxHX0xJQloKLX0gQ29tcHJlc3Npb25BbGdvcml0aG07Ci0KIC8qIFByb3RvdHlwZSBm b3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gV3JpdGVEYXRhVG9BcmNoaXZlKCkgKi8KIHR5cGVkZWYg dm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNp emVfdCBsZW4pOwogCkBAIC00Niw4ICs0MCwxMCBAQCB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5j KSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKIC8qIHN0 cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1 Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKIAotZXh0ZXJuIENvbXByZXNzb3JT dGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGludCBjb21wcmVzc2lvbiwgV3JpdGVGdW5jIHdyaXRl Rik7Ci1leHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBp bnQgY29tcHJlc3Npb24sCitleHRlcm4gQ29tcHJlc3NvclN0YXRlICpBbGxvY2F0ZUNvbXByZXNz b3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAorCQkJCQkJ CQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpOworZXh0ZXJuIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2 ZShBcmNoaXZlSGFuZGxlICpBSCwKKwkJCQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc19zcGVjLAogCQkJCQkJCQlSZWFkRnVuYyByZWFkRik7CiBleHRlcm4gdm9p ZCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MsCiAJCQkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOwpAQCAtNTYsOSAr NTIsMTMgQEAgZXh0ZXJuIHZvaWQgRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcyk7CiAKIHR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CiAKLWV4dGVybiBj ZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgY29tcHJl c3Npb24pOworZXh0ZXJuIGNmcCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCisJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19z cGVjKTsKK2V4dGVybiBjZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJ CQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpOwogZXh0ZXJuIGNmcCAq Y2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4g Y2ZwICpjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50 IGNvbXByZXNzaW9uKTsKK2V4dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlLAorCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Nfc3BlYyk7CiBleHRlcm4gaW50CWNmcmVhZCh2b2lkICpwdHIsIGludCBzaXpl LCBjZnAgKmZwKTsKIGV4dGVybiBpbnQJY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXpl LCBjZnAgKmZwKTsKIGV4dGVybiBpbnQJY2ZnZXRjKGNmcCAqZnApOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmlu ZGV4IGU4Yjc4OTgyOTcuLjYxYzQxMmM4Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTIzLDYgKzIz LDcgQEAKICNpZm5kZWYgUEdfQkFDS1VQX0gKICNkZWZpbmUgUEdfQkFDS1VQX0gKIAorI2luY2x1 ZGUgImNvbW1vbi9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0 LmgiCiAjaW5jbHVkZSAibGlicHEtZmUuaCIKIApAQCAtMTQzLDcgKzE0NCw4IEBAIHR5cGVkZWYg c3RydWN0IF9yZXN0b3JlT3B0aW9ucwogCiAJaW50CQkJbm9EYXRhRm9yRmFpbGVkVGFibGVzOwog CWludAkJCWV4aXRfb25fZXJyb3I7Ci0JaW50CQkJY29tcHJlc3Npb247CisJcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjOwkvKiBTcGVjaWZpY2F0aW9uIGZvcgorCQkJCQkJ CQkJCQkJICogY29tcHJlc3Npb24gKi8KIAlpbnQJCQlzdXBwcmVzc0R1bXBXYXJuaW5nczsJLyog U3VwcHJlc3Mgb3V0cHV0IG9mIFdBUk5JTkcgZW50cmllcwogCQkJCQkJCQkJCSAqIHRvIHN0ZGVy ciAqLwogCWJvb2wJCXNpbmdsZV90eG47CkBAIC0zMDMsNyArMzA1LDggQEAgZXh0ZXJuIEFyY2hp dmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0 IGZtdCk7CiAKIC8qIENyZWF0ZSBhIG5ldyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAqQ3Jl YXRlQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQs Ci0JCQkJCQkJICBjb25zdCBpbnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9k ZSBtb2RlLAorCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c19zcGVjLAorCQkJCQkJCSAgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCiAJCQkJCQkJ ICBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBEdW1wV29ya2VyKTsKIAogLyogVGhlIC0tbGlzdCBv cHRpb24gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBmMzljMGZhMzZm Li4zMDRjYzA3MmNhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC0zMSw2 ICszMSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRl ICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCkBAIC00Mywx MyArNDQsNiBAQAogI2RlZmluZSBURVhUX0RVTVBfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBkdW1wXG4tLVxuXG4iCiAjZGVmaW5lIFRFWFRfRFVNUEFMTF9IRUFERVIgIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIgogCi0vKiBzdGF0ZSBu ZWVkZWQgdG8gc2F2ZS9yZXN0b3JlIGFuIGFyY2hpdmUncyBvdXRwdXQgdGFyZ2V0ICovCi10eXBl ZGVmIHN0cnVjdCBfb3V0cHV0Q29udGV4dAotewotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0 OwotfSBPdXRwdXRDb250ZXh0OwotCiAvKgogICogU3RhdGUgZm9yIHRyYWNraW5nIFRvY0VudHJ5 cyB0aGF0IGFyZSByZWFkeSB0byBwcm9jZXNzIGR1cmluZyBhIHBhcmFsbGVsCiAgKiByZXN0b3Jl LiAgKFRoaXMgdXNlZCB0byBiZSBhIGxpc3QsIGFuZCB3ZSBzdGlsbCBjYWxsIGl0IHRoYXQsIHRo b3VnaCBub3cKQEAgLTcwLDcgKzY0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX3BhcmFsbGVsUmVhZHlM aXN0CiAKIAogc3RhdGljIEFyY2hpdmVIYW5kbGUgKl9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVT cGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKLQkJCQkJCQkgICBjb25zdCBpbnQgY29tcHJl c3Npb24sIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAorCQkJCQkJCSAgIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYywKKwkJCQkJCQkgICBib29sIGRv c3luYywgQXJjaGl2ZU1vZGUgbW9kZSwKIAkJCQkJCQkgICBTZXR1cFdvcmtlclB0clR5cGUgc2V0 dXBXb3JrZXJQdHIpOwogc3RhdGljIHZvaWQgX2dldE9iamVjdERlc2NyaXB0aW9uKFBRRXhwQnVm ZmVyIGJ1ZiwgY29uc3QgVG9jRW50cnkgKnRlKTsKIHN0YXRpYyB2b2lkIF9wcmludFRvY0VudHJ5 KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNEYXRhKTsKQEAgLTk4LDkg KzkzLDEwIEBAIHN0YXRpYyBpbnQJX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxl ICpBSCk7CiBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3Rh dGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVt cFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGlt KTsKLXN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAq ZmlsZW5hbWUsIGludCBjb21wcmVzc2lvbik7Ci1zdGF0aWMgT3V0cHV0Q29udGV4dCBTYXZlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250ZXh0KTsKK3N0YXRpYyB2b2lkIFNl dE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAg Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKK3N0YXRpYyBj ZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJ cmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBp c19wYXJhbGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJj aGl2ZUhhbmRsZSAqQUgsCkBAIC0yMzksMTIgKzIzNSwxMyBAQCBzZXR1cFJlc3RvcmVXb3JrZXIo QXJjaGl2ZSAqQUhYKQogLyogUHVibGljICovCiBBcmNoaXZlICoKIENyZWF0ZUFyY2hpdmUoY29u c3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAotCQkJICBjb25zdCBp bnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5jLCBBcmNoaXZlTW9kZSBtb2RlLAorCQkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCisJCQkgIGJvb2wgZG9z eW5jLCBBcmNoaXZlTW9kZSBtb2RlLAogCQkJICBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBEdW1w V29ya2VyKQogCiB7Ci0JQXJjaGl2ZUhhbmRsZSAqQUggPSBfYWxsb2NBSChGaWxlU3BlYywgZm10 LCBjb21wcmVzc2lvbiwgZG9zeW5jLAotCQkJCQkJCQkgbW9kZSwgc2V0dXBEdW1wV29ya2VyKTsK KwlBcmNoaXZlSGFuZGxlICpBSCA9IF9hbGxvY0FIKEZpbGVTcGVjLCBmbXQsIGNvbXByZXNzX3Nw ZWMsCisJCQkJCQkJCSBkb3N5bmMsIG1vZGUsIHNldHVwRHVtcFdvcmtlcik7CiAKIAlyZXR1cm4g KEFyY2hpdmUgKikgQUg7CiB9CkBAIC0yNTQsNyArMjUxLDEyIEBAIENyZWF0ZUFyY2hpdmUoY29u c3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogQXJjaGl2ZSAqCiBP cGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQp CiB7Ci0JQXJjaGl2ZUhhbmRsZSAqQUggPSBfYWxsb2NBSChGaWxlU3BlYywgZm10LCAwLCB0cnVl LCBhcmNoTW9kZVJlYWQsIHNldHVwUmVzdG9yZVdvcmtlcik7CisJQXJjaGl2ZUhhbmRsZSAqQUg7 CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9OworCisJY29t cHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOworCUFIID0gX2FsbG9j QUgoRmlsZVNwZWMsIGZtdCwgY29tcHJlc3Nfc3BlYywgdHJ1ZSwKKwkJCQkgIGFyY2hNb2RlUmVh ZCwgc2V0dXBSZXN0b3JlV29ya2VyKTsKIAogCXJldHVybiAoQXJjaGl2ZSAqKSBBSDsKIH0KQEAg LTI2OSwxMSArMjcxLDggQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlBSC0+Q2xvc2VQ dHIoQUgpOwogCiAJLyogQ2xvc2UgdGhlIG91dHB1dCAqLwotCWVycm5vID0gMDsJCQkJCS8qIGlu IGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVz ID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UgaWYgKEFILT5PRiAhPSBzdGRvdXQpCi0JCXJlcyA9 IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAK IAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6 ICVtIik7CkBAIC0zNTQsOCArMzUzLDkgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQog CUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CisJYm9v bAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7Ci0JT3V0cHV0Q29udGV4 dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5H OwogCkBAIC0zODMsMTYgKzM4MywyMyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJ LyoKIAkgKiBNYWtlIHN1cmUgd2Ugd29uJ3QgbmVlZCAoZGUpY29tcHJlc3Npb24gd2UgaGF2ZW4n dCBnb3QKIAkgKi8KLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbiAhPSAw ICYmIEFILT5QcmludFRvY0RhdGFQdHIgIT0gTlVMTCkKKwlzdXBwb3J0c19jb21wcmVzc2lvbiA9 IHRydWU7CisJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lP Tl9OT05FICYmCisJCUFILT5QcmludFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUg PSBBSC0+dG9jLT5uZXh0OyB0ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlp ZiAodGUtPmhhZER1bXBlciAmJiAodGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlwZ19m YXRhbCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9u IG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl7CisjaWZuZGVmIEhB VkVfTElCWgorCQkJCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fR1pJUCkKKwkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKKyNlbmRpZgor CQkJCWlmIChzdXBwb3J0c19jb21wcmVzc2lvbiA9PSBmYWxzZSkKKwkJCQkJcGdfZmF0YWwoImNh bm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3Vw cG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOworCQkJfQogCQl9CiAJfQotI2VuZGlmCiAK IAkvKgogCSAqIFByZXBhcmUgaW5kZXggYXJyYXlzLCBzbyB3ZSBjYW4gYXNzdW1lIHdlIGhhdmUg dGhlbSB0aHJvdWdob3V0IHJlc3RvcmUuCkBAIC00NTksOCArNDY2LDggQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCSAqIFNldHVwIHRoZSBvdXRwdXQgZmlsZSBpZiBuZWNlc3Nhcnku CiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7Ci0JaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJv cHQtPmNvbXByZXNzaW9uKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5j b21wcmVzc2lvbik7CisJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzX3NwZWMu YWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzX3NwZWMpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0g UG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzM5LDcgKzc0Niw3IEBA IFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8KIAlBSC0+c3RhZ2UgPSBTVEFHRV9G SU5BTElaSU5HOwogCi0JaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uKQor CWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSAhPSBQ R19DT01QUkVTU0lPTl9OT05FKQogCQlSZXN0b3JlT3V0cHV0KEFILCBzYXYpOwogCiAJaWYgKHJv cHQtPnVzZURCKQpAQCAtOTY5LDYgKzk3Niw4IEBAIE5ld1Jlc3RvcmVPcHRpb25zKHZvaWQpCiAJ b3B0cy0+Zm9ybWF0ID0gYXJjaFVua25vd247CiAJb3B0cy0+Y3BhcmFtcy5wcm9tcHRQYXNzd29y ZCA9IFRSSV9ERUZBVUxUOwogCW9wdHMtPmR1bXBTZWN0aW9ucyA9IERVTVBfVU5TRUNUSU9ORUQ7 CisJb3B0cy0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwor CW9wdHMtPmNvbXByZXNzX3NwZWMubGV2ZWwgPSBJTlRfTUlOOwogCiAJcmV0dXJuIG9wdHM7CiB9 CkBAIC0xMTE1LDIzICsxMTI0LDI4IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJ QXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlv bnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJVG9jRW50cnkgICAqdGU7CisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3Vy U2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAJY29uc3QgY2hh ciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCisJLyogVE9DIGlzIGFsd2F5cyB1 bmNvbXByZXNzZWQgKi8KKwlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9OT05FOworCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1l KQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCAwIC8qIG5vIGNvbXByZXNzaW9uICov ICk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc19zcGVjKTsK IAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RS RlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKIAkJc3Ry Y3B5KHN0YW1wX3N0ciwgIlt1bmtub3duXSIpOwogCiAJYWhwcmludGYoQUgsICI7XG47IEFyY2hp dmUgY3JlYXRlZCBhdCAlc1xuIiwgc3RhbXBfc3RyKTsKLQlhaHByaW50ZihBSCwgIjsgICAgIGRi bmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVkXG4i LAorCWFocHJpbnRmKEFILCAiOyAgICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVk XG47ICAgICBDb21wcmVzc2lvbjogJXNcbiIsCiAJCQkgc2FuaXRpemVfbGluZShBSC0+YXJjaGRi bmFtZSwgZmFsc2UpLAotCQkJIEFILT50b2NDb3VudCwgQUgtPmNvbXByZXNzaW9uKTsKKwkJCSBB SC0+dG9jQ291bnQsCisJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVz c19zcGVjLmFsZ29yaXRobSkpOwogCiAJc3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE0ODUs NjAgKzE0OTksMzUgQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4u LikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZAotU2V0 T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNvbXBy ZXNzaW9uKQorU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpCiB7 Ci0JaW50CQkJZm47CisJY29uc3QgY2hhciAqbW9kZTsKKwlpbnQJCQlmbiA9IC0xOwogCiAJaWYg KGZpbGVuYW1lKQogCXsKIAkJaWYgKHN0cmNtcChmaWxlbmFtZSwgIi0iKSA9PSAwKQogCQkJZm4g PSBmaWxlbm8oc3Rkb3V0KTsKLQkJZWxzZQotCQkJZm4gPSAtMTsKIAl9CiAJZWxzZSBpZiAoQUgt PkZIKQogCQlmbiA9IGZpbGVubyhBSC0+RkgpOwogCWVsc2UgaWYgKEFILT5mU3BlYykKIAl7Ci0J CWZuID0gLTE7CiAJCWZpbGVuYW1lID0gQUgtPmZTcGVjOwogCX0KIAllbHNlCiAJCWZuID0gZmls ZW5vKHN0ZG91dCk7CiAKLQkvKiBJZiBjb21wcmVzc2lvbiBleHBsaWNpdGx5IHJlcXVlc3RlZCwg dXNlIGd6b3BlbiAqLwotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc2lvbiAhPSAwKQot CXsKLQkJY2hhcgkJZm1vZGVbMTRdOworCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkK KwkJbW9kZSA9IFBHX0JJTkFSWV9BOworCWVsc2UKKwkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0J CS8qIERvbid0IHVzZSBQR19CSU5BUllfeCBzaW5jZSB0aGlzIGlzIHpsaWIgKi8KLQkJc3ByaW50 ZihmbW9kZSwgIndiJWQiLCBjb21wcmVzc2lvbik7Ci0JCWlmIChmbiA+PSAwKQotCQkJQUgtPk9G ID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6b3Blbihm aWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0gMCkKKwkJ QUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKIAllbHNlCi0j ZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1v ZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAo Zm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUs IFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFI LT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0JCQkJQUgtPk9G ID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pPdXQgPSAwOwot CX0KKwkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKIAog CWlmICghQUgtPk9GKQogCXsKQEAgLTE1NDksMzMgKzE1MzgsMjQgQEAgU2V0T3V0cHV0KEFyY2hp dmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNvbXByZXNzaW9uKQogCX0K IH0KIAotc3RhdGljIE91dHB1dENvbnRleHQKK3N0YXRpYyBjZnAgKgogU2F2ZU91dHB1dChBcmNo aXZlSGFuZGxlICpBSCkKIHsKLQlPdXRwdXRDb250ZXh0IHNhdjsKLQotCXNhdi5PRiA9IEFILT5P RjsKLQlzYXYuZ3pPdXQgPSBBSC0+Z3pPdXQ7Ci0KLQlyZXR1cm4gc2F2OworCXJldHVybiAoY2Zw ICopIEFILT5PRjsKIH0KIAogc3RhdGljIHZvaWQKLVJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250ZXh0KQorUmVzdG9yZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkKIHsKIAlpbnQJCQlyZXM7CiAKLQllcnJubyA9 IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBkb2Vzbid0IHNldCBpdCAqLwotCWlmIChBSC0+ Z3pPdXQpCi0JCXJlcyA9IEdaQ0xPU0UoQUgtPk9GKTsKLQllbHNlCi0JCXJlcyA9IGZjbG9zZShB SC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVz ICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CiAK LQlBSC0+Z3pPdXQgPSBzYXZlZENvbnRleHQuZ3pPdXQ7Ci0JQUgtPk9GID0gc2F2ZWRDb250ZXh0 Lk9GOworCUFILT5PRiA9IHNhdmVkT3V0cHV0OwogfQogCiAKQEAgLTE2OTksMjIgKzE2NzksMTcg QEAgYWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFy Y2hpdmVIYW5kbGUgKkFIKQogCiAJCWJ5dGVzX3dyaXR0ZW4gPSBzaXplICogbm1lbWI7CiAJfQot CWVsc2UgaWYgKEFILT5nek91dCkKLQkJYnl0ZXNfd3JpdHRlbiA9IEdaV1JJVEUocHRyLCBzaXpl LCBubWVtYiwgQUgtPk9GKTsKIAllbHNlIGlmIChBSC0+Q3VzdG9tT3V0UHRyKQogCQlieXRlc193 cml0dGVuID0gQUgtPkN1c3RvbU91dFB0cihBSCwgcHRyLCBzaXplICogbm1lbWIpOwogCisJLyoK KwkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5k IHdlJ3JlIGNvbm5lY3RlZAorCSAqIHRoZW4gc2VuZCBpdCB0byB0aGUgREIuCisJICovCisJZWxz ZSBpZiAoUmVzdG9yaW5nVG9EQihBSCkpCisJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29t bWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwog CWVsc2UKLQl7Ci0JCS8qCi0JCSAqIElmIHdlJ3JlIGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3Mg ZGlyZWN0IHRvIERCLCBhbmQgd2UncmUKLQkJICogY29ubmVjdGVkIHRoZW4gc2VuZCBpdCB0byB0 aGUgREIuCi0JCSAqLwotCQlpZiAoUmVzdG9yaW5nVG9EQihBSCkpCi0JCQlieXRlc193cml0dGVu ID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwg c2l6ZSAqIG5tZW1iKTsKLQkJZWxzZQotCQkJYnl0ZXNfd3JpdHRlbiA9IGZ3cml0ZShwdHIsIHNp emUsIG5tZW1iLCBBSC0+T0YpICogc2l6ZTsKLQl9CisJCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRl KHB0ciwgc2l6ZSAqIG5tZW1iLCBBSC0+T0YpOwogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6 ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9FWElUOwpAQCAtMjE5OCwxMCArMjE3MywxMiBAQCBf ZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogICovCiBzdGF0aWMgQXJj aGl2ZUhhbmRsZSAqCiBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2 ZUZvcm1hdCBmbXQsCi0JCSBjb25zdCBpbnQgY29tcHJlc3Npb24sIGJvb2wgZG9zeW5jLCBBcmNo aXZlTW9kZSBtb2RlLAorCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c19zcGVjLAorCQkgYm9vbCBkb3N5bmMsIEFyY2hpdmVNb2RlIG1vZGUsCiAJCSBTZXR1cFdvcmtl clB0clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19k ZWJ1ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCiAJCQkJIEZpbGVTcGVjID8g RmlsZVNwZWMgOiAiKHN0ZGlvKSIsIGZtdCk7CkBAIC0yMjQ5LDE0ICsyMjI2LDE0IEBAIF9hbGxv Y0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAlBSC0+ dG9jLT5wcmV2ID0gQUgtPnRvYzsKIAogCUFILT5tb2RlID0gbW9kZTsKLQlBSC0+Y29tcHJlc3Np b24gPSBjb21wcmVzc2lvbjsKKwlBSC0+Y29tcHJlc3Nfc3BlYyA9IGNvbXByZXNzX3NwZWM7CiAJ QUgtPmRvc3luYyA9IGRvc3luYzsKIAogCW1lbXNldCgmKEFILT5zcWxwYXJzZSksIDAsIHNpemVv ZihBSC0+c3FscGFyc2UpKTsKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJlc3Npb24g Zm9yIEFIIG91dHB1dCBoYW5kbGUgKi8KLQlBSC0+Z3pPdXQgPSAwOwotCUFILT5PRiA9IHN0ZG91 dDsKKwlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwor CUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQpKSwgUEdfQklOQVJZX0EsIG91dF9j b21wcmVzc19zcGVjKTsKIAogCS8qCiAJICogT24gV2luZG93cywgd2UgbmVlZCB0byB1c2UgYmlu YXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxlcywKQEAgLTIyNjQsNyArMjI0MSw3 IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZt dCwKIAkgKiBGb3JjZSBzdGRpbi9zdGRvdXQgaW50byBiaW5hcnkgbW9kZSBpZiB0aGF0IGlzIHdo YXQgd2UgYXJlIHVzaW5nLgogCSAqLwogI2lmZGVmIFdJTjMyCi0JaWYgKChmbXQgIT0gYXJjaE51 bGwgfHwgY29tcHJlc3Npb24gIT0gMCkgJiYKKwlpZiAoKGZtdCAhPSBhcmNoTnVsbCB8fCBjb21w cmVzc19zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKSAmJgogCQkoQUgtPmZT cGVjID09IE5VTEwgfHwgc3RyY21wKEFILT5mU3BlYywgIiIpID09IDApKQogCXsKIAkJaWYgKG1v ZGUgPT0gYXJjaE1vZGVXcml0ZSkKQEAgLTM2NjksNyArMzY0Niw3IEBAIFdyaXRlSGVhZChBcmNo aXZlSGFuZGxlICpBSCkKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+aW50U2l6ZSk7CiAJQUgt PldyaXRlQnl0ZVB0cihBSCwgQUgtPm9mZlNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFI LT5mb3JtYXQpOwotCVdyaXRlSW50KEFILCBBSC0+Y29tcHJlc3Npb24pOworCVdyaXRlSW50KEFI LCBBSC0+Y29tcHJlc3Nfc3BlYy5sZXZlbCk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVh dGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50KEFILCBjcnRt LnRtX21pbik7CkBAIC0zNzQwLDIxICszNzE3LDI2IEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUg KkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0ICglZCkgZGlmZmVycyBmcm9tIGZvcm1h dCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+Zm9ybWF0LCBmbXQpOwogCisJQUgtPmNv bXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKIAlpZiAoQUgtPnZl cnNpb24gPj0gS19WRVJTXzFfMikKIAl7CiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVSU18xXzQp Ci0JCQlBSC0+Y29tcHJlc3Npb24gPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOworCQkJQUgtPmNvbXBy ZXNzX3NwZWMubGV2ZWwgPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOwogCQllbHNlCi0JCQlBSC0+Y29t cHJlc3Npb24gPSBSZWFkSW50KEFIKTsKKwkJCUFILT5jb21wcmVzc19zcGVjLmxldmVsID0gUmVh ZEludChBSCk7CisKKwkJaWYgKEFILT5jb21wcmVzc19zcGVjLmxldmVsICE9IDApCisJCQlBSC0+ Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCX0KIAllbHNl Ci0JCUFILT5jb21wcmVzc2lvbiA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwkJQUgtPmNvbXBy ZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAogI2lmbmRlZiBIQVZF X0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uICE9IDApCisJaWYgKEFILT5jb21wcmVzc19zcGVj LmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQlwZ19sb2dfd2FybmluZygiYXJj aGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7CiAjZW5kaWYKIAor CiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzQpCiAJewogCQlzdHJ1Y3QgdG0JY3J0bTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCA0MjY4N2M0ZWM4Li5kMjkzMDk0 OWFiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zMiwzMCArMzIsNiBA QAogCiAjZGVmaW5lIExPQkJVRlNJWkUgMTYzODQKIAotI2lmZGVmIEhBVkVfTElCWgotI2luY2x1 ZGUgPHpsaWIuaD4KLSNkZWZpbmUgR1pDTE9TRShmaCkgZ3pjbG9zZShmaCkKLSNkZWZpbmUgR1pX UklURShwLCBzLCBuLCBmaCkgZ3p3cml0ZShmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWlJF QUQocCwgcywgbiwgZmgpIGd6cmVhZChmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWkVPRihm aCkJZ3plb2YoZmgpCi0jZWxzZQotI2RlZmluZSBHWkNMT1NFKGZoKSBmY2xvc2UoZmgpCi0jZGVm aW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIChmd3JpdGUocCwgcywgbiwgZmgpICogKHMpKQotI2Rl ZmluZSBHWlJFQUQocCwgcywgbiwgZmgpIGZyZWFkKHAsIHMsIG4sIGZoKQotI2RlZmluZSBHWkVP RihmaCkJZmVvZihmaCkKLS8qIHRoaXMgaXMganVzdCB0aGUgcmVkZWZpbml0aW9uIG9mIGEgbGli eiBjb25zdGFudCAqLwotI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKC0xKQotCi10eXBl ZGVmIHN0cnVjdCBfel9zdHJlYW0KLXsKLQl2b2lkCSAgICpuZXh0X2luOwotCXZvaWQJICAgKm5l eHRfb3V0OwotCXNpemVfdAkJYXZhaWxfaW47Ci0Jc2l6ZV90CQlhdmFpbF9vdXQ7Ci19IHpfc3Ry ZWFtOwotdHlwZWRlZiB6X3N0cmVhbSAqel9zdHJlYW1wOwotI2VuZGlmCi0KIC8qIERhdGEgYmxv Y2sgdHlwZXMgKi8KICNkZWZpbmUgQkxLX0RBVEEgMQogI2RlZmluZSBCTEtfQkxPQlMgMwpAQCAt MzE5LDggKzI5NSw3IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCiAJY2hhcgkgICAqZlNwZWM7 CQkJLyogQXJjaGl2ZSBGaWxlIFNwZWMgKi8KIAlGSUxFCSAgICpGSDsJCQkJLyogR2VuZXJhbCBw dXJwb3NlIGZpbGUgaGFuZGxlICovCi0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7CQkJLyog T3V0cHV0IGZpbGUgKi8KKwl2b2lkCSAgICpPRjsJCQkJLyogT3V0cHV0IGZpbGUgKi8KIAogCXN0 cnVjdCBfdG9jRW50cnkgKnRvYzsJCS8qIEhlYWRlciBvZiBjaXJjdWxhciBsaXN0IG9mIFRPQyBl bnRyaWVzICovCiAJaW50CQkJdG9jQ291bnQ7CQkvKiBOdW1iZXIgb2YgVE9DIGVudHJpZXMgKi8K QEAgLTMzMSwxNCArMzA2LDggQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAJRHVtcElkCSAgICp0 YWJsZURhdGFJZDsJLyogVEFCTEUgREFUQSBpZHMsIGluZGV4ZWQgYnkgdGFibGUgZHVtcElkICov CiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICpjdXJyVG9jOwkvKiBVc2VkIHdoZW4gZHVtcGluZyBkYXRh ICovCi0JaW50CQkJY29tcHJlc3Npb247CS8qLS0tLS0tLS0tCi0JCQkJCQkJCSAqIENvbXByZXNz aW9uIHJlcXVlc3RlZCBvbiBvcGVuKCkuCi0JCQkJCQkJCSAqIFBvc3NpYmxlIHZhbHVlcyBmb3Ig Y29tcHJlc3Npb246Ci0JCQkJCQkJCSAqIC0xCVpfREVGQVVMVF9DT01QUkVTU0lPTgotCQkJCQkJ CQkgKiAgMAlDT01QUkVTU0lPTl9OT05FCi0JCQkJCQkJCSAqIDEtOSBsZXZlbHMgZm9yIGd6aXAg Y29tcHJlc3Npb24KLQkJCQkJCQkJICotLS0tLS0tLS0KLQkJCQkJCQkJICovCisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjOwkvKiBSZXF1ZXN0ZWQgc3BlY2lmaWNhdGlv biBmb3IKKwkJCQkJCQkJCQkJCSAqIGNvbXByZXNzaW9uICovCiAJYm9vbAkJZG9zeW5jOwkJCS8q IGRhdGEgcmVxdWVzdGVkIHRvIGJlIHN5bmNlZCBvbiBzaWdodCAqLwogCUFyY2hpdmVNb2RlIG1v ZGU7CQkJLyogRmlsZSBtb2RlIC0gciBvciB3ICovCiAJdm9pZAkgICAqZm9ybWF0RGF0YTsJCS8q IEhlYWRlciBkYXRhIHNwZWNpZmljIHRvIGZpbGUgZm9ybWF0ICovCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9jdXN0b20uYwppbmRleCBhMGE1NWExZWRkLi42YTIxMTJjNDVmIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfY3VzdG9tLmMKQEAgLTI5OCw3ICsyOTgsNyBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RBVEEpOwkvKiBCbG9j ayB0eXBlICovCiAJV3JpdGVJbnQoQUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Igc2FuaXR5IGNoZWNr ICovCiAKLQljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbiwgX0N1 c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJl c3Nfc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC0zNzcsNyArMzc3LDcgQEAg X1N0YXJ0QmxvYihBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJ V3JpdGVJbnQoQUgsIG9pZCk7CiAKLQljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5j b21wcmVzc2lvbiwgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJl c3NvcihBSC0+Y29tcHJlc3Nfc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC01 NjYsNyArNTY2LDcgQEAgX1ByaW50VG9jRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkg KnRlKQogc3RhdGljIHZvaWQKIF9QcmludERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JUmVh ZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgtPmNvbXByZXNzaW9uLCBfQ3VzdG9tUmVhZEZ1bmMpOwor CVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc19zcGVjLCBfQ3VzdG9tUmVhZEZ1 bmMpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMK aW5kZXggNzk4MTgyYjZmNy4uN2QyY2RkYmIyYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Rp cmVjdG9yeS5jCkBAIC0zMjcsNyArMzI3LDggQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpB SCwgVG9jRW50cnkgKnRlKQogCiAJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5maWxlbmFt ZSk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFI LT5jb21wcmVzc2lvbik7CisJY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJ TkFSWV9XLAorCQkJCQkJCSAgIEFILT5jb21wcmVzc19zcGVjKTsKIAlpZiAoY3R4LT5kYXRhRkgg PT0gTlVMTCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjog JW0iLCBmbmFtZSk7CiB9CkBAIC01NzMsNiArNTc0LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZl SGFuZGxlICpBSCkKIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVXcml0ZSkKIAl7CiAJCWNmcAkJ ICAgKnRvY0ZIOworCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMgPSB7 MH07CiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07CiAKIAkJc2V0RmlsZVBhdGgoQUgsIGZuYW1l LCAidG9jLmRhdCIpOwpAQCAtNTgxLDcgKzU4Myw4IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhh bmRsZSAqQUgpCiAJCWN0eC0+cHN0YXRlID0gUGFyYWxsZWxCYWNrdXBTdGFydChBSCk7CiAKIAkJ LyogVGhlIFRPQyBpcyBhbHdheXMgY3JlYXRlZCB1bmNvbXByZXNzZWQgKi8KLQkJdG9jRkggPSBj Zm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCAwKTsKKwkJY29tcHJlc3Nfc3BlYy5hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOworCQl0b2NGSCA9IGNmb3Blbl93cml0ZShmbmFt ZSwgUEdfQklOQVJZX1csIGNvbXByZXNzX3NwZWMpOwogCQlpZiAodG9jRkggPT0gTlVMTCkKIAkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUp OwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwpAQCAtNjM5LDEyICs2NDIsMTQgQEAgc3RhdGljIHZv aWQKIF9TdGFydEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB7CiAJbGNs Q29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9OwogCWNoYXIJCWZuYW1lW01BWFBH UEFUSF07CiAKIAlzZXRGaWxlUGF0aChBSCwgZm5hbWUsICJibG9icy50b2MiKTsKIAogCS8qIFRo ZSBibG9iIFRPQyBmaWxlIGlzIG5ldmVyIGNvbXByZXNzZWQgKi8KLQljdHgtPmJsb2JzVG9jRkgg PSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIDApOworCWNvbXByZXNzX3NwZWMuYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwljdHgtPmJsb2JzVG9jRkggPSBjZm9wZW5fd3JpdGUo Zm5hbWUsICJhYiIsIGNvbXByZXNzX3NwZWMpOwogCWlmIChjdHgtPmJsb2JzVG9jRkggPT0gTlVM TCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBm bmFtZSk7CiB9CkBAIC02NjIsNyArNjY3LDcgQEAgX1N0YXJ0QmxvYihBcmNoaXZlSGFuZGxlICpB SCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJc25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwg IiVzL2Jsb2JfJXUuZGF0IiwgY3R4LT5kaXJlY3RvcnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9 IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc2lvbik7CisJY3R4 LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+Y29tcHJlc3Nf c3BlYyk7CiAKIAlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkKIAkJcGdfZmF0YWwoImNvdWxkIG5v dCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90 YXIuYwppbmRleCA0MDJiOTNjNjEwLi5kNzczYzI5MWM4IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFy LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgImNv bW1vbi9maWxlX3V0aWxzLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJm ZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIK ICNpbmNsdWRlICJwZ19iYWNrdXBfdGFyLmgiCkBAIC0xOTQsNyArMTk1LDcgQEAgSW5pdEFyY2hp dmVGbXRfVGFyKEFyY2hpdmVIYW5kbGUgKkFIKQogCQkgKiBwb3NzaWJsZSBzaW5jZSBnemRvcGVu IHVzZXMgYnVmZmVyZWQgSU8gd2hpY2ggdG90YWxseSBzY3Jld3MgZmlsZQogCQkgKiBwb3NpdGlv bmluZy4KIAkJICovCi0JCWlmIChBSC0+Y29tcHJlc3Npb24gIT0gMCkKKwkJaWYgKEFILT5jb21w cmVzc19zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQogCQkJcGdfZmF0YWwo ImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7CiAJ fQogCWVsc2UKQEAgLTMyOCw3ICszMjksNyBAQCB0YXJPcGVuKEFyY2hpdmVIYW5kbGUgKkFILCBj b25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciBtb2RlKQogCQkJfQogCQl9CiAKLQkJaWYgKEFILT5j b21wcmVzc2lvbiA9PSAwKQorCQlpZiAoQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX05PTkUpCiAJCQl0bS0+bkZIID0gY3R4LT50YXJGSDsKIAkJZWxzZQogCQkJ cGdfZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9y bWF0Iik7CkBAIC0zODMsNyArMzg0LDcgQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgbW9kZSkKIAogCQl1bWFzayhvbGRfdW1hc2spOwogCi0J CWlmIChBSC0+Y29tcHJlc3Npb24gPT0gMCkKKwkJaWYgKEFILT5jb21wcmVzc19zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQogCQkJdG0tPm5GSCA9IHRtLT50bXBGSDsKIAkJ ZWxzZQogCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGFyIGFy Y2hpdmUgZm9ybWF0Iik7CkBAIC00MDEsNyArNDAyLDcgQEAgdGFyT3BlbihBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgbW9kZSkKIHN0YXRpYyB2b2lkCiB0YXJD bG9zZShBcmNoaXZlSGFuZGxlICpBSCwgVEFSX01FTUJFUiAqdGgpCiB7Ci0JaWYgKEFILT5jb21w cmVzc2lvbiAhPSAwKQorCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09N UFJFU1NJT05fTk9ORSkKIAkJcGdfZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQg YnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7CiAKIAlpZiAodGgtPm1vZGUgPT0gJ3cnKQpAQCAtODAw LDcgKzgwMSw2IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCW1lbWNweShy b3B0LCBBSC0+cHVibGljLnJvcHQsIHNpemVvZihSZXN0b3JlT3B0aW9ucykpOwogCQlyb3B0LT5m aWxlbmFtZSA9IE5VTEw7CiAJCXJvcHQtPmRyb3BTY2hlbWEgPSAxOwotCQlyb3B0LT5jb21wcmVz c2lvbiA9IDA7CiAJCXJvcHQtPnN1cGVydXNlciA9IE5VTEw7CiAJCXJvcHQtPnN1cHByZXNzRHVt cFdhcm5pbmdzID0gdHJ1ZTsKIApAQCAtODg4LDcgKzg4OCw3IEBAIF9TdGFydEJsb2IoQXJjaGl2 ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAlpZiAob2lkID09IDApCiAJCXBn X2ZhdGFsKCJpbnZhbGlkIE9JRCBmb3IgbGFyZ2Ugb2JqZWN0ICgldSkiLCBvaWQpOwogCi0JaWYg KEFILT5jb21wcmVzc2lvbiAhPSAwKQorCWlmIChBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0g IT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKIAkJcGdfZmF0YWwoImNvbXByZXNzaW9uIGlzIG5vdCBz dXBwb3J0ZWQgYnkgdGFyIGFyY2hpdmUgZm9ybWF0Iik7CiAKIAlzcHJpbnRmKGZuYW1lLCAiYmxv Yl8ldS5kYXQiLCBvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggZGE0MjdmNGQ0YS4uNjJjMDllNmVkNCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCkBAIC01NCw4ICs1NCwxMCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vi c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyX2QuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGVfZC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb21wcmVzc2lvbi5oIgog I2luY2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCiAjaW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIK KyNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1 ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgpAQCAtMTY0LDYgKzE2Niw4IEBAIHN0YXRpYyB2b2lkIHNldHVwX2Nvbm5lY3Rpb24o QXJjaGl2ZSAqQUgsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZywgY29uc3QgY2hh ciAqZHVtcHNuYXBzaG90LAogCQkJCQkJCSBjaGFyICp1c2Vfcm9sZSk7CiBzdGF0aWMgQXJjaGl2 ZUZvcm1hdCBwYXJzZUFyY2hpdmVGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCBBcmNoaXZlTW9k ZSAqbW9kZSk7CitzdGF0aWMgYm9vbCBwYXJzZV9jb21wcmVzc2lvbihjb25zdCBjaGFyICpvcHQs CisJCQkJCQkJICBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uICpjb21wcmVzc19zcGVjKTsKIHN0 YXRpYyB2b2lkIGV4cGFuZF9zY2hlbWFfbmFtZV9wYXR0ZXJucyhBcmNoaXZlICpmb3V0LAogCQkJ CQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkJCVNpbXBsZU9pZExp c3QgKm9pZHMsCkBAIC0zNDAsOCArMzQ0LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJY29uc3QgY2hhciAqZHVtcHNuYXBzaG90ID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9 IE5VTEw7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JaW50CQkJY29tcHJlc3NMZXZlbCA9IC0x OwogCWludAkJCXBsYWluVGV4dCA9IDA7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc19zcGVjID0gezB9OworCWJvb2wJCXVzZXJfY29tcHJlc3Npb25fZGVmaW5lZCA9IGZhbHNl OwogCUFyY2hpdmVGb3JtYXQgYXJjaGl2ZUZvcm1hdCA9IGFyY2hVbmtub3duOwogCUFyY2hpdmVN b2RlIGFyY2hpdmVNb2RlOwogCkBAIC01NjEsMTAgKzU2NiwxMCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCQlkb3B0LmFjbHNTa2lwID0gdHJ1ZTsKIAkJCQlicmVhazsKIAotCQkJ Y2FzZSAnWic6CQkJLyogQ29tcHJlc3Npb24gTGV2ZWwgKi8KLQkJCQlpZiAoIW9wdGlvbl9wYXJz ZV9pbnQob3B0YXJnLCAiLVovLS1jb21wcmVzcyIsIDAsIDksCi0JCQkJCQkJCQkgICZjb21wcmVz c0xldmVsKSkKKwkJCWNhc2UgJ1onOgkJCS8qIENvbXByZXNzaW9uICovCisJCQkJaWYgKCFwYXJz ZV9jb21wcmVzc2lvbihvcHRhcmcsICZjb21wcmVzc19zcGVjKSkKIAkJCQkJZXhpdF9uaWNlbHko MSk7CisJCQkJdXNlcl9jb21wcmVzc2lvbl9kZWZpbmVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAog CQkJY2FzZSAwOgpAQCAtNjg3LDIzICs2OTIsMjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJaWYgKGFyY2hpdmVGb3JtYXQgPT0gYXJjaE51bGwpCiAJCXBsYWluVGV4dCA9IDE7CiAK LQkvKiBDdXN0b20gYW5kIGRpcmVjdG9yeSBmb3JtYXRzIGFyZSBjb21wcmVzc2VkIGJ5IGRlZmF1 bHQsIG90aGVycyBub3QgKi8KLQlpZiAoY29tcHJlc3NMZXZlbCA9PSAtMSkKKwkvKgorCSAqIEN1 c3RvbSBhbmQgZGlyZWN0b3J5IGZvcm1hdHMgYXJlIGNvbXByZXNzZWQgYnkgZGVmYXVsdCAoemxp YiksIG90aGVycworCSAqIG5vdAorCSAqLworCWlmICh1c2VyX2NvbXByZXNzaW9uX2RlZmluZWQg PT0gZmFsc2UpCiAJeworCQlwYXJzZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKFBHX0NPTVBSRVNT SU9OX05PTkUsIE5VTEwsICZjb21wcmVzc19zcGVjKTsKICNpZmRlZiBIQVZFX0xJQloKIAkJaWYg KGFyY2hpdmVGb3JtYXQgPT0gYXJjaEN1c3RvbSB8fCBhcmNoaXZlRm9ybWF0ID09IGFyY2hEaXJl Y3RvcnkpCi0JCQljb21wcmVzc0xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwotCQllbHNl CisJCQlwYXJzZV9jb21wcmVzc19zcGVjaWZpY2F0aW9uKFBHX0NPTVBSRVNTSU9OX0daSVAsIE5V TEwsCisJCQkJCQkJCQkJICZjb21wcmVzc19zcGVjKTsKICNlbmRpZgotCQkJY29tcHJlc3NMZXZl bCA9IDA7CiAJfQogCi0jaWZuZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc0xldmVsICE9IDAp Ci0JCXBnX2xvZ193YXJuaW5nKCJyZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBp biB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7Ci0J Y29tcHJlc3NMZXZlbCA9IDA7Ci0jZW5kaWYKLQogCS8qCiAJICogSWYgZW1pdHRpbmcgYW4gYXJj aGl2ZSBmb3JtYXQsIHdlIGFsd2F5cyB3YW50IHRvIGVtaXQgYSBEQVRBQkFTRSBpdGVtLAogCSAq IGluIGNhc2UgLS1jcmVhdGUgaXMgc3BlY2lmaWVkIGF0IHBnX3Jlc3RvcmUgdGltZS4KQEAgLTcx Niw4ICs3MTgsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcGdfZmF0YWwoInBh cmFsbGVsIGJhY2t1cCBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZGlyZWN0b3J5IGZvcm1hdCIpOwog CiAJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KLQlmb3V0ID0gQ3JlYXRlQXJjaGl2ZShmaWxl bmFtZSwgYXJjaGl2ZUZvcm1hdCwgY29tcHJlc3NMZXZlbCwgZG9zeW5jLAotCQkJCQkJIGFyY2hp dmVNb2RlLCBzZXR1cER1bXBXb3JrZXIpOworCWZvdXQgPSBDcmVhdGVBcmNoaXZlKGZpbGVuYW1l LCBhcmNoaXZlRm9ybWF0LCBjb21wcmVzc19zcGVjLAorCQkJCQkJIGRvc3luYywgYXJjaGl2ZU1v ZGUsIHNldHVwRHVtcFdvcmtlcik7CiAKIAkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxl IHJpZ2h0IGF3YXkgKi8KIAlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7CkBA IC05NDgsMTAgKzk1MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXJvcHQtPnNl cXVlbmNlX2RhdGEgPSBkb3B0LnNlcXVlbmNlX2RhdGE7CiAJcm9wdC0+YmluYXJ5X3VwZ3JhZGUg PSBkb3B0LmJpbmFyeV91cGdyYWRlOwogCi0JaWYgKGNvbXByZXNzTGV2ZWwgPT0gLTEpCi0JCXJv cHQtPmNvbXByZXNzaW9uID0gMDsKLQllbHNlCi0JCXJvcHQtPmNvbXByZXNzaW9uID0gY29tcHJl c3NMZXZlbDsKKwlyb3B0LT5jb21wcmVzc19zcGVjID0gY29tcHJlc3Nfc3BlYzsKIAogCXJvcHQt PnN1cHByZXNzRHVtcFdhcm5pbmdzID0gdHJ1ZTsJLyogV2UndmUgYWxyZWFkeSBzaG93biB0aGVt ICovCiAKQEAgLTk5OCw3ICs5OTcsOCBAQCBoZWxwKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXBy aW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJh bGxlbCBqb2JzIHRvIGR1bXBcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAg ICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24g ICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikp OwotCXByaW50ZihfKCIgIC1aLCAtLWNvbXByZXNzPTAtOSAgICAgICAgICAgY29tcHJlc3Npb24g bGV2ZWwgZm9yIGNvbXByZXNzZWQgZm9ybWF0c1xuIikpOworCXByaW50ZihfKCIgIC1aLCAtLWNv bXByZXNzPU1FVEhPRFs6TEVWRUxdXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21wcmVzcyBhcyBzcGVjaWZpZWRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2Fp dC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxl IGxvY2tcbiIpKTsKIAlwcmludGYoXygiICAtLW5vLXN5bmMgICAgICAgICAgICAgICAgICAgIGRv IG5vdCB3YWl0IGZvciBjaGFuZ2VzIHRvIGJlIHdyaXR0ZW4gc2FmZWx5IHRvIGRpc2tcbiIpKTsK IAlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxw LCB0aGVuIGV4aXRcbiIpKTsKQEAgLTEyNTgsNiArMTI1OCw2MSBAQCBnZXRfc3luY2hyb25pemVk X3NuYXBzaG90KEFyY2hpdmUgKmZvdXQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIElu dGVycHJldHMgYW5kIHZhbGlkYXRlcyBhIGNvbXByZXNzaW9uIG9wdGlvbiB1c2luZyB0aGUgY29t bW9uIGNvbXByZXNzaW9uCisgKiBwYXJzaW5nIGZ1bmN0aW9ucy4gSWYgdGhlIHJlcXVlc3RlZCBj b21wcmVzc2lvbiBpcyBub3QgYXZhaWxhYmxlIHRoZW4gdGhlCisgKiBhcmNoaXZlcyBhcmUgdW5j b21wcmVzc2VkLgorICovCitzdGF0aWMgYm9vbAorcGFyc2VfY29tcHJlc3Npb24oY29uc3QgY2hh ciAqb3B0LCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uICpjb21wcmVzc19zcGVjKQoreworCWNo YXIJICAgKmFsZ29yaXRobV9zdHIgPSBOVUxMOworCWNoYXIJICAgKmxldmVsX3N0ciA9IE5VTEw7 CisJY2hhcgkgICAqdmFsaWRhdGlvbl9lcnJvciA9IE5VTEw7CisJYm9vbAkJc3VwcG9ydHNfY29t cHJlc3Npb24gPSB0cnVlOworCisJcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhvcHQsICZhbGdvcml0 aG1fc3RyLCAmbGV2ZWxfc3RyKTsKKwlpZiAoIXBhcnNlX2NvbXByZXNzX2FsZ29yaXRobShhbGdv cml0aG1fc3RyLCAmKGNvbXByZXNzX3NwZWMtPmFsZ29yaXRobSkpKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZDogXCIlc1wiIChnemlwLCBub25lKSIsCisJ CQkJCSBhbGdvcml0aG1fc3RyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFN3aXRjaCBv ZmYgdW5pbXBsZW1lbnRlZCBvciB1bmF2YWlsYWJsZSBjb21wcmVzc2lvbnMuICovCisJaWYgKGNv bXByZXNzX3NwZWMtPmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FICYmCisJCWNvbXBy ZXNzX3NwZWMtPmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlzdXBwb3J0c19j b21wcmVzc2lvbiA9IGZhbHNlOworCisjaWZuZGVmIEhBVkVfTElCWgorCWlmIChjb21wcmVzc19z cGVjLT5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJc3VwcG9ydHNfY29tcHJl c3Npb24gPSBmYWxzZTsKKyNlbmRpZgorCisJaWYgKCFzdXBwb3J0c19jb21wcmVzc2lvbikKKwl7 CisJCXBnX2xvZ193YXJuaW5nKCJyZXF1ZXN0ZWQgY29tcHJlc3Npb24gbm90IGF2YWlsYWJsZSBp biB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUgdW5jb21wcmVzc2VkIik7CisJ CXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRpb24oUEdfQ09NUFJFU1NJT05fTk9ORSwgTlVMTCwg Y29tcHJlc3Nfc3BlYyk7CisKKwkJcGdfZnJlZShhbGdvcml0aG1fc3RyKTsKKwkJcGdfZnJlZShs ZXZlbF9zdHIpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIFBhcnNlIGFuZCB2YWxpZGF0 ZSB0aGUgcmVzdCBvZiB0aGUgb3B0aW9ucyAqLworCXBhcnNlX2NvbXByZXNzX3NwZWNpZmljYXRp b24oY29tcHJlc3Nfc3BlYy0+YWxnb3JpdGhtLCBsZXZlbF9zdHIsCisJCQkJCQkJCSBjb21wcmVz c19zcGVjKTsKKwl2YWxpZGF0aW9uX2Vycm9yID0gdmFsaWRhdGVfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbihjb21wcmVzc19zcGVjKTsKKwlpZiAodmFsaWRhdGlvbl9lcnJvcikKKwl7CisJCXBnX2xv Z19lcnJvcigiaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiAlcyIsIHZhbGlkYXRp b25fZXJyb3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIHN0 YXRpYyBBcmNoaXZlRm9ybWF0CiBwYXJzZUFyY2hpdmVGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0 LCBBcmNoaXZlTW9kZSAqbW9kZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAw MV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAppbmRleCBhNTgzYzhh NmQyLi5mOGQwYjJmY2U1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0xMjEsMTYgKzEyMSwz MiBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IGNhbm5vdCBzcGVjaWZ5IGJv dGggLS1zaW5nbGUtdHJhbnNhY3Rpb24gYW5kIG11bHRpcGxlIGpvYnMnKTsKIAogY29tbWFuZF9m YWlsc19saWtlKAotCVsgJ3BnX2R1bXAnLCAnLVonLCAnLTEnIF0sCi0JcXIvXFFwZ19kdW1wOiBl cnJvcjogLVpcLy0tY29tcHJlc3MgbXVzdCBiZSBpbiByYW5nZSAwLi45XEUvLAotCSdwZ19kdW1w OiAtWi8tLWNvbXByZXNzIG11c3QgYmUgaW4gcmFuZ2UnKTsKKwlbICdwZ19kdW1wJywgJy0tY29t cHJlc3MnLCAnZ2FyYmFnZScgXSwKKwlxci9cUXBnX2R1bXA6IGVycm9yOiBpbnZhbGlkIGNvbXBy ZXNzaW9uIG1ldGhvZDogImdhcmJhZ2UiIChnemlwLCBub25lKVxFLywKKwkncGdfZHVtcDogaW52 YWxpZCAtLWNvbXByZXNzJyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wJywg Jy0tY29tcHJlc3MnLCAnbm9uZToxJyBdLAorCXFyL1xRcGdfZHVtcDogZXJyb3I6IGludmFsaWQg Y29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbjogY29tcHJlc3Npb24gYWxnb3JpdGhtICJub25lIiBk b2VzIG5vdCBhY2NlcHQgYSBjb21wcmVzc2lvbiBsZXZlbFxFLywKKwkncGdfZHVtcDogaW52YWxp ZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBjb21wcmVzc2lvbiBhbGdvcml0aG0gIm5vbmUi IGRvZXMgbm90IGFjY2VwdCBhIGNvbXByZXNzaW9uIGxldmVsJyk7CisKIAogaWYgKGNoZWNrX3Bn X2NvbmZpZygiI2RlZmluZSBIQVZFX0xJQlogMSIpKQogeworCWNvbW1hbmRfZmFpbHNfbGlrZSgK KwkJWyAncGdfZHVtcCcsICctWicsICcxNScgXSwKKwkJcXIvXFFwZ19kdW1wOiBlcnJvcjogaW52 YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBjb21wcmVzc2lvbiBhbGdvcml0aG0gImd6 aXAiIGV4cGVjdHMgYSBjb21wcmVzc2lvbiBsZXZlbCBiZXR3ZWVuIDEgYW5kIDkgKGRlZmF1bHQg YXQgLTEpXEUvLAorCQkncGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9u OiBtdXN0IGJlIGluIHJhbmdlJyk7CisKIAljb21tYW5kX2ZhaWxzX2xpa2UoCiAJCVsgJ3BnX2R1 bXAnLCAnLS1jb21wcmVzcycsICcxJywgJy0tZm9ybWF0JywgJ3RhcicgXSwKIAkJcXIvXFFwZ19k dW1wOiBlcnJvcjogY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0YXIgYXJjaGl2ZSBm b3JtYXRcRS8sCiAJCSdwZ19kdW1wOiBjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRh ciBhcmNoaXZlIGZvcm1hdCcpOworCisJY29tbWFuZF9mYWlsc19saWtlKAorCQlbICdwZ19kdW1w JywgJy1aJywgJ2d6aXA6bm9uSW50JyBdLAorCQlxci9cUXBnX2R1bXA6IGVycm9yOiBpbnZhbGlk IGNvbXByZXNzaW9uIHNwZWNpZmljYXRpb246IHVucmVjb2duaXplZCBjb21wcmVzc2lvbiBvcHRp b246ICJub25JbnQiXEUvLAorCQkncGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZp Y2F0aW9uOiBtdXN0IGJlIGFuIGludGVnZXInKTsKIH0KIGVsc2UKIHsKQEAgLTEzOSw2ICsxNTUs MTEgQEAgZWxzZQogCQlbICdwZ19kdW1wJywgJy0tY29tcHJlc3MnLCAnMScsICctLWZvcm1hdCcs ICd0YXInLCAnLWozJyBdLAogCQlxci9cUXBnX2R1bXA6IHdhcm5pbmc6IHJlcXVlc3RlZCBjb21w cmVzc2lvbiBub3QgYXZhaWxhYmxlIGluIHRoaXMgaW5zdGFsbGF0aW9uIC0tIGFyY2hpdmUgd2ls bCBiZSB1bmNvbXByZXNzZWRcRS8sCiAJCSdwZ19kdW1wOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBu b3QgYXZhaWxhYmxlIGluIHRoaXMgaW5zdGFsbGF0aW9uJyk7CisKKwljb21tYW5kX2ZhaWxzX2xp a2UoCisJCVsgJ3BnX2R1bXAnLCAnLVonLCAnZ3ppcDpub25JbnQnLCAnLS1mb3JtYXQnLCAndGFy JywgJy1qMicgXSwKKwkJcXIvXFFwZ19kdW1wOiB3YXJuaW5nOiByZXF1ZXN0ZWQgY29tcHJlc3Np b24gbm90IGF2YWlsYWJsZSBpbiB0aGlzIGluc3RhbGxhdGlvbiAtLSBhcmNoaXZlIHdpbGwgYmUg dW5jb21wcmVzc2VkXEUvLAorCQkncGdfZHVtcDogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZp Y2F0aW9uOiBtdXN0IGJlIGFuIGludGVnZXInKTsKIH0KIAogY29tbWFuZF9mYWlsc19saWtlKApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCBmZTUzZWQwZjg5Li5kNjA0NTU4ZjAzIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtODcsNyArODcsNyBAQCBteSAlcGdkdW1wX3J1bnMg PSAoCiAJCWNvbXBpbGVfb3B0aW9uID0+ICdnemlwJywKIAkJZHVtcF9jbWQgICAgICAgPT4gWwog CQkJJ3BnX2R1bXAnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWpvYnM9MicsCi0J CQknLS1mb3JtYXQ9ZGlyZWN0b3J5JywgICAgICAgICAgICAgICAgICAgJy0tY29tcHJlc3M9MScs CisJCQknLS1mb3JtYXQ9ZGlyZWN0b3J5JywgICAgICAgICAgICAgICAgICAgJy0tY29tcHJlc3M9 Z3ppcDoxJywKIAkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9kaXIiLCAncG9z dGdyZXMnLAogCQldLAogCQkjIEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQg YmxvYi50b2MgZmlsZXMgZHVyaW5nCi0tIAoyLjM0LjEKCg== --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc Content-Type: text/x-patch; name=v10-0003-Introduce-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v10-0003-Introduce-Compressor-API-in-pg_dump.patch RnJvbSA4Mjg1NDEyNDgxNTM5YmI2NjQ5NjE2YjI0ZGY1MTkxYTk0MjNmM2MxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjkgTm92IDIwMjIgMTE6MjI6NDggKzAwMDAKU3ViamVjdDogW1BBVENIIHYx MCAzLzRdIEludHJvZHVjZSBDb21wcmVzc29yIEFQSSBpbiBwZ19kdW1wCgpUaGUgcHVycG9zZSBv ZiB0aGlzIEFQSSBpcyB0byBhbGxvdyBmb3IgZWFzaWVyIGFkZGl0aW9uIG9mIG5ldyBjb21wcmVz c2lvbgptZXRob2RzLiBDb21wcmVzc0ZpbGVIYW5kbGUgaXMgc3Vic3RpdHV0aW5nIHRoZSBjZnAq IGZhbWlseSBvZiBmdW5jdGlvbnMgdW5kZXIgYQpzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMg Zm9yIG9wZW5pbmcsIHdyaXRpbmcsIGV0Yy4gVGhlIGltcGxlbWVudG9yIG9mIGEgbmV3CmNvbXBy ZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0aG9zZSBkZWZp bml0aW9ucy4KCkN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVzIG5lZWQgdG8gbm93IHN0b3JlIHRo ZSBjb21wcmVzc2lvbiBtZXRob2QgaW4gdGhlaXIKaGVhZGVyLiBUaGlzIHJlcXVpcmVzIGEgYnVt cCBpbiB0aGUgdmVyc2lvbiBudW1iZXIuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgppcyBubyBs b25nZXIgc3RvcmVkIGluIHRoZSBkdW1wIGFzIGl0IGlzIGlycmVsZXZhbnQuCi0tLQogc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jICAgICAgIHwgMzkwICsrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2d6aXAuaCAgICAgICB8ICAgOSArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyAgICAgICAgIHwgODE3ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uaCAgICAgICAgIHwgIDY5ICsrLQogc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgIHwgIDkzICstLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o ICB8ICAgNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAgICB8ICAyMyAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA4NSArLS0KIDEwIGZp bGVzIGNoYW5nZWQsIDc2NSBpbnNlcnRpb25zKCspLCA3MjcgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggOWRj NWE3ODRkZC4uMjllYWIwMmQzNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxl CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBMREZMQUdT X0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscyAk KGxpYnBxX3BncG9ydCkKIAogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCisJY29tcHJlc3NfZ3pp cC5vIFwKIAljb21wcmVzc19pby5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5iYzZkMWFiYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2d6aXAuYwpAQCAtMCwwICsxLDM5MCBAQAorI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5j bHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpbmNsdWRlICJjb21wcmVzc19nemlwLmgiCisK KyNpZmRlZiBIQVZFX0xJQloKKyNpbmNsdWRlICJ6bGliLmgiCisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgR3ppcENvbXByZXNzb3JTdGF0ZQoreworCWludAkJCWNvbXByZXNzaW9u TGV2ZWw7CisJel9zdHJlYW1wCXpwOworCisJdm9pZAkgICAqb3V0YnVmOworCXNpemVfdAkJb3V0 c2l6ZTsKK30JCQlHemlwQ29tcHJlc3NvclN0YXRlOworCisvKiBQcml2YXRlIHJvdXRpbmVzIHRo YXQgc3VwcG9ydCBnemlwIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkCitEZWZs YXRlQ29tcHJlc3Nvckd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Ms IGJvb2wgZmx1c2gpCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21w cmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGU7CisJel9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsK Kwl2b2lkCSAgICpvdXQgPSBnemlwY3MtPm91dGJ1ZjsKKwlpbnQJCQlyZXMgPSBaX09LOworCisJ d2hpbGUgKGd6aXBjcy0+enAtPmF2YWlsX2luICE9IDAgfHwgZmx1c2gpCisJeworCQlyZXMgPSBk ZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDogWl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0g Wl9TVFJFQU1fRVJST1IpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVz IiwgenAtPm1zZyk7CisJCWlmICgoZmx1c2ggJiYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91 dHNpemUpKQorCQkJfHwgKHpwLT5hdmFpbF9vdXQgPT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4g IT0gMCkKKwkJCSkKKwkJeworCQkJLyoKKwkJCSAqIEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJv LWxlbmd0aCBjaHVua3MsIHNpbmNlIGEgemVybyBsZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBF T0YgbWFya2VyIGluIHRoZSBjdXN0b20gZm9ybWF0LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICog aGFwcGVuIGJ1dC4uLgorCQkJICovCisJCQlpZiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0 c2l6ZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFueSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8g aXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8KKwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBj aGVjayBoZXJlIGFzIHdlbGwuLi4KKwkJCQkgKi8KKwkJCQlzaXplX3QJCWxlbiA9IGd6aXBjcy0+ b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisKKwkJCQljcy0+d3JpdGVGKEFILCAoY2hhciAqKSBv dXQsIGxlbik7CisJCQl9CisJCQl6cC0+bmV4dF9vdXQgPSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0 ID0gZ3ppcGNzLT5vdXRzaXplOworCQl9CisKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCisJ CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29yR3ppcChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRl ICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZTsKKwl6X3N0cmVh bXAJenA7CisKKwlpZiAoZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cDsKKwkJenAt Pm5leHRfaW4gPSBOVUxMOworCQl6cC0+YXZhaWxfaW4gPSAwOworCisJCS8qIEZsdXNoIGFueSBy ZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCisJCURlZmxhdGVDb21wcmVzc29yR3pp cChBSCwgY3MsIHRydWUpOworCisJCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1zZyk7 CisKKwkJcGdfZnJlZShnemlwY3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoZ3ppcGNzLT56cCk7CisJ fQorCisJcGdfZnJlZShnemlwY3MpOworCWNzLT5wcml2YXRlID0gTlVMTDsKK30KKworc3RhdGlj IHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MsCisJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQorewor CUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNz LT5wcml2YXRlOworCXpfc3RyZWFtcAl6cDsKKworCWlmICghZ3ppcGNzLT56cCkKKwl7CisJCXpw ID0gZ3ppcGNzLT56cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsK KwkJenAtPnphbGxvYyA9IFpfTlVMTDsKKwkJenAtPnpmcmVlID0gWl9OVUxMOworCQl6cC0+b3Bh cXVlID0gWl9OVUxMOworCisJCS8qCisJCSAqIG91dHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdl IHRlbGwgemxpYiBpdCBjYW4gb3V0cHV0IHRvLiAgV2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUg b25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5k IGEgdHJhaWxpbmcgemVybyBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBj cy0+b3V0YnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRz aXplID0gWkxJQl9PVVRfU0laRTsKKworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGd6aXBjcy0+Y29t cHJlc3Npb25MZXZlbCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6 ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJCS8qIEp1c3QgYmUgcGFy YW5vaWQgLSBtYXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRlICov CisJCXpwLT5uZXh0X291dCA9IGd6aXBjcy0+b3V0YnVmOworCQl6cC0+YXZhaWxfb3V0ID0gZ3pp cGNzLT5vdXRzaXplOworCX0KKworCWd6aXBjcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNv bnN0aWZ5KHZvaWQgKiwgZGF0YSk7CisJZ3ppcGNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOworCURl ZmxhdGVDb21wcmVzc29yR3ppcChBSCwgY3MsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQKK1Jl YWREYXRhRnJvbUFyY2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQoreworCXpfc3RyZWFtcAl6cDsKKwljaGFyCSAgICpvdXQ7CisJaW50CQkJcmVzID0gWl9P SzsKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwl6 cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwl6cC0+emFsbG9j ID0gWl9OVUxMOworCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwl6cC0+b3BhcXVlID0gWl9OVUxMOwor CisJYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7CisJYnVmbGVuID0gWkxJQl9JTl9TSVpF OworCisJb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKworCWlmIChpbmZsYXRl SW5pdCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXBy ZXNzaW9uIGxpYnJhcnk6ICVzIiwKKwkJCQkgenAtPm1zZyk7CisKKwkvKiBubyBtaW5pbWFsIGNo dW5rIHNpemUgZm9yIHpsaWIgKi8KKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1Ziwg JmJ1ZmxlbikpKQorCXsKKwkJenAtPm5leHRfaW4gPSAodm9pZCAqKSBidWY7CisJCXpwLT5hdmFp bF9pbiA9IGNudDsKKworCQl3aGlsZSAoenAtPmF2YWlsX2luID4gMCkKKwkJeworCQkJenAtPm5l eHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7 CisKKwkJCXJlcyA9IGluZmxhdGUoenAsIDApOworCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAh PSBaX1NUUkVBTV9FTkQpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6 ICVzIiwgenAtPm1zZyk7CisKKwkJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0g PSAnXDAnOworCQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0 LCBBSCk7CisJCX0KKwl9CisKKwl6cC0+bmV4dF9pbiA9IE5VTEw7CisJenAtPmF2YWlsX2luID0g MDsKKwl3aGlsZSAocmVzICE9IFpfU1RSRUFNX0VORCkKKwl7CisJCXpwLT5uZXh0X291dCA9ICh2 b2lkICopIG91dDsKKwkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7CisJCXJlcyA9IGlu ZmxhdGUoenAsIDApOworCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwor CisJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOworCQlhaHdyaXRl KG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwl9CisKKwlpZiAo aW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21w cmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJZnJlZShidWYpOworCWZyZWUob3V0 KTsKKwlmcmVlKHpwKTsKK30KKworLyogUHVibGljIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBnemlw IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yR3ppcChDb21wcmVz c29yU3RhdGUgKmNzLCBpbnQgY29tcHJlc3Npb25MZXZlbCkKK3sKKwlHemlwQ29tcHJlc3NvclN0 YXRlICpnemlwY3M7CisKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlR3ppcDsK Kwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlR3ppcDsKKwljcy0+ZW5kID0gRW5k Q29tcHJlc3Nvckd6aXA7CisKKwlnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBwZ19t YWxsb2MwKHNpemVvZihHemlwQ29tcHJlc3NvclN0YXRlKSk7CisJZ3ppcGNzLT5jb21wcmVzc2lv bkxldmVsID0gY29tcHJlc3Npb25MZXZlbDsKKworCWNzLT5wcml2YXRlID0gZ3ppcGNzOworfQor CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3MgRmlsZSBBUEkKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgc3RydWN0IEd6aXBEYXRhCit7CisJ Z3pGaWxlCQlmcDsKKwlpbnQJCQljb21wcmVzc2lvbkxldmVsOworfQkJCUd6aXBEYXRhOworCitz dGF0aWMgc2l6ZV90CitHemlwX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBEYXRhICopIENGSC0+ cHJpdmF0ZTsKKwlzaXplX3QJCXJldDsKKworCXJldCA9IGd6cmVhZChnZC0+ZnAsIHB0ciwgc2l6 ZSk7CisJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihnZC0+ZnApKQorCXsKKwkJaW50CQkJZXJy bnVtOworCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGdkLT5mcCwgJmVycm51bSk7CisK KwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCSBl cnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdAorR3ppcF93cml0ZShjb25zdCB2b2lkICpwdHIs IHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJR3ppcERhdGEgICAq Z2QgPSAoR3ppcERhdGEgKikgQ0ZILT5wcml2YXRlOworCisJcmV0dXJuIGd6d3JpdGUoZ2QtPmZw LCBwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50CitHemlwX2dldGMoQ29tcHJlc3NGaWxlSGFu ZGxlICogQ0ZIKQoreworCUd6aXBEYXRhICAgKmdkID0gKEd6aXBEYXRhICopIENGSC0+cHJpdmF0 ZTsKKwlpbnQJCQlyZXQ7CisKKwllcnJubyA9IDA7CisJcmV0ID0gZ3pnZXRjKGdkLT5mcCk7CisJ aWYgKHJldCA9PSBFT0YpCisJeworCQlpZiAoIWd6ZW9mKGdkLT5mcCkpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJ CWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBv ZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKgorR3ppcF9n ZXRzKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlH emlwRGF0YSAgICpnZCA9IChHemlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisKKwlyZXR1cm4gZ3pn ZXRzKGdkLT5mcCwgcHRyLCBzaXplKTsKK30KKworc3RhdGljIGludAorR3ppcF9jbG9zZShDb21w cmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJR3ppcERhdGEgICAqZ2QgPSAoR3ppcERhdGEgKikg Q0ZILT5wcml2YXRlOworCWludAkJCXNhdmVfZXJybm87CisJaW50CQkJcmV0OworCisJQ0ZILT5w cml2YXRlID0gTlVMTDsKKworCXJldCA9IGd6Y2xvc2UoZ2QtPmZwKTsKKworCXNhdmVfZXJybm8g PSBlcnJubzsKKwlmcmVlKGdkKTsKKwllcnJubyA9IHNhdmVfZXJybm87CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50CitHemlwX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7 CisJR3ppcERhdGEgICAqZ2QgPSAoR3ppcERhdGEgKikgQ0ZILT5wcml2YXRlOworCisJcmV0dXJu IGd6ZW9mKGdkLT5mcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0d6aXBfZ2V0X2Vycm9y KENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpnZCA9IChHemlwRGF0 YSAqKSBDRkgtPnByaXZhdGU7CisJY29uc3QgY2hhciAqZXJybXNnOworCWludAkJCWVycm51bTsK KworCWVycm1zZyA9IGd6ZXJyb3IoZ2QtPmZwLCAmZXJybnVtKTsKKwlpZiAoZXJybnVtID09IFpf RVJSTk8pCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBlcnJtc2c7Cit9 CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0 IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKK3sKKwlHemlwRGF0YSAgICpn ZCA9IChHemlwRGF0YSAqKSBDRkgtPnByaXZhdGU7CisJY2hhcgkJbW9kZV9jb21wcmVzc2lvblsz Ml07CisKKwlpZiAoZ2QtPmNvbXByZXNzaW9uTGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9O KQorCXsKKwkJLyoKKwkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWws IHNvIHRlbGwgemxpYiB0byB1c2UgaXQKKwkJICovCisJCXNucHJpbnRmKG1vZGVfY29tcHJlc3Np b24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAorCQkJCSBtb2RlLCBnZC0+Y29t cHJlc3Npb25MZXZlbCk7CisJfQorCWVsc2UKKwkJc3RyY3B5KG1vZGVfY29tcHJlc3Npb24sIG1v ZGUpOworCisJaWYgKGZkID49IDApCisJCWdkLT5mcCA9IGd6ZG9wZW4oZHVwKGZkKSwgbW9kZV9j b21wcmVzc2lvbik7CisJZWxzZQorCQlnZC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVz c2lvbik7CisKKwlpZiAoZ2QtPmZwID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCit7CisJY2hhcgkgICAqZm5h bWU7CisJaW50CQkJcmV0OworCWludAkJCXNhdmVfZXJybm87CisKKwlmbmFtZSA9IHBzcHJpbnRm KCIlcy5neiIsIHBhdGgpOworCXJldCA9IENGSC0+b3BlbihmbmFtZSwgLTEsIG1vZGUsIENGSCk7 CisKKwlzYXZlX2Vycm5vID0gZXJybm87CisJcGdfZnJlZShmbmFtZSk7CisJZXJybm8gPSBzYXZl X2Vycm5vOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAorSW5pdENvbXByZXNzR3ppcChDb21w cmVzc0ZpbGVIYW5kbGUgKiBDRkgsIGludCBjb21wcmVzc2lvbkxldmVsKQoreworCUd6aXBEYXRh ICAgKmdkOworCisJQ0ZILT5vcGVuID0gR3ppcF9vcGVuOworCUNGSC0+b3Blbl93cml0ZSA9IEd6 aXBfb3Blbl93cml0ZTsKKwlDRkgtPnJlYWQgPSBHemlwX3JlYWQ7CisJQ0ZILT53cml0ZSA9IEd6 aXBfd3JpdGU7CisJQ0ZILT5nZXRzID0gR3ppcF9nZXRzOworCUNGSC0+Z2V0YyA9IEd6aXBfZ2V0 YzsKKwlDRkgtPmNsb3NlID0gR3ppcF9jbG9zZTsKKwlDRkgtPmVvZiA9IEd6aXBfZW9mOworCUNG SC0+Z2V0X2Vycm9yID0gR3ppcF9nZXRfZXJyb3I7CisKKwlnZCA9IHBnX21hbGxvYzAoc2l6ZW9m KEd6aXBEYXRhKSk7CisJZ2QtPmNvbXByZXNzaW9uTGV2ZWwgPSBjb21wcmVzc2lvbkxldmVsOwor CisJQ0ZILT5wcml2YXRlID0gZ2Q7Cit9CisjZWxzZQkJCQkJCQkvKiBIQVZFX0xJQlogKi8KK3Zv aWQKK0luaXRDb21wcmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgY29tcHJlc3Np b25MZXZlbCkKK3sKKwlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Cit9 CisKK3ZvaWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZILCBpbnQg Y29tcHJlc3Npb25MZXZlbCkKK3sKKwlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBw b3J0Iik7Cit9CisjZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6 aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hYjAzNjJjMWYzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaApAQCAtMCww ICsxLDkgQEAKKyNpZm5kZWYgX0NPTVBSRVNTX0daSVBfSF8KKyNkZWZpbmUgX0NPTVBSRVNTX0da SVBfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21w cmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgY29tcHJlc3Npb25MZXZlbCk7Citl eHRlcm4gdm9pZCBJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCwgaW50 IGNvbXByZXNzaW9uTGV2ZWwpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0daSVBfSF8g Ki8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggNGE4ZmMxZTMwNi4uMzA2NWJkNzZmYSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmMKQEAgLTUxLDkgKzUxLDEyIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1 ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUg ImNvbXByZXNzX2d6aXAuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAogI2lmZGVm IEhBVkVfTElCWgpAQCAtNjUsMTEzICs2OCw3MyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KIAotLyogdHlwZWRlZiBhcHBlYXJzIGluIGNvbXByZXNzX2lvLmggKi8KLXN0cnVjdCBD b21wcmVzc29yU3RhdGUKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IHVuY29tcHJl c3NlZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogewotCXBnX2NvbXByZXNzX2Fs Z29yaXRobSBjb21wcmVzc19hbGdvcml0aG07Ci0JV3JpdGVGdW5jCXdyaXRlRjsKKwlzaXplX3QJ CWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CiAKLSNpZmRlZiBIQVZFX0xJ QloKLQl6X3N0cmVhbXAJenA7Ci0JY2hhcgkgICAqemxpYk91dDsKLQlzaXplX3QJCXpsaWJPdXRT aXplOwotI2VuZGlmCi19OworCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKKwlidWZs ZW4gPSBaTElCX09VVF9TSVpFOwogCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgemxpYiBjb21w cmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgdm9pZCBJbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsKLXN0YXRpYyB2b2lk IERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFy Y2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1zdGF0aWMgdm9p ZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7Ci1zdGF0 aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcyk7Ci0jZW5kaWYKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1 ZmxlbikpKQorCXsKKwkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOworCX0KIAotLyogUm91dGlu ZXMgdGhhdCBzdXBwb3J0IHVuY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVh ZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsK LXN0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBk TGVuKTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVO b25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVu KTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8qIG5vIG9wICovCit9CisKK3N0YXRpYyB2b2lk CitJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwljcy0+cmVhZERh dGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTm9uZTsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRh VG9BcmNoaXZlTm9uZTsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3Nvck5vbmU7Cit9CiAKIC8qIFB1 YmxpYyBpbnRlcmZhY2Ugcm91dGluZXMgKi8KIAogLyogQWxsb2NhdGUgYSBuZXcgY29tcHJlc3Nv ciAqLwogQ29tcHJlc3NvclN0YXRlICoKIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCi0JCQkJICAgV3JpdGVGdW5jIHdyaXRl RikKKwkJCQkgICBSZWFkRnVuYyByZWFkRiwgV3JpdGVGdW5jIHdyaXRlRikKIHsKIAlDb21wcmVz c29yU3RhdGUgKmNzOwogCi0jaWZuZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc19zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdp dGggemxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKLQogCWNzID0gKENvbXByZXNzb3JTdGF0ZSAqKSBw Z19tYWxsb2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKKwljcy0+cmVhZEYgPSByZWFkRjsK IAljcy0+d3JpdGVGID0gd3JpdGVGOwotCWNzLT5jb21wcmVzc19hbGdvcml0aG0gPSBjb21wcmVz c19zcGVjLmFsZ29yaXRobTsKLQotCS8qCi0JICogUGVyZm9ybSBjb21wcmVzc2lvbiBhbGdvcml0 aG0gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0JICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGNzLT5jb21wcmVzc19hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJSW5pdENv bXByZXNzb3JabGliKGNzLCBjb21wcmVzc19zcGVjLmxldmVsKTsKLSNlbmRpZgogCi0JcmV0dXJu IGNzOwotfQotCi0vKgotICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0 IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKLSAqIG91dCB3aXRoIGFod3JpdGUoKS4K LSAqLwotdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjLAotCQkJCQlSZWFkRnVuYyByZWFkRikK LXsKIAlzd2l0Y2ggKGNvbXByZXNzX3NwZWMuYWxnb3JpdGhtKQogCXsKIAkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgotCQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKKwkJ CUluaXRDb21wcmVzc29yTm9uZShjcyk7CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lP Tl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgs IHJlYWRGKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0 Iik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc29yR3ppcChjcywgY29tcHJlc3Nfc3BlYy5sZXZl bCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNz aW9uIG1ldGhvZCIpOwogCQkJYnJlYWs7CiAJfQotfQogCi0vKgotICogQ29tcHJlc3MgYW5kIHdy aXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgotICovCi12b2lkCi1X cml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Ms Ci0JCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0Jc3dpdGNoIChjcy0+ Y29tcHJlc3NfYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lm ZGVmIEhBVkVfTElCWgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRM ZW4pOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsK LSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCVdyaXRl RGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLQkJCWJyZWFrOwotCQlkZWZh dWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVh azsKLQl9CisJcmV0dXJuIGNzOwogfQogCiAvKgpAQCAtMTgwLDI0MyArMTQzLDI4IEBAIFdyaXRl RGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZv aWQKIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Mp CiB7Ci0Jc3dpdGNoIChjcy0+Y29tcHJlc3NfYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJRW5kQ29tcHJlc3NvclpsaWIoQUgs IGNzKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7 Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlmcmVl KGNzKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21w cmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwotCX0KLX0KLQotLyogUHJpdmF0ZSByb3V0aW5l cywgc3BlY2lmaWMgdG8gZWFjaCBjb21wcmVzc2lvbiBtZXRob2QuICovCi0KLSNpZmRlZiBIQVZF X0xJQloKLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHpsaWIgY29tcHJlc3NlZCBvdXRwdXQuCi0gKi8K LQotc3RhdGljIHZvaWQKLUluaXRDb21wcmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBp bnQgbGV2ZWwpCi17Ci0Jel9zdHJlYW1wCXpwOwotCi0JenAgPSBjcy0+enAgPSAoel9zdHJlYW1w KSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6 cC0+emZyZWUgPSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCS8qCi0JICogemxp Yk91dFNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBjYW4gb3V0cHV0IHRv LiAgV2UKLQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUgZXh0cmEgYnl0ZSBiZWNhdXNlIHNvbWUg cm91dGluZXMgd2FudCB0byBhcHBlbmQgYQotCSAqIHRyYWlsaW5nIHplcm8gYnl0ZSB0byB0aGUg emxpYiBvdXRwdXQuCi0JICovCi0JY3MtPnpsaWJPdXQgPSAoY2hhciAqKSBwZ19tYWxsb2MoWkxJ Ql9PVVRfU0laRSArIDEpOwotCWNzLT56bGliT3V0U2l6ZSA9IFpMSUJfT1VUX1NJWkU7Ci0KLQlp ZiAoZGVmbGF0ZUluaXQoenAsIGxldmVsKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQgbm90 IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLAotCQkJCSB6cC0+bXNnKTsKLQot CS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBtYXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3 aXRoIG5vIFdyaXRlICovCi0JenAtPm5leHRfb3V0ID0gKHZvaWQgKikgY3MtPnpsaWJPdXQ7Ci0J enAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0U2l6ZTsKLX0KLQotc3RhdGljIHZvaWQKLUVuZENv bXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQotewot CXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQotCXpwLT5uZXh0X2luID0gTlVMTDsKLQl6cC0+YXZh aWxfaW4gPSAwOwotCi0JLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxpYiBidWZm ZXIgKi8KLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCB0cnVlKTsKLQotCWlmIChkZWZs YXRlRW5kKHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNz aW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUoY3MtPnpsaWJPdXQpOwotCWZyZWUo Y3MtPnpwKTsKKwljcy0+ZW5kKEFILCBjcyk7CisJcGdfZnJlZShjcyk7CiB9CiAKLXN0YXRpYyB2 b2lkCi1EZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsIGJvb2wgZmx1c2gpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNoYXIJ ICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAoY3Mt PnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwgZmx1 c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VSUk9S KQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwot CQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJCXx8 ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkpCi0J CXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1bmtz LCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBpbiB0 aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQuLi4K LQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7Ci0J CQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJyb3Ig Y2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBhcyB3 ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6cC0+ YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJenAt Pm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0 U2l6ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0JfQot fQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90 IGRMZW4pCi17Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeShjaGFyICos IGRhdGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21wcmVzc29yWmxp YihBSCwgY3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVa bGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQl6X3N0cmVhbXAJenA7 Ci0JY2hhcgkgICAqb3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JenAgPSAoel9zdHJlYW1wKSBwZ19tYWxs b2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUg PSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElC X0lOX1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKLQotCW91dCA9IHBnX21hbGxvYyha TElCX09VVF9TSVpFICsgMSk7Ci0KLQlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCi0JCXBn X2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0J CQkJIHpwLT5tc2cpOwotCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICovCi0J d2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJenAtPm5leHRf aW4gPSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsKLQotCQl3aGlsZSAoenAt PmF2YWlsX2luID4gMCkKLQkJewotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJ enAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0KLQkJCXJlcyA9IGluZmxhdGUoenAsIDAp OwotCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJCW91dFta TElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQsIDEs IFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9Ci0KLQl6cC0+bmV4 dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpfU1RSRUFN X0VORCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWlsX291 dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVzICE9 IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5j b21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0genAt PmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpw LT5hdmFpbF9vdXQsIEFIKTsKLQl9Ci0KLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5t c2cpOwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKLX0KLSNlbmRpZgkJ CQkJCQkvKiBIQVZFX0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXByZXNz ZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VU X1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7Ci0KLQl3aGlsZSAoKGNudCA9IHJlYWRG KEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7Ci0J fQotCi0JZnJlZShidWYpOwotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3Qg Y2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7 Ci19Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBB UEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qCi0gKiBjZnAgcmVwcmVzZW50 cyBhbiBvcGVuIHN0cmVhbSwgd3JhcHBpbmcgdGhlIHVuZGVybHlpbmcgRklMRSBvciBnekZpbGUK LSAqIHBvaW50ZXIuIFRoaXMgaXMgb3BhcXVlIHRvIHRoZSBjYWxsZXJzLgotICovCi1zdHJ1Y3Qg Y2ZwCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNo YXIgKnN1ZmZpeCkKIHsKLQlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3NfYWxnb3JpdGht OwotCXZvaWQJICAgKmZwOwotfTsKKwlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFt ZSk7CisJaW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CiAKLSNpZmRlZiBIQVZFX0xJ QloKLXN0YXRpYyBpbnQJaGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFy ICpzdWZmaXgpOwotI2VuZGlmCisJaWYgKGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQorCQlyZXR1 cm4gMDsKKworCXJldHVybiBtZW1jbXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0gc3VmZml4bGVu XSwKKwkJCQkgIHN1ZmZpeCwKKwkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKK30KIAogLyogZnJlZSgp IHdpdGhvdXQgY2hhbmdpbmcgZXJybm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAq Lwogc3RhdGljIHZvaWQKQEAgLTQyOSwzOTIgKzE3NywyMTkgQEAgZnJlZV9rZWVwX2Vycm5vKHZv aWQgKnApCiB9CiAKIC8qCi0gKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRo ZSBmaWxlIHRvIG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJy YiIuCi0gKgotICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBl bmQgdGhlICIuZ3oiIHN1ZmZpeCAoaWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBp dCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhp cyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUs IHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIENvbXByZXNzaW9u IE5vbmUgaW1wbGVtZW50YXRpb24KICAqLwotY2ZwICoKLWNmb3Blbl9yZWFkKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitzdGF0aWMgc2l6ZV90CitfcmVhZCh2b2lkICpwdHIs IHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7Ci0JY2ZwCQkgICAqZnA7 Ci0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9OworCUZJTEUJ ICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlOworCXNpemVfdAkJcmV0OwogCi0JY29tcHJl c3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotI2lmZGVmIEhBVkVfTElC WgotCWlmIChoYXNTdWZmaXgocGF0aCwgIi5neiIpKQotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2Rl LCBjb21wcmVzc19zcGVjKTsKLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwg Y29tcHJlc3Nfc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9PSBOVUxMKQotCQl7 Ci0JCQljaGFyCSAgICpmbmFtZTsKLQotCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19D T01QUkVTU0lPTl9HWklQOwotCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJ CWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKLQkJCWZyZWVfa2VlcF9l cnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4gZnA7Ci19CisJaWYgKHNpemUg PT0gMCkKKwkJcmV0dXJuIDA7CiAKLS8qCi0gKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4gJ3Bh dGgnIGluZGljYXRlcyB0aGUgcGF0aCBuYW1lLCBhbmQgJ21vZGUnIG11c3QKLSAqIGJlIGEgZmls ZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMg d3JpdGluZwotICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KLSAqCi0gKiBJZiAnY29tcHJl c3Nfc3BlYy5hbGdvcml0aG0nIGlzIEdaSVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBv cGVuZWQsCi0gKiBhbmQgJ2NvbXByZXNzX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZm aXggaXMgYXV0b21hdGljYWxseSBhZGRlZCB0bwotICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KLSAq Ci0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8u Ci0gKi8KLWNmcCAqCi1jZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKLQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMp Ci17Ci0JY2ZwCQkgICAqZnA7CisJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcCk7CisJaWYg KHJldCAhPSBzaXplICYmICFmZW9mKGZwKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZy b20gaW5wdXQgZmlsZTogJXMiLAorCQkJCSBzdHJlcnJvcihlcnJubykpOwogCi0JaWYgKGNvbXBy ZXNzX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCWZwID0gY2ZvcGVu KHBhdGgsIG1vZGUsIGNvbXByZXNzX3NwZWMpOwotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJa Ci0JCWNoYXIJICAgKmZuYW1lOwotCi0JCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7 Ci0JCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc19zcGVjKTsKLQkJZnJlZV9rZWVw X2Vycm5vKGZuYW1lKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGliIHN1 cHBvcnQiKTsKLQkJZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0jZW5k aWYKLQl9Ci0JcmV0dXJuIGZwOworCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBUaGlzIGlzIHRo ZSB3b3JraG9yc2UgZm9yIGNmb3BlbigpIG9yIGNmZG9wZW4oKS4gSXQgb3BlbnMgZmlsZSAncGF0 aCcgb3IKLSAqIGFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRl c2NyaXB0b3IsIGluICdtb2RlJy4gVGhlCi0gKiBkZXNjcmlwdG9yIGlzIG5vdCBkdXAnZWQgYW5k IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBkbyBzby4KLSAqIFRoZSBjYWxs ZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgJ2NvbXByZXNzX2FsZ29yaXRobScgaXMgc3VwcG9ydGVk IGJ5IHRoZQotICogY3VycmVudCBidWlsZC4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVM TCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8KLXN0YXRpYyBjZnAgKgotY2ZvcGVu X2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJ CQlwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3NfYWxnb3JpdGhtLCBpbnQgY29tcHJlc3Np b25MZXZlbCkKK3N0YXRpYyBzaXplX3QKK193cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBz aXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKiBDRkgpCiB7Ci0JY2ZwCQkgICAqZnAgPSBwZ19tYWxs b2Moc2l6ZW9mKGNmcCkpOwotCi0JZnAtPmNvbXByZXNzX2FsZ29yaXRobSA9IGNvbXByZXNzX2Fs Z29yaXRobTsKLQotCXN3aXRjaCAoY29tcHJlc3NfYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9OT05FOgotCQkJaWYgKGZkID49IDApCi0JCQkJZnAtPmZwID0gZmRvcGVuKGZk LCBtb2RlKTsKLQkJCWVsc2UKLQkJCQlmcC0+ZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKLQkJCWlm IChmcC0+ZnAgPT0gTlVMTCkKLQkJCXsKLQkJCQlmcmVlX2tlZXBfZXJybm8oZnApOwotCQkJCWZw ID0gTlVMTDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoK LSNpZmRlZiBIQVZFX0xJQloKLQkJCWlmIChjb21wcmVzc2lvbkxldmVsICE9IFpfREVGQVVMVF9D T01QUkVTU0lPTikKLQkJCXsKLQkJCQkvKgotCQkJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNv bXByZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlCi0JCQkJICogaXQKLQkJCQkgKi8K LQkJCQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKLQotCQkJCXNucHJpbnRmKG1vZGVfY29t cHJlc3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAotCQkJCQkJIG1vZGUs IGNvbXByZXNzaW9uTGV2ZWwpOwotCQkJCWlmIChmZCA+PSAwKQotCQkJCQlmcC0+ZnAgPSBnemRv cGVuKGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJCQllbHNlCi0JCQkJCWZwLT5mcCA9IGd6b3Bl bihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBk b24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJCQlp ZiAoZmQgPj0gMCkKLQkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZSk7Ci0JCQkJZWxzZQot CQkJCQlmcC0+ZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7Ci0JCQl9Ci0KLQkJCWlmIChmcC0+ZnAg PT0gTlVMTCkKLQkJCXsKLQkJCQlmcmVlX2tlZXBfZXJybm8oZnApOwotCQkJCWZwID0gTlVMTDsK LQkJCX0KLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7 Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGdfZmF0YWwoImludmFsaWQgY29t cHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZnA7CisJcmV0dXJu IGZ3cml0ZShwdHIsIDEsIHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZSk7CiB9CiAKLWNmcCAq Ci1jZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMpCitzdGF0aWMgY29uc3QgY2hh ciAqCitfZ2V0X2Vycm9yKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKIHsKLQlyZXR1cm4gY2Zv cGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2RlLAotCQkJCQkJICAgY29tcHJlc3Nfc3BlYy5hbGdv cml0aG0sCi0JCQkJCQkgICBjb21wcmVzc19zcGVjLmxldmVsKTsKKwlyZXR1cm4gc3RyZXJyb3Io ZXJybm8pOwogfQogCi1jZnAgKgotY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0J CWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYykKK3N0YXRpYyBj aGFyICoKK19nZXRzKGNoYXIgKnB0ciwgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENG SCkKIHsKLQlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLAotCQkJCQkJICAg Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0sCi0JCQkJCQkgICBjb21wcmVzc19zcGVjLmxldmVsKTsK KwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGUpOwogfQogCi1p bnQKLWNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKQorc3RhdGljIGludAorX2dl dGMoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQogeworCUZJTEUJICAgKmZwID0gKEZJTEUgKikg Q0ZILT5wcml2YXRlOwogCWludAkJCXJldDsKIAotCWlmIChzaXplID09IDApCi0JCXJldHVybiAw OwotCi0Jc3dpdGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQorCXJldCA9IGZnZXRjKGZwKTsK KwlpZiAocmV0ID09IEVPRikKIAl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJl dCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnAtPmZwKTsKLQkJCWlmIChyZXQgIT0gc2l6ZSAmJiAh ZmVvZihmcC0+ZnApKQotCQkJCVJFQURfRVJST1JfRVhJVChmcC0+ZnApOwotCi0JCQlicmVhazsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0g Z3pyZWFkKGZwLT5mcCwgcHRyLCBzaXplKTsKLQkJCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2Yo ZnAtPmZwKSkKLQkJCXsKLQkJCQlpbnQJCQllcnJudW07Ci0JCQkJY29uc3QgY2hhciAqZXJybXNn ID0gZ3plcnJvcihmcC0+ZnAsICZlcnJudW0pOwotCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3Ry ZXJyb3IoZXJybm8pIDogZXJybXNnKTsKLQkJCX0KLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1 aWx0IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6 Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwor CQlpZiAoIWZlb2YoZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOwogCX0KIAogCXJldHVybiBy ZXQ7CiB9CiAKLWludAotY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZw KQorc3RhdGljIGludAorX2Nsb3NlKENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKIHsKKwlGSUxF CSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZTsKIAlpbnQJCQlyZXQgPSAwOwogCi0Jc3dp dGNoIChmcC0+Y29tcHJlc3NfYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9O T05FOgotCQkJcmV0ID0gZndyaXRlKHB0ciwgMSwgc2l6ZSwgZnAtPmZwKTsKLQkJCWJyZWFrOwot CQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBn endyaXRlKGZwLT5mcCwgcHRyLCBzaXplKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0 IHdpdGggemxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJ cGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJ Q0ZILT5wcml2YXRlID0gTlVMTDsKKworCWlmIChmcCkKKwkJcmV0ID0gZmNsb3NlKGZwKTsKIAog CXJldHVybiByZXQ7CiB9CiAKLWludAotY2ZnZXRjKGNmcCAqZnApCitzdGF0aWMgaW50CitfZW9m KENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCkKIHsKLQlpbnQJCQlyZXQ7CisJcmV0dXJuIGZlb2Yo KEZJTEUgKikgQ0ZILT5wcml2YXRlKTsKK30KIAotCXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29y aXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRjKGZw LT5mcCk7Ci0JCQlpZiAocmV0ID09IEVPRikKLQkJCQlSRUFEX0VSUk9SX0VYSVQoZnAtPmZwKTsK K3N0YXRpYyBpbnQKK19vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAq bW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGUg PT0gTlVMTCk7CiAKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemdldGMoKGd6RmlsZSkgZnAtPmZwKTsKLQkJCWlmIChy ZXQgPT0gRU9GKQotCQkJewotCQkJCWlmICghZ3plb2YoZnAtPmZwKSkKLQkJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwot CQkJCWVsc2UKLQkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog ZW5kIG9mIGZpbGUiKTsKLQkJCX0KLSNlbHNlCi0JCQlwZ19mYXRhbCgibm90IGJ1aWx0IHdpdGgg emxpYiBzdXBwb3J0Iik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGdfZmF0 YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJaWYgKGZk ID49IDApCisJCUNGSC0+cHJpdmF0ZSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNlCisJ CUNGSC0+cHJpdmF0ZSA9IGZvcGVuKHBhdGgsIG1vZGUpOwogCi0JcmV0dXJuIHJldDsKKwlpZiAo Q0ZILT5wcml2YXRlID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKLWNo YXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQKK19v cGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmls ZUhhbmRsZSAqIENGSCkKIHsKLQljaGFyCSAgICpyZXQ7CisJQXNzZXJ0KENGSC0+cHJpdmF0ZSA9 PSBOVUxMKTsKIAotCXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSkKLQl7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcC0+ZnApOwor CUNGSC0+cHJpdmF0ZSA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChDRkgtPnByaXZhdGUgPT0g TlVMTCkKKwkJcmV0dXJuIDE7CiAKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0da SVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemdldHMoZnAtPmZwLCBidWYsIGxlbik7 Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBidWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2Vu ZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNz aW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7Ci0JfQorCXJldHVybiAwOworfQogCi0JcmV0dXJuIHJl dDsKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3NOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqIENG SCkKK3sKKwlDRkgtPm9wZW4gPSBfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGUgPSBfb3Blbl93cml0 ZTsKKwlDRkgtPnJlYWQgPSBfcmVhZDsKKwlDRkgtPndyaXRlID0gX3dyaXRlOworCUNGSC0+Z2V0 cyA9IF9nZXRzOworCUNGSC0+Z2V0YyA9IF9nZXRjOworCUNGSC0+Y2xvc2UgPSBfY2xvc2U7CisJ Q0ZILT5lb2YgPSBfZW9mOworCUNGSC0+Z2V0X2Vycm9yID0gX2dldF9lcnJvcjsKKworCUNGSC0+ cHJpdmF0ZSA9IE5VTEw7CiB9CiAKLWludAotY2ZjbG9zZShjZnAgKmZwKQorLyoKKyAqIFB1Ymxp YyBpbnRlcmZhY2UKKyAqLworQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRDb21wcmVzc0ZpbGVI YW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKQogewot CWludAkJCXJldDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAotCWlmIChmcCA9PSBOVUxM KQotCXsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJuIEVPRjsKLQl9CisJQ0ZIID0gcGdfbWFs bG9jMChzaXplb2YoQ29tcHJlc3NGaWxlSGFuZGxlKSk7CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVz c19hbGdvcml0aG0pCisJc3dpdGNoIChjb21wcmVzc19zcGVjLmFsZ29yaXRobSkKIAl7CiAJCWNh c2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZjbG9zZShmcC0+ZnApOwotCQkJZnAt PmZwID0gTlVMTDsKLQorCQkJSW5pdENvbXByZXNzTm9uZShDRkgpOwogCQkJYnJlYWs7CiAJCWNh c2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6Y2xv c2UoZnAtPmZwKTsKLQkJCWZwLT5mcCA9IE5VTEw7Ci0jZWxzZQotCQkJcGdfZmF0YWwoIm5vdCBi dWlsdCB3aXRoIHpsaWIgc3VwcG9ydCIpOwotI2VuZGlmCisJCQlJbml0Q29tcHJlc3NHemlwKENG SCwgY29tcHJlc3Nfc3BlYy5sZXZlbCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXBnX2Zh dGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwogCQkJYnJlYWs7CiAJfQogCi0JZnJl ZV9rZWVwX2Vycm5vKGZwKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIENGSDsKIH0KIAotaW50 Ci1jZmVvZihjZnAgKmZwKQorLyoKKyAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAncGF0aCcg aXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKKyAqIGJlIGVpdGhlciAiciIg b3IgInJiIi4KKyAqCisgKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdl IGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZgorICogJ3BhdGgnIGRvZXNuJ3QgYWxyZWFkeSBo YXZlIGl0KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcworICogJ3BhdGgn LCB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIsIHRyeWluZyBpbiB0aGF0 IG9yZGVyLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29k ZSBpbiBlcnJuby4KKyAqCisgKi8KK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0RGlzY292ZXJD b21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIHsK LQlpbnQJCQlyZXQ7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBOVUxMOworCXN0cnVjdCBz dGF0IHN0OworCWNoYXIJICAgKmZuYW1lOworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Nfc3BlYyA9IHswfTsKIAotCXN3aXRjaCAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSkKLQl7 Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZlb2YoZnAtPmZwKTsKKwlj b21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CiAKLQkJCWJyZWFr OwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQg PSBnemVvZihmcC0+ZnApOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJub3QgYnVpbHQgd2l0aCB6bGli IHN1cHBvcnQiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwZ19mYXRhbCgi aW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QiKTsKLQkJCWJyZWFrOwotCX0KKwlBc3NlcnQoc3Ry Y21wKG1vZGUsICJyIikgPT0gMCB8fCBzdHJjbXAobW9kZSwgInJiIikgPT0gMCk7CiAKLQlyZXR1 cm4gcmV0OwotfQorCWZuYW1lID0gc3RyZHVwKHBhdGgpOwogCi1jb25zdCBjaGFyICoKLWdldF9j ZnBfZXJyb3IoY2ZwICpmcCkKLXsKLQlpZiAoZnAtPmNvbXByZXNzX2FsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9HWklQKQorCWlmIChoYXNTdWZmaXgoZm5hbWUsICIuZ3oiKSkKKwkJY29tcHJl c3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOworCWVsc2UKIAl7CisJCWJv b2wJCWV4aXN0czsKKworCQlleGlzdHMgPSAoc3RhdChwYXRoLCAmc3QpID09IDApOworCQkvKiBh dm9pZCB1bnVzZWQgd2FybmluZyBpZiBpdCBpcyBub3QgYnVpbGQgd2l0aCBjb21wcmVzc2lvbiAq LworCQlpZiAoZXhpc3RzKQorCQkJY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9OT05FOwogI2lmZGVmIEhBVkVfTElCWgotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNo YXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmZwLCAmZXJybnVtKTsKKwkJaWYgKCFleGlzdHMpCisJ CXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5n eiIsIHBhdGgpOworCQkJZXhpc3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CiAKLQkJaWYg KGVycm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKLSNlbHNlCi0JCXBnX2ZhdGFs KCJub3QgYnVpbHQgd2l0aCB6bGliIHN1cHBvcnQiKTsKKwkJCWlmIChleGlzdHMpCisJCQkJY29t cHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOworCQl9CiAjZW5kaWYK IAl9CiAKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVI YW5kbGUoY29tcHJlc3Nfc3BlYyk7CisJaWYgKENGSC0+b3BlbihmbmFtZSwgLTEsIG1vZGUsIENG SCkpCisJeworCQlmcmVlX2tlZXBfZXJybm8oQ0ZIKTsKKwkJQ0ZIID0gTlVMTDsKKwl9CisJZnJl ZV9rZWVwX2Vycm5vKGZuYW1lKTsKKworCXJldHVybiBDRkg7CiB9CiAKLSNpZmRlZiBIQVZFX0xJ QloKLXN0YXRpYyBpbnQKLWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hh ciAqc3VmZml4KQoraW50CitEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhh bmRsZSAqIENGSCkKIHsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0J aW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaW50CQkJcmV0ID0gMDsKIAotCWlm IChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKLQkJcmV0dXJuIDA7CisJaWYgKENGSC0+cHJpdmF0 ZSkKKwkJcmV0ID0gQ0ZILT5jbG9zZShDRkgpOwogCi0JcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVb ZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAotCQkJCSAgc3VmZml4bGVu KSA9PSAwOwotfQorCWZyZWVfa2VlcF9lcnJubyhDRkgpOwogCi0jZW5kaWYKKwlyZXR1cm4gcmV0 OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCBkNjMzNWZmZjAyLi5hOTg2ZjVlNmVlIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uaApAQCAtMzcsMzQgKzM3LDYxIEBAIHR5cGVkZWYgdm9pZCAoKldyaXRl RnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwog ICovCiB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIg KipidWYsIHNpemVfdCAqYnVmbGVuKTsKIAotLyogc3RydWN0IGRlZmluaXRpb24gYXBwZWFycyBp biBjb21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVjdCBDb21wcmVzc29yU3RhdGUgQ29tcHJl c3NvclN0YXRlOworc3RydWN0IENvbXByZXNzb3JTdGF0ZQoreworCS8qCisJICogUmVhZCBhbGwg Y29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJp bnQgaXQKKwkgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCisJICovCisJdm9pZAkJKCpyZWFkRGF0YSkg KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworCS8qCisJICogQ29t cHJlc3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgor CSAqLworCXZvaWQJCSgqd3JpdGVEYXRhKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CisJdm9p ZAkJKCplbmQpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwlS ZWFkRnVuYwlyZWFkRjsKKwlXcml0ZUZ1bmMJd3JpdGVGOworCisJdm9pZAkgICAqcHJpdmF0ZTsK K307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCisJCQkJCQkJCQkJICAgUmVh ZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4gdm9p ZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQkJCQljb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzX3NwZWMsCi0JCQkJCQkJCVJlYWRGdW5j IHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZpbGUgSGFuZGxlCisgKi8K K3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVzc0ZpbGVIYW5kbGU7CisK K3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwlpbnQJCQkoKm9wZW4pIChjb25zdCBjaGFy ICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkgQ29tcHJlc3NGaWxlSGFu ZGxlICogQ0ZIKTsKKwlpbnQJCQkoKm9wZW5fd3JpdGUpIChjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLAorCQkJCQkJCSAgIENvbXByZXNzRmlsZUhhbmRsZSAqIGN4dCk7CisJc2l6 ZV90CQkoKnJlYWQpICh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUg KiBDRkgpOworCXNpemVfdAkJKCp3cml0ZSkgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUs CisJCQkJCQkgIHN0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJY2hhcgkgICAqKCpn ZXRzKSAoY2hhciAqcywgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqIENGSCk7CisJaW50 CQkJKCpnZXRjKSAoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsKKwlpbnQJCQkoKmVvZikgKENv bXByZXNzRmlsZUhhbmRsZSAqIENGSCk7CisJaW50CQkJKCpjbG9zZSkgKENvbXByZXNzRmlsZUhh bmRsZSAqIENGSCk7CisJY29uc3QgY2hhciAqKCpnZXRfZXJyb3IpIChDb21wcmVzc0ZpbGVIYW5k bGUgKiBDRkgpOworCisJdm9pZAkgICAqcHJpdmF0ZTsKK307CisKIAotdHlwZWRlZiBzdHJ1Y3Qg Y2ZwIGNmcDsKK2V4dGVybiBDb21wcmVzc0ZpbGVIYW5kbGUgKiBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyk7CiAKLWV4 dGVybiBjZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJ CSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nfc3BlYyk7Ci1leHRl cm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKLWV4dGVybiBjZnAgKmNmb3Blbl9yZWFk KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOwotZXh0ZXJuIGNmcCAqY2ZvcGVu X3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCQkgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjKTsKLWV4dGVybiBpbnQJY2Zy ZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZndyaXRlKGNv bnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZmdldGMoY2Zw ICpmcCk7Ci1leHRlcm4gY2hhciAqY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbik7 Ci1leHRlcm4gaW50CWNmY2xvc2UoY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZW9mKGNmcCAqZnAp OwotZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9jZnBfZXJyb3IoY2ZwICpmcCk7CitleHRlcm4gQ29t cHJlc3NGaWxlSGFuZGxlICogSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNo YXIgKnBhdGgsCisJCQkJCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1vZGUpOwogCitleHRlcm4g aW50CURlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICogQ0ZIKTsK ICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGQ5NmU1NjY4NDYuLjBjNzNhNDcwN2UgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQKQEAgLTEsNSArMSw2IEBACiBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmls ZXMoCiAgICdjb21wcmVzc19pby5jJywKKyAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdkdW1wdXRp bHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX2JhY2t1cF9hcmNoaXZlci5jJywKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCAzMDRjYzA3MmNhLi4wOWUyMGZiOTdiIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRp YyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBU aW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7 CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Nf c3BlYyk7Ci1zdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRp YyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQp Oworc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NGaWxlSGFuZGxlICogc2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2Vu dHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwog c3RhdGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFI LApAQCAtMjcyLDcgKzI3Miw3IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAKIAkvKiBD bG9zZSB0aGUgb3V0cHV0ICovCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsK KwlyZXMgPSBEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0z NTUsNyArMzU1LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCWJvb2wJCXBhcmFs bGVsX21vZGU7CiAJYm9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7 Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdl ID0gU1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0xMTI2LDcgKzExMjYsNyBAQCBQcmludFRPQ1N1 bW1hcnkoQXJjaGl2ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247 Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIg KmZtdE5hbWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTUwMiw2ICsxNTAyLDcgQEAg c3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVj KQogeworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CiAJaW50 CQkJZm4gPSAtMTsKIApAQCAtMTUyNCwzMyArMTUyNSwzMiBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFS WV9XOwogCi0JaWYgKGZuID49IDApCi0JCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwg Y29tcHJlc3Nfc3BlYyk7Ci0JZWxzZQotCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUs IGNvbXByZXNzX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Nf c3BlYyk7CiAKLQlpZiAoIUFILT5PRikKKwlpZiAoQ0ZILT5vcGVuKGZpbGVuYW1lLCBmbiwgbW9k ZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQllbHNlCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQorCisJQUgtPk9GID0gQ0ZI OwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKgogU2F2ZU91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7CisJcmV0 dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOwogfQogCiBzdGF0aWMgdm9pZAotUmVz dG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkKK1Jlc3RvcmVP dXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqIHNhdmVkT3V0cHV0 KQogewogCWludAkJCXJlczsKIAogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7 CisJcmVzID0gRGVzdHJveUNvbXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYgKHJlcyAh PSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAt MTY4OSw3ICsxNjg5LDExIEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwg c2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlIGlmIChSZXN0b3JpbmdUb0RC KEFIKSkKIAkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGlj LCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCQlieXRlc193cml0 dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKKwl7CisJCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIID0gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7CisKKwkJYnl0 ZXNfd3JpdHRlbiA9IENGSC0+d3JpdGUocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJfQogCiAJ aWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9FWElUOwpA QCAtMjAzMSw2ICsyMDM1LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJcmV0dXJu IGJ1ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hh ciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFy CQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVz IiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5h bWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09 IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNjb3ZlckFy Y2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMDYxLDI2ICsyMDc3LDEyIEBA IF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwogCQlpZiAo c3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7Ci0J CQljaGFyCQlidWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRI LCAiJXMvdG9jLmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJ aWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJ CQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0 b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdCIp KQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJaCi0JCQlp ZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgtPmZTcGVjKSA+ PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVz XCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBT X0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5neiIp KQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGly ZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRv Yy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIxNzgsNiAr MjE4MCw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9y bWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNo aXZlSGFuZGxlICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJh bGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyMzMsNyArMjIzNiwxMCBAQCBf YWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAK IAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxl ICovCiAJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK LQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRf Y29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRfY29tcHJl c3Nfc3BlYyk7CisJaWYgKENGSC0+b3BlbihOVUxMLCBmaWxlbm8oc3Rkb3V0KSwgUEdfQklOQVJZ X0EsIENGSCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBzdGRvdXQgZm9yIGFwcGVuZGlu ZzogJW0iKTsKKwlBSC0+T0YgPSBDRkg7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQg dG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBAIC0zNjQ2 LDcgKzM2NTIsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJQUgtPldyaXRlQnl0 ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5vZmZTaXpl KTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKLQlXcml0ZUludChBSCwgQUgt PmNvbXByZXNzX3NwZWMubGV2ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVz c19zcGVjLmFsZ29yaXRobSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsK IAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7 CkBAIC0zNzE4LDcgKzM3MjQsOSBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAkJCQkg QUgtPmZvcm1hdCwgZm10KTsKIAogCUFILT5jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX05PTkU7Ci0JaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzIpCisJaWYgKEFI LT52ZXJzaW9uID49IEtfVkVSU18xXzE1KQorCQlBSC0+Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0g PSBBSC0+UmVhZEJ5dGVQdHIoQUgpOworCWVsc2UgaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18x XzIpCiAJewogCQlpZiAoQUgtPnZlcnNpb24gPCBLX1ZFUlNfMV80KQogCQkJQUgtPmNvbXByZXNz X3NwZWMubGV2ZWwgPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOwpAQCAtMzczMSwxMSArMzczOSwyMCBA QCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFILT5jb21wcmVzc19zcGVj LmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAKKwlpZiAoQUgtPmNvbXByZXNzX3Nw ZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJeworCQlib29sIHVuc3VwcG9y dGVkID0gZmFsc2U7CisKICNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc19zcGVj LmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlwZ19sb2dfd2FybmluZygiYXJj aGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7CisJCWlmIChBSC0+ Y29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJCXVuc3Vw cG9ydGVkID0gdHJ1ZTsKICNlbmRpZgotCisJCWlmICh1bnN1cHBvcnRlZCkKKwkJeworCQkJcGdf bG9nX3dhcm5pbmcoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9u IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gLS0gbm8gZGF0YSB3aWxsIGJlIGF2YWlsYWJs ZSIpOworCQkJQUgtPmNvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9O RTsKKwkJfQorCX0KIAogCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV80KQogCXsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCBkMjkzMDk0OWFiLi5iYjdmYWQyYWYxIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC02NSwxMCArNjUsMTIgQEAKICNk ZWZpbmUgS19WRVJTXzFfMTMgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTMsIDApCS8qIGNoYW5n ZSBzZWFyY2hfcGF0aAogCQkJCQkJCQkJCQkJCSAqIGJlaGF2aW9yICovCiAjZGVmaW5lIEtfVkVS U18xXzE0IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE0LCAwKQkvKiBhZGQgdGFibGVhbSAqLwor I2RlZmluZSBLX1ZFUlNfMV8xNSBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxNSwgMCkJLyogYWRk IGNvbXByZXNzaW9uX2FsZ29yaXRobQorCQkJCQkJCQkJCQkJCSAqIGluIGhlYWRlciAqLwogCiAv KiBDdXJyZW50IGFyY2hpdmUgdmVyc2lvbiBudW1iZXIgKHRoZSBmb3JtYXQgd2UgY2FuIG91dHB1 dCkgKi8KICNkZWZpbmUgS19WRVJTX01BSk9SIDEKLSNkZWZpbmUgS19WRVJTX01JTk9SIDE0Cisj ZGVmaW5lIEtfVkVSU19NSU5PUiAxNQogI2RlZmluZSBLX1ZFUlNfUkVWIDAKICNkZWZpbmUgS19W RVJTX1NFTEYgTUFLRV9BUkNISVZFX1ZFUlNJT04oS19WRVJTX01BSk9SLCBLX1ZFUlNfTUlOT1Is IEtfVkVSU19SRVYpCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3Vz dG9tLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCmluZGV4IDZhMjExMmM0 NWYuLjQ5ZWMwZTM4MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3Vz dG9tLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwpAQCAtMjk4LDcg KzI5OCw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlf V3JpdGVCeXRlKEFILCBCTEtfREFUQSk7CS8qIEJsb2NrIHR5cGUgKi8KIAlXcml0ZUludChBSCwg dGUtPmR1bXBJZCk7CS8qIEZvciBzYW5pdHkgY2hlY2sgKi8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0 ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+ Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzX3NwZWMsCisJCQkJCQkJCSBOVUxM LAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC0zMTcsMTUgKzMxOSwx NSBAQCBfV3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZExlbikKIAlDb21wcmVzc29yU3RhdGUgKmNzID0gY3R4LT5jczsKIAogCWlmIChkTGVuID4g MCkKLQkJLyogV3JpdGVEYXRhVG9BcmNoaXZlKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJy b3JzICovCi0JCVdyaXRlRGF0YVRvQXJjaGl2ZShBSCwgY3MsIGRhdGEsIGRMZW4pOworCQkvKiB3 cml0ZURhdGEoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KKwkJY3MtPndyaXRl RGF0YShBSCwgY3MsIGRhdGEsIGRMZW4pOwogfQogCiAvKgogICogQ2FsbGVkIGJ5IHRoZSBhcmNo aXZlciB3aGVuIGEgZHVtcGVyJ3MgJ0RhdGFEdW1wZXInIHJvdXRpbmUgaGFzCiAgKiBmaW5pc2hl ZC4KICAqCi0gKiBPcHRpb25hbC4KKyAqIE1hbmRhdG9yeS4KICAqLwogc3RhdGljIHZvaWQKIF9F bmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCkBAIC0zMzMsNiArMzM1LDgg QEAgX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0 ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCUVuZENvbXByZXNzb3Io QUgsIGN0eC0+Y3MpOworCWN0eC0+Y3MgPSBOVUxMOworCiAJLyogU2VuZCB0aGUgZW5kIG1hcmtl ciAqLwogCVdyaXRlSW50KEFILCAwKTsKIH0KQEAgLTM3Nyw3ICszODEsOSBAQCBfU3RhcnRCbG9i KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChB SCwgb2lkKTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzX3Nw ZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgt PmNvbXByZXNzX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVu Yyk7CiB9CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVI YW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc19zcGVj LCBfQ3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IEFsbG9j YXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Nfc3BlYywKKwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMs IE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsK IH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf ZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCmluZGV4 IDdkMmNkZGJiMmMuLmUxY2UyZjM5M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3Rv cnkuYwpAQCAtNTAsOSArNTAsOSBAQCB0eXBlZGVmIHN0cnVjdAogCSAqLwogCWNoYXIJICAgKmRp cmVjdG9yeTsKIAotCWNmcAkJICAgKmRhdGFGSDsJCQkvKiBjdXJyZW50bHkgb3BlbiBkYXRhIGZp bGUgKi8KKwlDb21wcmVzc0ZpbGVIYW5kbGUgKmRhdGFGSDsgLyogY3VycmVudGx5IG9wZW4gZGF0 YSBmaWxlICovCiAKLQljZnAJCSAgICpibG9ic1RvY0ZIOwkJLyogZmlsZSBoYW5kbGUgZm9yIGJs b2JzLnRvYyAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqYmxvYnNUb2NGSDsgLyogZmlsZSBoYW5k bGUgZm9yIGJsb2JzLnRvYyAqLwogCVBhcmFsbGVsU3RhdGUgKnBzdGF0ZTsJCS8qIGZvciBwYXJh bGxlbCBiYWNrdXAgLyByZXN0b3JlICovCiB9IGxjbENvbnRleHQ7CiAKQEAgLTE5OCwxMSArMTk4 LDExIEBAIEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNl CiAJewkJCQkJCQkvKiBSZWFkIE1vZGUgKi8KIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKLQkJ Y2ZwCQkgICAqdG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAKIAkJc2V0Rmls ZVBhdGgoQUgsIGZuYW1lLCAidG9jLmRhdCIpOwogCi0JCXRvY0ZIID0gY2ZvcGVuX3JlYWQoZm5h bWUsIFBHX0JJTkFSWV9SKTsKKwkJdG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5k bGUoZm5hbWUsIFBHX0JJTkFSWV9SKTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCkBAIC0y MTgsNyArMjE4LDcgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFI KQogCQlSZWFkVG9jKEFIKTsKIAogCQkvKiBOb3RoaW5nIGVsc2UgaW4gdGhlIGZpbGUsIHNvIGNs b3NlIGl0IGFnYWluLi4uICovCi0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRGVz dHJveUNvbXByZXNzRmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgY2xvc2UgVE9DIGZpbGU6ICVtIik7CiAJCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAl9CkBAIC0z MjcsOSArMzI3LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRl KQogCiAJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5maWxlbmFtZSk7CiAKLQljdHgtPmRh dGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csCi0JCQkJCQkJICAgQUgtPmNv bXByZXNzX3NwZWMpOwotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0g SW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJlc3Nfc3BlYyk7CisKKwlpZiAoY3R4LT5k YXRhRkgtPm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwog fQogCkBAIC0zNDYsMTUgKzM0NiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRlRGF0YShBcmNoaXZl SGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiB7CiAJbGNsQ29udGV4 dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoZExlbiA+IDAgJiYg Y2Z3cml0ZShkYXRhLCBkTGVuLCBjdHgtPmRhdGFGSCkgIT0gZExlbikKKwlpZiAoZExlbiA+IDAg JiYgQ0ZILT53cml0ZShkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4pCiAJewogCQkvKiBpZiB3cml0 ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJ CWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRh dGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcihDRkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICsz NzEsNyBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENv bnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2Ug dGhlIGZpbGUgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRGVzdHJv eUNvbXByZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBkYXRhIGZpbGU6ICVtIik7CiAKIAljdHgtPmRhdGFGSCA9IE5VTEw7CkBAIC0z ODUsMjYgKzM4NiwyNSBAQCBfUHJpbnRGaWxlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAq ZmlsZW5hbWUpCiAJc2l6ZV90CQljbnQ7CiAJY2hhcgkgICAqYnVmOwogCXNpemVfdAkJYnVmbGVu OwotCWNmcAkJICAgKmNmcDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAogCWlmICghZmls ZW5hbWUpCiAJCXJldHVybjsKIAotCWNmcCA9IGNmb3Blbl9yZWFkKGZpbGVuYW1lLCBQR19CSU5B UllfUik7Ci0KLQlpZiAoIWNmcCkKKwlDRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5k bGUoZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKKwlpZiAoIUNGSCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIAogCWJ1ZiA9IHBn X21hbGxvYyhaTElCX09VVF9TSVpFKTsKIAlidWZsZW4gPSBaTElCX09VVF9TSVpFOwogCi0Jd2hp bGUgKChjbnQgPSBjZnJlYWQoYnVmLCBidWZsZW4sIGNmcCkpKQorCXdoaWxlICgoY250ID0gQ0ZI LT5yZWFkKGJ1ZiwgYnVmbGVuLCBDRkgpKSkKIAl7CiAJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFI KTsKIAl9CiAKIAlmcmVlKGJ1Zik7Ci0JaWYgKGNmY2xvc2UoY2ZwKSAhPSAwKQorCWlmIChEZXN0 cm95Q29tcHJlc3NGaWxlSGFuZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBj bG9zZSBkYXRhIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQz NSw3IEBAIF9Mb2FkQmxvYnMoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CiAJT2lkCQkJb2lkOwogCWxj bENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIOwogCWNoYXIJCXRvY2ZuYW1lW01BWFBHUEFUSF07CiAJY2hhcgkJbGlu ZVtNQVhQR1BBVEhdOwogCkBAIC00NDIsMTQgKzQ0MywxNCBAQCBfTG9hZEJsb2JzKEFyY2hpdmVI YW5kbGUgKkFIKQogCiAJc2V0RmlsZVBhdGgoQUgsIHRvY2ZuYW1lLCAiYmxvYnMudG9jIik7CiAK LQljdHgtPmJsb2JzVG9jRkggPSBjZm9wZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOwor CUNGSCA9IGN0eC0+YmxvYnNUb2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSh0 b2NmbmFtZSwgUEdfQklOQVJZX1IpOwogCiAJaWYgKGN0eC0+YmxvYnNUb2NGSCA9PSBOVUxMKQog CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiBm b3IgaW5wdXQ6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCiAJLyogUmVhZCB0aGUgYmxvYnMgVE9D IGZpbGUgbGluZS1ieS1saW5lLCBhbmQgcHJvY2VzcyBlYWNoIGJsb2IgKi8KLQl3aGlsZSAoKGNm Z2V0cyhjdHgtPmJsb2JzVG9jRkgsIGxpbmUsIE1BWFBHUEFUSCkpICE9IE5VTEwpCisJd2hpbGUg KChDRkgtPmdldHMobGluZSwgTUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJY2hhcgkJ YmxvYmZuYW1lW01BWFBHUEFUSCArIDFdOwogCQljaGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC00 NjQsMTEgKzQ2NSwxMSBAQCBfTG9hZEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlfUHJpbnRG aWxlRGF0YShBSCwgcGF0aCk7CiAJCUVuZFJlc3RvcmVCbG9iKEFILCBvaWQpOwogCX0KLQlpZiAo IWNmZW9mKGN0eC0+YmxvYnNUb2NGSCkpCisJaWYgKCFDRkgtPmVvZihDRkgpKQogCQlwZ19mYXRh bCgiZXJyb3IgcmVhZGluZyBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIiwKIAkJCQkgdG9j Zm5hbWUpOwogCi0JaWYgKGNmY2xvc2UoY3R4LT5ibG9ic1RvY0ZIKSAhPSAwKQorCWlmIChEZXN0 cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+YmxvYnNUb2NGSCkgIT0gMCkKIAkJcGdfZmF0YWwo ImNvdWxkIG5vdCBjbG9zZSBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJ IHRvY2ZuYW1lKTsKIApAQCAtNDg4LDE1ICs0ODksMTYgQEAgX1dyaXRlQnl0ZShBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgaW50IGkpCiB7CiAJdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNo YXIpIGk7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsK LQlpZiAoY2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRhRkgpICE9IDEpCisJaWYgKENGSC0+d3JpdGUo JmMsIDEsIENGSCkgIT0gMSkKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFz c3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQll cnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmls ZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0 X2Vycm9yKENGSCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtNTEyLDggKzUxNCw5IEBAIHN0YXRp YyBpbnQKIF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHgg PSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCA9IGN0eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNmZ2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJu IENGSC0+Z2V0YyhDRkgpOwogfQogCiAvKgpAQCAtNTI0LDE1ICs1MjcsMTYgQEAgc3RhdGljIHZv aWQKIF9Xcml0ZUJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qg bGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRh OworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7 Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+ d3JpdGUoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNl dCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8g PT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRv IG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJ CQkgQ0ZILT5nZXRfZXJyb3IoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OSwxMyBAQCBz dGF0aWMgdm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90 IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJ ZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwg c28gaGVyZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhp dGVkIGluIHJlYWRGKCksIHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAq LwotCWlmIChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+ cmVhZChidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CiB9CiAKQEAgLTU3Myw3ICs1NzgsNyBAQCBf Q2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hN b2RlV3JpdGUpCiAJewotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0 b2NGSDsKIAkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc19zcGVjID0gezB9Owog CQljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwogCkBAIC01ODQsOCArNTg5LDggQEAgX0Nsb3NlQXJj aGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVk IHVuY29tcHJlc3NlZCAqLwogCQljb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX05PTkU7Ci0JCXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY29t cHJlc3Nfc3BlYyk7Ci0JCWlmICh0b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRDb21wcmVz c0ZpbGVIYW5kbGUoY29tcHJlc3Nfc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93cml0ZShmbmFt ZSwgUEdfQklOQVJZX1csIHRvY0ZIKSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRw dXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBA IC01OTgsNyArNjAzLDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3Jp dGVIZWFkKEFIKTsKIAkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFI KTsKLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9IDApCisJCWlmIChEZXN0cm95Q29tcHJlc3NGaWxl SGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmls ZTogJW0iKTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4 ICs2NTQsOCBAQCBfU3RhcnRCbG9icyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQog CiAJLyogVGhlIGJsb2IgVE9DIGZpbGUgaXMgbmV2ZXIgY29tcHJlc3NlZCAqLwogCWNvbXByZXNz X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQljdHgtPmJsb2JzVG9jRkgg PSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNzX3NwZWMpOwotCWlmIChjdHgtPmJs b2JzVG9jRkggPT0gTlVMTCkKKwljdHgtPmJsb2JzVG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbXByZXNzX3NwZWMpOworCWlmIChjdHgtPmJsb2JzVG9jRkgtPm9wZW5fd3JpdGUoZm5h bWUsICJhYiIsIGN0eC0+YmxvYnNUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBv dXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcyLDggQEAg X1N0YXJ0QmxvYihBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogCiAJ c25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwgIiVzL2Jsb2JfJXUuZGF0IiwgY3R4LT5kaXJlY3Rv cnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZ X1csIEFILT5jb21wcmVzc19zcGVjKTsKLQotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0 eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJlc3Nfc3BlYyk7CisJ aWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRh RkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIs IGZuYW1lKTsKIH0KIApAQCAtNjgyLDE3ICs2ODYsMTggQEAgc3RhdGljIHZvaWQKIF9FbmRCbG9i KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiB7CiAJbGNsQ29udGV4 dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkggPSBjdHgtPmJsb2JzVG9jRkg7CiAJY2hhcgkJYnVmWzUwXTsKIAlpbnQJCQlsZW47 CiAKIAkvKiBDbG9zZSB0aGUgQkxPQiBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNmY2xvc2Uo Y3R4LT5kYXRhRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5k YXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYiBkYXRhIGZpbGU6 ICVtIik7CiAJY3R4LT5kYXRhRkggPSBOVUxMOwogCiAJLyogcmVnaXN0ZXIgdGhlIGJsb2IgaW4g YmxvYnMudG9jICovCiAJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IGJsb2Jf JXUuZGF0XG4iLCBvaWQsIG9pZCk7Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+YmxvYnNU b2NGSCkgIT0gbGVuKQorCWlmIChDRkgtPndyaXRlKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAkJ cGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBibG9icyBUT0MgZmlsZSIpOwogfQogCkBAIC03 MDYsNyArNzExLDcgQEAgX0VuZEJsb2JzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAK LQlpZiAoY2ZjbG9zZShjdHgtPmJsb2JzVG9jRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVz c0ZpbGVIYW5kbGUoY3R4LT5ibG9ic1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIGJsb2JzIFRPQyBmaWxlOiAlbSIpOwogCWN0eC0+YmxvYnNUb2NGSCA9IE5VTEw7CiB9 Ci0tIAoyLjM0LjEKCg== --b1_LWGoGUWNgDABxGN9UYW62wQklDvni21NPvIWnp2PLtc--