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 1pK0g6-0000sW-KC for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Jan 2023 17:32:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pK0g5-0003Di-Gn for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Jan 2023 17:32:17 +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 1pK0g4-0003DY-Je for pgsql-hackers@lists.postgresql.org; Mon, 23 Jan 2023 17:32:17 +0000 Received: from mail-40134.protonmail.ch ([185.70.40.134]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pK0fw-0004CQ-NU for pgsql-hackers@lists.postgresql.org; Mon, 23 Jan 2023 17:32:15 +0000 Date: Mon, 23 Jan 2023 17:31:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674495123; x=1674754323; bh=po2T7+RWtH88WAZQL6jK4HIAhV44jOOdbg0E0gn4x14=; 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=A7Hi4w3xbclxTPPizfzTIhOFfl/yeeOISVWONSuHi8FYZzm6eBp8PfUyKkUwapuLK RTDtAQLQYwRwfvx0Sg8/ow77ncT+yhQQNV516OfftZfQfUaMBFLt2rlI0I9QFAwlaT BEhf4rG4IXoqREgJJ75uY1PTqTcDrVmzBdqYhZpQBXhN8wo32v0rEYNajFa/0hJNpr gXHBniQgVsDYOeQMTnALxt/C7QTT24/h2qVMk+4VEMA6zIuAKS3D6DVi6Kkj0X0OtK H4NqABUaWUPh9wjbGKEaPJQdcZatvkjB3YzSjmGH99fcCC8x7YfEssMbzPyXgDNWIk Ut+BHwcMmGsrA== To: Tomas Vondra From: gkokolatos@pm.me Cc: Michael Paquier , Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <41036470-041b-08a3-469d-fe07de2bc58e@enterprisedb.com> <6ab89d42-0345-b96e-02d4-68e171cdbe03@enterprisedb.com> <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs" 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_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Friday, January 20th, 2023 at 12:34 AM, Tomas Vondra wrote: > > > On 1/19/23 18:55, Tomas Vondra wrote: > > > Hi, > > > > On 1/19/23 17:42, gkokolatos@pm.me wrote: > > > > > ... > > > > > > Agreed. It was initially submitted as one patch. Then it was requeste= d to be > > > split up in two parts, one to expand the use of the existing API and = one to > > > replace with the new interface. Unfortunately the expansion of usage = of the > > > existing API requires some tweaking, but that is not a very good reas= on for > > > the current patch set. I should have done a better job there. > > > > > > Please find v22 attach which combines back 0001 and 0002. It is missi= ng the > > > documentation that was discussed above as I wanted to give a quick fe= edback. > > > Let me know if you think that the combined version is the one to move= forward > > > with. > > > > Thanks, I'll take a look. > > > After taking a look and thinking about it a bit more, I think we should > keep the two parts separate. I think Michael (or whoever proposed) the > split was right, it makes the patches easier to grok. Please find attached v23 which reintroduces the split. 0001 is reworked to have a reduced footprint than before. Also in an attemp= t to facilitate the readability, 0002 splits the API's and the uncompressed implementation in separate files. > > While reading the thread, I also noticed this: > > > By the way, I think that this 0002 should drop all the default clauses > > in the switches for the compression method so as we'd catch any > > missing code paths with compiler warnings if a new compression method > > is added in the future. > > > Now I realize why there were "not yet implemented" errors for lz4/zstd > in all the switches, and why after removing them you had to add a > default branch. > > We DON'T want a default branch, because the idea is that after adding a > new compression algorithm, we get warnings about switches not handling > it correctly. > > So I guess we should walk back this change too :-( It's probably easier > to go back to v20 from January 16, and redo the couple remaining things > I commented on. No problem. > FWIW I think this is a hint that adding LZ4/ZSTD options, in 5e73a6048, > but without implementation, was not a great idea. It mostly defeats the > idea of getting the compiler warnings - all the places already handle > PG_COMPRESSION_LZ4/PG_COMPRESSION_ZSTD by throwing a pg_fatal. So you'd > have to grep for the options, inspect all the places or something like > that anyway. The warnings would only work for entirely new methods. > > However, I now also realize the compressor API in 0002 replaces all of > this with calls to a generic API callback, so trying to improve this was > pretty silly from me. > > > Please, fix the couple remaining details in v20, add the docs for the > callbacks, and I'll try to polish it and get it committed. Thank you very much. Please find an attempt to comply with the requested changes in the attached. > > > regards > > -- > Tomas Vondra > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company --b1_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs Content-Type: text/x-patch; name=v23-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v23-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSA0ODYxZjBjYWMxZWYxODFiY2NiMzcyNzhlYzc0ZWM0M2QzZjBkZjVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjMgSmFuIDIwMjMgMTM6MjQ6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MyAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDY2ICsrKysrKysrKysrLS0tCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uaCAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jIHwgMTI5ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDIg aW5zZXJ0aW9ucygrKSwgMTIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXgg N2EyYzgwYmJjNC4uZWYwMzM5MTRiYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU2LDYgKzU2 LDEwIEBACiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIAorI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbXByZXNzb3IgQVBJCiAgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTQ5MCwxNiArNDk0LDE5IEBAIGNmb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0aCcg aW4gJ21vZGUnLiBJZiBjb21wcmVzc2lvbiBpcyBHWklQLCB0aGUgZmlsZQotICogaXMgb3BlbmVk IHdpdGggbGlieiBnem9wZW4oKSwgb3RoZXJ3aXNlIHdpdGggcGxhaW4gZm9wZW4oKS4KKyAqIFRo aXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBm aWxlICdwYXRoJyBvcgorICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEg dmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKKyAqIGRlc2NyaXB0b3IgaXMgbm90IGR1 cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgorICog VGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBz dXBwb3J0ZWQgYnkgdGhlCisgKiBjdXJyZW50IGJ1aWxkLgogICoKICAqIE9uIGZhaWx1cmUsIHJl dHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNmb3Bl bihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3N0YXRpYyBjZnAgKgorY2ZvcGVu X2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJ CQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JY2ZwCQkg ICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkpOworCWNmcAkJICAgKmZwID0gcGdfbWFsbG9j MChzaXplb2YoY2ZwKSk7CiAKIAlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fR1pJUCkKIAl7CkBAIC01MTEsMTUgKzUxOCwyMCBAQCBjZm9wZW4oY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAogCQkJc25wcmludGYobW9kZV9jb21wcmVz c2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCiAJCQkJCSBtb2RlLCBjb21w cmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwg bW9kZV9jb21wcmVzc2lvbik7CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlmcC0+Y29tcHJlc3NlZGZw ID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQllbHNlCisJCQkJZnAtPmNvbXBy ZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKIAkJfQogCQllbHNlCiAJ CXsKIAkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVs dCAqLwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKKwkJCWlmIChm ZCA+PSAwKQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKKwkJCWVs c2UKKwkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwogCQl9CiAKLQkJ ZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKIAkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVM TCkKIAkJewogCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKQEAgLTUzMSwxMCArNTQzLDExIEBAIGNm b3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCX0KIAllbHNlCiAJewot I2lmZGVmIEhBVkVfTElCWgotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKLSNlbmRpZgotCQlm cC0+dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwkJaWYgKGZkID49IDApCisJ CQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmZG9wZW4oZmQsIG1vZGUpOworCQllbHNlCisJCQlmcC0+ dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwogCQlpZiAoZnAtPnVuY29tcHJl c3NlZGZwID09IE5VTEwpCiAJCXsKIAkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CkBAIC01NDUsNiAr NTU4LDMzIEBAIGNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCXJl dHVybiBmcDsKIH0KIAorLyoKKyAqIE9wZW5zIGZpbGUgJ3BhdGgnIGluICdtb2RlJyBhbmQgY29t cHJlc3Npb24gYXMgZGVmaW5lZCBpbgorICogY29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBt dXN0IHZlcmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbgorICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBj dXJyZW50IGJ1aWxkLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJy b3IgY29kZSBpbiBlcnJuby4KKyAqLworY2ZwICoKK2Nmb3Blbihjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlLAorCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2Rl LCBjb21wcmVzc2lvbl9zcGVjKTsKK30KKworLyoKKyAqIEFzc29jaWF0ZXMgYSBzdHJlYW0gJ2Zk JywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2RlJworICogYW5kIGNvbXBy ZXNzaW9uIGFzIGRlZmluZWQgaW4gY29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0Cisg KiB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24gaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50 IGJ1aWxkLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29k ZSBpbiBlcnJuby4KKyAqLworY2ZwICoKK2NmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2Rl LAorCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBmZCwgbW9kZSwgY29tcHJlc3Npb25fc3Bl Yyk7Cit9CiAKIGludAogY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5oCmluZGV4IGE0MjlkYzQ3ODkuLmE2Y2RmNTg4ZGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CiAKIGV4dGVy biBjZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJCSAg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRl cm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKIGV4dGVybiBjZnAgKmNm b3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOwogZXh0ZXJuIGNm cCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQkJ CQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBiYTVlNmFjYmJiLi5kZGI3MTJkMDQy IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAj ZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21wcmVzc19p by5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCkBAIC00MywxMyArNDQsNiBAQAog I2RlZmluZSBURVhUX0RVTVBfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1w XG4tLVxuXG4iCiAjZGVmaW5lIFRFWFRfRFVNUEFMTF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIgogCi0vKiBzdGF0ZSBuZWVkZWQgdG8gc2F2 ZS9yZXN0b3JlIGFuIGFyY2hpdmUncyBvdXRwdXQgdGFyZ2V0ICovCi10eXBlZGVmIHN0cnVjdCBf b3V0cHV0Q29udGV4dAotewotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwotfSBPdXRwdXRD b250ZXh0OwotCiAvKgogICogU3RhdGUgZm9yIHRyYWNraW5nIFRvY0VudHJ5cyB0aGF0IGFyZSBy ZWFkeSB0byBwcm9jZXNzIGR1cmluZyBhIHBhcmFsbGVsCiAgKiByZXN0b3JlLiAgKFRoaXMgdXNl ZCB0byBiZSBhIGxpc3QsIGFuZCB3ZSBzdGlsbCBjYWxsIGl0IHRoYXQsIHRob3VnaCBub3cKQEAg LTEwMSw4ICs5NSw4IEBAIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFI KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1zdGF0aWMgT3V0cHV0Q29udGV4dCBTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250ZXh0KTsKK3N0YXRpYyBjZnAg KlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVz dG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19w YXJhbGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2 ZUhhbmRsZSAqQUgsCkBAIC0yNzcsMTEgKzI3MSw4IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJQUgtPkNsb3NlUHRyKEFIKTsKIAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KLQllcnJu byA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBkb2Vzbid0IHNldCBpdCAqLwotCWlmIChB SC0+Z3pPdXQpCi0JCXJlcyA9IEdaQ0xPU0UoQUgtPk9GKTsKLQllbHNlIGlmIChBSC0+T0YgIT0g c3Rkb3V0KQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2Zj bG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAtMzYyLDggKzM1Myw5IEBAIFJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFI WDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlib29sCQlwYXJh bGxlbF9tb2RlOworCWJvb2wJCXN1cHBvcnRzX2NvbXByZXNzaW9uOwogCVRvY0VudHJ5ICAgKnRl OwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAogCUFILT5zdGFnZSA9IFNU QUdFX0lOSVRJQUxJWklORzsKIApAQCAtMzkxLDE3ICszODMsMjcgQEAgUmVzdG9yZUFyY2hpdmUo QXJjaGl2ZSAqQUhYKQogCS8qCiAJICogTWFrZSBzdXJlIHdlIHdvbid0IG5lZWQgKGRlKWNvbXBy ZXNzaW9uIHdlIGhhdmVuJ3QgZ290CiAJICovCi0jaWZuZGVmIEhBVkVfTElCWgorCXN1cHBvcnRz X2NvbXByZXNzaW9uID0gZmFsc2U7CisJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9OT05FIHx8CisJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IHRy dWU7CisKIAlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVAgJiYKIAkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQogCXsKIAkJZm9yICh0 ZSA9IEFILT50b2MtPm5leHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpCiAJCXsKIAkJ CWlmICh0ZS0+aGFkRHVtcGVyICYmICh0ZS0+cmVxcyAmIFJFUV9EQVRBKSAhPSAwKQotCQkJCXBn X2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Np b24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCXsKKyNpZm5kZWYg SEFWRV9MSUJaCisJCQkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9HWklQKQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOworI2Vu ZGlmCisJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQorCQkJCQlwZ19mYXRh bCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl9CiAJCX0KIAl9Ci0jZW5k aWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBhc3N1bWUgd2Ug aGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTExMzMsNyArMTEzNSw3IEBAIFByaW50 VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3Vy U2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAJY29uc3QgY2hh ciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xNTA4LDU4ICsxNTEwLDMy IEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKIHsKLQlpbnQJCQlmbjsKKwljb25zdCBjaGFyICptb2RlOworCWludAkJCWZuID0g LTE7CiAKIAlpZiAoZmlsZW5hbWUpCiAJewogCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIpID09 IDApCiAJCQlmbiA9IGZpbGVubyhzdGRvdXQpOwotCQllbHNlCi0JCQlmbiA9IC0xOwogCX0KIAll bHNlIGlmIChBSC0+RkgpCiAJCWZuID0gZmlsZW5vKEFILT5GSCk7CiAJZWxzZSBpZiAoQUgtPmZT cGVjKQogCXsKLQkJZm4gPSAtMTsKIAkJZmlsZW5hbWUgPSBBSC0+ZlNwZWM7CiAJfQogCWVsc2UK IAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCS8qIElmIGNvbXByZXNzaW9uIGV4cGxpY2l0bHkg cmVxdWVzdGVkLCB1c2UgZ3pvcGVuICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotCQljaGFyCQlm bW9kZVsxNF07CisJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCQltb2RlID0gUEdf QklOQVJZX0E7CisJZWxzZQorCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQkJLyogRG9uJ3QgdXNl IFBHX0JJTkFSWV94IHNpbmNlIHRoaXMgaXMgemxpYiAqLwotCQlzcHJpbnRmKGZtb2RlLCAid2Il ZCIsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFILT5PRiA9 IGd6ZG9wZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBnem9wZW4oZmls ZW5hbWUsIGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZuID49IDApCisJCUFI LT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZQot I2VuZGlmCi0JewkJCQkJCQkvKiBVc2UgZm9wZW4gKi8KLQkJaWYgKEFILT5tb2RlID09IGFyY2hN b2RlQXBwZW5kKQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBmZG9wZW4oZHVw KGZuKSwgUEdfQklOQVJZX0EpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVuKGZpbGVuYW1l LCBQR19CSU5BUllfQSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlB SC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdfQklOQVJZX1cpOwotCQkJZWxzZQotCQkJCUFILT5P RiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCX0KLQkJQUgtPmd6T3V0ID0gMDsK LQl9CisJCUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7 CiAKIAlpZiAoIUFILT5PRikKIAl7CkBAIC0xNTcwLDMzICsxNTQ2LDI0IEBAIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJfQogfQogCi1zdGF0aWMg T3V0cHV0Q29udGV4dAorc3RhdGljIGNmcCAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI KQogewotCU91dHB1dENvbnRleHQgc2F2OwotCi0Jc2F2Lk9GID0gQUgtPk9GOwotCXNhdi5nek91 dCA9IEFILT5nek91dDsKLQotCXJldHVybiBzYXY7CisJcmV0dXJuIChjZnAgKikgQUgtPk9GOwog fQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgT3V0cHV0 Q29udGV4dCBzYXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj ZnAgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0gMDsJCQkJCS8qIGlu IGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVz ID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJy bm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAotCUFILT5nek91dCA9 IHNhdmVkQ29udGV4dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQuT0Y7CisJQUgtPk9G ID0gc2F2ZWRPdXRwdXQ7CiB9CiAKIApAQCAtMTcyMCwyMiArMTY4NywxNyBAQCBhaHdyaXRlKGNv bnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAq QUgpCiAKIAkJYnl0ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAoQUgt Pmd6T3V0KQotCQlieXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBBSC0+ T0YpOwogCWVsc2UgaWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBBSC0+ Q3VzdG9tT3V0UHRyKEFILCBwdHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgorCSAqIElmIHdlJ3Jl IGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUgY29ubmVj dGVkCisJICogdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNlIGlmIChSZXN0b3Jp bmdUb0RCKEFIKSkKKwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+ cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCXsKLQkJ LyoKLQkJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIs IGFuZCB3ZSdyZQotCQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KLQkJICov Ci0JCWlmIChSZXN0b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3Fs Q29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIp OwotCQllbHNlCi0JCQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIEFI LT5PRikgKiBzaXplOwotCX0KKwkJYnl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUocHRyLCBzaXplICog bm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIpCiAJ CVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMjI0LDYgKzIxODYsNyBAQCBfYWxsb2NBSChjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0 clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1 ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCiAJCQkJIEZpbGVTcGVjID8gRmls ZVNwZWMgOiAiKHN0ZGlvKSIsIGZtdCk7CkBAIC0yMjc3LDggKzIyNDAsOCBAQCBfYWxsb2NBSChj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJbWVtc2V0KCYo QUgtPnNxbHBhcnNlKSwgMCwgc2l6ZW9mKEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBzdGRv dXQgd2l0aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5nek91 dCA9IDA7Ci0JQUgtPk9GID0gc3Rkb3V0OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91 dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOwogCiAJLyoKIAkgKiBPbiBXaW5k b3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0IGZp bGVzLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGY3MjQ0NmVkNWIuLjQ3 MjVlNDk3NDcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTMyLDMwICsz Miw2IEBACiAKICNkZWZpbmUgTE9CQlVGU0laRSAxNjM4NAogCi0jaWZkZWYgSEFWRV9MSUJaCi0j aW5jbHVkZSA8emxpYi5oPgotI2RlZmluZSBHWkNMT1NFKGZoKSBnemNsb3NlKGZoKQotI2RlZmlu ZSBHWldSSVRFKHAsIHMsIG4sIGZoKSBnendyaXRlKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5l IEdaUkVBRChwLCBzLCBuLCBmaCkgZ3pyZWFkKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5lIEda RU9GKGZoKQlnemVvZihmaCkKLSNlbHNlCi0jZGVmaW5lIEdaQ0xPU0UoZmgpIGZjbG9zZShmaCkK LSNkZWZpbmUgR1pXUklURShwLCBzLCBuLCBmaCkgKGZ3cml0ZShwLCBzLCBuLCBmaCkgKiAocykp Ci0jZGVmaW5lIEdaUkVBRChwLCBzLCBuLCBmaCkgZnJlYWQocCwgcywgbiwgZmgpCi0jZGVmaW5l IEdaRU9GKGZoKQlmZW9mKGZoKQotLyogdGhpcyBpcyBqdXN0IHRoZSByZWRlZmluaXRpb24gb2Yg YSBsaWJ6IGNvbnN0YW50ICovCi0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEpCi0K LXR5cGVkZWYgc3RydWN0IF96X3N0cmVhbQotewotCXZvaWQJICAgKm5leHRfaW47Ci0Jdm9pZAkg ICAqbmV4dF9vdXQ7Ci0Jc2l6ZV90CQlhdmFpbF9pbjsKLQlzaXplX3QJCWF2YWlsX291dDsKLX0g el9zdHJlYW07Ci10eXBlZGVmIHpfc3RyZWFtICp6X3N0cmVhbXA7Ci0jZW5kaWYKLQogLyogRGF0 YSBibG9jayB0eXBlcyAqLwogI2RlZmluZSBCTEtfREFUQSAxCiAjZGVmaW5lIEJMS19CTE9CUyAz CkBAIC0zMTksOCArMjk1LDcgQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAKIAljaGFyCSAgICpm U3BlYzsJCQkvKiBBcmNoaXZlIEZpbGUgU3BlYyAqLwogCUZJTEUJICAgKkZIOwkJCQkvKiBHZW5l cmFsIHB1cnBvc2UgZmlsZSBoYW5kbGUgKi8KLQl2b2lkCSAgICpPRjsKLQlpbnQJCQlnek91dDsJ CQkvKiBPdXRwdXQgZmlsZSAqLworCXZvaWQJICAgKk9GOwkJCQkvKiBPdXRwdXQgZmlsZSAqLwog CiAJc3RydWN0IF90b2NFbnRyeSAqdG9jOwkJLyogSGVhZGVyIG9mIGNpcmN1bGFyIGxpc3Qgb2Yg VE9DIGVudHJpZXMgKi8KIAlpbnQJCQl0b2NDb3VudDsJCS8qIE51bWJlciBvZiBUT0MgZW50cmll cyAqLwotLSAKMi4zNC4xCgo= --b1_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs Content-Type: text/x-patch; name=v23-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v23-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSA2NTZkZmFkM2FiYWJmZGQ0NjY1ODgwNDk0YmVjMDI3MTAwNDcwMmFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjMgSmFuIDIwMjMgMTQ6Mjk6MDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MyAyLzNdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCA0MDQgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NiArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAxMDIgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv dG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrICAgIHwgICAyICsKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDIgKwogMTUgZmlsZXMgY2hhbmdlZCwgMTA2MCBp bnNlcnRpb25zKCspLCA3NTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3Nfbm9uZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX25vbmUuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCBlZjFlZDBmM2U1Li4wMDEzYmMwODBjIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2Vm aWxlCkBAIC0yNCw3ICsyNCw5IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRp cikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBPQkpTID0gXAog CSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNzX2lvLm8gXAorCWNv bXByZXNzX25vbmUubyBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXAogCXBnX2JhY2t1 cF9hcmNoaXZlci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlw LmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmZmYzRlNmQ1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCkBAIC0wLDAgKzEsNDA0IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmMKKyAqCSBSb3V0aW5lcyBmb3IgYXJjaGl2ZXJz IHRvIHJlYWQgb3Igd3JpdGUgYSBnemlwIGNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg ICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisj aW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgor CisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSAiemxpYi5oIgorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LwordHlwZWRlZiBzdHJ1Y3QgR3ppcENvbXByZXNzb3JTdGF0ZQoreworCXpfc3RyZWFtcAl6cDsK KworCXZvaWQJICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91dHNpemU7Cit9IEd6aXBDb21wcmVzc29y U3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3Nl ZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK0RlZmxhdGVDb21wcmVzc29yR3ppcChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBmbHVzaCkKK3sKKwlHemlwQ29t cHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0 ZV9kYXRhOworCXpfc3RyZWFtcAl6cCA9IGd6aXBjcy0+enA7CisJdm9pZAkgICAqb3V0ID0gZ3pp cGNzLT5vdXRidWY7CisJaW50CQkJcmVzID0gWl9PSzsKKworCXdoaWxlIChnemlwY3MtPnpwLT5h dmFpbF9pbiAhPSAwIHx8IGZsdXNoKQorCXsKKwkJcmVzID0gZGVmbGF0ZSh6cCwgZmx1c2ggPyBa X0ZJTklTSCA6IFpfTk9fRkxVU0gpOworCQlpZiAocmVzID09IFpfU1RSRUFNX0VSUk9SKQorCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOworCQlpZiAo KGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRzaXplKSkKKwkJCXx8ICh6cC0+ YXZhaWxfb3V0ID09IDApCisJCQl8fCAoenAtPmF2YWlsX2luICE9IDApCisJCQkpCisJCXsKKwkJ CS8qCisJCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1bmtzLCBzaW5j ZSBhIHplcm8gbGVuZ3RoCisJCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBpbiB0aGUgY3Vz dG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKKwkJCSAqIGhhcHBlbiBidXQuLi4KKwkJCSAq LworCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJyb3IgY2hlY2tp bmcgYnV0IHRvCisJCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBhcyB3ZWxsLi4u CisJCQkJICovCisJCQkJc2l6ZV90CQlsZW4gPSBnemlwY3MtPm91dHNpemUgLSB6cC0+YXZhaWxf b3V0OworCisJCQkJY3MtPndyaXRlRihBSCwgKGNoYXIgKikgb3V0LCBsZW4pOworCQkJfQorCQkJ enAtPm5leHRfb3V0ID0gb3V0OworCQkJenAtPmF2YWlsX291dCA9IGd6aXBjcy0+b3V0c2l6ZTsK KwkJfQorCisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7CisJfQorfQorCitz dGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nvckd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21w cmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJenA7CisKKwlpZiAo Z3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cDsKKwkJenAtPm5leHRfaW4gPSBOVUxM OworCQl6cC0+YXZhaWxfaW4gPSAwOworCisJCS8qIEZsdXNoIGFueSByZW1haW5pbmcgZGF0YSBm cm9tIHpsaWIgYnVmZmVyICovCisJCURlZmxhdGVDb21wcmVzc29yR3ppcChBSCwgY3MsIHRydWUp OworCisJCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1zZyk7CisKKwkJcGdfZnJlZShn emlwY3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoZ3ppcGNzLT56cCk7CisJfQorCisJcGdfZnJlZShn emlwY3MpOworCWNzLT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorV3Jp dGVEYXRhVG9BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCit7CisJR3ppcENvbXBy ZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVf ZGF0YTsKKwl6X3N0cmVhbXAJenA7CisKKwlpZiAoIWd6aXBjcy0+enApCisJeworCQl6cCA9IGd6 aXBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7CisJCXpw LT56YWxsb2MgPSBaX05VTEw7CisJCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwkJenAtPm9wYXF1ZSA9 IFpfTlVMTDsKKworCQkvKgorCQkgKiBvdXRzaXplIGlzIHRoZSBidWZmZXIgc2l6ZSB3ZSB0ZWxs IHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCisJCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9uZSBl eHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvCisJCSAqIGFwcGVuZCBhIHRy YWlsaW5nIHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQuCisJCSAqLworCQlnemlwY3MtPm91 dGJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7CisJCWd6aXBjcy0+b3V0c2l6ZSA9 IFpMSUJfT1VUX1NJWkU7CisKKwkJLyoKKwkJICogQSBsZXZlbCBvZiB6ZXJvIHNpbXBseSBjb3Bp ZXMgdGhlIGlucHV0IG9uZSBibG9jayBhdCB0aGUgdGltZS4gVGhpcworCQkgKiBpcyBwcm9iYWJs eSBub3Qgd2hhdCB0aGUgdXNlciB3YW50ZWQgd2hlbiBjYWxsaW5nIHRoaXMgaW50ZXJmYWNlLgor CQkgKi8KKwkJaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID09IDApCisJCQlwZ19mYXRh bCgicmVxdWVzdGVkIHRvIGNvbXByZXNzIHRoZSBhcmNoaXZlIHlldCBubyBsZXZlbCB3YXMgc3Bl Y2lmaWVkIik7CisKKwkJaWYgKGRlZmxhdGVJbml0KHpwLCBjcy0+Y29tcHJlc3Npb25fc3BlYy5s ZXZlbCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVz c2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJCS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBt YXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRlICovCisJCXpwLT5u ZXh0X291dCA9IGd6aXBjcy0+b3V0YnVmOworCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRz aXplOworCX0KKworCWd6aXBjcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KHZv aWQgKiwgZGF0YSk7CisJZ3ppcGNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOworCURlZmxhdGVDb21w cmVzc29yR3ppcChBSCwgY3MsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJv bUFyY2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQorewor CXpfc3RyZWFtcAl6cDsKKwljaGFyCSAgICpvdXQ7CisJaW50CQkJcmVzID0gWl9PSzsKKwlzaXpl X3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwl6cCA9ICh6X3N0 cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwl6cC0+emFsbG9jID0gWl9OVUxM OworCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwl6cC0+b3BhcXVlID0gWl9OVUxMOworCisJYnVmID0g cGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7CisJYnVmbGVuID0gWkxJQl9JTl9TSVpFOworCisJb3V0 ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKworCWlmIChpbmZsYXRlSW5pdCh6cCkg IT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxp YnJhcnk6ICVzIiwKKwkJCQkgenAtPm1zZyk7CisKKwkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUg Zm9yIHpsaWIgKi8KKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1Zmxlbikp KQorCXsKKwkJenAtPm5leHRfaW4gPSAodm9pZCAqKSBidWY7CisJCXpwLT5hdmFpbF9pbiA9IGNu dDsKKworCQl3aGlsZSAoenAtPmF2YWlsX2luID4gMCkKKwkJeworCQkJenAtPm5leHRfb3V0ID0g KHZvaWQgKikgb3V0OworCQkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7CisKKwkJCXJl cyA9IGluZmxhdGUoenAsIDApOworCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVB TV9FTkQpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAt Pm1zZyk7CisKKwkJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwor CQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7CisJ CX0KKwl9CisKKwl6cC0+bmV4dF9pbiA9IE5VTEw7CisJenAtPmF2YWlsX2luID0gMDsKKwl3aGls ZSAocmVzICE9IFpfU1RSRUFNX0VORCkKKwl7CisJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91 dDsKKwkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7CisJCXJlcyA9IGluZmxhdGUoenAs IDApOworCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOworCisJCW91dFta TElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOworCQlhaHdyaXRlKG91dCwgMSwg WkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwl9CisKKwlpZiAoaW5mbGF0ZUVu ZCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBs aWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJZnJlZShidWYpOworCWZyZWUob3V0KTsKKwlmcmVl KHpwKTsKK30KKworLyogUHVibGljIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBnemlwIGNvbXByZXNz ZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUg KmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzOworCisJY3MtPnJlYWREYXRhID0gUmVhZERh dGFGcm9tQXJjaGl2ZUd6aXA7CisJY3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZUd6 aXA7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JHemlwOworCisJY3MtPmNvbXByZXNzaW9uX3Nw ZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUg KikgcGdfbWFsbG9jMChzaXplb2YoR3ppcENvbXByZXNzb3JTdGF0ZSkpOworCisJY3MtPnByaXZh dGVfZGF0YSA9IGd6aXBjczsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENv bXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMg c2l6ZV90CitHemlwX3JlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7 CisJc2l6ZV90CQlyZXQ7CisKKwlyZXQgPSBnenJlYWQoZ3pmcCwgcHRyLCBzaXplKTsKKwlpZiAo cmV0ICE9IHNpemUgJiYgIWd6ZW9mKGd6ZnApKQorCXsKKwkJaW50CQkJZXJybnVtOworCQljb25z dCBjaGFyICplcnJtc2cgPSBnemVycm9yKGd6ZnAsICZlcnJudW0pOworCisJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwKKwkJCQkgZXJybnVtID09IFpfRVJS Tk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOworCX0KKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBzaXplX3QKK0d6aXBfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwg Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZI LT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3p3cml0ZShnemZwLCBwdHIsIHNpemUpOworfQor CitzdGF0aWMgaW50CitHemlwX2dldGMoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pG aWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJ ZXJybm8gPSAwOworCXJldCA9IGd6Z2V0YyhnemZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJ CWlmICghZ3plb2YoZ3pmcCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1 dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGNoYXIgKgorR3ppcF9nZXRzKGNoYXIgKnB0ciwgaW50IHNpemUs IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENG SC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6Z2V0cyhnemZwLCBwdHIsIHNpemUpOworfQor CitzdGF0aWMgaW50CitHemlwX2Nsb3NlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6 RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXNhdmVfZXJy bm87CisJaW50CQkJcmV0OworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJcmV0ID0g Z3pjbG9zZShnemZwKTsKKworCXNhdmVfZXJybm8gPSBlcnJubzsKKwllcnJubyA9IHNhdmVfZXJy bm87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitHemlwX2VvZihDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVf ZGF0YTsKKworCXJldHVybiBnemVvZihnemZwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor R3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZw ID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3QgY2hhciAqZXJybXNnOworCWlu dAkJCWVycm51bTsKKworCWVycm1zZyA9IGd6ZXJyb3IoZ3pmcCwgJmVycm51bSk7CisJaWYgKGVy cm51bSA9PSBaX0VSUk5PKQorCQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4g ZXJybXNnOworfQorCitzdGF0aWMgaW50CitHemlwX29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50 IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZp bGUJCWd6ZnA7CisJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07CisKKwlpZiAoQ0ZILT5jb21w cmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKKwl7CisJCS8qCisJ CSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIg dG8gdXNlIGl0CisJCSAqLworCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9k ZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJCQkgbW9kZSwgQ0ZILT5jb21wcmVzc2lvbl9zcGVj LmxldmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHkobW9kZV9jb21wcmVzc2lvbiwgbW9kZSk7CisK KwlpZiAoZmQgPj0gMCkKKwkJZ3pmcCA9IGd6ZG9wZW4oZHVwKGZkKSwgbW9kZV9jb21wcmVzc2lv bik7CisJZWxzZQorCQlnemZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOworCisJ aWYgKGd6ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IGd6 ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3ppcF9vcGVuX3dyaXRlKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwlpbnQJCQlzYXZlX2Vycm5vOworCisJ Zm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwlyZXQgPSBDRkgtPm9wZW5fZnVuYyhm bmFtZSwgLTEsIG1vZGUsIENGSCk7CisKKwlzYXZlX2Vycm5vID0gZXJybm87CisJcGdfZnJlZShm bmFtZSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAor SW5pdENvbXByZXNzR3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUNGSC0+b3Blbl9mdW5jID0g R3ppcF9vcGVuOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gR3ppcF9vcGVuX3dyaXRlOworCUNG SC0+cmVhZF9mdW5jID0gR3ppcF9yZWFkOworCUNGSC0+d3JpdGVfZnVuYyA9IEd6aXBfd3JpdGU7 CisJQ0ZILT5nZXRzX2Z1bmMgPSBHemlwX2dldHM7CisJQ0ZILT5nZXRjX2Z1bmMgPSBHemlwX2dl dGM7CisJQ0ZILT5jbG9zZV9mdW5jID0gR3ppcF9jbG9zZTsKKwlDRkgtPmVvZl9mdW5jID0gR3pp cF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IEd6aXBfZ2V0X2Vycm9yOworCisJQ0ZILT5j b21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKworCUNGSC0+cHJpdmF0ZV9kYXRh ID0gTlVMTDsKK30KKyNlbHNlCQkJCQkJCS8qIEhBVkVfTElCWiAqLwordm9pZAorSW5pdENvbXBy ZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOworfQorCit2b2lkCitJbml0 Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKK30KKyNlbmRp ZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjQ1ZmRmMDFmN2QKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2d6aXAuaAorICoJIEdaSVAgaW50ZXJmYWNl IHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19nemlwLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfQ09NUFJF U1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVkZSAiY29tcHJl c3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0 ZSAqY3MsCisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgsCisJCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfR1pJUF9IXyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfaW8uYwppbmRleCBlZjAzMzkxNGJhLi5lYTRjMjY2ZTA4IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfaW8uYwpAQCAtOSw0MiArOSw1NCBAQAogICoKICAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0d28g QVBJcyBmb3IgZGVhbGluZyB3aXRoIGNvbXByZXNzZWQgZGF0YS4gVGhlIGZpcnN0CiAgKiBwcm92 aWRlcyBtb3JlIGZsZXhpYmlsaXR5LCB1c2luZyBjYWxsYmFja3MgdG8gcmVhZC93cml0ZSBkYXRh IGZyb20gdGhlCi0gKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMgYSB3cmFw cGVyIGFyb3VuZCBmb3Blbi9nem9wZW4gYW5kCisgKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNl Y29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBmb3BlbiBhbmQKICAqIGZyaWVuZHMsIHByb3Zp ZGluZyBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aG9zZSwgYnV0IGFic3RyYWN0cyBhd2F5Ci0g KiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIEJvdGggQVBJcyB1c2UgbGlieiBmb3IgdGhlIGNv bXByZXNzaW9uLCBidXQKLSAqIHRoZSBzZWNvbmQgQVBJIHVzZXMgZ3ppcCBoZWFkZXJzLCBzbyB0 aGUgcmVzdWx0aW5nIGZpbGVzIGNhbiBiZSBlYXNpbHkKLSAqIG1hbmlwdWxhdGVkIHdpdGggdGhl IGd6aXAgdXRpbGl0eS4KKyAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gVGhlIHNlY29uZCBB UEkgaXMgYWltZWQgZm9yIHRoZSByZXN1bHRpbmcKKyAqIGZpbGVzIHRvIGJlIGVhc2lseSBtYW5p cHVsYXRlZCB3aXRoIGFuIGV4dGVybmFsIGNvbXByZXNzaW9uIHV0aWxpdHkKKyAqIHByb2dyYW0u CisgKgorICogVGhpcyBmaWxlIGFsc28gaW5jbHVkZXMgdGhlIGltcGxlbWVudGF0aW9uIHdoZW4g Y29tcHJlc3Npb24gaXMgbm9uZSBmb3IKKyAqIGJvdGggQVBJJ3MuCiAgKgogICogQ29tcHJlc3Nv ciBBUEkKICAqIC0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhlIGludGVyZmFjZSBmb3Igd3JpdGlu ZyB0byBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRocmVlIGZ1bmN0aW9uczoKLSAqCUFsbG9jYXRl Q29tcHJlc3NvciwgV3JpdGVEYXRhVG9BcmNoaXZlIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5 b3UgY2FsbAotICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBi eSBjYWxsaW5nIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYXMgbWFueSB0aW1lcyBhcyBuZWVkZWQs IGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYW5kIEVu ZENvbXByZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlkZWQgdG8K LSAqCUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEu Ci0gKgotICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNpc3RzIG9m IGp1c3Qgb25lIGZ1bmN0aW9uOgotICoJUmVhZERhdGFGcm9tQXJjaGl2ZS4gUmVhZERhdGFGcm9t QXJjaGl2ZSByZWFkcyB0aGUgd2hvbGUgY29tcHJlc3NlZCBpbnB1dAotICoJc3RyZWFtLCBieSBy ZXBlYXRlZGx5IGNhbGxpbmcgdGhlIGdpdmVuIFJlYWRGdW5jLiBSZWFkRnVuYyByZXR1cm5zIHRo ZQotICoJY29tcHJlc3NlZCBkYXRhIGNodW5rIGF0IGEgdGltZSwgYW5kIFJlYWREYXRhRnJvbUFy Y2hpdmUgZGVjb21wcmVzc2VzIGl0Ci0gKglhbmQgcGFzc2VzIHRoZSBkZWNvbXByZXNzZWQgZGF0 YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5jIHJldHVybnMgMAotICoJdG8gc2lnbmFsIEVP Ri4KLSAqCi0gKglUaGUgaW50ZXJmYWNlIGlzIHRoZSBzYW1lIGZvciBjb21wcmVzc2VkIGFuZCB1 bmNvbXByZXNzZWQgc3RyZWFtcy4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3JpdGVEYXRhLCBh bmQgRW5kQ29tcHJlc3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwg dGhlbiB3cml0ZSBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEgYXMgbWFueQorICoJ dGltZXMgYXMgbmVlZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29yLiB3cml0ZURhdGEgd2ls bCBjYWxsIHRoZQorICoJV3JpdGVGdW5jIHRoYXQgd2FzIHByb3ZpZGVkIHRvIEFsbG9jYXRlQ29t cHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZgorICoJY29tcHJlc3NlZCBkYXRhLgorICoKKyAqCVRo ZSBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW4gYXJjaGl2ZSBjb25zaXN0cyBvZiB0aGUgc2FtZSB0 aHJlZSBmdW5jdGlvbnM6CisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHJlYWREYXRhLCBhbmQgRW5k Q29tcHJlc3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgdGhlbiBy ZWFkIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIHJlYWREYXRhIHRvIHJlYWQgdGhlCisgKgl3aG9s ZSBjb21wcmVzc2VkIHN0cmVhbSB3aGljaCByZXBlYXRlZGx5IGNhbGxzIHRoZSBnaXZlbiBSZWFk RnVuYy4gUmVhZEZ1bmMKKyAqCXJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBvbmUgY2h1bmsg YXQgYSB0aW1lLiBUaGVuIHJlYWREYXRhIGRlY29tcHJlc3NlcworICoJaXQgYW5kIHBhc3NlcyB0 aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVuYyByZXR1cm5z IDAKKyAqCXRvIHNpZ25hbCBFT0YuIFRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXBy ZXNzZWQgYW5kIHVuY29tcHJlc3NlZAorICoJc3RyZWFtcy4KICAqCiAgKiBDb21wcmVzc2VkIHN0 cmVhbSBBUEkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKglUaGUgY29tcHJlc3Nl ZCBzdHJlYW0gQVBJIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgc3RhbmRhcmQgZm9wZW4oKSBh bmQKLSAqCWxpYnoncyBnem9wZW4oKSBBUElzLiBJdCBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2Ft ZSBmdW5jdGlvbnMgZm9yCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgc3RyZWFtcy4g Y2ZvcGVuX3JlYWQoKSBmaXJzdCB0cmllcyB0byBvcGVuCi0gKgl0aGUgZmlsZSB3aXRoIGdpdmVu IG5hbWUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZQotICoJZmls ZSB3aXRoIHRoZSAuZ3ogc3VmZml4LiBjZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdy aXRpbmcsIGFuCi0gKglleHRyYSBhcmd1bWVudCBzcGVjaWZpZXMgaWYgdGhlIGZpbGUgc2hvdWxk IGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZQotICoJLmd6IHN1ZmZpeCB0byB0aGUgZmlsZW5h bWUgaWYgc28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFuZGxlIGJvdGgKLSAqCWNvbXBy ZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KKyAqCVRoZSBjb21wcmVzc2VkIHN0cmVhbSBB UEkgaXMgcHJvdmlkaW5nIGEgc2V0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZvcgorICoJb3Blbmlu ZywgcmVhZGluZywgd3JpdGluZywgYW5kIGZpbmFsbHkgY2xvc2luZyBmaWxlcy4gVGhlIGltcGxl bWVudGVkCisgKglmdW5jdGlvbiBwb2ludGVycyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgY29ycmVz cG9uZGluZyBoZWFkZXIgZmlsZSBhbmQgYXJlCisgKgljb21tb24gZm9yIGFsbCBzdHJlYW1zLiBJ dCBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgorICoJYm90 aCBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgc3RyZWFtcy4KKyAqCisgKglUaGUgaW50ZXJm YWNlIGNvbnNpc3RzIG9mIHRocmVlIGZ1bmN0aW9ucywgSW5pdENvbXByZXNzRmlsZUhhbmRsZSwK KyAqCUluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSwgYW5kIEVuZENvbXByZXNzRmlsZUhh bmRsZS4gSWYgdGhlCisgKgljb21wcmVzc2lvbiBpcyBrbm93biwgdGhlbiBzdGFydCBieSBjYWxs aW5nIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUsCisgKglvdGhlcndpc2UgZGlzY292ZXIgaXQgYnkg dXNpbmcgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlLiBUaGVuIGNhbGwKKyAqCXRoZSBm dW5jdGlvbiBwb2ludGVycyBhcyByZXF1aXJlZCBmb3IgdGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9u cy4gRmluYWxseQorICoJY2FsbCBFbmRDb21wcmVzc0ZpbGVIYW5kbGUgdG8gZW5kIHRoZSBzdHJl YW0uCisgKgorICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCisgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKKyAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negorICoJc3VmZml4LgogICoKICAqIElERU5USUZJQ0FUSU9OCiAgKgkgICBzcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTMsMTIyICs2NSwzOCBAQAogICovCiAjaW5j bHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjb21wcmVzc19nemlwLmgiCiAjaW5jbHVkZSAiY29tcHJl c3NfaW8uaCIKKyNpbmNsdWRlICJjb21wcmVzc19ub25lLmgiCiAjaW5jbHVkZSAicGdfYmFja3Vw X3V0aWxzLmgiCiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZW5kaWYK LQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc29yIEFQSQogICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogdHlwZWRlZiBhcHBlYXJzIGluIGNvbXByZXNzX2lv LmggKi8KLXN0cnVjdCBDb21wcmVzc29yU3RhdGUKLXsKLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWM7Ci0JV3JpdGVGdW5jCXdyaXRlRjsKLQotI2lmZGVmIEhBVkVf TElCWgotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICp6bGliT3V0OwotCXNpemVfdAkJemxpYk91 dFNpemU7Ci0jZW5kaWYKLX07Ci0KLS8qIFJvdXRpbmVzIHRoYXQgc3VwcG9ydCB6bGliIGNvbXBy ZXNzZWQgZGF0YSBJL08gKi8KLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyB2b2lkIEluaXRDb21w cmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwotc3RhdGljIHZvaWQg RGVmbGF0ZUNvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzLAotCQkJCQkJCQkgIGJvb2wgZmx1c2gpOwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJj aGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lk IFdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsKLXN0YXRp YyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzKTsKLSNlbmRpZgotCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgdW5jb21wcmVzc2Vk IGRhdGEgSS9PICovCi1zdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZl SGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNo aXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pOwotCi0vKiBQdWJsaWMgaW50ZXJmYWNl IHJvdXRpbmVzICovCi0KLS8qIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KKy8qCisgKiBB bGxvY2F0ZSBhIG5ldyBjb21wcmVzc29yLgorICovCiBDb21wcmVzc29yU3RhdGUgKgogQWxsb2Nh dGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywKLQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKQorCQkJCSAgIFJlYWRGdW5jIHJlYWRGLCBX cml0ZUZ1bmMgd3JpdGVGKQogewogCUNvbXByZXNzb3JTdGF0ZSAqY3M7CiAKLSNpZm5kZWYgSEFW RV9MSUJaCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVApCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Np b24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYKLQogCWNzID0gKENvbXByZXNzb3JTdGF0ZSAq KSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKKwljcy0+cmVhZEYgPSByZWFk RjsKIAljcy0+d3JpdGVGID0gd3JpdGVGOwotCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJl c3Npb25fc3BlYzsKLQotCS8qCi0JICogUGVyZm9ybSBjb21wcmVzc2lvbiBhbGdvcml0aG0gc3Bl Y2lmaWMgaW5pdGlhbGl6YXRpb24uCi0JICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNzLT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlJbml0 Q29tcHJlc3NvclpsaWIoY3MsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLSNlbmRpZgot Ci0JcmV0dXJuIGNzOwotfQogCi0vKgotICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20g dGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKLSAqIG91dCB3aXRoIGFo d3JpdGUoKS4KLSAqLwotdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpB SCwKLQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj LAotCQkJCQlSZWFkRnVuYyByZWFkRikKLXsKIAlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgs IHJlYWRGKTsKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCkKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVabGli KEFILCByZWFkRik7Ci0jZWxzZQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBw b3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JfQotfQorCQlJbml0 Q29tcHJlc3Nvck5vbmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOworCWVsc2UgaWYgKGNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCUluaXRDb21wcmVz c29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAKLS8qCi0gKiBDb21wcmVzcyBhbmQgd3Jp dGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCi0gKi8KLXZvaWQKLVdy aXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywK LQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQlzd2l0Y2ggKGNzLT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJ UDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgsIGNzLCBk YXRhLCBkTGVuKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBw b3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJ Y2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBSCwg Y3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0Ogot CQkJLyogZmFsbHRocm91Z2ggKi8KLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdf ZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJcmV0 dXJuIGNzOwogfQogCiAvKgpAQCAtMTc3LDIzMyArMTA1LDMxIEBAIFdyaXRlRGF0YVRvQXJjaGl2 ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVuZENvbXBy ZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0jaWZkZWYg SEFWRV9MSUJaCi0JaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01Q UkVTU0lPTl9HWklQKQotCQlFbmRDb21wcmVzc29yWmxpYihBSCwgY3MpOwotI2VuZGlmCi0JZnJl ZShjcyk7CisJY3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi0vKiBQcml2YXRl IHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KLQotI2lm ZGVmIEhBVkVfTElCWgotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgemxpYiBjb21wcmVzc2VkIG91dHB1 dC4KLSAqLwotCi1zdGF0aWMgdm9pZAotSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0 ZSAqY3MsIGludCBsZXZlbCkKLXsKLQl6X3N0cmVhbXAJenA7Ci0KLQl6cCA9IGNzLT56cCA9ICh6 X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9O VUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JLyoK LQkgKiB6bGliT3V0U2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNhbiBv dXRwdXQgdG8uICBXZQotCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1 c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvIGFwcGVuZCBhCi0JICogdHJhaWxpbmcgemVybyBieXRl IHRvIHRoZSB6bGliIG91dHB1dC4KLQkgKi8KLQljcy0+emxpYk91dCA9IChjaGFyICopIHBnX21h bGxvYyhaTElCX09VVF9TSVpFICsgMSk7Ci0JY3MtPnpsaWJPdXRTaXplID0gWkxJQl9PVVRfU0la RTsKLQotCWlmIChkZWZsYXRlSW5pdCh6cCwgbGV2ZWwpICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJj b3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJIHpwLT5t c2cpOwotCi0JLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIg U3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KLQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+emxp Yk91dDsKLQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOwotfQotCi1zdGF0aWMgdm9p ZAotRW5kQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCi0JenAtPm5leHRfaW4gPSBOVUxMOwot CXpwLT5hdmFpbF9pbiA9IDA7Ci0KLQkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6 bGliIGJ1ZmZlciAqLwotCURlZmxhdGVDb21wcmVzc29yWmxpYihBSCwgY3MsIHRydWUpOwotCi0J aWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug Y29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOwotCi0JZnJlZShjcy0+emxpYk91dCk7 Ci0JZnJlZShjcy0+enApOwotfQotCi1zdGF0aWMgdm9pZAotRGVmbGF0ZUNvbXByZXNzb3JabGli KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQotewot CXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQljaGFyCSAgICpvdXQgPSBjcy0+emxpYk91dDsKLQlp bnQJCQlyZXMgPSBaX09LOwotCi0Jd2hpbGUgKGNzLT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVz aCkKLQl7Ci0JCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNI KTsKLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWls X291dCA8IGNzLT56bGliT3V0U2l6ZSkpCi0JCQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQotCQkJ fHwgKHpwLT5hdmFpbF9pbiAhPSAwKQotCQkJKQotCQl7Ci0JCQkvKgotCQkJICogRXh0cmEgcGFy YW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxlbmd0aAotCQkJ ICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hv dWxkIG5ldmVyCi0JCQkgKiBoYXBwZW4gYnV0Li4uCi0JCQkgKi8KLQkJCWlmICh6cC0+YXZhaWxf b3V0IDwgY3MtPnpsaWJPdXRTaXplKQotCQkJewotCQkJCS8qCi0JCQkJICogQW55IHdyaXRlIGZ1 bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bwotCQkJCSAqIG1h a2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgotCQkJCSAqLwotCQkJCXNpemVf dAkJbGVuID0gY3MtPnpsaWJPdXRTaXplIC0genAtPmF2YWlsX291dDsKLQotCQkJCWNzLT53cml0 ZUYoQUgsIG91dCwgbGVuKTsKLQkJCX0KLQkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsK LQkJCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91dFNpemU7Ci0JCX0KLQotCQlpZiAocmVzID09 IFpfU1RSRUFNX0VORCkKLQkJCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLVdyaXRlRGF0 YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0J CQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCWNzLT56cC0+bmV4dF9p biA9ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRhKTsKLQljcy0+enAtPmF2YWlsX2lu ID0gZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCBmYWxzZSk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVh ZEZ1bmMgcmVhZEYpCi17Ci0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAgKm91dDsKLQlpbnQJCQly ZXMgPSBaX09LOwotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlzaXplX3QJCWJ1Zmxl bjsKLQotCXpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOwotCXpw LT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpwLT5vcGFxdWUgPSBa X05VTEw7Ci0KLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKLQlidWZsZW4gPSBaTElC X0lOX1NJWkU7Ci0KLQlvdXQgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOwotCi0JaWYg KGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxp emUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLAotCQkJCSB6cC0+bXNnKTsKLQotCS8qIG5vIG1p bmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAqLwotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZi dWYsICZidWZsZW4pKSkKLQl7Ci0JCXpwLT5uZXh0X2luID0gKHZvaWQgKikgYnVmOwotCQl6cC0+ YXZhaWxfaW4gPSBjbnQ7Ci0KLQkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+IDApCi0JCXsKLQkJCXpw LT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9T SVpFOwotCi0JCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJCWlmIChyZXMgIT0gWl9PSyAmJiBy ZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBk YXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9v dXRdID0gJ1wwJzsKLQkJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWls X291dCwgQUgpOwotCQl9Ci0JfQotCi0JenAtPm5leHRfaW4gPSBOVUxMOwotCXpwLT5hdmFpbF9p biA9IDA7Ci0Jd2hpbGUgKHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JewotCQl6cC0+bmV4dF9vdXQg PSAodm9pZCAqKSBvdXQ7Ci0JCXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9TSVpFOwotCQlyZXMg PSBpbmZsYXRlKHpwLCAwKTsKLQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9F TkQpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNn KTsKLQotCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKLQkJYWh3 cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JfQotCi0J aWYgKGluZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug Y29tcHJlc3Npb24gbGlicmFyeTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUoYnVmKTsKLQlmcmVl KG91dCk7Ci0JZnJlZSh6cCk7Ci19Ci0jZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCi0KLQot LyoKLSAqIEZ1bmN0aW9ucyBmb3IgdW5jb21wcmVzc2VkIG91dHB1dC4KLSAqLwotCi1zdGF0aWMg dm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5j IHJlYWRGKQotewotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlzaXplX3QJCWJ1Zmxl bjsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKLQlidWZsZW4gPSBaTElCX09V VF9TSVpFOwotCi0Jd2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsK LQkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOwotCX0KLQotCWZyZWUoYnVmKTsKLX0KLQotc3Rh dGljIHZvaWQKLVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQot ewotCWNzLT53cml0ZUYoQUgsIGRhdGEsIGRMZW4pOwotfQotCi0KIC8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqLwogCiAvKgotICogY2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBzdHJlYW0sIHdyYXBwaW5n IHRoZSB1bmRlcmx5aW5nIEZJTEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVyLiBUaGlzIGlzIG9wYXF1 ZSB0byB0aGUgY2FsbGVycy4KKyAqIFByaXZhdGUgcm91dGluZXMKICAqLwotc3RydWN0IGNmcAor c3RhdGljIGludAoraGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpz dWZmaXgpCiB7Ci0JRklMRQkgICAqdW5jb21wcmVzc2VkZnA7Ci0jaWZkZWYgSEFWRV9MSUJaCi0J Z3pGaWxlCQljb21wcmVzc2VkZnA7Ci0jZW5kaWYKLX07CisJaW50CQkJZmlsZW5hbWVsZW4gPSBz dHJsZW4oZmlsZW5hbWUpOworCWludAkJCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgpOwogCi0j aWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50CWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFt ZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgorCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZp eGxlbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxl biAtIHN1ZmZpeGxlbl0sCisJCQkJICBzdWZmaXgsCisJCQkJICBzdWZmaXhsZW4pID09IDA7Cit9 CiAKIC8qIGZyZWUoKSB3aXRob3V0IGNoYW5naW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2ZXJhbCBw bGFjZXMgYmVsb3cgKi8KIHN0YXRpYyB2b2lkCkBAIC00MTYsMzI0ICsxNDIsMTAyIEBAIGZyZWVf a2VlcF9lcnJubyh2b2lkICpwKQogfQogCiAvKgotICogT3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcu ICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNob3VsZAotICogYmUgZWl0 aGVyICJyIiBvciAicmIiLgotICoKLSAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBkb2VzIG5vdCBl eGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlmICdwYXRoJwotICogZG9lc24ndCBh bHJlYWR5IGhhdmUgaXQpIGFuZCB0cnkgYWdhaW4uIFNvIGlmIHlvdSBwYXNzICJmb28iIGFzICdw YXRoJywKLSAqIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvciAiZm9vLmd6Ii4KLSAqCi0g KiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisg KiBQdWJsaWMgaW50ZXJmYWNlCiAgKi8KLWNmcCAqCi1jZm9wZW5fcmVhZChjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlKQotewotCWNmcAkJICAgKmZwOwotCi0JcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OwotCi0jaWZkZWYgSEFWRV9MSUJa Ci0JaWYgKGhhc1N1ZmZpeChwYXRoLCAiLmd6IikpCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUs IGNvbXByZXNzaW9uX3NwZWMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0 aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9 PSBOVUxMKQotCQl7Ci0JCQljaGFyCSAgICpmbmFtZTsKLQotCQkJZm5hbWUgPSBwc3ByaW50Zigi JXMuZ3oiLCBwYXRoKTsKLQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJF U1NJT05fR1pJUDsKLQkJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVj KTsKLQkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4g ZnA7Ci19CiAKIC8qCi0gKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4gJ3BhdGgnIGluZGljYXRl cyB0aGUgcGF0aCBuYW1lLCBhbmQgJ21vZGUnIG11c3QKLSAqIGJlIGEgZmlsZW1vZGUgYXMgYWNj ZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMgd3JpdGluZwotICog KCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KLSAqCi0gKiBJZiAnY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0nIGlzIEdaSVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCi0g KiBhbmQgJ2NvbXByZXNzaW9uX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMg YXV0b21hdGljYWxseSBhZGRlZCB0bwotICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KLSAqCi0gKiBP biBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8K LWNmcCAqCi1jZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK LQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCi17 Ci0JY2ZwCQkgICAqZnA7Ci0KLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25f c3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJY2hhcgkgICAqZm5hbWU7Ci0K LQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJZnAgPSBjZm9wZW4oZm5hbWUs IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwotI2Vs c2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwgImd6aXAiKTsKLQkJZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgd29y a2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9y Ci0gKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlw dG9yLCBpbiAnbW9kZScuIFRoZQotICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBp cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCi0gKiBUaGUgY2FsbGVyIG11 c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0 aGUKLSAqIGN1cnJlbnQgYnVpbGQuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0 aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNzIGZpbGUg aGFuZGxlIGZvciB0aGUgc3BlY2lmaWVkIGNvbXByZXNzaW9uIGFsZ29yaXRobS4KICAqLwotc3Rh dGljIGNmcCAqCi1jZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25z dCBjaGFyICptb2RlLAotCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKLQljZnAJCSAg ICpmcCA9IHBnX21hbGxvYzAoc2l6ZW9mKGNmcCkpOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI OwogCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0da SVApCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAh PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCi0JCXsKLQkJCS8qIHVzZXIgaGFzIHNwZWNpZmllZCBh IGNvbXByZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlIGl0ICovCi0JCQljaGFyCQlt b2RlX2NvbXByZXNzaW9uWzMyXTsKLQotCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6 ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCi0JCQkJCSBtb2RlLCBjb21wcmVzc2lvbl9z cGVjLmxldmVsKTsKLQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRv cGVuKGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZw ID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJ LyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCi0J CQlpZiAoZmQgPj0gMCkKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pkb3BlbihmZCwgbW9kZSk7 Ci0JCQllbHNlCi0JCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJ fQotCi0JCWlmIChmcC0+Y29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9l cnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1 aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5k aWYKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKGZkID49IDApCi0JCQlmcC0+dW5jb21wcmVzc2VkZnAg PSBmZG9wZW4oZmQsIG1vZGUpOwotCQllbHNlCi0JCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmb3Bl bihwYXRoLCBtb2RlKTsKKwlDRkggPSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc0ZpbGVIYW5k bGUpKTsKIAotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVf a2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KLQl9CisJaWYgKGNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJCUluaXRDb21wcmVzc05v bmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlJbml0Q29tcHJlc3NHemlwKENGSCwg Y29tcHJlc3Npb25fc3BlYyk7CiAKLQlyZXR1cm4gZnA7CisJcmV0dXJuIENGSDsKIH0KIAogLyoK LSAqIE9wZW5zIGZpbGUgJ3BhdGgnIGluICdtb2RlJyBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5l ZCBpbgotICogY29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRo ZSBjb21wcmVzc2lvbgotICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICog T3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQg J21vZGUnIHNob3VsZAorICogYmUgZWl0aGVyICJyIiBvciAicmIiLgogICoKLSAqIE9uIGZhaWx1 cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqLwotY2ZwICoK LWNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKLXsKLQlyZXR1cm4gY2Zv cGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLX0KLQotLyoK LSAqIEFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0 b3IsIGluICdtb2RlJwotICogYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4gY29tcHJlc3Np b25fc3BlYy4gVGhlIGNhbGxlciBtdXN0Ci0gKiB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24g aXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJ1aWxkLgorICogSWYgdGhlIGZpbGUgYXQgJ3Bh dGgnIGNvbnRhaW5zIHRoZSBzdWZmaXggb2YgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9k LAorICogY3VycmVudGx5IHRoaXMgaW5jbHVkZXMgb25seSAiLmd6IiwgdGhlbiB0aGlzIGNvbXBy ZXNzaW9uIHdpbGwgYmUgdXNlZAorICogdGhyb3VnaG91dC4gT3RoZXJ3aXNlIHRoZSBjb21wcmVz c2lvbiB3aWxsIGJlIGRlZmVycmVkIGJ5IGl0ZXJhdGl2ZWx5IHRyeWluZworICogdG8gb3BlbiB0 aGUgZmlsZSBhdCAncGF0aCcsIGZpcnN0IGFzIGlzLCB0aGVuIGJ5IGFwcGVuZGluZyBrbm93biBj b21wcmVzc2lvbgorICogc3VmZml4ZXMuIFNvIGlmIHlvdSBwYXNzICJmb28iIGFzICdwYXRoJywg dGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yCisgKiAiZm9vLmd6IiwgdHJ5aW5nIGluIHRo YXQgb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBj b2RlIGluIGVycm5vLgogICovCi1jZnAgKgotY2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1v ZGUsCi0JCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK K0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIHsKLQlyZXR1cm4gY2ZvcGVuX2ludGVy bmFsKE5VTEwsIGZkLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLX0KKwlDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCA9IE5VTEw7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkgICAqZm5hbWU7CisJ cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OwogCi1pbnQK LWNmcmVhZCh2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKQotewotCWludAkJCXJldDsKKwlj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CiAKLQlpZiAo c2l6ZSA9PSAwKQotCQlyZXR1cm4gMDsKKwlBc3NlcnQoc3RyY21wKG1vZGUsICJyIikgPT0gMCB8 fCBzdHJjbXAobW9kZSwgInJiIikgPT0gMCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAt PmNvbXByZXNzZWRmcCkKLQl7Ci0JCXJldCA9IGd6cmVhZChmcC0+Y29tcHJlc3NlZGZwLCBwdHIs IHNpemUpOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKGZwLT5jb21wcmVzc2VkZnApKQot CQl7Ci0JCQlpbnQJCQllcnJudW07Ci0JCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZw LT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCWZuYW1lID0gc3RyZHVwKHBhdGgpOwogCi0JCQlw Z19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJu dW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7Ci0JCX0KLQl9CisJaWYg KGhhc1N1ZmZpeChmbmFtZSwgIi5neiIpKQorCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJZWxzZQotI2VuZGlmCiAJewotCQlyZXQgPSBmcmVhZChw dHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAh ZmVvZihmcC0+dW5jb21wcmVzc2VkZnApKQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXBy ZXNzZWRmcCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotY2Z3cml0ZShjb25zdCB2b2lk ICpwdHIsIGludCBzaXplLCBjZnAgKmZwKQotewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+ Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3p3cml0ZShmcC0+Y29tcHJlc3NlZGZwLCBwdHIsIHNp emUpOwotCWVsc2UKLSNlbmRpZgotCQlyZXR1cm4gZndyaXRlKHB0ciwgMSwgc2l6ZSwgZnAtPnVu Y29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmdldGMoY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7 CisJCWJvb2wJCWV4aXN0czsKIAorCQlleGlzdHMgPSAoc3RhdChwYXRoLCAmc3QpID09IDApOwor CQkvKiBhdm9pZCB1bnVzZWQgd2FybmluZyBpZiBpdCBpcyBub3QgYnVpbGQgd2l0aCBjb21wcmVz c2lvbiAqLworCQlpZiAoZXhpc3RzKQorCQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQ R19DT01QUkVTU0lPTl9OT05FOwogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3Nl ZGZwKQotCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09 IEVPRikKKwkJaWYgKCFleGlzdHMpCiAJCXsKLQkJCWlmICghZ3plb2YoZnAtPmNvbXByZXNzZWRm cCkpCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBz dHJlcnJvcihlcnJubykpOwotCQkJZWxzZQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUp OworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwkJCWV4aXN0cyA9IChzdGF0 KGZuYW1lLCAmc3QpID09IDApOworCisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJfQotCX0KLQllbHNlCiAjZW5k aWYKLQl7Ci0JCXJldCA9IGZnZXRjKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgPT0g RU9GKQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7CiAJfQogCi0JcmV0 dXJuIHJldDsKLX0KLQotY2hhciAqCi1jZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVu KQotewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4g Z3pnZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVuKTsKLQllbHNlCi0jZW5kaWYKLQkJcmV0 dXJuIGZnZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21wcmVzc2VkZnApOwotfQotCi1pbnQKLWNmY2xv c2UoY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXN1bHQ7Ci0KLQlpZiAoZnAgPT0gTlVMTCkKLQl7Ci0J CWVycm5vID0gRUJBREY7Ci0JCXJldHVybiBFT0Y7Ci0JfQotI2lmZGVmIEhBVkVfTElCWgotCWlm IChmcC0+Y29tcHJlc3NlZGZwKQorCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJl c3Npb25fc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKSkK IAl7Ci0JCXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVz c2VkZnAgPSBOVUxMOworCQlmcmVlX2tlZXBfZXJybm8oQ0ZIKTsKKwkJQ0ZIID0gTlVMTDsKIAl9 Ci0JZWxzZQotI2VuZGlmCi0JewotCQlyZXN1bHQgPSBmY2xvc2UoZnAtPnVuY29tcHJlc3NlZGZw KTsKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKLQl9Ci0JZnJlZV9rZWVwX2Vycm5vKGZw KTsKKwlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4g Q0ZIOwogfQogCisvKgorICogQ2xvc2UgYW4gb3BlbiBmaWxlIGhhbmRsZSBhbmQgcmVsZWFzZSBp dHMgbWVtb3J5LgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybnMgYW4gZXJyb3IgdmFsdWUgYW5k IHNldHMgZXJybm8gYXBwcm9wcmlhdGVseS4KKyAqLwogaW50Ci1jZmVvZihjZnAgKmZwKQorRW5k Q29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewotI2lmZGVmIEhB VkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXBy ZXNzZWRmcCk7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZW9mKGZwLT51bmNvbXByZXNzZWRm cCk7Ci19CisJaW50CQkJcmV0ID0gMDsKIAotY29uc3QgY2hhciAqCi1nZXRfY2ZwX2Vycm9yKGNm cCAqZnApCi17Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0Jewot CQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXBy ZXNzZWRmcCwgJmVycm51bSk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhKQorCQlyZXQgPSBDRkgt PmNsb3NlX2Z1bmMoQ0ZIKTsKIAotCQlpZiAoZXJybnVtICE9IFpfRVJSTk8pCi0JCQlyZXR1cm4g ZXJybXNnOwotCX0KLSNlbmRpZgotCXJldHVybiBzdHJlcnJvcihlcnJubyk7Ci19CisJZnJlZV9r ZWVwX2Vycm5vKENGSCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBpbnQKLWhhc1N1ZmZp eChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KQotewotCWludAkJCWZp bGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKLQlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4o c3VmZml4KTsKLQotCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKLQkJcmV0dXJuIDA7Ci0K LQlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCi0JCQkJ ICBzdWZmaXgsCi0JCQkJICBzdWZmaXhsZW4pID09IDA7CisJcmV0dXJuIHJldDsKIH0KLQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oCmluZGV4IGE2Y2RmNTg4ZGQuLmE3YTRmZWMwMzYgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19pby5oCkBAIC0yMSw1MCArMjEsMTYwIEBACiAjZGVmaW5lIFpMSUJfT1VUX1NJ WkUJNDA5NgogI2RlZmluZSBaTElCX0lOX1NJWkUJNDA5NgogCi0vKiBQcm90b3R5cGUgZm9yIGNh bGxiYWNrIGZ1bmN0aW9uIHRvIFdyaXRlRGF0YVRvQXJjaGl2ZSgpICovCisvKgorICogUHJvdG90 eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGluIHdyaXRlRGF0YSgpCisgKi8KIHR5cGVk ZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYs IHNpemVfdCBsZW4pOwogCiAvKgotICogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0 byBSZWFkRGF0YUZyb21BcmNoaXZlKCkKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rp b24gdXNlZCBpbiByZWFkRGF0YSgpCiAgKgotICogUmVhZERhdGFGcm9tQXJjaGl2ZSB3aWxsIGNh bGwgdGhlIHJlYWQgZnVuY3Rpb24gcmVwZWF0ZWRseSwgdW50aWwgaXQKLSAqIHJldHVybnMgMCB0 byBzaWduYWwgRU9GLiBSZWFkRGF0YUZyb21BcmNoaXZlIHBhc3NlcyBhIGJ1ZmZlciB0byByZWFk IHRoZQotICogZGF0YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aCAqYnVmbGVuLiBJZiB0aGF0J3Mg bm90IGJpZyBlbm91Z2ggZm9yIHRoZQotICogY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNhbiBmcmVl KCkgaXQgYW5kIG1hbGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZQotICogbmV3IGJ1ZmZl ciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQgKmJ1Zmxlbi4KKyAqIHJlYWREYXRhIHdpbGwgY2Fs bCB0aGUgcmVhZCBmdW5jdGlvbiByZXBlYXRlZGx5LCB1bnRpbCBpdCByZXR1cm5zIDAgdG8gc2ln bmFsCisgKiBFT0YuIHJlYWREYXRhIHBhc3NlcyBhIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRhIGlu dG8gaW4gKmJ1Ziwgb2YgbGVuZ3RoCisgKiAqYnVmbGVuLiBJZiB0aGF0J3Mgbm90IGJpZyBlbm91 Z2ggZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgaXQgY2FuIGZyZWUoKSBpdAorICogYW5kIG1h bGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZSBuZXcgYnVmZmVyIGFuZCBpdHMgc2l6ZSBp biAqYnVmIGFuZAorICogKmJ1Zmxlbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0 ZXMgcmVhZCBpbnRvICpidWYsIG9yIDAgb24gRU9GLgogICovCiB0eXBlZGVmIHNpemVfdCAoKlJl YWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsK IAotLyogc3RydWN0IGRlZmluaXRpb24gYXBwZWFycyBpbiBjb21wcmVzc19pby5jICovCiB0eXBl ZGVmIHN0cnVjdCBDb21wcmVzc29yU3RhdGUgQ29tcHJlc3NvclN0YXRlOworc3RydWN0IENvbXBy ZXNzb3JTdGF0ZQoreworCS8qCisJICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhl IGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKKwkgKiBvdXQgd2l0aCBhaHdy aXRlKCkuCisJICovCisJdm9pZAkJKCpyZWFkRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKKworCS8qCisJICogQ29tcHJlc3MgYW5kIHdyaXRlIGRhdGEgdG8g dGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgorCSAqLworCXZvaWQJCSgqd3JpdGVEYXRh KSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CisKKwkvKgorCSAqIEVuZCBjb21wcmVzc2lvbiBh bmQgZmx1c2ggaW50ZXJuYWwgYnVmZmVycyBpZiBhbnkuCisJICovCisJdm9pZAkJKCplbmQpIChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENhbGxi YWNrIGZ1bmN0aW9uIHRvIHJlYWQgZnJvbSBhbiBhbHJlYWR5IHByb2Nlc3NlZCBpbnB1dCBzdHJl YW0KKwkgKi8KKwlSZWFkRnVuYwlyZWFkRjsKKworCS8qCisJICogQ2FsbGJhY2sgZnVuY3Rpb24g dG8gd3JpdGUgYW4gYWxyZWFkeSBwcm9jZXNzZWQgY2h1bmsgb2YgZGF0YS4KKwkgKi8KKwlXcml0 ZUZ1bmMJd3JpdGVGOworCisJLyoKKwkgKiBDb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uIGZvciB0 aGlzIHN0YXRlLgorCSAqLworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYzsKKworCS8qCisJICogUHJpdmF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGNvbXByZXNz b3IuCisJICovCisJdm9pZAkgICAqcHJpdmF0ZV9kYXRhOworfTsKIAogZXh0ZXJuIENvbXByZXNz b3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJCQkgICBSZWFkRnVuYyByZWFkRiwKIAkJCQkJ CQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKTsKLWV4dGVybiB2b2lkIFJlYWREYXRhRnJvbUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgsCi0JCQkJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYywKLQkJCQkJCQkJUmVhZEZ1bmMgcmVhZEYpOwotZXh0ZXJu IHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAotCQkJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKIGV4dGVy biB2b2lkIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpOwogCisvKgorICogQ29tcHJlc3MgRmlsZSBIYW5kbGUKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg Q29tcHJlc3NGaWxlSGFuZGxlIENvbXByZXNzRmlsZUhhbmRsZTsKKworc3RydWN0IENvbXByZXNz RmlsZUhhbmRsZQoreworCS8qCisJICogT3BlbiBhIGZpbGUgaW4gbW9kZS4KKwkgKgorCSAqIFBh c3MgZWl0aGVyICdwYXRoJyBvciAnZmQnIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgZmlsZXBhdGgg b3IgYSBmaWxlCisJICogZGVzY3JpcHRvciBpcyBhdmFpbGFibGUuICdtb2RlJyBjYW4gYmUgb25l IG9mICdyJywgJ3JiJywgJ3cnLCAnd2InLAorCSAqICdhJywgYW5kICdhYicuIFJlcXVyaXJlcyBh biBhbHJlYWR5IGluaXRpYWxpemVkIENvbXByZXNzRmlsZUhhbmRsZS4KKwkgKi8KKwlpbnQJCQko Km9wZW5fZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwK KwkJCQkJCQkgIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogT3BlbiBhIGZp bGUgZm9yIHdyaXRpbmcuCisJICoKKwkgKiAnbW9kZScgY2FuIGJlIG9uZSBvZiAnJ3cnLCAnd2In LCAnYScsIGFuZCAnYWInLiBSZXF1cmlyZXMgYW4gYWxyZWFkeQorCSAqIGluaXRpYWxpemVkIENv bXByZXNzRmlsZUhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKm9wZW5fd3JpdGVfZnVuYykgKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJCQlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCk7CiAKLXR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CisJLyoKKwkgKiBSZWFkICdzaXpl JyBieXRlcyBvZiBkYXRhIGZyb20gdGhlIGZpbGUgYW5kIHN0b3JlIHRoZW0gaW50byAncHRyJy4K KwkgKi8KKwlzaXplX3QJCSgqcmVhZF9mdW5jKSAodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29t cHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi1leHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAq cGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2Zkb3BlbihpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsCi0JCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlKTsKLWV4dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gaW50CWNmcmVhZCh2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Z3cml0ZShjb25zdCB2b2lkICpwdHIs IGludCBzaXplLCBjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2ZnZXRjKGNmcCAqZnApOwotZXh0ZXJu IGNoYXIgKmNmZ2V0cyhjZnAgKmZwLCBjaGFyICpidWYsIGludCBsZW4pOwotZXh0ZXJuIGludAlj ZmNsb3NlKGNmcCAqZnApOwotZXh0ZXJuIGludAljZmVvZihjZnAgKmZwKTsKLWV4dGVybiBjb25z dCBjaGFyICpnZXRfY2ZwX2Vycm9yKGNmcCAqZnApOworCS8qCisJICogV3JpdGUgJ3NpemUnIGJ5 dGVzIG9mIGRhdGEgaW50byB0aGUgZmlsZSBmcm9tICdwdHInLgorCSAqLworCXNpemVfdAkJKCp3 cml0ZV9mdW5jKSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJCQkgICBzdHJ1 Y3QgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCisJLyoKKwkgKiBSZWFkIGF0IG1vc3Qgc2l6 ZSAtIDEgY2hhcmFjdGVycyBmcm9tIHRoZSBjb21wcmVzcyBmaWxlIGhhbmRsZSBpbnRvCisJICog J3MnLgorCSAqCisJICogU3RvcCBpZiBhbiBFT0Ygb3IgYSBuZXdsaW5lIGlzIGZvdW5kIGZpcnN0 LiAncycgaXMgYWx3YXlzIG51bGwKKwkgKiB0ZXJtaW5hdGVkIGFuZCBjb250YWlucyB0aGUgbmV3 bGluZSBpZiBpdCB3YXMgZm91bmQuCisJICovCisJY2hhcgkgICAqKCpnZXRzX2Z1bmMpIChjaGFy ICpzLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBSZWFk IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBjb21wcmVzcyBmaWxlIGhhbmRsZSBhcyAndW5z aWduZWQKKwkgKiBjaGFyJyBjYXN0IGludG8gJ2ludCcuCisJICovCisJaW50CQkJKCpnZXRjX2Z1 bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIFRlc3QgaWYgRU9GIGlz IHJlYWNoZWQgaW4gdGhlIGNvbXByZXNzIGZpbGUgaGFuZGxlLgorCSAqLworCWludAkJCSgqZW9m X2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIENsb3NlIGFuIG9w ZW4gZmlsZSBoYW5kbGUuCisJICovCisJaW50CQkJKCpjbG9zZV9mdW5jKSAoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBHZXQgYSBwb2ludGVyIHRvIGEgc3RyaW5nIHRoYXQg ZGVzY3JpYmVzIGFuIGVycm9yIHRoYXQgb2NjdXJlZCBkdXJpbmcgYQorCSAqIGNvbXByZXNzIGZp bGUgaGFuZGxlIG9wZXJhdGlvbi4KKwkgKi8KKwljb25zdCBjaGFyICooKmdldF9lcnJvcl9mdW5j KSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBDb21wcmVzc2lvbiBzcGVj aWZpY2F0aW9uIGZvciB0aGlzIGZpbGUgaGFuZGxlLgorCSAqLworCXBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKKworCS8qCisJICogUHJpdmF0ZSBkYXRhIHRvIGJl IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuCisJICovCisJdm9pZAkgICAqcHJpdmF0ZV9kYXRhOwor fTsKKworLyoKKyAqIEluaXRpYWxpemUgYSBjb21wcmVzcyBmaWxlIGhhbmRsZSB3aXRoIHRoZSBy ZXF1ZXN0ZWQgY29tcHJlc3Npb24uCisgKi8KK2V4dGVybiBDb21wcmVzc0ZpbGVIYW5kbGUgKklu aXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKKworLyoKKyAqIEluaXRpYWxpemUgYSBjb21wcmVzcyBmaWxlIHN0cmVh bS4gRGVmZmVyIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKyAqIGZyb20gJ3BhdGgnLCBlaXRo ZXIgYnkgZXhhbWluaW5nIGl0cyBzdWZmaXggb3IgYnkgYXBwZW5kaW5nIHRoZSBzdXBwb3J0ZWQK KyAqIHN1ZmZpeGVzIGluICdwYXRoJy4KKyAqLworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAq SW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCQkJ CQkJCQkJCSAgY29uc3QgY2hhciAqbW9kZSk7CitleHRlcm4gaW50CUVuZENvbXByZXNzRmlsZUhh bmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9u ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNhMzZmOTQ4OTgKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jCkBAIC0wLDAg KzEsMjA2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19ub25lLmMKKyAq CSBSb3V0aW5lcyBmb3IgYXJjaGl2ZXJzIHRvIHJlYWQgb3Igd3JpdGUgYW4gdW5jb21wcmVzc2Vk IHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVk ZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjb21wcmVzc19ub25lLmgiCisjaW5jbHVkZSAicGdf YmFja3VwX3V0aWxzLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3Nv ciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBQcml2YXRlIHJv dXRpbmVzCisgKi8KKworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCXNpemVfdAkJY250OworCWNo YXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09V VF9TSVpFKTsKKwlidWZsZW4gPSBaTElCX09VVF9TSVpFOworCisJd2hpbGUgKChjbnQgPSBjcy0+ cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFI KTsKKwl9CisKKwlmcmVlKGJ1Zik7Cit9CisKKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJj aGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCSAg IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCWNzLT53cml0ZUYoQUgsIGRhdGEs IGRMZW4pOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nvck5vbmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJLyogbm8gb3AgKi8KK30KKworLyoKKyAq IFB1YmxpYyBpbnRlcmZhY2UKKyAqLworCit2b2lkCitJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJl c3NvclN0YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZU5v bmU7CisJY3MtPndyaXRlRGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmU7CisJY3MtPmVuZCA9 IEVuZENvbXByZXNzb3JOb25lOworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3MgRmls ZSBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBQcml2YXRlIHJv dXRpbmVzCisgKi8KKworc3RhdGljIHNpemVfdAorcmVhZF9ub25lKHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUZJTEUJICAgKmZwID0gKEZJTEUg KikgQ0ZILT5wcml2YXRlX2RhdGE7CisJc2l6ZV90CQlyZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKQor CQlyZXR1cm4gMDsKKworCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnApOworCWlmIChyZXQg IT0gc2l6ZSAmJiAhZmVvZihmcCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlu cHV0IGZpbGU6ICVzIiwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBzaXplX3QKK3dyaXRlX25vbmUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNp emUsIChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIg KgorZ2V0X2Vycm9yX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJcmV0dXJuIHN0 cmVycm9yKGVycm5vKTsKK30KKworc3RhdGljIGNoYXIgKgorZ2V0c19ub25lKGNoYXIgKnB0ciwg aW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBmZ2V0cyhwdHIs IHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGludAorZ2V0 Y19ub25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUZJTEUJICAgKmZwID0gKEZJTEUg KikgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gZmdldGMoZnApOwor CWlmIChyZXQgPT0gRU9GKQorCXsKKwkJaWYgKCFmZW9mKGZwKSkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxz ZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZp bGUiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjbG9zZV9ub25lKENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUZJTEUJICAgKmZwID0gKEZJTEUgKikgQ0ZILT5w cml2YXRlX2RhdGE7CisJaW50CQkJcmV0ID0gMDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gTlVM TDsKKworCWlmIChmcCkKKwkJcmV0ID0gZmNsb3NlKGZwKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQKK2VvZl9ub25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVy biBmZW9mKChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGludAorb3Bl bl9ub25lKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJQXNzZXJ0KENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwp OworCisJaWYgKGZkID49IDApCisJCUNGSC0+cHJpdmF0ZV9kYXRhID0gZmRvcGVuKGR1cChmZCks IG1vZGUpOworCWVsc2UKKwkJQ0ZILT5wcml2YXRlX2RhdGEgPSBmb3BlbihwYXRoLCBtb2RlKTsK KworCWlmIChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50CitvcGVuX3dyaXRlX25vbmUoY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJQXNzZXJ0KENG SC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBmb3Blbihw YXRoLCBtb2RlKTsKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDE7 CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFB1YmxpYyBpbnRlcmZhY2UKKyAqLworCit2b2lk CitJbml0Q29tcHJlc3NOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCSBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVu X2Z1bmMgPSBvcGVuX25vbmU7CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBvcGVuX3dyaXRlX25v bmU7CisJQ0ZILT5yZWFkX2Z1bmMgPSByZWFkX25vbmU7CisJQ0ZILT53cml0ZV9mdW5jID0gd3Jp dGVfbm9uZTsKKwlDRkgtPmdldHNfZnVuYyA9IGdldHNfbm9uZTsKKwlDRkgtPmdldGNfZnVuYyA9 IGdldGNfbm9uZTsKKwlDRkgtPmNsb3NlX2Z1bmMgPSBjbG9zZV9ub25lOworCUNGSC0+ZW9mX2Z1 bmMgPSBlb2Zfbm9uZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gZ2V0X2Vycm9yX25vbmU7CisK KwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3Nfbm9uZS5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wZTcwNGM1NDkxCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApAQCAtMCwwICsxLDI0IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19ub25lLmgKKyAqCSBVbmNvbXBy ZXNzZWQgaW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBfQ09NUFJFU1NfTk9ORV9IXworI2RlZmluZSBfQ09NUFJFU1NfTk9ORV9IXworCisj aW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JOb25l KENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc05vbmUo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1Nf Tk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3Jj L2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGNhNjJmOWEzNzQuLjg0ZTlmMGRlZmEgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQKQEAgLTEsNyArMSw5IEBACiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDIz LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBwZ19kdW1wX2NvbW1vbl9z b3VyY2VzID0gZmlsZXMoCisgICdjb21wcmVzc19nemlwLmMnLAogICAnY29tcHJlc3NfaW8uYycs CisgICdjb21wcmVzc19ub25lLmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycs CiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKaW5kZXggZGRiNzEyZDA0Mi4uZmViZGQxNDg4NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtOTUsOCArOTUsOCBAQCBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNo aXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUg KkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJICBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotc3RhdGljIGNmcCAq U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKK3N0YXRpYyBDb21wcmVzc0Zp bGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVz dG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91 dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgs IFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3Rv Y19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC0yNzIsNyArMjcyLDcgQEAg Q2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KIAll cnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShBSC0+T0YpOworCXJlcyA9IEVuZENvbXByZXNzRmls ZUhhbmRsZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIFJlc3RvcmVBcmNo aXZlKEFyY2hpdmUgKkFIWCkKIAlib29sCQlwYXJhbGxlbF9tb2RlOwogCWJvb2wJCXN1cHBvcnRz X2NvbXByZXNzaW9uOwogCVRvY0VudHJ5ICAgKnRlOwotCWNmcAkJICAgKnNhdjsKKwlDb21wcmVz c0ZpbGVIYW5kbGUgKnNhdjsKIAogCUFILT5zdGFnZSA9IFNUQUdFX0lOSVRJQUxJWklORzsKIApA QCAtMTEzNSw3ICsxMTM1LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NF bnRyeSAgICp0ZTsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9z cGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJTZWN0aW9uOwotCWNmcAkJICAgKnNhdjsKKwlDb21w cmVzc0ZpbGVIYW5kbGUgKnNhdjsKIAljb25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1w X3N0cls2NF07CiAKQEAgLTExNTEsOSArMTE1MSwxMCBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2 ZSAqQUhYKQogCQlzdHJjcHkoc3RhbXBfc3RyLCAiW3Vua25vd25dIik7CiAKIAlhaHByaW50ZihB SCwgIjtcbjsgQXJjaGl2ZSBjcmVhdGVkIGF0ICVzXG4iLCBzdGFtcF9zdHIpOwotCWFocHJpbnRm KEFILCAiOyAgICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21w cmVzc2lvbjogJWRcbiIsCisJYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBU T0MgRW50cmllczogJWRcbjsgICAgIENvbXByZXNzaW9uOiAlc1xuIiwKIAkJCSBzYW5pdGl6ZV9s aW5lKEFILT5hcmNoZGJuYW1lLCBmYWxzZSksCi0JCQkgQUgtPnRvY0NvdW50LCBBSC0+Y29tcHJl c3Npb25fc3BlYy5sZXZlbCk7CisJCQkgQUgtPnRvY0NvdW50LAorCQkJIGdldF9jb21wcmVzc19h bGdvcml0aG1fbmFtZShBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKIAogCXN3aXRj aCAoQUgtPmZvcm1hdCkKIAl7CkBAIC0xNTEwLDYgKzE1MTEsNyBAQCBzdGF0aWMgdm9pZAogU2V0 T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7CisJQ29tcHJl c3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKIAlpbnQJCQlmbiA9IC0xOwog CkBAIC0xNTMyLDMzICsxNTM0LDMyIEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQlpZiAo Zm4gPj0gMCkKLQkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc2lvbl9z cGVjKTsKLQllbHNlCi0JCUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Np b25fc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVj KTsKIAotCWlmICghQUgtPk9GKQorCWlmIChDRkgtPm9wZW5fZnVuYyhmaWxlbmFtZSwgZm4sIG1v ZGUsIENGSCkpCiAJewogCQlpZiAoZmlsZW5hbWUpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIAkJZWxzZQogCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlOiAlbSIpOwogCX0KKworCUFILT5PRiA9IENG SDsKIH0KIAotc3RhdGljIGNmcCAqCitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICoKIFNhdmVP dXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JcmV0dXJuIChjZnAgKikgQUgtPk9GOworCXJl dHVybiAoQ29tcHJlc3NGaWxlSGFuZGxlICopIEFILT5PRjsKIH0KIAogc3RhdGljIHZvaWQKLVJl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCitSZXN0b3Jl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0 KQogewogCWludAkJCXJlczsKIAogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7 CisJcmVzID0gRW5kQ29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDAp CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0xNjk3 LDcgKzE2OTgsMTEgQEAgYWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXpl X3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgp KQogCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChj b25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0JCWJ5dGVzX3dyaXR0ZW4g PSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5tZW1iLCBBSC0+T0YpOworCXsKKwkJQ29tcHJlc3NGaWxl SGFuZGxlICpDRkggPSAoQ29tcHJlc3NGaWxlSGFuZGxlICopIEFILT5PRjsKKworCQlieXRlc193 cml0dGVuID0gQ0ZILT53cml0ZV9mdW5jKHB0ciwgc2l6ZSAqIG5tZW1iLCBDRkgpOworCX0KIAog CWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsK QEAgLTIwMzksNiArMjA0NCwxOCBAQCBSZWFkU3RyKEFyY2hpdmVIYW5kbGUgKkFIKQogCXJldHVy biBidWY7CiB9CiAKK3N0YXRpYyBib29sCitfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNo YXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hh cgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8l cyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBu YW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9 PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCiBzdGF0aWMgaW50CiBfZGlzY292ZXJB cmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogewpAQCAtMjA2OSwyNiArMjA4NiwxMiBA QCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCQkgKi8KIAkJaWYg KHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJewot CQkJY2hhcgkJYnVmW01BWFBHUEFUSF07Ci0KLQkJCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFU SCwgIiVzL3RvYy5kYXQiLCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgi ZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJ CWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0J CQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVj dG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQi KSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KLQogI2lmZGVmIEhBVkVfTElCWgotCQkJ aWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRhdC5neiIsIEFILT5mU3BlYykg Pj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIl c1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYg U19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9y eTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQuZ3oi KSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KICNlbmRpZgogCQkJcGdfZmF0YWwoImRp cmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0 b2MuZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CkBAIC0yMTg2LDYg KzIxODksNyBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZv cm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJj aGl2ZUhhbmRsZSAqQUg7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1Zygi YWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCkBAIC0yMjQxLDcgKzIyNDUsMTAgQEAg X2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAog CiAJLyogT3BlbiBzdGRvdXQgd2l0aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRs ZSAqLwogCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7 Ci0JQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91dCkpLCBQR19CSU5BUllfQSwgb3V0 X2NvbXByZXNzX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUob3V0X2NvbXBy ZXNzX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhOVUxMLCBmaWxlbm8oc3Rkb3V0KSwgUEdf QklOQVJZX0EsIENGSCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBzdGRvdXQgZm9yIGFw cGVuZGluZzogJW0iKTsKKwlBSC0+T0YgPSBDRkg7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdl IG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBA IC0zNjU0LDEyICszNjYxLDcgQEAgV3JpdGVIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCUFILT5X cml0ZUJ5dGVQdHIoQUgsIEFILT5pbnRTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+ b2ZmU2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmZvcm1hdCk7Ci0JLyoKLQkgKiBG b3Igbm93IHRoZSBjb21wcmVzc2lvbiB0eXBlIGlzIGltcGxpZWQgYnkgdGhlIGxldmVsLiAgVGhp cyB3aWxsIG5lZWQKLQkgKiB0byBjaGFuZ2Ugb25jZSBzdXBwb3J0IGZvciBtb3JlIGNvbXByZXNz aW9uIGFsZ29yaXRobXMgaXMgYWRkZWQsCi0JICogcmVxdWlyaW5nIGEgZm9ybWF0IGJ1bXAuCi0J ICovCi0JV3JpdGVJbnQoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwlBSC0+V3Jp dGVCeXRlUHRyKEFILCBBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pOwogCWNydG0gPSAq bG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fc2VjKTsK IAlXcml0ZUludChBSCwgY3J0bS50bV9taW4pOwpAQCAtMzczMCwxMCArMzczMiwxMSBAQCBSZWFk SGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAkJcGdfZmF0YWwoImV4cGVjdGVkIGZvcm1hdCAoJWQp IGRpZmZlcnMgZnJvbSBmb3JtYXQgZm91bmQgaW4gZmlsZSAoJWQpIiwKIAkJCQkgQUgtPmZvcm1h dCwgZm10KTsKIAotCS8qIEd1ZXNzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhl IGxldmVsICovCi0JQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKLQlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikKKwlpZiAoQUgtPnZlcnNp b24gPj0gS19WRVJTXzFfMTUpCisJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IEFI LT5SZWFkQnl0ZVB0cihBSCk7CisJZWxzZSBpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikK IAl7CisJCS8qIEd1ZXNzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVs ICovCiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVSU18xXzQpCiAJCQlBSC0+Y29tcHJlc3Npb25f c3BlYy5sZXZlbCA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CiAJCWVsc2UKQEAgLTM3NDUsMTAgKzM3 NDgsMTcgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCQlBSC0+Y29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCisJaWYgKEFILT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQorCXsKKwkJ Ym9vbAkJdW5zdXBwb3J0ZWQgPSBmYWxzZTsKKwogI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoQUgt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCXBn X2ZhdGFsKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIik7CisJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJCXVuc3VwcG9ydGVkID0gdHJ1ZTsK ICNlbmRpZgorCQlpZiAodW5zdXBwb3J0ZWQpCisJCQlwZ19mYXRhbCgiYXJjaGl2ZSBpcyBjb21w cmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biIpOworCX0KIAogCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV80KQogCXsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCA0NzI1ZTQ5NzQ3Li4xOGIzOGMxN2FiIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC02NSwxMCArNjUsMTMgQEAKICNkZWZp bmUgS19WRVJTXzFfMTMgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTMsIDApCS8qIGNoYW5nZSBz ZWFyY2hfcGF0aAogCQkJCQkJCQkJCQkJCSAqIGJlaGF2aW9yICovCiAjZGVmaW5lIEtfVkVSU18x XzE0IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE0LCAwKQkvKiBhZGQgdGFibGVhbSAqLworI2Rl ZmluZSBLX1ZFUlNfMV8xNSBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxNSwgMCkJLyogYWRkCisJ CQkJCQkJCQkJCQkJICogY29tcHJlc3Npb25fYWxnb3JpdGhtCisJCQkJCQkJCQkJCQkJICogaW4g aGVhZGVyICovCiAKIC8qIEN1cnJlbnQgYXJjaGl2ZSB2ZXJzaW9uIG51bWJlciAodGhlIGZvcm1h dCB3ZSBjYW4gb3V0cHV0KSAqLwogI2RlZmluZSBLX1ZFUlNfTUFKT1IgMQotI2RlZmluZSBLX1ZF UlNfTUlOT1IgMTQKKyNkZWZpbmUgS19WRVJTX01JTk9SIDE1CiAjZGVmaW5lIEtfVkVSU19SRVYg MAogI2RlZmluZSBLX1ZFUlNfU0VMRiBNQUtFX0FSQ0hJVkVfVkVSU0lPTihLX1ZFUlNfTUFKT1Is IEtfVkVSU19NSU5PUiwgS19WRVJTX1JFVikKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9jdXN0b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMK aW5kZXggZDFlNTQ2NDRhOS4uNTEyYWIwNDNhZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9jdXN0b20uYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3Rv bS5jCkBAIC0yOTgsNyArMjk4LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9j RW50cnkgKnRlKQogCV9Xcml0ZUJ5dGUoQUgsIEJMS19EQVRBKTsJLyogQmxvY2sgdHlwZSAqLwog CVdyaXRlSW50KEFILCB0ZS0+ZHVtcElkKTsJLyogRm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4 LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdy aXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25f c3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAog LyoKQEAgLTMxNywxNSArMzE5LDE1IEBAIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogCUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgt PmNzOwogCiAJaWYgKGRMZW4gPiAwKQotCQkvKiBXcml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5h bGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KLQkJV3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywg ZGF0YSwgZExlbik7CisJCS8qIHdyaXRlRGF0YSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVy cm9ycyAqLworCQljcy0+d3JpdGVEYXRhKEFILCBjcywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAg KiBDYWxsZWQgYnkgdGhlIGFyY2hpdmVyIHdoZW4gYSBkdW1wZXIncyAnRGF0YUR1bXBlcicgcm91 dGluZSBoYXMKICAqIGZpbmlzaGVkLgogICoKLSAqIE9wdGlvbmFsLgorICogTWFuZGF0b3J5Lgog ICovCiBzdGF0aWMgdm9pZAogX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0 ZSkKQEAgLTMzMyw2ICszMzUsOCBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRh OwogCiAJRW5kQ29tcHJlc3NvcihBSCwgY3R4LT5jcyk7CisJY3R4LT5jcyA9IE5VTEw7CisKIAkv KiBTZW5kIHRoZSBlbmQgbWFya2VyICovCiAJV3JpdGVJbnQoQUgsIDApOwogfQpAQCAtMzc3LDcg KzM4MSw5IEBAIF9TdGFydExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBv aWQpCiAKIAlXcml0ZUludChBSCwgb2lkKTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNz b3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBB bGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAor CQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBA IF9QcmludFRvY0RhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2 b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hp dmUoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNz b3JTdGF0ZSAqY3M7CisKKwljcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25f c3BlYywKKwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMsIE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwg Y3MpOworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCmluZGV4IDY4MDBjM2NjZWUuLmEyZjg4OTk1YzAgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYwpAQCAtNTAsOSArNTAsOCBAQCB0eXBl ZGVmIHN0cnVjdAogCSAqLwogCWNoYXIJICAgKmRpcmVjdG9yeTsKIAotCWNmcAkJICAgKmRhdGFG SDsJCQkvKiBjdXJyZW50bHkgb3BlbiBkYXRhIGZpbGUgKi8KLQotCWNmcAkJICAgKkxPc1RvY0ZI OwkJLyogZmlsZSBoYW5kbGUgZm9yIGJsb2JzLnRvYyAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAq ZGF0YUZIOyAvKiBjdXJyZW50bHkgb3BlbiBkYXRhIGZpbGUgKi8KKwlDb21wcmVzc0ZpbGVIYW5k bGUgKkxPc1RvY0ZIOyAvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCiAJUGFyYWxsZWxT dGF0ZSAqcHN0YXRlOwkJLyogZm9yIHBhcmFsbGVsIGJhY2t1cCAvIHJlc3RvcmUgKi8KIH0gbGNs Q29udGV4dDsKIApAQCAtMTk4LDExICsxOTcsMTEgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5 KEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAl7CQkJCQkJCS8qIFJlYWQgTW9kZSAqLwogCQlj aGFyCQlmbmFtZVtNQVhQR1BBVEhdOwotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxl SGFuZGxlICp0b2NGSDsKIAogCQlzZXRGaWxlUGF0aChBSCwgZm5hbWUsICJ0b2MuZGF0Iik7CiAK LQkJdG9jRkggPSBjZm9wZW5fcmVhZChmbmFtZSwgUEdfQklOQVJZX1IpOworCQl0b2NGSCA9IElu aXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShmbmFtZSwgUEdfQklOQVJZX1IpOwogCQlpZiAo dG9jRkggPT0gTlVMTCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwi JXNcIjogJW0iLCBmbmFtZSk7CiAKQEAgLTIxOCw3ICsyMTcsNyBAQCBJbml0QXJjaGl2ZUZtdF9E aXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCVJlYWRUb2MoQUgpOwogCiAJCS8qIE5vdGhp bmcgZWxzZSBpbiB0aGUgZmlsZSwgc28gY2xvc2UgaXQgYWdhaW4uLi4gKi8KLQkJaWYgKGNmY2xv c2UodG9jRkgpICE9IDApCisJCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDAp CiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQljdHgtPmRh dGFGSCA9IE5VTEw7CiAJfQpAQCAtMzI3LDkgKzMyNiw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0eC0+ ZmlsZW5hbWUpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFS WV9XLAotCQkJCQkJCSAgIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQlpZiAoY3R4LT5kYXRhRkgg PT0gTlVMTCkKKwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXBy ZXNzaW9uX3NwZWMpOworCisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUs IFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBv dXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC0zNDYsMTUgKzM0NSwxNiBA QCBzdGF0aWMgdm9pZAogX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGRMZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikg QUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsK IAogCWVycm5vID0gMDsKLQlpZiAoZExlbiA+IDAgJiYgY2Z3cml0ZShkYXRhLCBkTGVuLCBjdHgt PmRhdGFGSCkgIT0gZExlbikKKwlpZiAoZExlbiA+IDAgJiYgQ0ZILT53cml0ZV9mdW5jKGRhdGEs IGRMZW4sIENGSCkgIT0gZExlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8s IGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJ CQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQg ZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+ Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC0zNzAsNyArMzcwLDcgQEAgX0VuZERh dGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCS8qIENsb3NlIHRoZSBmaWxlICovCi0J aWYgKGNmY2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRs ZShjdHgtPmRhdGFGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZp bGU6ICVtIik7CiAKIAljdHgtPmRhdGFGSCA9IE5VTEw7CkBAIC0zODUsMjYgKzM4NSwyNSBAQCBf UHJpbnRGaWxlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAqZmlsZW5hbWUpCiAJc2l6ZV90 CQljbnQ7CiAJY2hhcgkgICAqYnVmOwogCXNpemVfdAkJYnVmbGVuOwotCWNmcAkJICAgKmNmcDsK KwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybjsK IAotCWNmcCA9IGNmb3Blbl9yZWFkKGZpbGVuYW1lLCBQR19CSU5BUllfUik7Ci0KLQlpZiAoIWNm cCkKKwlDRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZmlsZW5hbWUsIFBHX0JJ TkFSWV9SKTsKKwlpZiAoIUNGSCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZp bGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIAogCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9T SVpFKTsKIAlidWZsZW4gPSBaTElCX09VVF9TSVpFOwogCi0Jd2hpbGUgKChjbnQgPSBjZnJlYWQo YnVmLCBidWZsZW4sIGNmcCkpKQorCXdoaWxlICgoY250ID0gQ0ZILT5yZWFkX2Z1bmMoYnVmLCBi dWZsZW4sIENGSCkpKQogCXsKIAkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOwogCX0KIAogCWZy ZWUoYnVmKTsKLQlpZiAoY2ZjbG9zZShjZnApICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhh bmRsZShDRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGF0YSBmaWxlIFwi JXNcIjogJW0iLCBmaWxlbmFtZSk7CiB9CiAKQEAgLTQzNSw2ICs0MzQsNyBAQCBfTG9hZExPcyhB cmNoaXZlSGFuZGxlICpBSCkKIHsKIAlPaWQJCQlvaWQ7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxj bENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJ Y2hhcgkJdG9jZm5hbWVbTUFYUEdQQVRIXTsKIAljaGFyCQlsaW5lW01BWFBHUEFUSF07CiAKQEAg LTQ0MiwxNCArNDQyLDE0IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJc2V0Rmls ZVBhdGgoQUgsIHRvY2ZuYW1lLCAiYmxvYnMudG9jIik7CiAKLQljdHgtPkxPc1RvY0ZIID0gY2Zv cGVuX3JlYWQodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsKKwlDRkggPSBjdHgtPkxPc1RvY0ZIID0g SW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CiAK IAlpZiAoY3R4LT5MT3NUb2NGSCA9PSBOVUxMKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g bGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiBmb3IgaW5wdXQ6ICVtIiwKIAkJCQkgdG9jZm5h bWUpOwogCiAJLyogUmVhZCB0aGUgTE9zIFRPQyBmaWxlIGxpbmUtYnktbGluZSwgYW5kIHByb2Nl c3MgZWFjaCBMTyAqLwotCXdoaWxlICgoY2ZnZXRzKGN0eC0+TE9zVG9jRkgsIGxpbmUsIE1BWFBH UEFUSCkpICE9IE5VTEwpCisJd2hpbGUgKChDRkgtPmdldHNfZnVuYyhsaW5lLCBNQVhQR1BBVEgs IENGSCkpICE9IE5VTEwpCiAJewogCQljaGFyCQlsb2ZuYW1lW01BWFBHUEFUSCArIDFdOwogCQlj aGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC00NjQsMTEgKzQ2NCwxMSBAQCBfTG9hZExPcyhBcmNo aXZlSGFuZGxlICpBSCkKIAkJX1ByaW50RmlsZURhdGEoQUgsIHBhdGgpOwogCQlFbmRSZXN0b3Jl TE8oQUgsIG9pZCk7CiAJfQotCWlmICghY2Zlb2YoY3R4LT5MT3NUb2NGSCkpCisJaWYgKCFDRkgt PmVvZl9mdW5jKENGSCkpCiAJCXBnX2ZhdGFsKCJlcnJvciByZWFkaW5nIGxhcmdlIG9iamVjdCBU T0MgZmlsZSBcIiVzXCIiLAogCQkJCSB0b2NmbmFtZSk7CiAKLQlpZiAoY2ZjbG9zZShjdHgtPkxP c1RvY0ZIKSAhPSAwKQorCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NUb2NGSCkg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBsYXJnZSBvYmplY3QgVE9DIGZpbGUg XCIlc1wiOiAlbSIsCiAJCQkJIHRvY2ZuYW1lKTsKIApAQCAtNDg4LDE1ICs0ODgsMTYgQEAgX1dy aXRlQnl0ZShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgaW50IGkpCiB7CiAJdW5zaWduZWQgY2hh ciBjID0gKHVuc2lnbmVkIGNoYXIpIGk7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQg KikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFG SDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRhRkgpICE9IDEp CisJaWYgKENGSC0+d3JpdGVfZnVuYygmYywgMSwgQ0ZIKSAhPSAxKQogCXsKIAkJLyogaWYgd3Jp dGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwog CQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQg bm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5k YXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiAKIAlyZXR1cm4g MTsKQEAgLTUxMiw4ICs1MTMsOSBAQCBzdGF0aWMgaW50CiBfUmVhZEJ5dGUoQXJjaGl2ZUhhbmRs ZSAqQUgpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERh dGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAotCXJldHVybiBj ZmdldGMoY3R4LT5kYXRhRkgpOworCXJldHVybiBDRkgtPmdldGNfZnVuYyhDRkgpOwogfQogCiAv KgpAQCAtNTI0LDE1ICs1MjYsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZUJ1ZihBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0 eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4s IGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGVfZnVuYyhidWYsIGxlbiwgQ0ZI KSAhPSBsZW4pCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJv YmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBF Tk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwK LQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9m dW5jKENGSCkpOwogCX0KIH0KIApAQCAtNTQ1LDEyICs1NDgsMTMgQEAgc3RhdGljIHZvaWQKIF9S ZWFkQnVmKEFyY2hpdmVIYW5kbGUgKkFILCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbGNs Q29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NG aWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCS8qCi0JICogSWYgdGhlcmUgd2FzIGFu IEkvTyBlcnJvciwgd2UgYWxyZWFkeSBleGl0ZWQgaW4gY2ZyZWFkKCksIHNvIGhlcmUgd2UKKwkg KiBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiByZWFkRigp LCBzbyBoZXJlIHdlCiAJICogZXhpdCBvbiBzaG9ydCByZWFkcy4KIAkgKi8KLQlpZiAoY2ZyZWFk KGJ1ZiwgbGVuLCBjdHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPnJlYWRfZnVuYyhidWYs IGxlbiwgQ0ZIKSAhPSBsZW4pCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6IGVuZCBvZiBmaWxlIik7CiB9CiAKQEAgLTU3Myw3ICs1NzcsNyBAQCBfQ2xvc2VBcmNo aXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlV3JpdGUp CiAJewotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsKIAkJ cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OwogCQljaGFy CQlmbmFtZVtNQVhQR1BBVEhdOwogCkBAIC01ODQsOCArNTg4LDggQEAgX0Nsb3NlQXJjaGl2ZShB cmNoaXZlSGFuZGxlICpBSCkKIAogCQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVkIHVuY29t cHJlc3NlZCAqLwogCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9O X05PTkU7Ci0JCXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY29tcHJl c3Npb25fc3BlYyk7Ci0JCWlmICh0b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRDb21wcmVz c0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93cml0ZV9m dW5jKGZuYW1lLCBQR19CSU5BUllfVywgdG9jRkgpKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAJCWN0eC0+ZGF0YUZIID0gdG9j Rkg7CiAKQEAgLTU5OCw3ICs2MDIsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCQlXcml0ZUhlYWQoQUgpOwogCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKIAkJV3Jp dGVUb2MoQUgpOwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNz RmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9D IGZpbGU6ICVtIik7CiAJCVdyaXRlRGF0YUNodW5rcyhBSCwgY3R4LT5wc3RhdGUpOwogCkBAIC02 NDksOCArNjUzLDggQEAgX1N0YXJ0TE9zKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiAKIAkvKiBUaGUgTE8gVE9DIGZpbGUgaXMgbmV2ZXIgY29tcHJlc3NlZCAqLwogCWNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQljdHgtPkxPc1RvY0ZI ID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCAiYWIiLCBjb21wcmVzc2lvbl9zcGVjKTsKLQlpZiAoY3R4 LT5MT3NUb2NGSCA9PSBOVUxMKQorCWN0eC0+TE9zVG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCWlmIChjdHgtPkxPc1RvY0ZILT5vcGVuX3dyaXRlX2Z1 bmMoZm5hbWUsICJhYiIsIGN0eC0+TE9zVG9jRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjY3LDkgKzY3MSw4 IEBAIF9TdGFydExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAK IAlzbnByaW50ZihmbmFtZSwgTUFYUEdQQVRILCAiJXMvYmxvYl8ldS5kYXQiLCBjdHgtPmRpcmVj dG9yeSwgb2lkKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5B UllfVywgQUgtPmNvbXByZXNzaW9uX3NwZWMpOwotCi0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwp CisJY3R4LT5kYXRhRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc2lvbl9z cGVjKTsKKwlpZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZ X1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTY4MiwxOCArNjg1LDE5IEBAIHN0YXRpYyB2 b2lkCiBfRW5kTE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIHsK IAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+TE9zVG9jRkg7CiAJY2hhcgkJYnVmWzUwXTsKIAlp bnQJCQlsZW47CiAKLQkvKiBDbG9zZSB0aGUgTE8gZGF0YSBmaWxlIGl0c2VsZiAqLwotCWlmIChj ZmNsb3NlKGN0eC0+ZGF0YUZIKSAhPSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIExP IGRhdGEgZmlsZTogJW0iKTsKKwkvKiBDbG9zZSB0aGUgQkxPQiBkYXRhIGZpbGUgaXRzZWxmICov CisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFGSCkgIT0gMCkKKwkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBibG9iIGRhdGEgZmlsZTogJW0iKTsKIAljdHgtPmRhdGFGSCA9 IE5VTEw7CiAKIAkvKiByZWdpc3RlciB0aGUgTE8gaW4gYmxvYnMudG9jICovCiAJbGVuID0gc25w cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IGJsb2JfJXUuZGF0XG4iLCBvaWQsIG9pZCk7Ci0J aWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+TE9zVG9jRkgpICE9IGxlbikKLQkJcGdfZmF0YWwo ImNvdWxkIG5vdCB3cml0ZSB0byBMT3MgVE9DIGZpbGUiKTsKKwlpZiAoQ0ZILT53cml0ZV9mdW5j KGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBi bG9icyBUT0MgZmlsZSIpOwogfQogCiAvKgpAQCAtNzA2LDggKzcxMCw4IEBAIF9FbmRMT3MoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNs Q29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9zVG9jRkgp ICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE9zIFRPQyBmaWxlOiAlbSIpOwor CWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NUb2NGSCkgIT0gMCkKKwkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBibG9icyBUT0MgZmlsZTogJW0iKTsKIAljdHgtPkxPc1RvY0ZI ID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCBkOTIyNDdjOTE1Li43 ODQ1NDkyOGNjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAor KysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtOTQsNyArOTQsNyBAQCBt eSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+IFsKIAkJCQkncGdfcmVzdG9yZScsICct bCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2N1c3RvbS5kdW1wIiwKIAkJCV0sCi0JCQll eHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogMS8sCisJCQlleHBlY3RlZCA9PiBxci9Db21wcmVz c2lvbjogZ3ppcC8sCiAJCQluYW1lICAgICA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJl c3NlZCcKIAkJfSwKIAl9LApAQCAtMjM5LDggKzIzOSw4IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgK IAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9kZWZh dWx0c19jdXN0b21fZm9ybWF0LmR1bXAiLCBdLAogCQkJZXhwZWN0ZWQgPT4gJHN1cHBvcnRzX2d6 aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9Db21wcmVzc2lvbjogMC8sCisJ CQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJlc3Npb246IG5vbmUvLAogCQkJ bmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3NlZCBieSBkZWZhdWx0IGlmIGF2 YWlsYWJsZScsCiAJCX0sCiAJfSwKQEAgLTI2NCw4ICsyNjQsOCBAQCBteSAlcGdkdW1wX3J1bnMg PSAoCiAJCQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIv ZGVmYXVsdHNfZGlyX2Zvcm1hdCIsIF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3ppcCA/ Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJCXFy L0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQluYW1l ID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQnLAogCQl9LAog CQlnbG9iX3BhdHRlcm5zID0+IFsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3Bs dXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1 MmZlOWY1MDkuLmRiNDI5NDc0YTIgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3Bs dXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAt MTUwLDcgKzE1MCw5IEBAIGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNl IGl0IHVzZXMgInB1YmxpYyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hp Y2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRm IiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRm IiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCiAJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAmJiBjb250aW51ZQpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCA1MTQ4NGNhN2UyLi43ZTYyYzZlZjNkIDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtNDI4LDYgKzQyOCw3IEBAIENvbXBpbGVkRXhwclN0YXRlCiBDb21wb3Np dGVJT0RhdGEKIENvbXBvc2l0ZVR5cGVTdG10CiBDb21wb3VuZEFmZml4RmxhZworQ29tcHJlc3NG aWxlSGFuZGxlCiBDb21wcmVzc2lvbkxvY2F0aW9uCiBDb21wcmVzc29yU3RhdGUKIENvbXB1dGVY aWRIb3Jpem9uc1Jlc3VsdApAQCAtMTAzNCw2ICsxMDM1LDcgQEAgR3VjU3RhY2sKIEd1Y1N0YWNr U3RhdGUKIEd1Y1N0cmluZ0Fzc2lnbkhvb2sKIEd1Y1N0cmluZ0NoZWNrSG9vaworR3ppcENvbXBy ZXNzb3JTdGF0ZQogSEFORExFCiBIQVNIQUNUSU9OCiBIQVNIQlVDS0VUCi0tIAoyLjM0LjEKCg== --b1_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs Content-Type: text/x-patch; name=v23-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v23-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSA5NzhlZDkwZWE4MDQ0ZGRhOGMwNDk3N2MxMGExYjBjOGE1NTdjZTc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjMgSmFuIDIwMjMgMTQ6NTE6MDYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MyAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUg b2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2NhbHkuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgIHwgIDEzICstCiBzcmMvYmluL3BnX2R1bXAv TWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lv LmMgICAgICAgIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgICAgICAg fCA2MjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfbHo0LmggICAgICAgfCAgMjIgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAg ICAgIHwgICA4ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgfCAgMTQg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgNSArLQogc3JjL2Jp bi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgIHwgIDgyICsrKy0KIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgfCAgIDEgKwogMTEgZmlsZXMgY2hhbmdlZCwgNzcyIGluc2VydGlvbnMoKyks IDE4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19sejQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19s ejQuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggMmM5MzhjZDdlMS4uNDlkMjE4OTA1ZiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wLnNnbWwKQEAgLTMzMCw5ICszMzAsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IHRoYXQgPGFwcGxpY2F0 aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgICAgICAgICBjYW4gcmVhZC4gQSBkaXJl Y3RvcnkgZm9ybWF0IGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGgKICAgICAgICAgICAg c3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1wbGUsIGZpbGVzIGluIGFuIHVuY29tcHJlc3Nl ZCBhcmNoaXZlCi0gICAgICAgICAgIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIDxhcHBsaWNh dGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gdG9vbC4KLSAgICAgICAgICAgVGhpcyBmb3JtYXQgaXMg Y29tcHJlc3NlZCBieSBkZWZhdWx0IGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsCi0gICAgICAg ICAgIGR1bXBzLgorICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGlj YXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IG9yCisgICAgICAgICAgIDxhcHBsaWNhdGlvbj5sejQ8 L2FwcGxpY2F0aW9uPnRvb2wuCisgICAgICAgICAgIFRoaXMgZm9ybWF0IGlzIGNvbXByZXNzZWQg YnkgZGVmYXVsdCB1c2luZyA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPgorICAgICAgICAgICBhbmQg YWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KICAgICAgICAgICA8L3BhcmE+CiAgICAgICAg ICA8L2xpc3RpdGVtPgogICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTY1NCw3ICs2NTUsNyBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU3BlY2lm eSB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGFuZC9vciB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8g dXNlLgogICAgICAgICBUaGUgY29tcHJlc3Npb24gbWV0aG9kIGNhbiBiZSBzZXQgdG8gPGxpdGVy YWw+Z3ppcDwvbGl0ZXJhbD4gb3IKLSAgICAgICAgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9y IG5vIGNvbXByZXNzaW9uLgorICAgICAgICA8bGl0ZXJhbD5sejQ8L2xpdGVyYWw+IG9yIDxsaXRl cmFsPm5vbmU8L2xpdGVyYWw+IGZvciBubyBjb21wcmVzc2lvbi4KICAgICAgICAgQSBjb21wcmVz c2lvbiBkZXRhaWwgc3RyaW5nIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZC4gIElmIHRoZQog ICAgICAgICBkZXRhaWwgc3RyaW5nIGlzIGFuIGludGVnZXIsIGl0IHNwZWNpZmllcyB0aGUgY29t cHJlc3Npb24gbGV2ZWwuCiAgICAgICAgIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGEgY29tbWEt c2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMsIGVhY2ggb2YgdGhlCkBAIC02NzUsOCArNjc2LDggQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGluZGl2aWR1YWwgdGFibGUtZGF0YSBz ZWdtZW50cywgYW5kIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXByZXNzIHVzaW5nCiAgICAgICAgIDxs aXRlcmFsPmd6aXA8L2xpdGVyYWw+IGF0IGEgbW9kZXJhdGUgbGV2ZWwuIEZvciBwbGFpbiB0ZXh0 IG91dHB1dCwKICAgICAgICAgc2V0dGluZyBhIG5vbnplcm8gY29tcHJlc3Npb24gbGV2ZWwgY2F1 c2VzIHRoZSBlbnRpcmUgb3V0cHV0IGZpbGUgdG8gYmUgY29tcHJlc3NlZCwKLSAgICAgICAgYXMg dGhvdWdoIGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNh dGlvbj47IGJ1dCB0aGUgZGVmYXVsdAotICAgICAgICBpcyBub3QgdG8gY29tcHJlc3MuCisgICAg ICAgIGFzIHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwv YXBwbGljYXRpb24+IG9yCisgICAgICAgIDxhcHBsaWNhdGlvbj5sejQ8L2FwcGxpY2F0aW9uPjsg YnV0IHRoZSBkZWZhdWx0IGlzIG5vdCB0byBjb21wcmVzcy4KICAgICAgICA8L3BhcmE+CiAgICAg ICAgPHBhcmE+CiAgICAgICAgIFRoZSB0YXIgYXJjaGl2ZSBmb3JtYXQgY3VycmVudGx5IGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gYXQgYWxsLgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDAwMTNiYzA4MGMu LmViOGY1OTQ1OWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9z cmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAgdG9wX2J1aWxkZGlyID0g Li4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAog ZXhwb3J0IEdaSVBfUFJPR1JBTT0kKEdaSVApCitleHBvcnQgTFo0CiBleHBvcnQgd2l0aF9pY3UK IAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBGTEFHUykKQEAg LTI2LDYgKzI3LDcgQEAgT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCiAJY29tcHJlc3NfZ3ppcC5v IFwKIAljb21wcmVzc19pby5vIFwKKwljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3Nfbm9uZS5v IFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4 IGVhNGMyNjZlMDguLjRlYzI1ZTM1MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw3ICs1 Niw3IEBACiAgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUgdHJpZXMgdG8gZGVmZmVy IHRoZSBjb21wcmVzc2lvbiBieSB0aGUKICAqCWZpbGVuYW1lIHN1ZmZpeC4gSWYgdGhlIHN1ZmZp eCBpcyBub3QgeWV0IGtub3duLCB0aGVuIGl0IHRyaWVzIHRvIHNpbXBseQogICoJb3BlbiB0aGUg ZmlsZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0 aCB0aGUgLmd6Ci0gKglzdWZmaXguCisgKglzdWZmaXgsIGFuZCB0aGVuIGFnYWluIHdpdGggdGhl IC5sejQgc3VmZml4LgogICoKICAqIElERU5USUZJQ0FUSU9OCiAgKgkgICBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogCiAjaW5jbHVkZSAiY29tcHJlc3Nf Z3ppcC5oIgogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0 LmgiCiAjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGls cy5oIgogCkBAIC05NSw2ICs5Niw4IEBAIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAJCUluaXRDb21wcmVzc29yTm9u ZShjcywgY29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBj b21wcmVzc2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCUluaXRDb21wcmVzc29yTFo0KGNzLCBjb21wcmVzc2lv bl9zcGVjKTsKIAogCXJldHVybiBjczsKIH0KQEAgLTE1OSw2ICsxNjIsOCBAQCBJbml0Q29tcHJl c3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKIAkJSW5pdENvbXByZXNzTm9uZShDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2Ug aWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJ CUluaXRDb21wcmVzc0d6aXAoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCUluaXRDb21w cmVzc0xaNChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwogCiAJcmV0dXJuIENGSDsKIH0KQEAgLTE3 Miw3ICsxNzcsNyBAQCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKICAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0 aGUgY29tcHJlc3Npb24gd2lsbCBiZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKICAq IHRvIG9wZW4gdGhlIGZpbGUgYXQgJ3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRp bmcga25vd24gY29tcHJlc3Npb24KICAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBh cyAncGF0aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvcgotICogImZvby5neiIsIHRy eWluZyBpbiB0aGF0IG9yZGVyLgorICogImZvby5neiIgb3IgImZvby5sejQiLCB0cnlpbmcgaW4g dGhhdCBvcmRlci4KICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9y IGNvZGUgaW4gZXJybm8uCiAgKi8KQEAgLTIxMCw2ICsyMTUsMTcgQEAgSW5pdERpc2NvdmVyQ29t cHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlp ZiAoZXhpc3RzKQogCQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fR1pJUDsKIAkJfQorI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCQlpZiAoIWV4aXN0cykKKwkJ eworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmx6 NCIsIHBhdGgpOworCQkJZXhpc3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CisKKwkJCWlm IChleGlzdHMpCisJCQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9MWjQ7CisJCX0KICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU5OTg5M2Q3NzcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw2MjIgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2x6NC5jCisgKgkgUm91dGluZXMgZm9yIGFy Y2hpdmVycyB0byB3cml0ZSBhIExaNCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtLgorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5o IgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0CisjaW5jbHVk ZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4KKworI2RlZmluZSBMWjRfT1VUX1NJWkUJ KDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJKDE2ICogMTAyNCkKKworLyoKKyAqIExa NEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVkIGluIHYxLjcuNSBvZiB0aGUgbGlicmFy eS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRpb25zIHdpdGggYSBsZXNzZXIgdmVyc2lv bi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpFX01BWAorI2RlZmluZSBMWjRGX0hFQURF Ul9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29t cHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVkZWYgc3Ry dWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91 dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0 IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkIFJlYWREYXRh RnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwor c3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUxaNChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRfc3RyZWFtRGVj b2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAgICpkZWNidWY7 CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBMWjRfSU5fU0la RTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxsb2MoYnVmbGVu KTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVMTCwgMCk7CisK Kwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50 CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRTdHJlYW1EZWNv ZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJCWNudCwgYnVm bGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9CisKKwlwZ19m cmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVEYXRh VG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXByZXNzb3JTdGF0 ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJc2l6 ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWlyZWRzaXplID0gTFo0X2NvbXByZXNzQm91 bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4gTFo0Y3MtPm91dHNpemUpCisJeworCQlM WjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+b3V0YnVmLCByZXF1aXJlZHNpemUpOwor CQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsKKwl9CisKKwljb21wcmVzc2VkID0gTFo0 X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91dGJ1ZiwKKwkJCQkJCQkJCSAgZExlbiwg TFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNzZWQgPD0gMCkKKwkJcGdfZmF0YWwoImZh aWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJY3MtPndyaXRlRihBSCwgTFo0Y3MtPm91 dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29yTFo0KEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUxaNENvbXByZXNzb3JT dGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZh dGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19mcmVlKExaNGNzLT5vdXRidWYpOworCQlw Z19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorfQorCisKKy8q CisgKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEgSS9P CisgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+cmVh ZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEgPSBXcml0ZURh dGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisKKwljcy0+Y29t cHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKiBXaWxsIGJlIGxhenkgaW5p dCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21hbGxvYzAoc2l6ZW9mKExaNENvbXByZXNz b3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZp bGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU3RhdGUgbmVl ZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5nIHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUg QVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxlCit7CisJRklMRQkgICAqZnA7CisKKwlM WjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90IGN0 eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QgZHR4OworCisJYm9vbAkJaW5pdGVkOwor CWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQlidWZsZW47CisJY2hhcgkgICAqYnVmZmVy OworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAkJb3ZlcmZsb3dsZW47CisJ Y2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJCWVycmNvZGU7Cit9CUxaNEZpbGU7CisK Ky8qCisgKiBMWjQgZXF1aXZhbGVudCB0byBmZW9mKCkgb3IgZ3plb2YoKS4gVGhlIGVuZCBvZiBm aWxlCisgKiBpcyByZWFjaGVkIGlmIHRoZXJlIGlzIG5vIGRlY29tcHJlc3NlZCBvdXRwdXQgaW4g dGhlCisgKiBvdmVyZmxvdyBidWZmZXIgYW5kIHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hl ZC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9lb2YoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp Cit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwor CXJldHVybiBmcy0+b3ZlcmZsb3dsZW4gPT0gMCAmJiBmZW9mKGZzLT5mcCk7Cit9CisKK3N0YXRp YyBjb25zdCBjaGFyICoKK0xaNEZpbGVfZ2V0X2Vycm9yKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJ Y29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZfaXNFcnJvcihmcy0+ZXJyY29kZSkpCisJ CWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5lcnJjb2RlKTsKKwllbHNlCisJCWVycm1z ZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBlcnJtc2c7Cit9CisKKy8qCisgKiBQcmVw YXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBzdHJ1Y3QgZm9yIHN1YnNlcXVlbnQgY2Fs bHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVzc2FyeSBjb250ZXh0cyBmb3IgdGhlIG9wZXJh dGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBpdCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBM WjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3RyZWFtLgorICovCitzdGF0aWMgaW50CitMWjRGaWxl X2luaXQoTFo0RmlsZSAqIGZzLCBpbnQgc2l6ZSwgYm9vbCBjb21wcmVzc2luZykKK3sKKwlzaXpl X3QJCXN0YXR1czsKKworCWlmIChmcy0+aW5pdGVkKQorCQlyZXR1cm4gMDsKKworCWZzLT5jb21w cmVzc2luZyA9IGNvbXByZXNzaW5nOworCWZzLT5pbml0ZWQgPSB0cnVlOworCisJaWYgKGZzLT5j b21wcmVzc2luZykKKwl7CisJCWZzLT5idWZsZW4gPSBMWjRGX2NvbXByZXNzQm91bmQoTFo0X0lO X1NJWkUsICZmcy0+cHJlZnMpOworCQlpZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVBREVSX1NJWkVf TUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVSX1NJWkVfTUFYOworCisJCXN0YXR1cyA9 IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZFUlNJT04pOwor CQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVz OworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZs ZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVnaW4oZnMtPmN0eCwgZnMtPmJ1ZmZlciwg ZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMpOworCisJCWlmIChMWjRGX2lzRXJyb3Io c3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJ fQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0YXR1 cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOworCQkJcmV0dXJuIDE7CisJCX0K Kwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVEZWNvbXByZXNzaW9uQ29udGV4 dCgmZnMtPmR0eCwgTFo0Rl9WRVJTSU9OKTsKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQor CQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJZnMt PmJ1ZmxlbiA9IHNpemUgPiBMWjRfT1VUX1NJWkUgPyBzaXplIDogTFo0X09VVF9TSVpFOworCQlm cy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCisJCWZzLT5vdmVyZmxvd2FsbG9j bGVuID0gZnMtPmJ1ZmxlbjsKKwkJZnMtPm92ZXJmbG93YnVmID0gcGdfbWFsbG9jKGZzLT5vdmVy Zmxvd2FsbG9jbGVuKTsKKwkJZnMtPm92ZXJmbG93bGVuID0gMDsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworLyoKKyAqIFJlYWQgYWxyZWFkeSBkZWNvbXByZXNzZWQgY29udGVudCBmcm9tIHRoZSBv dmVyZmxvdyBidWZmZXIgaW50byAncHRyJyB1cCB0bworICogJ3NpemUnIGJ5dGVzLCBpZiBhdmFp bGFibGUuIElmIHRoZSBlb2xfZmxhZyBpcyBzZXQsIHRoZW4gc3RvcCBhdCB0aGUgZmlyc3QKKyAq IG9jY3VyYW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6ZScgYnl0ZXMuCisg KgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZmZXIsIGlzIG1vdmVk IHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9vdmVyZmxv dyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJ Y2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4g PT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID49IHNpemUpCisJCXJl YWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVyZmxvd2xlbjsKKworCWlm IChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYsICdcbicsIHJlYWRsZW4p KSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0ZXJtaW5hdGluZyBjaGFyICovCisJCXJlYWRsZW4g PSBwIC0gZnMtPm92ZXJmbG93YnVmICsgMTsKKworCW1lbWNweShwdHIsIGZzLT5vdmVyZmxvd2J1 ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisKKwlpZiAoZnMtPm92 ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZzLT5vdmVyZmxvd2J1 ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVhZGxlbjsKK30KKwor LyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgb3V0 IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQgd2lsbCByZWFkIHVw IHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8gdGhlIG5ldyBsaW5l IGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlzIHNldC4gSXQgaXMg cG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHJl YWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwgZXhjZWVkcworICog J3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50IGlzIHN0b3JlZCBh dCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBjb3Vyc2UsIHdoZW4g dGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5IHRvIGNvbnN1bWUg YW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3ZlcmZsb3cK KyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQuCisgKi8KK3N0YXRp YyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50 IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJc2l6ZV90CQlkc2l6ZSA9IDA7CisJc2l6ZV90 CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBwdHJzaXplOworCWJvb2wJCWVvbF9mb3VuZCA9IGZh bHNlOworCisJdm9pZAkgICAqcmVhZGJ1ZjsKKworCS8qIExhenkgaW5pdCAqLworCWlmICghZnMt PmluaXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIGZhbHNlIC8qIGRlY29tcHJlc3Npbmcg Ki8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyZml5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNw YWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6ZSA+IGZzLT5idWZsZW4pCisJeworCQlmcy0+ YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9IHBnX3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6 ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxh YmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfb3ZlcmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9s X2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8IChlb2xfZmxhZyAmJiBtZW1jaHIocHRyLCAn XG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7CisKKwlyZWFkYnVmID0gcGdfbWFsbG9jKHNp emUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJwOworCQljaGFyCSAgICpyZW5kOworCisJCXJz aXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMtPmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6 ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0xOworCisJCXJwID0gKGNoYXIgKikgcmVh ZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAg PCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsKKwkJCXNpemVfdAkJb3V0bGVuID0gZnMt PmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4gPSByZW5kIC0gcnA7CisKKwkJCW1lbXNl dChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3RhdHVzID0gTFo0Rl9kZWNvbXByZXNzKGZz LT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJCQkJCQkgcnAsICZyZWFkX3JlbWFpbiwg TlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQl7CisJCQkJZnMtPmVycmNv ZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlycCArPSByZWFkX3JlbWFp bjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gcHRy IGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBlaXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFk eSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBwcmVzZW50CisJCQkgKiBpbiB0aGUgb3V0YnVm CisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYmIGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQg PT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAqcDsKKwkJCQlzaXplX3QJCWxpYiA9IChlb2xf ZmxhZyA9PSAwKSA/IHNpemUgLSBkc2l6ZSA6IHNpemUgLSAxIC0gZHNpemU7CisJCQkJc2l6ZV90 CQlsZW4gPSBvdXRsZW4gPCBsaWIgPyBvdXRsZW4gOiBsaWI7CisKKwkJCQlpZiAoZW9sX2ZsYWcg PT0gdHJ1ZSAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+YnVmZmVyLCAnXG4nLCBvdXRsZW4pKSAm JgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIgKyAxKSA8PSBsZW4pCisJCQkJeworCQkJ CQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJCWVvbF9mb3VuZCA9IHRydWU7CisJCQkJ fQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRzaXplLCBmcy0+YnVmZmVyLCBsZW4pOwor CQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQgbm90IGZpdCwgaWYgYW55 LCBhdCB0aGUgYmVnaW5pbmcgb2YgdGhlIGJ1ZiAqLworCQkJCWlmIChsZW4gPCBvdXRsZW4pCisJ CQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZlciArIGxlbiwgb3V0bGVuIC0gbGVuKTsK KwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkvKiBpZiB0aGVyZSBpcyBhdmFpbGFibGUg b3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVuID4gMCkKKwkJCXsKKwkJCQl3aGlsZSAo ZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92ZXJmbG93YWxsb2NsZW4pCisJCQkJewor CQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOworCQkJCQlmcy0+b3ZlcmZsb3didWYgPSBw Z19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJCQkJCQkJCSBmcy0+b3ZlcmZsb3dhbGxv Y2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVyZmxvd2J1ZiArIGZzLT5vdmVyZmxv d2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+b3ZlcmZsb3dsZW4gKz0gb3V0bGVu OworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6ZSAmJiBkc2l6ZSA8IHNpemUgJiYg ZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVmKTsKKworCXJldHVybiAoaW50KSBk c2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUgYnl0ZXMgZnJvbSBwdHIgYW5kIHdyaXRl IHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGljIHNpemVfdAorTFo0RmlsZV93cml0ZShj b25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVf dAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNpemU7CisKKwlpZiAoIWZzLT5pbml0ZWQg JiYgTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUg KHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVuayA9IHJlbWFpbmluZyA8IExaNF9JTl9T SVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisKKwkJcmVtYWluaW5nIC09IGNodW5rOwor CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUoZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMt PmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBOVUxMKTsKKwkJaWYgKExaNEZfaXNFcnJv cihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAtMTsK KwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0 YXR1cykKKwkJeworCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOworCQkJcmV0dXJuIDE7CisJ CX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGZyZWFkKCkgZXF1aXZhbGVudCBp bXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBzaXpl X3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCWludAkJCXJldDsKKworCXJldCA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRy LCBzaXplLCBmYWxzZSk7CisJaWYgKHJldCAhPSBzaXplICYmICFMWjRGaWxlX2VvZihDRkgpKQor CQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVf Z2V0X2Vycm9yKENGSCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZnZXRjKCkgZXF1 aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0 YXRpYyBpbnQKK0xaNEZpbGVfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRG aWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNo YXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0g MSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg cmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVs c2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBm aWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBmZ2V0cygpIGVxdWl2YWxlbnQg aW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgorICovCitzdGF0aWMgY2hh ciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMs IHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXplIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKwor CS8qIERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBz dHJlYW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBj b250ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0 YXRpYyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklM RQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZXQ7CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAo ZnMtPmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29tcHJlc3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9 IExaNEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwgTlVMTCk7 CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBl bmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsK KwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnAp KSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8gPSBlcnJubyA/IDogRU5PU1BDOworCQkJCVdS SVRFX0VSUk9SX0VYSVQ7CisJCQl9CisKKwkJCXN0YXR1cyA9IExaNEZfZnJlZUNvbXByZXNzaW9u Q29udGV4dChmcy0+Y3R4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19m YXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJy b3JOYW1lKHN0YXR1cykpOworCQl9CisJCWVsc2UKKwkJeworCQkJc3RhdHVzID0gTFo0Rl9mcmVl RGVjb21wcmVzc2lvbkNvbnRleHQoZnMtPmR0eCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1 cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgZGVjb21wcmVzc2lvbjogJXMiLAorCQkJ CQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykpOworCQkJcGdfZnJlZShmcy0+b3ZlcmZsb3di dWYpOworCQl9CisKKwkJcGdfZnJlZShmcy0+YnVmZmVyKTsKKwl9CisKKwlwZ19mcmVlKGZzKTsK KworCXJldHVybiBmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50CitMWjRGaWxlX29wZW4oY29u c3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAorCQkJIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQoreworCUZJTEUJICAgKmZwOworCUxaNEZpbGUgICAgKmx6NGZwID0gKExa NEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZmQgPj0gMCkKKwkJZnAgPSBmZG9w ZW4oZmQsIG1vZGUpOworCWVsc2UKKwkJZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwlpZiAoZnAg PT0gTlVMTCkKKwl7CisJCWx6NGZwLT5lcnJjb2RlID0gZXJybm87CisJCXJldHVybiAxOworCX0K KworCWx6NGZwLT5mcCA9IGZwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZp bGVfb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwljaGFyCSAgICpmbmFtZTsKKwlpbnQJCQlyZXQ7CisKKwlm bmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRoKTsKKwlyZXQgPSBDRkgtPm9wZW5fZnVuYyhm bmFtZSwgLTEsIG1vZGUsIENGSCk7CisJcGdfZnJlZShmbmFtZSk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogUHVibGljIHJvdXRpbmVzCisgKi8KK3ZvaWQKK0luaXRDb21wcmVzc0xaNChD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKQoreworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1 bmMgPSBMWjRGaWxlX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5f d3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5j ID0gTFo0RmlsZV93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgt PmdldGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7 CisJQ0ZILT5jbG9zZV9mdW5jID0gTFo0RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5j ID0gTFo0RmlsZV9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVz c2lvbl9zcGVjOworCWx6NGZwID0gcGdfbWFsbG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENG SC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Np b25MZXZlbCA9IENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9k YXRhID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJCQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29t cHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0 Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBk b2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiTFo0Iik7Cit9CisjZW5kaWYJ CQkJCQkJLyogVVNFX0xaNCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBmZThjNGU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmgKQEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogY29tcHJlc3NfbHo0LmgKKyAqCSBMWjQgaW50ZXJmYWNlIHRvIGNvbXBy ZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy MywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQu aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19MWjRfSF8K KyNkZWZpbmUgX0NPTVBSRVNTX0xaNF9IXworCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKwor ZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JMWjQoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lk IEluaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9D T01QUkVTU19MWjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA4NGU5ZjBkZWZhLi4wZGE0NzZh NGMzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogcGdfZHVtcF9jb21tb25fc291 cmNlcyA9IGZpbGVzKAogICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2NvbXByZXNzX2lvLmMnLAor ICAnY29tcHJlc3NfbHo0LmMnLAogICAnY29tcHJlc3Nfbm9uZS5jJywKICAgJ2R1bXB1dGlscy5j JywKICAgJ3BhcmFsbGVsLmMnLApAQCAtMTgsNyArMTksNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3Vy Y2VzID0gZmlsZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBf Y29tbW9uJywKICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jl c19mZV9oLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxpYl0sCisg IGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWJdLAogICBrd2Fy Z3M6IGludGVybmFsX2xpYl9hcmdzLAogKQogCkBAIC04Niw3ICs4NywxMCBAQCB0ZXN0cyArPSB7 CiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJy ZW50X2J1aWxkX2RpcigpLAogICAndGFwJzogewotICAgICdlbnYnOiB7J0daSVBfUFJPR1JBTSc6 IGd6aXAucGF0aCgpfSwKKyAgICAnZW52JzogeworICAgICAgJ0daSVBfUFJPR1JBTSc6IGd6aXAu cGF0aCgpLAorICAgICAgJ0xaNCc6IHByb2dyYW1fbHo0LmZvdW5kKCkgPyBwcm9ncmFtX2x6NC5w YXRoKCkgOiAnJywKKyAgICB9LAogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9iYXNpYy5w bCcsCiAgICAgICAndC8wMDJfcGdfZHVtcC5wbCcsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKaW5kZXggZmViZGQxNDg4NS4uNGM1YzRlZDliZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYwpAQCAtMzk4LDYgKzM5OCwxMCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCQkJc3VwcG9ydHNfY29tcHJlc3Np b24gPSBmYWxzZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCQkJaWYgKEFILT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCQkJCXN1cHBvcnRz X2NvbXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKIAkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Np b24gPT0gZmFsc2UpCiAJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNz ZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlv bikiKTsKQEAgLTIwODIsNyArMjA4Niw3IEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2 ZUhhbmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBhcmNoaXZl IGlzIGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sgaWYKLQkJICogdGhlcmUncyBhICJ0b2MuZGF0 IiAob3IgInRvYy5kYXQuZ3oiKSBmaWxlIGluIGl0LgorCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQi IChvciAidG9jLmRhdC57Z3osbHo0fSIpIGZpbGUgaW4gaXQuCiAJCSAqLwogCQlpZiAoc3RhdChB SC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7CkBAIC0yMDky LDYgKzIwOTYsMTAgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkK ICNpZmRlZiBIQVZFX0xJQloKIAkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3Bl YywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVm IFVTRV9MWjQKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5k YXQubHo0IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwi dG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpAQCAtMzc1NSw2 ICszNzYzLDEwIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogI2lmbmRlZiBIQVZFX0xJ QloKIAkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQKQogCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQK KwkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9M WjQpCisJCQl1bnN1cHBvcnRlZCA9IHRydWU7CiAjZW5kaWYKIAkJaWYgKHVuc3VwcG9ydGVkKQog CQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9u IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDUyN2M3NjUx YWIuLjA4MTA1MzM3YjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNzE1LDEzICs3MTUsMTIgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKIAkJCS8q IGZhbGx0aHJvdWdoICovCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKwkJCS8qIGZhbGx0 aHJvdWdoICovCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgogCQkJYnJlYWs7CiAJCWNhc2Ug UEdfQ09NUFJFU1NJT05fWlNURDoKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlz IG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBS RVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQg c3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwKaW5kZXggNzg0NTQ5MjhjYy4uMTc3N2E0ZTVhYyAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwKQEAgLTEzOSw2ICsxMzksODAgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJYXJn cyAgICA9PiBbICctZCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX3BsYWluLnNxbC5neiIs IF0sCiAJCX0sCiAJfSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNv dmVyYWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2N1c3RvbSA9PiB7CisJCXRl c3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQn LAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgJy0tZm9ybWF0PWN1 c3RvbScsCisJCQknLS1jb21wcmVzcz1sejQnLCAiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9u X2x6NF9jdXN0b20uZHVtcCIsCisJCQkncG9zdGdyZXMnLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6 NF9jdXN0b20uc3FsIiwKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAi LAorCQldLAorCQljb21tYW5kX2xpa2UgPT4geworCQkJY29tbWFuZCA9PiBbCisJCQkJJ3BnX3Jl c3RvcmUnLAorCQkJCSctbCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAi LAorCQkJXSwKKwkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiBsejQvLAorCQkJbmFtZSA9 PiAnZGF0YSBjb250ZW50IGlzIGx6NCBjb21wcmVzc2VkJworCQl9LAorCX0sCisKKwkjIERvIG5v dCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNv bXByZXNzaW9uX2x6NF9kaXIgPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24n LAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJ J3BnX2R1bXAnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWpvYnM9MicsCisJCQkn LS1mb3JtYXQ9ZGlyZWN0b3J5JywgICAgICAgICAgICAgICAgICAgJy0tY29tcHJlc3M9bHo0OjEn LAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyIiwgJ3Bvc3RncmVzJywK KwkJXSwKKwkJIyBHaXZlIGNvdmVyYWdlIGZvciBtYW51YWxseSBjb21wcmVzc2VkIGJsb2IudG9j IGZpbGVzIGR1cmluZworCQkjIHJlc3RvcmUuCisJCWNvbXByZXNzX2NtZCA9PiB7CisJCQlwcm9n cmFtID0+ICRFTlZ7J0xaNCd9LAorCQkJYXJncyAgICA9PiBbCisJCQkJJy16JywgJy1mJywgJy0t cm0nLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL2Jsb2JzLnRvYyIsCisJCQkJ IiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jLmx6NCIsCisJCQldLAorCQl9 LAorCQkjIFZlcmlmeSB0aGF0IGRhdGEgZmlsZXMgd2hlcmUgY29tcHJlc3NlZAorCQlnbG9iX3Bh dHRlcm5zID0+IFsKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL3RvYy5kYXQiLAor CQkgICAgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvKi5kYXQubHo0IiwKKwkJXSwKKwkJ cmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLS1qb2JzPTInLAorCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2RpciIsCisJCV0sCisJfSwKKworCWNvbXByZXNzaW9uX2x6NF9wbGFpbiA9PiB7 CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICctLWZvcm1hdD1w bGFpbicsICctLWNvbXByZXNzPWx6NCcsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9u X2x6NF9wbGFpbi5zcWwubHo0IiwgJ3Bvc3RncmVzJywKKwkJXSwKKwkJIyBEZWNvbXByZXNzIHRo ZSBnZW5lcmF0ZWQgZmlsZSB0byBydW4gdGhyb3VnaCB0aGUgdGVzdHMuCisJCWNvbXByZXNzX2Nt ZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9LAorCQkJYXJncyAgICA9PiBbCisJCQkJ Jy1kJywgJy1mJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbC5sejQi LAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsIiwKKwkJCV0sCisJCX0s CisJfSwKKwogCWNsZWFuID0+IHsKIAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLApAQCAt NDE3NSwxMSArNDI0OSwxMSBAQCBmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1 bnMpCiAJbXkgJHJ1bl9kYiAgID0gJ3Bvc3RncmVzJzsKIAogCSMgU2tpcCBjb21tYW5kLWxldmVs IHRlc3RzIGZvciBnemlwIGlmIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGl0LgotCWlmICggICBk ZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSkKLQkJJiYgJHBnZHVt cF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJwotCQkmJiAhJHN1cHBvcnRz X2d6aXApCisJaWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSAmJgorCQko JHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJyAmJiAhJHN1cHBv cnRzX2d6aXApIHx8CisJCSgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEg J2x6NCcgJiYgISRzdXBwb3J0c19sejQpKQogCXsKLQkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUg dG8gbm8gZ3ppcCBzdXBwb3J0IjsKKwkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUgdG8gbm8gJHBn ZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IHN1cHBvcnQiOwogCQluZXh0OwogCX0K IApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjayBiL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKaW5kZXggZGI0Mjk0NzRhMi4uMmM1MDQyZWI0 MSAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjaworKysgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCkBAIC0xNTIsNiArMTUyLDcgQEAgZG8K IAkjIGFzIGZpZWxkIG5hbWVzLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29uJ3QgY2hh bmdlIGl0IG5vdy4KIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgg JiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0Lmgg JiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYg Y29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggJiYgY29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggN2U2MmM2ZWYzZC4u NjkyYzVjZWIwYiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzODMsNiArMTM4Myw3 IEBAIExXTG9jawogTFdMb2NrSGFuZGxlCiBMV0xvY2tNb2RlCiBMV0xvY2tQYWRkZWQKK0xaNENv bXByZXNzb3JTdGF0ZQogTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdAogTFo0Rl9kZWNvbXByZXNz T3B0aW9uc190CiBMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QKLS0gCjIuMzQuMQoK --b1_NGynbi5DwkqY8uMJNTkvaSg9h5DqucZPTLviUBAoTs--