X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=Pt3Fz Cco54x3IGxL83X7hkoWuEH44EzKDprcetriv4ovMwFlDTIRZqtjMeuICY/ALgjN4 UZoKlfbkziMFSUlUHslQWvpOJKfJDKu345NH1o+ANUGuGRZTQS8T0FMnUzLNnxCZ wDiQ5NmPnkkFaRav89GfTQzj1VO0bm2Fqt/8nI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=V7hjYb6vlCv ehImI5qTerCurvcQ=; b=x6FHPtpWkVVFFhCgSpfxuV8oshRr2rflgJ978UKO3OX Q+2pwSbhBvMlVfeGkP8Y/H5LoNB5QEiLRzeIDwCp+I8h7ahBhs550uWvNWV58JOF usufzS3kSO45IXR0Zrffm8y8WR9yznvk/ryAnYXcTqX5goyyp9qvtI6L8d3hG2sg = Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_50,RCVD_IN_SORBS_DUL,SPF_PASS autolearn=ham version=3.3.2 X-HELO: conuserg004-v.nifty.com X-Nifty-SrcIP: [121.93.68.199] Date: Thu, 16 Apr 2015 09:26:18 +0900 From: Takashi Yano To: cygwin AT cygwin DOT com Subject: Re: Cygwin hangs up if several keys are typed during outputting a lot of texts. Message-Id: <20150416092618.9975c0e29b8703dbd8d4aa6a@nifty.ne.jp> In-Reply-To: <20150414073456.GY7343@calimero.vinschen.de> References: <20150304181857 DOT GM3213 AT calimero DOT vinschen DOT de> <20150305202456 DOT 9ac4815a9d590145e15f7ae2 AT nifty DOT ne DOT jp> <20150305125901 DOT GX3213 AT calimero DOT vinschen DOT de> <20150403130735 DOT d04e41875f7defd0e6c2d8d0 AT nifty DOT ne DOT jp> <20150403113226 DOT GP13285 AT calimero DOT vinschen DOT de> <20150404155520 DOT 8564347f1d42b3c709718aad AT nifty DOT ne DOT jp> <20150404084354 DOT GX13285 AT calimero DOT vinschen DOT de> <20150405205504 DOT cda3df2cc76f7bca7c3d21fb AT nifty DOT ne DOT jp> <20150407091113 DOT GB2819 AT calimero DOT vinschen DOT de> <20150413193100 DOT a393612bde79a4ae57b8c7d9 AT nifty DOT ne DOT jp> <20150414073456 DOT GY7343 AT calimero DOT vinschen DOT de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI" X-IsSubscribed: yes --Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi Corinna, On Tue, 14 Apr 2015 09:34:56 +0200 Corinna Vinschen wrote: > And the native client, not knowing what he's talking to, recognizes the > output stream as a normal named pipe, if it's looking for that info at > all. Being native, it will use native Windows MSVCRT stdio calls. > Worse, as you can see in the behaviour of some native applications, the > MSVCRT isatty() call returns 0 for named pipes. > > If we have a Cygwin client, we can do all kinds of stuff on the slave > side, but as soon as we have a native client, only the master side of > the pty has any chance to do the right thing. That's why I wrote that > we don't have the slave side under control. > > Therefore we should really move the OPOST code back to the master side. > I'm reluctant to just revert your patch, though, because I think you > know better how to fix the OPOST code to make it work correctly on the > master side. So OPOST processing should be in master side for native windows program. However, to solve the second problem I had pointed out in http://cygwin.com/ml/cygwin/2015-02/msg00929.html , OPOST processing should be done on a timing when slave calls write(). To solve this antinomy, I have made a patch attached. With this patch, new pipe is introduced to handle OPSOT-process separately between native windows program and cygwin program. Data from cygwin program is passed through the pipe newly introduced. In this case, process_opost_output() is called in fhandler_pty_slave::write(). Master reads data, which is already applied OPOST process, from the new pipe. On the other hands, for native windows program, data is written into conventional pipe. Master forwarding thread, which is also newly introduced, reads conventional pipe and forward the data to the pipe newly introduced by calling process_opost_output(). This makes OPOST processing be done in master side. I have confirmed that the both problem is fixed with this patch. By the way, I know that the names for the new pipe such as io_handle2, to_master2 and output_handle2 are ugly enough. Are there more appropriate names? ChangeLog is as follows. 2015-04-16 Takashi Yano * fhandler.h (class fhandler_base): Add virtual function get_io_handle2 to get handle from which OPOST-processed output is read on PTY master. (class fhandler_pty_slave): Add variable output_handle2 to store handle for OPOST-processed output. Add two functions set_output_handle2() and get_output_handle2() regarding variable output_handle2. Now, output_handle (not 2) is used only by native windows program for OPOST-processing in master side. For cygwin process, output_handle2 is used for handling OPOST-processing in slave side. (class fhandler_pty_master): Add variables io_handle2 and to_master2 to store handles for OPOST-processed output. Add pty_master_fwd_thread and function pty_master_fwd_thread() for a thread which forwards data from io_handle to to_master2 applying OPOST-processing. Add function get_io_handle2() regarding variable io_handle2. Now, io_handle and to_master are used only by native windows program for OPOST-processing in master side. For cygwin process, io_handle2 and to_master2 are used for handling OPOST-processing in slave side. * fhandler_tty.cc (struct pipe_reply): Add member to_master2. (fhandler_pty_master::process_slave_output): Read slave output from io_handle2 rather than io_handle. (fhandler_pty_slave::fhandler_pty_salve): Initialize output_handle2. (fhandler_pty_slave::open): Set output_handle2 by duplicating handle to_master2 on PTY master. (fhandler_pty_slave::close): Close handle output_handle2. (fhandler_pty_slave::write): Write data to output_handle2 rather than output_handle. (fhandler_pty_slave::fch_close_handles): Close handle output_handle2. (fhandler_pty_master::fhandler_pty_master): Initialize io_handle2, to_master2 and master_fwd_thread. (fhandler_pty_master::cleanup): Clean up to_master2 as well. (fhandler_pty_master::close): Print to_master2 as well in debug message. Terminate master forwarding thread. Close handles to_master2 and io_handle2. (fhandler_pty_master::ioctl): Use io_handle2 rather than to_master. (fhandler_pty_master::pty_master_thread): Add code for duplicating handle to_master2. (fhandler_pty_master::pty_master_fwd_thread): New function for a thread to forward OPOST-processed data from io_handle to to_master2. This thread applies OPOST-processing to the output of native windows program. (::pty_master_fwd_thread): Ditto. (fhandler_pty_master::setup): Create new pipe for OPOST-processed output. Create new thread to forward data from io_handle to to_master2. Set handle to_master2 to tty. Print io_handle2 as well in debug message. Close handles io_handle2 and to_master2 in case of error. (fhandler_pty_master::fixup_after_fork): Set handle to_master2 to tty. Copy handle to_master2 from arch->to_master2. (fhandler_pty_master::fixup_after_exec): Clean up to_master2. * select.cc: Check handle returned by get_io_handle2() rather than get_handle(). * tty.h(class tty): Add variable _to_master2 to store handle to which OPOST-processed data is written. Add two functions to_master2() and set_to_master2() regarding _to_master2. -- Takashi Yano --Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI Content-Type: application/octet-stream; name="cygwin.patch.20150416-2" Content-Disposition: attachment; filename="cygwin.patch.20150416-2" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaCBiL3dpbnN1 cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCA2OTRjMjNiLi42OTExMjc3IDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKKysrIGIvd2lu c3VwL2N5Z3dpbi9maGFuZGxlci5oCkBAIC00MTIsNiArNDEyLDcgQEAgcHVi bGljOgogICAgICB0aGF0IHNvbWUgZmQncyBoYXZlIHR3byBoYW5kbGVzLiAq LwogICB2aXJ0dWFsIEhBTkRMRSYgZ2V0X2hhbmRsZSAoKSB7IHJldHVybiBp b19oYW5kbGU7IH0KICAgdmlydHVhbCBIQU5ETEUmIGdldF9pb19oYW5kbGUg KCkgeyByZXR1cm4gaW9faGFuZGxlOyB9CisgIHZpcnR1YWwgSEFORExFJiBn ZXRfaW9faGFuZGxlMiAoKSB7IHJldHVybiBpb19oYW5kbGU7IH0KICAgdmly dHVhbCBIQU5ETEUmIGdldF9vdXRwdXRfaGFuZGxlICgpIHsgcmV0dXJuIGlv X2hhbmRsZTsgfQogICB2aXJ0dWFsIEhBTkRMRSBnZXRfc3RhdF9oYW5kbGUg KCkgeyByZXR1cm4gcGMuaGFuZGxlICgpID86IGlvX2hhbmRsZTsgfQogICB2 aXJ0dWFsIEhBTkRMRSBnZXRfZWNob19oYW5kbGUgKCkgY29uc3QgeyByZXR1 cm4gTlVMTDsgfQpAQCAtMTUxNiw2ICsxNTE3LDcgQEAgY2xhc3MgZmhhbmRs ZXJfcHR5X2NvbW1vbjogcHVibGljIGZoYW5kbGVyX3Rlcm1pb3MKIGNsYXNz IGZoYW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0eV9jb21t b24KIHsKICAgSEFORExFIGludXNlOwkJCS8vIHVzZWQgdG8gaW5kaWNhdGUg dGhhdCBhIHR0eSBpcyBpbiB1c2UKKyAgSEFORExFIG91dHB1dF9oYW5kbGUy OwogCiAgIC8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGZjaG1vZCBhbmQgZmNo b3duLiAqLwogICBib29sIGZjaF9vcGVuX2hhbmRsZXMgKGJvb2wgY2hvd24p OwpAQCAtMTUyNiw2ICsxNTI4LDkgQEAgY2xhc3MgZmhhbmRsZXJfcHR5X3Ns YXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAvKiBDb25zdHJ1 Y3RvciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7CiAKKyAgdm9p ZCBzZXRfb3V0cHV0X2hhbmRsZTIgKEhBTkRMRSBoKSB7IG91dHB1dF9oYW5k bGUyID0gaDsgfQorICBIQU5ETEUmIGdldF9vdXRwdXRfaGFuZGxlMiAoKSB7 IHJldHVybiBvdXRwdXRfaGFuZGxlMjsgfQorCiAgIGludCBvcGVuIChpbnQg ZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Blbl9zZXR1cCAo aW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IGxlbik7CkBAIC0xNTc1LDEzICsxNTgwLDE3 IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9tYXN0ZXI6IHB1YmxpYyBmaGFuZGxl cl9wdHlfY29tbW9uCiAgIEhBTkRMRSBmcm9tX21hc3RlciwgdG9fbWFzdGVy OwogICBIQU5ETEUgZWNob19yLCBlY2hvX3c7CiAgIERXT1JEIGR3UHJvY2Vz c0lkOwkJLy8gT3duZXIgb2YgbWFzdGVyIGhhbmRsZXMKKyAgSEFORExFIGlv X2hhbmRsZTIsIHRvX21hc3RlcjI7CisgIGN5Z3RocmVhZCAqbWFzdGVyX2Z3 ZF90aHJlYWQ7CS8vIE1hc3RlciBmb3J3YXJkaW5nIHRocmVhZAogCiBwdWJs aWM6CiAgIEhBTkRMRSBnZXRfZWNob19oYW5kbGUgKCkgY29uc3QgeyByZXR1 cm4gZWNob19yOyB9CisgIEhBTkRMRSYgZ2V0X2lvX2hhbmRsZTIgKCkgeyBy ZXR1cm4gaW9faGFuZGxlMjsgfQogICAvKiBDb25zdHJ1Y3RvciAqLwogICBm aGFuZGxlcl9wdHlfbWFzdGVyIChpbnQpOwogCiAgIERXT1JEIHB0eV9tYXN0 ZXJfdGhyZWFkICgpOworICBEV09SRCBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQg KCk7CiAgIGludCBwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVmLCBz aXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbik7CiAgIHZvaWQgZG9lY2hvIChj b25zdCB2b2lkICpzdHIsIERXT1JEIGxlbik7CiAgIGludCBhY2NlcHRfaW5w dXQgKCk7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0 eS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IGNj Yjc2ZDkuLmYzMTk0OTUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5 LmNjCkBAIC00Miw2ICs0Miw3IEBAIHN0cnVjdCBwaXBlX3JlcXVlc3Qgewog c3RydWN0IHBpcGVfcmVwbHkgewogICBIQU5ETEUgZnJvbV9tYXN0ZXI7CiAg IEhBTkRMRSB0b19tYXN0ZXI7CisgIEhBTkRMRSB0b19tYXN0ZXIyOwogICBE V09SRCBlcnJvcjsKIH07CiAKQEAgLTIzNiw3ICsyMzcsNyBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjpwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVm LCBzaXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbgogCSAgLyogQ2hlY2sgZWNo byBwaXBlIGZpcnN0LiAqLwogCSAgaWYgKDo6Ynl0ZXNfYXZhaWxhYmxlIChl Y2hvX2NudCwgZWNob19yKSAmJiBlY2hvX2NudCA+IDApCiAJICAgIGJyZWFr OwotCSAgaWYgKCFieXRlc19hdmFpbGFibGUgKG4pKQorCSAgaWYgKCE6OmJ5 dGVzX2F2YWlsYWJsZSAobiwgZ2V0X2lvX2hhbmRsZTIgKCkpKQogCSAgICBn b3RvIGVycjsKIAkgIGlmIChuKQogCSAgICBicmVhazsKQEAgLTI5Nyw3ICsy OTgsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwcm9jZXNzX3NsYXZlX291 dHB1dCAoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbgog CSAgICAgIGdvdG8gZXJyOwogCSAgICB9CiAJfQotICAgICAgZWxzZSBpZiAo IVJlYWRGaWxlIChnZXRfaGFuZGxlICgpLCBvdXRidWYsIHJsZW4sICZuLCBO VUxMKSkKKyAgICAgIGVsc2UgaWYgKCFSZWFkRmlsZSAoZ2V0X2lvX2hhbmRs ZTIgKCksIG91dGJ1ZiwgcmxlbiwgJm4sIE5VTEwpKQogCXsKIAkgIHRlcm1p b3NfcHJpbnRmICgiUmVhZEZpbGUgZmFpbGVkLCAlRSIpOwogCSAgZ290byBl cnI7CkBAIC0zMzIsNyArMzMzLDcgQEAgb3V0OgogLyogcHR5IHNsYXZlIHN0 dWZmICovCiAKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6ZmhhbmRsZXJfcHR5X3Ns YXZlIChpbnQgdW5pdCkKLSAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgpLCBp bnVzZSAoTlVMTCkKKyAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgpLCBpbnVz ZSAoTlVMTCksIG91dHB1dF9oYW5kbGUyIChOVUxMKQogewogICBpZiAodW5p dCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVWX1BUWVNfTUFKT1IsIHVu aXQpOwpAQCAtMzQxLDExICszNDIsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZl OjpmaGFuZGxlcl9wdHlfc2xhdmUgKGludCB1bml0KQogaW50CiBmaGFuZGxl cl9wdHlfc2xhdmU6Om9wZW4gKGludCBmbGFncywgbW9kZV90KQogewotICBI QU5ETEUgcHR5X293bmVyLCBmcm9tX21hc3Rlcl9sb2NhbCwgdG9fbWFzdGVy X2xvY2FsOworICBIQU5ETEUgcHR5X293bmVyLCBmcm9tX21hc3Rlcl9sb2Nh bCwgdG9fbWFzdGVyX2xvY2FsLCB0b19tYXN0ZXIyX2xvY2FsOwogICBIQU5E TEUgKmhhbmRsZXNbXSA9CiAgIHsKICAgICAmZnJvbV9tYXN0ZXJfbG9jYWws ICZpbnB1dF9hdmFpbGFibGVfZXZlbnQsICZpbnB1dF9tdXRleCwgJmludXNl LAotICAgICZvdXRwdXRfbXV0ZXgsICZ0b19tYXN0ZXJfbG9jYWwsICZwdHlf b3duZXIsCisgICAgJm91dHB1dF9tdXRleCwgJnRvX21hc3Rlcl9sb2NhbCwg JnB0eV9vd25lciwgJnRvX21hc3RlcjJfbG9jYWwsCiAgICAgTlVMTAogICB9 OwogCkBAIC0zOTYsNyArMzk3LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpv cGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgICByZWxlYXNlX291dHB1dF9t dXRleCAoKTsKICAgfQogCi0gIGlmICghZ2V0X3R0eXAgKCktPmZyb21fbWFz dGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyICgpKQorICBpZiAo IWdldF90dHlwICgpLT5mcm9tX21hc3RlciAoKSB8fAorICAgICAgIWdldF90 dHlwICgpLT50b19tYXN0ZXIgKCkgfHwgIWdldF90dHlwICgpLT50b19tYXN0 ZXIyICgpKQogICAgIHsKICAgICAgIGVycm1zZyA9ICJwdHkgaGFuZGxlcyBo YXZlIGJlZW4gY2xvc2VkIjsKICAgICAgIHNldF9lcnJubyAoRUFDQ0VTKTsK QEAgLTQ0Nyw2ICs0NDksMTMgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVu IChpbnQgZmxhZ3MsIG1vZGVfdCkKIAkgIGVycm1zZyA9ICJjYW4ndCBkdXBs aWNhdGUgb3V0cHV0LCAlRSI7CiAJICBnb3RvIGVycjsKIAl9CisgICAgICBp ZiAoIUR1cGxpY2F0ZUhhbmRsZSAocHR5X293bmVyLCBnZXRfdHR5cCAoKS0+ dG9fbWFzdGVyMiAoKSwKKwkJCSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZ0 b19tYXN0ZXIyX2xvY2FsLCAwLCBUUlVFLAorCQkJICBEVVBMSUNBVEVfU0FN RV9BQ0NFU1MpKQorCXsKKwkgIGVycm1zZyA9ICJjYW4ndCBkdXBsaWNhdGUg b3V0cHV0MiwgJUUiOworCSAgZ290byBlcnI7CisJfQogICAgICAgaWYgKHB0 eV9vd25lciAhPSBHZXRDdXJyZW50UHJvY2VzcyAoKSkKIAlDbG9zZUhhbmRs ZSAocHR5X293bmVyKTsKICAgICB9CkBAIC00NjcsNyArNDc2LDggQEAgZmhh bmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIAl9 CiAgICAgICBmcm9tX21hc3Rlcl9sb2NhbCA9IHJlcGwuZnJvbV9tYXN0ZXI7 CiAgICAgICB0b19tYXN0ZXJfbG9jYWwgPSByZXBsLnRvX21hc3RlcjsKLSAg ICAgIGlmICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIXRvX21hc3Rlcl9sb2Nh bCkKKyAgICAgIHRvX21hc3RlcjJfbG9jYWwgPSByZXBsLnRvX21hc3RlcjI7 CisgICAgICBpZiAoIWZyb21fbWFzdGVyX2xvY2FsIHx8ICF0b19tYXN0ZXJf bG9jYWwgfHwgIXRvX21hc3RlcjJfbG9jYWwpCiAJewogCSAgU2V0TGFzdEVy cm9yIChyZXBsLmVycm9yKTsKIAkgIGVycm1zZyA9ICJlcnJvciBkdXBsaWNh dGluZyBwaXBlcywgJUUiOwpAQCAtNDc2LDE0ICs0ODYsMTggQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgICB9 CiAgIFZlcmlmeUhhbmRsZSAoZnJvbV9tYXN0ZXJfbG9jYWwpOwogICBWZXJp ZnlIYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CisgIFZlcmlmeUhhbmRsZSAo dG9fbWFzdGVyMl9sb2NhbCk7CiAKICAgdGVybWlvc19wcmludGYgKCJkdXBs aWNhdGVkIGZyb21fbWFzdGVyICVwLT4lcCBmcm9tIHB0eV9vd25lciIsCiAJ CSAgZ2V0X3R0eXAgKCktPmZyb21fbWFzdGVyICgpLCBmcm9tX21hc3Rlcl9s b2NhbCk7CiAgIHRlcm1pb3NfcHJpbnRmICgiZHVwbGljYXRlZCB0b19tYXN0 ZXIgJXAtPiVwIGZyb20gcHR5X293bmVyIiwKIAkJICBnZXRfdHR5cCAoKS0+ dG9fbWFzdGVyICgpLCB0b19tYXN0ZXJfbG9jYWwpOworICB0ZXJtaW9zX3By aW50ZiAoImR1cGxpY2F0ZWQgdG9fbWFzdGVyMiAlcC0+JXAgZnJvbSBwdHlf b3duZXIiLAorCQkgIGdldF90dHlwICgpLT50b19tYXN0ZXIyICgpLCB0b19t YXN0ZXIyX2xvY2FsKTsKIAogICBzZXRfaW9faGFuZGxlIChmcm9tX21hc3Rl cl9sb2NhbCk7CiAgIHNldF9vdXRwdXRfaGFuZGxlICh0b19tYXN0ZXJfbG9j YWwpOworICBzZXRfb3V0cHV0X2hhbmRsZTIgKHRvX21hc3RlcjJfbG9jYWwp OwogCiAgIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwog ICBzZXRfb3Blbl9zdGF0dXMgKCk7CkBAIC01MzIsNiArNTQ2LDkgQEAgZmhh bmRsZXJfcHR5X3NsYXZlOjpjbG9zZSAoKQogICAgIHRlcm1pb3NfcHJpbnRm ICgiQ2xvc2VIYW5kbGUgKGludXNlKSwgJUUiKTsKICAgaWYgKCFGb3JjZUNs b3NlSGFuZGxlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQpKQogICAgIHRlcm1p b3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGlucHV0X2F2YWlsYWJsZV9ldmVu dDwlcD4pLCAlRSIsIGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisgIGlmICgh Rm9yY2VDbG9zZUhhbmRsZSAoZ2V0X291dHB1dF9oYW5kbGUyICgpKSkKKyAg ICB0ZXJtaW9zX3ByaW50ZiAoIkNsb3NlSGFuZGxlIChnZXRfb3V0cHV0X2hh bmRsZSAoKTwlcD4pLCAlRSIsCisJZ2V0X291dHB1dF9oYW5kbGUyICgpKTsK ICAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZf UFRZU19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25z b2xlOjpmcmVlX2NvbnNvbGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUg dGhlIGxhc3QgcHR5IGNsb3NlciAqLwogICByZXR1cm4gZmhhbmRsZXJfcHR5 X2NvbW1vbjo6Y2xvc2UgKCk7CkBAIC01OTAsNyArNjA3LDcgQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg bGVuKQogCiAgIHB1c2hfcHJvY2Vzc19zdGF0ZSBwcm9jZXNzX3N0YXRlIChQ SURfVFRZT1UpOwogCi0gIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKGdl dF9vdXRwdXRfaGFuZGxlICgpLCBwdHIsIHRvd3JpdGUsIGZhbHNlKSkKKyAg aWYgKCFwcm9jZXNzX29wb3N0X291dHB1dCAoZ2V0X291dHB1dF9oYW5kbGUy ICgpLCBwdHIsIHRvd3JpdGUsIGZhbHNlKSkKICAgICB7CiAgICAgICBEV09S RCBlcnIgPSBHZXRMYXN0RXJyb3IgKCk7CiAgICAgICB0ZXJtaW9zX3ByaW50 ZiAoIldyaXRlRmlsZSBmYWlsZWQsICVFIik7CkBAIC0xMDY4LDYgKzEwODUs NyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OmZjaF9jbG9zZV9oYW5kbGVzICgp CiB7CiAgIGNsb3NlX21heWJlIChnZXRfaW9faGFuZGxlICgpKTsKICAgY2xv c2VfbWF5YmUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsKKyAgY2xvc2VfbWF5 YmUgKGdldF9vdXRwdXRfaGFuZGxlMiAoKSk7CiAgIGNsb3NlX21heWJlIChp bnB1dF9hdmFpbGFibGVfZXZlbnQpOwogICBjbG9zZV9tYXliZSAob3V0cHV0 X211dGV4KTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X211dGV4KTsKQEAgLTEx NDAsNyArMTE1OCw4IEBAIGVycm91dDoKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OmZoYW5kbGVyX3B0eV9tYXN0ZXIgKGludCB1bml0KQogICA6IGZoYW5kbGVy X3B0eV9jb21tb24gKCksIHBrdG1vZGUgKDApLCBtYXN0ZXJfY3RsIChOVUxM KSwKICAgICBtYXN0ZXJfdGhyZWFkIChOVUxMKSwgZnJvbV9tYXN0ZXIgKE5V TEwpLCB0b19tYXN0ZXIgKE5VTEwpLAotICAgIGVjaG9fciAoTlVMTCksIGVj aG9fdyAoTlVMTCksIGR3UHJvY2Vzc0lkICgwKQorICAgIGVjaG9fciAoTlVM TCksIGVjaG9fdyAoTlVMTCksIGR3UHJvY2Vzc0lkICgwKSwKKyAgICBpb19o YW5kbGUyIChOVUxMKSwgdG9fbWFzdGVyMiAoTlVMTCksIG1hc3Rlcl9md2Rf dGhyZWFkIChOVUxMKQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAo KS5wYXJzZSAoREVWX1BUWU1fTUFKT1IsIHVuaXQpOwpAQCAtMTE5OCwxNSAr MTIxNywxNSBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbGVhbnVwICgpCiB7 CiAgIHJlcG9ydF90dHlfY291bnRzICh0aGlzLCAiY2xvc2luZyBtYXN0ZXIi LCAiIik7CiAgIGlmIChhcmNoZXR5cGUpCi0gICAgZnJvbV9tYXN0ZXIgPSB0 b19tYXN0ZXIgPSBOVUxMOworICAgIGZyb21fbWFzdGVyID0gdG9fbWFzdGVy ID0gdG9fbWFzdGVyMiA9IE5VTEw7CiAgIGZoYW5kbGVyX2Jhc2U6OmNsZWFu dXAgKCk7CiB9CiAKIGludAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2Ug KCkKIHsKLSAgdGVybWlvc19wcmludGYgKCJjbG9zaW5nIGZyb21fbWFzdGVy KCVwKS90b19tYXN0ZXIoJXApIHNpbmNlIHdlIG93biB0aGVtKCV1KSIsCi0J CSAgZnJvbV9tYXN0ZXIsIHRvX21hc3RlciwgZHdQcm9jZXNzSWQpOworICB0 ZXJtaW9zX3ByaW50ZiAoImNsb3NpbmcgZnJvbV9tYXN0ZXIoJXApL3RvX21h c3RlciglcCkvdG9fbWFzdGVyMiglcCkgc2luY2Ugd2Ugb3duIHRoZW0oJXUp IiwKKwkJICBmcm9tX21hc3RlciwgdG9fbWFzdGVyLCB0b19tYXN0ZXIyLCBk d1Byb2Nlc3NJZCk7CiAgIGlmIChjeWd3aW5fZmluaXNoZWRfaW5pdGlhbGl6 aW5nKQogICAgIHsKICAgICAgIGlmIChtYXN0ZXJfY3RsICYmIGdldF90dHlw ICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlkKQpAQCAtMTIyOSw2ICsx MjQ4LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKIAkgICAg ICBtYXN0ZXJfY3RsID0gTlVMTDsKIAkgICAgfQogCSAgcmVsZWFzZV9vdXRw dXRfbXV0ZXggKCk7CisJICBtYXN0ZXJfZndkX3RocmVhZC0+dGVybWluYXRl X3RocmVhZCAoKTsKIAl9CiAgICAgfQogCkBAIC0xMjQ1LDYgKzEyNjUsMTEg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKICAgaWYgKCFGb3Jj ZUNsb3NlSGFuZGxlICh0b19tYXN0ZXIpKQogICAgIHRlcm1pb3NfcHJpbnRm ICgiZXJyb3IgY2xvc2luZyB0b19tYXN0ZXIgJXAsICVFIiwgdG9fbWFzdGVy KTsKICAgZnJvbV9tYXN0ZXIgPSB0b19tYXN0ZXIgPSBOVUxMOworICBpZiAo IUZvcmNlQ2xvc2VIYW5kbGUgKGdldF9pb19oYW5kbGUyICgpKSkKKyAgICB0 ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgaW9faGFuZGxlMiAlcCwg JUUiLCBnZXRfaW9faGFuZGxlMiAoKSk7CisgIGlmICghRm9yY2VDbG9zZUhh bmRsZSAodG9fbWFzdGVyMikpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJv ciBjbG9zaW5nIHRvX21hc3RlcjIgJXAsICVFIiwgdG9fbWFzdGVyMik7Cisg IGdldF9pb19oYW5kbGUyICgpID0gdG9fbWFzdGVyMiA9IE5VTEw7CiAgIEZv cmNlQ2xvc2VIYW5kbGUgKGVjaG9fcik7CiAgIEZvcmNlQ2xvc2VIYW5kbGUg KGVjaG9fdyk7CiAgIGVjaG9fciA9IGVjaG9fdyA9IE5VTEw7CkBAIC0xMzUx LDcgKzEzNzYsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjppb2N0bCAodW5z aWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgIGNhc2UgRklPTlJFQUQ6 CiAgICAgICB7CiAJRFdPUkQgbjsKLQlpZiAoITo6Ynl0ZXNfYXZhaWxhYmxl IChuLCB0b19tYXN0ZXIpKQorCWlmICghOjpieXRlc19hdmFpbGFibGUgKG4s IGdldF9pb19oYW5kbGUyICgpKSkKIAkgIHsKIAkgICAgc2V0X2Vycm5vIChF SU5WQUwpOwogCSAgICByZXR1cm4gLTE7CkBAIC0xNTIxLDYgKzE1NDYsMTMg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl90aHJlYWQgKCkK IAkgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkR1cGxpY2F0ZUhhbmRsZSAodG9f bWFzdGVyKSwgJUUiKTsKIAkgICAgICBnb3RvIHJlcGx5OwogCSAgICB9CisJ ICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoR2V0Q3VycmVudFByb2Nlc3MgKCks IHRvX21hc3RlcjIsCisJCQkJY2xpZW50LCAmcmVwbC50b19tYXN0ZXIyLAor CQkJCTAsIFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJICAgIHsK KwkgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkR1cGxpY2F0ZUhhbmRsZSAodG9f bWFzdGVyMiksICVFIik7CisJICAgICAgZ290byByZXBseTsKKwkgICAgfQog CX0KIHJlcGx5OgogICAgICAgcmVwbC5lcnJvciA9IEdldExhc3RFcnJvciAo KTsKQEAgLTE1NDYsNiArMTU3OCw0MCBAQCBwdHlfbWFzdGVyX3RocmVhZCAo Vk9JRCAqYXJnKQogICByZXR1cm4gKChmaGFuZGxlcl9wdHlfbWFzdGVyICop IGFyZyktPnB0eV9tYXN0ZXJfdGhyZWFkICgpOwogfQogCitEV09SRAorZmhh bmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCit7 CisgIERXT1JEIHJsZW47CisgIGNoYXIgb3V0YnVmW09VVF9CVUZGRVJfU0la RV07CisKKyAgdGVybWlvc19wcmludGYoIlN0YXJ0ZWQuIik7CisgIGZvciAo OzspCisgICAgeworICAgICAgaWYgKCFSZWFkRmlsZSAoZ2V0X2lvX2hhbmRs ZSAoKSwgb3V0YnVmLCBzaXplb2Ygb3V0YnVmLCAmcmxlbiwgTlVMTCkpCisJ eworCSAgdGVybWlvc19wcmludGYgKCJSZWFkRmlsZSBmb3IgZm9yd2FyZGlu ZyBmYWlsZWQsICVFIik7CisJICBicmVhazsKKwl9CisgICAgICBzc2l6ZV90 IHdsZW4gPSBybGVuOworICAgICAgd2hpbGUgKHJsZW4+MCkKKwl7CisJICBp ZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0ICh0b19tYXN0ZXIyLCBvdXRidWYs IHdsZW4sIGZhbHNlKSkKKwkgICAgeworCSAgICAgIHRlcm1pb3NfcHJpbnRm ICgiV3JpdGVGaWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsKKwkg ICAgICBicmVhazsKKwkgICAgfQorCSAgcmxlbiAtPSB3bGVuOworCX0KKyAg ICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgRFdPUkQgV0lOQVBJCitw dHlfbWFzdGVyX2Z3ZF90aHJlYWQgKFZPSUQgKmFyZykKK3sKKyAgcmV0dXJu ICgoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBhcmcpLT5wdHlfbWFzdGVyX2Z3 ZF90aHJlYWQgKCk7Cit9CisKIGJvb2wKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OnNldHVwICgpCiB7CkBAIC0xNTgyLDYgKzE2NDgsMTUgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6c2V0dXAgKCkKICAgICAgIGdvdG8gZXJyOwogICAgIH0K IAorICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAicHR5JWQtdG8tbWFz dGVyMiIsIHVuaXQpOworICByZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUg KCZzZWNfbm9uZSwgJmdldF9pb19oYW5kbGUyICgpLCAmdG9fbWFzdGVyMiwK KwkJCSAgICAgICBmaGFuZGxlcl9wdHlfY29tbW9uOjpwaXBlc2l6ZSwgcGlw ZW5hbWUsIDApOworICBpZiAocmVzKQorICAgIHsKKyAgICAgIGVycnN0ciA9 ICJvdXRwdXQgcGlwZSAyIjsKKyAgICAgIGdvdG8gZXJyOworICAgIH0KKwog ICBQcm90ZWN0SGFuZGxlMSAoZ2V0X2lvX2hhbmRsZSAoKSwgZnJvbV9wdHkp OwogCiAgIF9fc21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC1lY2hv bG9vcCIsIHVuaXQpOwpAQCAtMTY0MCwyOCArMTcxNSwzNyBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICAgICAgZXJyc3RyID0gInB0eSBt YXN0ZXIgY29udHJvbCB0aHJlYWQiOwogICAgICAgZ290byBlcnI7CiAgICAg fQorICBtYXN0ZXJfZndkX3RocmVhZCA9IG5ldyBjeWd0aHJlYWQgKDo6cHR5 X21hc3Rlcl9md2RfdGhyZWFkLCB0aGlzLCAicHR5bSIpOworICBpZiAoIW1h c3Rlcl9md2RfdGhyZWFkKQorICAgIHsKKyAgICAgIGVycnN0ciA9ICJwdHkg bWFzdGVyIGZvcndhcmRpbmcgdGhyZWFkIjsKKyAgICAgIGdvdG8gZXJyOwor ICAgIH0KIAogICB0LnNldF9mcm9tX21hc3RlciAoZnJvbV9tYXN0ZXIpOwog ICB0LnNldF90b19tYXN0ZXIgKHRvX21hc3Rlcik7CisgIHQuc2V0X3RvX21h c3RlcjIgKHRvX21hc3RlcjIpOwogICB0LndpbnNpemUud3NfY29sID0gODA7 CiAgIHQud2luc2l6ZS53c19yb3cgPSAyNTsKICAgdC5tYXN0ZXJfcGlkID0g bXlzZWxmLT5waWQ7CiAKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9NQUpP UiwgdW5pdCk7CiAKLSAgdGVybWlvc19wcmludGYgKCJ0aGlzICVwLCBwdHkl ZCBvcGVuZWQgLSBmcm9tX3B0eSAlcCwgdG9fcHR5ICVwIiwgdGhpcywgdW5p dCwKLQkJICBnZXRfaW9faGFuZGxlICgpLCBnZXRfb3V0cHV0X2hhbmRsZSAo KSk7CisgIHRlcm1pb3NfcHJpbnRmICgidGhpcyAlcCwgcHR5JWQgb3BlbmVk IC0gZnJvbV9wdHkgPCVwLCVwPiwgdG9fcHR5ICVwIiwKKwl0aGlzLCB1bml0 LCBnZXRfaW9faGFuZGxlICgpLCBnZXRfaW9faGFuZGxlMiAoKSwgZ2V0X291 dHB1dF9oYW5kbGUgKCkpOwogICByZXR1cm4gdHJ1ZTsKIAogZXJyOgogICBf X3NldGVycm5vICgpOwogICBjbG9zZV9tYXliZSAoZ2V0X2lvX2hhbmRsZSAo KSk7CisgIGNsb3NlX21heWJlIChnZXRfaW9faGFuZGxlMiAoKSk7CiAgIGNs b3NlX21heWJlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSk7CiAgIGNsb3NlX21h eWJlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwogICBjbG9zZV9tYXliZSAo b3V0cHV0X211dGV4KTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X211dGV4KTsK ICAgY2xvc2VfbWF5YmUgKGZyb21fbWFzdGVyKTsKICAgY2xvc2VfbWF5YmUg KHRvX21hc3Rlcik7CisgIGNsb3NlX21heWJlICh0b19tYXN0ZXIyKTsKICAg Y2xvc2VfbWF5YmUgKGVjaG9fcik7CiAgIGNsb3NlX21heWJlIChlY2hvX3cp OwogICBjbG9zZV9tYXliZSAobWFzdGVyX2N0bCk7CkBAIC0xNjgxLDExICsx NzY1LDEzIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OmZpeHVwX2FmdGVyX2Zv cmsgKEhBTkRMRSBwYXJlbnQpCiAJewogCSAgdC5zZXRfZnJvbV9tYXN0ZXIg KGFyY2gtPmZyb21fbWFzdGVyKTsKIAkgIHQuc2V0X3RvX21hc3RlciAoYXJj aC0+dG9fbWFzdGVyKTsKKwkgIHQuc2V0X3RvX21hc3RlcjIgKGFyY2gtPnRv X21hc3RlcjIpOwogCX0KICAgICAgIGFyY2gtPmR3UHJvY2Vzc0lkID0gd3Bp ZDsKICAgICB9CiAgIGZyb21fbWFzdGVyID0gYXJjaC0+ZnJvbV9tYXN0ZXI7 CiAgIHRvX21hc3RlciA9IGFyY2gtPnRvX21hc3RlcjsKKyAgdG9fbWFzdGVy MiA9IGFyY2gtPnRvX21hc3RlcjI7CiAgIHJlcG9ydF90dHlfY291bnRzICh0 aGlzLCAiaW5oZXJpdGVkIG1hc3RlciIsICIiKTsKIH0KIApAQCAtMTY5NSw3 ICsxNzgxLDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Zml4dXBfYWZ0ZXJf ZXhlYyAoKQogICBpZiAoIWNsb3NlX29uX2V4ZWMgKCkpCiAgICAgZml4dXBf YWZ0ZXJfZm9yayAoc3Bhd25faW5mby0+cGFyZW50KTsKICAgZWxzZQotICAg IGZyb21fbWFzdGVyID0gdG9fbWFzdGVyID0gTlVMTDsKKyAgICBmcm9tX21h c3RlciA9IHRvX21hc3RlciA9IHRvX21hc3RlcjIgPSBOVUxMOwogfQogCiBC T09MCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3NlbGVjdC5jYyBiL3dp bnN1cC9jeWd3aW4vc2VsZWN0LmNjCmluZGV4IDE3MDZjODcuLjFiNjUyODAg MTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dp bnN1cC9jeWd3aW4vc2VsZWN0LmNjCkBAIC04MCw3ICs4MCw3IEBAIGRldGFp bHMuICovCiAjZGVmaW5lIGNvcHlmZF9zZXQodG8sIGZyb20sIG4pIG1lbWNw eSAodG8sIGZyb20sIHNpemVvZl9mZF9zZXQgKG4pKTsKIAogI2RlZmluZSBz ZXRfaGFuZGxlX29yX3JldHVybl9pZl9ub3Rfb3BlbihoLCBzKSBcCi0gIGgg PSAocyktPmZoLT5nZXRfaGFuZGxlICgpOyBcCisgIGggPSAocyktPmZoLT5n ZXRfaW9faGFuZGxlMiAoKTsgXAogICBpZiAoY3lnaGVhcC0+ZmR0YWIubm90 X29wZW4gKChzKS0+ZmQpKSBcCiAgICAgeyBcCiAgICAgICAocyktPnRocmVh ZF9lcnJubyA9ICBFQkFERjsgXApAQCAtMTI2NCw3ICsxMjY0LDcgQEAgZmhh bmRsZXJfYmFzZTo6c2VsZWN0X3JlYWQgKHNlbGVjdF9zdHVmZiAqc3MpCiAg ICAgICBzLT5zdGFydHVwID0gbm9fc3RhcnR1cDsKICAgICAgIHMtPnZlcmlm eSA9IHZlcmlmeV9vazsKICAgICB9Ci0gIHMtPmggPSBnZXRfaGFuZGxlICgp OworICBzLT5oID0gZ2V0X2lvX2hhbmRsZTIgKCk7CiAgIHMtPnJlYWRfc2Vs ZWN0ZWQgPSB0cnVlOwogICBzLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKICAgcmV0 dXJuIHM7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3R0eS5oIGIvd2lu c3VwL2N5Z3dpbi90dHkuaAppbmRleCAyN2Q0M2Y3Li5jZjM1MDhhIDEwMDY0 NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5oCisrKyBiL3dpbnN1cC9jeWd3 aW4vdHR5LmgKQEAgLTkyLDEyICs5MiwxNSBAQCBwdWJsaWM6CiBwcml2YXRl OgogICBIQU5ETEUgX2Zyb21fbWFzdGVyOwogICBIQU5ETEUgX3RvX21hc3Rl cjsKKyAgSEFORExFIF90b19tYXN0ZXIyOwogCiBwdWJsaWM6CiAgIEhBTkRM RSBmcm9tX21hc3RlcigpIGNvbnN0IHsgcmV0dXJuIF9mcm9tX21hc3Rlcjsg fQogICBIQU5ETEUgdG9fbWFzdGVyKCkgY29uc3QgeyByZXR1cm4gX3RvX21h c3RlcjsgfQorICBIQU5ETEUgdG9fbWFzdGVyMigpIGNvbnN0IHsgcmV0dXJu IF90b19tYXN0ZXIyOyB9CiAgIHZvaWQgc2V0X2Zyb21fbWFzdGVyIChIQU5E TEUgaCkgeyBfZnJvbV9tYXN0ZXIgPSBoOyB9CiAgIHZvaWQgc2V0X3RvX21h c3RlciAoSEFORExFIGgpIHsgX3RvX21hc3RlciA9IGg7IH0KKyAgdm9pZCBz ZXRfdG9fbWFzdGVyMiAoSEFORExFIGgpIHsgX3RvX21hc3RlcjIgPSBoOyB9 CiAKICAgaW50IHJlYWRfcmV0dmFsOwogICBib29sIHdhc19vcGVuZWQ7CS8q IFRydWUgaWYgb3BlbmVkIGF0IGxlYXN0IG9uY2UuICovCg== --Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI Content-Type: text/plain; charset=us-ascii -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI--