From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf0-f44.google.com (mail-lf0-f44.google.com [209.85.215.44]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id e0eb4df5 for ; Sat, 21 Jan 2017 07:30:05 -0500 (EST) Received: by mail-lf0-f44.google.com with SMTP id v186so72106497lfa.1 for ; Sat, 21 Jan 2017 04:30:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=i3wm-org.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:from:date:message-id:subject:to; bh=XPrbBb/E154ZR0JmfpewU2wpJSixi1/Q0yzpA6j4g7E=; b=1wcPEPDix4dsWbPvWNkF22CJQ5nNv1poOoS47hvypWMJIRtVpBkSAH4OSOtrRs/fZc U09cNrvKRtzcGU5YOo3hPO1Rbg+hXVvH9vyo/MbetZAJJf79hibEYv55LAPvhzpiJbjm ltzZubBuVeg0j01PR88aw72HiBsFy+kn7Fq27iVMmLd/ZDuT/APwm1GXMr2MQrtZSMin 8L/c7SugA1qSuKlEXqgFqt+uZJUVgGiwUpShoAbmojwByddwhnwh5kgPLv95PBXQ8YPX 7nNw3A3IGzEu3v6fIdj/ozkBAm99a130eiW/3WMbHzm/q3Y6246NCTGTYROfce9/pmun uQxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:from:date:message-id:subject :to; bh=XPrbBb/E154ZR0JmfpewU2wpJSixi1/Q0yzpA6j4g7E=; b=uKFHMAXPGyAuDYQGHkRV+ljwpJ3ViGywCFP+l4+RbgZ4TXdOKX/2Ms+8DQpTxwDjl1 tf6F7fhxw0sjl3xGctg2mR+5Q4s6ztHJJkbI+6RLuEZth+kknLdC9pgeBxesKEwV1Vm4 lDghtFVz3KwO/YZkYTuOZBZF+nclVubyIqjQg8tTL+UlYJZqLtLJfsXlUkI1zVBBzIUx 4goxF8jf7TNY9TE2r7Gjn3nLGWb24tA9PePnOZZLrrGFrnyWOGEi2qWa2ColE4ayAlrV FGQ6DtWC2WkhDAPh8zD9moybGUoT4tZJY2XE6tQDZtZGwR4OSE64zbGBrskb888HdAce 3Xiw== X-Gm-Message-State: AIkVDXK9dQqAK7OfzQfkUUNmUy+wQuKCJkBFxKbLg66mEtAxmmzzYzN38YizG/+QG+blsZDfQywDj+OoiU6BXA== X-Received: by 10.25.193.21 with SMTP id r21mr6274087lff.103.1485001801335; Sat, 21 Jan 2017 04:30:01 -0800 (PST) X-Mailinglist: mdocml-tech Reply-To: tech@mdocml.bsd.lv MIME-Version: 1.0 Sender: michael@i3wm.org Received: by 10.25.216.206 with HTTP; Sat, 21 Jan 2017 04:29:40 -0800 (PST) X-Originating-IP: [2a02:168:4a00:0:225:90ff:fe5d:53a2] From: Michael Stapelberg Date: Sat, 21 Jan 2017 13:29:40 +0100 X-Google-Sender-Auth: A2P0UC5p3ADJI4OZ90OeQAtJvXM Message-ID: Subject: [PATCH] Implement -u (UNIX socket batch processing) To: tech@mdocml.bsd.lv Content-Type: multipart/mixed; boundary=94eb2c1a1b66dc394b054699eceb --94eb2c1a1b66dc394b054699eceb Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Quoting from the commit message for your convenience: > The option argument identifies the file descriptor number of a UNIX > listening socket which was inherited from the parent process when said > parent exec'd mandoc. > > mandoc will accept one connection at a time on that socket. As long as > the connection lives, mandoc reads 1-byte messages with ancillary data > (control information) from the connection. The ancillary data is used to > pass three file descriptors from the parent process to mandoc. These > file descriptors are then dup2'ed to fd 0, fd 1 and fd 2, respectively. > > After the file descriptors have been set up, a single manpage is read > from stdin and processed to stdout/stderr. > > This change effectively adds a batch processing mode to mandoc, which > eliminates the fork+exec overhead that otherwise accompanies the > conversion of a large number of manpages. The resulting speed-up has > been observed to exceed a factor of 6, reducing the total conversion > wall-clock time of about a 470k manpages from more than 2 hours to > a mere 22 minutes. To expand on the rationale: quicker conversion=E2=80=A6 1. allows us to provide our users more recent manpages (we can run more frequently) 2. hogs fewer resources which can instead be used for actually serving manp= ages 3. massively simplifies our disaster recovery story: we can just re-generate the entire repository within a small number of hours, instead of facing days of downtime As per http://man.openbsd.org/OpenBSD-current/man3/CMSG_DATA.3, control information has been around since 4.2BSD, so support across operating systems should be good. No file system objects are required, no data format needs to be defined and no additional library dependencies are added. I have attached a minimal example implementation (demo.c) so that you can convince yourself this approach works. Please let me know what you think. Thanks! --=20 Best regards, Michael --94eb2c1a1b66dc394b054699eceb Content-Type: text/x-csrc; charset=US-ASCII; name="demo.c" Content-Disposition: attachment; filename="demo.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iy230k381 I2luY2x1ZGUgPGVyci5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgoj aW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvdW4uaD4KI2luY2x1ZGUg PHVuaXN0ZC5oPgoKdm9pZCBydW5fbWFuZG9jKGludCBzb2NrZmQpIHsKICBjaGFyIHNvY2tmZHN0 clsxMF07CiAgaWYgKHNucHJpbnRmKHNvY2tmZHN0ciwgc2l6ZW9mKHNvY2tmZHN0ciksICIlZCIs IHNvY2tmZCkgPT0gLTEpCiAgICBlcnIoRVhJVF9GQUlMVVJFLCAic25wcmludGYiKTsKICBpZiAo ZXhlY2xwKCJtYW5kb2MiLCAibWFuZG9jIiwgIi1UaHRtbCIsICItdSIsIHNvY2tmZHN0ciwgTlVM TCkgPT0gLTEpCiAgICBlcnIoRVhJVF9GQUlMVVJFLCAiZXhlY2xwKG1hbmRvYykiKTsKfQoKc3Np emVfdCBzb2NrX2ZkX3dyaXRlKGludCBmZCwgaW50IGZkMCwgaW50IGZkMSwgaW50IGZkMikgewog IHN0cnVjdCBtc2doZHIgbXNnOwogIHN0cnVjdCBpb3ZlYyBpb3Y7CiAgdW5pb24gewogICAgc3Ry dWN0IGNtc2doZHIgY21zZ2hkcjsKICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKDMgKiBzaXpl b2YoaW50KSldOwogIH0gY21zZ3U7CiAgc3RydWN0IGNtc2doZHIgKmNtc2c7CiAgdW5zaWduZWQg Y2hhciBkdW1teVsxXSA9IHsnXDAnfTsKCiAgaW92Lmlvdl9iYXNlID0gZHVtbXk7CiAgaW92Lmlv dl9sZW4gPSBzaXplb2YoZHVtbXkpOwoKICBtc2cubXNnX25hbWUgPSBOVUxMOwogIG1zZy5tc2df bmFtZWxlbiA9IDA7CiAgbXNnLm1zZ19pb3YgPSAmaW92OwogIG1zZy5tc2dfaW92bGVuID0gMTsK CiAgbXNnLm1zZ19jb250cm9sID0gY21zZ3UuY29udHJvbDsKICBtc2cubXNnX2NvbnRyb2xsZW4g PSBzaXplb2YoY21zZ3UuY29udHJvbCk7CgogIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOwog IGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oMyAqIHNpemVvZihpbnQpKTsKICBjbXNnLT5jbXNn X2xldmVsID0gU09MX1NPQ0tFVDsKICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwoKICBp bnQgKndhbGsgPSAoaW50ICopQ01TR19EQVRBKGNtc2cpOwogICood2FsaysrKSA9IGZkMDsKICAq KHdhbGsrKykgPSBmZDE7CiAgKih3YWxrKyspID0gZmQyOwoKICByZXR1cm4gc2VuZG1zZyhmZCwg Jm1zZywgMCk7Cn0KCmludCBwcm9jZXNzX21hbnBhZ2Uoc3RydWN0IHNvY2thZGRyICphZGRyKSB7 CiAgaW50IGZkOwoKICBpZiAoKGZkID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX1NUUkVBTSwgMCkp IDwgMCkKICAgIHJldHVybiAtMTsKCiAgaWYgKGNvbm5lY3QoZmQsIGFkZHIsIHNpemVvZihzdHJ1 Y3Qgc29ja2FkZHJfdW4pKSA8IDApCiAgICByZXR1cm4gLTE7CgogIGludCBwc3RkaW5bMl07CiAg aW50IHBzdGRvdXRbMl07CiAgaW50IHBzdGRlcnJbMl07CiAgaWYgKHBpcGUocHN0ZGluKSA9PSAt MSB8fCBwaXBlKHBzdGRvdXQpID09IC0xIHx8IHBpcGUocHN0ZGVycikgPT0gLTEpCiAgICByZXR1 cm4gLTE7CgogIGlmIChzb2NrX2ZkX3dyaXRlKGZkLCBwc3RkaW5bMF0sIHBzdGRvdXRbMV0sIHBz dGRlcnJbMV0pIDwgMCkKICAgIHJldHVybiAtMTsKCiAgY2xvc2UocHN0ZGluWzBdKTsKICBjbG9z ZShwc3Rkb3V0WzFdKTsKICBjbG9zZShwc3RkZXJyWzFdKTsKCiAgY29uc3QgY2hhciAqbWFuID0g Ii5USCBleGFtcGxlIGNvZGVcbiI7CiAgaWYgKHdyaXRlKHBzdGRpblsxXSwgbWFuLCBzdHJsZW4o bWFuKSkgPCAwKQogICAgcmV0dXJuIC0xOwogIGNsb3NlKHBzdGRpblsxXSk7CiAgY2hhciBidWZb NDA5Nl07CiAgc3NpemVfdCBuID0gcmVhZChwc3Rkb3V0WzBdLCBidWYsIHNpemVvZihidWYpKTsK ICBpZiAobiA8IDApCiAgICByZXR1cm4gLTE7CiAgcHJpbnRmKCJyZWFkOiBcIiUuKnNcIlxuIiwg KGludCluLCBidWYpOwogIHJldHVybiAwOwp9CgppbnQgc2V0dXBfc29ja2V0KHN0cnVjdCBzb2Nr YWRkciAqYWRkcikgewogIGludCBzb2NrZmQ7CgogIGlmICgoc29ja2ZkID0gc29ja2V0KEFGX0xP Q0FMLCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkKICAgIHJldHVybiAtMTsKCiAgaWYgKGJpbmQoc29j a2ZkLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSkgPCAwKQogICAgcmV0dXJuIC0x OwoKICBpZiAobGlzdGVuKHNvY2tmZCwgMSkgPCAwKQogICAgcmV0dXJuIC0xOwoKICByZXR1cm4g c29ja2ZkOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICBzdHJ1Y3Qgc29j a2FkZHJfdW4gYWRkcjsKICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf dW4pKTsKICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKCiAgaW50IHNvY2tmZCA9IHNldHVw X3NvY2tldCgoc3RydWN0IHNvY2thZGRyICopJmFkZHIpOwogIGlmIChzb2NrZmQgPT0gLTEpCiAg ICBlcnIoRVhJVF9GQUlMVVJFLCAic29ja2V0IHNldHVwIik7CgogIHBpZF90IHBpZCA9IGZvcmso KTsKICBzd2l0Y2ggKHBpZCkgewogIGNhc2UgLTE6CiAgICBlcnIoRVhJVF9GQUlMVVJFLCAiZm9y ayIpOwogIGNhc2UgMDoKICAgIHJ1bl9tYW5kb2Moc29ja2ZkKTsKICAgIGJyZWFrOwogIGRlZmF1 bHQ6CiAgICBpZiAocHJvY2Vzc19tYW5wYWdlKChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcikgPT0g LTEpCiAgICAgIGVycihFWElUX0ZBSUxVUkUsICJwcm9jZXNzX21hbnBhZ2UiKTsKICAgIGlmIChr aWxsKHBpZCwgU0lHS0lMTCkgPT0gLTEpCiAgICAgIGVycihFWElUX0ZBSUxVUkUsICJraWxsKCVk KSIsIHBpZCk7CiAgICBicmVhazsKICB9Cn0K --94eb2c1a1b66dc394b054699eceb Content-Type: text/x-patch; charset=UTF-8; name="0001-Implement-u-UNIX-socket-batch-processing.patch" Content-Disposition: attachment; filename="0001-Implement-u-UNIX-socket-batch-processing.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iy77obwf1 RnJvbSBmODY2MzQ2M2E0YzRiM2NjYTIxMjk1MTQ5OTYyOWJmOGIyZDRkNDJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIFN0YXBlbGJlcmcgPHN0YXBlbGJlcmdAZGViaWFu Lm9yZz4KRGF0ZTogVHVlLCAxNyBKYW4gMjAxNyAyMjoyNzoxNiArMDEwMApTdWJqZWN0OiBbUEFU Q0hdIEltcGxlbWVudCAtdSAoVU5JWCBzb2NrZXQgYmF0Y2ggcHJvY2Vzc2luZykKClRoZSBvcHRp b24gYXJndW1lbnQgaWRlbnRpZmllcyB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiBhIFVO SVgKbGlzdGVuaW5nIHNvY2tldCB3aGljaCB3YXMgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBw cm9jZXNzIHdoZW4gc2FpZApwYXJlbnQgZXhlYydkIG1hbmRvYy4KCm1hbmRvYyB3aWxsIGFjY2Vw dCBvbmUgY29ubmVjdGlvbiBhdCBhIHRpbWUgb24gdGhhdCBzb2NrZXQuIEFzIGxvbmcgYXMKdGhl IGNvbm5lY3Rpb24gbGl2ZXMsIG1hbmRvYyByZWFkcyAxLWJ5dGUgbWVzc2FnZXMgd2l0aCBhbmNp bGxhcnkgZGF0YQooY29udHJvbCBpbmZvcm1hdGlvbikgZnJvbSB0aGUgY29ubmVjdGlvbi4gVGhl IGFuY2lsbGFyeSBkYXRhIGlzIHVzZWQgdG8KcGFzcyB0aHJlZSBmaWxlIGRlc2NyaXB0b3JzIGZy b20gdGhlIHBhcmVudCBwcm9jZXNzIHRvIG1hbmRvYy4gVGhlc2UKZmlsZSBkZXNjcmlwdG9ycyBh cmUgdGhlbiBkdXAyJ2VkIHRvIGZkIDAsIGZkIDEgYW5kIGZkIDIsIHJlc3BlY3RpdmVseS4KCkFm dGVyIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBzZXQgdXAsIGEgc2luZ2xlIG1hbnBh Z2UgaXMgcmVhZApmcm9tIHN0ZGluIGFuZCBwcm9jZXNzZWQgdG8gc3Rkb3V0L3N0ZGVyci4KClRo aXMgY2hhbmdlIGVmZmVjdGl2ZWx5IGFkZHMgYSBiYXRjaCBwcm9jZXNzaW5nIG1vZGUgdG8gbWFu ZG9jLCB3aGljaAplbGltaW5hdGVzIHRoZSBmb3JrK2V4ZWMgb3ZlcmhlYWQgdGhhdCBvdGhlcndp c2UgYWNjb21wYW5pZXMgdGhlCmNvbnZlcnNpb24gb2YgYSBsYXJnZSBudW1iZXIgb2YgbWFucGFn ZXMuIFRoZSByZXN1bHRpbmcgc3BlZWQtdXAgaGFzCmJlZW4gb2JzZXJ2ZWQgdG8gZXhjZWVkIGEg ZmFjdG9yIG9mIDYsIHJlZHVjaW5nIHRoZSB0b3RhbCBjb252ZXJzaW9uCndhbGwtY2xvY2sgdGlt ZSBvZiBhYm91dCBhIDQ3MGsgbWFucGFnZXMgZnJvbSBtb3JlIHRoYW4gMiBob3VycyB0bwphIG1l cmUgMjIgbWludXRlcy4KLS0tCiBtYWluLmMgfCAxMTQgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2Vk LCAxMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL21haW4uYyBi L21haW4uYwppbmRleCBiNjRiM2JlLi4xMjI1YWNlIDEwMDY0NAotLS0gYS9tYWluLmMKKysrIGIv bWFpbi5jCkBAIC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1 bmlzdGQuaD4KIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKwogI2luY2x1ZGUgIm1hbmRvY19hdXguaCIKICNpbmNs dWRlICJtYW5kb2MuaCIKICNpbmNsdWRlICJyb2ZmLmgiCkBAIC0xMDksNiArMTEzLDUzIEBAIHN0 YXRpYwljaGFyCQkgKmhlbHBfYXJndltdID0ge2hlbHBfYXJnLCBOVUxMfTsKIHN0YXRpYwllbnVt IG1hbmRvY2xldmVsICByYzsKIAogCisjZGVmaW5lIE5VTV9GRFMgMworc3RhdGljIGludCByZWFk X2ZkcyhpbnQgY2xpZW50ZmQsIGludCAqZmRzKSB7CisJc3RydWN0IG1zZ2hkcgkgIG1zZzsKKwl1 bnNpZ25lZCBjaGFyCSAgZHVtbXlbMV07CisJc3RydWN0IGlvdmVjCSAgaW92WzFdOworCXNzaXpl X3QJCSAgbjsKKwlzdHJ1Y3QgY21zZ2hkcgkgICpjbXNnOworCWludAkJICAqd2FsazsKKwlpbnQJ CSAgY250OworCS8qIFVuaW9uIHVzZWQgZm9yIGFsaWdubWVudC4gKi8KKwl1bmlvbiB7CisJCXVp bnQ4X3QgY29udHJvbGJ1ZltDTVNHX1NQQUNFKE5VTV9GRFMgKiBzaXplb2YoaW50KSldOworCQlz dHJ1Y3QgY21zZ2hkciBhbGlnbjsKKwl9IHU7CisKKwltZW1zZXQoJm1zZywgJ1wwJywgc2l6ZW9m KG1zZykpOworCW1zZy5tc2dfY29udHJvbCA9IHUuY29udHJvbGJ1ZjsKKwltc2cubXNnX2NvbnRy b2xsZW4gPSBzaXplb2YodS5jb250cm9sYnVmKTsKKwkvKiBSZWFkIGEgZHVtbXkgYnl0ZSDigJQg c2VuZG1zZyBjYW5ub3Qgc2VuZCBhbiBlbXB0eSBtZXNzYWdlLAorCSAqIGV2ZW4gaWYgd2UgYXJl IG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgT09CIGRhdGEuICovCisJaW92WzBdLmlvdl9iYXNlID0g ZHVtbXk7CisJaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoZHVtbXkpOworCW1zZy5tc2dfaW92ID0g aW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKworCWlmICgobiA9IHJlY3Ztc2coY2xpZW50ZmQs ICZtc2csIDApKSA8IDApCisJCXJldHVybiBuOworCisJaWYgKChjbXNnID0gQ01TR19GSVJTVEhE UigmbXNnKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGNtc2ctPmNtc2dfbGV2ZWwg IT0gU09MX1NPQ0tFVCB8fAorCSAgICBjbXNnLT5jbXNnX3R5cGUgIT0gU0NNX1JJR0hUUykKKwkJ cmV0dXJuIC0xOworCisJaWYgKGNtc2ctPmNtc2dfbGVuICE9IENNU0dfTEVOKE5VTV9GRFMgKiBz aXplb2YoaW50KSkpCisJCXJldHVybiAtMTsKKworCXdhbGsgPSAoaW50KilDTVNHX0RBVEEoY21z Zyk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBOVU1fRkRTOyBjbnQrKykgeworCQlmZHNbY250XSA9 ICp3YWxrOworCQl3YWxrKys7CisJfQorCXJldHVybiBOVU1fRkRTOworfQorCisKIGludAogbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpAQCAtMTMzLDYgKzE4NCwxNiBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkgc3RhdHVzLCBzaWdudW07CiAJaW50CQkgYzsK IAlwaWRfdAkJIHBhZ2VyX3BpZCwgdGNfcGdpZCwgbWFuX3BnaWQsIHBpZDsKKwlpbnQJCSBzb2Nr ZmQ7CisJY29uc3QgY2hhciAJICplcnJzdHI7CisJc3RydWN0IHNvY2thZGRyX3VuIHBlZXI7CisJ c29ja2xlbl90CSBsZW47CisJaW50CQkgY2xpZW50ZmQ7CisJaW50CQkgb2xkX3N0ZGluOworCWlu dAkJIG9sZF9zdGRvdXQ7CisJaW50CQkgb2xkX3N0ZGVycjsKKwlpbnQJCSBmZHNbM107CisJaW50 CQkgbjsKIAogI2lmIEhBVkVfUFJPR05BTUUKIAlwcm9nbmFtZSA9IGdldHByb2duYW1lKCk7CkBA IC0xOTQsOCArMjU1LDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlzaG93X3Vz YWdlID0gMDsKIAlvdXRtb2RlID0gT1VUTU9ERV9ERUY7CiAKKwlzb2NrZmQgPSAtMTsKKwllcnJz dHIgPSBOVUxMOworCiAJd2hpbGUgKC0xICE9IChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsCi0JCQki YUM6Y2ZoSTppSzprbE06bTpPOlM6czpUOlZXOnciKSkpIHsKKwkJCSJhQzpjZmhJOmlLOmtsTTpt Ok86UzpzOlQ6dTpWVzp3IikpKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICdhJzoKIAkJCW91 dG1vZGUgPSBPVVRNT0RFX0FMTDsKQEAgLTI2MSw2ICszMjUsMTMgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQkJaWYgKCAhIHRvcHRpb25zKCZjdXJwLCBvcHRhcmcpKQogCQkJCXJl dHVybiAoaW50KU1BTkRPQ0xFVkVMX0JBREFSRzsKIAkJCWJyZWFrOworCQljYXNlICd1JzoKKwkJ CXNvY2tmZCA9IHN0cnRvbnVtKG9wdGFyZywgMCwgSU5UX01BWCwgJmVycnN0cik7CisJCQlpZiAo ZXJyc3RyKSB7CisJCQkJd2FybngoIi11ICVzOiAlcyIsIG9wdGFyZywgZXJyc3RyKTsKKwkJCQly ZXR1cm4gKGludClNQU5ET0NMRVZFTF9CQURBUkc7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSAn Vyc6CiAJCQlpZiAoICEgd29wdGlvbnMoJmN1cnAsIG9wdGFyZykpCiAJCQkJcmV0dXJuIChpbnQp TUFORE9DTEVWRUxfQkFEQVJHOwpAQCAtNDM2LDYgKzUwNyw0NyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJbWNoYXJzX2FsbG9jKCk7CiAJY3VycC5tcCA9IG1wYXJzZV9hbGxvYyhv cHRpb25zLCBjdXJwLndsZXZlbCwgbW1zZywgZGVmb3MpOwogCisJLyogSWYgLXUgd2FzIHNwZWNp ZmllZCwgYWNjZXB0IFVOSVggc29ja2V0IGNvbm5lY3Rpb25zIHVudGlsIGtpbGxlZC4gKi8KKwl3 aGlsZSAoc29ja2ZkID4gMCkgeworCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsK KwkJY2xpZW50ZmQgPSBhY2NlcHQoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnBlZXIsICZs ZW4pOworCQlpZiAoY2xpZW50ZmQgPCAwKQorCQkJZXJyKChpbnQpTUFORE9DTEVWRUxfU1lTRVJS LCAiYWNjZXB0Iik7CisKKwkJLyogV2UgYWx3YXlzIHN3YXAgZmlsZSBkZXNjcmlwdG9ycyBzbyB0 aGF0IHdlIGNhbiBhbHdheXMKKwkJICogdW5jb25kaXRpb25hbGx5IHVzZSB0aGVpciBmaWxlIGRl c2NyaXB0b3IgbnVtYmVycy4gKi8KKwkJZmZsdXNoKHN0ZG91dCk7CisJCWZmbHVzaChzdGRlcnIp OworCQlvbGRfc3RkaW4gPSBkdXAoU1RESU5fRklMRU5PKTsKKwkJb2xkX3N0ZG91dCA9IGR1cChT VERPVVRfRklMRU5PKTsKKwkJb2xkX3N0ZGVyciA9IGR1cChTVERFUlJfRklMRU5PKTsKKworCQl3 aGlsZSAoMSkgeworCQkJaWYgKChuID0gcmVhZF9mZHMoY2xpZW50ZmQsIGZkcykpIDwgMCkKKwkJ CQlicmVhazsKKworCQkJaWYgKGR1cDIoZmRzWzBdLCBTVERJTl9GSUxFTk8pID09IC0xIHx8CisJ CQkgICAgZHVwMihmZHNbMV0sIFNURE9VVF9GSUxFTk8pID09IC0xIHx8CisJCQkgICAgZHVwMihm ZHNbMl0sIFNUREVSUl9GSUxFTk8pID09IC0xKQorCQkJCWVycigoaW50KU1BTkRPQ0xFVkVMX1NZ U0VSUiwgImR1cDIiKTsKKworCQkJY2xvc2UoZmRzWzBdKTsKKwkJCWNsb3NlKGZkc1sxXSk7CisJ CQljbG9zZShmZHNbMl0pOworCisJCQlwYXJzZSgmY3VycCwgU1RESU5fRklMRU5PLCAiPHVuaXhm ZD4iKTsKKwkJCW1wYXJzZV9yZXNldChjdXJwLm1wKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJ ZmZsdXNoKHN0ZGVycik7CisJCQkvKiBDbG9zZSBmaWxlIGRlc2NyaXB0b3JzIGJ5IHJlc3Rvcmlu ZyB0aGUgb2xkIG9uZXMuICovCisJCQlkdXAyKG9sZF9zdGRpbiwgU1RESU5fRklMRU5PKTsKKwkJ CWR1cDIob2xkX3N0ZG91dCwgU1RET1VUX0ZJTEVOTyk7CisJCQlkdXAyKG9sZF9zdGRlcnIsIFNU REVSUl9GSUxFTk8pOworCQl9CisKKwkJY2xvc2UoY2xpZW50ZmQpOworCX0KKwogCS8qCiAJICog Q29uZGl0aW9uYWxseSBzdGFydCB1cCB0aGUgbG9va2FzaWRlIGJ1ZmZlciBiZWZvcmUgcGFyc2lu Zy4KIAkgKi8KLS0gCjIuMTEuMAoK --94eb2c1a1b66dc394b054699eceb-- -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv