1995-02-09 - LESM - Link Encrypted Session Manager

Header Data

From: “Wei Dai” <weidai@eskimo.com>
To: cypherpunks@toad.com
Message Hash: 12e288bd04f640d93a1a75ebbc79ada6c3bc503006d561b5799b6f0c1718b7b8
Message ID: <199502092216.AA09906@mail.eskimo.com>
Reply To: N/A
UTC Datetime: 1995-02-09 22:17:09 UTC
Raw Date: Thu, 9 Feb 95 14:17:09 PST

Raw message

From: "Wei Dai" <weidai@eskimo.com>
Date: Thu, 9 Feb 95 14:17:09 PST
To: cypherpunks@toad.com
Subject: LESM - Link Encrypted Session Manager
Message-ID: <199502092216.AA09906@mail.eskimo.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Boundary..3926.1071713479.multipart/mixed"

--Boundary..3926.1071713479.multipart/mixed
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNED MESSAGE-----

I finished hacking Matt's ESM to do link encryption yesterday, but 
for some reason the mail I sent to cypherpunks didn't get echoed back 
to me, so I'm sending this again.

To install: get ESM and RSAREF, make sure you can compile ESM, 
then replace the esm.c with my hacked version and recompile.

To use: same as ESM, but there's an extra option "-b bandwidth", the 
default is 100 cps.

I've attached the modified esm.c here since it doesn't include any 
crypto code.  To get ESM, write to cfs@research.att.com and state the 
following:

	- you are in the US or Canada, and
	- you are a US or Canadian citizen or legal permanent
	  resident, and
	- You've read and understand the license and export
	  conditions.

RSAREF is in ftp://rsa.com/rsaref/

Wei Dai


-----BEGIN PGP SIGNATURE-----
Version: 2.6.2

iQCVAwUBLzqTtTl0sXKgdnV5AQEmbgP8CRxE+RCGsDXwwShWhZKGytSywyWZ8RXB
RPBHZmk6UgdpCR2VVo8wXjcPuEv4SHp9ZjhFTq53JZ/s3YcV5FxF33/ivSlh1Ra4
P8GSYnoEaIJoFrJyagukbBUaY6zWCx0PcnsLoVArCxujwRYwfrQvHdiNx13z7bJh
OSEhhoE9djg=
=PY8P
-----END PGP SIGNATURE-----

E-mail: Wei Dai <weidai@eskimo.com>   URL: "http://www.eskimo.com/~weidai"
=================== Exponential Increase of Complexity ===================
--> singularity --> atoms --> macromolecules --> biological evolution
--> central nervous systems --> symbolic communication --> homo sapiens
--> digital computers --> internetworking --> close-coupled automation
--> broadband brain-to-net connections --> artificial intelligence
--> distributed consciousness --> group minds --> ? ? ?

This message contains a file prepared for transmission using the
MIME BASE64 transfer encoding scheme. If you are using Pegasus
Mail or another MIME-compliant system, you should be able to extract
it from within your mailer. If you cannot, please ask your system
administrator for help.

   ---- File information -----------
     File:  lesm.c
     Date:  8 Feb 1995, 23:57
     Size:  19769 bytes.
     Type:  Text


--Boundary..3926.1071713479.multipart/mixed
Content-Type: application/octet-stream; name="bin00000.bin"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bin00000.bin"
Content-Description: "lesm.c"

LyoNCiAqIExFU00gLSBMaW5rIEVuY3J5cHRlZCBTZXNzaW9uIE1hbmFnZXIN
CiAqIHYwLjZhLjAxDQogKiBXZWkgRGFpDQogKiAyLzgvMTk5NQ0KICoNCiAq
IFRoaXMgcHJvZ3JhbSBpcyBhIHF1aWNrIGFuZCBkaXJ0eSBoYWNrIG9mOg0K
ICovDQoNCi8qDQogKiBFU00gLSBFbmNyeXB0ZWQgU2Vzc2lvbiBNYW5hZ2Vy
DQogKiB2MC42YQ0KICogbWF0dCBibGF6ZQ0KICogSmFudWFyeSAxOTk1DQog
Ki8NCg0KLyoNCiAqIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBN
YXR0IEJsYXplLg0KICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5
NSBieSBBVCZULg0KICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIGFuZCBt
b2RpZnkgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGZlZQ0KICogaXMgaGVyZWJ5
IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlIGlz
IGluY2x1ZGVkIGluDQogKiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3
aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkgb3INCiAqIG1vZGlmaWNhdGlv
biBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBz
dXBwb3J0aW5nDQogKiBkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJl
Lg0KICoNCiAqIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byBVbml0ZWQg
U3RhdGVzIGV4cG9ydCBjb250cm9scy4NCiAqDQogKiBUSElTIFNPRlRXQVJF
IElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRA0KICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBO
RUlUSEVSIFRIRSBBVVRIT1JTIE5PUiBBVCZUIE1BS0UgQU5ZDQogKiBSRVBS
RVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5H
IFRIRSBNRVJDSEFOVEFCSUxJVFkNCiAqIE9GIFRISVMgU09GVFdBUkUgT1Ig
SVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuDQogKi8N
Ci8qDQogKiBTb21lIG9mIHRoaXMgZmlsZSB3YXMgc3RvbGVuIGZyb20gdGhl
IEJTRCAic2NyaXB0IiBwcm9ncmFtLCB3aGljaA0KICogaXMgY292ZXJlZCB1
bmRlciB0aGUgZm9sbG93aW5nIG5vdGljZToNCiAqDQogKiBDb3B5cmlnaHQg
KGMpIDE5ODAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y
bmlhLg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICog
YXJlIG1ldDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuDQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4NCiAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg
bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQ0K
ICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt
ZW50Og0KICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs
b3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZg0KICoJQ2FsaWZvcm5pYSwgQmVy
a2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuDQogKiA0LiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycw0KICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
DQogKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4NCiAqDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
DQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQ0KICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCiAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCiAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YNCiAqIFNVQ0ggREFNQUdFLg0KICovDQoNCiNpZm5kZWYg
bGludA0KY2hhciBjb3B5cmlnaHQxW10gPQ0KIkAoIykgQ29weXJpZ2h0IChj
KSAxOTgwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p
YS5cblwNCiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIjsNCmNoYXIgY29weXJp
Z2h0MltdID0NCiJAKCMpIENvcHlyaWdodCAoYykgMTk5NSBBVCZUXG5BbGwg
cmlnaHRzIHJlc2VydmVkLlxuIjsNCiNlbmRpZiAvKiBub3QgbGludCAqLw0K
DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3N0YXQu
aD4NCiNpbmNsdWRlIDx0ZXJtaW9zLmg+DQojaWZuZGVmIFNVTg0KI2luY2x1
ZGUgPHN5cy9pb2N0bC5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3lzL3RpbWUu
aD4NCiNpbmNsdWRlIDxzeXMvZmlsZS5oPg0KI2luY2x1ZGUgPHN5cy9zaWdu
YWwuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxzdGRpby5o
Pg0KI2luY2x1ZGUgImdsb2JhbC5oIg0KI2luY2x1ZGUgInJzYXJlZi5oIg0K
I2luY2x1ZGUgImVzbS5oIg0KDQoNCmNoYXIJKnNoZWxsOw0KaW50CW1hc3Rl
cjsNCmludAlzbGF2ZTsNCmludAlzdWJjaGlsZDsNCg0KaW50IGVzY2FwZT0w
MzY7IC8qIF5eICovDQppbnQgY2lwaHN0YXRlPTA7DQppbnQgY2lwaGJ5dGU9
MDsNCg0KaW50IGtleWVkPTA7DQoNCnN0cnVjdAl0ZXJtaW9zIHR0Ow0Kc3Ry
dWN0CXdpbnNpemUgd2luOw0KaW50CWxiOw0KaW50CWw7DQpjaGFyCWxpbmVb
XSA9ICIvZGV2L3B0eVhYIjsNCmludAlhZmxnOw0KDQojZGVmaW5lIFJFTU9U
RSAwDQojZGVmaW5lIExPQ0FMIDENCiNkZWZpbmUgQ0FMQyAyDQoNCmludCBt
b2RlPUxPQ0FMOw0KaW50IHBhcmFub2lkPTA7DQoNCiNkZWZpbmUgU0xfU1RB
UlQgMA0KI2RlZmluZSBTTF9HT1QxIDENCiNkZWZpbmUgU0xfR09UMiAyDQoj
ZGVmaW5lIFNMX0dPVDMgMw0KI2RlZmluZSBTTF9HT1Q0IDQNCiNkZWZpbmUg
U0xfS0VZSU5HIDUNCiNkZWZpbmUgU0xfQ1JZUFQgNg0KaW50IHNsb3V0c3Rh
dGU9U0xfU1RBUlQ7DQpjaGFyICpjbWQ9TlVMTDsNCg0KI2RlZmluZSBUUkFO
UyAwDQojZGVmaW5lIENNRFdBSVQgMQ0KI2RlZmluZSBDSVBIRVIgMg0KI2Rl
ZmluZSBLRVlXQUlUIDMNCg0KI2RlZmluZSBJVjAgMA0KI2RlZmluZSBJVjEg
MQ0KI2RlZmluZSBJVjIgMg0KI2RlZmluZSBJVjMgMw0KI2RlZmluZSBDMCAg
NA0KI2RlZmluZSBDMSAgNQ0KDQppbnQgc3RhdGU9VFJBTlM7DQppbnQgY3N0
YXRlPUlWMDsNCg0KRklMRSAqZnBtYXN0ZXI7DQoNCnN0cnVjdCB0aW1ldmFs
IHR2UGF1c2U9ezAsMTAwMDB9Ow0Kc3RydWN0IHRpbWV2YWwgdHZOb1BhdXNl
PXswLDB9Ow0KDQp1bnNpZ25lZCBjaGFyIGZpbGxlciA9ICh1bnNpZ25lZCBj
aGFyKSAzMTsNCg0KI2RlZmluZSBid3JpdGUoZnAsYnVmLGxlbikgKGZ3cml0
ZShidWYsbGVuLDEsZnApKQ0KDQptYWluKGFyZ2MsIGFyZ3YpDQoJaW50IGFy
Z2M7DQoJY2hhciAqYXJndltdOw0Kew0KCWV4dGVybiBjaGFyICpvcHRhcmc7
DQoJZXh0ZXJuIGludCBvcHRpbmQ7DQoJaW50IGNoLCByZXN1bHQ7DQoJdm9p
ZCBmaW5pc2goKTsNCgljaGFyICpnZXRlbnYoKTsNCglmZF9zZXQgZmRzOw0K
ICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsNCg0KCXdoaWxlICgoY2ggPSBn
ZXRvcHQoYXJnYywgYXJndiwgImU6YjpzcGxyY2kiKSkgIT0gRU9GKQ0KCSAg
CXN3aXRjaCgoY2hhciljaCkgew0KCSAgCSAgICBjYXNlICdlJzoNCgkgIAkJ
Y21kPW9wdGFyZzsNCgkgIAkJYnJlYWs7DQogICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2InOg0KICAgICAgICAgICAgICAgICAgICAJdHZQYXVzZS50dl91
c2VjPShsb25nKTEwMDAwMDAvYXRvbChvcHRhcmcpOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7DQoJICAJICAgIGNhc2UgJ2knOg0KCSAgCSAg
ICBjYXNlICdzJzoNCgkgIAkgICAgY2FzZSAncCc6DQoJICAJCXBhcmFub2lk
PTE7DQoJICAJICAgIGNhc2UgJ3InOg0KCSAgCQltb2RlPVJFTU9URTsNCgkg
IAkJYnJlYWs7DQoJICAJICAgIGNhc2UgJ2wnOg0KCSAgCQltb2RlPUxPQ0FM
Ow0KCSAgCQlicmVhazsNCgkgIAkgICAgY2FzZSAnYyc6DQoJICAJCW1vZGU9
Q0FMQzsNCgkgIAkJYnJlYWs7DQoJICAJICAgIGNhc2UgJz8nOg0KCSAgCSAg
ICBkZWZhdWx0Og0KCSAgCQlmcHJpbnRmKHN0ZGVyciwNCgkgIAkJICAgInVz
YWdlOiBsZXNtIFstcmxjXSBbLWIgYmFuZHdpZHRoXSBbLWUgcHJvZ3JhbVxu
Iik7DQoJICAJCWV4aXQoMSk7DQoJICAJfQ0KCWFyZ2MgLT0gb3B0aW5kOw0K
CWFyZ3YgKz0gb3B0aW5kOw0KDQoJaWYgKChzaGVsbD1nZXRlbnYoIlNIRUxM
IikpID09IE5VTEwpDQoJCXNoZWxsID0gIi9iaW4vc2giOw0KCQ0KICAgICAg
CWdldG1hc3RlcigpOw0KDQoJKHZvaWQpIHNpZ25hbChTSUdDSExELCBmaW5p
c2gpOw0KCXN1YmNoaWxkID0gZm9yaygpOw0KCWlmIChzdWJjaGlsZCA8IDAp
IHsNCgkJcGVycm9yKCJmb3JrIik7DQoJCWZhaWwoKTsNCgl9DQoJaWYgKHN1
YmNoaWxkPT0wKQ0KCQlkb3NoZWxsKCk7DQoJZWxzZSB7DQoJCS8qIG1haW4g
bG9vcCAqLw0KCQlwcmludGYoIkxFU00gdjAuNmEuMDEsIGhhY2tlZCBieSBX
ZWkgRGFpIGZyb20gRVNNIHYwLjZhIC0gZW5jcnlwdGVkIHNlc3Npb24gbWFu
YWdlclxuIik7DQoJCXByaW50ZigiICAgIGJ5IE1hdHQgQmxhemUsIEFUJlQg
QmVsbCBMYWJzLCBKYW51YXJ5IDE5OTVcbiIpOw0KCSAgICAgICAJcmFuZGlu
aXQoKTsNCgkJY2lwaGVyaW5pdCgpOw0KCQlzd2l0Y2ggKG1vZGUpIHsNCgkJ
ICAgIGNhc2UgUkVNT1RFOg0KCQkJaWYgKHBhcmFub2lkKQ0KCQkJICAgICBw
cmludGYoInJlbW90ZSBzZXJ2ZXIgcmVhZHlcbiIpOw0KCQkJZWxzZQ0KCQkJ
ICAgICBwcmludGYoInJlbW90ZSBzZXJ2ZXIgcmVhZHk7IGN0bC1eIHRvIGVz
Y2FwZVxuIik7DQoJCQlicmVhazsNCgkJICAgIGNhc2UgTE9DQUw6DQoJCQlw
cmludGYoImxvY2FsIGxheWVyIHJlYWR5IChydW4gJ2xlc20gLXMnIG9uIHJl
bW90ZSlcbiIpOw0KCQkJYnJlYWs7ICANCgkJICAgIGRlZmF1bHQ6ICAvKiBu
b3QgeWV0ICovDQoJCQlwcmludGYoImxlc20gcmVhZHlcbiIpOw0KCQl9DQoJ
CXJhd3R0eSgpOw0KCQlmcG1hc3Rlcj1mZG9wZW4obWFzdGVyLCJ3Iik7DQoJ
CWlmIChmcG1hc3RlciA9PSBOVUxMKQ0KCQkJZG9uZSgpOw0KCQlpZiAocGFy
YW5vaWQpDQoJCQlzdGFydHNlc3Npb24oKTsNCiAgICAgICAgICAgIA0KICAg
ICAgICAgICAgICAgIHdoaWxlKDEpDQogICAgICAgICAgICAgICAgew0KCQkJ
RkRfWkVSTygmZmRzKTsNCgkJCUZEX1NFVCgwLCZmZHMpOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICB0dj10
dk5vUGF1c2U7DQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9c2Vs
ZWN0IChGRF9TRVRTSVpFLCZmZHMsTlVMTCxOVUxMLCZ0dik7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQ9PTEpDQogICAgICAgICAg
ICAgICAgICAgICAgICAJZG9pbnB1dCgpOw0KDQogICAgICAJICAgICAgICAg
ICAgICAgIGlmIChtb2RlPT1MT0NBTCAmJiBzbG91dHN0YXRlPT1TTF9DUllQ
VCAmJiByZXN1bHQ9PTApDQogICAgICAgICAgICAgICAgICAgICAgICAJZG9z
bGF2ZWluKGZpbGxlcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdDwwKQ0K
ICAgICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOw0KDQoJICAgICAgIAkJ
RkRfWkVSTygmZmRzKTsNCgkgICAgICAgCQlGRF9TRVQobWFzdGVyLCZmZHMp
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAg
ICAgICAgICB0dj10dk5vUGF1c2U7DQogICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQ9c2VsZWN0IChGRF9TRVRTSVpFLCZmZHMsTlVMTCxOVUxMLCZ0
dik7DQoJICAgICAgIAkJICAgICAgICAgICAgICAgICAgICAJDQogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0PT0xKQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb291dHB1dCgpOw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobW9kZT09UkVNT1RFICYmIHN0YXRlPT1DSVBI
RVIgJiYgcmVzdWx0PT0wKQ0KICAgICAgICAgICAgICAgICAgICAgICAgCWRv
bWFzdGVyb3V0KGZpbGxlcik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQ8MCkNCiAgICAgICAgICAgICAgICAgICAgICAgIAlicmVh
azsNCgkJfQ0KCQlkb25lKCk7DQoJfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIA0KfQ0KDQpkb2lucHV0KCkNCnsNCglpbnQg
Y2M7DQoJaW50IGk7DQoJc3RhdGljIHVuc2lnbmVkIGNoYXIgaWJ1Zls1MTJd
Ow0KCQ0KCWlmICgoY2MgPSByZWFkKDAsIGlidWYsIDUxMikpID4gMCkgew0K
CQlzd2l0Y2ggKG1vZGUpIHsNCgkJICAgIGNhc2UgUkVNT1RFOg0KCQkJZm9y
IChpPTA7IGk8Y2M7IGkrKykNCgkJCQlkb21hc3RlcmluKGlidWZbaV0pOw0K
CQkJYnJlYWs7DQoJCSAgICBjYXNlIExPQ0FMOg0KCQkJZm9yIChpPTA7IGk8
Y2M7IGkrKykNCgkJCQlkb3NsYXZlaW4oaWJ1ZltpXSk7DQoJCQlicmVhazsN
CgkJICAgIGRlZmF1bHQ6DQoJCQlmb3IgKGk9MDsgaTxjYzsgaSsrKQ0KCQkJ
CWJ3cml0ZShmcG1hc3RlciwmaWJ1ZltpXSwxKTsNCgkJCWJyZWFrOw0KCQl9
DQoJCWZmbHVzaChmcG1hc3Rlcik7DQoJCWZmbHVzaChzdGRvdXQpOw0KCX0g
ZWxzZQ0KCQlkb25lKCk7DQp9DQoNCmRvc2xhdmVpbihpYnVmKQ0KICAgICB1
bnNpZ25lZCBjaGFyIGlidWY7DQp7DQoJaW50IGM7DQoJc3RhdGljIGludCBj
b3VudD0wOw0KICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsNCgkNCglzd2l0
Y2ggKHNsb3V0c3RhdGUpIHsNCgkgICAgY2FzZSBTTF9DUllQVDoNCgkJaWYg
KGlidWY9PWVzY2FwZSkgew0KCQkJYndyaXRlKHN0ZG91dCwiPj4iLDIpOw0K
CQkJZmZsdXNoKHN0ZG91dCk7DQoJCQlpZiAoc2xlc2NhcGUoKSkgew0KCQkJ
CXByaW50ZigicVxyXG5FbnRlcmluZyBDTEVBUlRFWFQgbW9kZVxyXG4iKTsN
CgkJCQlid3JpdGUoZnBtYXN0ZXIsIlBQUFBQUFBQUFBQUFBQUFAiLDE2KTsN
CgkJCQlzbG91dHN0YXRlPVNMX1NUQVJUOw0KCQkJfQ0KCQkJYnJlYWs7DQoJ
CX0JCQkNCgkJYz1jZmI4X2VuY3J5cHQoaWJ1Zik7DQoJCWlmICghKCsrY291
bnQgJSA4KSkNCgkJCWJ3cml0ZShmcG1hc3RlciwiISIsMSk7DQoJCXNlbmRo
ZXgoZnBtYXN0ZXIsYyk7DQogICAgICAgIAl0dj10dlBhdXNlOw0KICAgICAg
ICAgICAgICAgIHNlbGVjdCAoRkRfU0VUU0laRSxOVUxMLE5VTEwsTlVMTCwm
dHYpOw0KCQlicmVhazsNCgkgICAgZGVmYXVsdDoNCgkJYndyaXRlKGZwbWFz
dGVyLCZpYnVmLDEpOw0KCQlicmVhazsNCgl9DQp9DQoNCnNsZXNjYXBlKCkN
CnsNCgljaGFyIGJ1ZjsNCglpbnQgYzsNCglpbnQgZXNjYXBlZD0wOw0KCQ0K
CXdoaWxlIChyZWFkKDAsJmJ1ZiwxKT4wKSB7DQoJCWlmIChlc2NhcGVkKSB7
DQoJCQllc2NhcGVkPTA7DQoJCQlid3JpdGUoZnBtYXN0ZXIsJmJ1ZiwxKTsN
CgkJCWNvbnRpbnVlOw0KCQl9DQoJCWlmIChidWY9PWVzY2FwZSkgew0KCQkJ
Yz1jZmI4X2VuY3J5cHQoYnVmKTsNCgkJCXNlbmRoZXgoZnBtYXN0ZXIsYyk7
DQoJCQlyZXR1cm4gMDsNCgkJfQ0KCQlid3JpdGUoc3Rkb3V0LCZidWYsMSk7
DQoJCWZmbHVzaChzdGRvdXQpOw0KCQlpZiAoYnVmPT0nXFwnKSB7DQoJCQlt
b2RlPWVzY2FwZWQ7DQoJCQljb250aW51ZTsNCgkJfQ0KCQlpZiAoYnVmPT0n
XHInKQ0KCQkJcmV0dXJuIDA7DQoJCWlmIChidWY9PSdDJykgew0KCQkJcmV0
dXJuIDE7DQoJCX0NCgkJcHJpbnRmKCJcclxuVHlwZSBvbmUgb2YgdGhlIGZv
bGxvd2luZzpcclxuIik7DQoJCXByaW50ZigiICBcXFtjaGFyXSB0byBzZW5k
IGNoYXIgYXMgY2xlYXJ0ZXh0XHJcbiIpOw0KCQlwcmludGYoIiAgY3RybC1e
IHRvIHNlbmQgZXNjYXBlIGNoYXJhY3RlclxyXG4iKTsNCgkJcHJpbnRmKCIg
ICdDJyB0byByZXR1cm4gdG8gQ0xFQVJURVhUIHNlc3Npb25cclxuIik7DQoJ
CXByaW50ZigiICA8ZW50ZXI+IHRvIHJldHVybiB0byBlbmNyeXB0ZWQgc2Vz
c2lvblxyXG4iKTsNCgl9DQoJcmV0dXJuIDE7IC8qIHNob3VsZCBuZXZlciBo
YXBwZW4gKi8NCn0NCg0KCQkJICAgICAgIA0KDQpkb21hc3RlcmluKGlidWYp
DQogICAgIHVuc2lnbmVkIGNoYXIgaWJ1ZjsNCnsNCglpbnQgYzsNCgljaGFy
IGNoOw0KCXN0YXRpYyBpbnQgYmFkPTA7DQoJDQoJc3dpdGNoIChzdGF0ZSkg
ew0KCSAgICBjYXNlIFRSQU5TOg0KCSAgCWlmIChpYnVmICE9IGVzY2FwZSkN
CgkgIAkJYndyaXRlKGZwbWFzdGVyLCAmaWJ1ZiwgMSk7DQoJICAJZWxzZSB7
DQoJICAJCXN0YXRlPUNNRFdBSVQ7DQoJICAJCWJ3cml0ZShzdGRvdXQsIj4+
IiwyKTsNCgkgIAkJY3N0YXRlPUlWMDsNCgkgIAl9DQoJICAJYnJlYWs7DQoJ
ICAgIGNhc2UgQ01EV0FJVDoNCgkgIAlpZiAoaWJ1ZiA9PSBlc2NhcGUpIHsN
CgkgIAkJYndyaXRlKGZwbWFzdGVyLCAmaWJ1ZiwgMSk7DQoJICAJCXN0YXRl
PVRSQU5TOw0KCSAgCX0gZWxzZSBzd2l0Y2ggKGlidWYpIHsNCgkgIAkgICAg
Y2FzZSAnXHInOg0KCSAgCSAgICBjYXNlICdcbic6DQoJICAJCWJ3cml0ZShz
dGRvdXQsIlxyXG4iLDIpOw0KCSAgCQlzdGF0ZT1UUkFOUzsNCgkgIAkJYnJl
YWs7DQoJICAJICAgIGNhc2UgJ3MnOg0KCSAgCSAgICBjYXNlICdTJzoNCgkg
IAkJc3RhcnRzZXNzaW9uKExPTkcpOw0KCSAgCQlicmVhazsNCgkgIAkgICAg
Y2FzZSAnUSc6DQoJICAJCWRvbmUoKTsNCgkgIAkJYnJlYWs7DQoJICAJICAg
IGRlZmF1bHQ6DQoJICAJCXByaW50ZigiVHlwZSAncycgdG8gc3RhcnQgZW5j
cnlwdGVkIHNlc3Npb25cclxuIik7DQoJICAJCXByaW50ZigiICAgICAnUScg
dG8gdGVybWluYXRlIHJlbW90ZSBzZXNzaW9uXHJcbiIpOw0KCSAgCQlwcmlu
dGYoIiAgICAgY3RybC1eIHRvIHNlbmQgZXNjYXBlIGNoYXJhY3RlclxyXG4i
KTsNCgkgIAkJcHJpbnRmKCIgICAgIDxlbnRlcj4gdG8gcmV0dXJuIHRvIHNl
c3Npb25cclxuIik7DQoJICAJCWJyZWFrOw0KCSAgCX0NCgkgIAlicmVhazsN
CgkgICAgY2FzZSBDSVBIRVI6DQoJICAJaWYgKHN0cmNocigiMDEyMzQ1Njc4
OWFiY2RlZiEiLGlidWYpIT1OVUxMKSB7DQoJICAJCWJhZD0wOw0KCSAgCQlp
ZiAoKGMgPSBjaXBoZXJvdXQoaWJ1ZikpID49IDApIHsNCgkgIAkJICAgICAg
CWNoPWM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
aCE9ZmlsbGVyKQ0KCSAgCQkJICAgICAgCWJ3cml0ZShmcG1hc3RlciwmY2gs
MSk7DQoJICAJCX0NCgkgIAl9IGVsc2UgaWYgKGJhZCsrID4gMTYpIHsNCgkg
IAkJZGVsa2V5KCk7DQoJICAJCWJ3cml0ZShzdGRvdXQsIlhYWFhYWFhYWFhY
WFhYWFgiLDE2KTsNCgkgIAkJaWYgKHBhcmFub2lkKQ0KCSAgCQkgICAgICAJ
ZG9uZSgpOw0KCSAgCQlzdGF0ZT1UUkFOUzsNCgkgIAl9IGVsc2UNCgkgIAkJ
Y2lwaHN0YXRlPTA7DQoJICAJYnJlYWs7DQoJICAgIGNhc2UgS0VZV0FJVDoN
CgkgIAlpZiAoc3RyY2hyKCIwMTIzNDU2Nzg5YWJjZGVmOiIsaWJ1ZikhPU5V
TEwpIHsNCgkJCW1hc3RlcmtleWluKGlidWYpOw0KCQl9IGVsc2Ugew0KCQkJ
ZGVsa2V5KCk7DQoJCQlid3JpdGUoc3Rkb3V0LCJYWFhYWFhYWFhYWFhYWFhY
IiwxNik7DQoJCQlpZiAocGFyYW5vaWQpDQoJCQkJZG9uZSgpOw0KCQkJc3Rh
dGU9VFJBTlM7DQoJCX0NCgkJYnJlYWs7DQoJfQ0KfQ0KDQppbnQgcHVic3Rh
dD0wOw0KaW50IHB1YnBvcz0wOw0KdW5zaWduZWQgY2hhciBwdWJieXRlPTA7
DQppbnQgcGtzaXplID0gLTE7DQoNCnN0YXJ0c2Vzc2lvbigpDQp7DQoJc3Rh
dGljIHVuc2lnbmVkIGNoYXIgYnVmWzVdID0gezAxNzcsICd+JywgMDE3Nywg
J34nLCAnTCd9Ow0KCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbG9uPSc6JzsN
CglpbnQgaTsNCg0KCXBrbGVuPWRocGFyYW1zW0xPTkddLnByaW1lTGVuOw0K
CXByaW50ZigiU3RhcnRpbmcgcmVtb3RlIHNpZGUgb2YgJWQgYml0IGtleSBl
eGNoYW5nZS5cclxuIixwa2xlbio4KTsNCglpZiAoY3JlYXRlZGgoTE9ORykg
PCAwKQ0KCQlyZXR1cm4gLTE7DQoJYndyaXRlKHN0ZG91dCxidWYsNSk7DQoJ
Zm9yIChpPTA7IGk8cGtsZW47IGkrKykNCgkJc2VuZGhleChzdGRvdXQsb3Vy
cHViW2ldKTsNCglid3JpdGUoc3Rkb3V0LCZjb2xvbiwxKTsNCglwa3NpemU9
TE9ORzsNCglwdWJzdGF0PTA7DQoJcHVicG9zPTA7DQoJcHViYnl0ZT0wOw0K
CXN0YXRlPUtFWVdBSVQ7DQoJcmV0dXJuIDA7DQp9DQoNCnNsdHJhbnNwdWIo
bGVuKQ0Kew0KCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbG9uPSc6JzsNCglp
bnQgaTsNCgkNCglwcmludGYoIlxyXG5TdGFydGluZyBsb2NhbCBrZXkgZXhj
aGFuZ2UuXHJcbiIpOw0KCWZvciAoaT0wOyBpPGxlbjsgaSsrKQ0KCQlzZW5k
aGV4KGZwbWFzdGVyLG91cnB1YltpXSk7DQoJYndyaXRlKGZwbWFzdGVyLCZj
b2xvbiwxKTsNCglwcmludGYoImVudGVyaW5nIEVOQ1JZUFRFRCBtb2RlOyB0
eXBlIGN0cmwtXiB0byBlc2NhcGVcclxuIik7DQp9DQoNCm1hc3RlcmtleWlu
KGMpDQogICAgIGNoYXIgYzsNCnsNCglpbnQgYml0czsNCg0KCWlmIChjPT0n
OicpIHsNCgkJaWYgKHB1YnBvcyE9KHBrbGVuKzIpKSAvKiArMiBmb3IgdHJh
aWxpbmcgY2hlY2t3b3JkICovDQoJCQlnb3RvIGFib3J0Ow0KCQlpZiAobWNh
bGNrZXlzKHBrc2l6ZSk8MCkgLyogYWxzbyB2ZXJpZmllcyAqLw0KCQkJZ290
byBhYm9ydDsNCgkJY2lwaHN0YXRlPTA7DQoJCXN0YXRlPUNJUEhFUjsNCgkJ
cmV0dXJuOw0KCX0gZWxzZSBpZiAocHVicG9zPE1BWFBVQktFWSkgew0KCQli
aXRzPWF0b2goYyk7DQoJCWlmIChiaXRzPDApDQoJCQlnb3RvIGFib3J0Ow0K
CQlpZiAocHVic3RhdCkgew0KCQkJcHViYnl0ZSB8PSBiaXRzOw0KCQkJb3Ro
ZXJwdWJbcHVicG9zXT1wdWJieXRlOw0KCQkJcHVicG9zKys7DQoJCX0gZWxz
ZSB7DQoJCQlwdWJieXRlID0gYml0czw8NDsNCgkJfQ0KCQlwdWJzdGF0ID0g
MS1wdWJzdGF0Ow0KCQlyZXR1cm47DQoJfQ0KICAgIGFib3J0Og0KCWJ3cml0
ZShzdGRvdXQsIlhYWFhYWFhYWFhYWFhYWFgiLDE2KTsNCglpZiAocGFyYW5v
aWQpDQoJCWRvbmUoKTsNCglzdGF0ZT1UUkFOUzsNCn0NCg0KaW50IG1jYWxj
a2V5cyhsZW4pDQogICAgIGludCBsZW47DQp7DQoJaW50IGk7DQoJDQoJaWYg
KGRoYWdyZWUobGVuKTwwKSAvKiBzZXRzIHVwIHNlc3Npb24ga2V5cyAqLw0K
CQlyZXR1cm4gLTE7DQoJZm9yIChpPTA7IGk8ODsgaSsrKSB7DQoJCWl2aW5b
aV09MDsNCgkJaXZvdXRbaV09MHhmZjsNCgl9DQoJaWYgKGNmYjhfZGVjcnlw
dChvdGhlcnB1Yltwa2xlbl0pIHx8DQoJICAgIGNmYjhfZGVjcnlwdChvdGhl
cnB1Yltwa2xlbisxXSkpDQoJCXJldHVybiAtMTsNCglyZXR1cm4gMDsNCn0N
Cg0KaW50IHNsY2FsY2tleXMobGVuKQ0KICAgICBpbnQgbGVuOw0Kew0KCWlu
dCBpOw0KCQ0KCWlmIChkaGFncmVlKGxlbik8MCkgLyogc2V0cyB1cCBzZXNz
aW9uIGtleXMgKi8NCgkJcmV0dXJuIC0xOw0KCWZvciAoaT0wOyBpPDg7IGkr
Kykgew0KCQlpdm91dFtpXT0wOw0KCQlpdmluW2ldPTB4ZmY7DQoJfQ0KCW91
cnB1Yltwa2xlbl09Y2ZiOF9lbmNyeXB0KDApOw0KCW91cnB1Yltwa2xlbisx
XT1jZmI4X2VuY3J5cHQoMCk7DQoJcmV0dXJuIDA7DQp9DQoNCmluaXRzbGtl
eShwYXJhbSkNCiAgICAgaW50IHBhcmFtOw0Kew0KCWlmICgocGFyYW08MCkg
fHwgKHBhcmFtPjIpKQ0KCQlyZXR1cm4gLTE7DQoJcGtsZW49ZGhwYXJhbXNb
cGFyYW1dLnByaW1lTGVuOw0KCXBrc2l6ZT1wYXJhbTsNCglwdWJzdGF0PTA7
DQoJcHVicG9zPTA7DQoJcHViYnl0ZT0wOw0KfQ0KDQpzbGtleWluKGMpDQog
ICAgIGNoYXIgYzsNCnsNCglpbnQgYml0czsNCg0KCWlmIChjPT0nOicpIHsN
CgkJaWYgKHB1YnBvcyE9cGtsZW4pDQoJCQlnb3RvIGFib3J0Ow0KCQlpZiAo
Y3JlYXRlZGgocGtzaXplKTwwKQ0KCQkJZ290byBhYm9ydDsNCgkJaWYgKHNs
Y2FsY2tleXMocGtzaXplKTwwKQ0KCQkJZ290byBhYm9ydDsNCgkJc2x0cmFu
c3B1Yihwa2xlbisyKTsNCgkJY2lwaHN0YXRlPTA7DQoJCXNsb3V0c3RhdGU9
U0xfQ1JZUFQ7DQoJCXJldHVybjsNCgl9IGVsc2UgaWYgKHB1YnBvczxNQVhQ
VUJLRVkpew0KCQliaXRzPWF0b2goYyk7DQoJCWlmIChiaXRzPDApDQoJCQln
b3RvIGFib3J0Ow0KCQlpZiAocHVic3RhdCkgew0KCQkJcHViYnl0ZSB8PSBi
aXRzOw0KCQkJb3RoZXJwdWJbcHVicG9zXT1wdWJieXRlOw0KCQkJcHVicG9z
Kys7DQoJCX0gZWxzZSB7DQoJCQlwdWJieXRlID0gYml0czw8NDsNCgkJfQ0K
CQlwdWJzdGF0ID0gMS1wdWJzdGF0Ow0KCQlyZXR1cm47DQoJfQ0KICAgIGFi
b3J0Og0KCWJ3cml0ZShzdGRvdXQsIlgiLDEpOw0KCXN0YXRlPVNMX1NUQVJU
Ow0KDQp9DQoNCg0KDQppbnQgY2lwaGVyb3V0KGNoKQ0KICAgICBjaGFyIGNo
Ow0Kew0KCWludCBiaXRzOw0KCQ0KCWlmIChjaD09JyEnKSB7DQoJCWNpcGhz
dGF0ZT0wOw0KCQlyZXR1cm4gLTE7DQoJfQ0KCWJpdHM9YXRvaChjaCk7DQoJ
aWYgKGNpcGhzdGF0ZSkgew0KCQljaXBoYnl0ZSB8PSBiaXRzOw0KCQljaXBo
c3RhdGU9MDsNCgkJcmV0dXJuKGNmYjhfZGVjcnlwdChjaXBoYnl0ZSkpOw0K
CX0gZWxzZSB7DQoJCWNpcGhieXRlID0gYml0czw8NDsNCgkJY2lwaHN0YXRl
PTE7DQoJCXJldHVybiAtMTsNCgl9DQp9DQoNCmludCBjaXBoZXJjYWxjaW4o
Y2gpDQogICAgIHVuc2lnbmVkIGNoYXIgY2g7DQp7DQoJc3RhdGljIHVuc2ln
bmVkIGNoYXIgaXZbOF07DQoJc3RhdGljIHVuc2lnbmVkIGludCBjYnVmOw0K
CWludCBjOw0KCWludCBpOw0KDQoJYyA9IGF0b2goY2gpOw0KCXN3aXRjaCAo
Y3N0YXRlKSB7DQoJICAgIGNhc2UgSVYwOg0KCQlmb3IoaT0wOyBpPDg7IGkr
KykNCgkJCWl2W2ldPTA7DQoJCWNidWYgPSAoYyYweGYpPDw0Ow0KCQljc3Rh
dGU9SVYxOw0KCQlyZXR1cm4gJy4nOw0KCSAgICBjYXNlIElWMToNCgkJY2J1
ZiA9IGNidWYgfCAoYyYweGYpOw0KCQlpdls3XT1jYnVmOw0KCQljc3RhdGU9
SVYyOw0KCQlyZXR1cm4gJy4nOw0KCSAgICBjYXNlIElWMjoNCgkJY2J1ZiA9
IChjJjB4Zik8PDQ7DQoJCWNzdGF0ZT1JVjM7DQoJCXJldHVybiAnLic7DQoJ
ICAgIGNhc2UgSVYzOg0KCQljYnVmID0gY2J1ZiB8IChjJjB4Zik7DQoJCWl2
WzZdPWNidWY7DQoJCWNzdGF0ZT1DMDsNCgkJcmV0dXJuICcuJzsNCgkgICAg
Y2FzZSBDMDoNCgkJY2J1ZiA9IChjJjB4Zik8PDQ7DQoJCWNzdGF0ZT1DMTsN
CgkJcmV0dXJuICcuJzsNCgkgICAgY2FzZSBDMToNCgkJY2J1ZiA9IGNidWYg
fCBjJjB4ZjsNCgkJYz1jZmI4X2RlY3J5cHQoY2J1Zik7DQoJCWNzdGF0ZT1D
MDsNCgkJaWYgKGlzcHJpbnQoYykpIHsNCgkJCWJ3cml0ZShmcG1hc3Rlciwm
YywxKTsNCgkJCXJldHVybiAnXyc7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4g
Jz8nOw0KCQl9DQoJICAgIGRlZmF1bHQ6DQoJCXJldHVybiAnPyc7DQoJfQ0K
fQ0KDQojaW5jbHVkZSA8c3lzL3dhaXQuaD4NCg0Kdm9pZA0KZmluaXNoKCkN
CnsNCgl1bmlvbiB3YWl0IHN0YXR1czsNCglyZWdpc3RlciBpbnQgcGlkOw0K
CXJlZ2lzdGVyIGludCBkaWUgPSAwOw0KDQoJd2hpbGUgKChwaWQgPSB3YWl0
MygoaW50ICopJnN0YXR1cywgV05PSEFORywgMCkpID4gMCkNCgkJaWYgKHBp
ZCA9PSBzdWJjaGlsZCkNCgkJCWRpZSA9IDE7DQoNCglpZiAoZGllKQ0KCQlk
b25lKCk7DQp9DQoNCmRvb3V0cHV0KCkNCnsNCglyZWdpc3RlciBpbnQgY2M7
DQoJaW50IGk7DQoJdW5zaWduZWQgY2hhciBvYnVmWzUxMl07DQoJDQoJaWYg
KChjYyA9IHJlYWQobWFzdGVyLCBvYnVmLCA1MTIpKSA+IDApIHsNCgkJc3dp
dGNoIChtb2RlKSB7DQoJCSAgICBjYXNlIFJFTU9URToNCgkJCWZvciAoaT0w
OyBpPGNjOyBpKyspDQoJCQkJZG9tYXN0ZXJvdXQob2J1ZltpXSk7DQoJCQli
cmVhazsNCgkJICAgIGNhc2UgTE9DQUw6DQoJCQlmb3IgKGk9MDsgaTxjYzsg
aSsrKQ0KCQkJCWRvc2xhdmVvdXQob2J1ZltpXSk7DQoJCQlicmVhazsNCgkJ
ICAgIGRlZmF1bHQ6DQoJCQlmb3IgKGk9MDsgaTxjYzsgaSsrKQ0KCQkJCWJ3
cml0ZShzdGRvdXQsICZvYnVmW2ldLCAxKTsNCgkJCWJyZWFrOw0KCQl9DQoJ
CWZmbHVzaChmcG1hc3Rlcik7DQoJCWZmbHVzaChzdGRvdXQpOw0KCX0gZWxz
ZQ0KCQlkb25lKCk7DQp9DQoNCmRvbWFzdGVyb3V0KG9idWYpDQogICAgIHVu
c2lnbmVkIGNoYXIgb2J1ZjsNCnsNCglpbnQgYzsNCglzdGF0aWMgaW50IGNv
dW50PTA7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2Ow0KCQ0KCXN3aXRj
aCAoc3RhdGUpIHsNCgkgICAgY2FzZSBDSVBIRVI6DQoJCWM9Y2ZiOF9lbmNy
eXB0KG9idWYpOw0KCQlpZiAoISgrK2NvdW50ICUgOCkpDQoJCQlid3JpdGUo
c3Rkb3V0LCIhIiwxKTsNCgkJc2VuZGhleChzdGRvdXQsYyk7DQogICAgICAg
IAl0dj10dlBhdXNlOw0KICAgICAgICAgICAgICAgIHNlbGVjdCAoRkRfU0VU
U0laRSxOVUxMLE5VTEwsTlVMTCwmdHYpOw0KCQlicmVhazsNCgkgICAgY2Fz
ZSBUUkFOUzoNCgkJYndyaXRlKHN0ZG91dCwgJm9idWYsIDEpOw0KCQlicmVh
azsNCgkgICAgZGVmYXVsdDoNCgkJLyogdGhyb3cgYXdheSBzaW5jZSBpL28g
c2NyZXdzIHVwIGtleWluZyAqLw0KCQlicmVhazsNCgl9DQp9DQoNCg0KZG9z
bGF2ZW91dChvYnVmKQ0KICAgICB1bnNpZ25lZCBjaGFyIG9idWY7DQp7DQoJ
c3RhdGljIGludCBiYWQ9MDsNCglpbnQgYzsNCgljaGFyIGNoOw0KCQ0KCXN3
aXRjaCAoc2xvdXRzdGF0ZSkgew0KCSAgICBjYXNlIFNMX1NUQVJUOg0KCSAg
IAlid3JpdGUoc3Rkb3V0LCAmb2J1ZiwgMSk7DQoJICAgCWlmIChvYnVmPT0w
MTc3KQ0KCSAgIAkJc2xvdXRzdGF0ZT1TTF9HT1QxOw0KCSAgIAlicmVhazsN
CgkgICAgY2FzZSBTTF9HT1QxOg0KCSAgIAlid3JpdGUoc3Rkb3V0LCAmb2J1
ZiwgMSk7DQoJICAgCWlmIChvYnVmPT0nficpDQoJICAgCQlzbG91dHN0YXRl
PVNMX0dPVDI7DQoJICAgCWVsc2UNCgkgICAJCXNsb3V0c3RhdGU9U0xfU1RB
UlQ7DQoJICAgCWJyZWFrOw0KCSAgICBjYXNlIFNMX0dPVDI6DQoJICAgCWlm
IChvYnVmPT0wMTc3KQ0KCSAgIAkJc2xvdXRzdGF0ZT1TTF9HT1QzOw0KCSAg
IAllbHNlIHsNCgkgICAJCWJ3cml0ZShzdGRvdXQsICZvYnVmLCAxKTsNCgkg
ICAJCXNsb3V0c3RhdGU9U0xfU1RBUlQ7DQoJICAgCX0NCgkgICAJYnJlYWs7
DQoJICAgIGNhc2UgU0xfR09UMzoNCgkgICAJaWYgKG9idWY9PSd+JykNCgkg
ICAJCXNsb3V0c3RhdGU9U0xfR09UNDsNCgkgICAJZWxzZSB7DQoJICAgCQli
d3JpdGUoc3Rkb3V0LCAmb2J1ZiwgMSk7DQoJICAgCQlzbG91dHN0YXRlPVNM
X1NUQVJUOw0KCSAgIAl9DQoJICAgCWJyZWFrOw0KCSAgICBjYXNlIFNMX0dP
VDQ6IC8qIGtleSBzaXplIGluZGljYXRvciAqLw0KCSAgIAlid3JpdGUoc3Rk
b3V0LCAmb2J1ZiwgMSk7DQoJICAgCWlmIChvYnVmPT0nUycpIHsNCgkgICAJ
CWluaXRzbGtleShTSE9SVCk7DQoJICAgCQlzbG91dHN0YXRlPVNMX0tFWUlO
RzsNCgkgICAJfSBlbHNlIGlmIChvYnVmPT0nTScpIHsNCgkgICAJCWluaXRz
bGtleShNRURJVU0pOw0KCSAgIAkJc2xvdXRzdGF0ZT1TTF9LRVlJTkc7DQoJ
ICAgCX0gZWxzZSBpZiAob2J1Zj09J0wnKSB7DQoJICAgCQlpbml0c2xrZXko
TE9ORyk7DQoJICAgCQlzbG91dHN0YXRlPVNMX0tFWUlORzsNCgkgICAJfSBl
bHNlDQoJICAgCQlzbG91dHN0YXRlPVNMX1NUQVJUOw0KCSAgIAlicmVhazsN
CgkgICAgY2FzZSBTTF9LRVlJTkc6DQoJICAgCWlmIChzdHJjaHIoIjAxMjM0
NTY3ODlhYmNkZWY6IixvYnVmKSAhPSBOVUxMKSB7DQoJICAgCQlzbGtleWlu
KG9idWYpOw0KCSAgIAl9IGVsc2Ugew0KCSAgIAkJYndyaXRlKHN0ZG91dCwi
VSIsMSk7DQoJICAgCQlzbG91dHN0YXRlPVNMX1NUQVJUOw0KCSAgIAl9DQoJ
ICAgCWJyZWFrOw0KCSAgICBjYXNlIFNMX0NSWVBUOg0KCSAgIAlpZiAoc3Ry
Y2hyKCIwMTIzNDU2Nzg5YWJjZGVmISIsb2J1ZikgIT0gTlVMTCkgew0KCSAg
IAkJYmFkPTA7DQoJICAgCQlpZiAoKGMgPSBjaXBoZXJvdXQob2J1ZikpPj0w
KSB7DQoJICAgCQkJY2g9YzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoIT1maWxsZXIpDQoJCSAgIAkJCWJ3cml0ZShzdGRvdXQs
JmNoLDEpOw0KCSAgIAkJfQ0KCSAgIAl9IGVsc2UgaWYgKGJhZCsrID4gOCkg
ew0KCSAgIAkJZnByaW50ZihzdGRlcnIsIlxyXG5FbmNyeXB0ZWQgc2Vzc2lv
biB0ZXJtaW5hdGVkIC0iKTsNCgkgICAJCWZwcmludGYoc3RkZXJyLCJcclxu
cHJlc3MgZW50ZXIgZm9yIENMRUFSVEVYVCBtb2RlOiAiKTsNCgkgICAJCXdh
aXRlbnRlcigpOw0KCSAgIAkJZGVsa2V5KCk7DQoJICAgCQlzbG91dHN0YXRl
PVNMX1NUQVJUOw0KCSAgIAl9IGVsc2UNCgkgICAJCWNpcGhzdGF0ZT0wOw0K
CSAgIAlicmVhazsNCgkgICAgZGVmYXVsdDoNCgkgICAJYndyaXRlKHN0ZG91
dCwgJm9idWYsIDEpOw0KCSAgIAlicmVhazsNCgl9DQp9DQoNCg0KDQpkb3No
ZWxsKCkgDQp7DQoJaW50IHQ7DQoNCgkvKioqDQoJdCA9IG9wZW4oX1BBVEhf
VFRZLCBPX1JEV1IpOw0KCWlmICh0ID49IDApIHsNCgkJKHZvaWQpIGlvY3Rs
KHQsIFRJT0NOT1RUWSwgKGNoYXIgKikwKTsNCgkJKHZvaWQpIGNsb3NlKHQp
Ow0KCX0NCgkqKiovDQoJZ2V0c2xhdmUoKTsNCgkodm9pZCkgY2xvc2UobWFz
dGVyKTsNCgkodm9pZCkgZHVwMihzbGF2ZSwgMCk7DQoJKHZvaWQpIGR1cDIo
c2xhdmUsIDEpOw0KCSh2b2lkKSBkdXAyKHNsYXZlLCAyKTsNCgkodm9pZCkg
Y2xvc2Uoc2xhdmUpOw0KCWlmIChjbWQ9PU5VTEwpDQoJCWV4ZWNsKHNoZWxs
LCAic2giLCAiLWkiLCAwKTsNCgllbHNlDQoJCXN5c3RlbShjbWQpOw0KCXBl
cnJvcihzaGVsbCk7DQoJZmFpbCgpOw0KfQ0KDQpyYXd0dHkoKQ0Kew0KDQoJ
c3RydWN0IHRlcm1pb3Mgc2J1ZjsNCg0KICAgICAgICBzYnVmID0gdHQ7DQog
ICAgICAgIHNidWYuY19pZmxhZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElY
T04pOw0KICAgICAgICBzYnVmLmNfb2ZsYWcgJj0gfk9QT1NUOw0KICAgICAg
ICBzYnVmLmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xFQ0hPKTsNCiAgICAg
ICAgc2J1Zi5jX2NjW1ZNSU5dID0gMTsNCiAgICAgICAgc2J1Zi5jX2NjW1ZU
SU1FXSA9IDA7DQoJKHZvaWQpIHRjc2V0YXR0cigwLCBUQ1NBRkxVU0gsICZz
YnVmKTsNCn0NCg0KY29va2VkdHR5KCkNCnsNCgkodm9pZCkgdGNzZXRhdHRy
KDAsIFRDU0FGTFVTSCwgJnR0KTsNCn0NCg0KZmFpbCgpDQp7DQoNCgkodm9p
ZCkga2lsbCgwLCBTSUdURVJNKTsNCglkb25lKCk7DQp9DQoNCmRvbmUoKQ0K
ew0KCWNvb2tlZHR0eSgpOw0KCXN3aXRjaCAobW9kZSkgew0KCSAgICBjYXNl
IFJFTU9URToNCgkJaWYgKHN0YXRlPT1DSVBIRVIpDQoJCQlwcmludGYoIlhY
WFhYWFhYWFhYWFhYWFhcbiIpOw0KCQlwcmludGYoImxlc20gcmVtb3RlICIp
Ow0KCQlicmVhazsNCgkgICAgY2FzZSBMT0NBTDoNCgkJcHJpbnRmKCJsZXNt
IGxvY2FsICIpOw0KCQlicmVhazsNCgl9DQoJcHJpbnRmKCJkb25lXG4iKTsN
CglleGl0KDApOw0KfQ0KDQpnZXRtYXN0ZXIoKQ0Kew0KCWNoYXIgKnB0eSwg
KmJhbmssICpjcDsNCglzdHJ1Y3Qgc3RhdCBzdGI7DQoNCglwdHkgPSAmbGlu
ZVtzdHJsZW4oIi9kZXYvcHR5cCIpXTsNCglmb3IgKGJhbmsgPSAicHFyc3R1
dnd4eXoiOyAqYmFuazsgYmFuaysrKSB7DQoJCWxpbmVbc3RybGVuKCIvZGV2
L3B0eSIpXSA9ICpiYW5rOw0KCQkqcHR5ID0gJzAnOw0KCQlpZiAoc3RhdChs
aW5lLCAmc3RiKSA8IDApDQoJCQlicmVhazsNCgkJZm9yIChjcCA9ICIwMTIz
NDU2Nzg5YWJjZGVmIjsgKmNwOyBjcCsrKSB7DQoJCQkqcHR5ID0gKmNwOw0K
CQkJbWFzdGVyID0gb3BlbihsaW5lLCBPX1JEV1IpOw0KCQkJaWYgKG1hc3Rl
ciA+PSAwKSB7DQoJCQkJY2hhciAqdHAgPSAmbGluZVtzdHJsZW4oIi9kZXYv
IildOw0KCQkJCWludCBvazsNCg0KCQkJCS8qIHZlcmlmeSBzbGF2ZSBzaWRl
IGlzIHVzYWJsZSAqLw0KCQkJCSp0cCA9ICd0JzsNCgkJCQlvayA9IGFjY2Vz
cyhsaW5lLCBSX09LfFdfT0spID09IDA7DQoJCQkJKnRwID0gJ3AnOw0KCQkJ
CWlmIChvaykgew0KCQkJCQkodm9pZCkgdGNnZXRhdHRyKDAsICZ0dCk7DQoJ
CQkJICAgIAkodm9pZCkgaW9jdGwoMCwgVElPQ0dXSU5TWiwgDQoJCQkJCQko
Y2hhciAqKSZ3aW4pOw0KCQkJCQlyZXR1cm47DQoJCQkJfQ0KCQkJCSh2b2lk
KSBjbG9zZShtYXN0ZXIpOw0KCQkJfQ0KCQl9DQoJfQ0KCWZwcmludGYoc3Rk
ZXJyLCAiT3V0IG9mIHB0eSdzXG4iKTsNCglmYWlsKCk7DQp9DQoNCmdldHNs
YXZlKCkNCnsNCg0KCWxpbmVbc3RybGVuKCIvZGV2LyIpXSA9ICd0JzsNCglz
bGF2ZSA9IG9wZW4obGluZSwgT19SRFdSKTsNCglpZiAoc2xhdmUgPCAwKSB7
DQoJCXBlcnJvcihsaW5lKTsNCgkJZmFpbCgpOw0KCX0NCgkodm9pZCkgdGNz
ZXRhdHRyKHNsYXZlLCBUQ1NBRkxVU0gsICZ0dCk7DQoJKHZvaWQpIGlvY3Rs
KHNsYXZlLCBUSU9DU1dJTlNaLCAoY2hhciAqKSZ3aW4pOw0KCSh2b2lkKSBz
ZXRzaWQoKTsNCgkodm9pZCkgaW9jdGwoc2xhdmUsIFRJT0NTQ1RUWSwgMCk7
DQp9DQoNCndhaXRlbnRlcigpDQp7DQoJdW5zaWduZWQgY2hhciBiOw0KCWRv
IHsNCgkJcmVhZCgwLCZiLDEpOw0KCX0gd2hpbGUgKGIhPSdccicpOw0KCXBy
aW50ZigiXHJcbiIpOw0KfQ0KDQpzZW5kaGV4KGZwLGMpDQogICAgIEZJTEUg
KmZwOw0KICAgICB1bnNpZ25lZCBpbnQgYzsNCnsNCglzdGF0aWMgY2hhciBi
dWZbMTZdOw0KDQoJc3ByaW50ZihidWYsIiUwMngiLGMpOw0KCWJ3cml0ZShm
cCxidWYsMik7DQp9DQo=
--Boundary..3926.1071713479.multipart/mixed--




Thread