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 1pKLf6-0004dS-Mp for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Jan 2023 15:56:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pKLf5-0004tZ-Ip for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Jan 2023 15:56:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKLf5-0004t5-0I for pgsql-hackers@lists.postgresql.org; Tue, 24 Jan 2023 15:56:39 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKLey-00078Y-S6 for pgsql-hackers@lists.postgresql.org; Tue, 24 Jan 2023 15:56:38 +0000 Date: Tue, 24 Jan 2023 15:56:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674575789; x=1674834989; bh=7wmg1/aMCywfh8McJnghw3xeYiSkJD5t6W5m8M8JqLo=; 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=RWrcjrVtI6tIOpip5qN7qqS34zarvuN46jlJIFzplLosgBUiA3Ee7nFhBO+hov0f5 6JYh74CQ3Q368EwKuZOJZ2GNiNHditMJQ8en0aRJrlA95xJHJbz65AVjcMYmRc6bAd AqOmqk0xw/M72u/VZkuzekr9YU4KgFlYyqSARxn2g9SDdtxPNuMRbL99fyHaNzp4d4 3s8RMrsbeFixaScY1xXTnUJb8hrNqR93givSQzZtNZ+ctJdXUsxSrmkZ5QIzBE6MuU 9k/OUCFl/OxsjEBpXZmxOlO48WXDaN+d04Jilo5OTSDytvE086m0i+Jh1NYmFTzWtj Oo2EU4rhQBy2w== To: Justin Pryzby From: gkokolatos@pm.me Cc: Tomas Vondra , Michael Paquier , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: <20230123180014.GX13860@telsasoft.com> References: <41036470-041b-08a3-469d-fe07de2bc58e@enterprisedb.com> <6ab89d42-0345-b96e-02d4-68e171cdbe03@enterprisedb.com> <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <20230123180014.GX13860@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0" 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_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Monday, January 23rd, 2023 at 7:00 PM, Justin Pryzby wrote: >=20 >=20 > On Mon, Jan 23, 2023 at 05:31:55PM +0000, gkokolatos@pm.me wrote: >=20 > > Please find attached v23 which reintroduces the split. > >=20 > > 0001 is reworked to have a reduced footprint than before. Also in an at= tempt > > to facilitate the readability, 0002 splits the API's and the uncompress= ed > > implementation in separate files. >=20 >=20 > Thanks for updating the patch. Could you address the review comments I > sent here ? > https://www.postgresql.org/message-id/20230108194524.GA27637%40telsasoft.= com Please find v24 attached. Cheers, //Georgios >=20 > Thanks, > -- > Justin --b1_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0 Content-Type: text/x-patch; name=v24-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v24-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSBhZjAzYjQ5Y2Q0ZGVlZGZjZDA1YzQ2OGE3NGU0MDczMjY1MGVmNjgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjQgSmFuIDIwMjMgMTU6Mzc6NTkgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NCAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDY2ICsrKysrKysrKysrLS0tCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uaCAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jIHwgMTMyICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDMg aW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf 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 cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBiYTVlNmFjYmJiLi41ZjUyZWE0MGU4 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 QUdFX0lOSVRJQUxJWklORzsKIApAQCAtMzkxLDE3ICszODMsMjYgQEAgUmVzdG9yZUFyY2hpdmUo QXJjaGl2ZSAqQUhYKQogCS8qCiAJICogTWFrZSBzdXJlIHdlIHdvbid0IG5lZWQgKGRlKWNvbXBy ZXNzaW9uIHdlIGhhdmVuJ3QgZ290CiAJICovCi0jaWZuZGVmIEhBVkVfTElCWgotCWlmIChBSC0+ Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCAmJgotCQlB SC0+UHJpbnRUb2NEYXRhUHRyICE9IE5VTEwpCisJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxz ZTsKKwlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X05PTkUgfHwKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCisJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gdHJ1ZTsKKworCWlmIChBSC0+UHJp bnRUb2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUg IT0gQUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYg KHRlLT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3Jl IGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRo aXMgaW5zdGFsbGF0aW9uKSIpOworCQkJeworI2lmbmRlZiBIQVZFX0xJQloKKwkJCQlpZiAoQUgt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJ CXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKwkJCQlpZiAoc3VwcG9ydHNf Y29tcHJlc3Npb24gPT0gZmFsc2UpCisJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9t IGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGlu c3RhbGxhdGlvbikiKTsKKwkJCX0KIAkJfQogCX0KLSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJl IGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFzc3VtZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCBy ZXN0b3JlLgpAQCAtMTEzMyw3ICsxMTM0LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFI WCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21w cmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRl eHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAljb25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0 YW1wX3N0cls2NF07CiAKQEAgLTE1MDgsNTggKzE1MDksMzIgQEAgc3RhdGljIHZvaWQKIFNldE91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWludAkJCWZu OworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkK IAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0 ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4g PSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwog CQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQp OwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4g Ki8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0g UEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0JCWNoYXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1v ZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUgPSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1v ZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24ndCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhp cyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUsICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5s ZXZlbCk7Ci0JCWlmIChmbiA+PSAwKQotCQkJQUgtPk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9k ZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6b3BlbihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+ Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0gMCkKKwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4p LCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAllbHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVz ZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlm IChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0J CQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQot CQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4p LCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBH X0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pPdXQgPSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVu KGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsK QEAgLTE1NzAsMzMgKzE1NDUsMjQgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpmaWxlbmFtZSwKIAl9CiB9CiAKLXN0YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMg Y2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBz YXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0 dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0 b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkK K1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJ aW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24n dCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0J ZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9z ZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3Nl IG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgtPmd6T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0Owot CUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsKKwlBSC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAog CkBAIC0xNzIwLDIyICsxNjg2LDE3IEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAogCQlieXRlc193cml0dGVu ID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNlIGlmIChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0 ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1lbWIsIEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1 c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRlbiA9IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwg c2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQg aXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZSBjb25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQg dG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193 cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICop IHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0JewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2lu ZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5l Y3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgotCQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIo QUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGlj LCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dy aXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQli eXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlm IChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAg LTIyMjQsNiArMjE4NSw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBB cmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikK IHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9j b21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAl cywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMgPyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10 KTsKQEAgLTIyNzcsOCArMjIzOSw4IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBj b25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAltZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXpl b2YoQUgtPnNxbHBhcnNlKSk7CiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9u IGZvciBBSCBvdXRwdXQgaGFuZGxlICovCi0JQUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRv dXQ7CisJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK KwlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRf Y29tcHJlc3Nfc3BlYyk7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJp bmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmgKaW5kZXggZjcyNDQ2ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JC VUZTSVpFIDE2Mzg0CiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVm aW5lIEdaQ0xPU0UoZmgpIGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgp IGd6d3JpdGUoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBn enJlYWQoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vs c2UKLSNkZWZpbmUgR1pDTE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMs IG4sIGZoKSAoZndyaXRlKHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMs IG4sIGZoKSBmcmVhZChwLCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0v KiB0aGlzIGlzIGp1c3QgdGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNk ZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3Ry ZWFtCi17Ci0Jdm9pZAkgICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJ CWF2YWlsX2luOwotCXNpemVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9z dHJlYW0gKnpfc3RyZWFtcDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVm aW5lIEJMS19EQVRBIDEKICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBz dHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmls ZSBTcGVjICovCiAJRklMRQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRs ZSAqLwotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJ dm9pZAkgICAqT0Y7CQkJCS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0 b2M7CQkvKiBIZWFkZXIgb2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJ CXRvY0NvdW50OwkJLyogTnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0 Content-Type: text/x-patch; name=v24-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v24-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSA0OTAwYTY2ODEzMTQ0Y2E0MmJhMzQzMzcwYzUyMjU5Y2E4YWZkNDkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjQgSmFuIDIwMjMgMTU6NDA6MTIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NCAyLzNdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCAzOTcgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NiArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAxMDIgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICA0ICsKIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICB8ICAgMiArCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDU3IGluc2VydGlvbnMo KyksIDc1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2d6aXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCmluZGV4IGVmMWVkMGYzZTUuLjAwMTNiYzA4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTI0 LDcgKzI0LDkgQEAgTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVf dXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiAKIE9CSlMgPSBcCiAJJChXSU4zMlJF UykgXAorCWNvbXByZXNzX2d6aXAubyBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3Nfbm9u ZS5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCiAJcGdfYmFja3VwX2FyY2hpdmVy Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNTlkYTRhOTU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGNvbXByZXNzX2d6aXAuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gcmVhZCBv ciB3cml0ZSBhIGd6aXAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19nemlwLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJj b21wcmVzc19nemlwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpZmRlZiBI QVZFX0xJQloKKyNpbmNsdWRlICJ6bGliLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVm IHN0cnVjdCBHemlwQ29tcHJlc3NvclN0YXRlCit7CisJel9zdHJlYW1wCXpwOworCisJdm9pZAkg ICAqb3V0YnVmOworCXNpemVfdAkJb3V0c2l6ZTsKK30gR3ppcENvbXByZXNzb3JTdGF0ZTsKKwor LyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9P ICovCitzdGF0aWMgdm9pZAorRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQoreworCUd6aXBDb21wcmVzc29yU3Rh dGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJ el9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsKKwl2b2lkCSAgICpvdXQgPSBnemlwY3MtPm91dGJ1 ZjsKKwlpbnQJCQlyZXMgPSBaX09LOworCisJd2hpbGUgKGd6aXBjcy0+enAtPmF2YWlsX2luICE9 IDAgfHwgZmx1c2gpCisJeworCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDog Wl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisJCWlmICgoZmx1c2ggJiYg KHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpKQorCQkJfHwgKHpwLT5hdmFpbF9vdXQg PT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKKwkJCSkKKwkJeworCQkJLyoKKwkJCSAq IEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNpbmNlIGEgemVybyBs ZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBjdXN0b20gZm9ybWF0 LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICogaGFwcGVuIGJ1dC4uLgorCQkJICovCisJCQlpZiAo enAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFu eSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8K KwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KKwkJCQkgKi8K KwkJCQlzaXplX3QJCWxlbiA9IGd6aXBjcy0+b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisKKwkJ CQljcy0+d3JpdGVGKEFILCAoY2hhciAqKSBvdXQsIGxlbik7CisJCQl9CisJCQl6cC0+bmV4dF9v dXQgPSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXplOworCQl9CisKKwkJ aWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CitFbmRDb21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0 ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cDsKKworCWlmIChnemlwY3MtPnpw KQorCXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+bmV4dF9pbiA9IE5VTEw7CisJCXpwLT5h dmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxpYiBi dWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisKKwkJaWYg KGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNv bXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKKworCQlwZ19mcmVlKGd6aXBjcy0+b3V0 YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9CisKKwlwZ19mcmVlKGd6aXBjcyk7CisJ Y3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0Fy Y2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkg ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRl ICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpf c3RyZWFtcAl6cDsKKworCWlmICghZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cCA9 ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwkJenAtPnphbGxvYyA9 IFpfTlVMTDsKKwkJenAtPnpmcmVlID0gWl9OVUxMOworCQl6cC0+b3BhcXVlID0gWl9OVUxMOwor CisJCS8qCisJCSAqIG91dHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBj YW4gb3V0cHV0IHRvLiAgV2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUg YmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5kIGEgdHJhaWxpbmcgemVy byBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBjcy0+b3V0YnVmID0gcGdf bWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRzaXplID0gWkxJQl9PVVRf U0laRTsKKworCQkvKgorCQkgKiBBIGxldmVsIG9mIHplcm8gc2ltcGx5IGNvcGllcyB0aGUgaW5w dXQgb25lIGJsb2NrIGF0IHRoZSB0aW1lLiBUaGlzCisJCSAqIGlzIHByb2JhYmx5IG5vdCB3aGF0 IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2UuCisJCSAqLworCQlp ZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPT0gMCkKKwkJCXBnX2ZhdGFsKCJyZXF1ZXN0 ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVsIHdhcyBzcGVjaWZpZWQiKTsK KworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKSAhPSBa X09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJh cnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBp cyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwkJenAtPm5leHRfb3V0ID0g Z3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJfQor CisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBkYXRh KTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JHemlw KEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUd6 aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJlYW1w CXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250Owor CWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkgcGdf bWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAtPnpm cmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxsb2Mo WkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19tYWxs b2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQor CQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMi LAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAq LworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQl6 cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2luID0gY250OworCisJCXdo aWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBv dXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKworCQkJcmVzID0gaW5mbGF0 ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKKwkJ CQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKwor CQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdyaXRl KG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0KKwor CXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMgIT0g Wl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6cC0+ YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCWlm IChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9T SVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBa X09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVz IiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenApOworfQor CisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkv TyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlHemlwQ29t cHJlc3NvclN0YXRlICpnemlwY3M7CisKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNo aXZlR3ppcDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlR3ppcDsKKwljcy0+ ZW5kID0gRW5kQ29tcHJlc3Nvckd6aXA7CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXBy ZXNzaW9uX3NwZWM7CisKKwlnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBwZ19tYWxs b2MwKHNpemVvZihHemlwQ29tcHJlc3NvclN0YXRlKSk7CisKKwljcy0+cHJpdmF0ZV9kYXRhID0g Z3ppcGNzOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3MgRmls ZSBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBzaXplX3QKK0d6 aXBfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJ CXJldDsKKworCXJldCA9IGd6cmVhZChnemZwLCBwdHIsIHNpemUpOworCWlmIChyZXQgIT0gc2l6 ZSAmJiAhZ3plb2YoZ3pmcCkpCisJeworCQlpbnQJCQllcnJudW07CisJCWNvbnN0IGNoYXIgKmVy cm1zZyA9IGd6ZXJyb3IoZ3pmcCwgJmVycm51bSk7CisKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVy cm9yKGVycm5vKSA6IGVycm1zZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNp emVfdAorR3ppcF93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVf ZGF0YTsKKworCXJldHVybiBnendyaXRlKGd6ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBp bnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAg PSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQlyZXQ7CisKKwllcnJubyA9IDA7 CisJcmV0ID0gZ3pnZXRjKGd6ZnApOworCWlmIChyZXQgPT0gRU9GKQorCXsKKwkJaWYgKCFnemVv ZihnemZwKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVz Iiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFk IGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgY2hhciAqCitHemlwX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRl X2RhdGE7CisKKwlyZXR1cm4gZ3pnZXRzKGd6ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBp bnQKK0d6aXBfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZw ID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5V TEw7CisKKwlyZXR1cm4gZ3pjbG9zZShnemZwKTsKK30KKworc3RhdGljIGludAorR3ppcF9lb2Yo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZI LT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3plb2YoZ3pmcCk7Cit9CisKK3N0YXRpYyBjb25z dCBjaGFyICoKK0d6aXBfZ2V0X2Vycm9yKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6 RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmVy cm1zZzsKKwlpbnQJCQllcnJudW07CisKKwllcnJtc2cgPSBnemVycm9yKGd6ZnAsICZlcnJudW0p OworCWlmIChlcnJudW0gPT0gWl9FUlJOTykKKwkJZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOwor CisJcmV0dXJuIGVycm1zZzsKK30KKworc3RhdGljIGludAorR3ppcF9vcGVuKGNvbnN0IGNoYXIg KnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp Cit7CisJZ3pGaWxlCQlnemZwOworCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOworCisJaWYg KENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisJ eworCQkvKgorCQkgKiB1c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28g dGVsbCB6bGliIHRvIHVzZSBpdAorCQkgKi8KKwkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwg c2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCisJCQkJIG1vZGUsIENGSC0+Y29tcHJl c3Npb25fc3BlYy5sZXZlbCk7CisJfQorCWVsc2UKKwkJc3RyY3B5KG1vZGVfY29tcHJlc3Npb24s IG1vZGUpOworCisJaWYgKGZkID49IDApCisJCWd6ZnAgPSBnemRvcGVuKGR1cChmZCksIG1vZGVf Y29tcHJlc3Npb24pOworCWVsc2UKKwkJZ3pmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNz aW9uKTsKKworCWlmIChnemZwID09IE5VTEwpCisJCXJldHVybiAxOworCisJQ0ZILT5wcml2YXRl X2RhdGEgPSBnemZwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbl93 cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwljaGFyCSAgICpmbmFtZTsKKwlpbnQJCQlyZXQ7CisJaW50CQkJc2F2ZV9l cnJubzsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5v cGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBDRkgpOworCisJc2F2ZV9lcnJubyA9IGVycm5vOwor CXBnX2ZyZWUoZm5hbWUpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9 CisKK3ZvaWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlDRkgtPm9w ZW5fZnVuYyA9IEd6aXBfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGVfZnVuYyA9IEd6aXBfb3Blbl93 cml0ZTsKKwlDRkgtPnJlYWRfZnVuYyA9IEd6aXBfcmVhZDsKKwlDRkgtPndyaXRlX2Z1bmMgPSBH emlwX3dyaXRlOworCUNGSC0+Z2V0c19mdW5jID0gR3ppcF9nZXRzOworCUNGSC0+Z2V0Y19mdW5j ID0gR3ppcF9nZXRjOworCUNGSC0+Y2xvc2VfZnVuYyA9IEd6aXBfY2xvc2U7CisJQ0ZILT5lb2Zf ZnVuYyA9IEd6aXBfZW9mOworCUNGSC0+Z2V0X2Vycm9yX2Z1bmMgPSBHemlwX2dldF9lcnJvcjsK KworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwlDRkgtPnBy aXZhdGVfZGF0YSA9IE5VTEw7Cit9CisjZWxzZQkJCQkJCQkvKiBIQVZFX0xJQlogKi8KK3ZvaWQK K0luaXRDb21wcmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVp bGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKK30KKwor dm9pZAorSW5pdENvbXByZXNzR3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7 Cit9CisjZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfZ3ppcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40NWZkZjAxZjdkCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaApAQCAtMCwwICsxLDI0 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmgKKyAqCSBHWklQ IGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfZ3ppcC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgX0NPTVBSRVNTX0daSVBfSF8KKyNkZWZpbmUgX0NPTVBSRVNTX0daSVBfSF8KKworI2luY2x1 ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yR3ppcChDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NHemlwKENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0daSVBf SF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggZWYwMzM5MTRiYS4uZWE0YzI2NmUwOCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTksNDIgKzksNTQgQEAKICAqCiAgKiBUaGlzIGZpbGUgaW5j bHVkZXMgdHdvIEFQSXMgZm9yIGRlYWxpbmcgd2l0aCBjb21wcmVzc2VkIGRhdGEuIFRoZSBmaXJz dAogICogcHJvdmlkZXMgbW9yZSBmbGV4aWJpbGl0eSwgdXNpbmcgY2FsbGJhY2tzIHRvIHJlYWQv d3JpdGUgZGF0YSBmcm9tIHRoZQotICogdW5kZXJseWluZyBzdHJlYW0uIFRoZSBzZWNvbmQgQVBJ IGlzIGEgd3JhcHBlciBhcm91bmQgZm9wZW4vZ3pvcGVuIGFuZAorICogdW5kZXJseWluZyBzdHJl YW0uIFRoZSBzZWNvbmQgQVBJIGlzIGEgd3JhcHBlciBhcm91bmQgZm9wZW4gYW5kCiAgKiBmcmll bmRzLCBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhvc2UsIGJ1dCBhYnN0cmFj dHMgYXdheQotICogdGhlIHBvc3NpYmxlIGNvbXByZXNzaW9uLiBCb3RoIEFQSXMgdXNlIGxpYnog Zm9yIHRoZSBjb21wcmVzc2lvbiwgYnV0Ci0gKiB0aGUgc2Vjb25kIEFQSSB1c2VzIGd6aXAgaGVh ZGVycywgc28gdGhlIHJlc3VsdGluZyBmaWxlcyBjYW4gYmUgZWFzaWx5Ci0gKiBtYW5pcHVsYXRl ZCB3aXRoIHRoZSBnemlwIHV0aWxpdHkuCisgKiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIFRo ZSBzZWNvbmQgQVBJIGlzIGFpbWVkIGZvciB0aGUgcmVzdWx0aW5nCisgKiBmaWxlcyB0byBiZSBl YXNpbHkgbWFuaXB1bGF0ZWQgd2l0aCBhbiBleHRlcm5hbCBjb21wcmVzc2lvbiB1dGlsaXR5Cisg KiBwcm9ncmFtLgorICoKKyAqIFRoaXMgZmlsZSBhbHNvIGluY2x1ZGVzIHRoZSBpbXBsZW1lbnRh dGlvbiB3aGVuIGNvbXByZXNzaW9uIGlzIG5vbmUgZm9yCisgKiBib3RoIEFQSSdzLgogICoKICAq IENvbXByZXNzb3IgQVBJCiAgKiAtLS0tLS0tLS0tLS0tLQogICoKICAqCVRoZSBpbnRlcmZhY2Ug Zm9yIHdyaXRpbmcgdG8gYW4gYXJjaGl2ZSBjb25zaXN0cyBvZiB0aHJlZSBmdW5jdGlvbnM6Ci0g KglBbGxvY2F0ZUNvbXByZXNzb3IsIFdyaXRlRGF0YVRvQXJjaGl2ZSBhbmQgRW5kQ29tcHJlc3Nv ci4gRmlyc3QgeW91IGNhbGwKLSAqCUFsbG9jYXRlQ29tcHJlc3NvciwgdGhlbiB3cml0ZSBhbGwg dGhlIGRhdGEgYnkgY2FsbGluZyBXcml0ZURhdGFUb0FyY2hpdmUKLSAqCWFzIG1hbnkgdGltZXMg YXMgbmVlZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29yLiBXcml0ZURhdGFUb0FyY2hpdmUK LSAqCWFuZCBFbmRDb21wcmVzc29yIHdpbGwgY2FsbCB0aGUgV3JpdGVGdW5jIHRoYXQgd2FzIHBy b3ZpZGVkIHRvCi0gKglBbGxvY2F0ZUNvbXByZXNzb3IgZm9yIGVhY2ggY2h1bmsgb2YgY29tcHJl c3NlZCBkYXRhLgotICoKLSAqCVRoZSBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW4gYXJjaGl2ZSBj b25zaXN0cyBvZiBqdXN0IG9uZSBmdW5jdGlvbjoKLSAqCVJlYWREYXRhRnJvbUFyY2hpdmUuIFJl YWREYXRhRnJvbUFyY2hpdmUgcmVhZHMgdGhlIHdob2xlIGNvbXByZXNzZWQgaW5wdXQKLSAqCXN0 cmVhbSwgYnkgcmVwZWF0ZWRseSBjYWxsaW5nIHRoZSBnaXZlbiBSZWFkRnVuYy4gUmVhZEZ1bmMg cmV0dXJucyB0aGUKLSAqCWNvbXByZXNzZWQgZGF0YSBjaHVuayBhdCBhIHRpbWUsIGFuZCBSZWFk RGF0YUZyb21BcmNoaXZlIGRlY29tcHJlc3NlcyBpdAotICoJYW5kIHBhc3NlcyB0aGUgZGVjb21w cmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVuYyByZXR1cm5zIDAKLSAqCXRv IHNpZ25hbCBFT0YuCi0gKgotICoJVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBmb3IgY29tcHJl c3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHdy aXRlRGF0YSwgYW5kIEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNv bXByZXNzb3IsIHRoZW4gd3JpdGUgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgd3JpdGVEYXRhIGFz IG1hbnkKKyAqCXRpbWVzIGFzIG5lZWRlZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gd3Jp dGVEYXRhIHdpbGwgY2FsbCB0aGUKKyAqCVdyaXRlRnVuYyB0aGF0IHdhcyBwcm92aWRlZCB0byBB bGxvY2F0ZUNvbXByZXNzb3IgZm9yIGVhY2ggY2h1bmsgb2YKKyAqCWNvbXByZXNzZWQgZGF0YS4K KyAqCisgKglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29uc2lzdHMgb2Yg dGhlIHNhbWUgdGhyZWUgZnVuY3Rpb25zOgorICoJQWxsb2NhdGVDb21wcmVzc29yLCByZWFkRGF0 YSwgYW5kIEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNvbXByZXNz b3IsIHRoZW4gcmVhZCBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyByZWFkRGF0YSB0byByZWFkIHRo ZQorICoJd2hvbGUgY29tcHJlc3NlZCBzdHJlYW0gd2hpY2ggcmVwZWF0ZWRseSBjYWxscyB0aGUg Z2l2ZW4gUmVhZEZ1bmMuIFJlYWRGdW5jCisgKglyZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEg b25lIGNodW5rIGF0IGEgdGltZS4gVGhlbiByZWFkRGF0YSBkZWNvbXByZXNzZXMKKyAqCWl0IGFu ZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50aWwgUmVhZEZ1 bmMgcmV0dXJucyAwCisgKgl0byBzaWduYWwgRU9GLiBUaGUgaW50ZXJmYWNlIGlzIHRoZSBzYW1l IGZvciBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQKKyAqCXN0cmVhbXMuCiAgKgogICogQ29t cHJlc3NlZCBzdHJlYW0gQVBJCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgotICoJVGhl IGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHN0YW5kYXJk IGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dzIHlvdSB0byB1 c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2Vk IHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJdGhlIGZpbGUg d2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNh bWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkgb3BlbnMgYSBm aWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRoZSBm aWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBzdWZmaXggdG8g dGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhhbmRsZSBib3Ro Ci0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglUaGUgY29tcHJlc3Nl ZCBzdHJlYW0gQVBJIGlzIHByb3ZpZGluZyBhIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyBmb3IK KyAqCW9wZW5pbmcsIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBmaW5hbGx5IGNsb3NpbmcgZmlsZXMu IFRoZSBpbXBsZW1lbnRlZAorICoJZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGRvY3VtZW50ZWQgaW4g dGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgYW5kIGFyZQorICoJY29tbW9uIGZvciBhbGwg c3RyZWFtcy4gSXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBm b3IKKyAqCWJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuCisgKgorICoJ VGhlIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aHJlZSBmdW5jdGlvbnMsIEluaXRDb21wcmVzc0Zp bGVIYW5kbGUsCisgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUsIGFuZCBFbmRDb21w cmVzc0ZpbGVIYW5kbGUuIElmIHRoZQorICoJY29tcHJlc3Npb24gaXMga25vd24sIHRoZW4gc3Rh cnQgYnkgY2FsbGluZyBJbml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICoJb3RoZXJ3aXNlIGRpc2Nv dmVyIGl0IGJ5IHVzaW5nIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZS4gVGhlbiBjYWxs CisgKgl0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXMgcmVxdWlyZWQgZm9yIHRoZSByZWFkL3dyaXRl IG9wZXJhdGlvbnMuIEZpbmFsbHkKKyAqCWNhbGwgRW5kQ29tcHJlc3NGaWxlSGFuZGxlIHRvIGVu ZCB0aGUgc3RyZWFtLgorICoKKyAqCUluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSB0cmll cyB0byBkZWZmZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRoZQorICoJZmlsZW5hbWUgc3VmZml4LiBJ ZiB0aGUgc3VmZml4IGlzIG5vdCB5ZXQga25vd24sIHRoZW4gaXQgdHJpZXMgdG8gc2ltcGx5Cisg KglvcGVuIHRoZSBmaWxlLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNh bWUgZmlsZSB3aXRoIHRoZSAuZ3oKKyAqCXN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgog ICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTUzLDEyMiArNjUsMzggQEAK ICAqLwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor I2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1 ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgogI2luY2x1ZGUg InBnX2JhY2t1cF91dGlscy5oIgogCi0jaWZkZWYgSEFWRV9MSUJaCi0jaW5jbHVkZSA8emxpYi5o PgotI2VuZGlmCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkK ICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIHR5cGVkZWYgYXBwZWFycyBpbiBj b21wcmVzc19pby5oICovCi1zdHJ1Y3QgQ29tcHJlc3NvclN0YXRlCi17Ci0JcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOwotCVdyaXRlRnVuYwl3cml0ZUY7Ci0KLSNp ZmRlZiBIQVZFX0xJQloKLQl6X3N0cmVhbXAJenA7Ci0JY2hhcgkgICAqemxpYk91dDsKLQlzaXpl X3QJCXpsaWJPdXRTaXplOwotI2VuZGlmCi19OwotCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQg emxpYiBjb21wcmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgdm9p ZCBJbml0Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsKLXN0 YXRpYyB2b2lkIERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0YXRpYyB2b2lkIFJlYWRE YXRhRnJvbUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1z dGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExl bik7Ci1zdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcyk7Ci0jZW5kaWYKLQotLyogUm91dGluZXMgdGhhdCBzdXBwb3J0IHVu Y29tcHJlc3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZU5v bmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lkIFdyaXRl RGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3Ms Ci0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsKLQotLyogUHVibGlj IGludGVyZmFjZSByb3V0aW5lcyAqLwotCi0vKiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVzc29yICov CisvKgorICogQWxsb2NhdGUgYSBuZXcgY29tcHJlc3Nvci4KKyAqLwogQ29tcHJlc3NvclN0YXRl ICoKIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMsCi0JCQkJICAgV3JpdGVGdW5jIHdyaXRlRikKKwkJCQkgICBSZWFkRnVu YyByZWFkRiwgV3JpdGVGdW5jIHdyaXRlRikKIHsKIAlDb21wcmVzc29yU3RhdGUgKmNzOwogCi0j aWZuZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9HWklQKQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0KIAljcyA9IChDb21wcmVz c29yU3RhdGUgKikgcGdfbWFsbG9jMChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7CisJY3MtPnJl YWRGID0gcmVhZEY7CiAJY3MtPndyaXRlRiA9IHdyaXRlRjsKLQljcy0+Y29tcHJlc3Npb25fc3Bl YyA9IGNvbXByZXNzaW9uX3NwZWM7Ci0KLQkvKgotCSAqIFBlcmZvcm0gY29tcHJlc3Npb24gYWxn b3JpdGhtIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgotCSAqLwotI2lmZGVmIEhBVkVfTElCWgot CWlmIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKLQkJSW5pdENvbXByZXNzb3JabGliKGNzLCBjcy0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7 Ci0jZW5kaWYKLQotCXJldHVybiBjczsKLX0KIAotLyoKLSAqIFJlYWQgYWxsIGNvbXByZXNzZWQg ZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5kIHByaW50IGl0Ci0gKiBv dXQgd2l0aCBhaHdyaXRlKCkuCi0gKi8KLXZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2 ZUhhbmRsZSAqQUgsCi0JCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYywKLQkJCQkJUmVhZEZ1bmMgcmVhZEYpCi17CiAJaWYgKGNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVJlYWREYXRhRnJvbUFyY2hp dmVOb25lKEFILCByZWFkRik7Ci0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0daSVApCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQlSZWFkRGF0YUZyb21B cmNoaXZlWmxpYihBSCwgcmVhZEYpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0K LX0KKwkJSW5pdENvbXByZXNzb3JOb25lKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsKKwllbHNlIGlm IChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQlJ bml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwogCi0vKgotICogQ29tcHJl c3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgotICov Ci12b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCi0JCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0Jc3dp dGNoIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCi0JewotCQljYXNlIFBHX0NPTVBS RVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlXcml0ZURhdGFUb0FyY2hpdmVabGli KEFILCBjcywgZGF0YSwgZExlbik7Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCQkJ YnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCVdyaXRlRGF0YVRvQXJjaGl2 ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNT SU9OX0xaNDoKLQkJCS8qIGZhbGx0aHJvdWdoICovCi0JCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNU RDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotCQkJYnJlYWs7 Ci0JfQorCXJldHVybiBjczsKIH0KIAogLyoKQEAgLTE3NywyMzMgKzEwNSwzMSBAQCBXcml0ZURh dGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2b2lk CiBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQog ewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjcy0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJRW5kQ29tcHJlc3NvclpsaWIoQUgsIGNzKTsKLSNl bmRpZgotCWZyZWUoY3MpOworCWNzLT5lbmQoQUgsIGNzKTsKKwlwZ19mcmVlKGNzKTsKIH0KIAot LyogUHJpdmF0ZSByb3V0aW5lcywgc3BlY2lmaWMgdG8gZWFjaCBjb21wcmVzc2lvbiBtZXRob2Qu ICovCi0KLSNpZmRlZiBIQVZFX0xJQloKLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHpsaWIgY29tcHJl c3NlZCBvdXRwdXQuCi0gKi8KLQotc3RhdGljIHZvaWQKLUluaXRDb21wcmVzc29yWmxpYihDb21w cmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpCi17Ci0Jel9zdHJlYW1wCXpwOwotCi0JenAgPSBj cy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnph bGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUgPSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVM TDsKLQotCS8qCi0JICogemxpYk91dFNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxp YiBpdCBjYW4gb3V0cHV0IHRvLiAgV2UKLQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUgZXh0cmEg Ynl0ZSBiZWNhdXNlIHNvbWUgcm91dGluZXMgd2FudCB0byBhcHBlbmQgYQotCSAqIHRyYWlsaW5n IHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQuCi0JICovCi0JY3MtPnpsaWJPdXQgPSAoY2hh ciAqKSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOwotCWNzLT56bGliT3V0U2l6ZSA9IFpM SUJfT1VUX1NJWkU7Ci0KLQlpZiAoZGVmbGF0ZUluaXQoenAsIGxldmVsKSAhPSBaX09LKQotCQlw Z19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMiLAot CQkJCSB6cC0+bXNnKTsKLQotCS8qIEp1c3QgYmUgcGFyYW5vaWQgLSBtYXliZSBFbmQgaXMgY2Fs bGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRlICovCi0JenAtPm5leHRfb3V0ID0gKHZvaWQg KikgY3MtPnpsaWJPdXQ7Ci0JenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0U2l6ZTsKLX0KLQot c3RhdGljIHZvaWQKLUVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzKQotewotCXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQotCXpwLT5uZXh0X2lu ID0gTlVMTDsKLQl6cC0+YXZhaWxfaW4gPSAwOwotCi0JLyogRmx1c2ggYW55IHJlbWFpbmluZyBk YXRhIGZyb20gemxpYiBidWZmZXIgKi8KLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCB0 cnVlKTsKLQotCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUoY3Mt PnpsaWJPdXQpOwotCWZyZWUoY3MtPnpwKTsKLX0KLQotc3RhdGljIHZvaWQKLURlZmxhdGVDb21w cmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBm bHVzaCkKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0JY2hhcgkgICAqb3V0ID0gY3MtPnps aWJPdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQotCXdoaWxlIChjcy0+enAtPmF2YWlsX2luICE9 IDAgfHwgZmx1c2gpCi0JewotCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDog Wl9OT19GTFVTSCk7Ci0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCi0JCQlwZ19mYXRhbCgi Y291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0JCWlmICgoZmx1c2ggJiYg KHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpKQotCQkJfHwgKHpwLT5hdmFpbF9vdXQg PT0gMCkKLQkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKLQkJCSkKLQkJewotCQkJLyoKLQkJCSAq IEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNpbmNlIGEgemVybyBs ZW5ndGgKLQkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBjdXN0b20gZm9ybWF0 LiBUaGlzIHNob3VsZCBuZXZlcgotCQkJICogaGFwcGVuIGJ1dC4uLgotCQkJICovCi0JCQlpZiAo enAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIEFu eSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8K LQkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KLQkJCQkgKi8K LQkJCQlzaXplX3QJCWxlbiA9IGNzLT56bGliT3V0U2l6ZSAtIHpwLT5hdmFpbF9vdXQ7Ci0KLQkJ CQljcy0+d3JpdGVGKEFILCBvdXQsIGxlbik7Ci0JCQl9Ci0JCQl6cC0+bmV4dF9vdXQgPSAodm9p ZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOwotCQl9Ci0KLQkJ aWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCi0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk Ci1Xcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAotCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQljcy0+ enAtPm5leHRfaW4gPSAodm9pZCAqKSB1bmNvbnN0aWZ5KGNoYXIgKiwgZGF0YSk7Ci0JY3MtPnpw LT5hdmFpbF9pbiA9IGRMZW47Ci0JRGVmbGF0ZUNvbXByZXNzb3JabGliKEFILCBjcywgZmFsc2Up OwotfQotCi1zdGF0aWMgdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRs ZSAqQUgsIFJlYWRGdW5jIHJlYWRGKQotewotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICpvdXQ7 Ci0JaW50CQkJcmVzID0gWl9PSzsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7Ci0Jc2l6 ZV90CQlidWZsZW47Ci0KLQl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJl YW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+ b3BhcXVlID0gWl9OVUxMOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7Ci0JYnVm bGVuID0gWkxJQl9JTl9TSVpFOwotCi0Jb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAx KTsKLQotCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5v dCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0K LQkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8KLQl3aGlsZSAoKGNudCA9IHJl YWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1 ZjsKLQkJenAtPmF2YWlsX2luID0gY250OwotCi0JCXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQot CQl7Ci0JCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCQl6cC0+YXZhaWxfb3V0ID0g WkxJQl9PVVRfU0laRTsKLQotCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0JCQlpZiAocmVzICE9 IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHVu Y29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQotCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6 cC0+YXZhaWxfb3V0XSA9ICdcMCc7Ci0JCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAt IHpwLT5hdmFpbF9vdXQsIEFIKTsKLQkJfQotCX0KLQotCXpwLT5uZXh0X2luID0gTlVMTDsKLQl6 cC0+YXZhaWxfaW4gPSAwOwotCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQotCXsKLQkJenAt Pm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0la RTsKLQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7Ci0JCWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0g Wl9TVFJFQU1fRU5EKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVz IiwgenAtPm1zZyk7Ci0KLQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdc MCc7Ci0JCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgp OwotCX0KLQotCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7Ci0KLQlmcmVlKGJ1 Zik7Ci0JZnJlZShvdXQpOwotCWZyZWUoenApOwotfQotI2VuZGlmCQkJCQkJCS8qIEhBVkVfTElC WiAqLwotCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHVuY29tcHJlc3NlZCBvdXRwdXQuCi0gKi8K LQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFI LCBSZWFkRnVuYyByZWFkRikKLXsKLQlzaXplX3QJCWNudDsKLQljaGFyCSAgICpidWY7Ci0Jc2l6 ZV90CQlidWZsZW47Ci0KLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7Ci0JYnVmbGVu ID0gWkxJQl9PVVRfU0laRTsKLQotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZidWYsICZidWZs ZW4pKSkKLQl7Ci0JCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKLQl9Ci0KLQlmcmVlKGJ1Zik7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXpl X3QgZExlbikKLXsKLQljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKLX0KLQotCiAvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbXByZXNzZWQgc3RyZWFtIEFQSQogICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKi8KIAogLyoKLSAqIGNmcCByZXByZXNlbnRzIGFuIG9wZW4gc3RyZWFt LCB3cmFwcGluZyB0aGUgdW5kZXJseWluZyBGSUxFIG9yIGd6RmlsZQotICogcG9pbnRlci4gVGhp cyBpcyBvcGFxdWUgdG8gdGhlIGNhbGxlcnMuCisgKiBQcml2YXRlIHJvdXRpbmVzCiAgKi8KLXN0 cnVjdCBjZnAKK3N0YXRpYyBpbnQKK2hhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u c3QgY2hhciAqc3VmZml4KQogewotCUZJTEUJICAgKnVuY29tcHJlc3NlZGZwOwotI2lmZGVmIEhB VkVfTElCWgotCWd6RmlsZQkJY29tcHJlc3NlZGZwOwotI2VuZGlmCi19OworCWludAkJCWZpbGVu YW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKwlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3Vm Zml4KTsKIAotI2lmZGVmIEhBVkVfTElCWgotc3RhdGljIGludAloYXNTdWZmaXgoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci0jZW5kaWYKKwlpZiAoZmlsZW5hbWVs ZW4gPCBzdWZmaXhsZW4pCisJCXJldHVybiAwOworCisJcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVb ZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAorCQkJCSAgc3VmZml4LAorCQkJCSAgc3VmZml4bGVu KSA9PSAwOworfQogCiAvKiBmcmVlKCkgd2l0aG91dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVsIGlu IHNldmVyYWwgcGxhY2VzIGJlbG93ICovCiBzdGF0aWMgdm9pZApAQCAtNDE2LDMyNCArMTQyLDEw MiBAQCBmcmVlX2tlZXBfZXJybm8odm9pZCAqcCkKIH0KIAogLyoKLSAqIE9wZW4gYSBmaWxlIGZv ciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQK LSAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KLSAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcg ZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZiAncGF0aCcKLSAq IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAi Zm9vIiBhcyAncGF0aCcsCi0gKiB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5n eiIuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGlu IGVycm5vLgorICogUHVibGljIGludGVyZmFjZQogICovCi1jZnAgKgotY2ZvcGVuX3JlYWQoY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKLXsKLQljZnAJCSAgICpmcDsKLQotCXBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKLQotI2lmZGVm IEhBVkVfTElCWgotCWlmIChoYXNTdWZmaXgocGF0aCwgIi5neiIpKQotCXsKLQkJY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotCQlmcCA9IGNmb3Blbihw YXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQl9Ci0JZWxzZQotI2VuZGlmCi0JewotCQlj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JCWZwID0g Y2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotI2lmZGVmIEhBVkVfTElCWgot CQlpZiAoZnAgPT0gTlVMTCkKLQkJewotCQkJY2hhcgkgICAqZm5hbWU7Ci0KLQkJCWZuYW1lID0g cHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0JCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJl c3Npb25fc3BlYyk7Ci0JCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwotCQl9Ci0jZW5kaWYKLQl9 Ci0JcmV0dXJuIGZwOwotfQogCiAvKgotICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcuICdwYXRo JyBpbmRpY2F0ZXMgdGhlIHBhdGggbmFtZSwgYW5kICdtb2RlJyBtdXN0Ci0gKiBiZSBhIGZpbGVt b2RlIGFzIGFjY2VwdGVkIGJ5IGZvcGVuKCkgYW5kIGd6b3BlbigpIHRoYXQgaW5kaWNhdGVzIHdy aXRpbmcKLSAqICgidyIsICJ3YiIsICJhIiwgb3IgImFiIikuCi0gKgotICogSWYgJ2NvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtJyBpcyBHWklQLCBhIGd6aXAgY29tcHJlc3NlZCBzdHJlYW0gaXMg b3BlbmVkLAotICogYW5kICdjb21wcmVzc2lvbl9zcGVjLmxldmVsJyB1c2VkLiBUaGUgIi5neiIg c3VmZml4IGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8KLSAqICdwYXRoJyBpbiB0aGF0IGNhc2Uu Ci0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVy cm5vLgotICovCi1jZnAgKgotY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNo YXIgKm1vZGUsCi0JCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKQotewotCWNmcAkJICAgKmZwOwotCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNv bXByZXNzaW9uX3NwZWMpOwotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWNoYXIJICAg KmZuYW1lOwotCi0JCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCWZwID0gY2Zv cGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJZnJlZV9rZWVwX2Vycm5vKGZu YW1lKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29t cHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0JCWZwID0gTlVMTDsJCQkJLyoga2VlcCBjb21w aWxlciBxdWlldCAqLwotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KLQotLyoKLSAqIFRoaXMg aXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBmaWxl ICdwYXRoJyBvcgotICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFs aWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKLSAqIGRlc2NyaXB0b3IgaXMgbm90IGR1cCdl ZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgotICogVGhl IGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBzdXBw b3J0ZWQgYnkgdGhlCi0gKiBjdXJyZW50IGJ1aWxkLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVy biBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIEluaXRpYWxpemUgYSBjb21w cmVzcyBmaWxlIGhhbmRsZSBmb3IgdGhlIHNwZWNpZmllZCBjb21wcmVzc2lvbiBhbGdvcml0aG0u CiAgKi8KLXN0YXRpYyBjZnAgKgotY2ZvcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGlu dCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdENvbXByZXNzRmlsZUhh bmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7 Ci0JY2ZwCQkgICAqZnAgPSBwZ19tYWxsb2MwKHNpemVvZihjZnApKTsKKwlDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSDsKIAotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01Q UkVTU0lPTl9HWklQKQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGNvbXByZXNzaW9uX3Nw ZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQotCQl7Ci0JCQkvKiB1c2VyIGhhcyBz cGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdCAqLwot CQkJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07Ci0KLQkJCXNucHJpbnRmKG1vZGVfY29tcHJl c3Npb24sIHNpemVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAotCQkJCQkgbW9kZSwgY29t cHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCQlpZiAoZmQgPj0gMCkKLQkJCQlmcC0+Y29tcHJlc3Nl ZGZwID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCQllbHNlCi0JCQkJZnAtPmNv bXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJfQotCQllbHNl Ci0JCXsKLQkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVm YXVsdCAqLwotCQkJaWYgKGZkID49IDApCi0JCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4o ZmQsIG1vZGUpOwotCQkJZWxzZQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwg bW9kZSk7Ci0JCX0KLQotCQlpZiAoZnAtPmNvbXByZXNzZWRmcCA9PSBOVUxMKQotCQl7Ci0JCQlm cmVlX2tlZXBfZXJybm8oZnApOwotCQkJZnAgPSBOVUxMOwotCQl9Ci0jZWxzZQotCQlwZ19mYXRh bCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3pp cCIpOwotI2VuZGlmCi0JfQotCWVsc2UKLQl7Ci0JCWlmIChmZCA+PSAwKQotCQkJZnAtPnVuY29t cHJlc3NlZGZwID0gZmRvcGVuKGZkLCBtb2RlKTsKLQkJZWxzZQotCQkJZnAtPnVuY29tcHJlc3Nl ZGZwID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJQ0ZIID0gcGdfbWFsbG9jMChzaXplb2YoQ29tcHJl c3NGaWxlSGFuZGxlKSk7CiAKLQkJaWYgKGZwLT51bmNvbXByZXNzZWRmcCA9PSBOVUxMKQotCQl7 Ci0JCQlmcmVlX2tlZXBfZXJybm8oZnApOwotCQkJZnAgPSBOVUxMOwotCQl9Ci0JfQorCWlmIChj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQorCQlJbml0 Q29tcHJlc3NOb25lKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJSW5pdENvbXByZXNz R3ppcChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwogCi0JcmV0dXJuIGZwOworCXJldHVybiBDRkg7 CiB9CiAKIC8qCi0gKiBPcGVucyBmaWxlICdwYXRoJyBpbiAnbW9kZScgYW5kIGNvbXByZXNzaW9u IGFzIGRlZmluZWQgaW4KLSAqIGNvbXByZXNzaW9uX3NwZWMuIFRoZSBjYWxsZXIgbXVzdCB2ZXJp ZnkgdGhhdCB0aGUgY29tcHJlc3Npb24KLSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBi dWlsZC4KKyAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8g b3BlbiwgYW5kICdtb2RlJyBzaG91bGQKKyAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0g KiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0g Ki8KLWNmcCAqCi1jZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkg ICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCi17Ci0J cmV0dXJuIGNmb3Blbl9pbnRlcm5hbChwYXRoLCAtMSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7 Ci19Ci0KLS8qCi0gKiBBc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxp ZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScKLSAqIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGlu IGNvbXByZXNzaW9uX3NwZWMuIFRoZSBjYWxsZXIgbXVzdAotICogdmVyaWZ5IHRoYXQgdGhlIGNv bXByZXNzaW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIElmIHRoZSBm aWxlIGF0ICdwYXRoJyBjb250YWlucyB0aGUgc3VmZml4IG9mIGEgc3VwcG9ydGVkIGNvbXByZXNz aW9uIG1ldGhvZCwKKyAqIGN1cnJlbnRseSB0aGlzIGluY2x1ZGVzIG9ubHkgIi5neiIsIHRoZW4g dGhpcyBjb21wcmVzc2lvbiB3aWxsIGJlIHVzZWQKKyAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0 aGUgY29tcHJlc3Npb24gd2lsbCBiZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKKyAq IHRvIG9wZW4gdGhlIGZpbGUgYXQgJ3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRp bmcga25vd24gY29tcHJlc3Npb24KKyAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBh cyAncGF0aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvcgorICogImZvby5neiIsIHRy eWluZyBpbiB0aGF0IG9yZGVyLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGgg YW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNmZG9wZW4oaW50IGZkLCBjb25z dCBjaGFyICptb2RlLAotCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCitDb21wcmVzc0ZpbGVIYW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxl SGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JcmV0dXJuIGNm b3Blbl9pbnRlcm5hbChOVUxMLCBmZCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19CisJQ29t cHJlc3NGaWxlSGFuZGxlICpDRkggPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJICAg KmZuYW1lOworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHsw fTsKIAotaW50Ci1jZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLQlpbnQJ CQlyZXQ7CisJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05F OwogCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuIDA7CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAi ciIpID09IDAgfHwgc3RyY21wKG1vZGUsICJyYiIpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJa Ci0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNz ZWRmcCwgcHRyLCBzaXplKTsKLQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJl c3NlZGZwKSkKLQkJewotCQkJaW50CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0g Z3plcnJvcihmcC0+Y29tcHJlc3NlZGZwLCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1cChwYXRo KTsKIAotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAot CQkJCQkgZXJybnVtID09IFpfRVJSTk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQl9 Ci0JfQorCWlmIChoYXNTdWZmaXgoZm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCWVsc2UKLSNlbmRpZgogCXsKLQkJcmV0 ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9 IHNpemUgJiYgIWZlb2YoZnAtPnVuY29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChm cC0+dW5jb21wcmVzc2VkZnApOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUo Y29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloK LQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRm cCwgcHRyLCBzaXplKTsKLQllbHNlCi0jZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNp emUsIGZwLT51bmNvbXByZXNzZWRmcCk7Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0J aW50CQkJcmV0OworCQlib29sCQlleGlzdHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0 KSA9PSAwKTsKKwkJLyogYXZvaWQgdW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWxkIHdp dGggY29tcHJlc3Npb24gKi8KKwkJaWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAt PmNvbXByZXNzZWRmcCkKLQl7Ci0JCXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJ aWYgKHJldCA9PSBFT0YpCisJCWlmICghZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5j b21wcmVzc2VkZnApKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZp bGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJZnJlZV9rZWVwX2Vy cm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlz dHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQljb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KLQl9Ci0J ZWxzZQogI2VuZGlmCi0JewotCQlyZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlp ZiAocmV0ID09IEVPRikKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwog CX0KIAotCXJldHVybiByZXQ7Ci19Ci0KLWNoYXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1 ZiwgaW50IGxlbikKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkK LQkJcmV0dXJuIGd6Z2V0cyhmcC0+Y29tcHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2Vu ZGlmCi0JCXJldHVybiBmZ2V0cyhidWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQot aW50Ci1jZmNsb3NlKGNmcCAqZnApCi17Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5V TEwpCi0JewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZF X0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1v ZGUsIENGSCkpCiAJewotCQlyZXN1bHQgPSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlm cC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9 IE5VTEw7CiAJfQotCWVsc2UKLSNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNv bXByZXNzZWRmcCk7Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWZyZWVfa2Vl cF9lcnJubyhmcCk7CisJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXN1bHQ7 CisJcmV0dXJuIENGSDsKIH0KIAorLyoKKyAqIENsb3NlIGFuIG9wZW4gZmlsZSBoYW5kbGUgYW5k IHJlbGVhc2UgaXRzIG1lbW9yeS4KKyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGFuIGVycm9y IHZhbHVlIGFuZCBzZXRzIGVycm5vIGFwcHJvcHJpYXRlbHkuCisgKi8KIGludAotY2Zlb2YoY2Zw ICpmcCkKK0VuZENvbXByZXNzRmlsZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsK LSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9m KGZwLT5jb21wcmVzc2VkZnApOwotCWVsc2UKLSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5j b21wcmVzc2VkZnApOwotfQorCWludAkJCXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2Nm cF9lcnJvcihjZnAgKmZwKQotewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3Nl ZGZwKQotCXsKLQkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9y KGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJ cmV0ID0gQ0ZILT5jbG9zZV9mdW5jKENGSCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQot CQkJcmV0dXJuIGVycm1zZzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwot fQorCWZyZWVfa2VlcF9lcnJubyhDRkgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50 Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsK LQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4bGVu ID0gc3RybGVuKHN1ZmZpeCk7Ci0KLQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCi0JCXJl dHVybiAwOwotCi0JcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhs ZW5dLAotCQkJCSAgc3VmZml4LAotCQkJCSAgc3VmZml4bGVuKSA9PSAwOworCXJldHVybiByZXQ7 CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCBhNmNkZjU4OGRkLi5hN2E0ZmVj MDM2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMjEsNTAgKzIxLDE2MCBAQAogI2RlZmluZSBa TElCX09VVF9TSVpFCTQwOTYKICNkZWZpbmUgWkxJQl9JTl9TSVpFCTQwOTYKIAotLyogUHJvdG90 eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0byBXcml0ZURhdGFUb0FyY2hpdmUoKSAqLworLyoK KyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBpbiB3cml0ZURhdGEoKQor ICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogLyoKLSAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sg ZnVuY3Rpb24gdG8gUmVhZERhdGFGcm9tQXJjaGl2ZSgpCisgKiBQcm90b3R5cGUgZm9yIGNhbGxi YWNrIGZ1bmN0aW9uIHVzZWQgaW4gcmVhZERhdGEoKQogICoKLSAqIFJlYWREYXRhRnJvbUFyY2hp dmUgd2lsbCBjYWxsIHRoZSByZWFkIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVudGlsIGl0Ci0gKiBy ZXR1cm5zIDAgdG8gc2lnbmFsIEVPRi4gUmVhZERhdGFGcm9tQXJjaGl2ZSBwYXNzZXMgYSBidWZm ZXIgdG8gcmVhZCB0aGUKLSAqIGRhdGEgaW50byBpbiAqYnVmLCBvZiBsZW5ndGggKmJ1Zmxlbi4g SWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUKLSAqIGNhbGxiYWNrIGZ1bmN0aW9uLCBp dCBjYW4gZnJlZSgpIGl0IGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUKLSAq IG5ldyBidWZmZXIgYW5kIGl0cyBzaXplIGluICpidWYgYW5kICpidWZsZW4uCisgKiByZWFkRGF0 YSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVuY3Rpb24gcmVwZWF0ZWRseSwgdW50aWwgaXQgcmV0dXJu cyAwIHRvIHNpZ25hbAorICogRU9GLiByZWFkRGF0YSBwYXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0 aGUgZGF0YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aAorICogKmJ1Zmxlbi4gSWYgdGhhdCdzIG5v dCBiaWcgZW5vdWdoIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNhbiBmcmVlKCkgaXQK KyAqIGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUgbmV3IGJ1ZmZlciBhbmQg aXRzIHNpemUgaW4gKmJ1ZiBhbmQKKyAqICpidWZsZW4uCiAgKgogICogUmV0dXJucyB0aGUgbnVt YmVyIG9mIGJ5dGVzIHJlYWQgaW50byAqYnVmLCBvciAwIG9uIEVPRi4KICAqLwogdHlwZWRlZiBz aXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICoqYnVmLCBzaXplX3Qg KmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8u YyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKK3N0 cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkvKgorCSAqIFJlYWQgYWxsIGNvbXByZXNzZWQgZGF0 YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5kIHByaW50IGl0CisJICogb3V0 IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZvaWQJCSgqcmVhZERhdGEpIChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENvbXByZXNzIGFuZCB3cml0 ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KKwkgKi8KKwl2b2lkCQko KndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOworCisJLyoKKwkgKiBFbmQgY29t cHJlc3Npb24gYW5kIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMgaWYgYW55LgorCSAqLworCXZvaWQJ CSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJLyoK KwkgKiBDYWxsYmFjayBmdW5jdGlvbiB0byByZWFkIGZyb20gYW4gYWxyZWFkeSBwcm9jZXNzZWQg aW5wdXQgc3RyZWFtCisJICovCisJUmVhZEZ1bmMJcmVhZEY7CisKKwkvKgorCSAqIENhbGxiYWNr IGZ1bmN0aW9uIHRvIHdyaXRlIGFuIGFscmVhZHkgcHJvY2Vzc2VkIGNodW5rIG9mIGRhdGEuCisJ ICovCisJV3JpdGVGdW5jCXdyaXRlRjsKKworCS8qCisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNh dGlvbiBmb3IgdGhpcyBzdGF0ZS4KKwkgKi8KKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWM7CisKKwkvKgorCSAqIFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRo ZSBjb21wcmVzc29yLgorCSAqLworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsKK307CiAKIGV4dGVy biBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCQkJICAgUmVhZEZ1bmMgcmVh ZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4gdm9pZCBSZWFkRGF0 YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQkJCQljb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCQkJCVJlYWRGdW5jIHJlYWRG KTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZpbGUgSGFuZGxlCisgKi8KK3R5cGVk ZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVzc0ZpbGVIYW5kbGU7CisKK3N0cnVj dCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwkvKgorCSAqIE9wZW4gYSBmaWxlIGluIG1vZGUuCisJ ICoKKwkgKiBQYXNzIGVpdGhlciAncGF0aCcgb3IgJ2ZkJyBkZXBlbmRpbmcgb24gd2hldGhlciBh IGZpbGVwYXRoIG9yIGEgZmlsZQorCSAqIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlLiAnbW9kZScg Y2FuIGJlIG9uZSBvZiAncicsICdyYicsICd3JywgJ3diJywKKwkgKiAnYScsIGFuZCAnYWInLiBS ZXF1cmlyZXMgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJICov CisJaW50CQkJKCpvcGVuX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNo YXIgKm1vZGUsCisJCQkJCQkJICBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAq IE9wZW4gYSBmaWxlIGZvciB3cml0aW5nLgorCSAqCisJICogJ21vZGUnIGNhbiBiZSBvbmUgb2Yg Jyd3JywgJ3diJywgJ2EnLCBhbmQgJ2FiJy4gUmVxdXJpcmVzIGFuIGFscmVhZHkKKwkgKiBpbml0 aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJICovCisJaW50CQkJKCpvcGVuX3dyaXRlX2Z1 bmMpIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAorCQkJCQkJCQkJQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpOwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOworCS8qCisJICog UmVhZCAnc2l6ZScgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBmaWxlIGFuZCBzdG9yZSB0aGVtIGlu dG8gJ3B0cicuCisJICovCisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAotZXh0ZXJuIGNmcCAqY2ZvcGVuKGNv bnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJICAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBjZnAgKmNmZG9wZW4o aW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fd3JpdGUo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJCSBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGludAljZnJlYWQo dm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmd3JpdGUoY29uc3Qg dm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZ2V0YyhjZnAgKmZw KTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKTsKLWV4 dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Zlb2YoY2ZwICpmcCk7Ci1l eHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAgKmZwKTsKKwkvKgorCSAqIFdyaXRl ICdzaXplJyBieXRlcyBvZiBkYXRhIGludG8gdGhlIGZpbGUgZnJvbSAncHRyJy4KKwkgKi8KKwlz aXplX3QJCSgqd3JpdGVfZnVuYykgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkJ CQkJICAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAorCS8qCisJICogUmVhZCBh dCBtb3N0IHNpemUgLSAxIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUg aW50bworCSAqICdzJy4KKwkgKgorCSAqIFN0b3AgaWYgYW4gRU9GIG9yIGEgbmV3bGluZSBpcyBm b3VuZCBmaXJzdC4gJ3MnIGlzIGFsd2F5cyBudWxsCisJICogdGVybWluYXRlZCBhbmQgY29udGFp bnMgdGhlIG5ld2xpbmUgaWYgaXQgd2FzIGZvdW5kLgorCSAqLworCWNoYXIJICAgKigqZ2V0c19m dW5jKSAoY2hhciAqcywgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8q CisJICogUmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tcHJlc3MgZmlsZSBoYW5k bGUgYXMgJ3Vuc2lnbmVkCisJICogY2hhcicgY2FzdCBpbnRvICdpbnQnLgorCSAqLworCWludAkJ CSgqZ2V0Y19mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBUZXN0 IGlmIEVPRiBpcyByZWFjaGVkIGluIHRoZSBjb21wcmVzcyBmaWxlIGhhbmRsZS4KKwkgKi8KKwlp bnQJCQkoKmVvZl9mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBD bG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLgorCSAqLworCWludAkJCSgqY2xvc2VfZnVuYykgKENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogR2V0IGEgcG9pbnRlciB0byBhIHN0 cmluZyB0aGF0IGRlc2NyaWJlcyBhbiBlcnJvciB0aGF0IG9jY3VyZWQgZHVyaW5nIGEKKwkgKiBj b21wcmVzcyBmaWxlIGhhbmRsZSBvcGVyYXRpb24uCisJICovCisJY29uc3QgY2hhciAqKCpnZXRf ZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogQ29tcHJl c3Npb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBmaWxlIGhhbmRsZS4KKwkgKi8KKwlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgorCSAqIFByaXZhdGUg ZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZvaWQJICAgKnByaXZh dGVfZGF0YTsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29tcHJlc3MgZmlsZSBoYW5kbGUg d2l0aCB0aGUgcmVxdWVzdGVkIGNvbXByZXNzaW9uLgorICovCitleHRlcm4gQ29tcHJlc3NGaWxl SGFuZGxlICpJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29tcHJlc3Mg ZmlsZSBzdHJlYW0uIERlZmZlciB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtCisgKiBmcm9tICdw YXRoJywgZWl0aGVyIGJ5IGV4YW1pbmluZyBpdHMgc3VmZml4IG9yIGJ5IGFwcGVuZGluZyB0aGUg c3VwcG9ydGVkCisgKiBzdWZmaXhlcyBpbiAncGF0aCcuCisgKi8KK2V4dGVybiBDb21wcmVzc0Zp bGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRo LAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1vZGUpOworZXh0ZXJuIGludAlFbmRDb21w cmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogI2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zYTM2 Zjk0ODk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUu YwpAQCAtMCwwICsxLDIwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nf bm9uZS5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byByZWFkIG9yIHdyaXRlIGFuIHVu Y29tcHJlc3NlZCBzdHJlYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9u ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5o IgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgorI2lu Y2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq IENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICog UHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZl Tm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlzaXplX3QJ CWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwlidWYgPSBwZ19tYWxs b2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKKworCXdoaWxlICgo Y250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdyaXRlKGJ1Ziwg MSwgY250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQorCisKK3N0YXRpYyB2b2lkCitXcml0 ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwljcy0+d3JpdGVG KEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8qIG5vIG9wICovCit9 CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5pdENvbXByZXNzb3JO b25lKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJv bUFyY2hpdmVOb25lOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVOb25lOwor CWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTm9uZTsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0g Y29tcHJlc3Npb25fc3BlYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENv bXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICog UHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyBzaXplX3QKK3JlYWRfbm9uZSh2b2lkICpw dHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpm cCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0OworCisJaWYgKHNp emUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwKTsK KwlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJl YWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBmd3JpdGUo cHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBj b25zdCBjaGFyICoKK2dldF9lcnJvcl9ub25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CXJldHVybiBzdHJlcnJvcihlcnJubyk7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldHNfbm9uZShj aGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4g ZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRp YyBpbnQKK2dldGNfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpm cCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IGZn ZXRjKGZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZmVvZihmcCkpCisJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2xv c2Vfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxF ICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldCA9IDA7CisKKwlDRkgtPnByaXZhdGVf ZGF0YSA9IE5VTEw7CisKKwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlyZXR1cm4gZmVvZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRp YyBpbnQKK29wZW5fbm9uZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1v ZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0 YSA9PSBOVUxMKTsKKworCWlmIChmZCA+PSAwKQorCQlDRkgtPnByaXZhdGVfZGF0YSA9IGZkb3Bl bihkdXAoZmQpLCBtb2RlKTsKKwllbHNlCisJCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0 aCwgbW9kZSk7CisKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDE7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3Blbl93cml0ZV9ub25lKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CUFzc2VydChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCUNGSC0+cHJpdmF0ZV9kYXRh ID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJ CXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisg Ki8KKwordm9pZAorSW5pdENvbXByZXNzTm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJ CQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CUNGSC0+b3Blbl9mdW5jID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gb3Bl bl93cml0ZV9ub25lOworCUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNGSC0+d3JpdGVf ZnVuYyA9IHdyaXRlX25vbmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7CisJQ0ZILT5n ZXRjX2Z1bmMgPSBnZXRjX25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vfbm9uZTsKKwlD RkgtPmVvZl9mdW5jID0gZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IGdldF9lcnJv cl9ub25lOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGU3MDRjNTQ5MQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgKQEAgLTAs MCArMSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nfbm9uZS5oCisg KgkgVW5jb21wcmVzc2VkIGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgX0NPTVBSRVNTX05PTkVfSF8KKyNkZWZpbmUgX0NPTVBSRVNTX05P TkVfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21w cmVzc29yTm9uZShDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gdm9pZCBJbml0Q29t cHJlc3NOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJCSBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisjZW5kaWYJCQkJCQkJLyog X0NPTVBSRVNTX05PTkVfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5i dWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBjYTYyZjlhMzc0Li44NGU5 ZjBkZWZhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xLDcgKzEsOSBAQAogIyBDb3B5cmlnaHQgKGMp IDIwMjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogcGdfZHVt cF9jb21tb25fc291cmNlcyA9IGZpbGVzKAorICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2NvbXBy ZXNzX2lvLmMnLAorICAnY29tcHJlc3Nfbm9uZS5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ3Bh cmFsbGVsLmMnLAogICAncGdfYmFja3VwX2FyY2hpdmVyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jCmluZGV4IDVmNTJlYTQwZTguLjA0Y2Y4ODc1MjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIHZvaWQgZHVtcF9s b19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lk IFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJ CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLXN0 YXRpYyBjZnAgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGljIHZvaWQgUmVz dG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7CitzdGF0aWMg Q29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKK3N0YXRp YyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRs ZSAqc2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVI YW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQg cmVzdG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjcyLDcg KzI3Miw3IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAKIAkvKiBDbG9zZSB0aGUgb3V0 cHV0ICovCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKKwlyZXMgPSBFbmRD b21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwo ImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKIAlib29s CQlzdXBwb3J0c19jb21wcmVzc2lvbjsKIAlUb2NFbnRyeSAgICp0ZTsKLQljZnAJCSAgICpzYXY7 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAKIAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFM SVpJTkc7CiAKQEAgLTExMzQsNyArMTEzNCw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpB SFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29t cHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3VyU2VjdGlvbjsKLQljZnAJCSAgICpz YXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpzYXY7CiAJY29uc3QgY2hhciAqZm10TmFtZTsKIAlj aGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xMTUwLDkgKzExNTAsMTAgQEAgUHJpbnRUT0NTdW1t YXJ5KEFyY2hpdmUgKkFIWCkKIAkJc3RyY3B5KHN0YW1wX3N0ciwgIlt1bmtub3duXSIpOwogCiAJ YWhwcmludGYoQUgsICI7XG47IEFyY2hpdmUgY3JlYXRlZCBhdCAlc1xuIiwgc3RhbXBfc3RyKTsK LQlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxu OyAgICAgQ29tcHJlc3Npb246ICVkXG4iLAorCWFocHJpbnRmKEFILCAiOyAgICAgZGJuYW1lOiAl c1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjogJXNcbiIsCiAJCQkg c2FuaXRpemVfbGluZShBSC0+YXJjaGRibmFtZSwgZmFsc2UpLAotCQkJIEFILT50b2NDb3VudCwg QUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCQkJIEFILT50b2NDb3VudCwKKwkJCSBnZXRf Y29tcHJlc3NfYWxnb3JpdGhtX25hbWUoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7 CiAKIAlzd2l0Y2ggKEFILT5mb3JtYXQpCiAJewpAQCAtMTUwOSw2ICsxNTEwLDcgQEAgc3RhdGlj IHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUs CiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQog eworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CiAJaW50CQkJ Zm4gPSAtMTsKIApAQCAtMTUzMSwzMyArMTUzMywzMiBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9X OwogCi0JaWYgKGZuID49IDApCi0JCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29t cHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUs IGNvbXByZXNzaW9uX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJl c3Npb25fc3BlYyk7CiAKLQlpZiAoIUFILT5PRikKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoZmlsZW5h bWUsIGZuLCBtb2RlLCBDRkgpKQogCXsKIAkJaWYgKGZpbGVuYW1lKQogCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAJCWVsc2UK IAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZTogJW0iKTsKIAl9CisKKwlB SC0+T0YgPSBDRkg7CiB9CiAKLXN0YXRpYyBjZnAgKgorc3RhdGljIENvbXByZXNzRmlsZUhhbmRs ZSAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKQogewotCXJldHVybiAoY2ZwICopIEFI LT5PRjsKKwlyZXR1cm4gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRp YyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0 KQorUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpz YXZlZE91dHB1dCkKIHsKIAlpbnQJCQlyZXM7CiAKIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9z ZShBSC0+T0YpOworCXJlcyA9IEVuZENvbXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYg KHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIp OwpAQCAtMTY5Niw3ICsxNjk3LDExIEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlIGlmIChSZXN0b3Jp bmdUb0RCKEFIKSkKIAkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+ cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCQlieXRl c193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKKwl7CisJCUNv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gKENvbXByZXNzRmlsZUhhbmRsZSAqKSBBSC0+T0Y7CisK KwkJYnl0ZXNfd3JpdHRlbiA9IENGSC0+d3JpdGVfZnVuYyhwdHIsIHNpemUgKiBubWVtYiwgQ0ZI KTsKKwl9CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIpCiAJCVdSSVRFX0VS Uk9SX0VYSVQ7CkBAIC0yMDM4LDYgKzIwNDMsMTggQEAgUmVhZFN0cihBcmNoaXZlSGFuZGxlICpB SCkKIAlyZXR1cm4gYnVmOwogfQogCitzdGF0aWMgYm9vbAorX2ZpbGVFeGlzdHNJbkRpcmVjdG9y eShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0 IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQ QVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChi dWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKwogc3RhdGljIGludAog X2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKIHsKQEAgLTIwNjgsMjYg KzIwODUsMTIgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKIAkJ ICovCiAJCWlmIChzdGF0KEFILT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9k ZSkpCiAJCXsKLQkJCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOwotCi0JCQlpZiAoc25wcmludGYoYnVm LCBNQVhQR1BBVEgsICIlcy90b2MuZGF0IiwgQUgtPmZTcGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJ cGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLAotCQkJCQkJIEFILT5m U3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUp KQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCQkJQUgtPmZvcm1hdCA9 IGFyY2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMs ICJ0b2MuZGF0IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9Ci0KICNpZmRlZiBIQVZF X0xJQloKLQkJCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQuZ3oiLCBB SC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9v IGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0 KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFy Y2hEaXJlY3Rvcnk7CisJCQlpZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0 b2MuZGF0Lmd6IikpCiAJCQkJcmV0dXJuIEFILT5mb3JtYXQ7Ci0JCQl9CiAjZW5kaWYKIAkJCXBn X2ZhdGFsKCJkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFy Y2hpdmUgKFwidG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpA QCAtMjE4NSw2ICsyMTg4LDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0 IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNldHVwV29ya2VyUHRy KQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCXBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAKIAlwZ19s b2dfZGVidWcoImFsbG9jYXRpbmcgQUggZm9yICVzLCBmb3JtYXQgJWQiLApAQCAtMjI0MCw3ICsy MjQ0LDEwIEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9y bWF0IGZtdCwKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJlc3Npb24gZm9yIEFIIG91 dHB1dCBoYW5kbGUgKi8KIAlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9OT05FOwotCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQpKSwgUEdfQklO QVJZX0EsIG91dF9jb21wcmVzc19zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxl KG91dF9jb21wcmVzc19zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoTlVMTCwgZmlsZW5vKHN0 ZG91dCksIFBHX0JJTkFSWV9BLCBDRkgpKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gc3Rk b3V0IGZvciBhcHBlbmRpbmc6ICVtIik7CisJQUgtPk9GID0gQ0ZIOwogCiAJLyoKIAkgKiBPbiBX aW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0 IGZpbGVzLApAQCAtMzY1MywxMiArMzY2MCw3IEBAIFdyaXRlSGVhZChBcmNoaXZlSGFuZGxlICpB SCkKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+aW50U2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0 cihBSCwgQUgtPm9mZlNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5mb3JtYXQpOwot CS8qCi0JICogRm9yIG5vdyB0aGUgY29tcHJlc3Npb24gdHlwZSBpcyBpbXBsaWVkIGJ5IHRoZSBs ZXZlbC4gIFRoaXMgd2lsbCBuZWVkCi0JICogdG8gY2hhbmdlIG9uY2Ugc3VwcG9ydCBmb3IgbW9y ZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGlzIGFkZGVkLAotCSAqIHJlcXVpcmluZyBhIGZvcm1h dCBidW1wLgotCSAqLwotCVdyaXRlSW50KEFILCBBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7 CisJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKTsK IAljcnRtID0gKmxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpOwogCVdyaXRlSW50KEFILCBjcnRt LnRtX3NlYyk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fbWluKTsKQEAgLTM3MjksMTAgKzM3MzEs MTEgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXBnX2ZhdGFsKCJleHBlY3RlZCBm b3JtYXQgKCVkKSBkaWZmZXJzIGZyb20gZm9ybWF0IGZvdW5kIGluIGZpbGUgKCVkKSIsCiAJCQkJ IEFILT5mb3JtYXQsIGZtdCk7CiAKLQkvKiBHdWVzcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGJh c2VkIG9uIHRoZSBsZXZlbCAqLwotCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBH X0NPTVBSRVNTSU9OX05PTkU7Ci0JaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzIpCisJaWYg KEFILT52ZXJzaW9uID49IEtfVkVSU18xXzE1KQorCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOworCWVsc2UgaWYgKEFILT52ZXJzaW9uID49IEtf VkVSU18xXzIpCiAJeworCQkvKiBHdWVzcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9u IHRoZSBsZXZlbCAqLwogCQlpZiAoQUgtPnZlcnNpb24gPCBLX1ZFUlNfMV80KQogCQkJQUgtPmNv bXByZXNzaW9uX3NwZWMubGV2ZWwgPSBBSC0+UmVhZEJ5dGVQdHIoQUgpOwogCQllbHNlCkBAIC0z NzQ0LDEwICszNzQ3LDE3IEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAkJ QUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAor CWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9O RSkKKwl7CisJCWJvb2wJCXVuc3VwcG9ydGVkID0gZmFsc2U7CisKICNpZm5kZWYgSEFWRV9MSUJa Ci0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9H WklQKQotCQlwZ19mYXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxs YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOworCQlpZiAoQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQl1bnN1cHBvcnRl ZCA9IHRydWU7CiAjZW5kaWYKKwkJaWYgKHVuc3VwcG9ydGVkKQorCQkJcGdfZmF0YWwoImFyY2hp dmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBvcnQg Y29tcHJlc3Npb24iKTsKKwl9CiAKIAlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfNCkKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggNDcyNWU0OTc0Ny4uMThiMzhj MTdhYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtNjUsMTAgKzY1LDEz IEBACiAjZGVmaW5lIEtfVkVSU18xXzEzIE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDEzLCAwKQkv KiBjaGFuZ2Ugc2VhcmNoX3BhdGgKIAkJCQkJCQkJCQkJCQkgKiBiZWhhdmlvciAqLwogI2RlZmlu ZSBLX1ZFUlNfMV8xNCBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxNCwgMCkJLyogYWRkIHRhYmxl YW0gKi8KKyNkZWZpbmUgS19WRVJTXzFfMTUgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTUsIDAp CS8qIGFkZAorCQkJCQkJCQkJCQkJCSAqIGNvbXByZXNzaW9uX2FsZ29yaXRobQorCQkJCQkJCQkJ CQkJCSAqIGluIGhlYWRlciAqLwogCiAvKiBDdXJyZW50IGFyY2hpdmUgdmVyc2lvbiBudW1iZXIg KHRoZSBmb3JtYXQgd2UgY2FuIG91dHB1dCkgKi8KICNkZWZpbmUgS19WRVJTX01BSk9SIDEKLSNk ZWZpbmUgS19WRVJTX01JTk9SIDE0CisjZGVmaW5lIEtfVkVSU19NSU5PUiAxNQogI2RlZmluZSBL X1ZFUlNfUkVWIDAKICNkZWZpbmUgS19WRVJTX1NFTEYgTUFLRV9BUkNISVZFX1ZFUlNJT04oS19W RVJTX01BSk9SLCBLX1ZFUlNfTUlOT1IsIEtfVkVSU19SRVYpCiAKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jCmluZGV4IGQxZTU0NjQ0YTkuLjUxMmFiMDQzYWYgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9jdXN0b20uYwpAQCAtMjk4LDcgKzI5OCw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlfV3JpdGVCeXRlKEFILCBCTEtfREFUQSk7CS8qIEJsb2Nr IHR5cGUgKi8KIAlXcml0ZUludChBSCwgdGUtPmR1bXBJZCk7CS8qIEZvciBzYW5pdHkgY2hlY2sg Ki8KIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMs IF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNv bXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVu Yyk7CiB9CiAKIC8qCkBAIC0zMTcsMTUgKzMxOSwxNSBAQCBfV3JpdGVEYXRhKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKIAlDb21wcmVzc29yU3RhdGUg KmNzID0gY3R4LT5jczsKIAogCWlmIChkTGVuID4gMCkKLQkJLyogV3JpdGVEYXRhVG9BcmNoaXZl KCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJyb3JzICovCi0JCVdyaXRlRGF0YVRvQXJjaGl2 ZShBSCwgY3MsIGRhdGEsIGRMZW4pOworCQkvKiB3cml0ZURhdGEoKSBpbnRlcm5hbGx5IHRocm93 cyB3cml0ZSBlcnJvcnMgKi8KKwkJY3MtPndyaXRlRGF0YShBSCwgY3MsIGRhdGEsIGRMZW4pOwog fQogCiAvKgogICogQ2FsbGVkIGJ5IHRoZSBhcmNoaXZlciB3aGVuIGEgZHVtcGVyJ3MgJ0RhdGFE dW1wZXInIHJvdXRpbmUgaGFzCiAgKiBmaW5pc2hlZC4KICAqCi0gKiBPcHRpb25hbC4KKyAqIE1h bmRhdG9yeS4KICAqLwogc3RhdGljIHZvaWQKIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBU b2NFbnRyeSAqdGUpCkBAIC0zMzMsNiArMzM1LDggQEAgX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+ Zm9ybWF0RGF0YTsKIAogCUVuZENvbXByZXNzb3IoQUgsIGN0eC0+Y3MpOworCWN0eC0+Y3MgPSBO VUxMOworCiAJLyogU2VuZCB0aGUgZW5kIG1hcmtlciAqLwogCVdyaXRlSW50KEFILCAwKTsKIH0K QEAgLTM3Nyw3ICszODEsOSBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkg KnRlLCBPaWQgb2lkKQogCiAJV3JpdGVJbnQoQUgsIG9pZCk7CiAKLQljdHgtPmNzID0gQWxsb2Nh dGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsKKwlj dHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJ CQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtNTY2LDcg KzU3MiwxMiBAQCBfUHJpbnRUb2NEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiBzdGF0aWMgdm9pZAogX1ByaW50RGF0YShBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlSZWFkRGF0 YUZyb21BcmNoaXZlKEFILCBBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVJlYWRGdW5jKTsK KwlDb21wcmVzc29yU3RhdGUgKmNzOworCisJY3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNv bXByZXNzaW9uX3NwZWMsCisJCQkJCQkJX0N1c3RvbVJlYWRGdW5jLCBOVUxMKTsKKwljcy0+cmVh ZERhdGEoQUgsIGNzKTsKKwlFbmRDb21wcmVzc29yKEFILCBjcyk7CiB9CiAKIHN0YXRpYyB2b2lk CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYwppbmRleCA2ODAwYzNjY2VlLi5hMmY4 ODk5NWMwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKQEAgLTUwLDkgKzUw LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAkgKi8KIAljaGFyCSAgICpkaXJlY3Rvcnk7CiAKLQljZnAJ CSAgICpkYXRhRkg7CQkJLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxlICovCi0KLQljZnAJCSAg ICpMT3NUb2NGSDsJCS8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KKwlDb21wcmVzc0Zp bGVIYW5kbGUgKmRhdGFGSDsgLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxlICovCisJQ29tcHJl c3NGaWxlSGFuZGxlICpMT3NUb2NGSDsgLyogZmlsZSBoYW5kbGUgZm9yIGJsb2JzLnRvYyAqLwog CVBhcmFsbGVsU3RhdGUgKnBzdGF0ZTsJCS8qIGZvciBwYXJhbGxlbCBiYWNrdXAgLyByZXN0b3Jl ICovCiB9IGxjbENvbnRleHQ7CiAKQEAgLTE5OCwxMSArMTk3LDExIEBAIEluaXRBcmNoaXZlRm10 X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJewkJCQkJCQkvKiBSZWFkIE1v ZGUgKi8KIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKLQkJY2ZwCQkgICAqdG9jRkg7CisJCUNv bXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAKIAkJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCAidG9j LmRhdCIpOwogCi0JCXRvY0ZIID0gY2ZvcGVuX3JlYWQoZm5hbWUsIFBHX0JJTkFSWV9SKTsKKwkJ dG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZm5hbWUsIFBHX0JJTkFSWV9S KTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gaW5w dXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCkBAIC0yMTgsNyArMjE3LDcgQEAgSW5pdEFy Y2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5kbGUgKkFIKQogCQlSZWFkVG9jKEFIKTsKIAog CQkvKiBOb3RoaW5nIGVsc2UgaW4gdGhlIGZpbGUsIHNvIGNsb3NlIGl0IGFnYWluLi4uICovCi0J CWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKHRv Y0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsK IAkJY3R4LT5kYXRhRkggPSBOVUxMOwogCX0KQEAgLTMyNyw5ICszMjYsOSBAQCBfU3RhcnREYXRh KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAKIAlzZXRGaWxlUGF0aChBSCwgZm5h bWUsIHRjdHgtPmZpbGVuYW1lKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1l LCBQR19CSU5BUllfVywKLQkJCQkJCQkgICBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0JaWYgKGN0 eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxl KEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9m dW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtMzQ2LDE1 ICszNDUsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xD b250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4 LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGRMZW4gPiAwICYmIGNmd3JpdGUoZGF0YSwg ZExlbiwgY3R4LT5kYXRhRkgpICE9IGRMZW4pCisJaWYgKGRMZW4gPiAwICYmIENGSC0+d3JpdGVf ZnVuYyhkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4pCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qg c2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJu byA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUg dG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOwor CQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0KIH0KIApAQCAtMzcwLDcgKzM3MCw3 IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJbGNsQ29udGV4 dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAkvKiBDbG9zZSB0aGUg ZmlsZSAqLwotCWlmIChjZmNsb3NlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCWlmIChFbmRDb21wcmVz c0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgZGF0YSBmaWxlOiAlbSIpOwogCiAJY3R4LT5kYXRhRkggPSBOVUxMOwpAQCAtMzg1LDI2ICsz ODUsMjUgQEAgX1ByaW50RmlsZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKmZpbGVuYW1l KQogCXNpemVfdAkJY250OwogCWNoYXIJICAgKmJ1ZjsKIAlzaXplX3QJCWJ1ZmxlbjsKLQljZnAJ CSAgICpjZnA7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKIAlpZiAoIWZpbGVuYW1lKQog CQlyZXR1cm47CiAKLQljZnAgPSBjZm9wZW5fcmVhZChmaWxlbmFtZSwgUEdfQklOQVJZX1IpOwot Ci0JaWYgKCFjZnApCisJQ0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZpbGVu YW1lLCBQR19CSU5BUllfUik7CisJaWYgKCFDRkgpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAKIAlidWYgPSBwZ19tYWxsb2Mo WkxJQl9PVVRfU0laRSk7CiAJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKIAotCXdoaWxlICgoY250 ID0gY2ZyZWFkKGJ1ZiwgYnVmbGVuLCBjZnApKSkKKwl3aGlsZSAoKGNudCA9IENGSC0+cmVhZF9m dW5jKGJ1ZiwgYnVmbGVuLCBDRkgpKSkKIAl7CiAJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsK IAl9CiAKIAlmcmVlKGJ1Zik7Ci0JaWYgKGNmY2xvc2UoY2ZwKSAhPSAwKQorCWlmIChFbmRDb21w cmVzc0ZpbGVIYW5kbGUoQ0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRh dGEgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogfQogCkBAIC00MzUsNiArNDM0LDcgQEAg X0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CiAJT2lkCQkJb2lkOwogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIOwogCWNoYXIJCXRvY2ZuYW1lW01BWFBHUEFUSF07CiAJY2hhcgkJbGluZVtNQVhQR1BB VEhdOwogCkBAIC00NDIsMTQgKzQ0MiwxNCBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpBSCkK IAogCXNldEZpbGVQYXRoKEFILCB0b2NmbmFtZSwgImJsb2JzLnRvYyIpOwogCi0JY3R4LT5MT3NU b2NGSCA9IGNmb3Blbl9yZWFkKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CisJQ0ZIID0gY3R4LT5M T3NUb2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSh0b2NmbmFtZSwgUEdfQklO QVJZX1IpOwogCiAJaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCIgZm9yIGlucHV0OiAlbSIsCiAJ CQkJIHRvY2ZuYW1lKTsKIAogCS8qIFJlYWQgdGhlIExPcyBUT0MgZmlsZSBsaW5lLWJ5LWxpbmUs IGFuZCBwcm9jZXNzIGVhY2ggTE8gKi8KLQl3aGlsZSAoKGNmZ2V0cyhjdHgtPkxPc1RvY0ZILCBs aW5lLCBNQVhQR1BBVEgpKSAhPSBOVUxMKQorCXdoaWxlICgoQ0ZILT5nZXRzX2Z1bmMobGluZSwg TUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJY2hhcgkJbG9mbmFtZVtNQVhQR1BBVEgg KyAxXTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwpAQCAtNDY0LDExICs0NjQsMTEgQEAgX0xv YWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCV9QcmludEZpbGVEYXRhKEFILCBwYXRoKTsKIAkJ RW5kUmVzdG9yZUxPKEFILCBvaWQpOwogCX0KLQlpZiAoIWNmZW9mKGN0eC0+TE9zVG9jRkgpKQor CWlmICghQ0ZILT5lb2ZfZnVuYyhDRkgpKQogCQlwZ19mYXRhbCgiZXJyb3IgcmVhZGluZyBsYXJn ZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIiwKIAkJCQkgdG9jZm5hbWUpOwogCi0JaWYgKGNmY2xv c2UoY3R4LT5MT3NUb2NGSCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ TE9zVG9jRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgbGFyZ2Ugb2JqZWN0 IFRPQyBmaWxlIFwiJXNcIjogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKQEAgLTQ4OCwxNSArNDg4 LDE2IEBAIF9Xcml0ZUJ5dGUoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGludCBpKQogewogCXVu c2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSBpOwogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0g Y3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoJmMsIDEsIGN0eC0+ZGF0 YUZIKSAhPSAxKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoJmMsIDEsIENGSCkgIT0gMSkKIAl7CiAJ CS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sg c3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vy cm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQog CiAJcmV0dXJuIDE7CkBAIC01MTIsOCArNTEzLDkgQEAgc3RhdGljIGludAogX1JlYWRCeXRlKEFy Y2hpdmVIYW5kbGUgKkFIKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFI LT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAK LQlyZXR1cm4gY2ZnZXRjKGN0eC0+ZGF0YUZIKTsKKwlyZXR1cm4gQ0ZILT5nZXRjX2Z1bmMoQ0ZI KTsKIH0KIAogLyoKQEAgLTUyNCwxNSArNTI2LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVCdWYo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xD b250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRl KGJ1ZiwgbGVuLCBjdHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoYnVm LCBsZW4sIENGSCkgIT0gbGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywg YXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJ CWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBm aWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5n ZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTU0NSwxMiArNTQ4LDEzIEBAIHN0YXRp YyB2b2lkCiBfUmVhZEJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgdm9pZCAqYnVmLCBzaXplX3QgbGVu KQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwor CUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAkvKgotCSAqIElmIHRo ZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIGNmcmVhZCgpLCBzbyBo ZXJlIHdlCisJICogSWYgdGhlcmUgd2FzIGFuIEkvTyBlcnJvciwgd2UgYWxyZWFkeSBleGl0ZWQg aW4gcmVhZEYoKSwgc28gaGVyZSB3ZQogCSAqIGV4aXQgb24gc2hvcnQgcmVhZHMuCiAJICovCi0J aWYgKGNmcmVhZChidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT5yZWFk X2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQogCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQg ZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOwogfQogCkBAIC01NzMsNyArNTc3LDcgQEAg X0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCWlmIChBSC0+bW9kZSA9PSBhcmNo TW9kZVdyaXRlKQogCXsKLQkJY2ZwCQkgICAqdG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAq dG9jRkg7CiAJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHsw fTsKIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKIApAQCAtNTg0LDggKzU4OCw4IEBAIF9DbG9z ZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyogVGhlIFRPQyBpcyBhbHdheXMgY3Jl YXRlZCB1bmNvbXByZXNzZWQgKi8KIAkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19D T01QUkVTU0lPTl9OT05FOwotCQl0b2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZ X1csIGNvbXByZXNzaW9uX3NwZWMpOwotCQlpZiAodG9jRkggPT0gTlVMTCkKKwkJdG9jRkggPSBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCQlpZiAodG9jRkgtPm9w ZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIHRvY0ZIKSkKIAkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogCQljdHgtPmRh dGFGSCA9IHRvY0ZIOwogCkBAIC01OTgsNyArNjAyLDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZl SGFuZGxlICpBSCkKIAkJV3JpdGVIZWFkKEFIKTsKIAkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rv cnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9IDApCisJCWlmIChF bmRDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQlXcml0ZURhdGFDaHVua3MoQUgsIGN0eC0+cHN0YXRl KTsKIApAQCAtNjQ5LDggKzY1Myw4IEBAIF9TdGFydExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9j RW50cnkgKnRlKQogCiAJLyogVGhlIExPIFRPQyBmaWxlIGlzIG5ldmVyIGNvbXByZXNzZWQgKi8K IAljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JY3R4 LT5MT3NUb2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgY29tcHJlc3Npb25fc3BlYyk7 Ci0JaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKKwljdHgtPkxPc1RvY0ZIID0gSW5pdENvbXBy ZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoY3R4LT5MT3NUb2NGSC0+b3Bl bl93cml0ZV9mdW5jKGZuYW1lLCAiYWIiLCBjdHgtPkxPc1RvY0ZIKSkKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTY2 Nyw5ICs2NzEsOCBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBP aWQgb2lkKQogCiAJc25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwgIiVzL2Jsb2JfJXUuZGF0Iiwg Y3R4LT5kaXJlY3RvcnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFt ZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQotCWlmIChjdHgtPmRhdGFG SCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29t cHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUs IFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBv dXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02ODIsMTggKzY4NSwxOSBA QCBzdGF0aWMgdm9pZAogX0VuZExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9p ZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERh dGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPkxPc1RvY0ZIOwogCWNoYXIJCWJ1 Zls1MF07CiAJaW50CQkJbGVuOwogCi0JLyogQ2xvc2UgdGhlIExPIGRhdGEgZmlsZSBpdHNlbGYg Ki8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBMTyBkYXRhIGZpbGU6ICVtIik7CisJLyogQ2xvc2UgdGhlIEJMT0IgZGF0YSBmaWxl IGl0c2VsZiAqLworCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDAp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYiBkYXRhIGZpbGU6ICVtIik7CiAJY3R4 LT5kYXRhRkggPSBOVUxMOwogCiAJLyogcmVnaXN0ZXIgdGhlIExPIGluIGJsb2JzLnRvYyAqLwog CWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSBibG9iXyV1LmRhdFxuIiwgb2lk LCBvaWQpOwotCWlmIChjZndyaXRlKGJ1ZiwgbGVuLCBjdHgtPkxPc1RvY0ZIKSAhPSBsZW4pCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gTE9zIFRPQyBmaWxlIik7CisJaWYgKENGSC0+ d3JpdGVfZnVuYyhidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg d3JpdGUgdG8gYmxvYnMgVE9DIGZpbGUiKTsKIH0KIAogLyoKQEAgLTcwNiw4ICs3MTAsOCBAQCBf RW5kTE9zKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB7CiAJbGNsQ29udGV4dCAq Y3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKLQlpZiAoY2ZjbG9zZShjdHgt PkxPc1RvY0ZIKSAhPSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIExPcyBUT0MgZmls ZTogJW0iKTsKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+TE9zVG9jRkgpICE9IDAp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYnMgVE9DIGZpbGU6ICVtIik7CiAJY3R4 LT5MT3NUb2NGSCA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAw Ml9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggZDky MjQ3YzkxNS4uNzg0NTQ5MjhjYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTk0LDcg Kzk0LDcgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PiBbCiAJCQkJJ3BnX3Jl c3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9jdXN0b20uZHVtcCIsCiAJ CQldLAotCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IDEvLAorCQkJZXhwZWN0ZWQgPT4g cXIvQ29tcHJlc3Npb246IGd6aXAvLAogCQkJbmFtZSAgICAgPT4gJ2RhdGEgY29udGVudCBpcyBn emlwLWNvbXByZXNzZWQnCiAJCX0sCiAJfSwKQEAgLTIzOSw4ICsyMzksOCBAQCBteSAlcGdkdW1w X3J1bnMgPSAoCiAJCQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRl bXBkaXIvZGVmYXVsdHNfY3VzdG9tX2Zvcm1hdC5kdW1wIiwgXSwKIAkJCWV4cGVjdGVkID0+ICRz dXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Np b246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBu b25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVm YXVsdCBpZiBhdmFpbGFibGUnLAogCQl9LAogCX0sCkBAIC0yNjQsOCArMjY0LDggQEAgbXkgJXBn ZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywg IiR0ZW1wZGlyL2RlZmF1bHRzX2Rpcl9mb3JtYXQiLCBdLAogCQkJZXhwZWN0ZWQgPT4gJHN1cHBv cnRzX2d6aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9Db21wcmVzc2lvbjog MC8sCisJCQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJlc3Npb246IG5vbmUv LAogCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3NlZCBieSBkZWZhdWx0 JywKIAkJfSwKIAkJZ2xvYl9wYXR0ZXJucyA9PiBbCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tb24vY29tcHJlc3Npb24uaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lvbi5oCmlu ZGV4IDlhNDcxZTQwYWEuLmQ0NGViYjA2Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1v bi9jb21wcmVzc2lvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lvbi5oCkBA IC0xNCw2ICsxNCwxMCBAQAogI2lmbmRlZiBQR19DT01QUkVTU0lPTl9ICiAjZGVmaW5lIFBHX0NP TVBSRVNTSU9OX0gKIAorLyoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgc3RvcmVkIGluIGRpc2MsIGZv ciBleGFtcGxlIGluIGZpbGVzIGdlbmVyYXRlZCBieSBwZ19kdW1wLgorICogQ3JlYXRlIHRoZSBu ZWNlc3NhcnkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbGF5ZXJzIGlmIHRoZWlyIG9yZGVyIGNo YW5nZXMuCisgKi8KIHR5cGVkZWYgZW51bSBwZ19jb21wcmVzc19hbGdvcml0aG0KIHsKIAlQR19D T01QUkVTU0lPTl9OT05FLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3Bs dXNjaGVjayBiL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKaW5kZXggZTUyZmU5 ZjUwOS4uZGI0Mjk0NzRhMiAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3Bs dXNjaGVjaworKysgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCkBAIC0xNTAs NyArMTUwLDkgQEAgZG8KIAogCSMgcGdfZHVtcCBpcyBub3QgQysrLWNsZWFuIGJlY2F1c2UgaXQg dXNlcyAicHVibGljIiBhbmQgIm5hbWVzcGFjZSIKIAkjIGFzIGZpZWxkIG5hbWVzLCB3aGljaCBp cyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29uJ3QgY2hhbmdlIGl0IG5vdy4KKwl0ZXN0ICIkZiIgPSBz cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggJiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBz cmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIg PSBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDUxNDg0Y2E3ZTIuLjdlNjJjNmVmM2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC00MjgsNiArNDI4LDcgQEAgQ29tcGlsZWRFeHByU3RhdGUKIENvbXBvc2l0ZUlP RGF0YQogQ29tcG9zaXRlVHlwZVN0bXQKIENvbXBvdW5kQWZmaXhGbGFnCitDb21wcmVzc0ZpbGVI YW5kbGUKIENvbXByZXNzaW9uTG9jYXRpb24KIENvbXByZXNzb3JTdGF0ZQogQ29tcHV0ZVhpZEhv cml6b25zUmVzdWx0CkBAIC0xMDM0LDYgKzEwMzUsNyBAQCBHdWNTdGFjawogR3VjU3RhY2tTdGF0 ZQogR3VjU3RyaW5nQXNzaWduSG9vawogR3VjU3RyaW5nQ2hlY2tIb29rCitHemlwQ29tcHJlc3Nv clN0YXRlCiBIQU5ETEUKIEhBU0hBQ1RJT04KIEhBU0hCVUNLRVQKLS0gCjIuMzQuMQoK --b1_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0 Content-Type: text/x-patch; name=v24-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v24-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSBjMWQ4NjhmOWFjOTY3YjgwMGMyMGJiNGM1ODhhNDE4ODMzNTZhNjUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFR1ZSwgMjQgSmFuIDIwMjMgMTU6NDI6NDMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NCAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUg b2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2NhbHkuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyAgICAgICAgIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgICAg ICAgIHwgNjIzICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmggICAgICAgIHwgIDIyICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg fCAgMTcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgIDkgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgODIgKysrLQogc3JjL3Rvb2xzL3BnaW5j bHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDc4MSBpbnNlcnRpb25zKCsp LCAyMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3ZTEuLjQ5ZDIxODkwNWYgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNh dGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGly ZWN0b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAg IHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNz ZWQgYXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGlj YXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlz IGNvbXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAg ICAgICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxp Y2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0 PC9hcHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5k IGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC02NTQsNyArNjU1LDcg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNp ZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRv IHVzZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBjYW4gYmUgc2V0IHRvIDxsaXRl cmFsPmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZv ciBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0 ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCiAgICAgICAgIEEgY29tcHJl c3Npb24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQuICBJZiB0aGUK ICAgICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIGNv bXByZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpAQCAtNjc1LDggKzY3Niw4IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEg c2VnbWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8 bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4 dCBvdXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNh dXNlcyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFz IHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGlj YXRpb24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAg ICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8 L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47 IGJ1dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAwMDEzYmMwODBj Li5lYjhmNTk0NTlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9 IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAK IGV4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1 CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBA IC0yNiw2ICsyNyw3IEBAIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWNvbXByZXNzX2d6aXAu byBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX25vbmUu byBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBlYTRjMjY2ZTA4Li40ZWMyNWUzNTJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2d6aXAuaCIKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgImNvbXByZXNzX25vbmUuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIApAQCAtOTUsNiArOTYsOCBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQlJbml0Q29tcHJlc3Nvck5v bmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCUluaXRDb21wcmVzc29yR3ppcChjcywg Y29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlJbml0Q29tcHJlc3NvckxaNChjcywgY29tcHJlc3Np b25fc3BlYyk7CiAKIAlyZXR1cm4gY3M7CiB9CkBAIC0xNTksNiArMTYyLDggQEAgSW5pdENvbXBy ZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCiAJCUluaXRDb21wcmVzc05vbmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAllbHNl IGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQog CQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlJbml0Q29t cHJlc3NMWjQoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAogCXJldHVybiBDRkg7CiB9CkBAIC0x NzIsNyArMTc3LDcgQEAgSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiAgKiB0aHJvdWdob3V0LiBPdGhlcndpc2Ug dGhlIGNvbXByZXNzaW9uIHdpbGwgYmUgZGVmZXJyZWQgYnkgaXRlcmF0aXZlbHkgdHJ5aW5nCiAg KiB0byBvcGVuIHRoZSBmaWxlIGF0ICdwYXRoJywgZmlyc3QgYXMgaXMsIHRoZW4gYnkgYXBwZW5k aW5nIGtub3duIGNvbXByZXNzaW9uCiAgKiBzdWZmaXhlcy4gU28gaWYgeW91IHBhc3MgImZvbyIg YXMgJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IKLSAqICJmb28uZ3oiLCB0 cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqICJmb28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5nIGlu IHRoYXQgb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJv ciBjb2RlIGluIGVycm5vLgogICovCkBAIC0yMTAsNiArMjE1LDE3IEBAIEluaXREaXNjb3ZlckNv bXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogCQkJ aWYgKGV4aXN0cykKIAkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX0daSVA7CiAJCX0KKyNlbmRpZgorI2lmZGVmIFVTRV9MWjQKKwkJaWYgKCFleGlzdHMpCisJ CXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5s ejQiLCBwYXRoKTsKKwkJCWV4aXN0cyA9IChzdGF0KGZuYW1lLCAmc3QpID09IDApOworCisJCQlp ZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTFo0OworCQl9CiAjZW5kaWYKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19sejQuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42NDQxMDdmMTI0Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCkBAIC0wLDAgKzEsNjIzIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuYworICoJIFJvdXRpbmVzIGZvciBh cmNoaXZlcnMgdG8gd3JpdGUgYSBMWjQgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMu aCIKKworI2luY2x1ZGUgImNvbXByZXNzX2x6NC5oIgorCisjaWZkZWYgVVNFX0xaNAorI2luY2x1 ZGUgPGx6NC5oPgorI2luY2x1ZGUgPGx6NGZyYW1lLmg+CisKKyNkZWZpbmUgTFo0X09VVF9TSVpF CSg0ICogMTAyNCkKKyNkZWZpbmUgTFo0X0lOX1NJWkUJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBM WjRGX0hFQURFUl9TSVpFX01BWCBmaXJzdCBhcHBlYXJlZCBpbiB2MS43LjUgb2YgdGhlIGxpYnJh cnkuCisgKiBSZWRlZmluZSBpdCBmb3IgaW5zdGFsbGF0aW9ucyB3aXRoIGEgbGVzc2VyIHZlcnNp b24uCisgKi8KKyNpZm5kZWYgTFo0Rl9IRUFERVJfU0laRV9NQVgKKyNkZWZpbmUgTFo0Rl9IRUFE RVJfU0laRV9NQVgJMzIKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENv bXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0 cnVjdCBMWjRDb21wcmVzc29yU3RhdGUKK3sKKwljaGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlv dXRzaXplOworfSBMWjRDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhh dCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZCBSZWFkRGF0 YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsK K3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGljIHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVMWjQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJTFo0X3N0cmVhbURl Y29kZV90IGx6NFN0cmVhbURlY29kZTsKKwljaGFyCSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVm OworCXNpemVfdAkJYnVmbGVuOworCXNpemVfdAkJY250OworCisJYnVmbGVuID0gTFo0X0lOX1NJ WkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxl bik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2RlKCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOwor CisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWlu dAkJCWRlY0J5dGVzID0gTFo0X2RlY29tcHJlc3Nfc2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVj b2RlLAorCQkJCQkJCQkJCQkJCQkJYnVmLCBkZWNidWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1 Zmxlbik7CisKKwkJYWh3cml0ZShkZWNidWYsIDEsIGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdf ZnJlZShidWYpOworCXBnX2ZyZWUoZGVjYnVmKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0 YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJ CQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlMWjRDb21wcmVzc29yU3Rh dGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXNp emVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJCXJlcXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0Jv dW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVkc2l6ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJ TFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsK KwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJlZHNpemU7CisJfQorCisJY29tcHJlc3NlZCA9IExa NF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExaNGNzLT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4s IExaNGNzLT5vdXRzaXplKTsKKworCWlmIChjb21wcmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJm YWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEiKTsKKworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5v dXRidWYsIGNvbXByZXNzZWQpOworfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29y U3RhdGUgKkxaNGNzOworCisJTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2 YXRlX2RhdGE7CisJaWYgKExaNGNzKQorCXsKKwkJcGdfZnJlZShMWjRjcy0+b3V0YnVmKTsKKwkJ cGdfZnJlZShMWjRjcyk7CisJCWNzLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCX0KK30KKworCisv KgorICogUHVibGljIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBMWjQgY29tcHJlc3NlZCBkYXRhIEkv TworICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJl YWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZUxaNDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVE YXRhVG9BcmNoaXZlTFo0OworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTFo0OworCisJY3MtPmNv bXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJLyogV2lsbCBiZSBsYXp5IGlu aXQnZCAqLworCWNzLT5wcml2YXRlX2RhdGEgPSBwZ19tYWxsb2MwKHNpemVvZihMWjRDb21wcmVz c29yU3RhdGUpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBG aWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFN0YXRlIG5l ZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lvbiB1c2luZyB0aGUgQ29tcHJlc3NGaWxlSGFuZGxl IEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFo0RmlsZQoreworCUZJTEUJICAgKmZwOworCisJ TFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOworCisJTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdCBj dHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4dF90IGR0eDsKKworCWJvb2wJCWluaXRlZDsK Kwlib29sCQljb21wcmVzc2luZzsKKworCXNpemVfdAkJYnVmbGVuOworCWNoYXIJICAgKmJ1ZmZl cjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxvY2xlbjsKKwlzaXplX3QJCW92ZXJmbG93bGVuOwor CWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJc2l6ZV90CQllcnJjb2RlOworfQlMWjRGaWxlOwor CisvKgorICogTFo0IGVxdWl2YWxlbnQgdG8gZmVvZigpIG9yIGd6ZW9mKCkuIFRoZSBlbmQgb2Yg ZmlsZQorICogaXMgcmVhY2hlZCBpZiB0aGVyZSBpcyBubyBkZWNvbXByZXNzZWQgb3V0cHV0IGlu IHRoZQorICogb3ZlcmZsb3cgYnVmZmVyIGFuZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNo ZWQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisK KwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09IDAgJiYgZmVvZihmcy0+ZnApOworfQorCitzdGF0 aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dldF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CWNvbnN0IGNoYXIgKmVycm1zZzsKKworCWlmIChMWjRGX2lzRXJyb3IoZnMtPmVycmNvZGUpKQor CQllcnJtc2cgPSBMWjRGX2dldEVycm9yTmFtZShmcy0+ZXJyY29kZSk7CisJZWxzZQorCQllcnJt c2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCisvKgorICogUHJl cGFyZSBhbiBhbHJlYWR5IGFsbG9jJ2VkIExaNEZpbGUgc3RydWN0IGZvciBzdWJzZXF1ZW50IGNh bGxzLgorICoKKyAqIEl0IGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeSBjb250ZXh0cyBmb3IgdGhlIG9w ZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBpdCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRo ZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3RyZWFtLgorICovCitzdGF0aWMgaW50CitMWjRG aWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQgc2l6ZSwgYm9vbCBjb21wcmVzc2luZykKK3sKKwlz aXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+aW5pdGVkKQorCQlyZXR1cm4gMDsKKworCWZzLT5j b21wcmVzc2luZyA9IGNvbXByZXNzaW5nOworCWZzLT5pbml0ZWQgPSB0cnVlOworCisJaWYgKGZz LT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5idWZsZW4gPSBMWjRGX2NvbXByZXNzQm91bmQoTFo0 X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlpZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVBREVSX1NJ WkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVSX1NJWkVfTUFYOworCisJCXN0YXR1 cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZFUlNJT04p OworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3Rh dHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5i dWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVnaW4oZnMtPmN0eCwgZnMtPmJ1ZmZl ciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMpOworCisJCWlmIChMWjRGX2lzRXJy b3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsK KwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0 YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJybm8pID8gZXJybm8gOiBFTk9TUEM7CisJCQlyZXR1 cm4gMTsKKwkJfQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJl c3Npb25Db250ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9y KHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJ CX0KKworCQlmcy0+YnVmbGVuID0gc2l6ZSA+IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VU X1NJWkU7CisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92 ZXJmbG93YWxsb2NsZW4gPSBmcy0+YnVmbGVuOworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxs b2MoZnMtPm92ZXJmbG93YWxsb2NsZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKwor CXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50 IGZyb20gdGhlIG92ZXJmbG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0 ZXMsIGlmIGF2YWlsYWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRo ZSBmaXJzdAorICogb2NjdXJyZW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6 ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZm ZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVf cmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wgZW9s X2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsKKworCWlmIChmcy0+ b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID49 IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVyZmxv d2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYsICdc bicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0ZXJtaW5hdGluZyBjaGFyICov CisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJmbG93YnVmICsgMTsKKworCW1lbWNweShwdHIsIGZz LT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisK KwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZz LT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZzLT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVh ZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2Vk IGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQg d2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8g dGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlz IHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2Vu ZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwg ZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50 IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBj b3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5 IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0 aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQu CisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRGaWxlICogZnMsIHZv aWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJc2l6ZV90CQlkc2l6ZSA9 IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBwdHJzaXplOworCWJvb2wJCWVv bF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkgICAqcmVhZGJ1ZjsKKworCS8qIExhenkgaW5pdCAq LworCWlmIChMWjRGaWxlX2luaXQoZnMsIHNpemUsIGZhbHNlIC8qIGRlY29tcHJlc3NpbmcgKi8g KSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNl IGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6ZSA+IGZzLT5idWZsZW4pCisJeworCQlmcy0+YnVm bGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9IHBnX3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7 CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxl ICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfb3ZlcmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9sX2Zs YWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8IChlb2xfZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4n LCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7CisKKwlyZWFkYnVmID0gcGdfbWFsbG9jKHNpemUp OworCisJZG8KKwl7CisJCWNoYXIJICAgKnJwOworCQljaGFyCSAgICpyZW5kOworCisJCXJzaXpl ID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMtPmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAm JiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0xOworCisJCXJwID0gKGNoYXIgKikgcmVhZGJ1 ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAgPCBy ZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsKKwkJCXNpemVfdAkJb3V0bGVuID0gZnMtPmJ1 ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4gPSByZW5kIC0gcnA7CisKKwkJCW1lbXNldChm cy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3RhdHVzID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5k dHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJCQkJCQkgcnAsICZyZWFkX3JlbWFpbiwgTlVM TCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQl7CisJCQkJZnMtPmVycmNvZGUg PSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlycCArPSByZWFkX3JlbWFpbjsK KworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlm IHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBlaXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBm b3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBwcmVzZW50CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJ CQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYmIGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0g ZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAqcDsKKwkJCQlzaXplX3QJCWxpYiA9ICghZW9sX2Zs YWcpID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAtIDEgLSBkc2l6ZTsKKwkJCQlzaXplX3QJCWxlbiA9 IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxpYjsKKworCQkJCWlmIChlb2xfZmxhZyAmJgorCQkJ CQkocCA9IG1lbWNocihmcy0+YnVmZmVyLCAnXG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90 KSAocCAtIGZzLT5idWZmZXIgKyAxKSA8PSBsZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMt PmJ1ZmZlciArIDE7CisJCQkJCWVvbF9mb3VuZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5 KChjaGFyICopIHB0ciArIGRzaXplLCBmcy0+YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxl bjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQgbm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVnaW5u aW5nIG9mIHRoZSBidWYgKi8KKwkJCQlpZiAobGVuIDwgb3V0bGVuKQorCQkJCQltZW1tb3ZlKGZz LT5idWZmZXIsIGZzLT5idWZmZXIgKyBsZW4sIG91dGxlbiAtIGxlbik7CisJCQkJb3V0bGVuIC09 IGxlbjsKKwkJCX0KKworCQkJLyogaWYgdGhlcmUgaXMgYXZhaWxhYmxlIG91dHB1dCwgc2F2ZSBp dCAqLworCQkJaWYgKG91dGxlbiA+IDApCisJCQl7CisJCQkJd2hpbGUgKGZzLT5vdmVyZmxvd2xl biArIG91dGxlbiA+IGZzLT5vdmVyZmxvd2FsbG9jbGVuKQorCQkJCXsKKwkJCQkJZnMtPm92ZXJm bG93YWxsb2NsZW4gKj0gMjsKKwkJCQkJZnMtPm92ZXJmbG93YnVmID0gcGdfcmVhbGxvYyhmcy0+ b3ZlcmZsb3didWYsCisJCQkJCQkJCQkJCQkgZnMtPm92ZXJmbG93YWxsb2NsZW4pOworCQkJCX0K KworCQkJCW1lbWNweShmcy0+b3ZlcmZsb3didWYgKyBmcy0+b3ZlcmZsb3dsZW4sIGZzLT5idWZm ZXIsIG91dGxlbik7CisJCQkJZnMtPm92ZXJmbG93bGVuICs9IG91dGxlbjsKKwkJCX0KKwkJfQor CX0gd2hpbGUgKHJzaXplID09IHNpemUgJiYgZHNpemUgPCBzaXplICYmIGVvbF9mb3VuZCA9PSAw KTsKKworCXBnX2ZyZWUocmVhZGJ1Zik7CisKKwlyZXR1cm4gKGludCkgZHNpemU7Cit9CisKKy8q CisgKiBDb21wcmVzcyBzaXplIGJ5dGVzIGZyb20gcHRyIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBz dHJlYW0uCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfd3JpdGUoY29uc3Qgdm9pZCAqcHRy LCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAq ZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlp bnQJCQlyZW1haW5pbmcgPSBzaXplOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVf aW5pdChmcywgc2l6ZSwgdHJ1ZSkpCisJCXJldHVybiAtMTsKKworCXdoaWxlIChyZW1haW5pbmcg PiAwKQorCXsKKwkJaW50CQkJY2h1bmsgPSByZW1haW5pbmcgPCBMWjRfSU5fU0laRSA/IHJlbWFp bmluZyA6IExaNF9JTl9TSVpFOworCisJCXJlbWFpbmluZyAtPSBjaHVuazsKKworCQlzdGF0dXMg PSBMWjRGX2NvbXByZXNzVXBkYXRlKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sCisJ CQkJCQkJCQkgcHRyLCBjaHVuaywgTlVMTCk7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkK KwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlp ZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZwKSAhPSBzdGF0dXMpCisJCXsK KwkJCWVycm5vID0gKGVycm5vKSA/IGVycm5vIDogRU5PU1BDOworCQkJcmV0dXJuIDE7CisJCX0K Kwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGZyZWFkKCkgZXF1aXZhbGVudCBpbXBs ZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBzaXplX3QK K0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRh OworCWludAkJCXJldDsKKworCXJldCA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBz aXplLCBmYWxzZSk7CisJaWYgKHJldCAhPSBzaXplICYmICFMWjRGaWxlX2VvZihDRkgpKQorCQlw Z19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0 X2Vycm9yKENGSCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZnZXRjKCkgZXF1aXZh bGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRp YyBpbnQKK0xaNEZpbGVfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxl ICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIg YzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkK Kwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVsc2UK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxl Iik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBmZ2V0cygpIGVxdWl2YWxlbnQgaW1w bGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgorICovCitzdGF0aWMgY2hhciAq CitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsK KwlzaXplX3QJCWRzaXplOworCisJZHNpemUgPSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0 ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXplIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8q IERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJl dHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJl YW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250 ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRp YyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkg ICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsK KwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZXQ7CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAoZnMt PmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29tcHJlc3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9IExa NEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwgTlVMTCk7CisJ CQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQg Y29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJ CWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApKSAh PSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8gPSAoZXJybm8pID8gZXJybm8gOiBFTk9TUEM7CisJ CQkJV1JJVEVfRVJST1JfRVhJVDsKKwkJCX0KKworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJl c3Npb25Db250ZXh0KGZzLT5jdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJ CXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9n ZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRG X2ZyZWVEZWNvbXByZXNzaW9uQ29udGV4dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Io c3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIs CisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVy Zmxvd2J1Zik7CisJCX0KKworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUo ZnMpOworCisJcmV0dXJuIGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Bl bihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAg PSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9 IGZkb3BlbihmZCwgbW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlm IChmcCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7 CisJfQorCisJbHo0ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor TFo0RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsK KworCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9m dW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBQdWJsaWMgcm91dGluZXMKKyAqLwordm9pZAorSW5pdENvbXByZXNz TFo0KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJTFo0RmlsZSAgICAqbHo0ZnA7CisKKwlDRkgtPm9w ZW5fZnVuYyA9IExaNEZpbGVfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGVfZnVuYyA9IExaNEZpbGVf b3Blbl93cml0ZTsKKwlDRkgtPnJlYWRfZnVuYyA9IExaNEZpbGVfcmVhZDsKKwlDRkgtPndyaXRl X2Z1bmMgPSBMWjRGaWxlX3dyaXRlOworCUNGSC0+Z2V0c19mdW5jID0gTFo0RmlsZV9nZXRzOwor CUNGSC0+Z2V0Y19mdW5jID0gTFo0RmlsZV9nZXRjOworCUNGSC0+ZW9mX2Z1bmMgPSBMWjRGaWxl X2VvZjsKKwlDRkgtPmNsb3NlX2Z1bmMgPSBMWjRGaWxlX2Nsb3NlOworCUNGSC0+Z2V0X2Vycm9y X2Z1bmMgPSBMWjRGaWxlX2dldF9lcnJvcjsKKworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNv bXByZXNzaW9uX3NwZWM7CisJbHo0ZnAgPSBwZ19tYWxsb2MwKHNpemVvZigqbHo0ZnApKTsKKwlp ZiAoQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID49IDApCisJCWx6NGZwLT5wcmVmcy5jb21w cmVzc2lvbkxldmVsID0gQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsOworCisJQ0ZILT5wcml2 YXRlX2RhdGEgPSBsejRmcDsKK30KKyNlbHNlCQkJCQkJCS8qIFVTRV9MWjQgKi8KK3ZvaWQKK0lu aXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBk b2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiTFo0Iik7Cit9CisKK3ZvaWQK K0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1 aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJMWjQiKTsKK30KKyNl bmRpZgkJCQkJCQkvKiBVU0VfTFo0ICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGZlOGM0ZTUyNAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuaAorICoJIExaNCBpbnRlcmZhY2UgdG8g Y29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgX0NPTVBSRVNTX0xa NF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNpbmNsdWRlICJjb21wcmVzc19pby5o IgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworZXh0ZXJu IHZvaWQgSW5pdENvbXByZXNzTFo0KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILCBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisjZW5kaWYJCQkJCQkJ LyogX0NPTVBSRVNTX0xaNF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDg0ZTlmMGRlZmEuLjBk YTQ3NmE0YzMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9z cmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBwZ19kdW1wX2NvbW1v bl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21wcmVzc19nemlwLmMnLAogICAnY29tcHJlc3NfaW8u YycsCisgICdjb21wcmVzc19sejQuYycsCiAgICdjb21wcmVzc19ub25lLmMnLAogICAnZHVtcHV0 aWxzLmMnLAogICAncGFyYWxsZWwuYycsCkBAIC0xOCw3ICsxOSw3IEBAIHBnX2R1bXBfY29tbW9u X3NvdXJjZXMgPSBmaWxlcygKIHBnX2R1bXBfY29tbW9uID0gc3RhdGljX2xpYnJhcnkoJ2xpYnBn ZHVtcF9jb21tb24nLAogICBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzLAogICBjX3BjaDogcGNoX3Bv c3RncmVzX2ZlX2gsCi0gIGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCB6bGli XSwKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIGx6NCwgemxpYl0sCiAg IGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCiApCiAKQEAgLTg2LDcgKzg3LDEwIEBAIHRlc3Rz ICs9IHsKICAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCiAgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCiAgICd0YXAnOiB7Ci0gICAgJ2Vudic6IHsnR1pJUF9QUk9H UkFNJzogZ3ppcC5wYXRoKCl9LAorICAgICdlbnYnOiB7CisgICAgICAnR1pJUF9QUk9HUkFNJzog Z3ppcC5wYXRoKCksCisgICAgICAnTFo0JzogcHJvZ3JhbV9sejQuZm91bmQoKSA/IHByb2dyYW1f bHo0LnBhdGgoKSA6ICcnLAorICAgIH0sCiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX2Jh c2ljLnBsJywKICAgICAgICd0LzAwMl9wZ19kdW1wLnBsJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwppbmRleCAwNGNmODg3NTI2Li41MmM5YTRhNjM0IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCkBAIC0zODUsNyArMzg1LDggQEAgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKQogCSAqLwogCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CiAJaWYgKEFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FIHx8Ci0J CUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQor CQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCB8 fAorCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0 KQogCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IHRydWU7CiAKIAlpZiAoQUgtPlByaW50VG9jRGF0 YVB0ciAhPSBOVUxMKQpAQCAtMzk3LDYgKzM5OCwxMCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCQkJc3VwcG9ydHNfY29tcHJlc3Np b24gPSBmYWxzZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCQkJaWYgKEFILT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCQkJCXN1cHBvcnRz X2NvbXByZXNzaW9uID0gZmFsc2U7CiAjZW5kaWYKIAkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Np b24gPT0gZmFsc2UpCiAJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNz ZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlv bikiKTsKQEAgLTIwODEsNyArMjA4Niw3IEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2 ZUhhbmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBhcmNoaXZl IGlzIGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sgaWYKLQkJICogdGhlcmUncyBhICJ0b2MuZGF0 IiAob3IgInRvYy5kYXQuZ3oiKSBmaWxlIGluIGl0LgorCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQi IChvciAidG9jLmRhdC57Z3osbHo0fSIpIGZpbGUgaW4gaXQuCiAJCSAqLwogCQlpZiAoc3RhdChB SC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7CkBAIC0yMDkx LDYgKzIwOTYsMTAgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkK ICNpZmRlZiBIQVZFX0xJQloKIAkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3Bl YywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVm IFVTRV9MWjQKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5k YXQubHo0IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwi dG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpAQCAtMzc1NCw2 ICszNzYzLDEwIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogI2lmbmRlZiBIQVZFX0xJ QloKIAkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQKQogCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQK KwkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9M WjQpCisJCQl1bnN1cHBvcnRlZCA9IHRydWU7CiAjZW5kaWYKIAkJaWYgKHVuc3VwcG9ydGVkKQog CQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9u IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Rp cmVjdG9yeS5jCmluZGV4IGEyZjg4OTk1YzAuLmNlMmEwODM4ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9kaXJlY3RvcnkuYwpAQCAtNzc5LDEwICs3NzksMTMgQEAgX1ByZXBQYXJhbGxlbFJl c3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJaWYgKHN0YXQoZm5hbWUsICZzdCkgPT0gMCkK IAkJCXRlLT5kYXRhTGVuZ3RoID0gc3Quc3Rfc2l6ZTsKLQkJZWxzZQorCQllbHNlIGlmIChBSC0+ Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKIAkJewot CQkJLyogSXQgbWlnaHQgYmUgY29tcHJlc3NlZCAqLwotCQkJc3RybGNhdChmbmFtZSwgIi5neiIs IHNpemVvZihmbmFtZSkpOworCQkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQkJCXN0cmxjYXQoZm5hbWUsICIuZ3oiLCBzaXplb2Yo Zm5hbWUpKTsKKwkJCWVsc2UgaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQ R19DT01QUkVTU0lPTl9MWjQpCisJCQkJc3RybGNhdChmbmFtZSwgIi5sejQiLCBzaXplb2YoZm5h bWUpKTsKKwogCQkJaWYgKHN0YXQoZm5hbWUsICZzdCkgPT0gMCkKIAkJCQl0ZS0+ZGF0YUxlbmd0 aCA9IHN0LnN0X3NpemU7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDUyN2M3NjUxYWIuLjA4MTA1MzM3 YjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwpAQCAtNzE1LDEzICs3MTUsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKIAkJCS8qIGZhbGx0aHJvdWdo ICovCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJ T05fWlNURDoKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3Vw cG9ydGVkIiwgIlpTVEQiKTsKIAkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoK LQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwg IkxaNCIpOwotCQkJYnJlYWs7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5k ZXggNzg0NTQ5MjhjYy4uNzJiMTllZTZjZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Qv MDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAg LTEzOSw2ICsxMzksODAgQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJYXJncyAgICA9PiBbICct ZCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX3BsYWluLnNxbC5neiIsIF0sCiAJCX0sCiAJ fSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBk YXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2N1c3RvbSA9PiB7CisJCXRlc3Rfa2V5ICAgICAg ID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2Nt ZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgJy0tZm9ybWF0PWN1c3RvbScsCisJCQkn LS1jb21wcmVzcz1sejQnLCAiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20u ZHVtcCIsCisJCQkncG9zdGdyZXMnLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdf cmVzdG9yZScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uc3Fs IiwKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQldLAorCQlj b21tYW5kX2xpa2UgPT4geworCQkJY29tbWFuZCA9PiBbCisJCQkJJ3BnX3Jlc3RvcmUnLAorCQkJ CSctbCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQkJXSwKKwkJ CWV4cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiBsejQvLAorCQkJbmFtZSA9PiAnZGF0YSBjb250 ZW50IGlzIGx6NCBjb21wcmVzc2VkJworCQl9LAorCX0sCisKKwkjIERvIG5vdCB1c2UgLS1uby1z eW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNvbXByZXNzaW9uX2x6 NF9kaXIgPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxl X29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWpvYnM9MicsCisJCQknLS1mb3JtYXQ9ZGly ZWN0b3J5JywgICAgICAgICAgICAgICAgICAgJy0tY29tcHJlc3M9bHo0OjEnLAorCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyIiwgJ3Bvc3RncmVzJywKKwkJXSwKKwkJIyBH aXZlIGNvdmVyYWdlIGZvciBtYW51YWxseSBjb21wcmVzc2VkIGJsb2IudG9jIGZpbGVzIGR1cmlu ZworCQkjIHJlc3RvcmUuCisJCWNvbXByZXNzX2NtZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7 J0xaNCd9LAorCQkJYXJncyAgICA9PiBbCisJCQkJJy16JywgJy1mJywgJy0tcm0nLAorCQkJCSIk dGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL2Jsb2JzLnRvYyIsCisJCQkJIiR0ZW1wZGlyL2Nv bXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jLmx6NCIsCisJCQldLAorCQl9LAorCQkjIFZlcmlm eSB0aGF0IGRhdGEgZmlsZXMgd2VyZSBjb21wcmVzc2VkCisJCWdsb2JfcGF0dGVybnMgPT4gWwor CQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvdG9jLmRhdCIsCisJCSAgICAiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2Rpci8qLmRhdC5sejQiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctLWpvYnM9MicsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2Nv bXByZXNzaW9uX2x6NF9kaXIuc3FsIiwKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGly IiwKKwkJXSwKKwl9LAorCisJY29tcHJlc3Npb25fbHo0X3BsYWluID0+IHsKKwkJdGVzdF9rZXkg ICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJCWR1 bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgJy0tZm9ybWF0PXBsYWluJywgJy0tY29t cHJlc3M9bHo0JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNx bC5sejQiLCAncG9zdGdyZXMnLAorCQldLAorCQkjIERlY29tcHJlc3MgdGhlIGdlbmVyYXRlZCBm aWxlIHRvIHJ1biB0aHJvdWdoIHRoZSB0ZXN0cy4KKwkJY29tcHJlc3NfY21kID0+IHsKKwkJCXBy b2dyYW0gPT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLWQnLCAnLWYnLAor CQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsCisJCQkJIiR0ZW1w ZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwiLAorCQkJXSwKKwkJfSwKKwl9LAorCiAJY2xl YW4gPT4gewogCQlkdW1wX2NtZCA9PiBbCiAJCQkncGdfZHVtcCcsCkBAIC00MTc1LDExICs0MjQ5 LDExIEBAIGZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBfcnVucykKIAlteSAkcnVu X2RiICAgPSAncG9zdGdyZXMnOwogCiAJIyBTa2lwIGNvbW1hbmQtbGV2ZWwgdGVzdHMgZm9yIGd6 aXAgaWYgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgaXQuCi0JaWYgKCAgIGRlZmluZWQoJHBnZHVt cF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259KQotCQkmJiAkcGdkdW1wX3J1bnN7JHJ1bn0t Pntjb21waWxlX29wdGlvbn0gZXEgJ2d6aXAnCi0JCSYmICEkc3VwcG9ydHNfZ3ppcCkKKwlpZiAo JHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259ICYmCisJCSgkcGdkdW1wX3J1bnN7 JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEgJ2d6aXAnICYmICEkc3VwcG9ydHNfZ3ppcCkgfHwK KwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnbHo0JyAmJiAhJHN1 cHBvcnRzX2x6NCkpCiAJewotCQlub3RlICIkcnVuOiBza2lwcGVkIGR1ZSB0byBubyBnemlwIHN1 cHBvcnQiOworCQlub3RlICIkcnVuOiBza2lwcGVkIGR1ZSB0byBubyAkcGdkdW1wX3J1bnN7JHJ1 bn0tPntjb21waWxlX29wdGlvbn0gc3VwcG9ydCI7CiAJCW5leHQ7CiAJfQogCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrIGIvc3JjL3Rvb2xzL3BnaW5jbHVk ZS9jcGx1c3BsdXNjaGVjawppbmRleCBkYjQyOTQ3NGEyLi4yYzUwNDJlYjQxIDEwMDc1NQotLS0g YS9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCisrKyBiL3NyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sKQEAgLTE1Miw2ICsxNTIsNyBAQCBkbwogCSMgYXMgZmllbGQg bmFtZXMsIHdoaWNoIGlzIHVuZm9ydHVuYXRlIGJ1dCB3ZSB3b24ndCBjaGFuZ2UgaXQgbm93Lgog CXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggJiYgY29udGludWUK IAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCAmJiBjb250aW51ZQor CXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaCAmJiBjb250aW51ZQog CXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmggJiYgY29udGludWUK IAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuaCAmJiBjb250aW51ZQogCXRl c3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCAmJiBjb250aW51 ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA3ZTYyYzZlZjNkLi42OTJjNWNlYjBiIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTM4Myw2ICsxMzgzLDcgQEAgTFdMb2NrCiBM V0xvY2tIYW5kbGUKIExXTG9ja01vZGUKIExXTG9ja1BhZGRlZAorTFo0Q29tcHJlc3NvclN0YXRl CiBMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90CiBMWjRGX2RlY29tcHJlc3NPcHRpb25zX3QKIExa NEZfZGVjb21wcmVzc2lvbkNvbnRleHRfdAotLSAKMi4zNC4xCgo= --b1_cPbGrW7URw0jYWhtqNX3jJkC8Mxp0t54enSAOM0imF0--