From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21957 invoked by alias); 16 Feb 2017 14:25:12 -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: 40555 Received: (qmail 17039 invoked from network); 16 Feb 2017 14:25:12 -0000 X-Qmail-Scanner-Diagnostics: from new1-smtp.messagingengine.com 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(66.111.4.221):SA:0(-0.4/5.0):. Processed in 2.573695 secs); 16 Feb 2017 14:25:12 -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.4 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: psprint2@fastmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at spf.messagingengine.com designates 66.111.4.221 as permitted sender) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=mesmtp; bh=9UKCd9a0uGS0R20uvkcLWsth+7 c=; b=nlA16t2FdpkvmIYj4IBo4Yx3d8bXlmPXJ3hp0pqlbrWbTxzg2zp7NdLDlC xoinMYm9zp7I/yiZMlhKs1eUReGdXwUOee494gs2781csE4SkK6cTemH2IeS37sl 7ZREHeelJYa3nfXbcJautd4dj/wXFylSm3SgQ4xrm0fsXRLgE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=smtpout; bh=9U KCd9a0uGS0R20uvkcLWsth+7c=; b=sBZK6iVzKatTn8wlQo894INrytHVnSqiof R8yXSrW0TBRUt/TM8MpSfhUCKBp9MPOmY3pe6QMrsFK2KUkDk22iBvGAXebUpf41 0DwKlY3xuDiI0bq+c7z903KE23FSPcGeueVEmYWlI4PRd/DEYRj4QGo8PkhX+ivv nJFPExBF0= X-ME-Sender: Message-Id: <1487255103.1880827.883083384.73295E85@webmail.messagingengine.com> From: Sebastian Gniazdowski To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_148725510318808272" X-Mailer: MessagingEngine.com Webmail Interface - ajax-7cfc9722 Subject: Re: [PATCH] db/gdbm rewrite Date: Thu, 16 Feb 2017 06:25:03 -0800 In-Reply-To: <20170216125215.1b744bf6@pwslap01u.europe.root.pri> References: <1487074831.317363.880495280.04595B08@webmail.messagingengine.com> <1487154163.615323.881647656.040AB25F@webmail.messagingengine.com> <20170216101658.46555c47@pwslap01u.europe.root.pri> <1487245575.1843244.882932424.59844A89@webmail.messagingengine.com> <20170216125215.1b744bf6@pwslap01u.europe.root.pri> --_----------=_148725510318808272 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" On Thu, Feb 16, 2017, at 04:52 AM, Peter Stephenson wrote: > However, replacing all the zsfree()s with free gave me an infinite loop > on a free. This was at free(umkey) inside the braces (the first > of the two) in gdbmgetfn(). So the internal calculation of what needs > freeing is definitely getting confused by something that's going on. This leads to something. The zsfree() backtrace might be late effect of previous incorrect zsfree(). I did following change: - /* Unmetafy */ - char *umval = ztrdup(val); - umval = unmetafy(umval,¨en); + /* Unmetafy with exact zalloc size */ + char *umval = unmetafy_zalloc(val,¨en); in multiple unmetafy-places. Otherwise strlen() is shorter than actual buffer size. Sending as incremental patch including your warnings catch, also as complete patch, and as db_gdbm.c file. The added function: /* * Unmetafy that: * - duplicates bufer to work on it, * - does zalloc of exact size for the new string, * - restores work buffer to original content, to restore strlen * * No zsfree()-confusing string will be produced. */ char *unmetafy_zalloc(const char *to_copy, int *new_len) { char *work, *to_return; int my_new_len = 0; work = ztrdup(to_copy); work = unmetafy(work,&my_new_len); if (new_len) *new_len = my_new_len; /* This string can be correctly zsfree()-d */ to_return = (char *) zalloc((my_new_len+1)*sizeof(char)); memcpy(to_return, work, sizeof(char)*my_new_len); // memcpy handles $'\0' to_return[my_new_len]='\0'; /* Restore original strlen and correctly free */ strcpy(work, to_copy); zsfree(work); return to_return; } -- Sebastian Gniazdowski psprint2@fastmail.com --_----------=_148725510318808272 Content-Disposition: attachment; filename="db_gdbm_incremental.diff" Content-Id: <1487255029.1880704.27c1d76fc06f46c1b89a027bf5f7fd2bcb16106e.232DFD1A@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm_incremental.diff" ZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiX2dkYm0uYyBiL1NyYy9Nb2R1 bGVzL2RiX2dkYm0uYwppbmRleCAzZWVmNGM2Li4wYTE2NTQwIDEwMDY0NAot LS0gYS9TcmMvTW9kdWxlcy9kYl9nZGJtLmMKKysrIGIvU3JjL01vZHVsZXMv ZGJfZ2RibS5jCkBAIC00MSw2ICs0MSw3IEBACiBzdGF0aWMgUGFyYW0gY3Jl YXRlaGFzaCggY2hhciAqbmFtZSwgaW50IGZsYWdzICk7CiBzdGF0aWMgaW50 IGFwcGVuZF90aWVkX25hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKTsKIHN0YXRp YyBpbnQgcmVtb3ZlX3RpZWRfbmFtZSggY29uc3QgY2hhciAqbmFtZSApOwor Y2hhciAqdW5tZXRhZnlfemFsbG9jKGNvbnN0IGNoYXIgKnRvX2NvcHksIGlu dCAqbmV3X2xlbik7CiAKIC8qCiAgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbGwg dGhlIGJpdHMgSSdtIHVzaW5nIGZvciBtZW1vcnkgbWFwcGluZywgb3RoZXJ3 aXNlCkBAIC0yMjgsNyArMjI5LDcgQEAgYmluX3p1bnRpZShjaGFyICpuYW0s IGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkK IHN0YXRpYyBpbnQKIGJpbl96Z2RibXBhdGgoY2hhciAqbmFtLCBjaGFyICoq YXJncywgT3B0aW9ucyBvcHMsIFVOVVNFRChpbnQgZnVuYykpCiB7Ci0gICAg UGFyYW0gcG0sIHJlcGx5X3BtOworICAgIFBhcmFtIHBtOwogICAgIGNoYXIg KnBtbmFtZTsKIAogICAgIHBtbmFtZSA9ICphcmdzOwpAQCAtMjk0LDkgKzI5 NSw4IEBAIGdkYm1nZXRmbihQYXJhbSBwbSkKIAogICAgIC8qIFVubWV0YWZ5 IGtleS4gR0RCTSBmaXRzIG5pY2UgaW50byB0aGlzCiAgICAgICogcHJvY2Vz cywgYXMgaXQgdXNlcyBsZW5ndGggb2YgZGF0YSAqLwotICAgIGNoYXIgKnVt a2V5ID0genRyZHVwKHBtLT5ub2RlLm5hbSk7CiAgICAgaW50IHVtbGVuID0g MDsKLSAgICB1bWtleSA9IHVubWV0YWZ5KHVta2V5LCZ1bWxlbik7CisgICAg Y2hhciAqdW1rZXkgPSB1bm1ldGFmeV96YWxsb2MocG0tPm5vZGUubmFtLCZ1 bWxlbik7CiAKICAgICBrZXkuZHB0ciA9IHVta2V5OwogICAgIGtleS5kc2l6 ZSA9IHVtbGVuOwpAQCAtMzE4LDcgKzMxOCw3IEBAIGdkYm1nZXRmbihQYXJh bSBwbSkKICAgICAgICAgICogY2FuIG9idGFpbiBkYXRhIGxlbmd0aCB0byBh dm9pZCB1c2luZyBcMCAqLwogICAgICAgICBwbS0+dS5zdHIgPSBtZXRhZnko Y29udGVudC5kcHRyLCBjb250ZW50LmRzaXplLCBNRVRBX0FMTE9DKTsKIAot ICAgICAgICAvKiBGcmVlIGtleSAqLworICAgICAgICAvKiBGcmVlIGtleSwg cmVzdG9yaW5nIGl0cyBvcmlnaW5hbCBsZW5ndGggKi8KICAgICAgICAgenNm cmVlKHVta2V5KTsKIAogICAgICAgICAvKiBDYW4gcmV0dXJuIHBvaW50ZXIs IGNvcnJlY3RseSBzYXZlZCBpbnNpZGUgaGFzaCAqLwpAQCAtMzU4LDE3ICsz NTgsMTUgQEAgZ2RibXNldGZuKFBhcmFtIHBtLCBjaGFyICp2YWwpCiAgICAg LyogRGF0YWJhc2UgKi8KICAgICBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFy X2V4dCAqKXBtLT5nc3UucyktPmRiZjsKICAgICBpZiAoZGJmKSB7Ci0gICAg ICAgIGNoYXIgKnVta2V5ID0genRyZHVwKHBtLT5ub2RlLm5hbSk7CiAgICAg ICAgIGludCB1bWxlbiA9IDA7Ci0gICAgICAgIHVta2V5ID0gdW5tZXRhZnko dW1rZXksJnVtbGVuKTsKKyAgICAgICAgY2hhciAqdW1rZXkgPSB1bm1ldGFm eV96YWxsb2MocG0tPm5vZGUubmFtLCZ1bWxlbik7CiAKICAgICAgICAga2V5 LmRwdHIgPSB1bWtleTsKICAgICAgICAga2V5LmRzaXplID0gdW1sZW47CiAK ICAgICAgICAgaWYgKHZhbCkgewotICAgICAgICAgICAgLyogVW5tZXRhZnkg Ki8KLSAgICAgICAgICAgIGNoYXIgKnVtdmFsID0genRyZHVwKHZhbCk7Ci0g ICAgICAgICAgICB1bXZhbCA9IHVubWV0YWZ5KHVtdmFsLCZ1bWxlbik7Cisg ICAgICAgICAgICAvKiBVbm1ldGFmeSB3aXRoIGV4YWN0IHphbGxvYyBzaXpl ICovCisgICAgICAgICAgICBjaGFyICp1bXZhbCA9IHVubWV0YWZ5X3phbGxv Yyh2YWwsJnVtbGVuKTsKIAogICAgICAgICAgICAgLyogU3RvcmUgKi8KICAg ICAgICAgICAgIGNvbnRlbnQuZHB0ciA9IHVtdmFsOwpAQCAtNDMzLDggKzQz MSw3IEBAIGdldGdkYm1ub2RlKEhhc2hUYWJsZSBodCwgY29uc3QgY2hhciAq bmFtZSkKIHN0YXRpYyB2b2lkCiBzY2FuZ2RibWtleXMoSGFzaFRhYmxlIGh0 LCBTY2FuRnVuYyBmdW5jLCBpbnQgZmxhZ3MpCiB7Ci0gICAgUGFyYW0gcG0g PSBOVUxMOwotICAgIGRhdHVtIGtleSwgY29udGVudDsKKyAgICBkYXR1bSBr ZXk7CiAgICAgR0RCTV9GSUxFIGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJf ZXh0ICopaHQtPnRtcGRhdGEpLT5kYmY7CiAKICAgICAvKiBJdGVyYXRlIGtl eXMgYWRkaW5nIHRoZW0gdG8gaGFzaCwgc28KQEAgLTUwNSw5ICs1MDIsOCBA QCBnZGJtaGFzaHNldGZuKFBhcmFtIHBtLCBIYXNoVGFibGUgaHQpCiAJICAg IHYucG0gPSAoUGFyYW0pIGhuOwogCiAgICAgICAgICAgICAvKiBVbm1ldGFm eSBrZXkgKi8KLSAgICAgICAgICAgIGNoYXIgKnVta2V5ID0genRyZHVwKHYu cG0tPm5vZGUubmFtKTsKICAgICAgICAgICAgIGludCB1bWxlbiA9IDA7Ci0g ICAgICAgICAgICB1bWtleSA9IHVubWV0YWZ5KHVta2V5LCZ1bWxlbik7Cisg ICAgICAgICAgICBjaGFyICp1bWtleSA9IHVubWV0YWZ5X3phbGxvYyh2LnBt LT5ub2RlLm5hbSwmdW1sZW4pOwogCiAJICAgIGtleS5kcHRyID0gdW1rZXk7 CiAJICAgIGtleS5kc2l6ZSA9IHVtbGVuOwpAQCAtNTE1LDE1ICs1MTEsMTYg QEAgZ2RibWhhc2hzZXRmbihQYXJhbSBwbSwgSGFzaFRhYmxlIGh0KQogCSAg ICBxdWV1ZV9zaWduYWxzKCk7CiAKICAgICAgICAgICAgIC8qIFVubWV0YWZ5 ICovCi0gICAgICAgICAgICBjaGFyICp1bXZhbCA9IHp0cmR1cChnZXRzdHJ2 YWx1ZSgmdikpOwotICAgICAgICAgICAgdW12YWwgPSB1bm1ldGFmeSh1bXZh bCwmdW1sZW4pOworICAgICAgICAgICAgY2hhciAqdW12YWwgPSB1bm1ldGFm eV96YWxsb2MoZ2V0c3RydmFsdWUoJnYpLCZ1bWxlbik7CiAKICAgICAgICAg ICAgIC8qIFN0b3JlICovCiAJICAgIGNvbnRlbnQuZHB0ciA9IHVtdmFsOwog CSAgICBjb250ZW50LmRzaXplID0gdW1sZW47CiAJICAgICh2b2lkKWdkYm1f c3RvcmUoZGJmLCBrZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CQogCi0g ICAgICAgICAgICAvKiBGcmVlICovCisgICAgICAgICAgICAvKiBGcmVlIC0g dGhhbmtzIHRvIHVubWV0YWZ5X3phbGxvYyBzaXplIG9mCisgICAgICAgICAg ICAgKiB0aGUgc3RyaW5ncyBpcyBleGFjdCB6YWxsb2Mgc2l6ZSAtIGNhbgor ICAgICAgICAgICAgICogcGFzcyB0byB6c2ZyZWUgKi8KICAgICAgICAgICAg IHpzZnJlZSh1bXZhbCk7CiAgICAgICAgICAgICB6c2ZyZWUodW1rZXkpOwog CkBAIC03MzksMyArNzM2LDMzIEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3RpZWRf bmFtZSggY29uc3QgY2hhciAqbmFtZSApIHsKIAogICAgIHJldHVybiAwOwog fQorCisvKgorICogVW5tZXRhZnkgdGhhdDoKKyAqIC0gZHVwbGljYXRlcyBi dWZlciB0byB3b3JrIG9uIGl0LAorICogLSBkb2VzIHphbGxvYyBvZiBleGFj dCBzaXplIGZvciB0aGUgbmV3IHN0cmluZywKKyAqIC0gcmVzdG9yZXMgd29y ayBidWZmZXIgdG8gb3JpZ2luYWwgY29udGVudCwgdG8gcmVzdG9yZSBzdHJs ZW4KKyAqCisgKiBObyB6c2ZyZWUoKS1jb25mdXNpbmcgc3RyaW5nIHdpbGwg YmUgcHJvZHVjZWQuCisgKi8KK2NoYXIgKnVubWV0YWZ5X3phbGxvYyhjb25z dCBjaGFyICp0b19jb3B5LCBpbnQgKm5ld19sZW4pIHsKKyAgICBjaGFyICp3 b3JrLCAqdG9fcmV0dXJuOworICAgIGludCBteV9uZXdfbGVuID0gMDsKKwor ICAgIHdvcmsgPSB6dHJkdXAodG9fY29weSk7CisgICAgd29yayA9IHVubWV0 YWZ5KHdvcmssJm15X25ld19sZW4pOworCisgICAgaWYgKG5ld19sZW4pCisg ICAgICAgICpuZXdfbGVuID0gbXlfbmV3X2xlbjsKKworICAgIC8qIFRoaXMg c3RyaW5nIGNhbiBiZSBjb3JyZWN0bHkgenNmcmVlKCktZCAqLworICAgIHRv X3JldHVybiA9IChjaGFyICopIHphbGxvYygobXlfbmV3X2xlbisxKSpzaXpl b2YoY2hhcikpOworICAgIG1lbWNweSh0b19yZXR1cm4sIHdvcmssIHNpemVv ZihjaGFyKSpteV9uZXdfbGVuKTsgLy8gbWVtY3B5IGhhbmRsZXMgJCdcMCcK KyAgICB0b19yZXR1cm5bbXlfbmV3X2xlbl09J1wwJzsKKworICAgIC8qIFJl c3RvcmUgb3JpZ2luYWwgc3RybGVuIGFuZCBjb3JyZWN0bHkgZnJlZSAqLwor ICAgIHN0cmNweSh3b3JrLCB0b19jb3B5KTsKKyAgICB6c2ZyZWUod29yayk7 CisKKyAgICByZXR1cm4gdG9fcmV0dXJuOworfQo= --_----------=_148725510318808272 Content-Disposition: attachment; filename="db_gdbm_rewrite3.diff" Content-Id: <1487255035.1880693.904cb23d7e30ecc476be25a1b8d0c50504117647.75C91FF5@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm_rewrite3.diff" ZGlmZiAtLWdpdCBhL0RvYy9ac2gvbW9kX2RiX2dkYm0ueW8gYi9Eb2MvWnNo L21vZF9kYl9nZGJtLnlvCmluZGV4IDkwOTc0MjkuLjY5OWU5YWIgMTAwNjQ0 Ci0tLSBhL0RvYy9ac2gvbW9kX2RiX2dkYm0ueW8KKysrIGIvRG9jL1pzaC9t b2RfZGJfZ2RibS55bwpAQCAtNDMsNiArNDMsMTcgQEAgbG9jYWwgc2NvcGUg KGZ1bmN0aW9uKSBlbmRzLiAgTm90ZSB0aGF0IGEgcmVhZG9ubHkgcGFyYW1l dGVyIG1heSBub3QgYmUKIGV4cGxpY2l0bHkgdW5zZXQsIHNvIHRoZSBvbmx5 IHdheSB0byB1bnNldCBhIGdsb2JhbCBwYXJhbWV0ZXIgY3JlYXRlZCB3aXRo CiBgdHQoenRpZSAtciknIGlzIHRvIHVzZSBgdHQoenVudGllIC11KScuCiAp CitmaW5kZXgoemdkYm1wYXRoKQorY2luZGV4KGRhdGFiYXNlIGZpbGUgcGF0 aCwgcmVhZGluZykKK2l0ZW0odHQoemdkYm1wYXRoKSB2YXIocGFyYW1ldGVy bmFtZSkpKAorUHV0IHBhdGggdG8gZGF0YWJhc2UgZmlsZSBhc3NpZ25lZCB0 byB2YXIocGFyYW1ldGVybmFtZSkgaW50byB0dChSRVBMWSkKK3NjYWxhci4K KykKK2ZpbmRleCh6Z2RibV90aWVkKQorY2luZGV4KGRhdGFiYXNlIHRpZWQg YXJyYXlzLCBlbnVtZXJhdGluZykKK2l0ZW0odHQoemdkYm1fdGllZCkpKAor QXJyYXkgaG9sZGluZyBuYW1lcyBvZiBhbGwgdGllZCBwYXJhbWV0ZXJzLgor KQogZW5kaXRlbSgpCiAKIFRoZSBmaWVsZHMgb2YgYW4gYXNzb2NpYXRpdmUg YXJyYXkgdGllZCB0byBHREJNIGFyZSBuZWl0aGVyIGNhY2hlZCBub3IKZGlm ZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiX2dkYm0uYyBiL1NyYy9Nb2R1bGVz L2RiX2dkYm0uYwppbmRleCAzMTBlMzI5Li4wYTE2NTQwIDEwMDY0NAotLS0g YS9TcmMvTW9kdWxlcy9kYl9nZGJtLmMKKysrIGIvU3JjL01vZHVsZXMvZGJf Z2RibS5jCkBAIC02LDYgKzYsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA4 IENsaW50IEFkYW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKKyAq IE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3IFNlYmFzdGlhbiBH bmlhemRvd3NraQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4g YWdyZWVtZW50IGFuZCB3aXRob3V0CiAgKiBsaWNlbnNlIG9yIHJveWFsdHkg ZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo aXMKICAqIHNvZnR3YXJlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIHZl cnNpb25zIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQpAQCAtMzEsNiArMzQs MTUgQEAKICNpbmNsdWRlICJkYl9nZGJtLm1kaCIKICNpbmNsdWRlICJkYl9n ZGJtLnBybyIKIAorI2lmbmRlZiBQTV9VUFRPREFURQorI2RlZmluZSBQTV9V UFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFzIHVwLXRvLWRh dGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KKyNlbmRpZgorCitz dGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50IGZsYWdz ICk7CitzdGF0aWMgaW50IGFwcGVuZF90aWVkX25hbWUoIGNvbnN0IGNoYXIg Km5hbWUgKTsKK3N0YXRpYyBpbnQgcmVtb3ZlX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApOworY2hhciAqdW5tZXRhZnlfemFsbG9jKGNvbnN0IGNo YXIgKnRvX2NvcHksIGludCAqbmV3X2xlbik7CisKIC8qCiAgKiBNYWtlIHN1 cmUgd2UgaGF2ZSBhbGwgdGhlIGJpdHMgSSdtIHVzaW5nIGZvciBtZW1vcnkg bWFwcGluZywgb3RoZXJ3aXNlCiAgKiBJIGRvbid0IGtub3cgd2hhdCBJJ20g ZG9pbmcuCkBAIC00MSw4ICs1MywzNCBAQAogCiBzdGF0aWMgY2hhciAqYmFj a3R5cGUgPSAiZGIvZ2RibSI7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3N1 X3NjYWxhciBnZGJtX2dzdSA9Ci17IGdkYm1nZXRmbiwgZ2RibXNldGZuLCBn ZGJtdW5zZXRmbiB9OworLyoKKyAqIExvbmdlciBHU1Ugc3RydWN0dXJlLCB0 byBjYXJyeSBHREJNX0ZJTEUgb2Ygb3duaW5nCisgKiBkYXRhYmFzZS4gRXZl cnkgcGFyYW1ldGVyIChoYXNoIHZhbHVlKSByZWNlaXZlcyBHU1UKKyAqIHBv aW50ZXIgYW5kIHRodXMgYWxzbyByZWNlaXZlcyBHREJNX0ZJTEUgLSB0aGlz IHdheQorICogcGFyYW1ldGVycyBjYW4gYWNjZXNzIHByb3BlciBkYXRhYmFz ZS4KKyAqCisgKiBNYWluIEhhc2hUYWJsZSBwYXJhbWV0ZXIgaGFzIHRoZSBz YW1lIGluc3RhbmNlIG9mCisgKiB0aGUgY3VzdG9tIEdTVSBzdHJ1Y3QgaW4g dS5oYXNoLT50bXBkYXRhIGZpZWxkLgorICogV2hlbiBkYXRhYmFzZSBpcyBj bG9zZWQsIGBkYmZgIGZpZWxkIGlzIHNldCB0byBOVUxMCisgKiBhbmQgaGFz aCB2YWx1ZXMga25vdyB0byBub3QgYWNjZXNzIGRhdGFiYXNlIHdoZW4KKyAq IGJlaW5nIHVuc2V0ICh0b3RhbCBwdXJnZSBhdCB6dW50aWUpLgorICoKKyAq IFdoZW4gZGF0YWJhc2UgY2xvc2luZyBpcyBlbmRlZCwgY3VzdG9tIEdTVSBz dHJ1Y3QKKyAqIGlzIGZyZWVkLiBPbmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3 IGN1c3RvbSBHU1UKKyAqIHN0cnVjdCBpbnN0YW5jZS4KKyAqLworCitzdHJ1 Y3QgZ3N1X3NjYWxhcl9leHQgeworICAgIHN0cnVjdCBnc3Vfc2NhbGFyIHN0 ZDsKKyAgICBHREJNX0ZJTEUgZGJmOworICAgIGNoYXIgKmRiZmlsZV9wYXRo OworfTsKKworLyogU291cmNlIHN0cnVjdHVyZSAtIHdpbGwgYmUgY29waWVk IHRvIGFsbG9jYXRlZCBvbmUsCisgKiB3aXRoIGBkYmZgIGZpbGxlZC4gYGRi ZmAgYWxsb2NhdGlvbiA8LT4gZ3N1IGFsbG9jYXRpb24uICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9Cit7 IHsgZ2RibWdldGZuLCBnZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAsIDAg fTsKKwogLyoqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfaGFzaCBnZGJt X2hhc2hfZ3N1ID0KIHsgaGFzaGdldGZuLCBnZGJtaGFzaHNldGZuLCBnZGJt aGFzaHVuc2V0Zm4gfTsKQEAgLTUwLDYgKzg4LDE3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZ3N1X2hhc2ggZ2RibV9oYXNoX2dzdSA9CiBzdGF0aWMgc3Ry dWN0IGJ1aWx0aW4gYmludGFiW10gPSB7CiAgICAgQlVJTFRJTigienRpZSIs IDAsIGJpbl96dGllLCAxLCAtMSwgMCwgImQ6ZjpyIiwgTlVMTCksCiAgICAg QlVJTFRJTigienVudGllIiwgMCwgYmluX3p1bnRpZSwgMSwgLTEsIDAsICJ1 IiwgTlVMTCksCisgICAgQlVJTFRJTigiemdkYm1wYXRoIiwgMCwgYmluX3pn ZGJtcGF0aCwgMSwgLTEsIDAsICIiLCBOVUxMKSwKK307CisKKyNkZWZpbmUg Uk9BUlJQQVJBTURFRihuYW1lLCB2YXIpIFwKKyAgICB7IG5hbWUsIFBNX0FS UkFZIHwgUE1fUkVBRE9OTFksICh2b2lkICopIHZhciwgTlVMTCwgIE5VTEws IE5VTEwsIE5VTEwgfQorCisvKiBIb2xkcyBuYW1lcyBvZiBhbGwgdGllZCBw YXJhbWV0ZXJzICovCitjaGFyICoqemdkYm1fdGllZDsKKworc3RhdGljIHN0 cnVjdCBwYXJhbWRlZiBwYXRhYltdID0geworICAgIFJPQVJSUEFSQU1ERUYo ICJ6Z2RibV90aWVkIiwgJnpnZGJtX3RpZWQgKSwKIH07CiAKIC8qKi8KQEAg LTc3LDggKzEyNiw3IEBAIGJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAqKmFy Z3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogICAgIH0KIAog ICAgIC8qIEhlcmUgc2hvdWxkIGJlIGEgbG9va3VwIG9mIHRoZSBiYWNrZW5k IHR5cGUgYWdhaW5zdAotICAgICAqIGEgcmVnaXN0cnkuCi0gICAgICovCisg ICAgICogYSByZWdpc3RyeSwgaWYgZ2VuZXJhbSBEQiBtZWNoYW5pc20gaXMg dG8gYmUgYWRkZWQgKi8KICAgICBpZiAoc3RyY21wKE9QVF9BUkcob3BzLCAn ZCcpLCBiYWNrdHlwZSkgIT0gMCkgewogICAgICAgICB6d2Fybm5hbShuYW0s ICJ1bnN1cHBvcnRlZCBiYWNrZW5kIHR5cGUgYCVzJyIsIE9QVF9BUkcob3Bz LCAnZCcpKTsKIAlyZXR1cm4gMTsKQEAgLTkyLDcgKzE0MCw4IEBAIGJpbl96 dGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVT RUQoaW50IGZ1bmMpKQogCS8qCiAJICogVW5zZXQgYW55IGV4aXN0aW5nIHBh cmFtZXRlci4gIE5vdGUgdGhlcmUncyBubyBpbXBsaWNpdAogCSAqICJsb2Nh bCIgaGVyZSwgYnV0IGlmIHRoZSBleGlzdGluZyBwYXJhbWV0ZXIgaXMgbG9j YWwKLQkgKiB0aGF0IHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBuZXcgb25l LgorCSAqIHRoZW4gbmV3IHBhcmFtZXRlciB3aWxsIGJlIGFsc28gbG9jYWwg d2l0aG91dCBmb2xsb3dpbmcKKyAgICAgICAgICogdW5zZXQuCiAJICoKIAkg KiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gb3Bl biB0aGUgREIKIAkgKiBpbiBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWxyZWFk eSB0aWVkIHRvIGEgREIuCkBAIC0xMDYsMTUgKzE1NSwxNSBAQCBiaW5fenRp ZShjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VE KGludCBmdW5jKSkKICAgICB9CiAKICAgICBkYmYgPSBnZGJtX29wZW4ocmVz b3VyY2VfbmFtZSwgMCwgcmVhZF93cml0ZSwgMDY2NiwgMCk7Ci0gICAgaWYo ZGJmKQotCWFkZG1vZHVsZWZkKGdkYm1fZmRlc2MoZGJmKSwgRkRUX0lOVEVS TkFMKTsKLSAgICBlbHNlIHsKKyAgICBpZihkYmYpIHsKKwlhZGRtb2R1bGVm ZChnZGJtX2ZkZXNjKGRiZiksIEZEVF9NT0RVTEUpOworICAgICAgICBhcHBl bmRfdGllZF9uYW1lKHBtbmFtZSk7CisgICAgfSBlbHNlIHsKIAl6d2Fybm5h bShuYW0sICJlcnJvciBvcGVuaW5nIGRhdGFiYXNlIGZpbGUgJXMiLCByZXNv dXJjZV9uYW1lKTsKIAlyZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAoISh0 aWVkX3BhcmFtID0gY3JlYXRlc3BlY2lhbGhhc2gocG1uYW1lLCAmZ2V0Z2Ri bW5vZGUsICZzY2FuZ2RibWtleXMsCi0JCQkJCSBwbWZsYWdzKSkpIHsKKyAg ICBpZiAoISh0aWVkX3BhcmFtID0gY3JlYXRlaGFzaChwbW5hbWUsIHBtZmxh Z3MpKSkgewogICAgICAgICB6d2Fybm5hbShuYW0sICJjYW5ub3QgY3JlYXRl IHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVyICVzIiwgcG1uYW1lKTsKIAlmZHRh YmxlW2dkYm1fZmRlc2MoZGJmKV0gPSBGRFRfVU5VU0VEOwogCWdkYm1fY2xv c2UoZGJmKTsKQEAgLTEyMiw4ICsxNzEsMjMgQEAgYmluX3p0aWUoY2hhciAq bmFtLCBjaGFyICoqYXJncywgT3B0aW9ucyBvcHMsIFVOVVNFRChpbnQgZnVu YykpCiAgICAgfQogCiAgICAgdGllZF9wYXJhbS0+Z3N1LmggPSAmZ2RibV9o YXNoX2dzdTsKLSAgICB0aWVkX3BhcmFtLT51Lmhhc2gtPnRtcGRhdGEgPSAo dm9pZCAqKWRiZjsKIAorICAgIC8qIEFsbG9jYXRlIHBhcmFtZXRlciBzdWIt Z3N1LCBmaWxsIGRiZiBmaWVsZC4gCisgICAgICogZGJmIGFsbG9jYXRpb24g aXMgMSB0byAxIGFjY29tcGFuaWVkIGJ5CisgICAgICogZ3N1X3NjYWxhcl9l eHQgYWxsb2NhdGlvbi4gKi8KKworICAgIHN0cnVjdCBnc3Vfc2NhbGFyX2V4 dCAqZGJmX2NhcnJpZXIgPSAoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopIHph bGxvYyhzaXplb2Yoc3RydWN0IGdzdV9zY2FsYXJfZXh0KSk7CisgICAgZGJm X2NhcnJpZXItPnN0ZCA9IGdkYm1fZ3N1X2V4dC5zdGQ7CisgICAgZGJmX2Nh cnJpZXItPmRiZiA9IGRiZjsKKyAgICB0aWVkX3BhcmFtLT51Lmhhc2gtPnRt cGRhdGEgPSAodm9pZCAqKWRiZl9jYXJyaWVyOworCisgICAgLyogRmlsbCBh bHNvIGZpbGUgcGF0aCBmaWVsZCAqLworICAgIGlmICgqcmVzb3VyY2VfbmFt ZSAhPSAnLycpIHsKKyAgICAgICAgLyogQ29kZSBjb3BpZWQgZnJvbSBjaGVj a19hdXRvbG9hZCgpICovCisgICAgICAgIHJlc291cmNlX25hbWUgPSB6aHRy aWNhdChtZXRhZnkoemdldGN3ZCgpLCAtMSwgTUVUQV9IRUFQRFVQKSwgIi8i LCByZXNvdXJjZV9uYW1lKTsKKyAgICAgICAgcmVzb3VyY2VfbmFtZSA9IHhz eW1saW5rKHJlc291cmNlX25hbWUsIDEpOworICAgIH0KKyAgICBkYmZfY2Fy cmllci0+ZGJmaWxlX3BhdGggPSB6dHJkdXAocmVzb3VyY2VfbmFtZSk7CiAg ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2Miw2ICsyMjYsNTMgQEAgYmluX3p1 bnRpZShjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5V U0VEKGludCBmdW5jKSkKIH0KIAogLyoqLworc3RhdGljIGludAorYmluX3pn ZGJtcGF0aChjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywg VU5VU0VEKGludCBmdW5jKSkKK3sKKyAgICBQYXJhbSBwbTsKKyAgICBjaGFy ICpwbW5hbWU7CisKKyAgICBwbW5hbWUgPSAqYXJnczsKKworICAgIGlmICgh cG1uYW1lKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwgInBhcmFtZXRlciBu YW1lICh3aG9zZSBwYXRoIGlzIHRvIGJlIHdyaXR0ZW4gdG8gJFJFUExZKSBp cyByZXF1aXJlZCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg ICBwbSA9IChQYXJhbSkgcGFyYW10YWItPmdldG5vZGUocGFyYW10YWIsIHBt bmFtZSk7CisgICAgaWYoIXBtKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwg Im5vIHN1Y2ggcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7CisgICAgICAgIHJl dHVybiAxOworICAgIH0KKworICAgIGlmIChwbS0+Z3N1LmggIT0gJmdkYm1f aGFzaF9nc3UpIHsKKyAgICAgICAgendhcm5uYW0obmFtLCAibm90IGEgdGll ZCBnZGJtIHBhcmFtZXRlcjogJXMiLCBwbW5hbWUpOworICAgICAgICByZXR1 cm4gMTsKKyAgICB9CisKKyAgICAvKiBQYXJhbm9pYSwgaXQgKndpbGwqIGJl IGFsd2F5cyBzZXQgKi8KKyAgICBpZiAoKChzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKilwbS0+dS5oYXNoLT50bXBkYXRhKS0+ZGJmaWxlX3BhdGgpIHsKKyAg ICAgICAgc2V0c3BhcmFtKCJSRVBMWSIsIHp0cmR1cCgoKHN0cnVjdCBnc3Vf c2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmZpbGVfcGF0 aCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldHNwYXJhbSgiUkVQTFki LCB6dHJkdXAoIiIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor LyoKKyAqIFRoZSBwYXJhbSBpcyBhY3R1YWwgcGFyYW0gaW4gaGFzaCDigJPC oGFsd2F5cywgYmVjYXVzZQorICogZ2V0Z2RibW5vZGUgY3JlYXRlcyBldmVy eSBuZXcga2V5IHNlZW4uIEhvd2V2ZXIsIGl0CisgKiBtaWdodCBiZSBub3Qg UE1fVVBUT0RBVEUgLSB3aGljaCBtZWFucyB0aGF0IGRhdGFiYXNlCisgKiB3 YXNuJ3QgeWV0IHF1ZXJpZWQuCisgKgorICogSXQgd2lsbCBiZSBsZWZ0IGlu IHRoaXMgc3RhdGUgaWYgZGF0YWJhc2UgZG9lc24ndAorICogY29udGFpbiBz dWNoIGtleS4gVGhhdCBtaWdodCBiZSBhIGRyYXdiYWNrLCBtYXliZQorICog c2V0dGluZyB0byBlbXB0eSB2YWx1ZSBoYXMgc2Vuc2UsIGFzIG5vIG90aGVy IHdyaXRlcgorICogY2FuIGV4aXN0LiBUaGlzIHdvdWxkIHJlbW92ZSBzdWJ0 bGUgaGNhbGxvYygxKSBsZWFrLgorICovCisKKy8qKi8KIHN0YXRpYyBjaGFy ICoKIGdkYm1nZXRmbihQYXJhbSBwbSkKIHsKQEAgLTE2OSwxOCArMjgwLDU2 IEBAIGdkYm1nZXRmbihQYXJhbSBwbSkKICAgICBpbnQgcmV0OwogICAgIEdE Qk1fRklMRSBkYmY7CiAKLSAgICBrZXkuZHB0ciA9IHBtLT5ub2RlLm5hbTsK LSAgICBrZXkuZHNpemUgPSBzdHJsZW4oa2V5LmRwdHIpOworICAgIC8qIEtl eSBhbHJlYWR5IHJldHJpZXZlZD8gVGhlcmUgaXMgbm8gc2Vuc2Ugb2YgYXNr aW5nIHRoZQorICAgICAqIGRhdGFiYXNlIGFnYWluLCBiZWNhdXNlOgorICAg ICAqIC0gdGhlcmUgY2FuIGJlIG9ubHkgbXVsdGlwbGUgcmVhZGVycworICAg ICAqIC0gc28sIG5vIHdyaXRlciArIHJlYWRlciB1c2UgaXMgYWxsb3dlZAor ICAgICAqCisgICAgICogVGh1czoKKyAgICAgKiAtIGlmIHdlIGFyZSB3cml0 ZXJzLCB3ZSBmb3Igc3VyZSBoYXZlIG5ld2VzdCBjb3B5IG9mIGRhdGEKKyAg ICAgKiAtIGlmIHdlIGFyZSByZWFkZXJzLCB3ZSBmb3Igc3VyZSBoYXZlIG5l d2VzdCBjb3B5IG9mIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoIHBtLT5ub2Rl LmZsYWdzICYgUE1fVVBUT0RBVEUgKSB7CisgICAgICAgIHJldHVybiBwbS0+ dS5zdHIgPyBwbS0+dS5zdHIgOiAoY2hhciAqKSBoY2FsbG9jKDEpOworICAg IH0KKworICAgIC8qIFVubWV0YWZ5IGtleS4gR0RCTSBmaXRzIG5pY2UgaW50 byB0aGlzCisgICAgICogcHJvY2VzcywgYXMgaXQgdXNlcyBsZW5ndGggb2Yg ZGF0YSAqLworICAgIGludCB1bWxlbiA9IDA7CisgICAgY2hhciAqdW1rZXkg PSB1bm1ldGFmeV96YWxsb2MocG0tPm5vZGUubmFtLCZ1bWxlbik7CisKKyAg ICBrZXkuZHB0ciA9IHVta2V5OworICAgIGtleS5kc2l6ZSA9IHVtbGVuOwor CisgICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilwbS0+Z3N1 LnMpLT5kYmY7CisKKyAgICBpZigocmV0ID0gZ2RibV9leGlzdHMoZGJmLCBr ZXkpKSkgeworICAgICAgICAvKiBXZSBoYXZlIGRhdGEg4oCTIHN0b3JlIGl0 LCByZXR1cm4gaXQgKi8KKyAgICAgICAgcG0tPm5vZGUuZmxhZ3MgfD0gUE1f VVBUT0RBVEU7CiAKLSAgICBkYmYgPSAoR0RCTV9GSUxFKShwbS0+dS5oYXNo LT50bXBkYXRhKTsKLSAgICByZXQgPSBnZGJtX2V4aXN0cyhkYmYsIGtleSk7 Ci0gICAgaWYocmV0KSB7CiAgICAgICAgIGNvbnRlbnQgPSBnZGJtX2ZldGNo KGRiZiwga2V5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50LmRw dHIgPSBkdXBzdHJpbmcoIiIpOworCisgICAgICAgIC8qIEVuc3VyZSB0aGVy ZSdzIG5vIGxlYWsgKi8KKyAgICAgICAgaWYgKHBtLT51LnN0cikgeworICAg ICAgICAgICAgenNmcmVlKHBtLT51LnN0cik7CisgICAgICAgIH0KKworICAg ICAgICAvKiBNZXRhZnkgcmV0dXJuZWQgZGF0YS4gQWxsIGZpdHMgLSBtZXRh ZnkKKyAgICAgICAgICogY2FuIG9idGFpbiBkYXRhIGxlbmd0aCB0byBhdm9p ZCB1c2luZyBcMCAqLworICAgICAgICBwbS0+dS5zdHIgPSBtZXRhZnkoY29u dGVudC5kcHRyLCBjb250ZW50LmRzaXplLCBNRVRBX0FMTE9DKTsKKworICAg ICAgICAvKiBGcmVlIGtleSwgcmVzdG9yaW5nIGl0cyBvcmlnaW5hbCBsZW5n dGggKi8KKyAgICAgICAgenNmcmVlKHVta2V5KTsKKworICAgICAgICAvKiBD YW4gcmV0dXJuIHBvaW50ZXIsIGNvcnJlY3RseSBzYXZlZCBpbnNpZGUgaGFz aCAqLworICAgICAgICByZXR1cm4gcG0tPnUuc3RyOwogICAgIH0KIAotICAg IHJldHVybiBjb250ZW50LmRwdHI7CisgICAgLyogRnJlZSBrZXkgKi8KKyAg ICB6c2ZyZWUodW1rZXkpOworCisgICAgLyogQ2FuIHRoaXMgYmUgIiIgPyAq LworICAgIHJldHVybiAoY2hhciAqKSBoY2FsbG9jKDEpOwogfQogCiAvKiov CkBAIC0xOTAsNzggKzMzOSwxMjYgQEAgZ2RibXNldGZuKFBhcmFtIHBtLCBj aGFyICp2YWwpCiAgICAgZGF0dW0ga2V5LCBjb250ZW50OwogICAgIEdEQk1f RklMRSBkYmY7CiAKLSAgICBrZXkuZHB0ciA9IHBtLT5ub2RlLm5hbTsKLSAg ICBrZXkuZHNpemUgPSBzdHJsZW4oa2V5LmRwdHIpOwotICAgIGNvbnRlbnQu ZHB0ciA9IHZhbDsKLSAgICBjb250ZW50LmRzaXplID0gc3RybGVuKGNvbnRl bnQuZHB0cik7CisgICAgLyogU2V0IGlzIGRvbmUgb24gcGFyYW1ldGVyIGFu ZCBvbiBkYXRhYmFzZS4KKyAgICAgKiBTZWUgdGhlIGFsbG93ZWQgd29ya2Vy cyAvIHJlYWRlcnMgY29tbWVudAorICAgICAqIGF0IGdkYm1nZXRmbigpICov CisKKyAgICAvKiBQYXJhbWV0ZXIgKi8KKyAgICBpZiAocG0tPnUuc3RyKSB7 CisgICAgICAgIHpzZnJlZShwbS0+dS5zdHIpOworICAgICAgICBwbS0+dS5z dHIgPSBOVUxMOworICAgICAgICBwbS0+bm9kZS5mbGFncyAmPSB+KFBNX1VQ VE9EQVRFKTsKKyAgICB9CisKKyAgICBpZiAodmFsKSB7CisgICAgICAgIHBt LT51LnN0ciA9IHp0cmR1cCh2YWwpOworICAgICAgICBwbS0+bm9kZS5mbGFn cyB8PSBQTV9VUFRPREFURTsKKyAgICB9CisKKyAgICAvKiBEYXRhYmFzZSAq LworICAgIGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPmdz dS5zKS0+ZGJmOworICAgIGlmIChkYmYpIHsKKyAgICAgICAgaW50IHVtbGVu ID0gMDsKKyAgICAgICAgY2hhciAqdW1rZXkgPSB1bm1ldGFmeV96YWxsb2Mo cG0tPm5vZGUubmFtLCZ1bWxlbik7CiAKLSAgICBkYmYgPSAoR0RCTV9GSUxF KShwbS0+dS5oYXNoLT50bXBkYXRhKTsKLSAgICAodm9pZClnZGJtX3N0b3Jl KGRiZiwga2V5LCBjb250ZW50LCBHREJNX1JFUExBQ0UpOworICAgICAgICBr ZXkuZHB0ciA9IHVta2V5OworICAgICAgICBrZXkuZHNpemUgPSB1bWxlbjsK KworICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICAvKiBVbm1ldGFm eSB3aXRoIGV4YWN0IHphbGxvYyBzaXplICovCisgICAgICAgICAgICBjaGFy ICp1bXZhbCA9IHVubWV0YWZ5X3phbGxvYyh2YWwsJnVtbGVuKTsKKworICAg ICAgICAgICAgLyogU3RvcmUgKi8KKyAgICAgICAgICAgIGNvbnRlbnQuZHB0 ciA9IHVtdmFsOworICAgICAgICAgICAgY29udGVudC5kc2l6ZSA9IHVtbGVu OworICAgICAgICAgICAgKHZvaWQpZ2RibV9zdG9yZShkYmYsIGtleSwgY29u dGVudCwgR0RCTV9SRVBMQUNFKTsKKworICAgICAgICAgICAgLyogRnJlZSAq LworICAgICAgICAgICAgenNmcmVlKHVtdmFsKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICh2b2lkKWdkYm1fZGVsZXRlKGRiZiwga2V5KTsK KyAgICAgICAgfQorCisgICAgICAgIC8qIEZyZWUga2V5ICovCisgICAgICAg IHpzZnJlZSh1bWtleSk7CisgICAgfQogfQogCiAvKiovCiBzdGF0aWMgdm9p ZAogZ2RibXVuc2V0Zm4oUGFyYW0gcG0sIFVOVVNFRChpbnQgdW0pKQogewot ICAgIGRhdHVtIGtleTsKLSAgICBHREJNX0ZJTEUgZGJmOwotCi0gICAga2V5 LmRwdHIgPSBwbS0+bm9kZS5uYW07Ci0gICAga2V5LmRzaXplID0gc3RybGVu KGtleS5kcHRyKTsKLQotICAgIGRiZiA9IChHREJNX0ZJTEUpKHBtLT51Lmhh c2gtPnRtcGRhdGEpOwotICAgICh2b2lkKWdkYm1fZGVsZXRlKGRiZiwga2V5 KTsKKyAgICAvKiBTZXQgd2l0aCBOVUxMICovCisgICAgZ2RibXNldGZuKHBt LCBOVUxMKTsKIH0KIAogLyoqLwogc3RhdGljIEhhc2hOb2RlCiBnZXRnZGJt bm9kZShIYXNoVGFibGUgaHQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAg aW50IGxlbjsKLSAgICBjaGFyICpuYW1ldTsKLSAgICBQYXJhbSBwbSA9IE5V TEw7Ci0KLSAgICBuYW1ldSA9IGR1cHN0cmluZyhuYW1lKTsKLSAgICB1bm1l dGFmeShuYW1ldSwgJmxlbik7Ci0KLSAgICBwbSA9IChQYXJhbSkgaGNhbGxv YyhzaXplb2Yoc3RydWN0IHBhcmFtKSk7Ci0gICAgcG0tPm5vZGUubmFtID0g bmFtZXU7Ci0gICAgcG0tPm5vZGUuZmxhZ3MgPSBQTV9TQ0FMQVI7Ci0gICAg cG0tPmdzdS5zID0gJmdkYm1fZ3N1OwotICAgIHBtLT51Lmhhc2ggPSBodDsK KyAgICBIYXNoTm9kZSBobiA9IGdldGhhc2hub2RlMiggaHQsIG5hbWUgKTsK KyAgICBQYXJhbSB2YWxfcG0gPSAoUGFyYW0pIGhuOworCisgICAgLyogRW50 cnkgZm9yIGtleSBkb2Vzbid0IGV4aXN0PyBDcmVhdGUgaXQgbm93LAorICAg ICAqIGl0IHdpbGwgYmUgaW50ZXJmYWNpbmcgYmV0d2VlbiB0aGUgZGF0YWJh c2UKKyAgICAgKiBhbmQgWnNoIC0gdGhyb3VnaCBzcGVjaWFsIGdkYm1fZ3N1 LiBTbywgYW55CisgICAgICogc2VlbiBrZXkgcmVzdWx0cyBpbiBuZXcgaW50 ZXJmYWNpbmcgcGFyYW1ldGVyLgorICAgICAqCisgICAgICogUHJldmlvdXMg Y29kZSB3YXMgcmV0dXJuaW5nIGhlYXAgYXJlbmEgUGFyYW0KKyAgICAgKiB0 aGF0IHdhc24ndCBhY3R1YWxseSBhZGRlZCB0byB0aGUgaGFzaC4gSXQgd2Fz CisgICAgICogcGxhaW5seSBuYW1lIC8gZGF0YWJhc2Uta2V5IGhvbGRlci4g SGVyZSB3ZQorICAgICAqIGFkZCB0aGUgUGFyYW0gdG8gaXRzIGhhc2gsIGl0 IGlzIG5vdCBQTV9VUFRPREFURS4KKyAgICAgKiBJdCB3aWxsIGJlIGxvYWRl ZCBmcm9tIGRhdGFiYXNlICphbmQgZmlsbGVkKgorICAgICAqIG9yIGxlZnQg aW4gdGhhdCBzdGF0ZSBpZiB0aGUgZGF0YWJhc2UgZG9lc24ndAorICAgICAq IGNvbnRhaW4gaXQuCisgICAgICoKKyAgICAgKiBObyBoZWFwIGFyZW5hIG1l bW9yeSBpcyB1c2VkLCBtZW1vcnkgdXNhZ2UgaXMKKyAgICAgKiBub3cgbGlt aXRlZCAtIGJ5IG51bWJlciBvZiBkaXN0aW5jdCBrZXlzIHNlZW4sCisgICAg ICogbm90IGJ5IG51bWJlciBvZiBrZXkgKnVzZXMqLgorICAgICAqICovCisK KyAgICBpZiAoICEgdmFsX3BtICkgeworICAgICAgICB2YWxfcG0gPSAoUGFy YW0pIHpzaGNhbGxvYyggc2l6ZW9mICgqdmFsX3BtKSApOworICAgICAgICB2 YWxfcG0tPm5vZGUuZmxhZ3MgPSBQTV9TQ0FMQVIgfCBQTV9IQVNIRUxFTTsg Lyogbm8gUE1fVVBUT0RBVEUgKi8KKyAgICAgICAgdmFsX3BtLT5nc3UucyA9 IChHc3VTY2FsYXIpIGh0LT50bXBkYXRhOworICAgICAgICBodC0+YWRkbm9k ZSggaHQsIHp0cmR1cCggbmFtZSApLCB2YWxfcG0gKTsgLy8gc2V0cyBwbS0+ bm9kZS5uYW0KKyAgICB9CiAKLSAgICByZXR1cm4gJnBtLT5ub2RlOworICAg IHJldHVybiAoSGFzaE5vZGUpIHZhbF9wbTsKIH0KIAogLyoqLwogc3RhdGlj IHZvaWQKIHNjYW5nZGJta2V5cyhIYXNoVGFibGUgaHQsIFNjYW5GdW5jIGZ1 bmMsIGludCBmbGFncykKIHsKLSAgICBQYXJhbSBwbSA9IE5VTEw7Ci0gICAg ZGF0dW0ga2V5LCBjb250ZW50OwotICAgIEdEQk1fRklMRSBkYmYgPSAoR0RC TV9GSUxFKShodC0+dG1wZGF0YSk7Ci0KLSAgICBwbSA9IChQYXJhbSkgaGNh bGxvYyhzaXplb2Yoc3RydWN0IHBhcmFtKSk7Ci0KLSAgICBwbS0+bm9kZS5m bGFncyA9IFBNX1NDQUxBUjsKLSAgICBwbS0+Z3N1LnMgPSAmbnVsbHNldHNj YWxhcl9nc3U7CisgICAgZGF0dW0ga2V5OworICAgIEdEQk1fRklMRSBkYmYg PSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKWh0LT50bXBkYXRhKS0+ZGJm OwogCisgICAgLyogSXRlcmF0ZSBrZXlzIGFkZGluZyB0aGVtIHRvIGhhc2gs IHNvCisgICAgICogd2UgaGF2ZSBQYXJhbSB0byB1c2UgaW4gYGZ1bmNgICov CiAgICAga2V5ID0gZ2RibV9maXJzdGtleShkYmYpOwogCiAgICAgd2hpbGUo a2V5LmRwdHIpIHsKLQljb250ZW50ID0gZ2RibV9mZXRjaChkYmYsIGtleSk7 Ci0KLQlwbS0+bm9kZS5uYW0gPSBrZXkuZHB0cjsKLQlwbS0+dS5zdHIgPSBj b250ZW50LmRwdHI7Ci0JcG0tPmdzdS5zID0gJm51bGxzZXRzY2FsYXJfZ3N1 OworICAgICAgICAvKiBUaGlzIHJldHVybnMgZGF0YWJhc2UtaW50ZXJmYWNp bmcgUGFyYW0sCisgICAgICAgICAqIGl0IHdpbGwgcmV0dXJuIHUuc3RyIG9y IGZpcnN0IGZldGNoIGRhdGEKKyAgICAgICAgICogaWYgbm90IFBNX1VQVE9E QVRFIChuZXdseSBjcmVhdGVkKSAqLworICAgICAgICBjaGFyICp6a2V5ID0g enRyZHVwcGZ4KGtleS5kcHRyLCBrZXkuZHNpemUpOworICAgICAgICBIYXNo Tm9kZSBobiA9IGdldGdkYm1ub2RlKGh0LCB6a2V5KTsKKyAgICAgICAgenNm cmVlKCB6a2V5ICk7CiAKLQlmdW5jKCZwbS0+bm9kZSwgZmxhZ3MpOworCWZ1 bmMoaG4sIGZsYWdzKTsKIAorICAgICAgICAvKiBJdGVyYXRlIC0gbm8gcHJv YmxlbSBhcyBpbnRlcmZhY2luZyBQYXJhbQorICAgICAgICAgKiB3aWxsIGRv IGF0IG1vc3Qgb25seSBmZXRjaGVzLCBub3Qgc3RvcmVzICovCiAgICAgICAg IGtleSA9IGdkYm1fbmV4dGtleShkYmYsIGtleSk7CiAgICAgfQogCiB9CiAK Ky8qCisgKiBSZXBsYWNlIGRhdGFiYXNlIHdpdGggbmV3IGhhc2gKKyAqLwor CiAvKiovCiBzdGF0aWMgdm9pZAogZ2RibWhhc2hzZXRmbihQYXJhbSBwbSwg SGFzaFRhYmxlIGh0KQpAQCAtMjc0LDcgKzQ3MSw3IEBAIGdkYm1oYXNoc2V0 Zm4oUGFyYW0gcG0sIEhhc2hUYWJsZSBodCkKICAgICBpZiAoIXBtLT51Lmhh c2ggfHwgcG0tPnUuaGFzaCA9PSBodCkKIAlyZXR1cm47CiAKLSAgICBpZiAo IShkYmYgPSAoR0RCTV9GSUxFKShwbS0+dS5oYXNoLT50bXBkYXRhKSkpCisg ICAgaWYgKCEoZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilwbS0+ dS5oYXNoLT50bXBkYXRhKS0+ZGJmKSkKIAlyZXR1cm47CiAKICAgICBrZXkg PSBnZGJtX2ZpcnN0a2V5KGRiZik7CkBAIC0yOTIsNiArNDg5LDkgQEAgZ2Ri bWhhc2hzZXRmbihQYXJhbSBwbSwgSGFzaFRhYmxlIGh0KQogICAgIGlmICgh aHQpCiAJcmV0dXJuOwogCisgICAgIC8qIFB1dCBuZXcgc3RyaW5ncyBpbnRv IGRhdGFiYXNlLCB3YWl0aW5nCisgICAgICAqIGZvciB0aGVpciBpbnRlcmZh Y2luZy1QYXJhbXMgdG8gYmUgY3JlYXRlZCAqLworCiAgICAgZm9yIChpID0g MDsgaSA8IGh0LT5oc2l6ZTsgaSsrKQogCWZvciAoaG4gPSBodC0+bm9kZXNb aV07IGhuOyBobiA9IGhuLT5uZXh0KSB7CiAJICAgIHN0cnVjdCB2YWx1ZSB2 OwpAQCAtMzAxLDE2ICs1MDEsMjkgQEAgZ2RibWhhc2hzZXRmbihQYXJhbSBw bSwgSGFzaFRhYmxlIGh0KQogCSAgICB2LmFyciA9IE5VTEw7CiAJICAgIHYu cG0gPSAoUGFyYW0pIGhuOwogCi0JICAgIGtleS5kcHRyID0gdi5wbS0+bm9k ZS5uYW07Ci0JICAgIGtleS5kc2l6ZSA9IHN0cmxlbihrZXkuZHB0cik7Cisg ICAgICAgICAgICAvKiBVbm1ldGFmeSBrZXkgKi8KKyAgICAgICAgICAgIGlu dCB1bWxlbiA9IDA7CisgICAgICAgICAgICBjaGFyICp1bWtleSA9IHVubWV0 YWZ5X3phbGxvYyh2LnBtLT5ub2RlLm5hbSwmdW1sZW4pOworCisJICAgIGtl eS5kcHRyID0gdW1rZXk7CisJICAgIGtleS5kc2l6ZSA9IHVtbGVuOwogCiAJ ICAgIHF1ZXVlX3NpZ25hbHMoKTsKIAotCSAgICBjb250ZW50LmRwdHIgPSBn ZXRzdHJ2YWx1ZSgmdik7Ci0JICAgIGNvbnRlbnQuZHNpemUgPSBzdHJsZW4o Y29udGVudC5kcHRyKTsKKyAgICAgICAgICAgIC8qIFVubWV0YWZ5ICovCisg ICAgICAgICAgICBjaGFyICp1bXZhbCA9IHVubWV0YWZ5X3phbGxvYyhnZXRz dHJ2YWx1ZSgmdiksJnVtbGVuKTsKIAorICAgICAgICAgICAgLyogU3RvcmUg Ki8KKwkgICAgY29udGVudC5kcHRyID0gdW12YWw7CisJICAgIGNvbnRlbnQu ZHNpemUgPSB1bWxlbjsKIAkgICAgKHZvaWQpZ2RibV9zdG9yZShkYmYsIGtl eSwgY29udGVudCwgR0RCTV9SRVBMQUNFKTsJCiAKKyAgICAgICAgICAgIC8q IEZyZWUgLSB0aGFua3MgdG8gdW5tZXRhZnlfemFsbG9jIHNpemUgb2YKKyAg ICAgICAgICAgICAqIHRoZSBzdHJpbmdzIGlzIGV4YWN0IHphbGxvYyBzaXpl IC0gY2FuCisgICAgICAgICAgICAgKiBwYXNzIHRvIHpzZnJlZSAqLworICAg ICAgICAgICAgenNmcmVlKHVtdmFsKTsKKyAgICAgICAgICAgIHpzZnJlZSh1 bWtleSk7CisKIAkgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAJfQogfQpAQCAt MzE5LDE1ICs1MzIsMTkgQEAgZ2RibWhhc2hzZXRmbihQYXJhbSBwbSwgSGFz aFRhYmxlIGh0KQogc3RhdGljIHZvaWQKIGdkYm11bnRpZShQYXJhbSBwbSkK IHsKLSAgICBHREJNX0ZJTEUgZGJmID0gKEdEQk1fRklMRSkocG0tPnUuaGFz aC0+dG1wZGF0YSk7CisgICAgR0RCTV9GSUxFIGRiZiA9ICgoc3RydWN0IGdz dV9zY2FsYXJfZXh0ICopcG0tPnUuaGFzaC0+dG1wZGF0YSktPmRiZjsKICAg ICBIYXNoVGFibGUgaHQgPSBwbS0+dS5oYXNoOwogCiAgICAgaWYgKGRiZikg eyAvKiBwYXJhbm9pYSAqLwogCWZkdGFibGVbZ2RibV9mZGVzYyhkYmYpXSA9 IEZEVF9VTlVTRUQ7Ci0JZ2RibV9jbG9zZShkYmYpOwotICAgIH0KKyAgICAg ICAgZ2RibV9jbG9zZShkYmYpOwogCi0gICAgaHQtPnRtcGRhdGEgPSBOVUxM OworICAgICAgICAvKiBMZXQgaGFzaCBmaWVsZHMga25vdyB0aGVyZSdzIG5v IGJhY2tlbmQgKi8KKyAgICAgICAgKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQg KilodC0+dG1wZGF0YSktPmRiZiA9IE5VTEw7CisKKyAgICAgICAgLyogUmVt b3ZlIGZyb20gbGlzdCBvZiB0aWVkIHBhcmFtZXRlcnMgKi8KKyAgICAgICAg cmVtb3ZlX3RpZWRfbmFtZShwbS0+bm9kZS5uYW0pOworICAgIH0KIAogICAg IC8qIGZvciBjb21wbGV0ZW5lc3MgLi4uIGNyZWF0ZXNwZWNpYWxoYXNoKCkg c2hvdWxkIGhhdmUgYW4gaW52ZXJzZSAqLwogICAgIGh0LT5nZXRub2RlID0g aHQtPmdldG5vZGUyID0gZ2V0aGFzaG5vZGUyOwpAQCAtMzQyLDggKzU1OSwy MCBAQCBzdGF0aWMgdm9pZAogZ2RibWhhc2h1bnNldGZuKFBhcmFtIHBtLCBV TlVTRUQoaW50IGV4cCkpCiB7CiAgICAgZ2RibXVudGllKHBtKTsKLSAgICAv KiBoYXNoIHRhYmxlIGlzIG5vdyBub3JtYWwsIHNvIHByb2NlZWQgbm9ybWFs bHkuLi4gKi8KKworICAgIC8qIFJlbWVtYmVyIGN1c3RvbSBHU1Ugc3RydWN0 dXJlIGFzc2lnbmVkIHRvCisgICAgICogdS5oYXNoLT50bXBkYXRhIGJlZm9y ZSBoYXNoIGdldHMgZGVsZXRlZCAqLworICAgIHN0cnVjdCBnc3Vfc2NhbGFy X2V4dCAqIGdzdV9leHQgPSBwbS0+dS5oYXNoLT50bXBkYXRhOworCisgICAg LyogVXNlcyBub3JtYWwgdW5zZXR0ZXIuIFdpbGwgZGVsZXRlIGFsbCBvd25l ZAorICAgICAqIHBhcmFtZXRlcnMgYW5kIGFsc28gaGFzaHRhYmxlLiAqLwog ICAgIHBtLT5nc3UuaC0+c2V0Zm4ocG0sIE5VTEwpOworCisgICAgLyogRG9u J3QgbmVlZCBjdXN0b20gR1NVIHN0cnVjdHVyZSB3aXRoIGl0cworICAgICAq IEdEQk1fRklMRSBwb2ludGVyIGFueW1vcmUgKi8KKyAgICB6c2ZyZWUoIGdz dV9leHQtPmRiZmlsZV9wYXRoICk7CisgICAgemZyZWUoIGdzdV9leHQsIHNp emVvZihzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQpKTsKKwogICAgIHBtLT5ub2Rl LmZsYWdzIHw9IFBNX1VOU0VUOwogfQogCkBAIC0zNTUsNyArNTg0LDcgQEAg c3RhdGljIHN0cnVjdCBmZWF0dXJlcyBtb2R1bGVfZmVhdHVyZXMgPSB7CiAg ICAgYmludGFiLCBzaXplb2YoYmludGFiKS9zaXplb2YoKmJpbnRhYiksCiAg ICAgTlVMTCwgMCwKICAgICBOVUxMLCAwLAotICAgIE5VTEwsIDAsCisgICAg cGF0YWIsIHNpemVvZihwYXRhYikvc2l6ZW9mKCpwYXRhYiksCiAgICAgMAog fTsKIApAQCAtMzg1LDYgKzYxNCw3IEBAIGVuYWJsZXNfKE1vZHVsZSBtLCBp bnQgKiplbmFibGVzKQogaW50CiBib290XyhVTlVTRUQoTW9kdWxlIG0pKQog eworICAgIHpnZGJtX3RpZWQgPSB6c2hjYWxsb2MoKDEpICogc2l6ZW9mKGNo YXIgKikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zOTIsNiArNjIyLDcg QEAgYm9vdF8oVU5VU0VEKE1vZHVsZSBtKSkKIGludAogY2xlYW51cF8oTW9k dWxlIG0pCiB7CisgICAgLyogVGhpcyBmcmVlcyBgemdkYm1fdGllZGAgKi8K ICAgICByZXR1cm4gc2V0ZmVhdHVyZWVuYWJsZXMobSwgJm1vZHVsZV9mZWF0 dXJlcywgTlVMTCk7CiB9CiAKQEAgLTQwMSwzICs2MzIsMTM3IEBAIGZpbmlz aF8oVU5VU0VEKE1vZHVsZSBtKSkKIHsKICAgICByZXR1cm4gMDsKIH0KKwor LyoqKioqKioqKioqKioqKioqKioqKgorICogVXRpbGl0eSBmdW5jdGlvbnMg KgorICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFBhcmFtIGNy ZWF0ZWhhc2goIGNoYXIgKm5hbWUsIGludCBmbGFncyApIHsKKyAgICBQYXJh bSBwbTsKKyAgICBIYXNoVGFibGUgaHQ7CisKKyAgICBwbSA9IGNyZWF0ZXBh cmFtKG5hbWUsIFBNX1NQRUNJQUwgfCBQTV9IQVNIRUQpOworICAgIGlmICgh cG0pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYg KHBtLT5vbGQpCisJcG0tPmxldmVsID0gbG9jYWxsZXZlbDsKKworICAgIC8q IFRoaXMgY3JlYXRlcyBzdGFuZGFyZCBoYXNoLiAqLworICAgIGh0ID0gcG0t PnUuaGFzaCA9IG5ld3BhcmFtdGFibGUoMzIsIG5hbWUpOworICAgIGlmICgh cG0tPnUuaGFzaCkgeworICAgICAgICBwYXJhbXRhYi0+cmVtb3Zlbm9kZShw YXJhbXRhYiwgbmFtZSk7CisgICAgICAgIHBhcmFtdGFiLT5mcmVlbm9kZSgm cG0tPm5vZGUpOworICAgICAgICB6d2Fybm5hbShuYW1lLCAiT3V0IG9mIG1l bW9yeSB3aGVuIGFsbG9jYXRpbmcgaGFzaCIpOworICAgIH0KKworICAgIC8q IFRoZXNlIHByb3ZpZGUgc3BlY2lhbCBmZWF0dXJlcyAqLworICAgIGh0LT5n ZXRub2RlID0gaHQtPmdldG5vZGUyID0gZ2V0Z2RibW5vZGU7CisgICAgaHQt PnNjYW50YWIgPSBzY2FuZ2RibWtleXM7CisKKyAgICByZXR1cm4gcG07Cit9 CisKKy8qCisgKiBBZGRzIHBhcmFtZXRlciBuYW1lIHRvIGB6Z2RibV90aWVk YAorICovCisKK3N0YXRpYyBpbnQgYXBwZW5kX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApIHsKKyAgICBpbnQgb2xkX2xlbiA9IGFycmxlbih6Z2Ri bV90aWVkKTsKKyAgICBjaGFyICoqbmV3X3pnZGJtX3RpZWQgPSB6c2hjYWxs b2MoIChvbGRfbGVuKzIpICogc2l6ZW9mKGNoYXIgKikpOworCisgICAgLyog Q29weSAqLworICAgIGNoYXIgKipwID0gemdkYm1fdGllZDsKKyAgICBjaGFy ICoqZHN0ID0gbmV3X3pnZGJtX3RpZWQ7CisgICAgd2hpbGUgKCpwKSB7Cisg ICAgICAgICpkc3QrKyA9ICpwKys7CisgICAgfQorCisgICAgLyogQXBwZW5k IG5ldyBvbmUgKi8KKyAgICAqZHN0ID0genRyZHVwKG5hbWUpOworCisgICAg LyogU3Vic3RpdHV0ZSwgZnJlZSBvbGQgb25lICovCisgICAgemZyZWUoemdk Ym1fdGllZCwgc2l6ZW9mKGNoYXIgKikgKiAob2xkX2xlbiArIDEpKTsKKyAg ICB6Z2RibV90aWVkID0gbmV3X3pnZGJtX3RpZWQ7CisKKyAgICByZXR1cm4g MDsKK30KKworLyoKKyAqIFJlbW92ZXMgcGFyYW1ldGVyIG5hbWUgZnJvbSBg emdkYm1fdGllZGAKKyAqLworCitzdGF0aWMgaW50IHJlbW92ZV90aWVkX25h bWUoIGNvbnN0IGNoYXIgKm5hbWUgKSB7CisgICAgaW50IG9sZF9sZW4gPSBh cnJsZW4oemdkYm1fdGllZCk7CisKKyAgICAvKiBUd28gc3RhZ2UsIHRvIGFs d2F5cyBoYXZlIGFycmxlbigpID09IHpmcmVlLXNpemUgLSAxLgorICAgICAq IENvdWxkIGRvIGFsbG9jYXRpb24gYW5kIHJldmVydCB3aGVuIGBub3QgZm91 bmRgLCBidXQKKyAgICAgKiB3aGF0IHdvdWxkIGJlIGJldHRlciBhYm91dCB0 aGF0LiAqLworCisgICAgLyogRmluZCBvbmUgdG8gcmVtb3ZlICovCisgICAg Y2hhciAqKnAgPSB6Z2RibV90aWVkOworICAgIHdoaWxlICgqcCkgeworICAg ICAgICBpZiAoMD09c3RyY21wKG5hbWUsKnApKSB7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICBwKys7CisgICAgfQorCisgICAg LyogQ29weSB4KzEgdG8geCAqLworICAgIHdoaWxlICgqcCkgeworICAgICAg ICAqcD0qKHArMSk7CisgICAgICAgIHArKzsKKyAgICB9CisKKyAgICAvKiBT ZWNvbmQgc3RhZ2UuIFNpemUgY2hhbmdlZD8gT25seSBvbGRfc2l6ZS0xCisg ICAgICogY2hhbmdlIGlzIHBvc3NpYmxlLCBidXQuLiBwYXJhbm9pYSB3YXkg Ki8KKyAgICBpbnQgbmV3X2xlbiA9IGFycmxlbih6Z2RibV90aWVkKTsKKyAg ICBpZiAobmV3X2xlbiAhPSBvbGRfbGVuKSB7CisgICAgICAgIGNoYXIgKipu ZXdfemdkYm1fdGllZCA9IHpzaGNhbGxvYygobmV3X2xlbisxKSAqIHNpemVv ZihjaGFyICopKTsKKworICAgICAgICAvKiBDb3B5ICovCisgICAgICAgIHAg PSB6Z2RibV90aWVkOworICAgICAgICBjaGFyICoqZHN0ID0gbmV3X3pnZGJt X3RpZWQ7CisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgKmRz dCsrID0gKnArKzsKKyAgICAgICAgfQorICAgICAgICAqZHN0ID0gTlVMTDsK KworICAgICAgICAvKiBTdWJzdGl0dXRlLCBmcmVlIG9sZCBvbmUgKi8KKyAg ICAgICAgemZyZWUoemdkYm1fdGllZCwgc2l6ZW9mKGNoYXIgKikgKiAob2xk X2xlbiArIDEpKTsKKyAgICAgICAgemdkYm1fdGllZCA9IG5ld196Z2RibV90 aWVkOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogVW5t ZXRhZnkgdGhhdDoKKyAqIC0gZHVwbGljYXRlcyBidWZlciB0byB3b3JrIG9u IGl0LAorICogLSBkb2VzIHphbGxvYyBvZiBleGFjdCBzaXplIGZvciB0aGUg bmV3IHN0cmluZywKKyAqIC0gcmVzdG9yZXMgd29yayBidWZmZXIgdG8gb3Jp Z2luYWwgY29udGVudCwgdG8gcmVzdG9yZSBzdHJsZW4KKyAqCisgKiBObyB6 c2ZyZWUoKS1jb25mdXNpbmcgc3RyaW5nIHdpbGwgYmUgcHJvZHVjZWQuCisg Ki8KK2NoYXIgKnVubWV0YWZ5X3phbGxvYyhjb25zdCBjaGFyICp0b19jb3B5 LCBpbnQgKm5ld19sZW4pIHsKKyAgICBjaGFyICp3b3JrLCAqdG9fcmV0dXJu OworICAgIGludCBteV9uZXdfbGVuID0gMDsKKworICAgIHdvcmsgPSB6dHJk dXAodG9fY29weSk7CisgICAgd29yayA9IHVubWV0YWZ5KHdvcmssJm15X25l d19sZW4pOworCisgICAgaWYgKG5ld19sZW4pCisgICAgICAgICpuZXdfbGVu ID0gbXlfbmV3X2xlbjsKKworICAgIC8qIFRoaXMgc3RyaW5nIGNhbiBiZSBj b3JyZWN0bHkgenNmcmVlKCktZCAqLworICAgIHRvX3JldHVybiA9IChjaGFy ICopIHphbGxvYygobXlfbmV3X2xlbisxKSpzaXplb2YoY2hhcikpOworICAg IG1lbWNweSh0b19yZXR1cm4sIHdvcmssIHNpemVvZihjaGFyKSpteV9uZXdf bGVuKTsgLy8gbWVtY3B5IGhhbmRsZXMgJCdcMCcKKyAgICB0b19yZXR1cm5b bXlfbmV3X2xlbl09J1wwJzsKKworICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwg c3RybGVuIGFuZCBjb3JyZWN0bHkgZnJlZSAqLworICAgIHN0cmNweSh3b3Jr LCB0b19jb3B5KTsKKyAgICB6c2ZyZWUod29yayk7CisKKyAgICByZXR1cm4g dG9fcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvU3JjL01vZHVsZXMvZGJfZ2Ri bS5tZGQgYi9TcmMvTW9kdWxlcy9kYl9nZGJtLm1kZAppbmRleCBjZTc5MjZi Li4yMTBjMjIxIDEwMDY0NAotLS0gYS9TcmMvTW9kdWxlcy9kYl9nZGJtLm1k ZAorKysgYi9TcmMvTW9kdWxlcy9kYl9nZGJtLm1kZApAQCAtNyw2ICs3LDYg QEAgZmkKICcKIGxvYWQ9bm8KIAotYXV0b2ZlYXR1cmVzPSJiOnp0aWUgYjp6 dW50aWUiCithdXRvZmVhdHVyZXM9ImI6enRpZSBiOnp1bnRpZSBiOnpnZGJt cGF0aCBwOnpnZGJtX3RpZWQiCiAKIG9iamVjdHM9ImRiX2dkYm0ubyIKZGlm ZiAtLWdpdCBhL1Rlc3QvVjExZGJfZ2RibS56dHN0IGIvVGVzdC9WMTFkYl9n ZGJtLnp0c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YTEwNzZkYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3QvVjExZGJfZ2RibS56 dHN0CkBAIC0wLDAgKzEsMjg1IEBACisjIFRlc3RzIGZvciB0aGUgenNoL3Bh cmFtL3ByaXZhdGUgbW9kdWxlCisKKyVwcmVwCisKKyBtb2RuYW1lPSJ6c2gv ZGIvZ2RibSIKKyBkYmZpbGU9ZGIuZ2RibQorIGlmICEgem1vZGxvYWQgJG1v ZG5hbWUgOyB0aGVuCisgICBaVFNUX3VuaW1wbGVtZW50ZWQ9ImNhbid0IGxv YWQgJG1vZG5hbWUgbW9kdWxlIGZvciB0ZXN0aW5nIgorIGZpCisgcm0gLWYg ZGIuZ2RibQorCisldGVzdAorCisgKHptb2Rsb2FkIC11ICRtb2RuYW1lICYm IHptb2Rsb2FkICRtb2RuYW1lKQorMDp1bmxvYWQgYW5kIHJlbG9hZCB0aGUg bW9kdWxlIHdpdGhvdXQgY3Jhc2hpbmcKKworIHp0aWUgLWQgZGIvZ2RibSAt ZiAkZGJmaWxlIGRiYXNlCisgenVudGllIGRiYXNlCiswOmNyZWF0ZSB0aGUg ZGF0YWJhc2UKKworIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRi YXNlCisgenVudGllIC11IGRiYXNlCiswOm9wZW4gdGhlIGRhdGFiYXNlIHJl YWQtb25seQorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UK KyBkYmFzZVt0ZXN0a2V5XT10ZXN0ZGF0YQorIHp1bnRpZSBkYmFzZQorIHp0 aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAkZGJh c2VbdGVzdGtleV0KKyB6dW50aWUgLXUgZGJhc2UKKzA6c3RvcmUga2V5IGlu IGRhdGFiYXNlCis+dGVzdGRhdGEKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAk ZGJmaWxlIGRiYXNlMgorIHVuc2V0ICdkYmFzZTJbdGVzdGtleV0nCisgenVu dGllIGRiYXNlMgorIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNl CisgZWNobyAkZGJhc2VbdGVzdGtleV0KKyB6dW50aWUgZGJhc2UKKzA6cmVt b3ZlIGtleSBmcm9tIGRhdGFiYXNlIChkaWZmZXJlbnQgdmFyaWFibGVzKQor PgorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFz ZVt0ZXN0a2V5XT10ZXN0ZGF0YQorIHp1bnRpZSBkYmFzZQorIHp0aWUgLXIg LWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAkZGJhc2VbdGVz dGtleV0KKyB6dW50aWUgLXUgZGJhc2UKKyB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQorIHVuc2V0ICdkYmFzZVt0ZXN0a2V5XScKKyB6dW50 aWUgZGJhc2UKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFz ZQorIGVjaG8gJGRiYXNlW3Rlc3RrZXldCisgenVudGllIC11IGRiYXNlCisw OnN0b3JlICYgcmVtb3ZlIGtleSBmcm9tIGRhdGFiYXNlICh0aGUgc2FtZSB2 YXJpYWJsZXMpCis+dGVzdGRhdGEKKz4KKworIHp0aWUgLWQgZGIvZ2RibSAt ZiAkZGJmaWxlIGRiYXNlCisgZGJhc2VbdGVzdGtleV09dGVzdGRhdGEKKyBk YmFzZVt0ZXN0a2V5Ml09JGRiYXNlW3Rlc3RrZXldCisgZGJhc2VbdGVzdGtl eTNdPSRkYmFzZVt0ZXN0a2V5XXgkZGJhc2VbdGVzdGtleTJdCisgenVudGll IGRiYXNlCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBl Y2hvICRkYmFzZVt0ZXN0a2V5XQorIGVjaG8gJGRiYXNlW3Rlc3RrZXkyXQor IGVjaG8gJGRiYXNlW3Rlc3RrZXkzXQorIHp1bnRpZSBkYmFzZQorMDpzdG9y ZSAyIGtleXMgZmV0Y2hpbmcgMXN0Cis+dGVzdGRhdGEKKz50ZXN0ZGF0YQor PnRlc3RkYXRheHRlc3RkYXRhCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRi ZmlsZSBkYmFzZQorIHZhbD0kZGJhc2VbdGVzdGtleTJdCisgdW5zZXQgJ2Ri YXNlW3Rlc3RrZXkyXScKKyBlY2hvICR2YWwKKyB6dW50aWUgZGJhc2UKKzA6 dW5zZXQga2V5IHRoYXQgd2FzIGZldGNoZWQKKz50ZXN0ZGF0YQorCisgenRp ZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBwcmludCAtcmwg LS0gIiR7KGt2KWRiYXNlW0BdfSIKKyB6dW50aWUgLXUgZGJhc2UKKzA6c2Nh biByZWFkLW9ubHkgdGllZCBoYXNoCis+dGVzdGtleQorPnRlc3RkYXRhCis+ dGVzdGtleTMKKz50ZXN0ZGF0YXh0ZXN0ZGF0YQorCisgenRpZSAtZCBkYi9n ZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBsb2NhbCAtYSBhcnIKKyBhcnI9KCAi JHsoa3YpZGJhc2VbQF19IiApCisgcHJpbnQgLXJsIC0tICIke2FycltAXX0i CisgenVudGllIGRiYXNlCiswOmRpZmZlcmVudCBzY2FuLCBhbHNvIHJlYWQt d3JpdGUgbW9kZQorPnRlc3RrZXkKKz50ZXN0ZGF0YQorPnRlc3RrZXkzCis+ dGVzdGRhdGF4dGVzdGRhdGEKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJm aWxlIGRiYXNlCisgZGJhc2U9KCBhIGIgYyBkICkKKyB6dW50aWUgZGJhc2UK KyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIHByaW50IC1y bCAtLSAiJHsoa3YpZGJhc2VbQF19IgorIHp1bnRpZSBkYmFzZQorMDpyZXBs YWNlIGhhc2ggLyBkYXRhYmFzZSwgc2NhbgorPmMKKz5kCis+YQorPmIKKwor IHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgbG9jYWwgLWEg YXJyCisgYXJyPSggIiR7ZGJhc2VbQF19IiApCisgcHJpbnQgLXJsIC0tICIk e2FycltAXX0iCisgenVudGllIGRiYXNlCiswOnNjYW4gd2l0aCBubyAoa3Yp Cis+ZAorPmIKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNl CisgcHJpbnQgLXJsIC0tICIkeyhrKWRiYXNlW0BdfSIKKyB6dW50aWUgZGJh c2UKKzA6c2NhbiB3aXRoIGtleXMgb25seSAoaykKKz5jCis+YQorCisgenRp ZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBwcmludCAtcmwgLS0g IiR7KHYpZGJhc2VbQF19IgorIHp1bnRpZSBkYmFzZQorMDpzY2FuIHdpdGgg a2V5cyBvbmx5IGV4cGxpY2l0ICh2KQorPmQKKz5iCisKKyBybSAtZiAkZGJm aWxlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UgMj4v ZGV2L251bGwKKzE6cmVhZC1vbmx5IG9wZW4gbm9uLWV4aXN0ZW50IGRhdGFi YXNlCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGRi YXNlKz0oIGEgYiApCisgZWNobyAkZGJhc2VbYV0KKyB6dW50aWUgZGJhc2UK KyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8g JGRiYXNlW2FdCisgcHJpbnQgLXJsIC0tICIkeyhrdilkYmFzZVtAXX0iCisg enVudGllIC11IGRiYXNlCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUg ZGJhc2UKKyBkYmFzZSs9KCBjIGQgKQorIGVjaG8gJGRiYXNlW2FdCisgZWNo byAkZGJhc2VbY10KKyBwcmludCAtcmwgLS0gIiR7KGt2KWRiYXNlW0BdfSIK KyB6dW50aWUgZGJhc2UKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmls ZSBkYmFzZQorIGVjaG8gJGRiYXNlW2FdCisgZWNobyAkZGJhc2VbY10KKyBw cmludCAtcmwgLS0gIiR7KGt2KWRiYXNlW0BdfSIKKyB6dW50aWUgLXUgZGJh c2UKKzA6QXBwZW5kIHdpdGggKz0oICksIGFsc28gd2l0aCBleGlzdGluZyBk YXRhLCBhbHNvIChrdikgc2NhbgorPmIKKz5iCis+YQorPmIKKz5iCis+ZAor PmMKKz5kCis+YQorPmIKKz5iCis+ZAorPmMKKz5kCis+YQorPmIKKworIHp0 aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAkeyh0KWRi YXNlfQorIHp1bnRpZSBkYmFzZQorMDpUeXBlIG9mIHRpZWQgcGFyYW1ldGVy Cis+YXNzb2NpYXRpb24tc3BlY2lhbAorCisgdHlwZXNldCAtZ2EgZGJhc2UK KyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJHso dClkYmFzZX0KKyB6dW50aWUgZGJhc2UKKzA6VHlwZSBvZiB0aWVkIHBhcmFt ZXRlciwgd2l0aCBwcmVjZWRpbmcgdW5zZXQKKz5hc3NvY2lhdGlvbi1zcGVj aWFsCisKKyBsb2NhbCAtYSBkYmFzZQorIHp0aWUgLWQgZGIvZ2RibSAtZiAk ZGJmaWxlIGRiYXNlCisgZWNobyAkeyh0KWRiYXNlfQorIHp1bnRpZSBkYmFz ZQorMDpUeXBlIG9mIHRpZWQgcGFyYW1ldGVyLCB3aXRoIGxvY2FsIHBhcmFt ZXRlciBhbHJlYWR5IGV4aXN0aW5nCis+YXNzb2NpYXRpb24tbG9jYWwtc3Bl Y2lhbAorCisgbG9jYWwgLWEgZGJhc2UKKyBkYmFzZT0oIGZyb21hcnJheSAp CisgKCkgeworICAgICBsb2NhbCAtYSBkYmFzZQorICAgICB6dGllIC1kIGRi L2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorICAgICBlY2hvICR7KHQpZGJhc2V9 CisgICAgIHp1bnRpZSBkYmFzZQorIH0KKyBlY2hvICRkYmFzZVsxXQorIHp0 aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlMgorIGVjaG8gIkNhbiBj b25uZWN0LCBzbyB1bnRpZSBoYXBwZW5lZDoiICRkYmFzZTJbYV0KKyB6dW50 aWUgZGJhc2UyCiswOlRlc3Qgb2YgYXV0b21hdGljIHVudGllICh1c2Ugb2Yg bG9jYWwgc2NvcGUpIGFuZCBvZiBzY29waW5nCis+YXNzb2NpYXRpb24tbG9j YWwtc3BlY2lhbAorPmZyb21hcnJheQorPkNhbiBjb25uZWN0LCBzbyB1bnRp ZSBoYXBwZW5lZDogYgorCisgZWNobyAkemdkYm1fdGllZCAkeyN6Z2RibV90 aWVkfQorIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisg ZWNobyAkemdkYm1fdGllZCAkeyN6Z2RibV90aWVkfQorIHp0aWUgLWQgZGIv Z2RibSAtZiAke2RiZmlsZX0yIGRiYXNlMgorIGVjaG8gJHpnZGJtX3RpZWQg JHsjemdkYm1fdGllZH0KKyB6dW50aWUgLXUgZGJhc2UKKyBlY2hvICR6Z2Ri bV90aWVkICR7I3pnZGJtX3RpZWR9CisgenVudGllIGRiYXNlMgorIGVjaG8g JHpnZGJtX3RpZWQgJHsjemdkYm1fdGllZH0KKzA6emdkYm1fdGllZCBwYXJh bWV0ZXIKKz4wCis+ZGJhc2UgMQorPmRiYXNlIGRiYXNlMiAyCis+ZGJhc2Uy IDEKKz4wCisKKyB1bnNldCB6Z2RibV90aWVkIDI+L2Rldi9udWxsCisxOnVu c2V0IG9mIHJlYWQtb25seSB6Z2RibV90aWVkIHBhcmFtZXRlcgorCisgenRp ZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFzZVvmvKLlrZdd Pea8ouWtlworIGVjaG8gJGRiYXNlW+a8ouWtl10KKyB6dW50aWUgZGJhc2UK KyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8g JGRiYXNlW+a8ouWtl10KKyB6dW50aWUgLXUgZGJhc2UKKzA6VW5pY29kZSB0 ZXN0Cis+5ryi5a2XCis+5ryi5a2XCisKKyBrZXk9ImFiIiQnXDAnImVmIgor IHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZGJhc2VbJGtl eV09dmFsdWUKKyBlY2hvICRkYmFzZVska2V5XQorIHp1bnRpZSBkYmFzZQor IHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAk ZGJhc2VbJGtleV0KKyB6dW50aWUgLXUgZGJhc2UKKyB6dGllIC1kIGRiL2dk Ym0gLWYgJGRiZmlsZSBkYmFzZQorIGRiYXNlWyRrZXldPSRrZXkKKyB6dW50 aWUgZGJhc2UKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQor IFtbICIkZGJhc2VbJGtleV0iID0gIiRrZXkiIF1dICYmIGVjaG8gY29ycmVj dAorIHp1bnRpZSBkYmFzZQorMDpNZXRhZmljYXRpb24gb2YgJCdcMCcKKz52 YWx1ZQorPnZhbHVlCis+Y29ycmVjdAorCisgenRpZSAtZCBkYi9nZGJtIC1m ICRkYmZpbGUgZGJhc2UKKyBkYmFzZT0oIOa8ouWtlyDmvKLlrZcgKQorIGVj aG8gJGRiYXNlW+a8ouWtl10KKyB6dW50aWUgZGJhc2UKKyB6dGllIC1kIGRi L2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJGRiYXNlW+a8ouWtl10K KyB6dW50aWUgZGJhc2UKKyBrZXk9ImFiIiQnXDAnImVmIgorIHp0aWUgLWQg ZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZGJhc2UrPSggJGtleSAka2V5 ICkKKyB6dW50aWUgZGJhc2UKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRi ZmlsZSBkYmFzZQorIFtbICIkZGJhc2VbJGtleV0iID0gIiRrZXkiIF1dICYm IGVjaG8gY29ycmVjdAorIHp1bnRpZSAtdSBkYmFzZQorMDpVbmljb2RlICYg bWV0YWZpY2F0aW9uIHRlc3QsIGRpZmZlcmVudCBoYXNoIGFjY2VzcworPua8 ouWtlworPua8ouWtlworPmNvcnJlY3QKKworJWNsZWFuCisKKyAgcm0gLWYg JHtkYmZpbGV9Kgo= --_----------=_148725510318808272 Content-Disposition: attachment; filename="db_gdbm.c.txt" Content-Id: <1487255042.1880691.e05f34d8eb5be26a6272a4dd5ee2e8d625142a48.27A2DF88@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm.c.txt" LyoKICogZGJfZ2RibS5jIC0gYmluZGluZ3MgZm9yIGdkYm0KICoKICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgenNoLCB0aGUgWiBzaGVsbC4KICoKICogQ29w eXJpZ2h0IChjKSAyMDA4IENsaW50IEFkYW1zCiAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCiAqCiAqIE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3 IFNlYmFzdGlhbiBHbmlhemRvd3NraQogKiBBbGwgcmlnaHRzIHJlc2VydmVk LgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0 IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CiAqIGxpY2Vuc2Ugb3Ig cm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry aWJ1dGUgdGhpcwogKiBzb2Z0d2FyZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2Rp ZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICogcHVy cG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhlIGZvbGxvd2luZwogKiB0d28gcGFyYWdyYXBocyBhcHBlYXIg aW4gYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgogKgogKiBJbiBubyBl dmVudCBzaGFsbCBDbGludCBBZGFtcyBvciB0aGUgWnNoIERldmVsb3BtZW50 CiAqIEdyb3VwIGJlIGxpYWJsZSB0byBhbnkgcGFydHkgZm9yIGRpcmVjdCwg aW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yCiAqIGNvbnNlcXVl bnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIHRoaXMg c29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uLCBldmVuIGlmIFBl dGVyIFN0ZXBoZW5zb24sIFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2gK ICogRGV2ZWxvcG1lbnQgR3JvdXAgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhl IHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgogKgogKiBDbGludCBBZGFt cyBhbmQgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cAogKiBzcGVjaWZpY2Fs bHkgZGlzY2xhaW0gYW55IHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5v dCBsaW1pdGVkIHRvLCB0aGUKICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1l cmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1 cnBvc2UuCiAqIFRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMg b24gYW4gImFzIGlzIiBiYXNpcywgYW5kIFBldGVyCiAqIFN0ZXBoZW5zb24s IFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2ggRGV2ZWxvcG1lbnQgR3Jv dXAgaGF2ZSBubwogKiBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFpbnRlbmFu Y2UsIHN1cHBvcnQsIHVwZGF0ZXMsIGVuaGFuY2VtZW50cywgb3IKICogbW9k aWZpY2F0aW9ucy4KICoKICovCgojaW5jbHVkZSAiZGJfZ2RibS5tZGgiCiNp bmNsdWRlICJkYl9nZGJtLnBybyIKCiNpZm5kZWYgUE1fVVBUT0RBVEUKI2Rl ZmluZSBQTV9VUFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFz IHVwLXRvLWRhdGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KI2Vu ZGlmCgpzdGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50 IGZsYWdzICk7CnN0YXRpYyBpbnQgYXBwZW5kX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApOwpzdGF0aWMgaW50IHJlbW92ZV90aWVkX25hbWUoIGNv bnN0IGNoYXIgKm5hbWUgKTsKY2hhciAqdW5tZXRhZnlfemFsbG9jKGNvbnN0 IGNoYXIgKnRvX2NvcHksIGludCAqbmV3X2xlbik7CgovKgogKiBNYWtlIHN1 cmUgd2UgaGF2ZSBhbGwgdGhlIGJpdHMgSSdtIHVzaW5nIGZvciBtZW1vcnkg bWFwcGluZywgb3RoZXJ3aXNlCiAqIEkgZG9uJ3Qga25vdyB3aGF0IEknbSBk b2luZy4KICovCiNpZiBkZWZpbmVkKEhBVkVfR0RCTV9IKSAmJiBkZWZpbmVk KEhBVkVfR0RCTV9PUEVOKQoKI2luY2x1ZGUgPGdkYm0uaD4KCnN0YXRpYyBj aGFyICpiYWNrdHlwZSA9ICJkYi9nZGJtIjsKCi8qCiAqIExvbmdlciBHU1Ug c3RydWN0dXJlLCB0byBjYXJyeSBHREJNX0ZJTEUgb2Ygb3duaW5nCiAqIGRh dGFiYXNlLiBFdmVyeSBwYXJhbWV0ZXIgKGhhc2ggdmFsdWUpIHJlY2VpdmVz IEdTVQogKiBwb2ludGVyIGFuZCB0aHVzIGFsc28gcmVjZWl2ZXMgR0RCTV9G SUxFIC0gdGhpcyB3YXkKICogcGFyYW1ldGVycyBjYW4gYWNjZXNzIHByb3Bl ciBkYXRhYmFzZS4KICoKICogTWFpbiBIYXNoVGFibGUgcGFyYW1ldGVyIGhh cyB0aGUgc2FtZSBpbnN0YW5jZSBvZgogKiB0aGUgY3VzdG9tIEdTVSBzdHJ1 Y3QgaW4gdS5oYXNoLT50bXBkYXRhIGZpZWxkLgogKiBXaGVuIGRhdGFiYXNl IGlzIGNsb3NlZCwgYGRiZmAgZmllbGQgaXMgc2V0IHRvIE5VTEwKICogYW5k IGhhc2ggdmFsdWVzIGtub3cgdG8gbm90IGFjY2VzcyBkYXRhYmFzZSB3aGVu CiAqIGJlaW5nIHVuc2V0ICh0b3RhbCBwdXJnZSBhdCB6dW50aWUpLgogKgog KiBXaGVuIGRhdGFiYXNlIGNsb3NpbmcgaXMgZW5kZWQsIGN1c3RvbSBHU1Ug c3RydWN0CiAqIGlzIGZyZWVkLiBPbmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3 IGN1c3RvbSBHU1UKICogc3RydWN0IGluc3RhbmNlLgogKi8KCnN0cnVjdCBn c3Vfc2NhbGFyX2V4dCB7CiAgICBzdHJ1Y3QgZ3N1X3NjYWxhciBzdGQ7CiAg ICBHREJNX0ZJTEUgZGJmOwogICAgY2hhciAqZGJmaWxlX3BhdGg7Cn07Cgov KiBTb3VyY2Ugc3RydWN0dXJlIC0gd2lsbCBiZSBjb3BpZWQgdG8gYWxsb2Nh dGVkIG9uZSwKICogd2l0aCBgZGJmYCBmaWxsZWQuIGBkYmZgIGFsbG9jYXRp b24gPC0+IGdzdSBhbGxvY2F0aW9uLiAqLwpzdGF0aWMgY29uc3Qgc3RydWN0 IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9CnsgeyBnZGJtZ2V0Zm4s IGdkYm1zZXRmbiwgZ2RibXVuc2V0Zm4gfSwgMCwgMCB9OwoKLyoqLwpzdGF0 aWMgY29uc3Qgc3RydWN0IGdzdV9oYXNoIGdkYm1faGFzaF9nc3UgPQp7IGhh c2hnZXRmbiwgZ2RibWhhc2hzZXRmbiwgZ2RibWhhc2h1bnNldGZuIH07Cgpz dGF0aWMgc3RydWN0IGJ1aWx0aW4gYmludGFiW10gPSB7CiAgICBCVUlMVElO KCJ6dGllIiwgMCwgYmluX3p0aWUsIDEsIC0xLCAwLCAiZDpmOnIiLCBOVUxM KSwKICAgIEJVSUxUSU4oInp1bnRpZSIsIDAsIGJpbl96dW50aWUsIDEsIC0x LCAwLCAidSIsIE5VTEwpLAogICAgQlVJTFRJTigiemdkYm1wYXRoIiwgMCwg YmluX3pnZGJtcGF0aCwgMSwgLTEsIDAsICIiLCBOVUxMKSwKfTsKCiNkZWZp bmUgUk9BUlJQQVJBTURFRihuYW1lLCB2YXIpIFwKICAgIHsgbmFtZSwgUE1f QVJSQVkgfCBQTV9SRUFET05MWSwgKHZvaWQgKikgdmFyLCBOVUxMLCAgTlVM TCwgTlVMTCwgTlVMTCB9CgovKiBIb2xkcyBuYW1lcyBvZiBhbGwgdGllZCBw YXJhbWV0ZXJzICovCmNoYXIgKip6Z2RibV90aWVkOwoKc3RhdGljIHN0cnVj dCBwYXJhbWRlZiBwYXRhYltdID0gewogICAgUk9BUlJQQVJBTURFRiggInpn ZGJtX3RpZWQiLCAmemdkYm1fdGllZCApLAp9OwoKLyoqLwpzdGF0aWMgaW50 CmJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9wdGlvbnMgb3Bz LCBVTlVTRUQoaW50IGZ1bmMpKQp7CiAgICBjaGFyICpyZXNvdXJjZV9uYW1l LCAqcG1uYW1lOwogICAgR0RCTV9GSUxFIGRiZiA9IE5VTEw7CiAgICBpbnQg cmVhZF93cml0ZSA9IEdEQk1fU1lOQywgcG1mbGFncyA9IFBNX1JFTU9WQUJM RTsKICAgIFBhcmFtIHRpZWRfcGFyYW07CgogICAgaWYoIU9QVF9JU1NFVChv cHMsJ2QnKSkgewogICAgICAgIHp3YXJubmFtKG5hbSwgInlvdSBtdXN0IHBh c3MgYC1kICVzJyIsIGJhY2t0eXBlKTsKCXJldHVybiAxOwogICAgfQogICAg aWYoIU9QVF9JU1NFVChvcHMsJ2YnKSkgewogICAgICAgIHp3YXJubmFtKG5h bSwgInlvdSBtdXN0IHBhc3MgYC1mJyB3aXRoIGEgZmlsZW5hbWUiLCBOVUxM KTsKCXJldHVybiAxOwogICAgfQogICAgaWYgKE9QVF9JU1NFVChvcHMsJ3In KSkgewoJcmVhZF93cml0ZSB8PSBHREJNX1JFQURFUjsKCXBtZmxhZ3MgfD0g UE1fUkVBRE9OTFk7CiAgICB9IGVsc2UgewoJcmVhZF93cml0ZSB8PSBHREJN X1dSQ1JFQVQ7CiAgICB9CgogICAgLyogSGVyZSBzaG91bGQgYmUgYSBsb29r dXAgb2YgdGhlIGJhY2tlbmQgdHlwZSBhZ2FpbnN0CiAgICAgKiBhIHJlZ2lz dHJ5LCBpZiBnZW5lcmFtIERCIG1lY2hhbmlzbSBpcyB0byBiZSBhZGRlZCAq LwogICAgaWYgKHN0cmNtcChPUFRfQVJHKG9wcywgJ2QnKSwgYmFja3R5cGUp ICE9IDApIHsKICAgICAgICB6d2Fybm5hbShuYW0sICJ1bnN1cHBvcnRlZCBi YWNrZW5kIHR5cGUgYCVzJyIsIE9QVF9BUkcob3BzLCAnZCcpKTsKCXJldHVy biAxOwogICAgfQoKICAgIHJlc291cmNlX25hbWUgPSBPUFRfQVJHKG9wcywg J2YnKTsKICAgIHBtbmFtZSA9ICphcmdzOwoKICAgIGlmICgodGllZF9wYXJh bSA9IChQYXJhbSlwYXJhbXRhYi0+Z2V0bm9kZShwYXJhbXRhYiwgcG1uYW1l KSkgJiYKCSEodGllZF9wYXJhbS0+bm9kZS5mbGFncyAmIFBNX1VOU0VUKSkg ewoJLyoKCSAqIFVuc2V0IGFueSBleGlzdGluZyBwYXJhbWV0ZXIuICBOb3Rl IHRoZXJlJ3Mgbm8gaW1wbGljaXQKCSAqICJsb2NhbCIgaGVyZSwgYnV0IGlm IHRoZSBleGlzdGluZyBwYXJhbWV0ZXIgaXMgbG9jYWwKCSAqIHRoZW4gbmV3 IHBhcmFtZXRlciB3aWxsIGJlIGFsc28gbG9jYWwgd2l0aG91dCBmb2xsb3dp bmcKICAgICAgICAgKiB1bnNldC4KCSAqCgkgKiBXZSBuZWVkIHRvIGRvIHRo aXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgREIKCSAqIGluIGNh c2UgdGhpcyB2YXJpYWJsZSBpcyBhbHJlYWR5IHRpZWQgdG8gYSBEQi4KCSAq CgkgKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSB2YXJpYWJsZSBpcyByZWFkb25s eSBvciByZXN0cmljdGVkLgoJICogV2UgY291bGQgY2FsbCB1bnNldHBhcmFt KCkgYW5kIGNoZWNrIGVycmZsYWcgaW5zdGVhZAoJICogb2YgdGhlIHJldHVy biBzdGF0dXMuCgkgKi8KCWlmICh1bnNldHBhcmFtX3BtKHRpZWRfcGFyYW0s IDAsIDEpKQoJICAgIHJldHVybiAxOwogICAgfQoKICAgIGRiZiA9IGdkYm1f b3BlbihyZXNvdXJjZV9uYW1lLCAwLCByZWFkX3dyaXRlLCAwNjY2LCAwKTsK ICAgIGlmKGRiZikgewoJYWRkbW9kdWxlZmQoZ2RibV9mZGVzYyhkYmYpLCBG RFRfTU9EVUxFKTsKICAgICAgICBhcHBlbmRfdGllZF9uYW1lKHBtbmFtZSk7 CiAgICB9IGVsc2UgewoJendhcm5uYW0obmFtLCAiZXJyb3Igb3BlbmluZyBk YXRhYmFzZSBmaWxlICVzIiwgcmVzb3VyY2VfbmFtZSk7CglyZXR1cm4gMTsK ICAgIH0KCiAgICBpZiAoISh0aWVkX3BhcmFtID0gY3JlYXRlaGFzaChwbW5h bWUsIHBtZmxhZ3MpKSkgewogICAgICAgIHp3YXJubmFtKG5hbSwgImNhbm5v dCBjcmVhdGUgdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXIgJXMiLCBwbW5hbWUp OwoJZmR0YWJsZVtnZGJtX2ZkZXNjKGRiZildID0gRkRUX1VOVVNFRDsKCWdk Ym1fY2xvc2UoZGJmKTsKCXJldHVybiAxOwogICAgfQoKICAgIHRpZWRfcGFy YW0tPmdzdS5oID0gJmdkYm1faGFzaF9nc3U7CgogICAgLyogQWxsb2NhdGUg cGFyYW1ldGVyIHN1Yi1nc3UsIGZpbGwgZGJmIGZpZWxkLiAKICAgICAqIGRi ZiBhbGxvY2F0aW9uIGlzIDEgdG8gMSBhY2NvbXBhbmllZCBieQogICAgICog Z3N1X3NjYWxhcl9leHQgYWxsb2NhdGlvbi4gKi8KCiAgICBzdHJ1Y3QgZ3N1 X3NjYWxhcl9leHQgKmRiZl9jYXJyaWVyID0gKHN0cnVjdCBnc3Vfc2NhbGFy X2V4dCAqKSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCkp OwogICAgZGJmX2NhcnJpZXItPnN0ZCA9IGdkYm1fZ3N1X2V4dC5zdGQ7CiAg ICBkYmZfY2Fycmllci0+ZGJmID0gZGJmOwogICAgdGllZF9wYXJhbS0+dS5o YXNoLT50bXBkYXRhID0gKHZvaWQgKilkYmZfY2FycmllcjsKCiAgICAvKiBG aWxsIGFsc28gZmlsZSBwYXRoIGZpZWxkICovCiAgICBpZiAoKnJlc291cmNl X25hbWUgIT0gJy8nKSB7CiAgICAgICAgLyogQ29kZSBjb3BpZWQgZnJvbSBj aGVja19hdXRvbG9hZCgpICovCiAgICAgICAgcmVzb3VyY2VfbmFtZSA9IHpo dHJpY2F0KG1ldGFmeSh6Z2V0Y3dkKCksIC0xLCBNRVRBX0hFQVBEVVApLCAi LyIsIHJlc291cmNlX25hbWUpOwogICAgICAgIHJlc291cmNlX25hbWUgPSB4 c3ltbGluayhyZXNvdXJjZV9uYW1lLCAxKTsKICAgIH0KICAgIGRiZl9jYXJy aWVyLT5kYmZpbGVfcGF0aCA9IHp0cmR1cChyZXNvdXJjZV9uYW1lKTsKICAg IHJldHVybiAwOwp9CgovKiovCnN0YXRpYyBpbnQKYmluX3p1bnRpZShjaGFy ICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBm dW5jKSkKewogICAgUGFyYW0gcG07CiAgICBjaGFyICpwbW5hbWU7CiAgICBp bnQgcmV0ID0gMDsKCiAgICBmb3IgKHBtbmFtZSA9ICphcmdzOyAqYXJncysr OyBwbW5hbWUgPSAqYXJncykgewoJcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5n ZXRub2RlKHBhcmFtdGFiLCBwbW5hbWUpOwoJaWYoIXBtKSB7CgkgICAgendh cm5uYW0obmFtLCAiY2Fubm90IHVudGllICVzIiwgcG1uYW1lKTsKCSAgICBy ZXQgPSAxOwoJICAgIGNvbnRpbnVlOwoJfQoJaWYgKHBtLT5nc3UuaCAhPSAm Z2RibV9oYXNoX2dzdSkgewoJICAgIHp3YXJubmFtKG5hbSwgIm5vdCBhIHRp ZWQgZ2RibSBoYXNoOiAlcyIsIHBtbmFtZSk7CgkgICAgcmV0ID0gMTsKCSAg ICBjb250aW51ZTsKCX0KCglxdWV1ZV9zaWduYWxzKCk7CglpZiAoT1BUX0lT U0VUKG9wcywndScpKQoJICAgIGdkYm11bnRpZShwbSk7CS8qIGNsZWFyIHJl YWQtb25seS1uZXNzICovCglpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkp IHsKCSAgICAvKiBhc3N1bWUgYWxyZWFkeSByZXBvcnRlZCAqLwoJICAgIHJl dCA9IDE7Cgl9Cgl1bnF1ZXVlX3NpZ25hbHMoKTsKICAgIH0KCiAgICByZXR1 cm4gcmV0Owp9CgovKiovCnN0YXRpYyBpbnQKYmluX3pnZGJtcGF0aChjaGFy ICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBm dW5jKSkKewogICAgUGFyYW0gcG07CiAgICBjaGFyICpwbW5hbWU7CgogICAg cG1uYW1lID0gKmFyZ3M7CgogICAgaWYgKCFwbW5hbWUpIHsKICAgICAgICB6 d2Fybm5hbShuYW0sICJwYXJhbWV0ZXIgbmFtZSAod2hvc2UgcGF0aCBpcyB0 byBiZSB3cml0dGVuIHRvICRSRVBMWSkgaXMgcmVxdWlyZWQiKTsKICAgICAg ICByZXR1cm4gMTsKICAgIH0KCiAgICBwbSA9IChQYXJhbSkgcGFyYW10YWIt PmdldG5vZGUocGFyYW10YWIsIHBtbmFtZSk7CiAgICBpZighcG0pIHsKICAg ICAgICB6d2Fybm5hbShuYW0sICJubyBzdWNoIHBhcmFtZXRlcjogJXMiLCBw bW5hbWUpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmIChwbS0+ Z3N1LmggIT0gJmdkYm1faGFzaF9nc3UpIHsKICAgICAgICB6d2Fybm5hbShu YW0sICJub3QgYSB0aWVkIGdkYm0gcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7 CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLyogUGFyYW5vaWEsIGl0 ICp3aWxsKiBiZSBhbHdheXMgc2V0ICovCiAgICBpZiAoKChzdHJ1Y3QgZ3N1 X3NjYWxhcl9leHQgKilwbS0+dS5oYXNoLT50bXBkYXRhKS0+ZGJmaWxlX3Bh dGgpIHsKICAgICAgICBzZXRzcGFyYW0oIlJFUExZIiwgenRyZHVwKCgoc3Ry dWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPnUuaGFzaC0+dG1wZGF0YSktPmRi ZmlsZV9wYXRoKSk7CiAgICB9IGVsc2UgewogICAgICAgIHNldHNwYXJhbSgi UkVQTFkiLCB6dHJkdXAoIiIpKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK LyoKICogVGhlIHBhcmFtIGlzIGFjdHVhbCBwYXJhbSBpbiBoYXNoIOKAk8Kg YWx3YXlzLCBiZWNhdXNlCiAqIGdldGdkYm1ub2RlIGNyZWF0ZXMgZXZlcnkg bmV3IGtleSBzZWVuLiBIb3dldmVyLCBpdAogKiBtaWdodCBiZSBub3QgUE1f VVBUT0RBVEUgLSB3aGljaCBtZWFucyB0aGF0IGRhdGFiYXNlCiAqIHdhc24n dCB5ZXQgcXVlcmllZC4KICoKICogSXQgd2lsbCBiZSBsZWZ0IGluIHRoaXMg c3RhdGUgaWYgZGF0YWJhc2UgZG9lc24ndAogKiBjb250YWluIHN1Y2gga2V5 LiBUaGF0IG1pZ2h0IGJlIGEgZHJhd2JhY2ssIG1heWJlCiAqIHNldHRpbmcg dG8gZW1wdHkgdmFsdWUgaGFzIHNlbnNlLCBhcyBubyBvdGhlciB3cml0ZXIK ICogY2FuIGV4aXN0LiBUaGlzIHdvdWxkIHJlbW92ZSBzdWJ0bGUgaGNhbGxv YygxKSBsZWFrLgogKi8KCi8qKi8Kc3RhdGljIGNoYXIgKgpnZGJtZ2V0Zm4o UGFyYW0gcG0pCnsKICAgIGRhdHVtIGtleSwgY29udGVudDsKICAgIGludCBy ZXQ7CiAgICBHREJNX0ZJTEUgZGJmOwoKICAgIC8qIEtleSBhbHJlYWR5IHJl dHJpZXZlZD8gVGhlcmUgaXMgbm8gc2Vuc2Ugb2YgYXNraW5nIHRoZQogICAg ICogZGF0YWJhc2UgYWdhaW4sIGJlY2F1c2U6CiAgICAgKiAtIHRoZXJlIGNh biBiZSBvbmx5IG11bHRpcGxlIHJlYWRlcnMKICAgICAqIC0gc28sIG5vIHdy aXRlciArIHJlYWRlciB1c2UgaXMgYWxsb3dlZAogICAgICoKICAgICAqIFRo dXM6CiAgICAgKiAtIGlmIHdlIGFyZSB3cml0ZXJzLCB3ZSBmb3Igc3VyZSBo YXZlIG5ld2VzdCBjb3B5IG9mIGRhdGEKICAgICAqIC0gaWYgd2UgYXJlIHJl YWRlcnMsIHdlIGZvciBzdXJlIGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQog ICAgICovCiAgICBpZiAoIHBtLT5ub2RlLmZsYWdzICYgUE1fVVBUT0RBVEUg KSB7CiAgICAgICAgcmV0dXJuIHBtLT51LnN0ciA/IHBtLT51LnN0ciA6IChj aGFyICopIGhjYWxsb2MoMSk7CiAgICB9CgogICAgLyogVW5tZXRhZnkga2V5 LiBHREJNIGZpdHMgbmljZSBpbnRvIHRoaXMKICAgICAqIHByb2Nlc3MsIGFz IGl0IHVzZXMgbGVuZ3RoIG9mIGRhdGEgKi8KICAgIGludCB1bWxlbiA9IDA7 CiAgICBjaGFyICp1bWtleSA9IHVubWV0YWZ5X3phbGxvYyhwbS0+bm9kZS5u YW0sJnVtbGVuKTsKCiAgICBrZXkuZHB0ciA9IHVta2V5OwogICAga2V5LmRz aXplID0gdW1sZW47CgogICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKilwbS0+Z3N1LnMpLT5kYmY7CgogICAgaWYoKHJldCA9IGdkYm1fZXhp c3RzKGRiZiwga2V5KSkpIHsKICAgICAgICAvKiBXZSBoYXZlIGRhdGEg4oCT IHN0b3JlIGl0LCByZXR1cm4gaXQgKi8KICAgICAgICBwbS0+bm9kZS5mbGFn cyB8PSBQTV9VUFRPREFURTsKCiAgICAgICAgY29udGVudCA9IGdkYm1fZmV0 Y2goZGJmLCBrZXkpOwoKICAgICAgICAvKiBFbnN1cmUgdGhlcmUncyBubyBs ZWFrICovCiAgICAgICAgaWYgKHBtLT51LnN0cikgewogICAgICAgICAgICB6 c2ZyZWUocG0tPnUuc3RyKTsKICAgICAgICB9CgogICAgICAgIC8qIE1ldGFm eSByZXR1cm5lZCBkYXRhLiBBbGwgZml0cyAtIG1ldGFmeQogICAgICAgICAq IGNhbiBvYnRhaW4gZGF0YSBsZW5ndGggdG8gYXZvaWQgdXNpbmcgXDAgKi8K ICAgICAgICBwbS0+dS5zdHIgPSBtZXRhZnkoY29udGVudC5kcHRyLCBjb250 ZW50LmRzaXplLCBNRVRBX0FMTE9DKTsKCiAgICAgICAgLyogRnJlZSBrZXks IHJlc3RvcmluZyBpdHMgb3JpZ2luYWwgbGVuZ3RoICovCiAgICAgICAgenNm cmVlKHVta2V5KTsKCiAgICAgICAgLyogQ2FuIHJldHVybiBwb2ludGVyLCBj b3JyZWN0bHkgc2F2ZWQgaW5zaWRlIGhhc2ggKi8KICAgICAgICByZXR1cm4g cG0tPnUuc3RyOwogICAgfQoKICAgIC8qIEZyZWUga2V5ICovCiAgICB6c2Zy ZWUodW1rZXkpOwoKICAgIC8qIENhbiB0aGlzIGJlICIiID8gKi8KICAgIHJl dHVybiAoY2hhciAqKSBoY2FsbG9jKDEpOwp9CgovKiovCnN0YXRpYyB2b2lk CmdkYm1zZXRmbihQYXJhbSBwbSwgY2hhciAqdmFsKQp7CiAgICBkYXR1bSBr ZXksIGNvbnRlbnQ7CiAgICBHREJNX0ZJTEUgZGJmOwoKICAgIC8qIFNldCBp cyBkb25lIG9uIHBhcmFtZXRlciBhbmQgb24gZGF0YWJhc2UuCiAgICAgKiBT ZWUgdGhlIGFsbG93ZWQgd29ya2VycyAvIHJlYWRlcnMgY29tbWVudAogICAg ICogYXQgZ2RibWdldGZuKCkgKi8KCiAgICAvKiBQYXJhbWV0ZXIgKi8KICAg IGlmIChwbS0+dS5zdHIpIHsKICAgICAgICB6c2ZyZWUocG0tPnUuc3RyKTsK ICAgICAgICBwbS0+dS5zdHIgPSBOVUxMOwogICAgICAgIHBtLT5ub2RlLmZs YWdzICY9IH4oUE1fVVBUT0RBVEUpOwogICAgfQoKICAgIGlmICh2YWwpIHsK ICAgICAgICBwbS0+dS5zdHIgPSB6dHJkdXAodmFsKTsKICAgICAgICBwbS0+ bm9kZS5mbGFncyB8PSBQTV9VUFRPREFURTsKICAgIH0KCiAgICAvKiBEYXRh YmFzZSAqLwogICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilw bS0+Z3N1LnMpLT5kYmY7CiAgICBpZiAoZGJmKSB7CiAgICAgICAgaW50IHVt bGVuID0gMDsKICAgICAgICBjaGFyICp1bWtleSA9IHVubWV0YWZ5X3phbGxv YyhwbS0+bm9kZS5uYW0sJnVtbGVuKTsKCiAgICAgICAga2V5LmRwdHIgPSB1 bWtleTsKICAgICAgICBrZXkuZHNpemUgPSB1bWxlbjsKCiAgICAgICAgaWYg KHZhbCkgewogICAgICAgICAgICAvKiBVbm1ldGFmeSB3aXRoIGV4YWN0IHph bGxvYyBzaXplICovCiAgICAgICAgICAgIGNoYXIgKnVtdmFsID0gdW5tZXRh ZnlfemFsbG9jKHZhbCwmdW1sZW4pOwoKICAgICAgICAgICAgLyogU3RvcmUg Ki8KICAgICAgICAgICAgY29udGVudC5kcHRyID0gdW12YWw7CiAgICAgICAg ICAgIGNvbnRlbnQuZHNpemUgPSB1bWxlbjsKICAgICAgICAgICAgKHZvaWQp Z2RibV9zdG9yZShkYmYsIGtleSwgY29udGVudCwgR0RCTV9SRVBMQUNFKTsK CiAgICAgICAgICAgIC8qIEZyZWUgKi8KICAgICAgICAgICAgenNmcmVlKHVt dmFsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAodm9pZClnZGJt X2RlbGV0ZShkYmYsIGtleSk7CiAgICAgICAgfQoKICAgICAgICAvKiBGcmVl IGtleSAqLwogICAgICAgIHpzZnJlZSh1bWtleSk7CiAgICB9Cn0KCi8qKi8K c3RhdGljIHZvaWQKZ2RibXVuc2V0Zm4oUGFyYW0gcG0sIFVOVVNFRChpbnQg dW0pKQp7CiAgICAvKiBTZXQgd2l0aCBOVUxMICovCiAgICBnZGJtc2V0Zm4o cG0sIE5VTEwpOwp9CgovKiovCnN0YXRpYyBIYXNoTm9kZQpnZXRnZGJtbm9k ZShIYXNoVGFibGUgaHQsIGNvbnN0IGNoYXIgKm5hbWUpCnsKICAgIEhhc2hO b2RlIGhuID0gZ2V0aGFzaG5vZGUyKCBodCwgbmFtZSApOwogICAgUGFyYW0g dmFsX3BtID0gKFBhcmFtKSBobjsKCiAgICAvKiBFbnRyeSBmb3Iga2V5IGRv ZXNuJ3QgZXhpc3Q/IENyZWF0ZSBpdCBub3csCiAgICAgKiBpdCB3aWxsIGJl IGludGVyZmFjaW5nIGJldHdlZW4gdGhlIGRhdGFiYXNlCiAgICAgKiBhbmQg WnNoIC0gdGhyb3VnaCBzcGVjaWFsIGdkYm1fZ3N1LiBTbywgYW55CiAgICAg KiBzZWVuIGtleSByZXN1bHRzIGluIG5ldyBpbnRlcmZhY2luZyBwYXJhbWV0 ZXIuCiAgICAgKgogICAgICogUHJldmlvdXMgY29kZSB3YXMgcmV0dXJuaW5n IGhlYXAgYXJlbmEgUGFyYW0KICAgICAqIHRoYXQgd2Fzbid0IGFjdHVhbGx5 IGFkZGVkIHRvIHRoZSBoYXNoLiBJdCB3YXMKICAgICAqIHBsYWlubHkgbmFt ZSAvIGRhdGFiYXNlLWtleSBob2xkZXIuIEhlcmUgd2UKICAgICAqIGFkZCB0 aGUgUGFyYW0gdG8gaXRzIGhhc2gsIGl0IGlzIG5vdCBQTV9VUFRPREFURS4K ICAgICAqIEl0IHdpbGwgYmUgbG9hZGVkIGZyb20gZGF0YWJhc2UgKmFuZCBm aWxsZWQqCiAgICAgKiBvciBsZWZ0IGluIHRoYXQgc3RhdGUgaWYgdGhlIGRh dGFiYXNlIGRvZXNuJ3QKICAgICAqIGNvbnRhaW4gaXQuCiAgICAgKgogICAg ICogTm8gaGVhcCBhcmVuYSBtZW1vcnkgaXMgdXNlZCwgbWVtb3J5IHVzYWdl IGlzCiAgICAgKiBub3cgbGltaXRlZCAtIGJ5IG51bWJlciBvZiBkaXN0aW5j dCBrZXlzIHNlZW4sCiAgICAgKiBub3QgYnkgbnVtYmVyIG9mIGtleSAqdXNl cyouCiAgICAgKiAqLwoKICAgIGlmICggISB2YWxfcG0gKSB7CiAgICAgICAg dmFsX3BtID0gKFBhcmFtKSB6c2hjYWxsb2MoIHNpemVvZiAoKnZhbF9wbSkg KTsKICAgICAgICB2YWxfcG0tPm5vZGUuZmxhZ3MgPSBQTV9TQ0FMQVIgfCBQ TV9IQVNIRUxFTTsgLyogbm8gUE1fVVBUT0RBVEUgKi8KICAgICAgICB2YWxf cG0tPmdzdS5zID0gKEdzdVNjYWxhcikgaHQtPnRtcGRhdGE7CiAgICAgICAg aHQtPmFkZG5vZGUoIGh0LCB6dHJkdXAoIG5hbWUgKSwgdmFsX3BtICk7IC8v IHNldHMgcG0tPm5vZGUubmFtCiAgICB9CgogICAgcmV0dXJuIChIYXNoTm9k ZSkgdmFsX3BtOwp9CgovKiovCnN0YXRpYyB2b2lkCnNjYW5nZGJta2V5cyhI YXNoVGFibGUgaHQsIFNjYW5GdW5jIGZ1bmMsIGludCBmbGFncykKewogICAg ZGF0dW0ga2V5OwogICAgR0RCTV9GSUxFIGRiZiA9ICgoc3RydWN0IGdzdV9z Y2FsYXJfZXh0ICopaHQtPnRtcGRhdGEpLT5kYmY7CgogICAgLyogSXRlcmF0 ZSBrZXlzIGFkZGluZyB0aGVtIHRvIGhhc2gsIHNvCiAgICAgKiB3ZSBoYXZl IFBhcmFtIHRvIHVzZSBpbiBgZnVuY2AgKi8KICAgIGtleSA9IGdkYm1fZmly c3RrZXkoZGJmKTsKCiAgICB3aGlsZShrZXkuZHB0cikgewogICAgICAgIC8q IFRoaXMgcmV0dXJucyBkYXRhYmFzZS1pbnRlcmZhY2luZyBQYXJhbSwKICAg ICAgICAgKiBpdCB3aWxsIHJldHVybiB1LnN0ciBvciBmaXJzdCBmZXRjaCBk YXRhCiAgICAgICAgICogaWYgbm90IFBNX1VQVE9EQVRFIChuZXdseSBjcmVh dGVkKSAqLwogICAgICAgIGNoYXIgKnprZXkgPSB6dHJkdXBwZngoa2V5LmRw dHIsIGtleS5kc2l6ZSk7CiAgICAgICAgSGFzaE5vZGUgaG4gPSBnZXRnZGJt bm9kZShodCwgemtleSk7CiAgICAgICAgenNmcmVlKCB6a2V5ICk7CgoJZnVu YyhobiwgZmxhZ3MpOwoKICAgICAgICAvKiBJdGVyYXRlIC0gbm8gcHJvYmxl bSBhcyBpbnRlcmZhY2luZyBQYXJhbQogICAgICAgICAqIHdpbGwgZG8gYXQg bW9zdCBvbmx5IGZldGNoZXMsIG5vdCBzdG9yZXMgKi8KICAgICAgICBrZXkg PSBnZGJtX25leHRrZXkoZGJmLCBrZXkpOwogICAgfQoKfQoKLyoKICogUmVw bGFjZSBkYXRhYmFzZSB3aXRoIG5ldyBoYXNoCiAqLwoKLyoqLwpzdGF0aWMg dm9pZApnZGJtaGFzaHNldGZuKFBhcmFtIHBtLCBIYXNoVGFibGUgaHQpCnsK ICAgIGludCBpOwogICAgSGFzaE5vZGUgaG47CiAgICBHREJNX0ZJTEUgZGJm OwogICAgZGF0dW0ga2V5LCBjb250ZW50OwoKICAgIGlmICghcG0tPnUuaGFz aCB8fCBwbS0+dS5oYXNoID09IGh0KQoJcmV0dXJuOwoKICAgIGlmICghKGRi ZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPnUuaGFzaC0+dG1w ZGF0YSktPmRiZikpCglyZXR1cm47CgogICAga2V5ID0gZ2RibV9maXJzdGtl eShkYmYpOwogICAgd2hpbGUgKGtleS5kcHRyKSB7CglxdWV1ZV9zaWduYWxz KCk7Cgkodm9pZClnZGJtX2RlbGV0ZShkYmYsIGtleSk7CglmcmVlKGtleS5k cHRyKTsKCXVucXVldWVfc2lnbmFscygpOwoJa2V5ID0gZ2RibV9maXJzdGtl eShkYmYpOwogICAgfQoKICAgIC8qIGp1c3QgZGVsZXRlZCBldmVyeXRoaW5n LCBjbGVhbiB1cCAqLwogICAgKHZvaWQpZ2RibV9yZW9yZ2FuaXplKGRiZik7 CgogICAgaWYgKCFodCkKCXJldHVybjsKCiAgICAgLyogUHV0IG5ldyBzdHJp bmdzIGludG8gZGF0YWJhc2UsIHdhaXRpbmcKICAgICAgKiBmb3IgdGhlaXIg aW50ZXJmYWNpbmctUGFyYW1zIHRvIGJlIGNyZWF0ZWQgKi8KCiAgICBmb3Ig KGkgPSAwOyBpIDwgaHQtPmhzaXplOyBpKyspCglmb3IgKGhuID0gaHQtPm5v ZGVzW2ldOyBobjsgaG4gPSBobi0+bmV4dCkgewoJICAgIHN0cnVjdCB2YWx1 ZSB2OwoKCSAgICB2LmlzYXJyID0gdi5mbGFncyA9IHYuc3RhcnQgPSAwOwoJ ICAgIHYuZW5kID0gLTE7CgkgICAgdi5hcnIgPSBOVUxMOwoJICAgIHYucG0g PSAoUGFyYW0pIGhuOwoKICAgICAgICAgICAgLyogVW5tZXRhZnkga2V5ICov CiAgICAgICAgICAgIGludCB1bWxlbiA9IDA7CiAgICAgICAgICAgIGNoYXIg KnVta2V5ID0gdW5tZXRhZnlfemFsbG9jKHYucG0tPm5vZGUubmFtLCZ1bWxl bik7CgoJICAgIGtleS5kcHRyID0gdW1rZXk7CgkgICAga2V5LmRzaXplID0g dW1sZW47CgoJICAgIHF1ZXVlX3NpZ25hbHMoKTsKCiAgICAgICAgICAgIC8q IFVubWV0YWZ5ICovCiAgICAgICAgICAgIGNoYXIgKnVtdmFsID0gdW5tZXRh ZnlfemFsbG9jKGdldHN0cnZhbHVlKCZ2KSwmdW1sZW4pOwoKICAgICAgICAg ICAgLyogU3RvcmUgKi8KCSAgICBjb250ZW50LmRwdHIgPSB1bXZhbDsKCSAg ICBjb250ZW50LmRzaXplID0gdW1sZW47CgkgICAgKHZvaWQpZ2RibV9zdG9y ZShkYmYsIGtleSwgY29udGVudCwgR0RCTV9SRVBMQUNFKTsJCgogICAgICAg ICAgICAvKiBGcmVlIC0gdGhhbmtzIHRvIHVubWV0YWZ5X3phbGxvYyBzaXpl IG9mCiAgICAgICAgICAgICAqIHRoZSBzdHJpbmdzIGlzIGV4YWN0IHphbGxv YyBzaXplIC0gY2FuCiAgICAgICAgICAgICAqIHBhc3MgdG8genNmcmVlICov CiAgICAgICAgICAgIHpzZnJlZSh1bXZhbCk7CiAgICAgICAgICAgIHpzZnJl ZSh1bWtleSk7CgoJICAgIHVucXVldWVfc2lnbmFscygpOwoJfQp9CgovKiov CnN0YXRpYyB2b2lkCmdkYm11bnRpZShQYXJhbSBwbSkKewogICAgR0RCTV9G SUxFIGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPnUuaGFz aC0+dG1wZGF0YSktPmRiZjsKICAgIEhhc2hUYWJsZSBodCA9IHBtLT51Lmhh c2g7CgogICAgaWYgKGRiZikgeyAvKiBwYXJhbm9pYSAqLwoJZmR0YWJsZVtn ZGJtX2ZkZXNjKGRiZildID0gRkRUX1VOVVNFRDsKICAgICAgICBnZGJtX2Ns b3NlKGRiZik7CgogICAgICAgIC8qIExldCBoYXNoIGZpZWxkcyBrbm93IHRo ZXJlJ3Mgbm8gYmFja2VuZCAqLwogICAgICAgICgoc3RydWN0IGdzdV9zY2Fs YXJfZXh0ICopaHQtPnRtcGRhdGEpLT5kYmYgPSBOVUxMOwoKICAgICAgICAv KiBSZW1vdmUgZnJvbSBsaXN0IG9mIHRpZWQgcGFyYW1ldGVycyAqLwogICAg ICAgIHJlbW92ZV90aWVkX25hbWUocG0tPm5vZGUubmFtKTsKICAgIH0KCiAg ICAvKiBmb3IgY29tcGxldGVuZXNzIC4uLiBjcmVhdGVzcGVjaWFsaGFzaCgp IHNob3VsZCBoYXZlIGFuIGludmVyc2UgKi8KICAgIGh0LT5nZXRub2RlID0g aHQtPmdldG5vZGUyID0gZ2V0aGFzaG5vZGUyOwogICAgaHQtPnNjYW50YWIg PSBOVUxMOwoKICAgIHBtLT5ub2RlLmZsYWdzICY9IH4oUE1fU1BFQ0lBTHxQ TV9SRUFET05MWSk7CiAgICBwbS0+Z3N1LmggPSAmc3RkaGFzaF9nc3U7Cn0K Ci8qKi8Kc3RhdGljIHZvaWQKZ2RibWhhc2h1bnNldGZuKFBhcmFtIHBtLCBV TlVTRUQoaW50IGV4cCkpCnsKICAgIGdkYm11bnRpZShwbSk7CgogICAgLyog UmVtZW1iZXIgY3VzdG9tIEdTVSBzdHJ1Y3R1cmUgYXNzaWduZWQgdG8KICAg ICAqIHUuaGFzaC0+dG1wZGF0YSBiZWZvcmUgaGFzaCBnZXRzIGRlbGV0ZWQg Ki8KICAgIHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqIGdzdV9leHQgPSBwbS0+ dS5oYXNoLT50bXBkYXRhOwoKICAgIC8qIFVzZXMgbm9ybWFsIHVuc2V0dGVy LiBXaWxsIGRlbGV0ZSBhbGwgb3duZWQKICAgICAqIHBhcmFtZXRlcnMgYW5k IGFsc28gaGFzaHRhYmxlLiAqLwogICAgcG0tPmdzdS5oLT5zZXRmbihwbSwg TlVMTCk7CgogICAgLyogRG9uJ3QgbmVlZCBjdXN0b20gR1NVIHN0cnVjdHVy ZSB3aXRoIGl0cwogICAgICogR0RCTV9GSUxFIHBvaW50ZXIgYW55bW9yZSAq LwogICAgenNmcmVlKCBnc3VfZXh0LT5kYmZpbGVfcGF0aCApOwogICAgemZy ZWUoIGdzdV9leHQsIHNpemVvZihzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQpKTsK CiAgICBwbS0+bm9kZS5mbGFncyB8PSBQTV9VTlNFVDsKfQoKI2Vsc2UKIyBl cnJvciBubyBnZGJtCiNlbmRpZiAvKiBoYXZlIGdkYm0gKi8KCnN0YXRpYyBz dHJ1Y3QgZmVhdHVyZXMgbW9kdWxlX2ZlYXR1cmVzID0gewogICAgYmludGFi LCBzaXplb2YoYmludGFiKS9zaXplb2YoKmJpbnRhYiksCiAgICBOVUxMLCAw LAogICAgTlVMTCwgMCwKICAgIHBhdGFiLCBzaXplb2YocGF0YWIpL3NpemVv ZigqcGF0YWIpLAogICAgMAp9OwoKLyoqLwppbnQKc2V0dXBfKFVOVVNFRChN b2R1bGUgbSkpCnsKICAgIHJldHVybiAwOwp9CgovKiovCmludApmZWF0dXJl c18oTW9kdWxlIG0sIGNoYXIgKioqZmVhdHVyZXMpCnsKICAgICpmZWF0dXJl cyA9IGZlYXR1cmVzYXJyYXkobSwgJm1vZHVsZV9mZWF0dXJlcyk7CiAgICBy ZXR1cm4gMDsKfQoKLyoqLwppbnQKZW5hYmxlc18oTW9kdWxlIG0sIGludCAq KmVuYWJsZXMpCnsKICAgIHJldHVybiBoYW5kbGVmZWF0dXJlcyhtLCAmbW9k dWxlX2ZlYXR1cmVzLCBlbmFibGVzKTsKfQoKLyoqLwppbnQKYm9vdF8oVU5V U0VEKE1vZHVsZSBtKSkKewogICAgemdkYm1fdGllZCA9IHpzaGNhbGxvYygo MSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICByZXR1cm4gMDsKfQoKLyoqLwpp bnQKY2xlYW51cF8oTW9kdWxlIG0pCnsKICAgIC8qIFRoaXMgZnJlZXMgYHpn ZGJtX3RpZWRgICovCiAgICByZXR1cm4gc2V0ZmVhdHVyZWVuYWJsZXMobSwg Jm1vZHVsZV9mZWF0dXJlcywgTlVMTCk7Cn0KCi8qKi8KaW50CmZpbmlzaF8o VU5VU0VEKE1vZHVsZSBtKSkKewogICAgcmV0dXJuIDA7Cn0KCi8qKioqKioq KioqKioqKioqKioqKioKICogVXRpbGl0eSBmdW5jdGlvbnMgKgogKioqKioq KioqKioqKioqKioqKioqLwoKc3RhdGljIFBhcmFtIGNyZWF0ZWhhc2goIGNo YXIgKm5hbWUsIGludCBmbGFncyApIHsKICAgIFBhcmFtIHBtOwogICAgSGFz aFRhYmxlIGh0OwoKICAgIHBtID0gY3JlYXRlcGFyYW0obmFtZSwgUE1fU1BF Q0lBTCB8IFBNX0hBU0hFRCk7CiAgICBpZiAoIXBtKSB7CiAgICAgICAgcmV0 dXJuIE5VTEw7CiAgICB9CgogICAgaWYgKHBtLT5vbGQpCglwbS0+bGV2ZWwg PSBsb2NhbGxldmVsOwoKICAgIC8qIFRoaXMgY3JlYXRlcyBzdGFuZGFyZCBo YXNoLiAqLwogICAgaHQgPSBwbS0+dS5oYXNoID0gbmV3cGFyYW10YWJsZSgz MiwgbmFtZSk7CiAgICBpZiAoIXBtLT51Lmhhc2gpIHsKICAgICAgICBwYXJh bXRhYi0+cmVtb3Zlbm9kZShwYXJhbXRhYiwgbmFtZSk7CiAgICAgICAgcGFy YW10YWItPmZyZWVub2RlKCZwbS0+bm9kZSk7CiAgICAgICAgendhcm5uYW0o bmFtZSwgIk91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGhhc2giKTsK ICAgIH0KCiAgICAvKiBUaGVzZSBwcm92aWRlIHNwZWNpYWwgZmVhdHVyZXMg Ki8KICAgIGh0LT5nZXRub2RlID0gaHQtPmdldG5vZGUyID0gZ2V0Z2RibW5v ZGU7CiAgICBodC0+c2NhbnRhYiA9IHNjYW5nZGJta2V5czsKCiAgICByZXR1 cm4gcG07Cn0KCi8qCiAqIEFkZHMgcGFyYW1ldGVyIG5hbWUgdG8gYHpnZGJt X3RpZWRgCiAqLwoKc3RhdGljIGludCBhcHBlbmRfdGllZF9uYW1lKCBjb25z dCBjaGFyICpuYW1lICkgewogICAgaW50IG9sZF9sZW4gPSBhcnJsZW4oemdk Ym1fdGllZCk7CiAgICBjaGFyICoqbmV3X3pnZGJtX3RpZWQgPSB6c2hjYWxs b2MoIChvbGRfbGVuKzIpICogc2l6ZW9mKGNoYXIgKikpOwoKICAgIC8qIENv cHkgKi8KICAgIGNoYXIgKipwID0gemdkYm1fdGllZDsKICAgIGNoYXIgKipk c3QgPSBuZXdfemdkYm1fdGllZDsKICAgIHdoaWxlICgqcCkgewogICAgICAg ICpkc3QrKyA9ICpwKys7CiAgICB9CgogICAgLyogQXBwZW5kIG5ldyBvbmUg Ki8KICAgICpkc3QgPSB6dHJkdXAobmFtZSk7CgogICAgLyogU3Vic3RpdHV0 ZSwgZnJlZSBvbGQgb25lICovCiAgICB6ZnJlZSh6Z2RibV90aWVkLCBzaXpl b2YoY2hhciAqKSAqIChvbGRfbGVuICsgMSkpOwogICAgemdkYm1fdGllZCA9 IG5ld196Z2RibV90aWVkOwoKICAgIHJldHVybiAwOwp9CgovKgogKiBSZW1v dmVzIHBhcmFtZXRlciBuYW1lIGZyb20gYHpnZGJtX3RpZWRgCiAqLwoKc3Rh dGljIGludCByZW1vdmVfdGllZF9uYW1lKCBjb25zdCBjaGFyICpuYW1lICkg ewogICAgaW50IG9sZF9sZW4gPSBhcnJsZW4oemdkYm1fdGllZCk7CgogICAg LyogVHdvIHN0YWdlLCB0byBhbHdheXMgaGF2ZSBhcnJsZW4oKSA9PSB6ZnJl ZS1zaXplIC0gMS4KICAgICAqIENvdWxkIGRvIGFsbG9jYXRpb24gYW5kIHJl dmVydCB3aGVuIGBub3QgZm91bmRgLCBidXQKICAgICAqIHdoYXQgd291bGQg YmUgYmV0dGVyIGFib3V0IHRoYXQuICovCgogICAgLyogRmluZCBvbmUgdG8g cmVtb3ZlICovCiAgICBjaGFyICoqcCA9IHpnZGJtX3RpZWQ7CiAgICB3aGls ZSAoKnApIHsKICAgICAgICBpZiAoMD09c3RyY21wKG5hbWUsKnApKSB7CiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwKys7CiAgICB9 CgogICAgLyogQ29weSB4KzEgdG8geCAqLwogICAgd2hpbGUgKCpwKSB7CiAg ICAgICAgKnA9KihwKzEpOwogICAgICAgIHArKzsKICAgIH0KCiAgICAvKiBT ZWNvbmQgc3RhZ2UuIFNpemUgY2hhbmdlZD8gT25seSBvbGRfc2l6ZS0xCiAg ICAgKiBjaGFuZ2UgaXMgcG9zc2libGUsIGJ1dC4uIHBhcmFub2lhIHdheSAq LwogICAgaW50IG5ld19sZW4gPSBhcnJsZW4oemdkYm1fdGllZCk7CiAgICBp ZiAobmV3X2xlbiAhPSBvbGRfbGVuKSB7CiAgICAgICAgY2hhciAqKm5ld196 Z2RibV90aWVkID0genNoY2FsbG9jKChuZXdfbGVuKzEpICogc2l6ZW9mKGNo YXIgKikpOwoKICAgICAgICAvKiBDb3B5ICovCiAgICAgICAgcCA9IHpnZGJt X3RpZWQ7CiAgICAgICAgY2hhciAqKmRzdCA9IG5ld196Z2RibV90aWVkOwog ICAgICAgIHdoaWxlICgqcCkgewogICAgICAgICAgICAqZHN0KysgPSAqcCsr OwogICAgICAgIH0KICAgICAgICAqZHN0ID0gTlVMTDsKCiAgICAgICAgLyog U3Vic3RpdHV0ZSwgZnJlZSBvbGQgb25lICovCiAgICAgICAgemZyZWUoemdk Ym1fdGllZCwgc2l6ZW9mKGNoYXIgKikgKiAob2xkX2xlbiArIDEpKTsKICAg ICAgICB6Z2RibV90aWVkID0gbmV3X3pnZGJtX3RpZWQ7CiAgICB9CgogICAg cmV0dXJuIDA7Cn0KCi8qCiAqIFVubWV0YWZ5IHRoYXQ6CiAqIC0gZHVwbGlj YXRlcyBidWZlciB0byB3b3JrIG9uIGl0LAogKiAtIGRvZXMgemFsbG9jIG9m IGV4YWN0IHNpemUgZm9yIHRoZSBuZXcgc3RyaW5nLAogKiAtIHJlc3RvcmVz IHdvcmsgYnVmZmVyIHRvIG9yaWdpbmFsIGNvbnRlbnQsIHRvIHJlc3RvcmUg c3RybGVuCiAqCiAqIE5vIHpzZnJlZSgpLWNvbmZ1c2luZyBzdHJpbmcgd2ls bCBiZSBwcm9kdWNlZC4KICovCmNoYXIgKnVubWV0YWZ5X3phbGxvYyhjb25z dCBjaGFyICp0b19jb3B5LCBpbnQgKm5ld19sZW4pIHsKICAgIGNoYXIgKndv cmssICp0b19yZXR1cm47CiAgICBpbnQgbXlfbmV3X2xlbiA9IDA7CgogICAg d29yayA9IHp0cmR1cCh0b19jb3B5KTsKICAgIHdvcmsgPSB1bm1ldGFmeSh3 b3JrLCZteV9uZXdfbGVuKTsKCiAgICBpZiAobmV3X2xlbikKICAgICAgICAq bmV3X2xlbiA9IG15X25ld19sZW47CgogICAgLyogVGhpcyBzdHJpbmcgY2Fu IGJlIGNvcnJlY3RseSB6c2ZyZWUoKS1kICovCiAgICB0b19yZXR1cm4gPSAo Y2hhciAqKSB6YWxsb2MoKG15X25ld19sZW4rMSkqc2l6ZW9mKGNoYXIpKTsK ICAgIG1lbWNweSh0b19yZXR1cm4sIHdvcmssIHNpemVvZihjaGFyKSpteV9u ZXdfbGVuKTsgLy8gbWVtY3B5IGhhbmRsZXMgJCdcMCcKICAgIHRvX3JldHVy bltteV9uZXdfbGVuXT0nXDAnOwoKICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwg c3RybGVuIGFuZCBjb3JyZWN0bHkgZnJlZSAqLwogICAgc3RyY3B5KHdvcmss IHRvX2NvcHkpOwogICAgenNmcmVlKHdvcmspOwoKICAgIHJldHVybiB0b19y ZXR1cm47Cn0K --_----------=_148725510318808272--