delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/02/27/16:22:22

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63,RCVD_IN_DNSWL_LOW,SPF_PASS
X-Spam-Check-By: sourceware.org
Message-ID: <49A85971.6070300@cwilson.fastmail.fm>
Date: Fri, 27 Feb 2009 16:21:53 -0500
From: Charles Wilson <cygwin AT cwilson DOT fastmail DOT fm>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.19) Gecko/20081209 Thunderbird/2.0.0.19 Mnenhy/0.7.6.666
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: [1.7] rebaseall doesn't solve the problem
References: <499F6682 DOT 1090204 AT cwilson DOT fastmail DOT fm> <20090224100616 DOT GC6035 AT calimero DOT vinschen DOT de>
In-Reply-To: <20090224100616.GC6035@calimero.vinschen.de>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--------------000701020409080206070409
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Corinna Vinschen wrote:
>> which means that locale.nls extends all the way down to 0x005E1000, so
>> Cwd.dll can't go at 0x00860000.
> 
> Hm?  Isn't that end_of_mapped_region = mapped_location + mapped_size?

You're right. I was confused by the upside-down chart I was looking at.

> I'm wondering if that's a result of ASLR in Vista.  The document
> http://taossa.com.nyud.net:8080/archive/bh08sotirovdowd.pdf describes,
> starting at page 11, a registry key to influence Vista's ASLR behaviour.
> Does that change the behaviour for you?

It *changes* the behavior, but doesn't fix it.

the default case is key not present, or key present and equal to
anything other than 0 or -1/0xffffffff. In this case, only those DLLs
explicitly marked ASLR-compatible are supposed to be relocated --
subject to the other normal relocation rules.

with the registry key set to 0 (disable ASLR, even if the DLL says it is
ASLR-compatible), I get the same behavior as before: can't remap Cwd.dll.

with the registry key set to -1/0xffffffff (force ASLR for all DLLs), I
get slightly different behavior: can't allocate stack. Presumably this
is because cygwin1.dll itself falls victim to relocation in this
situation (verified this by looking at cygwin1.dll's load address).

> If so, there's nothing Cygwin can do against that.  In the long run,
> only a native fork() implementation would help.

Well, maybe not! From the document you referenced:

    Since Windows relies on relocations instead of position
    independent code, a DLL must be loaded at the same address
    in each process that uses it to allow the physical memory
    used by the DLL to be shared. To facilitate this behaviour,
    a global bitmap called _MiImageBitMap is used to represent
    the address space from 0x50000000 to 0x78000000. The bitmap
    is 0x2800 bits in length with each bit representing 64KB
    of memory. As each DLL is loaded, its position is recorded
    by setting the appropriate bits in the bitmap to mark the
    memory where the DLL is being mapped. When the same DLL
    is loaded in another process, its section object is reused
    and it is mapped at the same virtual addresses.

So, by marking a particular (or all but cygwin1.dll?) DLL as
ASLR-compatibile, we may be able to coerce the Windows runtime loader
into ensuring that the DLLs are loaded at the same memory location for
all concurrent processes (unless the parent has filled up the space from
0x50000000 to 0x78000000, and so is forced to put an ASLR-compatible DLL
somewhere else that is not tracked by _MiImageBitMap).


I wrote a little utility to explicitly mark a DLL as ASLR-compatible.
Using it on Cwd.dll -- the offending one in my situation -- I was able
to eliminate the problem!

I've created it as a patch to the rebase package: 'aslr.exe' is a
separate utility and doesn't actually use the imagebase library.  I've
also modified rebaseall to optionally call it after rebase.  It seems to
work okay; I've manually used it on a dozen or so DLLs -- but I'm still
a little nervous about running it on EVERYTHING in my installation,
since it doesn't quite have the history behind it that rebase does.

Another pair of eyes (or dozen) looking at the code would be nice...

Patch attached. Jason?

--
Chuck

--------------000701020409080206070409
Content-Type: application/x-patch;
 name="rebase-2.4.4-1.aslr.patch"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="rebase-2.4.4-1.aslr.patch"

ZGlmZiAtTnVhciByZWJhc2UtMi40LjQtMS1vcmlnL0NoYW5nZXMgcmViYXNl
LTIuNC40LTEvQ2hhbmdlcwotLS0gcmViYXNlLTIuNC40LTEtb3JpZy9DaGFu
Z2VzCTIwMDUtMDctMjggMDk6Mjk6NDkuMDAwMDAwMDAwIC0wNDAwCisrKyBy
ZWJhc2UtMi40LjQtMS9DaGFuZ2VzCTIwMDktMDItMjcgMTY6MTM6MzIuMTU2
MzAxMzAwIC0wNTAwCkBAIC0xLDUgKzEsMjQgQEAKICRJZDogQ2hhbmdlcyx2
IDEuMyAyMDA1LzA3LzI4IDEzOjI5OjQ0IGp0IEV4cCAkCiAKKyAgICAqIE5l
dyBhc2xyIHV0aWxpdHkgYWxsb3dzIHRvIG1hbmlwdWxhdGUgdGhlIGZvbGxv
d2luZworICAgICAgZmxhZ3MgaW4gRExMczoKKyAgICAgICAgIC1hIDEgIC0t
PiBFbmFibGUgQWRkcmVzcyBTcGFjZSBMYXlvdXQgUmFuZG9taXphdGlvbgor
ICAgICAgICAgLWEgMCAgLS0+IERpc2FibGUgQWRkcmVzcyBTcGFjZSBMYXlv
dXQgUmFuZG9taXphdGlvbgorICAgICAgICAgLW4gMSAgLS0+IEluZGljYXRl
IHRoYXQgRExMIGlzIGNvbXBhdGlibGUgd2l0aCBERVAgKE5YOiBubyBleGVj
dXRlKQorICAgICAgICAgLW4gMCAgLS0+IERvbid0IGluZGljYXRlIGNvbXBh
dGliaWxpdHkgd2l0aCBERVAKKyAgICAgICAgIC10IDEgIC0tPiBJbmRpY2F0
ZSB0aGF0IERMTCBpcyAndGVybWluYWwtc2VydmljZXMgYXdhcmUnCisgICAg
ICAgICAtdCAwICAtLT4gRG9uJ3QgaW5kaWNhdGUgJ3Rlcm1pbmFsLXNlcnZp
Y2VzJyBhd2FyZW5lc3MKKyAgICAgIEJ5IGRlZmF1bHQsIGN5Z3dpbiBETExz
IGhhdmUgMCBmb3IgYWxsIHRocmVlIGZsYWdzLiBVc2luZyAKKyAgICAgIC1u
MS8tdDEgaXMgdW50ZXN0ZWQsIGJ1dCAtYTEgbWF5IGJlIHVzZWZ1bCBvbiBX
aW5kb3dzIFZpc3RhCisgICAgICBhbmQgYWJvdmUuIFRoaXMgaXMgaGlnaGx5
IGV4cGVyaW1lbnRhbDsgVVNFIEFUIFlPVVIgT1dOIFJJU0shCisKKyAgICAg
IFJ1biB0aGUgdXRpbGl0eSB3aXRob3V0IGFueSBhcmd1bWVudHMgdG8gc2Vl
IHRoZSBjdXJyZW50CisgICAgICBmbGFnIHNldHRpbmdzIGZvciBhIGdpdmVu
IERMTCBvciBsaXN0IG9mIERMTHMuCisKK1RoZSBmb2xsb3dpbmcgYXJlIHRo
ZSBjaGFuZ2VzIHRvIHJlYmFzZWFsbDoKKyAgICAqIEV4Y2x1ZGUgY3lnbHNh
NjQuZGxsIGZyb20gcmViYXNlIGxpc3QKKyAgICAqIE9wdGlvbmFsbHkgcnVu
ICdhc2xyIC1hIDEnIG9uIGVhY2ggZmlsZSBhZnRlciByZWJhc2luZworCiAy
LjQ6CiA9PT0KIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBjaGFuZ2VzIHRvIHJl
YmFzZWFsbDoKZGlmZiAtTnVhciByZWJhc2UtMi40LjQtMS1vcmlnL01ha2Vm
aWxlIHJlYmFzZS0yLjQuNC0xL01ha2VmaWxlCi0tLSByZWJhc2UtMi40LjQt
MS1vcmlnL01ha2VmaWxlCTIwMDgtMDYtMDcgMTY6NDA6NDkuMDAwMDAwMDAw
IC0wNDAwCisrKyByZWJhc2UtMi40LjQtMS9NYWtlZmlsZQkyMDA5LTAyLTI3
IDE2OjExOjQ4LjMzOTEwMTMwMCAtMDUwMApAQCAtMTgsNyArMTgsNyBAQAog
SU5TVEFMTCA9IGluc3RhbGwKIENGTEFHUyA9IC1PMiAtSSBpbWFnZWhlbHBl
cgogCi1hbGw6IHJlYmFzZQorYWxsOiByZWJhc2UgYXNscgogCiAuUEhPTlk6
IGltYWdlaGVscGVyCiAKQEAgLTMwLDEyICszMCwyMCBAQAogCS1ETElCX1ZF
UlNJT049JyIkKExpYlZlcnNpb24pIicgXAogCS1jIC1vICRAICQ8CiAKK2Fz
bHI6IGFzbHIubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgYXNsci5vCisK
K2FzbHIubzogYXNsci5jIE1ha2VmaWxlCisJJChDQykgJChDRkxBR1MpIC1E
VkVSU0lPTj0nIiQoVmVyc2lvbikiJyBcCisJLWMgLW8gJEAgJDwKKwogaW1h
Z2VoZWxwZXI6CiAJJChNQUtFKSAtQyBpbWFnZWhlbHBlciBpbWFnZWhlbHBl
cgogCiBpbnN0YWxsOiBhbGwKIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikk
KEJJTkRJUikKIAkkKElOU1RBTEwpIC1tIDc1NSByZWJhc2UgJChERVNURElS
KSQoQklORElSKQorCSQoSU5TVEFMTCkgLW0gNzU1IGFzbHIgJChERVNURElS
KSQoQklORElSKQogCSQoSU5TVEFMTCkgLW0gNzU1IHJlYmFzZWFsbCAkKERF
U1RESVIpJChCSU5ESVIpCiAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChE
T0NESVIpCiAJJChJTlNUQUxMKSAtbSA2NDQgUkVBRE1FICQoREVTVERJUikk
KERPQ0RJUikvcmViYXNlLSQoVmVyc2lvbikuUkVBRE1FCmRpZmYgLU51YXIg
cmViYXNlLTIuNC40LTEtb3JpZy9SRUFETUUgcmViYXNlLTIuNC40LTEvUkVB
RE1FCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL1JFQURNRQkyMDA4LTA2LTA3
IDE2OjUwOjQ5LjAwMDAwMDAwMCAtMDQwMAorKysgcmViYXNlLTIuNC40LTEv
UkVBRE1FCTIwMDktMDItMjcgMTY6MTA6MzAuMDcwNTAxMzAwIC0wNTAwCkBA
IC00OSw2ICs0OSwzMCBAQAogZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGFkZGVk
IHRvIEN5Z3dpbidzIHNldHVwLmV4ZSwgc28gdGhhdCByZWJhc2luZyB3aWxs
CiBoYXBwZW4gYXV0b21hdGljYWxseS4KIAorT24gVmlzdGEgYW5kIG5ld2Vy
LCBpdCBpcyBwb3NzaWJsZSB0byBlbXBsb3kgdGhlIEFkZHJlc3MgU3BhY2Ug
TGF5b3V0CitSYW5kb21pemF0aW9uIGZhY2l0aWxpdHkgdG8gaGVscCBzb2x2
ZSB0aGUgaW1hZ2UgbG9hZCBhZGRyZXNzIGNsYXNoaW5nCitwcm9ibGVtOgor
CisgICAgU2luY2UgV2luZG93cyByZWxpZXMgb24gcmVsb2NhdGlvbnMgaW5z
dGVhZCBvZiBwb3NpdGlvbgorICAgIGluZGVwZW5kZW50IGNvZGUsIGEgRExM
IG11c3QgYmUgbG9hZGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MKKyAgICBpbiBl
YWNoIHByb2Nlc3MgdGhhdCB1c2VzIGl0IHRvIGFsbG93IHRoZSBwaHlzaWNh
bCBtZW1vcnkKKyAgICB1c2VkIGJ5IHRoZSBETEwgdG8gYmUgc2hhcmVkLiBU
byBmYWNpbGl0YXRlIHRoaXMgYmVoYXZpb3VyLAorICAgIGEgZ2xvYmFsIGJp
dG1hcCBjYWxsZWQgX01pSW1hZ2VCaXRNYXAgaXMgdXNlZCB0byByZXByZXNl
bnQKKyAgICB0aGUgYWRkcmVzcyBzcGFjZSBmcm9tIDB4NTAwMDAwMDAgdG8g
MHg3ODAwMDAwMC4gVGhlIGJpdG1hcAorICAgIGlzIDB4MjgwMCBiaXRzIGlu
IGxlbmd0aCB3aXRoIGVhY2ggYml0IHJlcHJlc2VudGluZyA2NEtCCisgICAg
b2YgbWVtb3J5LiBBcyBlYWNoIERMTCBpcyBsb2FkZWQsIGl0cyBwb3NpdGlv
biBpcyByZWNvcmRlZAorICAgIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRl
IGJpdHMgaW4gdGhlIGJpdG1hcCB0byBtYXJrIHRoZQorICAgIG1lbW9yeSB3
aGVyZSB0aGUgRExMIGlzIGJlaW5nIG1hcHBlZC4gV2hlbiB0aGUgc2FtZSBE
TEwKKyAgICBpcyBsb2FkZWQgaW4gYW5vdGhlciBwcm9jZXNzLCBpdHMgc2Vj
dGlvbiBvYmplY3QgaXMgcmV1c2VkCisgICAgYW5kIGl0IGlzIG1hcHBlZCBh
dCB0aGUgc2FtZSB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAgICBodHRwOi8vdGFv
c3NhLmNvbS5ueXVkLm5ldDo4MDgwL2FyY2hpdmUvYmgwOHNvdGlyb3Zkb3dk
LnBkZgorCitUaHVzLCBJRiBhbGwgY3lnd2luIGRsbHMgKGV4Y2VwdCBjeWd3
aW4xLmRsbCkgLS0gb3IsIGF0IGxlYXN0IHRoZQorb25lcyBmb3Igd2hpY2gg
eW91IG9mdGVuIGdldCB0aGUgKioqIHVuYWJsZSB0byByZW1hcCAqKiogZXJy
b3IgLS0KK2FyZSBtYXJrZWQgQVNMUi1jb21wYXRpYmxlLCB0aGVuIHRoZSBX
aW5kb3dzIHJ1bnRpbWUgbG9hZGVyIGNhbiBiZQorY29lcmNlZCBpbnRvIGVu
c3VyaW5nIHRoYXQgdGhlIERMTHMgYXJlIGxvYWRlZCBhdCB0aGUgc2FtZSBt
ZW1vcnkKK2xvY2F0aW9uIGZvciBhbGwgY29uY3VycmVudCBwcm9jZXNzZXMu
CisKIFJlcXVpcmVtZW50czoKIAogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBv
ciBsYXRlciBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgYW5kL29yIGV4ZWN1dGUK
QEAgLTgxLDEwICsxMDUsMTIgQEAKIAogVGhlIGZvbGxvd2luZyBpcyB0aGUg
cmViYXNlYWxsIGNvbW1hbmQgbGluZSBzeW50YXg6CiAKLSAgICByZWJhc2Vh
bGwgWy1iIEJhc2VBZGRyZXNzXSBbLW8gT2Zmc2V0XSBbLVQgRmlsZUxpc3Qg
fCAtXSBbLXZdCisgICAgcmViYXNlYWxsIFstYV0gWy1BIEFzbHJPcHRzXSBb
LWIgQmFzZUFkZHJlc3NdIFstbyBPZmZzZXRdIFstVCBGaWxlTGlzdCB8IC1d
IFstdl0KIAogd2hlcmU6CiAKKyAgICAtYSA9PiBhbHNvIHJ1biBhc2xyIHV0
aWxpdHkgb24gZWFjaCBETEwgYWZ0ZXIgcmViYXNpbmcKKyAgICAtQSA9PiBz
cGVjaWZ5IGV4cGxpY2l0IG9wdGlvbnMgZm9yIGFzbHIgKGRlZmF1bHQ6IC1h
IDEpCiAgICAgLWIgPT4gYmFzZSBhZGRyZXNzIHVzZWQgYnkgcmViYXNlIChk
ZWZhdWx0OiAweDcwMDAwMDAwKQogICAgIC1vID0+IG9mZnNldCBiZXR3ZWVu
IGVhY2ggRExMIHJlYmFzZWQgKGRlZmF1bHQ6IDB4MTAwMDApCiAgICAgLXMg
PT4gc3BlY2lmeSBETEwgc3VmZml4LCB1c2UgbXVsdGlwbGUgaWYgbmVjZXNz
YXJ5IChkZWZhdWx0OiBkbGwsIHNvKQpAQCAtMTA0LDYgKzEzMCwyNSBAQAog
ICAgIC1WID0+IGRpc3BsYXkgdmVyc2lvbiBhbmQgZXhpdAogICAgIC12ID0+
IHZlcmJvc2UgKGRlZmF1bHQ6IG9mZikKIAorVGhlIGZvbGxvd2luZyBpcyB0
aGUgYXNsciBjb21tYW5kIGxpbmUgc3ludGF4OgorCisgICAgYXNsciBbLWEg
Qk9PTF0gWy1uIEJPT0xdIFstdCBCT09MXSBbLVZ2XSBbLVQgRmlsZUxpc3Qg
fCAtXSBGaWxlcy4uLgorCit3aGVyZToKKworICAgIC1hID0+IG1vZGlmeSBB
ZGRyZXNzIFNwYWNlIExheW91dCBSYW5kb21pemF0aW9uIGZsYWcKKyAgICAt
biA9PiBtb2RpZnkgTlggQ29tcGF0aWJpbGl0eSBmbGFnCisgICAgLXQgPT4g
bW9kaWZ5IFRlcm1pbmFsIFNlcnZlciBBd2FyZSBmbGFnCisgICAgLVQgPT4g
c3BlY2lmeSBmaWxlbGlzdCAob3Igc3RkaW4pIHRvIGxpc3QgYWRkaXRpb25h
bCBmaWxlcworICAgIC1WID0+IGRpc3BsYXkgdmVyc2lvbiBhbmQgZXhpdAor
ICAgIC12ID0+IHZlcmJvc2UgKGRlZmF1bHQ6IG9mZikKKworICAgIEJPT0wg
bWF5IGJlIDAsIGZhbHNlLCBubywgZiBvciBuOiBleHBsaWNpdGx5IG1hcmtz
IHRoZSBhc3NvY2lhdGVkCisgICAgZmFjaWxpdHkgZGlzYWJsZWQuICBCT09M
IG1heSBhbHNvIGJlIGEgbm9uLXplcm8gaW50ZWdlciwgdHJ1ZSwgeWVzLAor
ICAgIHQsIG9yIHk6IGV4cGxpY2l0bHkgbWFya3MgdGhlIGFzc29jaWF0ZWQg
ZmFjaWxpdHkgZW5hYmxlZC4gSWYgYXNscgorICAgIGlzIGV4ZWN1dGVkIHdp
dGggbm9uZSBvZiAtYS8tbi8tdCwgdGhlbiBpdCB3aWxsIHNpbXBseSBkaXNw
bGF5IHRoZQorICAgIGN1cnJlbnQgc3RhdHVzIG9mIHRob3NlIGZsYWdzIGZv
ciBlYWNoIERMTC4KKwogU291cmNlOgogCiBDeWd3aW4gcmViYXNlIGJ1aWxk
cyBPT1RCIHVuZGVyIEN5Z3dpbi4gIFdpdGggbWlub3IgTWFrZWZpbGUgdHdl
YWtpbmcsCkBAIC0xMzEsNiArMTc2LDkgQEAKIAogNC4gcmViYXNlIHNraXBz
IHJlYWQtb25seSBETExzLgogCitJc3N1ZXMgIzEsICMyLCBhbmQgIzQgYWxz
byBhcHBseSB0byB0aGUgYXNsciB1dGlsaXR5LgorCisKIEhvbWVwYWdlOgog
CiBUaGUgcHJpbWFyeSByZWJhc2Ugd2ViIHNpdGUgaXM6CmRpZmYgLU51YXIg
cmViYXNlLTIuNC40LTEtb3JpZy9hc2xyLmMgcmViYXNlLTIuNC40LTEvYXNs
ci5jCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL2FzbHIuYwkxOTY5LTEyLTMx
IDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgcmViYXNlLTIuNC40LTEv
YXNsci5jCTIwMDktMDItMjcgMTU6MjY6MzAuMzc5OTAxMzAwIC0wNTAwCkBA
IC0wLDAgKzEsNDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENo
YXJsZXMgV2lsc29uCisgKiBCYXNlZCBvbiByZWJhc2UuYyBieSBKYXNvbiBU
aXNobGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
cgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBBIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGNhbiBiZSBmb3VuZCBhdAorICogaHR0cDovL3d3dy5nbnUub3JnLworICov
CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp
bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk
ZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUg
PHdpbmRvd3MuaD4KKworI2lmbmRlZiBJTUFHRV9ETExDSEFSQUNURVJJU1RJ
Q1NfTlhfQ09NUEFUCisjZGVmaW5lIElNQUdFX0RMTENIQVJBQ1RFUklTVElD
U19OWF9DT01QQVQgMHgwMTAwCisjZW5kaWYKKworQk9PTCBkb19tYXJrIChj
b25zdCBjaGFyICpwYXRobmFtZSk7Cit2b2lkIHBhcnNlX2FyZ3MgKGludCBh
cmdjLCBjaGFyICphcmd2W10pOworQk9PTCBzdHJpbmdfdG9fYm9vbCAgKGNv
bnN0IGNoYXIgKnN0cmluZywgQk9PTCAqdmFsdWUpOworQk9PTCBzdHJpbmdf
dG9fdWxvbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbG9uZyAq
dmFsdWUpOwordm9pZCB1c2FnZSAoKTsKK0JPT0wgZ2V0X2NoYXJhY3Rlcmlz
dGljcyhjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBCT09MKiBoYXNfcmVsb2NfaW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBXT1JEKiBwZV9kbGxfY2hhcmFjdGVyaXN0aWNzKTsKK0JP
T0wgc2V0X2NoYXJhY3RlcmlzdGljcyhjb25zdCBjaGFyICpwYXRobmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEIHBlX2RsbF9jaGFyYWN0
ZXJpc3RpY3MpOworY29uc3QgY2hhciAqIGRsbF9jaGFyc190b19zdHJpbmcg
KFdPUkQgcGVfZGxsX2NoYXJhY3RlcmlzdGljcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXT1JEIGZsYWcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHBzdHIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIG5z
dHIpOworc3RhdGljIEJPT0wgcGVfZ2V0MTYgKGludCBmZCwgb2ZmX3Qgb2Zm
c2V0LCB1bnNpZ25lZCBzaG9ydCogdmFsdWUpOworc3RhdGljIEJPT0wgcGVf
Z2V0MzIgKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nKiB2
YWx1ZSk7CitzdGF0aWMgQk9PTCBwZV9zZXQxNiAoaW50IGZkLCBvZmZfdCBv
ZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKK0ZJTEUgKmZpbGVfbGlz
dF9mb3BlbiAoY29uc3QgY2hhciAqZmlsZV9saXN0KTsKK2NoYXIgKmZpbGVf
bGlzdF9mZ2V0cyAoY2hhciAqYnVmLCBpbnQgc2l6ZSwgRklMRSAqZmlsZSk7
CitpbnQgZmlsZV9saXN0X2ZjbG9zZSAoRklMRSAqZmlsZSk7Cit2b2lkIHZl
cnNpb24gKCk7CisKK2ludCBtYXJrX2FzbHIgPSAwOyAvKiAwOiBkbyBub3Ro
aW5nOyAxOiBtYXJrOyAtMTogdW5tYXJrICovCitpbnQgbWFya19ueCAgID0g
MDsgLyogMDogZG8gbm90aGluZzsgMTogbWFyazsgLTE6IHVubWFyayAqLwor
aW50IG1hcmtfdHMgICA9IDA7IC8qIDA6IGRvIG5vdGhpbmc7IDE6IG1hcms7
IC0xOiB1bm1hcmsgKi8KK2ludCBhcmdzX2luZGV4ID0gMDsKK2ludCB2ZXJi
b3NlID0gMDsKK2NvbnN0IGNoYXIgKmZpbGVfbGlzdCA9IDA7Citjb25zdCBj
aGFyICpzdGRpbl9maWxlX2xpc3QgPSAiLSI7CisKK2ludAorbWFpbiAoaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGkgPSAwOworCisgIHBh
cnNlX2FyZ3MgKGFyZ2MsIGFyZ3YpOworCisgIC8qIE9wZXJhdGUgb24gZmls
ZXMgaW4gZmlsZSBsaXN0LCBpZiBzcGVjaWZpZWQuICovCisgIGlmIChmaWxl
X2xpc3QpCisgICAgeworICAgICAgQk9PTCBzdGF0dXMgPSBUUlVFOworICAg
ICAgY2hhciBmaWxlbmFtZVtNQVhfUEFUSCArIDJdOworICAgICAgRklMRSAq
ZmlsZSA9IGZpbGVfbGlzdF9mb3BlbiAoZmlsZV9saXN0KTsKKyAgICAgIGlm
ICghZmlsZSkKKwlleGl0ICgyKTsKKworICAgICAgd2hpbGUgKGZpbGVfbGlz
dF9mZ2V0cyAoZmlsZW5hbWUsIE1BWF9QQVRIICsgMiwgZmlsZSkpCisJewor
CSAgc3RhdHVzID0gZG9fbWFyayAoZmlsZW5hbWUpOworCSAgaWYgKCFzdGF0
dXMpCisJICAgIGJyZWFrOworCX0KKworICAgICAgZmlsZV9saXN0X2ZjbG9z
ZSAoZmlsZSk7CisgICAgICBpZiAoIXN0YXR1cykKKwlleGl0ICgyKTsKKyAg
ICB9CisKKyAgLyogT3BlcmF0ZSBvbiBmaWxlcyBsaXN0ZWQgYXMgY29tbWFu
ZCBsaW5lIGFyZ3VtZW50cy4gKi8KKyAgZm9yIChpID0gYXJnc19pbmRleDsg
aSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpmaWxl
bmFtZSA9IGFyZ3ZbaV07CisgICAgICBCT09MIHN0YXR1cyA9IGRvX21hcmsg
KGZpbGVuYW1lKTsKKyAgICAgIGlmICghc3RhdHVzKQorCWV4aXQgKDIpOwor
ICAgIH0KKworICBleGl0ICgwKTsKK30KKworQk9PTAorZG9fbWFyayAoY29u
c3QgY2hhciAqcGF0aG5hbWUpCit7CisgIEJPT0wgbWFya19hbnkgPSAobWFy
a19hc2xyICE9IDAgfHwgbWFya19ueCAhPSAwIHx8IG1hcmtfdHMgIT0gMCk7
CisgIEJPT0wgc3RhdHVzLCBzdGF0dXMyOworICBCT09MIGhhc19yZWxvY19p
bmZvOworICBXT1JEIG9sZF9kbGxfY2hhcmFjdGVyaXN0aWNzOworICBXT1JE
IG5ld19kbGxfY2hhcmFjdGVyaXN0aWNzOworCisgIC8qIFNraXAgaWYgZmls
ZSBkb2VzIG5vdCBleGlzdCAqLworICBpZiAoYWNjZXNzIChwYXRobmFtZSwg
Rl9PSykgPT0gLTEpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
JXM6IHNraXBwZWQgYmVjYXVzZSBub25leGlzdGVudFxuIiwgcGF0aG5hbWUp
OworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgIGlmICghbWFya19h
bnkpCisgICAgeworICAgICAgLyogU2tpcCBpZiBub3Qgd3JpdGFibGUuICov
CisgICAgICBpZiAoYWNjZXNzIChwYXRobmFtZSwgV19PSykgPT0gLTEpCisg
ICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogc2tp
cHBlZCBiZWNhdXNlIG5vdCB3cml0YWJsZVxuIiwgcGF0aG5hbWUpOworICAg
ICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgIGlm
ICghZ2V0X2NoYXJhY3RlcmlzdGljcyAocGF0aG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmhhc19yZWxvY19pbmZvLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvbGRfZGxsX2NoYXJhY3RlcmlzdGljcykp
CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAg
ICAgIiVzOiBza2lwcGVkIGJlY2F1c2UgY291bGQgbm90IHJlYWQgZmlsZSBj
aGFyYWN0ZXJpc3RpY3NcbiIsCisgICAgICAgICAgICAgICBwYXRobmFtZSk7
CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIG5ld19kbGxfY2hhcmFj
dGVyaXN0aWNzID0gb2xkX2RsbF9jaGFyYWN0ZXJpc3RpY3M7CisgIAorICBp
ZiAobWFya19hbnkpCisgICAgeworICAgICAgaWYgKGhhc19yZWxvY19pbmZv
KQorICAgICAgICB7CisgICAgICAgICAgaWYgKG1hcmtfYXNsciA+IDApCisg
ICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3RlcmlzdGljcyB8PSBJTUFHRV9E
TExfQ0hBUkFDVEVSSVNUSUNTX0RZTkFNSUNfQkFTRTsKKyAgICAgICAgICBl
bHNlIGlmIChtYXJrX2FzbHIgPCAwKQorICAgICAgICAgICAgbmV3X2RsbF9j
aGFyYWN0ZXJpc3RpY3MgJj0gfklNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1Nf
RFlOQU1JQ19CQVNFOworICAgIAorICAgICAgICAgIGlmIChtYXJrX254ID4g
MCkKKyAgICAgICAgICAgIG5ld19kbGxfY2hhcmFjdGVyaXN0aWNzIHw9IElN
QUdFX0RMTENIQVJBQ1RFUklTVElDU19OWF9DT01QQVQ7CisgICAgICAgICAg
ZWxzZSBpZiAobWFya19ueCA8IDApCisgICAgICAgICAgICBuZXdfZGxsX2No
YXJhY3RlcmlzdGljcyAmPSB+SU1BR0VfRExMQ0hBUkFDVEVSSVNUSUNTX05Y
X0NPTVBBVDsKKyAgICAKKyAgICAgICAgICBpZiAobWFya190cyA+IDApCisg
ICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3RlcmlzdGljcyB8PSBJTUFHRV9E
TExDSEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFOworICAg
ICAgICAgIGVsc2UgaWYgKG1hcmtfdHMgPCAwKQorICAgICAgICAgICAgbmV3
X2RsbF9jaGFyYWN0ZXJpc3RpY3MgJj0gfklNQUdFX0RMTENIQVJBQ1RFUklT
VElDU19URVJNSU5BTF9TRVJWRVJfQVdBUkU7CisgICAKKyAgICAgICAgICBp
ZiAoIXNldF9jaGFyYWN0ZXJpc3RpY3MgKHBhdGhuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2RsbF9jaGFyYWN0ZXJp
c3RpY3MpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRm
IChzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICIlczogY291bGQg
bm90IHVwZGF0ZSBjaGFyYWN0ZXJpc3RpY3NcbiIsCisgICAgICAgICAgICAg
ICAgICAgICAgIHBhdGhuYW1lKTsKKyAgICAgICAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICIlczog
c2tpcHBlZCBiZWNhdXNlIGRvZXMgbm90IGNvbnRhaW4gcmVsb2NhdGlvbiBp
bmZvXG4iLAorICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAg
ICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgIC8q
IERpc3BsYXkgaW1hZ2UgY2hhcmFjdGVyaXN0aWNzLiAqLworICBpZiAodmVy
Ym9zZSB8fCAhbWFya19hbnkpCisgICAgeworICAgICAgcHJpbnRmICgiJXM6
IG9sZCA9IDB4JTA0eCAlcyVzJXMsIG5ldyA9IDB4JTA0eCAlcyVzJXNcbiIs
IHBhdGhuYW1lLAorICAgICAgICAgICAgICBvbGRfZGxsX2NoYXJhY3Rlcmlz
dGljcywKKyAgICAgICAgICAgICAgZGxsX2NoYXJzX3RvX3N0cmluZyAob2xk
X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1NfRFlOQU1J
Q19CQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Wythc2xyXSIsIlstYXNscl0iKSwKKyAgICAgICAgICAgICAgZGxsX2NoYXJz
X3RvX3N0cmluZyAob2xkX2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX0RMTENIQVJBQ1RF
UklTVElDU19OWF9DT01QQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJbK254XSIsIlstbnhdIiksCisgICAgICAgICAgICAgIGRs
bF9jaGFyc190b19zdHJpbmcgKG9sZF9kbGxfY2hhcmFjdGVyaXN0aWNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9ETExD
SEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyt0c19hd2FyZV0iLCJb
LXRzX2F3YXJlXSIpLAorICAgICAgICAgICAgICBuZXdfZGxsX2NoYXJhY3Rl
cmlzdGljcywKKyAgICAgICAgICAgICAgZGxsX2NoYXJzX3RvX3N0cmluZyAo
bmV3X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElNQUdFX0RMTF9DSEFSQUNURVJJU1RJQ1NfRFlO
QU1JQ19CQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiWythc2xyXSIsIlstYXNscl0iKSwKKyAgICAgICAgICAgICAgZGxsX2No
YXJzX3RvX3N0cmluZyAobmV3X2RsbF9jaGFyYWN0ZXJpc3RpY3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX0RMTENIQVJB
Q1RFUklTVElDU19OWF9DT01QQVQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJbK254XSIsIlstbnhdIiksCisgICAgICAgICAgICAg
IGRsbF9jaGFyc190b19zdHJpbmcgKG5ld19kbGxfY2hhcmFjdGVyaXN0aWNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9E
TExDSEFSQUNURVJJU1RJQ1NfVEVSTUlOQUxfU0VSVkVSX0FXQVJFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyt0c19hd2FyZV0i
LCJbLXRzX2F3YXJlXSIpKTsKKyAgICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9
CisKK2NvbnN0IGNoYXIgKgorZGxsX2NoYXJzX3RvX3N0cmluZyAoV09SRCBw
ZV9kbGxfY2hhcmFjdGVyaXN0aWNzLAorICAgICAgICAgICAgICAgICAgICAg
V09SRCBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
IHBzdHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogbnN0
cikKK3sKKyAgaWYgKChwZV9kbGxfY2hhcmFjdGVyaXN0aWNzICYgZmxhZykg
PT0gZmxhZykKKyAgICByZXR1cm4gcHN0cjsKKyAgcmV0dXJuIG5zdHI7Cit9
Cit2b2lkCitwYXJzZV9hcmdzIChpbnQgYXJnYywgY2hhciAqYXJndltdKQor
eworICBjb25zdCBjaGFyICphbk9wdGlvbnMgPSAiOmE6bjp0OlQ6dlYiOwor
ICBpbnQgYW5PcHRpb24gPSAwOworICBCT09MIGJvb2xfdmFsdWU7CisKKyAg
Zm9yIChhbk9wdGlvbjsgKGFuT3B0aW9uID0gZ2V0b3B0IChhcmdjLCBhcmd2
LCBhbk9wdGlvbnMpKSAhPSAtMTspCisgICAgeworICAgICAgc3dpdGNoIChh
bk9wdGlvbikKKwl7CisJY2FzZSAnYSc6CisJICBpZiAoIXN0cmluZ190b19i
b29sIChvcHRhcmcsICZib29sX3ZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiSW52YWxpZCBhcmd1bWVu
dCBmb3IgLWE6ICVzXG4iLCBvcHRhcmcpOworCSAgICAgIHVzYWdlICgpOwor
CSAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIG1h
cmtfYXNsciA9IChib29sX3ZhbHVlID8gMSA6IC0xKTsKKwkgIGJyZWFrOwor
CWNhc2UgJ24nOgorCSAgaWYgKCFzdHJpbmdfdG9fYm9vbCAob3B0YXJnLCAm
Ym9vbF92YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZw
cmludGYgKHN0ZGVyciwgIkludmFsaWQgYXJndW1lbnQgZm9yIC1uOiAlc1xu
Iiwgb3B0YXJnKTsKKwkgICAgICB1c2FnZSAoKTsKKwkgICAgICBleGl0ICgx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBtYXJrX254ID0gKGJvb2xf
dmFsdWUgPyAxIDogLTEpOworCSAgYnJlYWs7CisJY2FzZSAndCc6CisJICBp
ZiAoIXN0cmluZ190b19ib29sIChvcHRhcmcsICZib29sX3ZhbHVlKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
SW52YWxpZCBhcmd1bWVudCBmb3IgLXQ6ICVzXG4iLCBvcHRhcmcpOworCSAg
ICAgIHVzYWdlICgpOworCSAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAg
fQorICAgICAgICAgIG1hcmtfdHMgPSAoYm9vbF92YWx1ZSA/IDEgOiAtMSk7
CisJICBicmVhazsKKwljYXNlICdUJzoKKwkgIGZpbGVfbGlzdCA9IG9wdGFy
ZzsKKwkgIGJyZWFrOworCWNhc2UgJ3YnOgorCSAgdmVyYm9zZSA9IFRSVUU7
CisJICBicmVhazsKKwljYXNlICdWJzoKKwkgIHZlcnNpb24gKCk7CisJICBl
eGl0ICgxKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICB1c2FnZSAoKTsK
KwkgIGV4aXQgKDEpOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICBhcmdz
X2luZGV4ID0gb3B0aW5kOworfQorCitCT09MCitzdHJpbmdfdG9fYm9vbCAo
Y29uc3QgY2hhciAqc3RyaW5nLCBCT09MICp2YWx1ZSkKK3sKKyAgdW5zaWdu
ZWQgbG9uZyBudW1iZXIgPSAwOworICBpZiAoIXN0cmluZyB8fCAhKnN0cmlu
ZykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFzdHJpbmdfdG9fdWxv
bmcgKHN0cmluZywgJm51bWJlcikpCisgICAgeworICAgICAgc2l6ZV90IGxl
biA9IHN0cmxlbiAoc3RyaW5nKTsKKyAgICAgIGlmICggKGxlbiA9PSA0ICYm
IHN0cmNhc2VjbXAgKHN0cmluZywgInRydWUiKSA9PSAwKQorICAgICAgICAg
fHwobGVuID09IDMgJiYgc3RyY2FzZWNtcCAoc3RyaW5nLCAieWVzIikgPT0g
MCkgCisgICAgICAgICB8fChsZW4gPT0gMSAmJiBzdHJjYXNlY21wIChzdHJp
bmcsICJ0IikgPT0gMCkKKyAgICAgICAgIHx8KGxlbiA9PSAxICYmIHN0cmNh
c2VjbXAgKHN0cmluZywgInkiKSA9PSAwKSkgCisgICAgICAgIHsKKyAgICAg
ICAgICAqdmFsdWUgPSBUUlVFOworICAgICAgICB9CisgICAgICBlbHNlIGlm
ICggKGxlbiA9PSA1ICYmIHN0cmNhc2VjbXAgKHN0cmluZywgImZhbHNlIikg
PT0gMCkKKyAgICAgICAgIHx8KGxlbiA9PSAyICYmIHN0cmNhc2VjbXAgKHN0
cmluZywgIm5vIikgPT0gMCkgCisgICAgICAgICB8fChsZW4gPT0gMSAmJiBz
dHJjYXNlY21wIChzdHJpbmcsICJmIikgPT0gMCkgCisgICAgICAgICB8fChs
ZW4gPT0gMSAmJiBzdHJjYXNlY21wIChzdHJpbmcsICJuIikgPT0gMCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAqdmFsdWUgPSBGQUxTRTsKKyAgICAgICAg
fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg
KnZhbHVlID0gKG51bWJlciAhPSAwKTsKKyAgICB9CisgIHJldHVybiBUUlVF
OyAKK30KKworQk9PTAorc3RyaW5nX3RvX3Vsb25nIChjb25zdCBjaGFyICpz
dHJpbmcsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQoreworICB1bnNpZ25lZCBs
b25nIG51bWJlciA9IDA7CisgIGNoYXIgKiBlbmRwOworICBlcnJubyA9IDA7
CisKKyAgLyogbnVsbCBvciBlbXB0eSBpbnB1dCAqLworICBpZiAoIXN0cmlu
ZyB8fCAhKnN0cmluZykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgbnVtYmVy
ID0gc3RydG91bCAoc3RyaW5nLCAmZW5kcCwgMCk7CisKKyAgLyogb3V0IG9m
IHJhbmdlICovCisgIGlmIChFUkFOR0UgPT0gZXJybm8pCisgICAgcmV0dXJu
IEZBTFNFOworCisgIC8qIG5vIHZhbGlkIG51bWVyaWMgaW5wdXQgKi8KKyAg
aWYgKGVuZHAgPT0gc3RyaW5nKQorICAgIHJldHVybiBGQUxTRTsKKworICAv
KiBub24tbnVtZXJpYyB0cmFpbGluZyBjaGFyYWN0ZXJzICovCisgIGlmICgq
ZW5kcCAhPSAnXDAnKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWUg
PSBudW1iZXI7CisgIHJldHVybiBUUlVFOworfQorCit2b2lkCit1c2FnZSAo
KQoreworICBmcHJpbnRmIChzdGRlcnIsCisJICAgInVzYWdlOiBhc2xyIFst
YSBCT09MXSBbLW4gQk9PTF0gWy10IEJPT0xdIFstVnZdICIKKwkgICAiWy1U
IEZpbGVMaXN0IHwgLV0gRmlsZXMuLi5cbiIpOworfQorCitCT09MCitnZXRf
Y2hhcmFjdGVyaXN0aWNzKGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgICAg
ICAgICAgICAgICAgICBCT09MKiBoYXNfcmVsb2NfaW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgV09SRCogcGVfZGxsX2NoYXJhY3RlcmlzdGljcykKK3sK
KyAgdW5zaWduZWQgbG9uZyBwZV9oZWFkZXJfb2Zmc2V0LCBvcHRoZHJfb2Zz
OworICBCT09MIHN0YXR1cyA9IEZBTFNFOworICBpbnQgZmQsIHNpemU7Cisg
IERXT1JEIHBlX3NpZzsKKyAgV09SRCBwZV9jaGFyOworCisgIGZkID0gb3Bl
biAocGF0aG5hbWUsIE9fUkRPTkxZfE9fQklOQVJZKTsKKyAgaWYgKGZkID09
IC0xKQorICAgIGdvdG8gZG9uZTsKKworICBpZiAoIXBlX2dldDMyIChmZCwg
MHgzYywgJnBlX2hlYWRlcl9vZmZzZXQpKQorICAgIGdvdG8gZG9uZTsKKyAg
b3B0aGRyX29mcyA9IHBlX2hlYWRlcl9vZmZzZXQgKyA0ICsgMjA7CisKKyAg
cGVfc2lnID0gMDsKKyAgaWYgKCFwZV9nZXQzMiAoZmQsIHBlX2hlYWRlcl9v
ZmZzZXQsICZwZV9zaWcpKQorICAgIGdvdG8gZG9uZTsKKyAgaWYgKHBlX3Np
ZyAhPSBJTUFHRV9OVF9TSUdOQVRVUkUpCisgICAgZ290byBkb25lOworCisg
IGlmICghcGVfZ2V0MTYgKGZkLCBwZV9oZWFkZXJfb2Zmc2V0ICsgNCArIDE4
LCAmcGVfY2hhcikpCisgICAgZ290byBkb25lOworCisgICpoYXNfcmVsb2Nf
aW5mbyA9ICgocGVfY2hhciAmIElNQUdFX0ZJTEVfUkVMT0NTX1NUUklQUEVE
KSA9PSAwKQorICAgID8gVFJVRSA6IEZBTFNFOworCisgIGlmICghcGVfZ2V0
MTYgKGZkLCBvcHRoZHJfb2ZzICsgNzAsIHBlX2RsbF9jaGFyYWN0ZXJpc3Rp
Y3MpKQorICAgIGdvdG8gZG9uZTsKKworICBzdGF0dXMgPSBUUlVFOworCitk
b25lOgorICBjbG9zZSAoZmQpOworICByZXR1cm4gc3RhdHVzOworfQorCitC
T09MCitzZXRfY2hhcmFjdGVyaXN0aWNzKGNvbnN0IGNoYXIgKnBhdGhuYW1l
LAorICAgICAgICAgICAgICAgICAgICBXT1JEIHBlX2RsbF9jaGFyYWN0ZXJp
c3RpY3MpCit7CisgIHVuc2lnbmVkIGxvbmcgcGVfaGVhZGVyX29mZnNldCwg
b3B0aGRyX29mczsKKyAgQk9PTCBzdGF0dXMgPSBGQUxTRTsKKyAgaW50IGZk
LCBzaXplOworCisgIC8qIG5vIGV4dHJhIGNoZWNraW5nIG9mIGZpbGUncyBj
b250ZW50cyBiZWxvdywgYmVjYXVzZQorICAgICBnZXRfY2hhcmFjdGVyaXN0
aWNzIGFscmVhZHkgZGlkIHRoYXQgKi8KKyAgZmQgPSBvcGVuIChwYXRobmFt
ZSwgT19SRFdSfE9fQklOQVJZKTsKKyAgaWYgKGZkID09IC0xKQorICAgIGdv
dG8gZG9uZTsKKworICBpZiAoIXBlX2dldDMyIChmZCwgMHgzYywgJnBlX2hl
YWRlcl9vZmZzZXQpKQorICAgIGdvdG8gZG9uZTsKKyAgb3B0aGRyX29mcyA9
IHBlX2hlYWRlcl9vZmZzZXQgKyA0ICsgMjA7CisKKyAgaWYgKCFwZV9zZXQx
NiAoZmQsIG9wdGhkcl9vZnMgKyA3MCwgcGVfZGxsX2NoYXJhY3RlcmlzdGlj
cykpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAg
ICAgICAgIkNBVEFTVFJPUElDIEVSUk9SOiBhdHRlbXB0IHRvIHdyaXRlIHRv
IGZpbGUgZmFpbGVkISAlcyBjb3VsZCBiZSBjb3JydXB0ZWQ7IEhBTFRJTkcu
XG4iLAorICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAgICAgY2xvc2Ug
KGZkKTsKKyAgICAgIGV4aXQoMik7CisgICAgfQorCisgIHN0YXR1cyA9IFRS
VUU7CisKK2RvbmU6CisgIGNsb3NlIChmZCk7CisgIHJldHVybiBzdGF0dXM7
CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgQk9PTAorcGVfZ2V0MTYg
KGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCogdmFsdWUp
Cit7CisgIHVuc2lnbmVkIGNoYXIgYlsyXTsKKyAgaWYgKGxzZWVrIChmZCwg
b2Zmc2V0LCBTRUVLX1NFVCkgPT0gLTEpCisgICAgcmV0dXJuIEZBTFNFOwor
ICBpZiAocmVhZCAoZmQsIGIsIDIpICE9IDIpCisgICAgcmV0dXJuIEZBTFNF
OworICAqdmFsdWUgPSBiWzBdICsgKGJbMV08PDgpOworICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIEJPT0wKK3BlX2dldDMyIChpbnQgZmQsIG9mZl90
IG9mZnNldCwgdW5zaWduZWQgbG9uZyogdmFsdWUpCit7CisgIHVuc2lnbmVk
IGNoYXIgYls0XTsKKyAgaWYgKGxzZWVrIChmZCwgb2Zmc2V0LCBTRUVLX1NF
VCkgPT0gLTEpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAocmVhZCAoZmQs
IGIsIDQpICE9IDQpCisgICAgcmV0dXJuIEZBTFNFOworICAqdmFsdWUgPSBi
WzBdICsgKGJbMV08PDgpICsgKGJbMl08PDE2KSArIChiWzNdPDwyNCk7Cisg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgQk9PTAorcGVfc2V0MTYgKGlu
dCBmZCwgb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sK
KyAgdW5zaWduZWQgY2hhciBiWzJdOworICBiWzBdID0gKHVuc2lnbmVkIGNo
YXIpICh2YWx1ZSAmIDB4MDBmZik7CisgIGJbMV0gPSAodW5zaWduZWQgY2hh
cikgKCh2YWx1ZT4+OCkgJiAweDAwZmYpOworICBpZiAobHNlZWsgKGZkLCBv
ZmZzZXQsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICByZXR1cm4gRkFMU0U7Cisg
IGlmICh3cml0ZSAoZmQsIGIsIDIpICE9IDIpCisgICAgcmV0dXJuIEZBTFNF
OworICByZXR1cm4gVFJVRTsKK30KKworRklMRSAqCitmaWxlX2xpc3RfZm9w
ZW4gKGNvbnN0IGNoYXIgKmZpbGVfbGlzdCkKK3sKKyAgRklMRSAqZmlsZSA9
IHN0ZGluOworICBpZiAoc3RyY21wKGZpbGVfbGlzdCwgc3RkaW5fZmlsZV9s
aXN0KSAhPSAwKQorICAgIHsKKyAgICAgIGZpbGUgPSBmb3BlbiAoZmlsZV9s
aXN0LCAiciIpOworICAgICAgaWYgKCFmaWxlKQorCWZwcmludGYgKHN0ZGVy
ciwgImNhbm5vdCByZWFkICVzXG4iLCBmaWxlX2xpc3QpOworICAgIH0KKyAg
cmV0dXJuIGZpbGU7Cit9CisKK2NoYXIgKgorZmlsZV9saXN0X2ZnZXRzIChj
aGFyICpidWYsIGludCBzaXplLCBGSUxFICpmaWxlKQoreworICBjaGFyICpz
dGF0dXMgPSBmZ2V0cyAoYnVmLCBzaXplLCBmaWxlKTsKKyAgaWYgKHN0YXR1
cykKKyAgICB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuIChidWYp
OworICAgICAgaWYgKGJ1ZltsZW5ndGggLSAxXSA9PSAnXG4nKQorCWJ1Zlts
ZW5ndGggLSAxXSA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RhdHVzOwor
fQorCitpbnQKK2ZpbGVfbGlzdF9mY2xvc2UgKEZJTEUgKmZpbGUpCit7Cisg
IGludCBzdGF0dXMgPSAwOworICBpZiAoc3RyY21wKGZpbGVfbGlzdCwgc3Rk
aW5fZmlsZV9saXN0KSAhPSAwKQorICAgIHN0YXR1cyA9IGZjbG9zZSAoZmls
ZSk7CisgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQKK3ZlcnNpb24gKCkK
K3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiYXNsciB2ZXJzaW9uICVzXG4iLCBW
RVJTSU9OKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiQ29weXJpZ2h0IChjKSAy
MDA5ICBDaGFybGVzIFdpbHNvblxuIik7Cit9CmRpZmYgLU51YXIgcmViYXNl
LTIuNC40LTEtb3JpZy9yZWJhc2VhbGwgcmViYXNlLTIuNC40LTEvcmViYXNl
YWxsCi0tLSByZWJhc2UtMi40LjQtMS1vcmlnL3JlYmFzZWFsbAkyMDA4LTA2
LTA3IDE3OjQ4OjM2LjAwMDAwMDAwMCAtMDQwMAorKysgcmViYXNlLTIuNC40
LTEvcmViYXNlYWxsCTIwMDktMDItMjcgMTY6MTY6NTcuMzA1MzAxMzAwIC0w
NTAwCkBAIC0xOSwxNyArMTksMTkgQEAKICMgRGVmaW5lIGNvbnN0YW50cwog
UEFUSD0vYmluCiBQcm9ncmFtTmFtZT1gYmFzZW5hbWUgJDBgCi1Qcm9ncmFt
T3B0aW9ucz0nYjpvOnM6VDp2JworUHJvZ3JhbU9wdGlvbnM9J2FBOmI6bzpz
OlQ6dicKIERlZmF1bHRCYXNlQWRkcmVzcz0weDcwMDAwMDAwCiBEZWZhdWx0
T2Zmc2V0PTB4MTAwMDAKIERlZmF1bHRWZXJib3NlPQogRGVmYXVsdEZpbGVM
aXN0PQogRGVmYXVsdFN1ZmZpeGVzPSdkbGx8c28nCitEZWZhdWx0QXNsck9w
dHM9Ii1hIDEiCitEZWZhdWx0RG9Bc2xyPQogCiAjIERlZmluZSBmdW5jdGlv
bnMKIHVzYWdlKCkKIHsKLSAgICBlY2hvICJ1c2FnZTogJFByb2dyYW1OYW1l
IFstYiBCYXNlQWRkcmVzc10gWy1vIE9mZnNldF0gWy1zIERsbFN1ZmZpeF0g
Wy1UIEZpbGVMaXN0IHwgLV0gWy12XSIKKyAgICBlY2hvICJ1c2FnZTogJFBy
b2dyYW1OYW1lIFstYV0gWy1BIGFzbHJfb3B0c10gWy1iIEJhc2VBZGRyZXNz
XSBbLW8gT2Zmc2V0XSBbLXMgRGxsU3VmZml4XSBbLVQgRmlsZUxpc3QgfCAt
XSBbLXZdIgogICAgIGV4aXQgMQogfQogCkBAIC00OCw2ICs1MCw4IEBACiBW
ZXJib3NlPSREZWZhdWx0VmVyYm9zZQogRmlsZUxpc3Q9JERlZmF1bHRGaWxl
TGlzdAogU3VmZml4ZXM9JERlZmF1bHRTdWZmaXhlcworQXNsck9wdGlvbnM9
JERlZmF1bHRBc2xyT3B0cworRG9Bc2xyPSREZWZhdWx0RG9Bc2xyCiAKICMg
VmVyaWZ5IG9ubHkgYXNoIHByb2Nlc3NlcyBhcmUgcnVubmluZwogZ3JlcCAt
RSAtcSAtaSAtdiAnL2FzaCguZXhlKT8kJyAvcHJvYy9bMC05XSovZXhlbmFt
ZQpAQCAtNjQsNiArNjgsMTAgQEAKIHdoaWxlIGdldG9wdHMgJFByb2dyYW1P
cHRpb25zIE9wdGlvbiAiJEAiCiBkbwogICAgIGNhc2UgJE9wdGlvbiBpbgor
ICAgIGEpCisJRG9Bc2xyPXllczs7CisgICAgQSkKKwlBc2xyT3B0cz0iJE9Q
VEFSRyI7OwogICAgIGIpCiAJQmFzZUFkZHJlc3M9JE9QVEFSRzs7CiAgICAg
bykKQEAgLTEwNyw3ICsxMTUsNyBAQAogIyBDcmVhdGUgcmViYXNlIGxpc3QK
IGZpbmQgL2V0Yy9zZXR1cCAtbmFtZSAnKi5sc3QuZ3onIHwgeGFyZ3MgZ3pp
cCAtZCAtYyB8CiAgICAgZ3JlcCAtRSAiXC4oJFN1ZmZpeGVzKVwkIiB8Ci0g
ICAgc2VkIC1lICcvY3lnd2luMS5kbGwkL2QnIC1lICdzL14vXC8vJyA+IiRU
bXBGaWxlIgorICAgIHNlZCAtZSAnL2N5Z3dpbjEuZGxsJC9kJyAtZSAnL2N5
Z2xzYTY0LmRsbCQvZCcgLWUgJ3MvXi9cLy8nID4iJFRtcEZpbGUiCiAKICMg
QXBwZW5kIHVzZXIgc3VwcGxpZWQgZmlsZSBsaXN0LCBpZiBhbnkKIGlmIFsg
LW4gIiRGaWxlTGlzdCIgXQpAQCAtMTE4LDYgKzEyNiwxMCBAQAogIyBSZWJh
c2UgZmlsZXMKIHJlYmFzZSAkVmVyYm9zZSAtZCAtYiAkQmFzZUFkZHJlc3Mg
LW8gJE9mZnNldCAtVCAiJFRtcEZpbGUiCiBFeGl0Q29kZT0kPworaWYgdGVz
dCAieCRFeGl0Q29kZSIgPSAieDAiICYmIHRlc3QgLW4gIiREb0FzbHIiCisg
IGFzbHIgJFZlcmJvc2UgJEFzbHJPcHRzIC1UICIkVG1wRmlsZSIKKyAgRXhp
dENvZGU9JD8KK2ZpCiAKICMgQ2xlYW4gdXAKIGNsZWFudXAK


--------------000701020409080206070409
Content-Type: text/plain; charset=us-ascii

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/
--------------000701020409080206070409--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019