From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17444 invoked by alias); 22 Jun 2017 09:16:32 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 41344 Received: (qmail 20730 invoked from network); 22 Jun 2017 09:16:32 -0000 X-Qmail-Scanner-Diagnostics: from aok120.rev.netart.pl by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(85.128.245.120):SA:0(0.0/5.0):. Processed in 1.35983 secs); 22 Jun 2017 09:16:32 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: psprint@zdharma.org X-Qmail-Scanner-Mime-Attachments: |db_gdbm_2_modules.diff| X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at zdharma.org does not designate permitted sender hosts) X-Virus-Scanned: by amavisd-new using ClamAV (18) Date: Thu, 22 Jun 2017 11:04:48 +0200 From: Sebastian Gniazdowski To: zsh-workers@zsh.org Message-ID: Subject: [PATCH] 2 modules, zsh/db, zsh/gdbm, bug-fixes X-Mailer: Airmail (442) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="594b8830_4da37973_63ea" --594b8830_4da37973_63ea Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hello 1. New module =60zsh/db=60 that provides good architecture, via =60*=5Fma= in=5Fentry=60 functions in client modules (zsh/db/gdbm in this patch). 2. Also, =60zdb=5Fbackends=60 hash holding e.g. =22db/gdbm=22 -> =22loade= d=22.=C2=A0 These are according to Bart opinion. Amount of builtins is normal, small = (ztie, zuntie, etc). Also, zsh/db behaves as a library of common function= s. When developing zredis, with intensive Valgrind use, I've found and fixed= following bugs in zsh/gdbm: - no deletehashtable() in custom hash-set-fn, - no emptyhashtable() in custom hash-set-fn =E2=80=93 replacing hash with= tied=5Fparam=3D( k v ) caused addition of k -> v, and left untouched pre= vious Param content, - call to *untie function to remove PM=5FREADONLY flag caused memory leak= , the flag is now removed directly, if user gave -u option to untie, - data returned by libgdbm should be free()-d (e.g. key returned by=C2=A0= gdbm=5Fnextkey), - freeparamnode() had if(delunset) condition, this caused memory leak =E2= =80=93 replaced with myfreeparamnode(). Tested on: OS X, =46reebsd, Gentoo, Ubuntu. Next step would be zredis. -- =20 Sebastian Gniazdowski psprint /at/ zdharma.org --594b8830_4da37973_63ea Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?Q?db=5Fgdbm=5F2=5Fmodules.diff?=" ZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiLmMgYi9TcmMvTW9kdWxlcy9kYi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjBmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9T cmMvTW9kdWxlcy9kYi5jCkBAIC0wLDAgKzEsNzk5IEBACisvKiAtKi0gTW9kZTogQzsgYy1kZWZh dWx0LXN0eWxlOiAibGludXgiOyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTog bmlsIC0qLQorICogdmltOnN3PTQ6c3RzPTQ6ZXQKKyAqLworCisvKgorICogZGIuYyAtIGdlbmVy YWwgZGF0YWJhc2UgbW9kdWxlLCBmb3J3YXJkcyB0byBiYWNrZW5kcworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNyBTZWJhc3RpYW4gR25pYXpkb3dza2kKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFn cmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgdG8gZGlz dHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1 cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBm b2xsb3dpbmcKKyAqIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoaXMg c29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgImRiLm1kaCIKKyNpbmNsdWRlICJkYi5wcm8iCisj aW5jbHVkZSAiZGIuaCIKKworLyogTUFDUk9TIHt7eyAqLworI2lmbmRlZiBQTV9VUFRPREFURQor I2RlZmluZSBQTV9VUFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFzIHVwLXRvLWRh dGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KKyNlbmRpZgorLyogfX19ICovCisvKiBE RUNMQVJBVElPTlMge3t7ICovCitzdGF0aWMgdm9pZCB6dGllX3VzYWdlKCk7CitzdGF0aWMgdm9p ZCB6dW50aWVfdXNhZ2UoKTsKK3N0YXRpYyB2b2lkIHp0YWRkcmVzc191c2FnZSgpOworc3RhdGlj IHZvaWQgenRjbGVhcl91c2FnZSgpOworCitzdGF0aWMgSGFzaFRhYmxlIGNyZWF0ZWhhc2h0YWJs ZShjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGZyZWViYWNrZW5kbm9kZShIYXNoTm9kZSBobik7 CitzdGF0aWMgdm9pZCBiYWNrZW5kX3NjYW5fZnVuKEhhc2hOb2RlIGhuLCBpbnQgdW51c2VkKTsK Kworc3RhdGljIFBhcmFtIGNyZWF0ZWhhc2hwYXJhbShjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOwor CisvKiBUeXBlIG9mIHByb3ZpZGVkIChieSBiYWNrZW5kIG1vZHVsZSkgZW50cnktcG9pbnQgKi8K K3R5cGVkZWYgaW50ICgqRGJCYWNrZW5kRW50cnlQb2ludCkoVkFfQUxJU1QxKGludCBjbWQpKTsK Kworc3RydWN0IGJhY2tlbmRfbm9kZSB7CisgICAgc3RydWN0IGhhc2hub2RlIG5vZGU7CisgICAg RGJCYWNrZW5kRW50cnlQb2ludCBtYWluX2VudHJ5OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgYmFj a2VuZF9ub2RlICpCYWNrZW5kTm9kZTsKKworLyogTWFwcyBkYi9kYnR5cGUgb250byBCYWNrZW5k Tm9kZSAqLworc3RhdGljIEhhc2hUYWJsZSBiYWNrZW5kc19oYXNoID0gTlVMTDsKKworLyogRm9y IHNlYXJjaGluZyB3aXRoIHNjYW5oYXNodGFibGUgKi8KK2NoYXIgKkluX1BhcmFtTmFtZSA9IE5V TEw7CitEYkJhY2tlbmRFbnRyeVBvaW50IE91dF9Gb3VuZEJlID0gTlVMTDsKKy8qIH19fSAqLwor LyogQVJSQVk6IGJ1aWx0aW4ge3t7ICovCitzdGF0aWMgc3RydWN0IGJ1aWx0aW4gYmludGFiW10g PQoreworICAgIC8qIGggLSBoZWxwLCBkIC0gYmFja2VuZCB0eXBlLCByIC0gcmVhZC1vbmx5LCBh L2YgLSBhZGRyZXNzL2ZpbGUsCisgICAgICogbCAtIGxvYWQgcGFzc3dvcmQgZnJvbSB0ZXJtaW5h bCwgcCAtIHBhc3N3b3JkIGFzIGFyZ3VtZW50LAorICAgICAqIFAgLSBwYXNzd29yZCBmcm9tIGZp bGUsIHogLSB6ZXJvIHJlYWQtY2FjaGUgKi8KKyAgICBCVUlMVElOKCJ6dGllIiwgMCwgYmluX3p0 aWUsIDAsIC0xLCAwLCAiaHJ6ZjpkOmE6cDpQOkw6IiwgTlVMTCksCisgICAgQlVJTFRJTigienVu dGllIiwgMCwgYmluX3p1bnRpZSwgMCwgLTEsIDAsICJ1aCIsIE5VTEwpLAorICAgIEJVSUxUSU4o Inp0YWRkcmVzcyIsIDAsIGJpbl96dGFkZHJlc3MsIDAsIC0xLCAwLCAiaCIsIE5VTEwpLAorICAg IEJVSUxUSU4oInp0Y2xlYXIiLCAwLCBiaW5fenRjbGVhciwgMCwgLTEsIDAsICJoIiwgTlVMTCks Cit9OworLyogfX19ICovCisvKiBBUlJBWTogb3RoZXIge3t7ICovCisjZGVmaW5lIFJPQVJSUEFS QU1ERUYobmFtZSwgdmFyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgeyBuYW1lLCBQTV9BUlJBWSB8IFBNX1JFQURPTkxZLCAodm9pZCAqKSB2YXIsIE5VTEws ICBOVUxMLCBOVUxMLCBOVUxMIH0KKy8qIH19fSAqLworCisvKiBGVU5DVElPTjogdXBkYXRlX3Vz ZXJfaGFzaCB7e3sgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV91c2VyX2hhc2goY2hhciAqaWQsIGlu dCBpc19sb2FkaW5nKSB7CisgICAgUGFyYW0gcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5nZXRub2Rl KHBhcmFtdGFiLCAiemRiX2JhY2tlbmRzIik7CisgICAgaWYoIXBtKSB7CisgICAgICAgIHp3YXJu KCJubyBzdWNoIHBhcmFtZXRlcjogemRiX2JhY2tlbmRzLCBpbnRlcm5hbCBlcnJvciIpOworICAg ICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogTXVzdCBiZSBhIHNwZWNpYWwgaGFzaCAqLwor ICAgIGlmICghKHBtLT5ub2RlLmZsYWdzICYgUE1fSEFTSEVEKSB8fCAhKHBtLT5ub2RlLmZsYWdz ICYgUE1fU1BFQ0lBTCkpIHsKKyAgICAgICAgendhcm4oInpzaC9kYjogUGFyYW1ldGVyIHpkYl9i YWNrZW5kcyBpcyBkZWZpbmVkIGJ5IHVzZXIsIHdpbGwgbm90IHVwZGF0ZSBpdCIpOworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgSGFzaFRhYmxlIGh0ID0gcG0tPnUuaGFzaDsKKyAgICBI YXNoTm9kZSBobiA9IGdldGhhc2hub2RlMihodCwgaWQpOworICAgIFBhcmFtIHZhbF9wbSA9IChQ YXJhbSkgaG47CisKKyAgICBpZiAodmFsX3BtKSB7CisgICAgICAgIGlmICh2YWxfcG0tPnUuc3Ry KSB7CisgICAgICAgICAgICB6c2ZyZWUodmFsX3BtLT51LnN0cik7CisgICAgICAgICAgICB2YWxf cG0tPnUuc3RyID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNfbG9hZGluZykgewor ICAgICAgICAgICAgdmFsX3BtLT51LnN0ciA9IHp0cmR1cCgicmUtbG9hZGVkIik7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICB2YWxfcG0tPnUuc3RyID0genRyZHVwKCJ1bmxvYWRlZCIp OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsX3BtID0gKFBhcmFtKSB6c2hj YWxsb2Moc2l6ZW9mICgqdmFsX3BtKSk7CisgICAgICAgIHZhbF9wbS0+bm9kZS5mbGFncyA9IFBN X1NDQUxBUiB8IFBNX0hBU0hFTEVNOworICAgICAgICB2YWxfcG0tPmdzdS5zID0gJnN0ZHNjYWxh cl9nc3U7CisgICAgICAgIGlmIChpc19sb2FkaW5nKSB7CisgICAgICAgICAgICB2YWxfcG0tPnUu c3RyID0genRyZHVwKCJsb2FkZWQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh bF9wbS0+dS5zdHIgPSB6dHJkdXAoInVubG9hZGVkIik7CisgICAgICAgIH0KKyAgICAgICAgYWRk aGFzaG5vZGUoaHQsIHp0cmR1cChpZCksIHZhbF9wbSk7IC8vIHNldHMgcG0tPm5vZGUubmFtCisg ICAgfQorfQorLyogfX19ICovCisvKiBGVU5DVElPTjogenNoX2RiX3JlZ2lzdGVyX2JhY2tlbmQg e3t7ICovCisKKy8qKi8KK3ZvaWQKK3pzaF9kYl9yZWdpc3Rlcl9iYWNrZW5kKGNoYXIgKmlkLCB2 b2lkICplbnRyeV9wb2ludCkgeworICAgIEJhY2tlbmROb2RlIGJuID0gKEJhY2tlbmROb2RlKXpz aGNhbGxvYyhzaXplb2Yoc3RydWN0IGJhY2tlbmRfbm9kZSkpOworICAgIGlmIChibikgeworICAg ICAgICBibi0+bWFpbl9lbnRyeSA9IGVudHJ5X3BvaW50OworICAgICAgICBhZGRoYXNobm9kZShi YWNrZW5kc19oYXNoLCB6dHJkdXAoaWQpLCAodm9pZCAqKWJuKTsKKyAgICB9IGVsc2UgeworICAg ICAgICB6d2FybigiT3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgYmFja2VuZCBlbnRyeSIp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdXBkYXRlX3VzZXJfaGFzaChpZCwgMSk7 Cit9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiB6c2hfZGJfdW5yZWdpc3Rlcl9iYWNrZW5kIHt7 eyAqLworCisvKiovCit2b2lkCit6c2hfZGJfdW5yZWdpc3Rlcl9iYWNrZW5kKGNoYXIgKmlkKSB7 CisgICAgSGFzaE5vZGUgYm4gPSBiYWNrZW5kc19oYXNoLT5yZW1vdmVub2RlKGJhY2tlbmRzX2hh c2gsIGlkKTsKKyAgICBpZiAoYm4pIHsKKyAgICAgICAgZnJlZWJhY2tlbmRub2RlKGJuKTsKKyAg ICB9CisgICAgdXBkYXRlX3VzZXJfaGFzaChpZCwgMCk7Cit9CisvKiB9fX0gKi8KKy8qIEZVTkNU SU9OOiBiaW5fenRpZSB7e3sgKi8KKworLyoqLworc3RhdGljIGludAorYmluX3p0aWUoY2hhciAq bmFtLCBjaGFyICoqYXJncywgT3B0aW9ucyBvcHMsIFVOVVNFRChpbnQgZnVuYykpCit7CisgICAg Y2hhciAqcG1uYW1lOworCisgICAgLyogQ2hlY2sgb3B0aW9ucyAqLworCisgICAgaWYgKE9QVF9J U1NFVChvcHMsJ2gnKSkgeworICAgICAgICB6dGllX3VzYWdlKCk7CisgICAgICAgIHJldHVybiAw OworICAgIH0KKworICAgIGlmICghT1BUX0lTU0VUKG9wcywnZCcpKSB7CisgICAgICAgIHp3YXJu bmFtKG5hbSwgInlvdSBtdXN0IHBhc3MgZS5nLiBgLWQgZGIvcmVkaXMnLCBzZWUgYC1oJyIpOwor ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoIU9QVF9JU1NFVChvcHMsJ2YnKSAm JiAhT1BUX0lTU0VUKG9wcywnYScpKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwgInlvdSBtdXN0 IHBhc3MgYC1mJyAoZmlsZSwgb3IgYC1hJywgYWRkcmVzcykgd2l0aCBlLmcuIHtob3N0fVs6cG9y dF1bL1tkYl9pZHhdWy9rZXldXSwgc2VlIGAtaCciKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg fQorCisgICAgaWYgKDAgIT0gc3RyY21wKE9QVF9BUkcob3BzLCAnZCcpLCAiZGIvcmVkaXMiKSAm JiAwICE9IHN0cmNtcChPUFRfQVJHKG9wcywgJ2QnKSwgImRiL2dkYm0iKSApIHsKKyAgICAgICAg endhcm5uYW0obmFtLCAiVW5zdXBwb3J0ZWQgYmFja2VuZCB0eXBlIGAlcycsIHNlZSBgLWgnIiwg T1BUX0FSRyhvcHMsICdkJykpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBD aGVjayBhcmd1bWVudCAqLworICAgIHBtbmFtZSA9ICphcmdzOworCisgICAgaWYgKCFwbW5hbWUp IHsKKyAgICAgICAgendhcm5uYW0obmFtLCAiWW91IG11c3QgcGFzcyBub24tb3B0aW9uIGFyZ3Vt ZW50IC0gdGhlIHRhcmdldCBwYXJhbWV0ZXIgdG8gY3JlYXRlLCBzZWUgLWgiKTsKKyAgICAgICAg cmV0dXJuIDE7CisgICAgfQorCisgICAgLyogUHJlcGFyZSBhcmd1bWVudHMgZm9yIGJhY2tlbmQg Ki8KKworICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMLCAqcGFzcyA9IE5VTEwsICpwZmlsZSA9IE5V TEwsICpsYXp5ID0gTlVMTDsKKyAgICBpbnQgcmRvbmx5ID0gMCwgemNhY2hlID0gMCwgcHByb21w dCA9IDA7CisKKyAgICAvKiBBZGRyZXNzICovCisgICAgaWYgKE9QVF9JU1NFVChvcHMsJ2YnKSkg eworICAgICAgICBhZGRyZXNzID0gT1BUX0FSRyhvcHMsJ2YnKTsKKyAgICB9IGVsc2UgeworICAg ICAgICBhZGRyZXNzID0gT1BUX0FSRyhvcHMsJ2EnKTsKKyAgICB9CisKKyAgICAvKiBSZWFkLW9u bHkgKi8KKyAgICBpZiAoT1BUX0lTU0VUKG9wcywncicpKSB7CisgICAgICAgIHJkb25seSA9IDE7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmRvbmx5ID0gMDsKKyAgICB9CisKKyAgICAvKiBaZXJv LWNhY2hlICovCisgICAgaWYgKE9QVF9JU1NFVChvcHMsJ3onKSkgeworICAgICAgICB6Y2FjaGUg PSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHpjYWNoZSA9IDA7CisgICAgfQorCisgICAgLyog UGFzc3dvcmQgKi8KKyAgICBpZiAoT1BUX0lTU0VUKG9wcywncCcpKSB7CisgICAgICAgIHBhc3Mg PSBPUFRfQVJHKG9wcywncCcpOworICAgIH0KKworICAgIC8qIFBhc3N3b3JkIGZpbGUgKi8KKyAg ICBpZiAoT1BUX0lTU0VUKG9wcywnUCcpKSB7CisgICAgICAgIHBmaWxlID0gT1BUX0FSRyhvcHMs J1AnKTsKKyAgICB9CisKKyAgICAvKiBQYXNzd29yZCBsb2FkIHJlcXVlc3QgKi8KKyAgICBpZiAo T1BUX0lTU0VUKG9wcywnbCcpKSB7CisgICAgICAgIHBwcm9tcHQgPSAxOworICAgIH0gZWxzZSB7 CisgICAgICAgIHBwcm9tcHQgPSAwOworICAgIH0KKworICAgIC8qIExhenkgYmluZGluZyAqLwor ICAgIGlmIChPUFRfSVNTRVQob3BzLCdMJykpIHsKKyAgICAgICAgbGF6eSA9IE9QVF9BUkcob3Bz LCdMJyk7CisgICAgfQorCisgICAgQmFja2VuZE5vZGUgbm9kZSA9IE5VTEw7CisgICAgRGJCYWNr ZW5kRW50cnlQb2ludCBiZSA9IE5VTEw7CisKKyAgICBpZighKG5vZGUgPSAoQmFja2VuZE5vZGUp IGdldGhhc2hub2RlMihiYWNrZW5kc19oYXNoLCBPUFRfQVJHKG9wcywgJ2QnKSkpKSB7CisgICAg ICAgIHp3YXJubmFtKG5hbSwgIkJhY2tlbmQgbW9kdWxlIGZvciAlcyBub3QgbG9hZGVkIChvciBs b2FkZWQgYmVmb3JlIHRoZSBtYWluIGBkYicgbW9kdWxlKSIsIE9QVF9BUkcob3BzLCAnZCcpKTsK KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgYmUgPSBub2RlLT5tYWluX2VudHJ5Owor ICAgIGlmICghYmUpIHsKKyAgICAgICAgendhcm5uYW0obmFtLCAiQmFja2VuZCBmb3IgJXMgaXMg dW5pbml0aWFsaXplZCIsIE9QVF9BUkcob3BzLCAnZCcpKTsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorCisgICAgcmV0dXJuIGJlKERCX1RJRSwgYWRkcmVzcywgcmRvbmx5LCB6Y2FjaGUsIHBh c3MsIHBmaWxlLCBwcHJvbXB0LCBwbW5hbWUsIGxhenkpOworfQorLyogfX19ICovCisvKiBGVU5D VElPTjogYmluX3p1bnRpZSB7e3sgKi8KKworLyoqLworc3RhdGljIGludAorYmluX3p1bnRpZShj aGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkKK3sK KyAgICBjaGFyICpwbW5hbWU7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiAoT1BUX0lTU0VU KG9wcywnaCcpKSB7CisgICAgICAgIHp1bnRpZV91c2FnZSgpOworICAgICAgICByZXR1cm4gMDsK KyAgICB9CisKKyAgICBpZiAoISphcmdzKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwgIkF0IGxl YXN0IG9uZSB2YXJpYWJsZSBuYW1lIGlzIG5lZWRlZCwgc2VlIC1oIik7CisgICAgICAgIHJldHVy biAxOworICAgIH0KKworICAgIGZvciAocG1uYW1lID0gKmFyZ3M7ICphcmdzKys7IHBtbmFtZSA9 ICphcmdzKSB7CisgICAgICAgIEluX1BhcmFtTmFtZSA9IHBtbmFtZTsKKyAgICAgICAgT3V0X0Zv dW5kQmUgPSBOVUxMOworCisgICAgICAgIHNjYW5oYXNodGFibGUoYmFja2VuZHNfaGFzaCwgMCwg MCwgMCwgYmFja2VuZF9zY2FuX2Z1biwgMCk7CisKKyAgICAgICAgaWYgKCFPdXRfRm91bmRCZSkg eworICAgICAgICAgICAgendhcm5uYW0obmFtLCAiRGlkbid0IHJlY29nbml6ZSBgJXMnIGFzIGEg dGllZCBwYXJhbWV0ZXIiLCBwbW5hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg IH0KKworICAgICAgICBpbnQgcm91bnRpZSA9IDA7CisKKyAgICAgICAgaWYgKE9QVF9JU1NFVChv cHMsJ3UnKSkgeworICAgICAgICAgICAgcm91bnRpZSA9IDE7CisgICAgICAgIH0KKworICAgICAg ICByZXQgPSBPdXRfRm91bmRCZShEQl9VTlRJRSwgcm91bnRpZSwgcG1uYW1lKSA/IDEgOiByZXQ7 CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGJp bl96dGFkZHJlc3Mge3t7ICovCisKKy8qKi8KK3N0YXRpYyBpbnQKK2Jpbl96dGFkZHJlc3MoY2hh ciAqbmFtLCBjaGFyICoqYXJncywgT3B0aW9ucyBvcHMsIFVOVVNFRChpbnQgZnVuYykpCit7Cisg ICAgY2hhciAqcG1uYW1lOworICAgIGludCByZXQgPSAwOworCisgICAgaWYgKE9QVF9JU1NFVChv cHMsJ2gnKSkgeworICAgICAgICB6dGFkZHJlc3NfdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIDA7 CisgICAgfQorCisgICAgaWYgKCEqYXJncykgeworICAgICAgICB6d2Fybm5hbShuYW0sICJPbmUg cGFyYW1ldGVyIG5hbWUgaXMgbmVlZGVkLCBzZWUgLWgiKTsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorCisgICAgcG1uYW1lID0gKmFyZ3M7CisgICAgSW5fUGFyYW1OYW1lID0gcG1uYW1lOwor ICAgIE91dF9Gb3VuZEJlID0gTlVMTDsKKworICAgIHNjYW5oYXNodGFibGUoYmFja2VuZHNfaGFz aCwgMCwgMCwgMCwgYmFja2VuZF9zY2FuX2Z1biwgMCk7CisKKyAgICBpZiAoIU91dF9Gb3VuZEJl KSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwgIkRpZG4ndCByZWNvZ25pemUgYCVzJyBhcyBhIHRp ZWQgcGFyYW1ldGVyIiwgcG1uYW1lKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAg cmV0ID0gT3V0X0ZvdW5kQmUoREJfR0VUX0FERFJFU1MsIHBtbmFtZSkgPyAxIDogcmV0OworCisg ICAgcmV0dXJuIHJldDsKK30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGJpbl96dGNsZWFyIHt7 eyAqLworCisvKiovCitzdGF0aWMgaW50CitiaW5fenRjbGVhcihjaGFyICpuYW0sIGNoYXIgKiph cmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkKK3sKKyAgICBjaGFyICpwbW5hbWUs ICprZXk7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiAoT1BUX0lTU0VUKG9wcywnaCcpKSB7 CisgICAgICAgIHp0Y2xlYXJfdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg ICAgaWYgKCEqYXJncykgeworICAgICAgICB6d2Fybm5hbShuYW0sICJPbmUtdG8tdHdvIHBhcmFt ZXRlcnMnIG5hbWVzIGFyZSBuZWVkZWQsIHNlZSAtaCIpOworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgICBwbW5hbWUgPSAqYXJnczsKKyAgICBrZXkgPSAqKGFyZ3MrMSk7CisKKyAgICBJ bl9QYXJhbU5hbWUgPSBwbW5hbWU7CisgICAgT3V0X0ZvdW5kQmUgPSBOVUxMOworCisgICAgc2Nh bmhhc2h0YWJsZShiYWNrZW5kc19oYXNoLCAwLCAwLCAwLCBiYWNrZW5kX3NjYW5fZnVuLCAwKTsK KworICAgIGlmICghT3V0X0ZvdW5kQmUpIHsKKyAgICAgICAgendhcm5uYW0obmFtLCAiRGlkbid0 IHJlY29nbml6ZSBgJXMnIGFzIGEgdGllZCBwYXJhbWV0ZXIiLCBwbW5hbWUpOworICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXQgPSBPdXRfRm91bmRCZShEQl9DTEVBUl9DQUNIRSwg cG1uYW1lLCBrZXkpID8gMSA6IHJldDsKKworICAgIHJldHVybiByZXQ7Cit9CisvKiB9fX0gKi8K KworLyogRlVOQ1RJT046IHp0YWRkcmVzc191c2FnZSB7e3sgKi8KKworc3RhdGljIHZvaWQKK3p0 YWRkcmVzc191c2FnZSgpCit7CisgICAgZnByaW50ZihzdGRvdXQsICJVc2FnZTogenRhZGRyZXNz IHt0aWVkLXBhcmFtZXRlci1uYW1lfVxuIik7CisgICAgZnByaW50ZihzdGRvdXQsICJEZXNjcmlw dGlvbjogc3RvcmVzIGFkZHJlc3MgdXNlZCBieSBnaXZlbiBwYXJhbWV0ZXIgdG8gJFJFUExZXG4i KTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IHp0Y2xl YXJfdXNhZ2Uge3t7ICovCisKK3N0YXRpYyB2b2lkCit6dGNsZWFyX3VzYWdlKCkKK3sKKyAgICBm cHJpbnRmKHN0ZG91dCwgIlVzYWdlOiB6dGNsZWFyIHt0aWVkLXBhcmFtZXRlci1uYW1lfSBba2V5 IG5hbWVdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIkRlc2NyaXB0aW9uOiBjbGVhcnMgY2Fj aGUgb2YgZ2l2ZW4gaGFzaC9rZXkgb3Igb2YgZ2l2ZW4gcGxhaW5cbiIpOworICAgIGZwcmludGYo c3Rkb3V0LCAiICAgICAgICAgICAgIHBhcmFtZXRlcjogc2V0IChhcnJheSksIGxpc3QgKGFycmF5 KSwgc3RyaW5nIChzY2FsYXIpO1xuIik7CisgICAgZnByaW50ZihzdGRvdXQsICIgICAgICAgICAg ICAgcGFzcyBgLXonIHRvIHp0aWUgdG8gZ2xvYmFsbHkgZGlzYWJsZSBjYWNoZSBmb3IgcGFyYW1l dGVyXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKy8qIH19fSAqLworCisvKioqKioqKioq KioqKioqIE1BSU4gQ09ERSAqKioqKioqKioqKioqKiovCisKKy8qIEFSUkFZIGZlYXR1cmVzIHt7 eyAqLworc3RhdGljIHN0cnVjdCBmZWF0dXJlcyBtb2R1bGVfZmVhdHVyZXMgPQoreworICAgIGJp bnRhYiwgc2l6ZW9mKGJpbnRhYikvc2l6ZW9mKCpiaW50YWIpLAorICAgIE5VTEwsIDAsCisgICAg TlVMTCwgMCwKKyAgICBOVUxMLCAwLAorICAgIDAKK307CisvKiB9fX0gKi8KKworLyogRlVOQ1RJ T046IHNldHVwXyB7e3sgKi8KKworLyoqLworaW50CitzZXR1cF8oVU5VU0VEKE1vZHVsZSBtKSkK K3sKKyAgICBQYXJhbSBwbSAgPSBOVUxMOworCisgICAgLyogQ3JlYXRlIHByaXZhdGUgcmVnaXN0 cmF0aW9uIGhhc2ggKi8KKyAgICBpZiAoIShiYWNrZW5kc19oYXNoID0gY3JlYXRlaGFzaHRhYmxl KCJaU0hfQkFDS0VORFMiKSkpIHsKKyAgICAgICAgendhcm4oIkNhbm5vdCBjcmVhdGUgYmFja2Vu ZC1yZWdpc3RlciBoYXNoIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIFVu c2V0IHpkYl9iYWNrZW5kcyBpZiBpdCBleGlzdHMuIEluaGVyaXRlZCBmcm9tIGRiX2dkYm0sCisg ICAgICogaXQgY2xlYXJzIGN1cnJlbnQgc2NvcGUsIGxlYXZpbmcgYW55IHVwcGVyIHNjb3BlIHVu dG91Y2hlZCwKKyAgICAgKiB3aGljaCBjYW4gcmVzdWx0IGluIHpkYl9iYWNrZW5kcyBiZWluZyBs b2NhbC4gQ2FuIGJlIHNlZW4KKyAgICAgKiBhcyBhIGZlYXR1cmUgKi8KKyAgICBpZiAoKHBtID0g KFBhcmFtKXBhcmFtdGFiLT5nZXRub2RlKHBhcmFtdGFiLCAiemRiX2JhY2tlbmRzIikpICYmICEo cG0tPm5vZGUuZmxhZ3MgJiBQTV9VTlNFVCkpIHsKKyAgICAgICAgcG0tPm5vZGUuZmxhZ3MgJj0g flBNX1JFQURPTkxZOworICAgICAgICBpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkpIHsKKyAg ICAgICAgICAgIHp3YXJuKCJDYW5ub3QgcHJvcGVybHkgbWFuYWdlIHNjb3Bpbmcgb2YgdmFyaWFi bGVzIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q IENyZWF0ZSB6ZGJfYmFja2VuZHMgcHVibGljIGhhc2ggdGhhdCB3aWxsIGhvbGQgc3RhdGUgb2Yg YmFja2VuZHMgKi8KKyAgICBwbSA9IGNyZWF0ZWhhc2hwYXJhbSgiemRiX2JhY2tlbmRzIiwgUE1f UkVBRE9OTFkgfCBQTV9SRU1PVkFCTEUpOworICAgIGlmIChOVUxMID09IHBtKSB7CisgICAgICAg IHp3YXJuKCJDYW5ub3QgY3JlYXRlIHVzZXIgYmFja2VuZHMtbGlzdCBoYXNoIHBhcmFtZXRlciIp OworICAgICAgICBpZiAoYmFja2VuZHNfaGFzaCkgeworICAgICAgICAgICAgZGVsZXRlaGFzaHRh YmxlKGJhY2tlbmRzX2hhc2gpOworICAgICAgICAgICAgYmFja2VuZHNfaGFzaCA9IE5VTEw7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHBtLT5nc3UuaCA9ICZzdGRo YXNoX2dzdTsKKworICAgIHJldHVybiAwOworfQorLyogfX19ICovCisvKiBGVU5DVElPTjogZmVh dHVyZXNfIHt7eyAqLworCisvKiovCitpbnQKK2ZlYXR1cmVzXyhNb2R1bGUgbSwgY2hhciAqKipm ZWF0dXJlcykKK3sKKyAgICAqZmVhdHVyZXMgPSBmZWF0dXJlc2FycmF5KG0sICZtb2R1bGVfZmVh dHVyZXMpOworICAgIHJldHVybiAwOworfQorLyogfX19ICovCisvKiBGVU5DVElPTjogZW5hYmxl c18ge3t7ICovCisKKy8qKi8KK2ludAorZW5hYmxlc18oTW9kdWxlIG0sIGludCAqKmVuYWJsZXMp Cit7CisgICAgcmV0dXJuIGhhbmRsZWZlYXR1cmVzKG0sICZtb2R1bGVfZmVhdHVyZXMsIGVuYWJs ZXMpOworfQorLyogfX19ICovCisvKiBGVU5DVElPTjogYm9vdF8ge3t7ICovCisKKy8qKi8KK2lu dAorYm9vdF8oVU5VU0VEKE1vZHVsZSBtKSkKK3sKKyAgICByZXR1cm4gMDsKK30KKy8qIH19fSAq LworLyogRlVOQ1RJT046IGNsZWFudXBfIHt7eyAqLworCisvKiovCitpbnQKK2NsZWFudXBfKE1v ZHVsZSBtKQoreworICAgIC8qIFRoaXMgZnJlZXMgYHpyZWRpc190aWVkYCAqLworICAgIHJldHVy biBzZXRmZWF0dXJlZW5hYmxlcyhtLCAmbW9kdWxlX2ZlYXR1cmVzLCBOVUxMKTsKKworICAgIGlm IChiYWNrZW5kc19oYXNoKSB7CisgICAgICAgIGRlbGV0ZWhhc2h0YWJsZShiYWNrZW5kc19oYXNo KTsKKyAgICAgICAgYmFja2VuZHNfaGFzaCA9IE5VTEw7CisgICAgfQorfQorLyogfX19ICovCisv KiBGVU5DVElPTjogZmluaXNoXyB7e3sgKi8KKworLyoqLworaW50CitmaW5pc2hfKFVOVVNFRChN b2R1bGUgbSkpCit7CisgICAgcmV0dXJuIDA7Cit9CisvKiB9fX0gKi8KKworLyoqKioqKioqKioq KioqKiBVVElMSVRJRVMgKioqKioqKioqKioqKioqLworCisvKiBGVU5DVElPTjogY3JlYXRlaGFz aHRhYmxlIHt7eyAqLworc3RhdGljIEhhc2hUYWJsZQorY3JlYXRlaGFzaHRhYmxlKGNoYXIgKm5h bWUpCit7CisgICAgSGFzaFRhYmxlIGh0OworCisgICAgaHQgPSBuZXdoYXNodGFibGUoOCwgbmFt ZSwgTlVMTCk7CisKKyAgICBodC0+aGFzaCAgICAgICAgPSBoYXNoZXI7CisgICAgaHQtPmVtcHR5 dGFibGUgID0gZW1wdHloYXNodGFibGU7CisgICAgaHQtPmZpbGx0YWJsZSAgID0gTlVMTDsKKyAg ICBodC0+Y21wbm9kZXMgICAgPSBzdHJjbXA7CisgICAgaHQtPmFkZG5vZGUgICAgID0gYWRkaGFz aG5vZGU7CisgICAgaHQtPmdldG5vZGUgICAgID0gZ2V0aGFzaG5vZGUyOworICAgIGh0LT5nZXRu b2RlMiAgICA9IGdldGhhc2hub2RlMjsKKyAgICBodC0+cmVtb3Zlbm9kZSAgPSByZW1vdmVoYXNo bm9kZTsKKyAgICBodC0+ZGlzYWJsZW5vZGUgPSBOVUxMOworICAgIGh0LT5lbmFibGVub2RlICA9 IE5VTEw7CisgICAgaHQtPmZyZWVub2RlICAgID0gZnJlZWJhY2tlbmRub2RlOworICAgIGh0LT5w cmludG5vZGUgICA9IE5VTEw7CisKKyAgICByZXR1cm4gaHQ7Cit9CisvKiB9fX0gKi8KKy8qIEZV TkNUSU9OOiBjcmVhdGVoYXNocGFyYW0ge3t7ICovCitzdGF0aWMgUGFyYW0KK2NyZWF0ZWhhc2hw YXJhbShjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisgICAgUGFyYW0gcG07CisgICAgSGFzaFRh YmxlIGh0OworCisgICAgcG0gPSBjcmVhdGVwYXJhbShuYW1lLCBmbGFncyB8IFBNX1NQRUNJQUwg fCBQTV9IQVNIRUQpOworICAgIGlmICghcG0pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg fQorCisgICAgaWYgKHBtLT5vbGQpCisgICAgICAgIHBtLT5sZXZlbCA9IGxvY2FsbGV2ZWw7CisK KyAgICAvKiBUaGlzIGNyZWF0ZXMgc3RhbmRhcmQgaGFzaC4gKi8KKyAgICBodCA9IHBtLT51Lmhh c2ggPSBuZXdwYXJhbXRhYmxlKDcsIG5hbWUpOworICAgIGlmICghcG0tPnUuaGFzaCkgeworICAg ICAgICBwYXJhbXRhYi0+cmVtb3Zlbm9kZShwYXJhbXRhYiwgbmFtZSk7CisgICAgICAgIHBhcmFt dGFiLT5mcmVlbm9kZSgmcG0tPm5vZGUpOworICAgICAgICB6d2Fybm5hbShuYW1lLCAiT3V0IG9m IG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgdXNlci12aXNpYmxlIGhhc2ggb2YgYmFja2VuZHMiKTsK KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRG9lcyBmcmVlIFBhcmFtICh1 bnNldGZuIGlzIGNhbGxlZCkgKi8KKyAgICBodC0+ZnJlZW5vZGUgPSB6c2hfZGJfZnJlZXBhcmFt bm9kZTsKKworICAgIHJldHVybiBwbTsKK30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGZyZWVi YWNrZW5kbm9kZSB7e3sgKi8KK3N0YXRpYyB2b2lkCitmcmVlYmFja2VuZG5vZGUoSGFzaE5vZGUg aG4pCit7CisgICAgenNmcmVlKGhuLT5uYW0pOworICAgIHpmcmVlKGhuLCBzaXplb2Yoc3RydWN0 IGJhY2tlbmRfbm9kZSkpOworfQorLyogfX19ICovCisvKiBGVU5DVElPTjogenNoX2RiX2ZyZWVw YXJhbW5vZGUge3t7ICovCisKKy8qKi8KK3ZvaWQKK3pzaF9kYl9mcmVlcGFyYW1ub2RlKEhhc2hO b2RlIGhuKQoreworICAgIFBhcmFtIHBtID0gKFBhcmFtKSBobjsKKworICAgIC8qIFVwc3RyZWFt OiBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHVuc2V0Zm4oKSBpcyB1c2VkIGJ5IG1vZHVsZXMgdG8K KyAgICAgKiBkaWZmZXJlbnRpYXRlICJleHAibGljaXQgdW5zZXQgZnJvbSBpbXBsaWNpdCB1bnNl dCwgYXMgd2hlbgorICAgICAqIGEgcGFyYW1ldGVyIGlzIGdvaW5nIG91dCBvZiBzY29wZS4gIEl0 J3Mgbm90IGNsZWFyIHdoaWNoCisgICAgICogb2YgdGhlc2UgYXBwbGllcyBoZXJlLCBidXQgcGFz c2luZyAxIGhhcyBhbHdheXMgd29ya2VkLgorICAgICAqLworCisgICAgLyogaWYgKGRlbHVuc2V0 KSAqLworICAgIHBtLT5nc3Uucy0+dW5zZXRmbihwbSwgMSk7CisKKyAgICB6c2ZyZWUocG0tPm5v ZGUubmFtKTsKKyAgICAvKiBJZiB0aGlzIHZhcmlhYmxlIHdhcyB0aWVkIGJ5IHRoZSB1c2VyLCBl bmFtZSB3YXMgenRyZHVwJ2QgKi8KKyAgICBpZiAocG0tPm5vZGUuZmxhZ3MgJiBQTV9USUVEICYm IHBtLT5lbmFtZSkgeworICAgICAgICB6c2ZyZWUocG0tPmVuYW1lKTsKKyAgICAgICAgcG0tPmVu YW1lID0gTlVMTDsKKyAgICB9CisgICAgemZyZWUocG0sIHNpemVvZihzdHJ1Y3QgcGFyYW0pKTsK K30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGJhY2tlbmRfc2Nhbl9mdW4ge3t7ICovCitzdGF0 aWMgdm9pZAorYmFja2VuZF9zY2FuX2Z1bihIYXNoTm9kZSBobiwgaW50IHVudXNlZCkKK3sKKyAg ICBCYWNrZW5kTm9kZSBibiA9IChCYWNrZW5kTm9kZSlobjsKKyAgICBEYkJhY2tlbmRFbnRyeVBv aW50IGJlID0gYm4tPm1haW5fZW50cnk7CisgICAgaWYgKCFiZSkgeworICAgICAgICB6d2Fybigi QmFja2VuZCAlcyByZWdpc3RlcmVkIGJ1dCB1bmluaXRpYWxpemVkIiwgaG4tPm5hbSk7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisgICAgLyogMCAtIHNoZWxsIHRydWUgdmFsdWUgKi8KKyAgICBp ZigwID09IGJlKERCX0lTX1RJRUQsIEluX1BhcmFtTmFtZSkpIHsKKyAgICAgICAgT3V0X0ZvdW5k QmUgPSBiZTsKKyAgICB9Cit9CisvKiB9fX0gKi8KKworLyoqKioqKioqKioqIFNIQVJFRCBVVElM SVRJRVMgKioqKioqKioqKiovCisKKy8qIEZVTkNUSU9OOiB6c2hfZGJfdW5tZXRhZnlfemFsbG9j IHt7eyAqLworCisvKgorICogVW5tZXRhZnkgdGhhdDoKKyAqIC0gZHVwbGljYXRlcyBidWZlciB0 byB3b3JrIG9uIGl0LAorICogLSBkb2VzIHphbGxvYyBvZiBleGFjdCBzaXplIGZvciB0aGUgbmV3 IHN0cmluZywKKyAqIC0gcmVzdG9yZXMgd29yayBidWZmZXIgdG8gb3JpZ2luYWwgY29udGVudCwg dG8gcmVzdG9yZSBzdHJsZW4KKyAqCisgKiBObyB6c2ZyZWUoKS1jb25mdXNpbmcgc3RyaW5nIHdp bGwgYmUgcHJvZHVjZWQuCisgKi8KKworLyoqLworY2hhciAqCit6c2hfZGJfdW5tZXRhZnlfemFs bG9jKGNvbnN0IGNoYXIgKnRvX2NvcHksIGludCAqbmV3X2xlbikKK3sKKyAgICBjaGFyICp3b3Jr LCAqdG9fcmV0dXJuOworICAgIGludCBteV9uZXdfbGVuID0gMDsKKworICAgIHdvcmsgPSB6dHJk dXAodG9fY29weSk7CisgICAgd29yayA9IHVubWV0YWZ5KHdvcmssICZteV9uZXdfbGVuKTsKKwor ICAgIGlmIChuZXdfbGVuKQorICAgICAgICAqbmV3X2xlbiA9IG15X25ld19sZW47CisKKyAgICAv KiBUaGlzIHN0cmluZyBjYW4gYmUgY29ycmVjdGx5IHpzZnJlZSgpLWQgKi8KKyAgICB0b19yZXR1 cm4gPSAoY2hhciAqKSB6YWxsb2MoKG15X25ld19sZW4rMSkqc2l6ZW9mKGNoYXIpKTsKKyAgICBt ZW1jcHkodG9fcmV0dXJuLCB3b3JrLCBzaXplb2YoY2hhcikqbXlfbmV3X2xlbik7IC8vIG1lbWNw eSBoYW5kbGVzICQnXDAnCisgICAgdG9fcmV0dXJuW215X25ld19sZW5dPSdcMCc7CisKKyAgICAv KiBSZXN0b3JlIG9yaWdpbmFsIHN0cmxlbiBhbmQgY29ycmVjdGx5IGZyZWUgKi8KKyAgICBzdHJj cHkod29yaywgdG9fY29weSk7CisgICAgenNmcmVlKHdvcmspOworCisgICAgcmV0dXJuIHRvX3Jl dHVybjsKK30KKy8qIH19fSAqLworLyogRlVOQ1RJT046IHpzaF9kYl9zZXRfbGVuZ3RoIHt7eyAq LworCisvKiBGb3IgenNoLWFsbG9jYXRvciwgcmVzdCBvZiBac2ggc2VlbXMgdG8gdXNlCisgKiBm cmVlKCkgaW5zdGVhZCBvZiB6c2ZyZWUoKSwgYW5kIHN1Y2ggbGVuZ3RoCisgKiByZXN0b3JhdGlv biBjYXVzZXMgc2xvd2Rvd24sIGJ1dCBhbGwgaXMgdGhpcworICogd2F5IHN0cmljdCAtIGNvcnJl Y3QgKi8KKworLyoqLwordm9pZAorenNoX2RiX3NldF9sZW5ndGgoY2hhciAqYnVmLCBpbnQgc2l6 ZSkKK3sKKyAgICBidWZbc2l6ZV09J1wwJzsKKyAgICB3aGlsZSAoLS0gc2l6ZSA+PSAwKSB7Cisg ICAgICAgIGJ1ZltzaXplXT0nICc7CisgICAgfQorfQorLyogfX19ICovCisvKiBGVU5DVElPTjog enNoX2RiX3N0YW5kYXJpemVfaGFzaCB7e3sgKi8KKworLyoqLwordm9pZAorenNoX2RiX3N0YW5k YXJpemVfaGFzaChQYXJhbSBwbSkgeworICAgIGlmICgwID09IChwbS0+bm9kZS5mbGFncyAmIFBN X0hBU0hFRCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBtLT5ub2RlLmZsYWdz ICY9IH4oUE1fU1BFQ0lBTHxQTV9SRUFET05MWSk7CisgICAgcG0tPmdzdS5oID0gJnN0ZGhhc2hf Z3N1OworCisgICAgSGFzaFRhYmxlIGh0ID0gcG0tPnUuaGFzaDsKKworICAgIGh0LT5oYXNoICAg ICAgICA9IGhhc2hlcjsKKyAgICBodC0+ZW1wdHl0YWJsZSAgPSBlbXB0eWhhc2h0YWJsZTsKKyAg ICBodC0+ZmlsbHRhYmxlICAgPSBOVUxMOworICAgIGh0LT5jbXBub2RlcyAgICA9IHN0cmNtcDsK KyAgICBodC0+YWRkbm9kZSAgICAgPSBhZGRoYXNobm9kZTsKKyAgICBodC0+Z2V0bm9kZSAgICAg PSBnZXRoYXNobm9kZTsKKyAgICBodC0+Z2V0bm9kZTIgICAgPSBnZXRoYXNobm9kZTI7CisgICAg aHQtPnJlbW92ZW5vZGUgID0gcmVtb3ZlaGFzaG5vZGU7CisgICAgaHQtPmRpc2FibGVub2RlID0g TlVMTDsKKyAgICBodC0+ZW5hYmxlbm9kZSAgPSBOVUxMOworICAgIGh0LT5mcmVlbm9kZSAgICA9 IHpzaF9kYl9mcmVlcGFyYW1ub2RlOworfQorLyogfX19ICovCisvKiBGVU5DVElPTjogenNoX2Ri X2Fycl9hcHBlbmQge3t7ICovCisKKy8qCisgKiBBZGRzIHBhcmFtZXRlciBuYW1lICh0byBnaXZl biBgKl90aWVkYCBhcnJheSkKKyAqLworCisvKiovCitpbnQKK3pzaF9kYl9hcnJfYXBwZW5kKGNo YXIgKioqYXJyLCBjb25zdCBjaGFyICppbnB1dF9zKQoreworICAgIGludCBvbGRfbGVuID0gYXJy bGVuKCphcnIpOworICAgIGNoYXIgKipuZXdfYXJyID0genNoY2FsbG9jKCAob2xkX2xlbisyKSAq IHNpemVvZihjaGFyICopKTsKKworICAgIC8qIENvcHkgKi8KKyAgICBjaGFyICoqcCA9ICphcnI7 CisgICAgY2hhciAqKmRzdCA9IG5ld19hcnI7CisgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICpk c3QrKyA9ICpwKys7CisgICAgfQorCisgICAgLyogQXBwZW5kIG5ldyBvbmUgKi8KKyAgICAqZHN0 ID0genRyZHVwKGlucHV0X3MpOworCisgICAgLyogU3Vic3RpdHV0ZSwgZnJlZSBvbGQgb25lICov CisgICAgemZyZWUoKmFyciwgc2l6ZW9mKGNoYXIgKikgKiAob2xkX2xlbiArIDEpKTsKKyAgICAq YXJyID0gbmV3X2FycjsKKworICAgIHJldHVybiAwOworfQorLyogfX19ICovCisvKiBGVU5DVElP TjogenNoX2RiX2ZpbHRlcl9hcnIge3t7ICovCisKKy8qCisgKiBSZW1vdmVzIHBhcmFtZXRlciBu YW1lIChmcm9tIGdpdmVuIGAqX3RpZWRgIGFycmF5KQorICovCisKKy8qKi8KK2ludAorenNoX2Ri X2ZpbHRlcl9hcnIoY2hhciAqKiphcnIsIGNvbnN0IGNoYXIgKmlucHV0X3MpCit7CisgICAgaW50 IG9sZF9sZW4gPSBhcnJsZW4oKmFycik7CisKKyAgICAvKiBUd28gc3RhZ2UsIHRvIGFsd2F5cyBo YXZlIGFycmxlbigpID09IHpmcmVlLXNpemUgLSAxLgorICAgICAqIENvdWxkIGRvIGFsbG9jYXRp b24gYW5kIHJldmVydCB3aGVuIGBub3QgZm91bmRgLCBidXQKKyAgICAgKiB3aGF0IHdvdWxkIGJl IGJldHRlciBhYm91dCB0aGF0LiAqLworCisgICAgLyogRmluZCBvbmUgdG8gcmVtb3ZlICovCisg ICAgY2hhciAqKnAgPSAqYXJyOworICAgIHdoaWxlICgqcCkgeworICAgICAgICBpZiAoMD09c3Ry Y21wKGlucHV0X3MsKnApKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBwKys7CisgICAgfQorCisgICAgLyogQ29weSB4KzEgdG8geCAqLworICAgIHdoaWxlICgqcCkg eworICAgICAgICAqcD0qKHArMSk7CisgICAgICAgIHArKzsKKyAgICB9CisKKyAgICAvKiBTZWNv bmQgc3RhZ2UuIFNpemUgY2hhbmdlZD8gT25seSBvbGRfc2l6ZS0xCisgICAgICogY2hhbmdlIGlz IHBvc3NpYmxlLCBidXQuLiBwYXJhbm9pYSB3YXkgKi8KKyAgICBpbnQgbmV3X2xlbiA9IGFycmxl bigqYXJyKTsKKyAgICBpZiAobmV3X2xlbiAhPSBvbGRfbGVuKSB7CisgICAgICAgIGNoYXIgKipu ZXdfYXJyID0gKGNoYXIgKiopIHpzaGNhbGxvYygobmV3X2xlbisxKSAqIHNpemVvZihjaGFyICop KTsKKworICAgICAgICAvKiBDb3B5ICovCisgICAgICAgIHAgPSAqYXJyOworICAgICAgICBjaGFy ICoqZHN0ID0gbmV3X2FycjsKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICAqZHN0 KysgPSAqcCsrOworICAgICAgICB9CisgICAgICAgICpkc3QgPSBOVUxMOworCisgICAgICAgIC8q IFN1YnN0aXR1dGUsIGZyZWUgb2xkIG9uZSAqLworICAgICAgICB6ZnJlZSgqYXJyLCBzaXplb2Yo Y2hhciAqKSAqIChvbGRfbGVuICsgMSkpOworICAgICAgICAqYXJyID0gbmV3X2FycjsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKy8qIH19fSAqLworCisvKioqKioqKioqKioqKioqKiogVVNB R0UgKioqKioqKioqKioqKioqKiovCisKKy8qIEZVTkNUSU9OOiB6dGllX3VzYWdlIHt7eyAqLwor CitzdGF0aWMgdm9pZAorenRpZV91c2FnZSgpCit7CisgICAgZnByaW50ZihzdGRvdXQsICJVc2Fn ZTogenRpZSAtZCBkYi8uLi4gWy16XSBbLXJdIFstcCBwYXNzd29yZF0gWy1QIHBhc3N3b3JkX2Zp bGVdIFstTCB0eXBlXSIKKyAgICAgICAgICAgICItZi8tYSB7ZGJfYWRkcmVzc30ge3BhcmFtZXRl cl9uYW1lfVxuIik7CisgICAgZnByaW50ZihzdGRvdXQsICJPcHRpb25zOlxuIik7CisgICAgZnBy aW50ZihzdGRvdXQsICIgLWQ6ICAgICAgIHNlbGVjdCBkYXRhYmFzZSB0eXBlOiBcImRiL2dkYm1c IiwgXCJkYi9yZWRpc1wiXG4iKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiAtejogICAgICAgemVy by1jYWNoZSBmb3IgcmVhZCBvcGVyYXRpb25zIChhbHdheXMgYWNjZXNzIGRhdGFiYXNlKVxuIik7 CisgICAgZnByaW50ZihzdGRvdXQsICIgLXI6ICAgICAgIGNyZWF0ZSByZWFkLW9ubHkgcGFyYW1l dGVyXG4iICk7CisgICAgZnByaW50ZihzdGRvdXQsICIgLWYgb3IgLWE6IGRhdGFiYXNlLWFkZHJl c3MgaW4gZm9ybWF0IHtob3N0fVs6cG9ydF1bL1tkYl9pZHhdWy9rZXldXSBvciBhIGZpbGUgcGF0 aFxuIik7CisgICAgZnByaW50ZihzdGRvdXQsICIgLXA6ICAgICAgIGRhdGFiYXNlLXBhc3N3b3Jk IHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwg IiAtUDogICAgICAgcGF0aCB0byBmaWxlIHdpdGggZGF0YWJhc2UtcGFzc3dvcmRcbiIpOworICAg IGZwcmludGYoc3Rkb3V0LCAiIC1MOiAgICAgICBsYXp5IGJpbmRpbmcgLSBwcm92aWRlIHR5cGUg b2Yga2V5IHRvIGNyZWF0ZSBpZiBpdCBkb2Vzbid0IGV4aXN0ICIKKyAgICAgICAgICAgICAgICAg ICAgIihzdHJpbmcsIHNldCwgenNldCwgaGFzaCwgbGlzdClcbiIpOworICAgIGZwcmludGYoc3Rk b3V0LCAiVGhlIHtwYXJhbWV0ZXJfbmFtZX0gLSBjaG9vc2UgbmFtZSBmb3IgdGhlIGNyZWF0ZWQg ZGF0YWJhc2UtYm91bmQgcGFyYW1ldGVyXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKy8q IH19fSAqLworLyogRlVOQ1RJT046IHp1bnRpZV91c2FnZSB7e3sgKi8KKworc3RhdGljIHZvaWQK K3p1bnRpZV91c2FnZSgpCit7CisgICAgZnByaW50ZihzdGRvdXQsICJVc2FnZTogenVudGllIFst dV0ge3RpZWQtdmFyaWFibGUtbmFtZX0gW3RpZWQtdmFyaWFibGUtbmFtZV0gLi4uXG4iKTsKKyAg ICBmcHJpbnRmKHN0ZG91dCwgIk9wdGlvbnM6XG4iKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiAt dTogQWxsb3cgdG8gdW50aWUgcmVhZC1vbmx5IHBhcmFtZXRlclxuIik7CisgICAgZnByaW50Zihz dGRvdXQsICJEZXNjcmlwdGlvbjogZGV0YWNoZXMgdmFyaWFibGUgZnJvbSBpdHMgZGF0YWJhc2Ug YW5kIHJlbW92ZXMgdGhlIHZhcmlhYmxlO1xuIik7CisgICAgZnByaW50ZihzdGRvdXQsICIgICAg ICAgICAgICAgZGF0YWJhc2UgaXMgbm90IGNsZWFyZWQgKHVubGlrZSB3aGVuIHVuc2V0KVxuIik7 CisgICAgZmZsdXNoKHN0ZG91dCk7Cit9CisvKiB9fX0gKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL01v ZHVsZXMvZGIuaCBiL1NyYy9Nb2R1bGVzL2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZWIxMTgzZAotLS0gL2Rldi9udWxsCisrKyBiL1NyYy9Nb2R1bGVzL2RiLmgKQEAg LTAsMCArMSwyOSBAQAorLyoKKyAqIGRiLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU2Vi YXN0aWFuIEduaWF6ZG93c2tpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdp dGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwg YW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZp ZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCisgKiB0 d28gcGFyYWdyYXBocyBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICov CisKKy8qIEJhY2tlbmQgY29tbWFuZHMgKi8KKyNkZWZpbmUgREJfVElFIDEKKyNkZWZpbmUgREJf VU5USUUgMgorI2RlZmluZSBEQl9JU19USUVEIDMKKyNkZWZpbmUgREJfR0VUX0FERFJFU1MgNAor I2RlZmluZSBEQl9DTEVBUl9DQUNIRSA1CisKKy8qIERhdGEgdHlwZXMsIGNyZWF0ZWQgYWNjb3Jk aW5nIHRvIHJlZGlzICovCisjZGVmaW5lIERCX0tFWV9UWVBFX05PTkUgMCAgLyogdW5rbm93biB0 eXBlIGJlY2F1c2Ugbm9uLWV4aXN0ZW50IGtleSAqLworI2RlZmluZSBEQl9LRVlfVFlQRV9VTktO T1dOIDEKKyNkZWZpbmUgREJfS0VZX1RZUEVfTk9fS0VZIDIKKyNkZWZpbmUgREJfS0VZX1RZUEVf U1RSSU5HIDMKKyNkZWZpbmUgREJfS0VZX1RZUEVfTElTVCA0CisjZGVmaW5lIERCX0tFWV9UWVBF X1NFVCA1CisjZGVmaW5lIERCX0tFWV9UWVBFX1pTRVQgNgorI2RlZmluZSBEQl9LRVlfVFlQRV9I QVNIIDcKZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiLm1kZCBiL1NyYy9Nb2R1bGVzL2RiLm1k ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2FjODNkCi0tLSAvZGV2L251 bGwKKysrIGIvU3JjL01vZHVsZXMvZGIubWRkCkBAIC0wLDAgKzEsNyBAQAorbmFtZT16c2gvZGIK K2xpbms9ZHluYW1pYworbG9hZD1ubworCithdXRvZmVhdHVyZXM9ImI6enRpZSBiOnp1bnRpZSBi Onp0YWRkcmVzcyBiOnp0Y2xlYXIiCisKK29iamVjdHM9ImRiLm8iCmRpZmYgLS1naXQgYS9TcmMv TW9kdWxlcy9kYl9nZGJtLmMgYi9TcmMvTW9kdWxlcy9kYl9nZGJtLmMKaW5kZXggMGFiMGZlNy4u NTk0OWU4MCAxMDA2NDQKLS0tIGEvU3JjL01vZHVsZXMvZGJfZ2RibS5jCisrKyBiL1NyYy9Nb2R1 bGVzL2RiX2dkYm0uYwpAQCAtMSwzICsxLDcgQEAKKy8qIC0qLSBNb2RlOiBDOyBjLWRlZmF1bHQt c3R5bGU6ICJsaW51eCI7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwg LSotCisgKiB2aW06c3c9NDpzdHM9NDpldAorICovCisKIC8qCiAgKiBkYl9nZGJtLmMgLSBiaW5k aW5ncyBmb3IgZ2RibQogICoKQEAgLTMzLDE2ICszNywyMSBAQAogCiAjaW5jbHVkZSAiZGJfZ2Ri bS5tZGgiCiAjaW5jbHVkZSAiZGJfZ2RibS5wcm8iCisjaW5jbHVkZSAiZGIuZXBybyIKKyNpbmNs dWRlICJkYi5oIgogCisvKiBNQUNST1Mge3t7ICovCiAjaWZuZGVmIFBNX1VQVE9EQVRFCiAjZGVm aW5lIFBNX1VQVE9EQVRFICAgICAoMTw8MTkpIC8qIFBhcmFtZXRlciBoYXMgdXAtdG8tZGF0ZSBk YXRhIChlLmcuIGxvYWRlZCBmcm9tIERCKSAqLwogI2VuZGlmCi0KKy8qIH19fSAqLworLyogREVD TEFSQVRJT05TIHt7eyAqLwogc3RhdGljIFBhcmFtIGNyZWF0ZWhhc2goIGNoYXIgKm5hbWUsIGlu dCBmbGFncyApOwotc3RhdGljIGludCBhcHBlbmRfdGllZF9uYW1lKCBjb25zdCBjaGFyICpuYW1l ICk7Ci1zdGF0aWMgaW50IHJlbW92ZV90aWVkX25hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKTsKLXN0 YXRpYyBjaGFyICp1bm1ldGFmeV96YWxsb2MoY29uc3QgY2hhciAqdG9fY29weSwgaW50ICpuZXdf bGVuKTsKLXN0YXRpYyB2b2lkIHNldF9sZW5ndGgoY2hhciAqYnVmLCBpbnQgc2l6ZSk7CitzdGF0 aWMgaW50IGlzX3RpZWRfY21kKGNoYXIgKnBtbmFtZSk7CitzdGF0aWMgaW50IGlzX3RpZWQoUGFy YW0gcG0pOworCitzdGF0aWMgaW50IG5vX2RhdGFiYXNlX2FjdGlvbiA9IDA7CisvKiB9fX0gKi8K IAogLyoKICAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgYml0cyBJJ20gdXNpbmcgZm9yIG1l bW9yeSBtYXBwaW5nLCBvdGhlcndpc2UKQEAgLTUyLDcgKzYxLDcgQEAgc3RhdGljIHZvaWQgc2V0 X2xlbmd0aChjaGFyICpidWYsIGludCBzaXplKTsKIAogI2luY2x1ZGUgPGdkYm0uaD4KIAotc3Rh dGljIGNoYXIgKmJhY2t0eXBlID0gImRiL2dkYm0iOworLyogQVJSQVk6IEdTVSB7e3sgKi8KIAog LyoKICAqIExvbmdlciBHU1Ugc3RydWN0dXJlLCB0byBjYXJyeSBHREJNX0ZJTEUgb2Ygb3duaW5n CkBAIC03MiwyNSArODEsMjYgQEAgc3RhdGljIGNoYXIgKmJhY2t0eXBlID0gImRiL2dkYm0iOwog ICovCiAKIHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCB7Ci0gICAgc3RydWN0IGdzdV9zY2FsYXIgc3Rk OwotICAgIEdEQk1fRklMRSBkYmY7CisgICAgc3RydWN0IGdzdV9zY2FsYXIgc3RkOyAvKiBTaXpl IG9mIHRocmVlIHBvaW50ZXJzICovCisgICAgaW50IHR5cGU7CisgICAgaW50IHVzZV9jYWNoZTsK KyAgICBpbnQgaXNfbGF6eTsKICAgICBjaGFyICpkYmZpbGVfcGF0aDsKKyAgICBjaGFyICprZXk7 CisgICAgc2l6ZV90IGtleV9sZW47CisgICAgY2hhciAqcGFzc3dvcmQ7CisgICAgaW50IGZkZXNj OworICAgIEdEQk1fRklMRSBkYmY7IC8qIGEgcG9pbnRlciAqLwogfTsKIAogLyogU291cmNlIHN0 cnVjdHVyZSAtIHdpbGwgYmUgY29waWVkIHRvIGFsbG9jYXRlZCBvbmUsCiAgKiB3aXRoIGBkYmZg IGZpbGxlZC4gYGRiZmAgYWxsb2NhdGlvbiA8LT4gZ3N1IGFsbG9jYXRpb24uICovCiBzdGF0aWMg Y29uc3Qgc3RydWN0IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9Ci17IHsgZ2RibWdldGZu LCBnZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAsIDAgfTsKKyAgICB7IHsgZ2RibWdldGZuLCBn ZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAsIDAgfTsKIAogLyoqLwogc3RhdGljIGNvbnN0IHN0 cnVjdCBnc3VfaGFzaCBnZGJtX2hhc2hfZ3N1ID0KLXsgaGFzaGdldGZuLCBnZGJtaGFzaHNldGZu LCBnZGJtaGFzaHVuc2V0Zm4gfTsKLQotc3RhdGljIHN0cnVjdCBidWlsdGluIGJpbnRhYltdID0g ewotICAgIEJVSUxUSU4oInp0aWUiLCAwLCBiaW5fenRpZSwgMSwgLTEsIDAsICJkOmY6ciIsIE5V TEwpLAotICAgIEJVSUxUSU4oInp1bnRpZSIsIDAsIGJpbl96dW50aWUsIDEsIC0xLCAwLCAidSIs IE5VTEwpLAotICAgIEJVSUxUSU4oInpnZGJtcGF0aCIsIDAsIGJpbl96Z2RibXBhdGgsIDEsIC0x LCAwLCAiIiwgTlVMTCksCi19OworICAgIHsgaGFzaGdldGZuLCBnZGJtaGFzaHNldGZuLCBnZGJt aGFzaHVuc2V0Zm4gfTsKIAogI2RlZmluZSBST0FSUlBBUkFNREVGKG5hbWUsIHZhcikgXAogICAg IHsgbmFtZSwgUE1fQVJSQVkgfCBQTV9SRUFET05MWSwgKHZvaWQgKikgdmFyLCBOVUxMLCAgTlVM TCwgTlVMTCwgTlVMTCB9CkBAIC05OCwxNTcgKzEwOCwyNDEgQEAgc3RhdGljIHN0cnVjdCBidWls dGluIGJpbnRhYltdID0gewogLyogSG9sZHMgbmFtZXMgb2YgYWxsIHRpZWQgcGFyYW1ldGVycyAq LwogY2hhciAqKnpnZGJtX3RpZWQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFyYW1kZWYgcGF0YWJbXSA9 IHsKLSAgICBST0FSUlBBUkFNREVGKCAiemdkYm1fdGllZCIsICZ6Z2RibV90aWVkICksCi19Owor c3RhdGljIHN0cnVjdCBwYXJhbWRlZiBwYXRhYltdID0KKyAgICB7IFJPQVJSUEFSQU1ERUYoICJ6 Z2RibV90aWVkIiwgJnpnZGJtX3RpZWQgKSwgfTsKKy8qIH19fSAqLworCisvKiBGVU5DVElPTjog Z2RibV9tYWluX2VudHJ5IHt7eyAqLworc3RhdGljIGludAorZ2RibV9tYWluX2VudHJ5KFZBX0FM SVNUMShpbnQgY21kKSkKKyAgICBWQV9EQ0wKK3sKKyAgICBjaGFyICphZGRyZXNzID0gTlVMTCwg KnBhc3MgPSBOVUxMLCAqcGZpbGUgPSBOVUxMLCAqcG1uYW1lID0gTlVMTCwgKmtleSA9IE5VTEws ICpsYXp5ID0gTlVMTDsKKyAgICBpbnQgcmRvbmx5ID0gMCwgemNhY2hlID0gMCwgcHByb21wdCA9 IDAsIHJvdW50aWUgPSAwOworCisgICAgdmFfbGlzdCBhcDsKKyAgICBWQV9ERUZfQVJHKGludCBj bWQpOworCisgICAgVkFfU1RBUlQoYXAsIGNtZCk7CisgICAgVkFfR0VUX0FSRyhhcCwgY21kLCBp bnQpOworCisgICAgc3dpdGNoIChjbWQpIHsKKyAgICBjYXNlIERCX1RJRToKKyAgICAgICAgLyog T3JkZXIgaXM6CisgICAgICAgICAqIC1hL2YgYWRkcmVzcywgY2hhciAqCisgICAgICAgICAqIC1y IHJlYWQtb25seSwgaW50CisgICAgICAgICAqIC16IHplcm8tY2FjaGUsIGludAorICAgICAgICAg KiAtcCBwYXNzd29yZCwgY2hhciAqCisgICAgICAgICAqIC1QIGZpbGUgd2l0aCBwYXNzd29yZCwg Y2hhciAqCisgICAgICAgICAqIC1sIHByb21wdCBmb3IgcGFzc3dvcmQsIGludAorICAgICAgICAg KiAtTCBsYXp5IGJpbmRpbmcgdHlwZSwgY2hhciAqCisgICAgICAgICAqIHBhcmFtZXRlciBuYW1l LCBjaGFyICoKKyAgICAgICAgICovCisgICAgICAgIGFkZHJlc3MgPSB2YV9hcmcoYXAsIGNoYXIg Kik7CisgICAgICAgIHJkb25seSA9IHZhX2FyZyhhcCwgaW50KTsKKyAgICAgICAgemNhY2hlID0g dmFfYXJnKGFwLCBpbnQpOworICAgICAgICBwYXNzID0gdmFfYXJnKGFwLCBjaGFyICopOworICAg ICAgICBwZmlsZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKyAgICAgICAgcHByb21wdCA9IHZhX2Fy ZyhhcCwgaW50KTsKKyAgICAgICAgcG1uYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworICAgICAg ICBsYXp5ID0gdmFfYXJnKGFwLCBjaGFyICopOworICAgICAgICByZXR1cm4gemd0aWVfY21kKGFk ZHJlc3MsIHJkb25seSwgemNhY2hlLCBwYXNzLCBwZmlsZSwgcHByb21wdCwgcG1uYW1lLCBsYXp5 KTsKKworICAgIGNhc2UgREJfVU5USUU6CisgICAgICAgIC8qIE9yZGVyIGlzOgorICAgICAgICAg KiAtdSB1bnRpZSByZWFkIG9ubHkgcGFyYW1ldGVyLCBpbnQKKyAgICAgICAgICogcGFyYW1ldGVy IG5hbWUsIGNoYXIgKgorICAgICAgICAgKi8KKyAgICAgICAgcm91bnRpZSA9IHZhX2FyZyhhcCwg aW50KTsKKyAgICAgICAgcG1uYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworICAgICAgICBjaGFy ICphcmd2WzJdOworICAgICAgICBhcmd2WzBdID0gcG1uYW1lOworICAgICAgICBhcmd2WzFdID0g TlVMTDsKKyAgICAgICAgcmV0dXJuIHpndW50aWVfY21kKHJvdW50aWUsIGFyZ3YpOworCisgICAg Y2FzZSBEQl9JU19USUVEOgorICAgICAgICAvKiBPcmRlciBpczoKKyAgICAgICAgICogcGFyYW1l dGVyIG5hbWUsIGNoYXIgKgorICAgICAgICAgKi8KKyAgICAgICAgcG1uYW1lID0gdmFfYXJnKGFw LCBjaGFyICopOworICAgICAgICByZXR1cm4gaXNfdGllZF9jbWQocG1uYW1lKTsKKworICAgIGNh c2UgREJfR0VUX0FERFJFU1M6CisgICAgICAgIC8qIE9yZGVyIGlzOgorICAgICAgICAgKiBQYXJh bWV0ZXIgbmFtZSwgY2hhciAqCisgICAgICAgICAqLworICAgICAgICBwbW5hbWUgPSB2YV9hcmco YXAsIGNoYXIqKTsKKyAgICAgICAgcmV0dXJuIGdkYm1wYXRoX2NtZChwbW5hbWUpOworCisgICAg Y2FzZSBEQl9DTEVBUl9DQUNIRToKKyAgICAgICAgLyogT3JkZXIgaXM6CisgICAgICAgICAqIFBh cmFtZXRlciBuYW1lLCBjaGFyICoKKyAgICAgICAgICoga2V5IG5hbWUsIGNoYXIgKgorICAgICAg ICAgKi8KKyAgICAgICAgcG1uYW1lID0gdmFfYXJnKGFwLCBjaGFyKik7CisgICAgICAgIGtleSA9 IHZhX2FyZyhhcCwgY2hhciopOworICAgICAgICByZXR1cm4gZ2RibWNsZWFyX2NtZChwbW5hbWUs IGtleSk7CisKKyAgICBkZWZhdWx0OgorI2lmZGVmIERFQlVHCisgICAgICAgIGRwdXRzKCJCYWQg Y29tbWFuZCAlZCBpbiByZWRpc19tYWluX2VudHJ5IiwgY21kKTsKKyNlbmRpZgorICAgICAgICBi cmVhazsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiB6 Z3RpZV9jbWQge3t7ICovCiAKIC8qKi8KIHN0YXRpYyBpbnQKLWJpbl96dGllKGNoYXIgKm5hbSwg Y2hhciAqKmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQoremd0aWVfY21kKGNo YXIgKmFkZHJlc3MsIGludCByZG9ubHksIGludCB6Y2FjaGUsIGNoYXIgKnBhc3MsIGNoYXIgKnBm aWxlLCBpbnQgcHByb21wdCwgY2hhciAqcG1uYW1lLCBjaGFyICpsYXp5KQogewotICAgIGNoYXIg KnJlc291cmNlX25hbWUsICpwbW5hbWU7CiAgICAgR0RCTV9GSUxFIGRiZiA9IE5VTEw7CiAgICAg aW50IHJlYWRfd3JpdGUgPSBHREJNX1NZTkMsIHBtZmxhZ3MgPSBQTV9SRU1PVkFCTEU7CiAgICAg UGFyYW0gdGllZF9wYXJhbTsKIAotICAgIGlmKCFPUFRfSVNTRVQob3BzLCdkJykpIHsKLSAgICAg ICAgendhcm5uYW0obmFtLCAieW91IG11c3QgcGFzcyBgLWQgJXMnIiwgYmFja3R5cGUpOwotCXJl dHVybiAxOwotICAgIH0KLSAgICBpZighT1BUX0lTU0VUKG9wcywnZicpKSB7Ci0gICAgICAgIHp3 YXJubmFtKG5hbSwgInlvdSBtdXN0IHBhc3MgYC1mJyB3aXRoIGEgZmlsZW5hbWUiLCBOVUxMKTsK LQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYgKE9QVF9JU1NFVChvcHMsJ3InKSkgewotCXJlYWRf d3JpdGUgfD0gR0RCTV9SRUFERVI7Ci0JcG1mbGFncyB8PSBQTV9SRUFET05MWTsKLSAgICB9IGVs c2UgewotCXJlYWRfd3JpdGUgfD0gR0RCTV9XUkNSRUFUOworICAgIGlmICghYWRkcmVzcykgewor ICAgICAgICB6d2FybigieW91IG11c3QgcGFzcyBgLWYnIG9yICctYScgcGF0aCB0byB0aGUgZGF0 YWJhc2UiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgLyogSGVyZSBz aG91bGQgYmUgYSBsb29rdXAgb2YgdGhlIGJhY2tlbmQgdHlwZSBhZ2FpbnN0Ci0gICAgICogYSBy ZWdpc3RyeSwgaWYgZ2VuZXJhbSBEQiBtZWNoYW5pc20gaXMgdG8gYmUgYWRkZWQgKi8KLSAgICBp ZiAoc3RyY21wKE9QVF9BUkcob3BzLCAnZCcpLCBiYWNrdHlwZSkgIT0gMCkgewotICAgICAgICB6 d2Fybm5hbShuYW0sICJ1bnN1cHBvcnRlZCBiYWNrZW5kIHR5cGUgYCVzJyIsIE9QVF9BUkcob3Bz LCAnZCcpKTsKLQlyZXR1cm4gMTsKKyAgICBpZiAoIXBtbmFtZSkgeworICAgICAgICB6d2Fybigi eW91IG11c3QgcGFzcyBub24tb3B0aW9uIGFyZ3VtZW50IC0gdGhlIHRhcmdldCBwYXJhbWV0ZXIg dG8gY3JlYXRlLCBzZWUgLWgiKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcmVz b3VyY2VfbmFtZSA9IE9QVF9BUkcob3BzLCAnZicpOwotICAgIHBtbmFtZSA9ICphcmdzOworICAg IGlmIChyZG9ubHkpIHsKKyAgICAgICAgcmVhZF93cml0ZSB8PSBHREJNX1JFQURFUjsKKyAgICAg ICAgcG1mbGFncyB8PSBQTV9SRUFET05MWTsKKyAgICB9IGVsc2UgeworICAgICAgICByZWFkX3dy aXRlIHw9IEdEQk1fV1JDUkVBVDsKKyAgICB9CiAKICAgICBpZiAoKHRpZWRfcGFyYW0gPSAoUGFy YW0pcGFyYW10YWItPmdldG5vZGUocGFyYW10YWIsIHBtbmFtZSkpICYmCi0JISh0aWVkX3BhcmFt LT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpKSB7Ci0JLyoKLQkgKiBVbnNldCBhbnkgZXhpc3Rpbmcg cGFyYW1ldGVyLiAgTm90ZSB0aGVyZSdzIG5vIGltcGxpY2l0Ci0JICogImxvY2FsIiBoZXJlLCBi dXQgaWYgdGhlIGV4aXN0aW5nIHBhcmFtZXRlciBpcyBsb2NhbAotCSAqIHRoZW4gbmV3IHBhcmFt ZXRlciB3aWxsIGJlIGFsc28gbG9jYWwgd2l0aG91dCBmb2xsb3dpbmcKKyAgICAgICAgISh0aWVk X3BhcmFtLT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpKSB7CisgICAgICAgIC8qCisgICAgICAgICAq IFVuc2V0IGFueSBleGlzdGluZyBwYXJhbWV0ZXIuICBOb3RlIHRoZXJlJ3Mgbm8gaW1wbGljaXQK KyAgICAgICAgICogImxvY2FsIiBoZXJlLCBidXQgaWYgdGhlIGV4aXN0aW5nIHBhcmFtZXRlciBp cyBsb2NhbAorICAgICAgICAgKiB0aGVuIG5ldyBwYXJhbWV0ZXIgd2lsbCBiZSBhbHNvIGxvY2Fs IHdpdGhvdXQgZm9sbG93aW5nCiAgICAgICAgICAqIHVuc2V0LgotCSAqCi0JICogV2UgbmVlZCB0 byBkbyB0aGlzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIERCCi0JICogaW4gY2FzZSB0 aGlzIHZhcmlhYmxlIGlzIGFscmVhZHkgdGllZCB0byBhIERCLgotCSAqCi0JICogVGhpcyBjYW4g ZmFpbCBpZiB0aGUgdmFyaWFibGUgaXMgcmVhZG9ubHkgb3IgcmVzdHJpY3RlZC4KLQkgKiBXZSBj b3VsZCBjYWxsIHVuc2V0cGFyYW0oKSBhbmQgY2hlY2sgZXJyZmxhZyBpbnN0ZWFkCi0JICogb2Yg dGhlIHJldHVybiBzdGF0dXMuCi0JICovCi0JaWYgKHVuc2V0cGFyYW1fcG0odGllZF9wYXJhbSwg MCwgMSkpCi0JICAgIHJldHVybiAxOworICAgICAgICAgKgorICAgICAgICAgKiBXZSBuZWVkIHRv IGRvIHRoaXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgREIKKyAgICAgICAgICogaW4g Y2FzZSB0aGlzIHZhcmlhYmxlIGlzIGFscmVhZHkgdGllZCB0byBhIERCLgorICAgICAgICAgKgor ICAgICAgICAgKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSB2YXJpYWJsZSBpcyByZWFkb25seSBvciBy ZXN0cmljdGVkLgorICAgICAgICAgKiBXZSBjb3VsZCBjYWxsIHVuc2V0cGFyYW0oKSBhbmQgY2hl Y2sgZXJyZmxhZyBpbnN0ZWFkCisgICAgICAgICAqIG9mIHRoZSByZXR1cm4gc3RhdHVzLgorICAg ICAgICAgKi8KKyAgICAgICAgaWYgKHVuc2V0cGFyYW1fcG0odGllZF9wYXJhbSwgMCwgMSkpCisg ICAgICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICBnZGJtX2Vycm5vPTA7Ci0gICAgZGJm ID0gZ2RibV9vcGVuKHJlc291cmNlX25hbWUsIDAsIHJlYWRfd3JpdGUsIDA2NjYsIDApOworICAg IGRiZiA9IGdkYm1fb3BlbihhZGRyZXNzLCAwLCByZWFkX3dyaXRlLCAwNjY2LCAwKTsKICAgICBp ZihkYmYgPT0gTlVMTCkgewotCXp3YXJubmFtKG5hbSwgImVycm9yIG9wZW5pbmcgZGF0YWJhc2Ug ZmlsZSAlcyAoJXMpIiwgcmVzb3VyY2VfbmFtZSwgZ2RibV9zdHJlcnJvcihnZGJtX2Vycm5vKSk7 Ci0JcmV0dXJuIDE7CisgICAgICAgIHp3YXJuKCJlcnJvciBvcGVuaW5nIGRhdGFiYXNlIGZpbGUg JXMgKCVzKSIsIGFkZHJlc3MsIGdkYm1fc3RyZXJyb3IoZ2RibV9lcnJubykpOworICAgICAgICBy ZXR1cm4gMTsKICAgICB9CiAKICAgICBpZiAoISh0aWVkX3BhcmFtID0gY3JlYXRlaGFzaChwbW5h bWUsIHBtZmxhZ3MpKSkgewotICAgICAgICB6d2Fybm5hbShuYW0sICJjYW5ub3QgY3JlYXRlIHRo ZSByZXF1ZXN0ZWQgcGFyYW1ldGVyICVzIiwgcG1uYW1lKTsKLQlmZHRhYmxlW2dkYm1fZmRlc2Mo ZGJmKV0gPSBGRFRfVU5VU0VEOwotCWdkYm1fY2xvc2UoZGJmKTsKLQlyZXR1cm4gMTsKKyAgICAg ICAgendhcm4oImNhbm5vdCBjcmVhdGUgdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXIgJXMiLCBwbW5h bWUpOworICAgICAgICBnZGJtX2Nsb3NlKGRiZik7CisgICAgICAgIHJldHVybiAxOwogICAgIH0K IAotICAgIGFkZG1vZHVsZWZkKGdkYm1fZmRlc2MoZGJmKSwgRkRUX01PRFVMRSk7Ci0gICAgYXBw ZW5kX3RpZWRfbmFtZShwbW5hbWUpOwotCiAgICAgdGllZF9wYXJhbS0+Z3N1LmggPSAmZ2RibV9o YXNoX2dzdTsKIAotICAgIC8qIEFsbG9jYXRlIHBhcmFtZXRlciBzdWItZ3N1LCBmaWxsIGRiZiBm aWVsZC4gCisgICAgLyogQWxsb2NhdGUgcGFyYW1ldGVyIHN1Yi1nc3UsIGZpbGwgZGJmIGZpZWxk LgogICAgICAqIGRiZiBhbGxvY2F0aW9uIGlzIDEgdG8gMSBhY2NvbXBhbmllZCBieQogICAgICAq IGdzdV9zY2FsYXJfZXh0IGFsbG9jYXRpb24uICovCiAKLSAgICBzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKmRiZl9jYXJyaWVyID0gKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKSB6YWxsb2Moc2l6ZW9m KHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCkpOworICAgIHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqZGJm X2NhcnJpZXIgPSAoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopIHpzaGNhbGxvYyhzaXplb2Yoc3Ry dWN0IGdzdV9zY2FsYXJfZXh0KSk7CiAgICAgZGJmX2NhcnJpZXItPnN0ZCA9IGdkYm1fZ3N1X2V4 dC5zdGQ7CisgICAgZGJmX2NhcnJpZXItPnR5cGUgPSBEQl9LRVlfVFlQRV9OT19LRVk7CisgICAg ZGJmX2NhcnJpZXItPmZkZXNjID0gZ2RibV9mZGVzYyhkYmYpOwogICAgIGRiZl9jYXJyaWVyLT5k YmYgPSBkYmY7CisgICAgZGJmX2NhcnJpZXItPnVzZV9jYWNoZSA9IDE7CisgICAgaWYgKHpjYWNo ZSkgeworICAgICAgICBkYmZfY2Fycmllci0+dXNlX2NhY2hlID0gMDsKKyAgICB9CisgICAgaWYg KGxhenkpIHsKKyAgICAgICAgZGJmX2NhcnJpZXItPmlzX2xhenkgPSAxOworICAgIH0KICAgICB0 aWVkX3BhcmFtLT51Lmhhc2gtPnRtcGRhdGEgPSAodm9pZCAqKWRiZl9jYXJyaWVyOwogCiAgICAg LyogRmlsbCBhbHNvIGZpbGUgcGF0aCBmaWVsZCAqLwotICAgIGlmICgqcmVzb3VyY2VfbmFtZSAh PSAnLycpIHsKKyAgICBpZiAoKmFkZHJlc3MgIT0gJy8nKSB7CiAgICAgICAgIC8qIENvZGUgY29w aWVkIGZyb20gY2hlY2tfYXV0b2xvYWQoKSAqLwotICAgICAgICByZXNvdXJjZV9uYW1lID0gemh0 cmljYXQobWV0YWZ5KHpnZXRjd2QoKSwgLTEsIE1FVEFfSEVBUERVUCksICIvIiwgcmVzb3VyY2Vf bmFtZSk7Ci0gICAgICAgIHJlc291cmNlX25hbWUgPSB4c3ltbGluayhyZXNvdXJjZV9uYW1lLCAx KTsKKyAgICAgICAgYWRkcmVzcyA9IHpodHJpY2F0KG1ldGFmeSh6Z2V0Y3dkKCksIC0xLCBNRVRB X0hFQVBEVVApLCAiLyIsIGFkZHJlc3MpOworICAgICAgICBhZGRyZXNzID0geHN5bWxpbmsoYWRk cmVzcywgMSk7CiAgICAgfQotICAgIGRiZl9jYXJyaWVyLT5kYmZpbGVfcGF0aCA9IHp0cmR1cChy ZXNvdXJjZV9uYW1lKTsKKyAgICBkYmZfY2Fycmllci0+ZGJmaWxlX3BhdGggPSB6dHJkdXAoYWRk cmVzcyk7CisKKyAgICBhZGRtb2R1bGVmZChkYmZfY2Fycmllci0+ZmRlc2MsIEZEVF9JTlRFUk5B TCk7CisgICAgenNoX2RiX2Fycl9hcHBlbmQoJnpnZGJtX3RpZWQsIHBtbmFtZSk7CisKICAgICBy ZXR1cm4gMDsKIH0KKy8qIH19fSAqLworLyogRlVOQ1RJT046IHpndW50aWVfY21kIHt7eyAqLwog CiAvKiovCiBzdGF0aWMgaW50Ci1iaW5fenVudGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9w dGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQoremd1bnRpZV9jbWQoaW50IHJvdW50aWUsIGNo YXIgKiphcmdzKQogewogICAgIFBhcmFtIHBtOwogICAgIGNoYXIgKnBtbmFtZTsKICAgICBpbnQg cmV0ID0gMDsKIAogICAgIGZvciAocG1uYW1lID0gKmFyZ3M7ICphcmdzKys7IHBtbmFtZSA9ICph cmdzKSB7Ci0JcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5nZXRub2RlKHBhcmFtdGFiLCBwbW5hbWUp OwotCWlmKCFwbSkgewotCSAgICB6d2Fybm5hbShuYW0sICJjYW5ub3QgdW50aWUgJXMiLCBwbW5h bWUpOwotCSAgICByZXQgPSAxOwotCSAgICBjb250aW51ZTsKLQl9Ci0JaWYgKHBtLT5nc3UuaCAh PSAmZ2RibV9oYXNoX2dzdSkgewotCSAgICB6d2Fybm5hbShuYW0sICJub3QgYSB0aWVkIGdkYm0g aGFzaDogJXMiLCBwbW5hbWUpOwotCSAgICByZXQgPSAxOwotCSAgICBjb250aW51ZTsKLQl9Ci0K LQlxdWV1ZV9zaWduYWxzKCk7Ci0JaWYgKE9QVF9JU1NFVChvcHMsJ3UnKSkKLQkgICAgZ2RibXVu dGllKHBtKTsJLyogY2xlYXIgcmVhZC1vbmx5LW5lc3MgKi8KLQlpZiAodW5zZXRwYXJhbV9wbShw bSwgMCwgMSkpIHsKLQkgICAgLyogYXNzdW1lIGFscmVhZHkgcmVwb3J0ZWQgKi8KLQkgICAgcmV0 ID0gMTsKLQl9Ci0JdW5xdWV1ZV9zaWduYWxzKCk7CisgICAgICAgIHBtID0gKFBhcmFtKSBwYXJh bXRhYi0+Z2V0bm9kZShwYXJhbXRhYiwgcG1uYW1lKTsKKyAgICAgICAgaWYoIXBtKSB7CisgICAg ICAgICAgICB6d2FybigiY2Fubm90IHVudGllICVzIiwgcG1uYW1lKTsKKyAgICAgICAgICAgIHJl dCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG0t PmdzdS5oICE9ICZnZGJtX2hhc2hfZ3N1KSB7CisgICAgICAgICAgICB6d2Fybigibm90IGEgdGll ZCBnZGJtIGhhc2g6ICVzIiwgcG1uYW1lKTsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKKyAg ICAgICAgaWYgKHJvdW50aWUpIHsKKyAgICAgICAgICAgIHBtLT5ub2RlLmZsYWdzICY9IH5QTV9S RUFET05MWTsKKyAgICAgICAgfQorICAgICAgICBpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkp IHsKKyAgICAgICAgICAgIC8qIGFzc3VtZSBhbHJlYWR5IHJlcG9ydGVkICovCisgICAgICAgICAg ICByZXQgPSAxOworICAgICAgICB9CisgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICAgIH0K IAogICAgIHJldHVybiByZXQ7CiB9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiBnZGJtcGF0aF9j bWR7e3sgKi8KIAogLyoqLwogc3RhdGljIGludAotYmluX3pnZGJtcGF0aChjaGFyICpuYW0sIGNo YXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkKK2dkYm1wYXRoX2NtZChj aGFyICpwbW5hbWUpCiB7CiAgICAgUGFyYW0gcG07Ci0gICAgY2hhciAqcG1uYW1lOwotCi0gICAg cG1uYW1lID0gKmFyZ3M7CiAKICAgICBpZiAoIXBtbmFtZSkgewotICAgICAgICB6d2Fybm5hbShu YW0sICJwYXJhbWV0ZXIgbmFtZSAod2hvc2UgcGF0aCBpcyB0byBiZSB3cml0dGVuIHRvICRSRVBM WSkgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgendhcm4oInBhcmFtZXRlciBuYW1lICh3aG9zZSBw YXRoIGlzIHRvIGJlIHdyaXR0ZW4gdG8gJFJFUExZKSBub3QgZ2l2ZW4iKTsKICAgICAgICAgcmV0 dXJuIDE7CiAgICAgfQogCiAgICAgcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5nZXRub2RlKHBhcmFt dGFiLCBwbW5hbWUpOwogICAgIGlmKCFwbSkgewotICAgICAgICB6d2Fybm5hbShuYW0sICJubyBz dWNoIHBhcmFtZXRlcjogJXMiLCBwbW5hbWUpOworICAgICAgICB6d2Fybigibm8gc3VjaCBwYXJh bWV0ZXI6ICVzIiwgcG1uYW1lKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgaWYg KHBtLT5nc3UuaCAhPSAmZ2RibV9oYXNoX2dzdSkgewotICAgICAgICB6d2Fybm5hbShuYW0sICJu b3QgYSB0aWVkIGdkYm0gcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7CisgICAgICAgIHp3YXJuKCJu b3QgYSB0aWVkIGdkYm0gcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7CiAgICAgICAgIHJldHVybiAx OwogICAgIH0KIApAQCAtMjYxLDYgKzM1NSw0NiBAQCBiaW5femdkYm1wYXRoKGNoYXIgKm5hbSwg Y2hhciAqKmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogCiAgICAgcmV0dXJu IDA7CiB9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiBiaW5femdkYm1jbGVhciB7e3sgKi8KKwor LyoqLworc3RhdGljIGludAorZ2RibWNsZWFyX2NtZChjaGFyICpwbW5hbWUsIGNoYXIgKmtleSkK K3sKKyAgICBQYXJhbSBwbTsKKworICAgIGlmICghcG1uYW1lKSB7CisgICAgICAgIHp3YXJuKCJw YXJhbWV0ZXIgbmFtZSAod2hvc2UgcmVhZC1jYWNoZSBpcyB0byBiZSBjbGVhcmVkKSBpcyByZXF1 aXJlZCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKCFrZXkpIHsKKyAgICAg ICAgendhcm4oImhhc2gta2V5ICh3aG9zZSByZWFkLWNhY2hlIGlzIHRvIGJlIGNsZWFyZWQpIGlz IHJlcXVpcmVkIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHBtID0gKFBhcmFt KSBwYXJhbXRhYi0+Z2V0bm9kZShwYXJhbXRhYiwgcG1uYW1lKTsKKyAgICBpZighcG0pIHsKKyAg ICAgICAgendhcm5uYW0oIm5vIHN1Y2ggcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7CisgICAgICAg IHJldHVybiAxOworICAgIH0KKworICAgIGlmIChwbS0+Z3N1LmggIT0gJmdkYm1faGFzaF9nc3Up IHsKKyAgICAgICAgendhcm5uYW0oIm5vdCBhIHRpZWQgZ2RibSBwYXJhbWV0ZXI6ICVzIiwgcG1u YW1lKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgSGFzaFRhYmxlIGh0ID0gcG0t PnUuaGFzaDsKKyAgICBIYXNoTm9kZSBobiA9IGdldGhhc2hub2RlMiggaHQsIGtleSApOworICAg IFBhcmFtIHZhbF9wbSA9IChQYXJhbSkgaG47CisgICAgaWYgKHZhbF9wbSkgeworICAgICAgICB2 YWxfcG0tPm5vZGUuZmxhZ3MgJj0gfihQTV9VUFRPREFURSk7CisgICAgfQorCisgICAgcmV0dXJu IDA7Cit9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiBnZGJtZ2V0Zm4ge3t7ICovCiAKIC8qCiAg KiBUaGUgcGFyYW0gaXMgYWN0dWFsIHBhcmFtIGluIGhhc2gg4oCTwqBhbHdheXMsIGJlY2F1c2UK QEAgLTI2OSw5ICs0MDMsNyBAQCBiaW5femdkYm1wYXRoKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3Ms IE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogICogd2Fzbid0IHlldCBxdWVyaWVkLgog ICoKICAqIEl0IHdpbGwgYmUgbGVmdCBpbiB0aGlzIHN0YXRlIGlmIGRhdGFiYXNlIGRvZXNuJ3QK LSAqIGNvbnRhaW4gc3VjaCBrZXkuIFRoYXQgbWlnaHQgYmUgYSBkcmF3YmFjaywgbWF5YmUKLSAq IHNldHRpbmcgdG8gZW1wdHkgdmFsdWUgaGFzIHNlbnNlLCBhcyBubyBvdGhlciB3cml0ZXIKLSAq IGNhbiBleGlzdC4gVGhpcyB3b3VsZCByZW1vdmUgc3VidGxlIGhjYWxsb2MoMSkgbGVhay4KKyAq IGNvbnRhaW4gc3VjaCBrZXkuCiAgKi8KIAogLyoqLwpAQCAtMjkxLDE0ICs0MjMsMTQgQEAgZ2Ri bWdldGZuKFBhcmFtIHBtKQogICAgICAqIC0gaWYgd2UgYXJlIHdyaXRlcnMsIHdlIGZvciBzdXJl IGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQogICAgICAqIC0gaWYgd2UgYXJlIHJlYWRlcnMsIHdl IGZvciBzdXJlIGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQogICAgICAqLwotICAgIGlmICggcG0t Pm5vZGUuZmxhZ3MgJiBQTV9VUFRPREFURSApIHsKLSAgICAgICAgcmV0dXJuIHBtLT51LnN0ciA/ IHBtLT51LnN0ciA6IChjaGFyICopIGhjYWxsb2MoMSk7CisgICAgaWYgKChwbS0+bm9kZS5mbGFn cyAmIFBNX1VQVE9EQVRFKSAmJiAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT5nc3Uucykt PnVzZV9jYWNoZSkgeworICAgICAgICByZXR1cm4gcG0tPnUuc3RyID8gcG0tPnUuc3RyIDogIiI7 CiAgICAgfQogCiAgICAgLyogVW5tZXRhZnkga2V5LiBHREJNIGZpdHMgbmljZSBpbnRvIHRoaXMK ICAgICAgKiBwcm9jZXNzLCBhcyBpdCB1c2VzIGxlbmd0aCBvZiBkYXRhICovCiAgICAgaW50IHVt bGVuID0gMDsKLSAgICBjaGFyICp1bWtleSA9IHVubWV0YWZ5X3phbGxvYyhwbS0+bm9kZS5uYW0s JnVtbGVuKTsKKyAgICBjaGFyICp1bWtleSA9IHpzaF9kYl91bm1ldGFmeV96YWxsb2MocG0tPm5v ZGUubmFtLCZ1bWxlbik7CiAKICAgICBrZXkuZHB0ciA9IHVta2V5OwogICAgIGtleS5kc2l6ZSA9 IHVtbGVuOwpAQCAtMzE5LDkgKzQ1MSwxMSBAQCBnZGJtZ2V0Zm4oUGFyYW0gcG0pCiAgICAgICAg IC8qIE1ldGFmeSByZXR1cm5lZCBkYXRhLiBBbGwgZml0cyAtIG1ldGFmeQogICAgICAgICAgKiBj YW4gb2J0YWluIGRhdGEgbGVuZ3RoIHRvIGF2b2lkIHVzaW5nIFwwICovCiAgICAgICAgIHBtLT51 LnN0ciA9IG1ldGFmeShjb250ZW50LmRwdHIsIGNvbnRlbnQuZHNpemUsIE1FVEFfRFVQKTsKKyAg ICAgICAgLyogZ2RibSBhbGxvY2F0ZXMgd2l0aCBtYWxsb2MgKi8KKyAgICAgICAgZnJlZShjb250 ZW50LmRwdHIpOwogCiAgICAgICAgIC8qIEZyZWUga2V5LCByZXN0b3JpbmcgaXRzIG9yaWdpbmFs IGxlbmd0aCAqLwotICAgICAgICBzZXRfbGVuZ3RoKHVta2V5LCB1bWxlbik7CisgICAgICAgIHpz aF9kYl9zZXRfbGVuZ3RoKHVta2V5LCB1bWxlbik7CiAgICAgICAgIHpzZnJlZSh1bWtleSk7CiAK ICAgICAgICAgLyogQ2FuIHJldHVybiBwb2ludGVyLCBjb3JyZWN0bHkgc2F2ZWQgaW5zaWRlIGhh c2ggKi8KQEAgLTMyOSwxMiArNDYzLDEzIEBAIGdkYm1nZXRmbihQYXJhbSBwbSkKICAgICB9CiAK ICAgICAvKiBGcmVlIGtleSwgcmVzdG9yaW5nIGl0cyBvcmlnaW5hbCBsZW5ndGggKi8KLSAgICBz ZXRfbGVuZ3RoKHVta2V5LCB1bWxlbik7CisgICAgenNoX2RiX3NldF9sZW5ndGgodW1rZXksIHVt bGVuKTsKICAgICB6c2ZyZWUodW1rZXkpOwogCi0gICAgLyogQ2FuIHRoaXMgYmUgIiIgPyAqLwot ICAgIHJldHVybiAoY2hhciAqKSBoY2FsbG9jKDEpOworICAgIHJldHVybiAiIjsKIH0KKy8qIH19 fSAqLworLyogRlVOQ1RJT046IGdkYm1zZXRmbiB7e3sgKi8KIAogLyoqLwogc3RhdGljIHZvaWQK QEAgLTM2MSwxNiArNDk2LDE2IEBAIGdkYm1zZXRmbihQYXJhbSBwbSwgY2hhciAqdmFsKQogCiAg ICAgLyogRGF0YWJhc2UgKi8KICAgICBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBt LT5nc3UucyktPmRiZjsKLSAgICBpZiAoZGJmKSB7CisgICAgaWYgKGRiZiAmJiBub19kYXRhYmFz ZV9hY3Rpb24gPT0gMCkgewogICAgICAgICBpbnQgdW1sZW4gPSAwOwotICAgICAgICBjaGFyICp1 bWtleSA9IHVubWV0YWZ5X3phbGxvYyhwbS0+bm9kZS5uYW0sJnVtbGVuKTsKKyAgICAgICAgY2hh ciAqdW1rZXkgPSB6c2hfZGJfdW5tZXRhZnlfemFsbG9jKHBtLT5ub2RlLm5hbSwmdW1sZW4pOwog CiAgICAgICAgIGtleS5kcHRyID0gdW1rZXk7CiAgICAgICAgIGtleS5kc2l6ZSA9IHVtbGVuOwog CiAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgIC8qIFVubWV0YWZ5IHdpdGggZXhhY3Qg emFsbG9jIHNpemUgKi8KLSAgICAgICAgICAgIGNoYXIgKnVtdmFsID0gdW5tZXRhZnlfemFsbG9j KHZhbCwmdW1sZW4pOworICAgICAgICAgICAgY2hhciAqdW12YWwgPSB6c2hfZGJfdW5tZXRhZnlf emFsbG9jKHZhbCwmdW1sZW4pOwogCiAgICAgICAgICAgICAvKiBTdG9yZSAqLwogICAgICAgICAg ICAgY29udGVudC5kcHRyID0gdW12YWw7CkBAIC0zNzgsMTggKzUxMywxOSBAQCBnZGJtc2V0Zm4o UGFyYW0gcG0sIGNoYXIgKnZhbCkKICAgICAgICAgICAgICh2b2lkKWdkYm1fc3RvcmUoZGJmLCBr ZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CiAKICAgICAgICAgICAgIC8qIEZyZWUgKi8KLSAg ICAgICAgICAgIHNldF9sZW5ndGgodW12YWwsIHVtbGVuKTsKKyAgICAgICAgICAgIHpzaF9kYl9z ZXRfbGVuZ3RoKHVtdmFsLCB1bWxlbik7CiAgICAgICAgICAgICB6c2ZyZWUodW12YWwpOwogICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICAgKHZvaWQpZ2RibV9kZWxldGUoZGJmLCBrZXkpOwog ICAgICAgICB9CiAKICAgICAgICAgLyogRnJlZSBrZXkgKi8KLSAgICAgICAgc2V0X2xlbmd0aCh1 bWtleSwga2V5LmRzaXplKTsKKyAgICAgICAgenNoX2RiX3NldF9sZW5ndGgodW1rZXksIGtleS5k c2l6ZSk7CiAgICAgICAgIHpzZnJlZSh1bWtleSk7CiAgICAgfQogfQotCisvKiB9fX0gKi8KKy8q IEZVTkNUSU9OOiBnZGJtdW5zZXRmbiB7e3sgKi8KIC8qKi8KIHN0YXRpYyB2b2lkCiBnZGJtdW5z ZXRmbihQYXJhbSBwbSwgVU5VU0VEKGludCB1bSkpCkBAIC0zOTcsNiArNTMzLDggQEAgZ2RibXVu c2V0Zm4oUGFyYW0gcG0sIFVOVVNFRChpbnQgdW0pKQogICAgIC8qIFNldCB3aXRoIE5VTEwgKi8K ICAgICBnZGJtc2V0Zm4ocG0sIE5VTEwpOwogfQorLyogfX19ICovCisvKiBGVU5DVElPTjogZ2V0 Z2RibW5vZGUge3t7ICovCiAKIC8qKi8KIHN0YXRpYyBIYXNoTm9kZQpAQCAtNDMyLDEyICs1NzAs MTQgQEAgZ2V0Z2RibW5vZGUoSGFzaFRhYmxlIGh0LCBjb25zdCBjaGFyICpuYW1lKQogCiAgICAg cmV0dXJuIChIYXNoTm9kZSkgdmFsX3BtOwogfQorLyogfX19ICovCisvKiBGVU5DVElPTjogc2Nh bmdkYm1rZXlzIHt7eyAqLwogCiAvKiovCiBzdGF0aWMgdm9pZAogc2NhbmdkYm1rZXlzKEhhc2hU YWJsZSBodCwgU2NhbkZ1bmMgZnVuYywgaW50IGZsYWdzKQogewotICAgIGRhdHVtIGtleTsKKyAg ICBkYXR1bSBrZXksIHByZXZfa2V5OwogICAgIEdEQk1fRklMRSBkYmYgPSAoKHN0cnVjdCBnc3Vf c2NhbGFyX2V4dCAqKWh0LT50bXBkYXRhKS0+ZGJmOwogCiAgICAgLyogSXRlcmF0ZSBrZXlzIGFk ZGluZyB0aGVtIHRvIGhhc2gsIHNvCkBAIC00NTIsMTQgKzU5MiwxOCBAQCBzY2FuZ2RibWtleXMo SGFzaFRhYmxlIGh0LCBTY2FuRnVuYyBmdW5jLCBpbnQgZmxhZ3MpCiAgICAgICAgIEhhc2hOb2Rl IGhuID0gZ2V0Z2RibW5vZGUoaHQsIHprZXkpOwogICAgICAgICB6c2ZyZWUoIHprZXkgKTsKIAot CWZ1bmMoaG4sIGZsYWdzKTsKKyAgICAgICAgZnVuYyhobiwgZmxhZ3MpOwogCiAgICAgICAgIC8q IEl0ZXJhdGUgLSBubyBwcm9ibGVtIGFzIGludGVyZmFjaW5nIFBhcmFtCiAgICAgICAgICAqIHdp bGwgZG8gYXQgbW9zdCBvbmx5IGZldGNoZXMsIG5vdCBzdG9yZXMgKi8KKyAgICAgICAgcHJldl9r ZXkgPSBrZXk7CiAgICAgICAgIGtleSA9IGdkYm1fbmV4dGtleShkYmYsIGtleSk7CisgICAgICAg IGZyZWUocHJldl9rZXkuZHB0cik7CiAgICAgfQogCiB9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9O OiBnZGJtaGFzaHNldGZuIHt7eyAqLwogCiAvKgogICogUmVwbGFjZSBkYXRhYmFzZSB3aXRoIG5l dyBoYXNoCkBAIC00NzUsODMgKzYxOSw5OSBAQCBnZGJtaGFzaHNldGZuKFBhcmFtIHBtLCBIYXNo VGFibGUgaHQpCiAgICAgZGF0dW0ga2V5LCBjb250ZW50OwogCiAgICAgaWYgKCFwbS0+dS5oYXNo IHx8IHBtLT51Lmhhc2ggPT0gaHQpCi0JcmV0dXJuOworICAgICAgICByZXR1cm47CiAKICAgICBp ZiAoIShkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEp LT5kYmYpKQotCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogCiAgICAga2V5ID0gZ2RibV9maXJz dGtleShkYmYpOwogICAgIHdoaWxlIChrZXkuZHB0cikgewotCXF1ZXVlX3NpZ25hbHMoKTsKLQko dm9pZClnZGJtX2RlbGV0ZShkYmYsIGtleSk7Ci0JZnJlZShrZXkuZHB0cik7Ci0JdW5xdWV1ZV9z aWduYWxzKCk7Ci0Ja2V5ID0gZ2RibV9maXJzdGtleShkYmYpOworICAgICAgICBxdWV1ZV9zaWdu YWxzKCk7CisgICAgICAgICh2b2lkKWdkYm1fZGVsZXRlKGRiZiwga2V5KTsKKyAgICAgICAgZnJl ZShrZXkuZHB0cik7CisgICAgICAgIHVucXVldWVfc2lnbmFscygpOworICAgICAgICBrZXkgPSBn ZGJtX2ZpcnN0a2V5KGRiZik7CisgICAgfQorCisgICAgLyogSnVzdCBkZWxldGVkIGV2ZXJ5dGhp bmcsIGNsZWFuIHVwLgorICAgICAqIFR1cm5lZCBvZmYgd2FpdGluZyBmb3IgZ2RibSB0byBmaXgg TkZTIHByb2JsZW0uCisgICAgICogVXNlciBjYW4gcmVvcmdhbml6ZSB2aWEgZ2RibXRvb2wuICov CisjaWYgMAorICAgIGlmIChHREJNX1ZFUlNJT05fTUFKT1IgPiAxIHx8IChHREJNX1ZFUlNJT05f TUFKT1IgPT0gMSAmJiBHREJNX1ZFUlNJT05fTUlOT1IgPiAxMykgKSB7CisgICAgICAgICh2b2lk KWdkYm1fcmVvcmdhbml6ZShkYmYpOwogICAgIH0KKyNlbmRpZgogCi0gICAgLyoganVzdCBkZWxl dGVkIGV2ZXJ5dGhpbmcsIGNsZWFuIHVwICovCi0gICAgKHZvaWQpZ2RibV9yZW9yZ2FuaXplKGRi Zik7CisgICAgbm9fZGF0YWJhc2VfYWN0aW9uID0gMTsKKyAgICBlbXB0eWhhc2h0YWJsZShwbS0+ dS5oYXNoKTsKKyAgICBub19kYXRhYmFzZV9hY3Rpb24gPSAwOwogCiAgICAgaWYgKCFodCkKLQly ZXR1cm47CisgICAgICAgIHJldHVybjsKIAotICAgICAvKiBQdXQgbmV3IHN0cmluZ3MgaW50byBk YXRhYmFzZSwgd2FpdGluZwotICAgICAgKiBmb3IgdGhlaXIgaW50ZXJmYWNpbmctUGFyYW1zIHRv IGJlIGNyZWF0ZWQgKi8KKyAgICAvKiBQdXQgbmV3IHN0cmluZ3MgaW50byBkYXRhYmFzZSwgd2Fp dGluZworICAgICAqIGZvciB0aGVpciBpbnRlcmZhY2luZy1QYXJhbXMgdG8gYmUgY3JlYXRlZCAq LwogCi0gICAgZm9yIChpID0gMDsgaSA8IGh0LT5oc2l6ZTsgaSsrKQotCWZvciAoaG4gPSBodC0+ bm9kZXNbaV07IGhuOyBobiA9IGhuLT5uZXh0KSB7Ci0JICAgIHN0cnVjdCB2YWx1ZSB2OworICAg IGZvciAoaSA9IDA7IGkgPCBodC0+aHNpemU7IGkrKykgeworICAgICAgICBmb3IgKGhuID0gaHQt Pm5vZGVzW2ldOyBobjsgaG4gPSBobi0+bmV4dCkgeworICAgICAgICAgICAgc3RydWN0IHZhbHVl IHY7CiAKLQkgICAgdi5pc2FyciA9IHYuZmxhZ3MgPSB2LnN0YXJ0ID0gMDsKLQkgICAgdi5lbmQg PSAtMTsKLQkgICAgdi5hcnIgPSBOVUxMOwotCSAgICB2LnBtID0gKFBhcmFtKSBobjsKKyAgICAg ICAgICAgIHYuaXNhcnIgPSB2LmZsYWdzID0gdi5zdGFydCA9IDA7CisgICAgICAgICAgICB2LmVu ZCA9IC0xOworICAgICAgICAgICAgdi5hcnIgPSBOVUxMOworICAgICAgICAgICAgdi5wbSA9IChQ YXJhbSkgaG47CiAKICAgICAgICAgICAgIC8qIFVubWV0YWZ5IGtleSAqLwogICAgICAgICAgICAg aW50IHVtbGVuID0gMDsKLSAgICAgICAgICAgIGNoYXIgKnVta2V5ID0gdW5tZXRhZnlfemFsbG9j KHYucG0tPm5vZGUubmFtLCZ1bWxlbik7CisgICAgICAgICAgICBjaGFyICp1bWtleSA9IHpzaF9k Yl91bm1ldGFmeV96YWxsb2Modi5wbS0+bm9kZS5uYW0sJnVtbGVuKTsKIAotCSAgICBrZXkuZHB0 ciA9IHVta2V5OwotCSAgICBrZXkuZHNpemUgPSB1bWxlbjsKKyAgICAgICAgICAgIGtleS5kcHRy ID0gdW1rZXk7CisgICAgICAgICAgICBrZXkuZHNpemUgPSB1bWxlbjsKIAotCSAgICBxdWV1ZV9z aWduYWxzKCk7CisgICAgICAgICAgICBxdWV1ZV9zaWduYWxzKCk7CiAKICAgICAgICAgICAgIC8q IFVubWV0YWZ5ICovCi0gICAgICAgICAgICBjaGFyICp1bXZhbCA9IHVubWV0YWZ5X3phbGxvYyhn ZXRzdHJ2YWx1ZSgmdiksJnVtbGVuKTsKKyAgICAgICAgICAgIGNoYXIgKnVtdmFsID0genNoX2Ri X3VubWV0YWZ5X3phbGxvYyhnZXRzdHJ2YWx1ZSgmdiksJnVtbGVuKTsKIAogICAgICAgICAgICAg LyogU3RvcmUgKi8KLQkgICAgY29udGVudC5kcHRyID0gdW12YWw7Ci0JICAgIGNvbnRlbnQuZHNp emUgPSB1bWxlbjsKLQkgICAgKHZvaWQpZ2RibV9zdG9yZShkYmYsIGtleSwgY29udGVudCwgR0RC TV9SRVBMQUNFKTsJCisgICAgICAgICAgICBjb250ZW50LmRwdHIgPSB1bXZhbDsKKyAgICAgICAg ICAgIGNvbnRlbnQuZHNpemUgPSB1bWxlbjsKKyAgICAgICAgICAgICh2b2lkKWdkYm1fc3RvcmUo ZGJmLCBrZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CiAKLSAgICAgICAgICAgIC8qIEZyZWUg LSB1bm1ldGFmeV96YWxsb2MgYWxsb2NhdGVzIGV4YWN0IHJlcXVpcmVkCisgICAgICAgICAgICAv KiBGcmVlIC0genNoX2RiX3VubWV0YWZ5X3phbGxvYyBhbGxvY2F0ZXMgZXhhY3QgcmVxdWlyZWQK ICAgICAgICAgICAgICAqIHNwYWNlLCBob3dldmVyIHVubWV0YWZpZWQgc3RyaW5nIGNhbiBoYXZl IHplcm9zCiAgICAgICAgICAgICAgKiBpbiBjb250ZW50LCBzbyB3ZSBtdXN0IGZpcnN0IGZpbGwg d2l0aCBub24tMCBieXRlcyAqLwotICAgICAgICAgICAgc2V0X2xlbmd0aCh1bXZhbCwgY29udGVu dC5kc2l6ZSk7CisgICAgICAgICAgICB6c2hfZGJfc2V0X2xlbmd0aCh1bXZhbCwgY29udGVudC5k c2l6ZSk7CiAgICAgICAgICAgICB6c2ZyZWUodW12YWwpOwotICAgICAgICAgICAgc2V0X2xlbmd0 aCh1bWtleSwga2V5LmRzaXplKTsKKyAgICAgICAgICAgIHpzaF9kYl9zZXRfbGVuZ3RoKHVta2V5 LCBrZXkuZHNpemUpOwogICAgICAgICAgICAgenNmcmVlKHVta2V5KTsKIAotCSAgICB1bnF1ZXVl X3NpZ25hbHMoKTsKLQl9CisgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKKyAgICAgICAg fQorICAgIH0KKyAgICAvKiBXZSByZXVzZSBvdXIgaGFzaCwgdGhlIGlucHV0IGlzIHRvIGJlIGRl bGV0ZWQgKi8KKyAgICBkZWxldGVwYXJhbXRhYmxlKGh0KTsKIH0KKy8qIH19fSAqLworLyogRlVO Q1RJT046IGdkYm11bnRpZSB7e3sqLwogCiAvKiovCiBzdGF0aWMgdm9pZAogZ2RibXVudGllKFBh cmFtIHBtKQogewotICAgIEdEQk1fRklMRSBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAq KXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmY7CisgICAgc3RydWN0IGdzdV9zY2FsYXJfZXh0ICpn c3VfZXh0ID0gKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGE7Cisg ICAgR0RCTV9GSUxFIGRiZiA9IGdzdV9leHQtPmRiZjsKICAgICBIYXNoVGFibGUgaHQgPSBwbS0+ dS5oYXNoOwogCiAgICAgaWYgKGRiZikgeyAvKiBwYXJhbm9pYSAqLwotCWZkdGFibGVbZ2RibV9m ZGVzYyhkYmYpXSA9IEZEVF9VTlVTRUQ7CisgICAgICAgIGZkdGFibGVbZ3N1X2V4dC0+ZmRlc2Nd ID0gRkRUX1VOVVNFRDsKICAgICAgICAgZ2RibV9jbG9zZShkYmYpOwogCiAgICAgICAgIC8qIExl dCBoYXNoIGZpZWxkcyBrbm93IHRoZXJlJ3Mgbm8gYmFja2VuZCAqLwogICAgICAgICAoKHN0cnVj dCBnc3Vfc2NhbGFyX2V4dCAqKWh0LT50bXBkYXRhKS0+ZGJmID0gTlVMTDsKIAogICAgICAgICAv KiBSZW1vdmUgZnJvbSBsaXN0IG9mIHRpZWQgcGFyYW1ldGVycyAqLwotICAgICAgICByZW1vdmVf dGllZF9uYW1lKHBtLT5ub2RlLm5hbSk7CisgICAgICAgIHpzaF9kYl9maWx0ZXJfYXJyKCZ6Z2Ri bV90aWVkLCBwbS0+bm9kZS5uYW0pOwogICAgIH0KIAogICAgIC8qIGZvciBjb21wbGV0ZW5lc3Mg Li4uIGNyZWF0ZXNwZWNpYWxoYXNoKCkgc2hvdWxkIGhhdmUgYW4gaW52ZXJzZSAqLwpAQCAtNTYx LDcgKzcyMSw4IEBAIGdkYm11bnRpZShQYXJhbSBwbSkKICAgICBwbS0+bm9kZS5mbGFncyAmPSB+ KFBNX1NQRUNJQUx8UE1fUkVBRE9OTFkpOwogICAgIHBtLT5nc3UuaCA9ICZzdGRoYXNoX2dzdTsK IH0KLQorLyogfX19ICovCisvKiBGVU5DVElPTjogZ2RibWhhc2h1bnNldGZuIHt7eyAqLwogLyoq Lwogc3RhdGljIHZvaWQKIGdkYm1oYXNodW5zZXRmbihQYXJhbSBwbSwgVU5VU0VEKGludCBleHAp KQpAQCAtNTcyLDggKzczMyw4IEBAIGdkYm1oYXNodW5zZXRmbihQYXJhbSBwbSwgVU5VU0VEKGlu dCBleHApKQogICAgICAqIHUuaGFzaC0+dG1wZGF0YSBiZWZvcmUgaGFzaCBnZXRzIGRlbGV0ZWQg Ki8KICAgICBzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKiBnc3VfZXh0ID0gcG0tPnUuaGFzaC0+dG1w ZGF0YTsKIAotICAgIC8qIFVzZXMgbm9ybWFsIHVuc2V0dGVyLiBXaWxsIGRlbGV0ZSBhbGwgb3du ZWQKLSAgICAgKiBwYXJhbWV0ZXJzIGFuZCBhbHNvIGhhc2h0YWJsZS4gKi8KKyAgICAvKiBVc2Vz IG5vcm1hbCB1bnNldHRlciAoYmVjYXVzZSBnZGJtdW50aWUgaXMgY2FsbGVkIGFib3ZlKS4KKyAg ICAgKiBXaWxsIGRlbGV0ZSBhbGwgb3duZWQgZmllbGQtcGFyYW1ldGVycyBhbmQgYWxzbyBoYXNo dGFibGUuICovCiAgICAgcG0tPmdzdS5oLT5zZXRmbihwbSwgTlVMTCk7CiAKICAgICAvKiBEb24n dCBuZWVkIGN1c3RvbSBHU1Ugc3RydWN0dXJlIHdpdGggaXRzCkBAIC01ODMsMTQgKzc0NCwxOSBA QCBnZGJtaGFzaHVuc2V0Zm4oUGFyYW0gcG0sIFVOVVNFRChpbnQgZXhwKSkKIAogICAgIHBtLT5u b2RlLmZsYWdzIHw9IFBNX1VOU0VUOwogfQotCi1zdGF0aWMgc3RydWN0IGZlYXR1cmVzIG1vZHVs ZV9mZWF0dXJlcyA9IHsKLSAgICBiaW50YWIsIHNpemVvZihiaW50YWIpL3NpemVvZigqYmludGFi KSwKKy8qIH19fSAqLworLyogQVJSQVk6IG1vZHVsZV9mZWF0dXJlcyB7e3sgKi8KK3N0YXRpYyBz dHJ1Y3QgZmVhdHVyZXMgbW9kdWxlX2ZlYXR1cmVzID0KK3sKKyAgICBOVUxMLCAwLAogICAgIE5V TEwsIDAsCiAgICAgTlVMTCwgMCwKICAgICBwYXRhYiwgc2l6ZW9mKHBhdGFiKS9zaXplb2YoKnBh dGFiKSwKICAgICAwCiB9OworLyogfX19ICovCisKKy8qIEZVTkNUSU9OOiBzZXR1cF8ge3t7ICov CiAKIC8qKi8KIGludApAQCAtNTk4LDcgKzc2NCw4IEBAIHNldHVwXyhVTlVTRUQoTW9kdWxlIG0p KQogewogICAgIHJldHVybiAwOwogfQotCisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiBmZWF0dXJl c18ge3t7ICovCiAvKiovCiBpbnQKIGZlYXR1cmVzXyhNb2R1bGUgbSwgY2hhciAqKipmZWF0dXJl cykKQEAgLTYwNiw2ICs3NzMsOCBAQCBmZWF0dXJlc18oTW9kdWxlIG0sIGNoYXIgKioqZmVhdHVy ZXMpCiAgICAgKmZlYXR1cmVzID0gZmVhdHVyZXNhcnJheShtLCAmbW9kdWxlX2ZlYXR1cmVzKTsK ICAgICByZXR1cm4gMDsKIH0KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGVuYWJsZXNfIHt7eyAq LwogCiAvKiovCiBpbnQKQEAgLTYxMywzNCArNzgyLDQ1IEBAIGVuYWJsZXNfKE1vZHVsZSBtLCBp bnQgKiplbmFibGVzKQogewogICAgIHJldHVybiBoYW5kbGVmZWF0dXJlcyhtLCAmbW9kdWxlX2Zl YXR1cmVzLCBlbmFibGVzKTsKIH0KKy8qIH19fSAqLworLyogRlVOQ1RJT046IGJvb3RfIHt7eyAq LwogCiAvKiovCiBpbnQKIGJvb3RfKFVOVVNFRChNb2R1bGUgbSkpCiB7CiAgICAgemdkYm1fdGll ZCA9IHpzaGNhbGxvYygoMSkgKiBzaXplb2YoY2hhciAqKSk7CisgICAgenNoX2RiX3JlZ2lzdGVy X2JhY2tlbmQoImRiL2dkYm0iLCBnZGJtX21haW5fZW50cnkpOwogICAgIHJldHVybiAwOwogfQor LyogfX19ICovCisvKiBGVU5DVElPTjogY2xlYW51cF8ge3t7ICovCiAKIC8qKi8KIGludAogY2xl YW51cF8oTW9kdWxlIG0pCiB7CisgICAgenNoX2RiX3VucmVnaXN0ZXJfYmFja2VuZCgiZGIvZ2Ri bSIpOworCiAgICAgLyogVGhpcyBmcmVlcyBgemdkYm1fdGllZGAgKi8KICAgICByZXR1cm4gc2V0 ZmVhdHVyZWVuYWJsZXMobSwgJm1vZHVsZV9mZWF0dXJlcywgTlVMTCk7CiB9Ci0KKy8qIH19fSAq LworLyogRlVOQ1RJT046IGZpbmlzaF8ge3t7ICovCiAvKiovCiBpbnQKIGZpbmlzaF8oVU5VU0VE KE1vZHVsZSBtKSkKIHsKICAgICByZXR1cm4gMDsKIH0KKy8qIH19fSAqLwogCiAvKioqKioqKioq KioqKioqKioqKioqCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyAqCiAgKioqKioqKioqKioqKioqKioq KioqLwogCisvKiBGVU5DVElPTjogY3JlYXRlaGFzaCB7e3sgKi8KKwogc3RhdGljIFBhcmFtIGNy ZWF0ZWhhc2goIGNoYXIgKm5hbWUsIGludCBmbGFncyApIHsKICAgICBQYXJhbSBwbTsKICAgICBI YXNoVGFibGUgaHQ7CkBAIC02NTEsMTM3ICs4MzEsNTEgQEAgc3RhdGljIFBhcmFtIGNyZWF0ZWhh c2goIGNoYXIgKm5hbWUsIGludCBmbGFncyApIHsKICAgICB9CiAKICAgICBpZiAocG0tPm9sZCkK LQlwbS0+bGV2ZWwgPSBsb2NhbGxldmVsOworICAgICAgICBwbS0+bGV2ZWwgPSBsb2NhbGxldmVs OwogCiAgICAgLyogVGhpcyBjcmVhdGVzIHN0YW5kYXJkIGhhc2guICovCi0gICAgaHQgPSBwbS0+ dS5oYXNoID0gbmV3cGFyYW10YWJsZSgzMiwgbmFtZSk7CisgICAgaHQgPSBwbS0+dS5oYXNoID0g bmV3cGFyYW10YWJsZSgxNywgbmFtZSk7CiAgICAgaWYgKCFwbS0+dS5oYXNoKSB7CiAgICAgICAg IHBhcmFtdGFiLT5yZW1vdmVub2RlKHBhcmFtdGFiLCBuYW1lKTsKICAgICAgICAgcGFyYW10YWIt PmZyZWVub2RlKCZwbS0+bm9kZSk7CiAgICAgICAgIHp3YXJubmFtKG5hbWUsICJPdXQgb2YgbWVt b3J5IHdoZW4gYWxsb2NhdGluZyBoYXNoIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0K IAorICAgIC8qIERvZXMgZnJlZSBQYXJhbSAodW5zZXRmbiBpcyBjYWxsZWQpICovCisgICAgaHQt PmZyZWVub2RlID0genNoX2RiX2ZyZWVwYXJhbW5vZGU7CisKICAgICAvKiBUaGVzZSBwcm92aWRl IHNwZWNpYWwgZmVhdHVyZXMgKi8KICAgICBodC0+Z2V0bm9kZSA9IGh0LT5nZXRub2RlMiA9IGdl dGdkYm1ub2RlOwogICAgIGh0LT5zY2FudGFiID0gc2NhbmdkYm1rZXlzOwogCiAgICAgcmV0dXJu IHBtOwogfQotCi0vKgotICogQWRkcyBwYXJhbWV0ZXIgbmFtZSB0byBgemdkYm1fdGllZGAKLSAq LwotCi1zdGF0aWMgaW50IGFwcGVuZF90aWVkX25hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKSB7Ci0g ICAgaW50IG9sZF9sZW4gPSBhcnJsZW4oemdkYm1fdGllZCk7Ci0gICAgY2hhciAqKm5ld196Z2Ri bV90aWVkID0genNoY2FsbG9jKCAob2xkX2xlbisyKSAqIHNpemVvZihjaGFyICopKTsKLQotICAg IC8qIENvcHkgKi8KLSAgICBjaGFyICoqcCA9IHpnZGJtX3RpZWQ7Ci0gICAgY2hhciAqKmRzdCA9 IG5ld196Z2RibV90aWVkOwotICAgIHdoaWxlICgqcCkgewotICAgICAgICAqZHN0KysgPSAqcCsr OworLyogfX19ICovCisvKiBGVU5DVElPTjogaXNfdGllZF9jbWQge3t7ICovCitzdGF0aWMgaW50 Citpc190aWVkX2NtZChjaGFyICpwbW5hbWUpCit7CisgICAgUGFyYW0gcG0gPSAoUGFyYW0pIHBh cmFtdGFiLT5nZXRub2RlKHBhcmFtdGFiLCBwbW5hbWUpOworICAgIGlmKCFwbSkgeworICAgICAg ICByZXR1cm4gMTsgLyogZmFsc2UgKi8KICAgICB9CiAKLSAgICAvKiBBcHBlbmQgbmV3IG9uZSAq LwotICAgICpkc3QgPSB6dHJkdXAobmFtZSk7Ci0KLSAgICAvKiBTdWJzdGl0dXRlLCBmcmVlIG9s ZCBvbmUgKi8KLSAgICB6ZnJlZSh6Z2RibV90aWVkLCBzaXplb2YoY2hhciAqKSAqIChvbGRfbGVu ICsgMSkpOwotICAgIHpnZGJtX3RpZWQgPSBuZXdfemdkYm1fdGllZDsKLQotICAgIHJldHVybiAw OworICAgIHJldHVybiAxIC0gaXNfdGllZChwbSk7IC8qIG5lZ2F0aW9uIGZvciBzaGVsbC1jb2Rl ICovCiB9CisvKiB9fX0gKi8KKy8qIEZVTkNUSU9OOiBpc190aWVkIHt7eyAqLwogCi0vKgotICog UmVtb3ZlcyBwYXJhbWV0ZXIgbmFtZSBmcm9tIGB6Z2RibV90aWVkYAotICovCi0KLXN0YXRpYyBp bnQgcmVtb3ZlX3RpZWRfbmFtZSggY29uc3QgY2hhciAqbmFtZSApIHsKLSAgICBpbnQgb2xkX2xl biA9IGFycmxlbih6Z2RibV90aWVkKTsKLQotICAgIC8qIFR3byBzdGFnZSwgdG8gYWx3YXlzIGhh dmUgYXJybGVuKCkgPT0gemZyZWUtc2l6ZSAtIDEuCi0gICAgICogQ291bGQgZG8gYWxsb2NhdGlv biBhbmQgcmV2ZXJ0IHdoZW4gYG5vdCBmb3VuZGAsIGJ1dAotICAgICAqIHdoYXQgd291bGQgYmUg YmV0dGVyIGFib3V0IHRoYXQuICovCi0KLSAgICAvKiBGaW5kIG9uZSB0byByZW1vdmUgKi8KLSAg ICBjaGFyICoqcCA9IHpnZGJtX3RpZWQ7Ci0gICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgIGlmICgw PT1zdHJjbXAobmFtZSwqcCkpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg ICAgIHArKzsKLSAgICB9Ci0KLSAgICAvKiBDb3B5IHgrMSB0byB4ICovCi0gICAgd2hpbGUgKCpw KSB7Ci0gICAgICAgICpwPSoocCsxKTsKLSAgICAgICAgcCsrOwotICAgIH0KLQotICAgIC8qIFNl Y29uZCBzdGFnZS4gU2l6ZSBjaGFuZ2VkPyBPbmx5IG9sZF9zaXplLTEKLSAgICAgKiBjaGFuZ2Ug aXMgcG9zc2libGUsIGJ1dC4uIHBhcmFub2lhIHdheSAqLwotICAgIGludCBuZXdfbGVuID0gYXJy bGVuKHpnZGJtX3RpZWQpOwotICAgIGlmIChuZXdfbGVuICE9IG9sZF9sZW4pIHsKLSAgICAgICAg Y2hhciAqKm5ld196Z2RibV90aWVkID0genNoY2FsbG9jKChuZXdfbGVuKzEpICogc2l6ZW9mKGNo YXIgKikpOwotCi0gICAgICAgIC8qIENvcHkgKi8KLSAgICAgICAgcCA9IHpnZGJtX3RpZWQ7Ci0g ICAgICAgIGNoYXIgKipkc3QgPSBuZXdfemdkYm1fdGllZDsKLSAgICAgICAgd2hpbGUgKCpwKSB7 Ci0gICAgICAgICAgICAqZHN0KysgPSAqcCsrOwotICAgICAgICB9Ci0gICAgICAgICpkc3QgPSBO VUxMOwotCi0gICAgICAgIC8qIFN1YnN0aXR1dGUsIGZyZWUgb2xkIG9uZSAqLwotICAgICAgICB6 ZnJlZSh6Z2RibV90aWVkLCBzaXplb2YoY2hhciAqKSAqIChvbGRfbGVuICsgMSkpOwotICAgICAg ICB6Z2RibV90aWVkID0gbmV3X3pnZGJtX3RpZWQ7CitzdGF0aWMgaW50Citpc190aWVkKFBhcmFt IHBtKQoreworICAgIGlmIChwbS0+Z3N1LmggPT0gJmdkYm1faGFzaF9nc3UgKSB7CisgICAgICAg IHJldHVybiAxOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQotCi0vKgotICogVW5tZXRhZnkg dGhhdDoKLSAqIC0gZHVwbGljYXRlcyBidWZlciB0byB3b3JrIG9uIGl0LAotICogLSBkb2VzIHph bGxvYyBvZiBleGFjdCBzaXplIGZvciB0aGUgbmV3IHN0cmluZywKLSAqIC0gcmVzdG9yZXMgd29y ayBidWZmZXIgdG8gb3JpZ2luYWwgY29udGVudCwgdG8gcmVzdG9yZSBzdHJsZW4KLSAqCi0gKiBO byB6c2ZyZWUoKS1jb25mdXNpbmcgc3RyaW5nIHdpbGwgYmUgcHJvZHVjZWQuCi0gKi8KLXN0YXRp YyBjaGFyICp1bm1ldGFmeV96YWxsb2MoY29uc3QgY2hhciAqdG9fY29weSwgaW50ICpuZXdfbGVu KSB7Ci0gICAgY2hhciAqd29yaywgKnRvX3JldHVybjsKLSAgICBpbnQgbXlfbmV3X2xlbiA9IDA7 Ci0KLSAgICB3b3JrID0genRyZHVwKHRvX2NvcHkpOwotICAgIHdvcmsgPSB1bm1ldGFmeSh3b3Jr LCZteV9uZXdfbGVuKTsKLQotICAgIGlmIChuZXdfbGVuKQotICAgICAgICAqbmV3X2xlbiA9IG15 X25ld19sZW47Ci0KLSAgICAvKiBUaGlzIHN0cmluZyBjYW4gYmUgY29ycmVjdGx5IHpzZnJlZSgp LWQgKi8KLSAgICB0b19yZXR1cm4gPSAoY2hhciAqKSB6YWxsb2MoKG15X25ld19sZW4rMSkqc2l6 ZW9mKGNoYXIpKTsKLSAgICBtZW1jcHkodG9fcmV0dXJuLCB3b3JrLCBzaXplb2YoY2hhcikqbXlf bmV3X2xlbik7IC8vIG1lbWNweSBoYW5kbGVzICQnXDAnCi0gICAgdG9fcmV0dXJuW215X25ld19s ZW5dPSdcMCc7Ci0KLSAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHN0cmxlbiBhbmQgY29ycmVjdGx5 IGZyZWUgKi8KLSAgICBzdHJjcHkod29yaywgdG9fY29weSk7Ci0gICAgenNmcmVlKHdvcmspOwot Ci0gICAgcmV0dXJuIHRvX3JldHVybjsKLX0KLQotLyoKLSAqIEZvciB6c2gtYWxsb2NhdG9yLCBy ZXN0IG9mIFpzaCBzZWVtcyB0byB1c2UKLSAqIGZyZWUoKSBpbnN0ZWFkIG9mIHpzZnJlZSgpLCBh bmQgc3VjaCBsZW5ndGgKLSAqIHJlc3RvcmF0aW9uIGNhdXNlcyBzbG93ZG93biwgYnV0IGFsbCBp cyB0aGlzCi0gKiB3YXkgc3RyaWN0IC0gY29ycmVjdCAqLwotc3RhdGljIHZvaWQgc2V0X2xlbmd0 aChjaGFyICpidWYsIGludCBzaXplKSB7Ci0gICAgYnVmW3NpemVdPSdcMCc7Ci0gICAgd2hpbGUg KCAtLSBzaXplID49IDAgKSB7Ci0gICAgICAgIGJ1ZltzaXplXT0nICc7Ci0gICAgfQotfQorLyog fX19ICovCiAKICNlbHNlCiAjIGVycm9yIG5vIGdkYm0KZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVz L2RiX2dkYm0ubWRkIGIvU3JjL01vZHVsZXMvZGJfZ2RibS5tZGQKaW5kZXggMjEwYzIyMS4uNDY2 NzIyMiAxMDA2NDQKLS0tIGEvU3JjL01vZHVsZXMvZGJfZ2RibS5tZGQKKysrIGIvU3JjL01vZHVs ZXMvZGJfZ2RibS5tZGQKQEAgLTcsNiArNyw4IEBAIGZpCiAnCiBsb2FkPW5vCiAKLWF1dG9mZWF0 dXJlcz0iYjp6dGllIGI6enVudGllIGI6emdkYm1wYXRoIHA6emdkYm1fdGllZCIKK2F1dG9mZWF0 dXJlcz0icDp6Z2RibV90aWVkIgorCittb2RkZXBzPSJ6c2gvZGIiCiAKIG9iamVjdHM9ImRiX2dk Ym0ubyIKZGlmZiAtLWdpdCBhL1Rlc3QvVjExZGJfZ2RibS56dHN0IGIvVGVzdC9WMTFkYl9nZGJt Lnp0c3QKaW5kZXggNmQ3NGNlZi4uNDk5MTA4ZSAxMDA2NDQKLS0tIGEvVGVzdC9WMTFkYl9nZGJt Lnp0c3QKKysrIGIvVGVzdC9WMTFkYl9nZGJtLnp0c3QKQEAgLTQsMTYgKzQsMjEgQEAKIAogJXBy ZXAKIAotIG1vZG5hbWU9InpzaC9kYi9nZGJtIgorIG1vZHVsZV9wYXRoPSggYHB3ZGAvTW9kdWxl cyApCisgbW9kbmFtZTE9InpzaC9kYiIKKyBtb2RuYW1lMj0ienNoL2RiL2dkYm0iCiAgZGJmaWxl PWRiLmdkYm0KLSBpZiAhIHptb2Rsb2FkICRtb2RuYW1lIDI+L2Rldi9udWxsOyB0aGVuCi0gICBa VFNUX3VuaW1wbGVtZW50ZWQ9ImNhbid0IGxvYWQgJG1vZG5hbWUgbW9kdWxlIGZvciB0ZXN0aW5n IgorIGlmICEgem1vZGxvYWQgJG1vZG5hbWUxIDI+L2Rldi9udWxsOyB0aGVuCisgICBaVFNUX3Vu aW1wbGVtZW50ZWQ9ImNhbid0IGxvYWQgJG1vZG5hbWUxIG1vZHVsZSBmb3IgdGVzdGluZyIKKyBm aQorIGlmICEgem1vZGxvYWQgJG1vZG5hbWUyIDI+L2Rldi9udWxsOyB0aGVuCisgICBaVFNUX3Vu aW1wbGVtZW50ZWQ9ImNhbid0IGxvYWQgJG1vZG5hbWUyIG1vZHVsZSBmb3IgdGVzdGluZyIKICBm aQogIHJtIC1mIGRiLmdkYm0KIAogJXRlc3QKIAotICh6bW9kbG9hZCAtdSAkbW9kbmFtZSAmJiB6 bW9kbG9hZCAkbW9kbmFtZSkKKyAoem1vZGxvYWQgLXUgJG1vZG5hbWUyICYmIHptb2Rsb2FkICRt b2RuYW1lMikKIDA6dW5sb2FkIGFuZCByZWxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGNyYXNoaW5n CiAKICB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQpAQCAtMzA0LDIzICszMDksNDAg QEAKID7mvKLlrZcKIAogIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCi0gemdkYm1w YXRoIGRiYXNlCisgenRhZGRyZXNzIGRiYXNlCiAgW1sgJFJFUExZID0gKi9UZXN0L2RiLmdkYm0g XV0gJiYgZWNobyBjb3JyZWN0CiAgenVudGllIGRiYXNlCiAgenRpZSAtciAtZCBkYi9nZGJtIC1m ICRkYmZpbGUgZGJhc2UKLSB6Z2RibXBhdGggZGJhc2UKKyB6dGFkZHJlc3MgZGJhc2UKICBbWyAk UkVQTFkgPSAqL1Rlc3QvZGIuZ2RibSBdXSAmJiBlY2hvIGNvcnJlY3QKICB6dW50aWUgLXUgZGJh c2UKLTA6emdkYm1wYXRoIGJ1aWx0aW4KKzA6enRhZGRyZXNzIGJ1aWx0aW4KID5jb3JyZWN0CiA+ Y29ycmVjdAogCiAgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFzZVt0ZXN0 a2V5XT12YWx1ZTEKICBmdW4oKSB7IHdoaWxlIHJlYWQgbGluZTsgZG8gZWNobyAkbGluZTsgZG9u ZSB9Ci0gZXZhbCAiZGJhc2VbdGVzdGtleV09dmFsdWUxIiB8IGZ1bgorIGV2YWwgImRiYXNlW3Rl c3RrZXldPXZhbHVlMiIgfCBmdW4KKyBlY2hvICRkYmFzZVt0ZXN0a2V5XQorIHp0Y2xlYXIgZGJh c2UgdGVzdGtleQogIGVjaG8gJGRiYXNlW3Rlc3RrZXldCiAwOlRlc3Qgc3RvcmUgaW4gZm9ya2Vk IFpzaAogPnZhbHVlMQorPnZhbHVlMgorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgLXog ZGJhc2UKKyBkYmFzZVt0ZXN0a2V5XT12YWx1ZTEKKyBmdW4oKSB7IHdoaWxlIHJlYWQgbGluZTsg ZG8gZWNobyAkbGluZTsgZG9uZSB9CisgZXZhbCAiZGJhc2VbdGVzdGtleV09dmFsdWUyIiB8IGZ1 bgorIGVjaG8gJGRiYXNlW3Rlc3RrZXldCiswOlRlc3Qgc3RvcmUgaW4gZm9ya2VkIFpzaCwgd2l0 aCAteiB6ZXJvLWNhY2hlIG9wdGlvbgorPnZhbHVlMgorCisgcHJpbnQgLXJsIC0tICIkeyhva3ZA KXpkYl9iYWNrZW5kc30iCiswOlRlc3QgemRiX2JhY2tlbmRzCis+ZGIvZ2RibQorPmxvYWRlZAog CiAlY2xlYW4KIAo= --594b8830_4da37973_63ea--