[ltt-dev] [Fwd: genevent]
Karim Yaghmour
karim@opersys.com
Fri, 10 Jan 2003 14:44:14 -0500
This is a multi-part message in MIME format.
--------------7C0520D1839EBA82D24BFC0F
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
I am forwarding an mail from Xiangxiu regarding work he's been conducting
with Michel Dagenais at the Ecole Polytechnique de Montreal on generalizing
event declarations. I think this is a very positive step in getting rid of
LTT's current dependency on hand-written event structures.
Comments and suggestions are welcomed,
Karim
-------- Original Message --------
Date: Thu, 9 Jan 2003 22:25:20 -0500
From: Ying Hu <ying.hu@polymtl.ca>
Subject: Re: genevent
Included please find four files: genevent.c, default.event, crc32.tab and
ltt-patch.
genevent.c is the code generator which will read event definition file and
generate corresponding .h and .c files. The .h file contains event type
(enumeration type), packed structures and inline trace functions for each event.
The .c file contains checksum, facility handle, init and exit functions, a call
in init function is made to register the facility.
All events we use now are defined in default.event file. Running genevent with
default.event as input will generate default.c and default.h files.
ltt-patch is a patch for patched kernel (TraceToolkit-0.9.6pre2, kernel-2.5.44)
Note: after doing patch, small modification has to be done in file
"linux/trace.h" : change ' #include "/usr/local/LTT/API/genevent/default.h" ' to
your 'default.h'
This is only a simple and small test for the functions generated automatically
by genevent.c
Any comments and suggestions are welcomed.
xiangxiu
--------------7C0520D1839EBA82D24BFC0F
Content-Type: application/octet-stream;
name="genevent.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="genevent.c"
LyoKCmdlbmV2ZW50LmM6IEdlbmVyYXRlIGhlbHBlciBkZWNsYXJhdGlvbnMgYW5kIGZ1bmN0aW9u
cyB0byB0cmFjZSBldmVudHMKICBmcm9tIGFuIGV2ZW50IGRlc2NyaXB0aW9uIGZpbGUuCgpDb3B5
cmlnaHQgKEMpIDIwMDIsIFhpYW54aXUgWWFuZwpDb3B5cmlnaHQgKEMpIDIwMDIsIE1pY2hlbCBE
YWdlbmFpcwogClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQoqLwoKLyogVGhpcyBwcm9ncmFtIHJlYWRz
IHRoZSAiLmV2ZW50IiBldmVudCBkZWZpbml0aW9ucyBpbnB1dCBmaWxlcyAKICAgc3BlY2lmaWVk
IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGdlbmVyYXRlcyBjb3JyZXNwb25kaW5nCiAg
ICIuYyIgYW5kICIuaCIgZmlsZXMgcmVxdWlyZWQgdG8gdHJhY2Ugc3VjaCBldmVudHMgaW4gdGhl
IGtlcm5lbC4KIAogICBUaGUgcHJvZ3JhbSB1c2VzIGEgdmVyeSBzaW1wbGUgdG9rZW5pemVyLCBj
YWxsZWQgZnJvbSBhIGhhbmQgd3JpdHRlbgogICByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgdG8g
ZmlsbCBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGV2ZW50cy4KICAgVGhlIHJlc3Vs
dCBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyBkZWZpbml0aW9ucyB3aGljaCByZWZlciB0byB0eXBl
CiAgIGRlZmluaXRpb25zLgoKICAgQSB0YWJsZSBvZiBuYW1lZCB0eXBlcyBpcyBtYWludGFpbmVk
IHRvIGFsbG93IHJlZmVyaW5nIHRvIHR5cGVzIGJ5IG5hbWUKICAgd2hlbiB0aGUgc2FtZSB0eXBl
IGlzIHVzZWQgYXQgc2V2ZXJhbCBwbGFjZXMuIEZpbmFsbHkgYSBzZXF1ZW5jZSBvZgogICBhbGwg
dHlwZXMgaXMgbWFpbnRhaW5lZCB0byBmYWNpbGl0YXRlIHRoZSBmcmVlaW5nIG9mIGFsbCB0eXBl
IAogICBpbmZvcm1hdGlvbiB3aGVuIHRoZSBwcm9jZXNzaW5nIG9mIGFuICIuZXZlbnQiIGZpbGUg
aXMgZmluaXNoZWQuICovCgojaW5jbHVkZSA8c3RkbGliLmg+IAojaW5jbHVkZSA8c3RyaW5nLmg+
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxsaW51eC9l
cnJuby5oPiAgCgoKLyogRXh0ZW5zaWJsZSBhcnJheSBjb250YWluZXIgKi8KCnR5cGVkZWYgc3Ry
dWN0IF9zZXF1ZW5jZSB7CiAgaW50IHNpemU7CiAgaW50IHBvc2l0aW9uOwogIHZvaWQgKiphcnJh
eTsKfSBzZXF1ZW5jZTsKCnZvaWQgc2VxdWVuY2VfaW5pdChzZXF1ZW5jZSAqdCk7CnZvaWQgc2Vx
dWVuY2VfZGlzcG9zZShzZXF1ZW5jZSAqdCk7CnZvaWQgc2VxdWVuY2VfcHVzaChzZXF1ZW5jZSAq
dCwgdm9pZCAqZWxlbSk7CnZvaWQgKnNlcXVlbmNlX3BvcChzZXF1ZW5jZSAqdCk7CgoKLyogSGFz
aCB0YWJsZSAqLwoKdHlwZWRlZiBzdHJ1Y3QgX3RhYmxlIHsKICBzZXF1ZW5jZSBrZXlzOwogIHNl
cXVlbmNlIHZhbHVlczsKfSB0YWJsZTsKCnZvaWQgdGFibGVfaW5pdCh0YWJsZSAqdCk7CnZvaWQg
dGFibGVfZGlzcG9zZSh0YWJsZSAqdCk7CnZvaWQgdGFibGVfaW5zZXJ0KHRhYmxlICp0LCBjaGFy
ICprZXksIHZvaWQgKnZhbHVlKTsKdm9pZCAqdGFibGVfZmluZCh0YWJsZSAqdCwgY2hhciAqa2V5
KTsKCgovKiBUb2tlbiB0eXBlcyAqLwoKdHlwZWRlZiBlbnVtIF90b2tlbl90eXBlIHsKICBFTkRG
SUxFLAogIENPTUEsCiAgTFBBUkVOVEhFU0lTLAogIFJQQVJFTlRIRVNJUywKICBTRU1JQ09MT04s
CiAgRVFVQUwsCiAgUVVPVEVEU1RSSU5HLAogIE5VTUJFUiwKICBOQU1FCn0gdG9rZW5fdHlwZTsK
CgovKiBTdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGJlaW5nIHBhcnNlZCAqLwp0eXBlZGVm
IHN0cnVjdCBfcGFyc2VfZmlsZSB7CiAgY2hhciAqbmFtZTsKICBGSUxFICogZnA7CiAgaW50IGxp
bmVubzsKICBjaGFyICpidWZmZXI7CiAgdG9rZW5fdHlwZSB0eXBlOyAKICBpbnQgdW5nZXQ7CiAg
dm9pZCAoKmVycm9yKSAoc3RydWN0IF9wYXJzZV9maWxlICosIGNoYXIgKik7Cn0gcGFyc2VfZmls
ZTsKCnZvaWQgdW5nZXRUb2tlbihwYXJzZV9maWxlICogaW4pOwpjaGFyICpnZXRUb2tlbihwYXJz
ZV9maWxlICppbik7CmNoYXIgKmdldENvbWEocGFyc2VfZmlsZSAqaW4pOwpjaGFyICpnZXRMUGFy
ZW50aGVzaXMocGFyc2VfZmlsZSAqaW4pOwpjaGFyICpnZXRSUGFyZW50aGVzaXMocGFyc2VfZmls
ZSAqaW4pOwpjaGFyICpnZXRTZW1pQ29sb24ocGFyc2VfZmlsZSAqaW4pOwpjaGFyICpnZXRRdW90
ZWRTdHJpbmcocGFyc2VfZmlsZSAqaW4pOwpjaGFyICpnZXROYW1lKHBhcnNlX2ZpbGUgKmluKTsK
aW50IGdldE51bWJlcihwYXJzZV9maWxlICppbik7CmNoYXIgKiBnZXRFcXVhbChwYXJzZV9maWxl
ICppbik7Cgp2b2lkIHNraXBDb21tZW50KHBhcnNlX2ZpbGUgKiBpbik7CnZvaWQgc2tpcEVPTChw
YXJzZV9maWxlICogaW4pOwppbnQgaXNhbHBoYShjaGFyIGNhcik7CmludCBpc2FsbnVtKGNoYXIg
Y2FyKTsKCi8qIFNvbWUgY29uc3RhbnRzICovCgpzdGF0aWMgY29uc3QgaW50IEJVRkZFUl9TSVpF
ID0gMTAyNDsKc3RhdGljIGNvbnN0IGludCBGSUxFX05BTUVfTEVOR1RIID0gMTAyNDsKCgovKiBF
dmVudHMgZGF0YSB0eXBlcyAqLwoKdHlwZWRlZiBlbnVtIF9kYXRhX3R5cGUgewogIElOVCwKICBV
SU5ULAogIEZMT0FULAogIFNUUklORywKICBFTlVNLAogIEFSUkFZLAogIFNFUVVFTkNFLAogIFNU
UlVDVCwKICBOT05FCn0gZGF0YV90eXBlOwoKCi8qIEV2ZW50IHR5cGUgZGVzY3JpcHRvcnMgKi8K
CnR5cGVkZWYgc3RydWN0IF90eXBlX2Rlc2NyaXB0b3IgewogIGRhdGFfdHlwZSB0eXBlOwogIGNo
YXIgKmZtdDsKICBpbnQgc2l6ZTsKICBzZXF1ZW5jZSBsYWJlbHM7IC8vIGZvciBlbnVtZXJhdGlv
bgogIHNlcXVlbmNlIGZpZWxkczsgLy8gZm9yIHN0cnVjdHVyZQogIHN0cnVjdCBfdHlwZV9kZXNj
cmlwdG9yICpuZXN0ZWRfdHlwZTsgLy8gZm9yIGFycmF5IGFuZCBzZXF1ZW5jZSAKfSB0eXBlX2Rl
c2NyaXB0b3I7CgoKLyogRmllbGRzIHdpdGhpbiB0eXBlcyAqLwoKdHlwZWRlZiBzdHJ1Y3QgX2Zp
ZWxkewogIGNoYXIgKm5hbWU7CiAgY2hhciAqZGVzY3JpcHRpb247CiAgdHlwZV9kZXNjcmlwdG9y
ICp0eXBlOwp9IGZpZWxkOwoKCi8qIEV2ZW50cyBkZWZpbml0aW9ucyAqLwoKdHlwZWRlZiBzdHJ1
Y3QgX2V2ZW50IHsgIAogIGNoYXIgKm5hbWU7CiAgY2hhciAqZGVzY3JpcHRpb247CiAgdHlwZV9k
ZXNjcmlwdG9yICp0eXBlOyAKICBpbnQgbmVzdGVkOwp9IGV2ZW50OwoKaW50IGdldFNpemUocGFy
c2VfZmlsZSAqaW4pOwp2b2lkIHBhcnNlRXZlbnQocGFyc2VfZmlsZSAqaW4sIGV2ZW50ICpldik7
CnZvaWQgcGFyc2VUeXBlRGVmaW5pdGlvbihwYXJzZV9maWxlICppbik7CnR5cGVfZGVzY3JpcHRv
ciAqcGFyc2VUeXBlKHBhcnNlX2ZpbGUgKmluLCB0eXBlX2Rlc2NyaXB0b3IgKnQpOwp2b2lkIHBh
cnNlRmllbGRzKHBhcnNlX2ZpbGUgKmluLCB0eXBlX2Rlc2NyaXB0b3IgKnQpOwoKCi8qIEdlbmVy
YXRpb24gb2YgLmggYW5kIC5jIGZpbGVzICovCgpjaGFyICppbnRPdXRwdXRUeXBlc1tdID0gewog
ICJpbnQ4X3QiLCAiaW50MTZfdCIsICJpbnQzMl90IiwgImludDY0X3QiLCAic2hvcnQgaW50Iiwg
ImludCIsICJsb25nIGludCIgfTsKCmNoYXIgKnVpbnRPdXRwdXRUeXBlc1tdID0gewogICJ1aW50
OF90IiwgInVpbnQxNl90IiwgInVpbnQzMl90IiwgInVpbnQ2NF90IiwgInVuc2lnbmVkIHNob3J0
IGludCIsIAogICJ1bnNpZ25lZCBpbnQiLCAidW5zaWduZWQgbG9uZyBpbnQiIH07CgpjaGFyICpm
bG9hdE91dHB1dFR5cGVzW10gPSB7CiAgInVuZGVmIiwgInVuZGVmIiwgImZsb2F0IiwgImRvdWJs
ZSIsICJ1bmRlZiIsICJmbG9hdCIsICJkb3VibGUiIH07Cgp2b2lkIGNoZWNrTmFtZWRUeXBlc0lt
cGxlbWVudGVkKCk7CnZvaWQgZ2VuZXJhdGVGaWxlKGNoYXIgKiBmaWxlKTsKdm9pZCBnZW5lcmF0
ZUVudW1FdmVudChGSUxFICogZnAsY2hhciAqIGZhY05hbWUsIGludCAqIG5iRXZlbnQpOwp2b2lk
IGdlbmVyYXRlU3RydWN0RnVuYyhGSUxFICogZnAsIGNoYXIgKiBmYWNOYW1lKTsKdm9pZCBnZW5l
cmF0ZUNmaWxlKEZJTEUgKiBmcCwgY2hhciAqIGZhY05hbWUsIGludCBuYkV2ZW50LCB1bnNpZ25l
ZCBsb25nIGNoZWNrc3VtKTsKdm9pZCBnZW5lcmF0ZUVudW1EZWZpbml0aW9uKEZJTEUgKiBmcCwg
dHlwZV9kZXNjcmlwdG9yICogZkhlYWQpOwpjaGFyICogZ2V0VHlwZVN0cih0eXBlX2Rlc2NyaXB0
b3IgKiB0ZCk7Cgp0eXBlX2Rlc2NyaXB0b3IgKiBmaW5kX25hbWVkX3R5cGUoY2hhciAqbmFtZSk7
CgoKLyogRHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyAqLwoKdm9pZCAqIG1l
bUFsbG9jKGludCBzaXplKTsKY2hhciAqYWxsb2NBbmRDb3B5KGNoYXIgKiBzdHIpOwpjaGFyICph
cHBlbmRTdHJpbmcoY2hhciAqcywgY2hhciAqc3VmZml4KTsKdm9pZCBmcmVlVHlwZXMoc2VxdWVu
Y2UgKnQpOwp2b2lkIGZyZWVFdmVudHMoc2VxdWVuY2UgKnQpOwp2b2lkIGVycm9yX2NhbGxiYWNr
KHBhcnNlX2ZpbGUgKmluLCBjaGFyICptc2cpOwoKCi8vY2hlY2tzdW0gcGFydApzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IGNyY3RhYjMyW10gPQp7CiNpbmNsdWRlICJjcmMzMi50YWIiCn07Cgpz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKcGFydGlhbF9jcmMzMl9vbmUodW5zaWduZWQgY2hh
ciBjLCB1bnNpZ25lZCBsb25nIGNyYykKewogIHJldHVybiBjcmN0YWIzMlsoY3JjIF4gYykgJiAw
eGZmXSBeIChjcmMgPj4gOCk7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpwYXJ0aWFs
X2NyYzMyKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGxvbmcgY3JjKQp7CiAgd2hpbGUgKCpzKQog
ICAgY3JjID0gcGFydGlhbF9jcmMzMl9vbmUoKnMrKywgY3JjKTsKICByZXR1cm4gY3JjOwp9Cgpz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKY3JjMzIoY29uc3QgY2hhciAqcykKewogIHJldHVy
biBwYXJ0aWFsX2NyYzMyKHMsIDB4ZmZmZmZmZmYpIF4gMHhmZmZmZmZmZjsKfQoKdm9pZCBnZW5l
cmF0ZUNoZWNrc3VtKGNoYXIgKiBmYWNOYW1lLCB1bnNpZ25lZCBsb25nICogY2hlY2tzdW0pOwp1
bnNpZ25lZCBsb25nIGdldFR5cGVDaGVja3N1bSh1bnNpZ25lZCBsb25nIGFDcmMsIHR5cGVfZGVz
Y3JpcHRvciAqIHR5cGUsIGludCAqIG5lc3RlZFN0cnVjdCk7CgovKiBOYW1lZCB0eXBlcyBtYXkg
YmUgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlICovCgp0YWJsZSBuYW1lZF90eXBlczsKc2VxdWVu
Y2UgYWxsX3R5cGVzOwpzZXF1ZW5jZSBldmVudHM7CgppbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCnsKICBGSUxFICogZnAgPSBOVUxMOwogIGNoYXIgKnRva2VuOwogIHBhcnNlX2ZpbGUg
aW47CiAgY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOwogIGV2ZW50ICpldjsKICBpbnQgaSwgcG9z
OwoKICBpZihhcmdjIDwgMil7CiAgICBwcmludGYoIkF0IGxlYXN0IG9uZSBldmVudCBkZWZpbml0
aW9uIGZpbGUgaXMgbmVlZGVkXG4iKTsKICAgIGV4aXQoMSk7CiAgfQoKICBmb3IoaSA9IDEgOyBp
IDwgYXJnYyA7IGkrKykgewogICAgc2VxdWVuY2VfaW5pdCgmZXZlbnRzKTsKICAgIHRhYmxlX2lu
aXQoJm5hbWVkX3R5cGVzKTsKICAgIHNlcXVlbmNlX2luaXQoJmFsbF90eXBlcyk7CgogICAgaW4u
YnVmZmVyID0gYnVmZmVyOwogICAgaW4ubGluZW5vID0gMDsKICAgIGluLmVycm9yID0gZXJyb3Jf
Y2FsbGJhY2s7CgogICAgaWYoc3RybGVuKGFyZ3ZbaV0pPjYpewogICAgICB0b2tlbiA9ICZhcmd2
W2ldW3N0cmxlbihhcmd2W2ldKS02XTsKICAgICAgaWYoc3RyY21wKHRva2VuLCAiLmV2ZW50Iikg
PT0gMCkJaW4ubmFtZSA9IGFsbG9jQW5kQ29weShhcmd2W2ldKTsKICAgICAgZWxzZSBpbi5uYW1l
ID0gYXBwZW5kU3RyaW5nKGFyZ3ZbaV0sIi5ldmVudCIpOwogICAgfWVsc2UgIGluLm5hbWUgPSBh
cHBlbmRTdHJpbmcoYXJndltpXSwiLmV2ZW50Iik7CgogICAgaW4uZnAgPSBmb3Blbihpbi5uYW1l
LCAiciIpOwogICAgaWYoIWluLmZwICl7CiAgICAgIGluLmVycm9yKCZpbiwiY2Fubm90IG9wZW4g
aW5wdXQgZmlsZSIpOwogICAgfQoKICAgIHdoaWxlKDEpewogICAgICB0b2tlbiA9IGdldFRva2Vu
KCZpbik7CiAgICAgIGlmKGluLnR5cGUgPT0gRU5ERklMRSkgYnJlYWs7CgogICAgICBpZihzdHJj
bXAoImV2ZW50Iix0b2tlbikgPT0gMCkgewogICAgICAgIGV2ID0gKGV2ZW50ICopbWVtQWxsb2Mo
c2l6ZW9mKGV2ZW50KSk7CiAgICAgICAgc2VxdWVuY2VfcHVzaCgmZXZlbnRzLGV2KTsKCXBhcnNl
RXZlbnQoJmluLGV2KTsKICAgICAgfQogICAgICBlbHNlIGlmKHN0cmNtcCgidHlwZSIsdG9rZW4p
ID09IDApIHsKCXBhcnNlVHlwZURlZmluaXRpb24oJmluKTsKICAgICAgfQogICAgICBlbHNlIGlu
LmVycm9yKCZpbiwiZXZlbnQgb3IgdHlwZSB0b2tlbiBleHBlY3RlZCIpOwogICAgfQoKICAgIGZj
bG9zZShpbi5mcCk7CgogICAgY2hlY2tOYW1lZFR5cGVzSW1wbGVtZW50ZWQoKTsKICAgIGdlbmVy
YXRlRmlsZShhcmd2W2ldKTsKCiAgICBmcmVlKGluLm5hbWUpOwogICAgZnJlZUV2ZW50cygmZXZl
bnRzKTsKICAgIHNlcXVlbmNlX2Rpc3Bvc2UoJmV2ZW50cyk7CiAgICB0YWJsZV9kaXNwb3NlKCZu
YW1lZF90eXBlcyk7CiAgICBmcmVlVHlwZXMoJmFsbF90eXBlcyk7CiAgICBzZXF1ZW5jZV9kaXNw
b3NlKCZhbGxfdHlwZXMpOwogIH0KICByZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CiAqRnVuY3Rpb24gbmFtZQogKiAgICBnZXRTaXplICAgIDogdHJhbnNsYXRlIGZyb20gc3RyaW5n
IHRvIGludGVnZXIKICpJbnB1dCBwYXJhbXMgCiAqICAgIGluICAgICAgICAgOiBpbnB1dCBmaWxl
IGhhbmRsZQogKlJldHVybiB2YWx1ZXMgIAogKiAgICBzaXplICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGdldFNpemUocGFyc2VfZmlsZSAqaW4p
ewogIGNoYXIgKnRva2VuOwoKICB0b2tlbiA9IGdldFRva2VuKGluKTsKICBpZihpbi0+dHlwZSA9
PSBOVU1CRVIpIHsKICAgIGlmKHN0cmNtcCh0b2tlbiwiMSIpID09IDApIHJldHVybiAwOwogICAg
ZWxzZSBpZihzdHJjbXAodG9rZW4sIjIiKSA9PSAwKSByZXR1cm4gMTsKICAgIGVsc2UgaWYoc3Ry
Y21wKHRva2VuLCI0IikgPT0gMCkgcmV0dXJuIDI7CiAgICBlbHNlIGlmKHN0cmNtcCh0b2tlbiwi
OCIpID09IDApIHJldHVybiAzOwogIH0KICBlbHNlIGlmKGluLT50eXBlID09IE5BTUUpIHsKICAg
IGlmKHN0cmNtcCh0b2tlbiwic2hvcnQiKSA9PSAwKSByZXR1cm4gNDsKICAgIGVsc2UgaWYoc3Ry
Y21wKHRva2VuLCJtZWRpdW0iKSA9PSAwKSByZXR1cm4gNTsKICAgIGVsc2UgaWYoc3RyY21wKHRv
a2VuLCJsb25nIikgPT0gMCkgcmV0dXJuIDY7CiAgfQogIGluLT5lcnJvcihpbiwiaW5jb3JyZWN0
IHNpemUgc3BlY2lmaWNhdGlvbiIpOwogIHJldHVybiAtMTsKfQoKLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBlcnJvcl9jYWxsYmFjayAgOiBwcmludCBvdXQgZXJy
b3IgaW5mbwogKklucHV0IHBhcmFtcwogKiAgICBpbiAgICAgICAgICAgICAgOiBpbnB1dCBmaWxl
IGhhbmRsZQogKiAgICBtc2cgICAgICAgICAgICAgOiBtZXNzYWdlIHRvIGJlIHByaW50ZWQgICAg
ICAgICAgICAgICAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZXJyb3JfY2FsbGJhY2so
cGFyc2VfZmlsZSAqaW4sIGNoYXIgKm1zZyl7CiAgaWYoaW4pCiAgICBwcmludGYoIkVycm9yIGlu
IGZpbGUgJXMsIGxpbmUgJWQ6ICVzXG4iLCBpbi0+bmFtZSwgaW4tPmxpbmVubywgbXNnKTsKICBl
bHNlCiAgICBwcmludGYoIiVzXG4iLG1zZyk7CiAgZXhpdCgxKTsKfQoKLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBtZW1BbGxvYyAgOiBhbGxvY2F0ZSBtZW1vcnkg
ICAgICAgICAgICAgICAgICAgIAogKklucHV0IHBhcmFtcyAKICogICAgc2l6ZSAgICAgIDogcmVx
dWlyZWQgbWVtb3J5IHNpemUgICAgICAgICAgICAgICAKICpyZXR1cm4gdmFsdWUgCiAqICAgIHZv
aWQgKiAgICA6IHBvaW50ZXIgdG8gYWxsb2NhdGUgbWVtb3J5IG9yIE5VTEwgCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwp2b2lkICogbWVtQWxsb2MoaW50IHNpemUpewogIHZvaWQgKmFkZHIgPSBtYWxs
b2Moc2l6ZSk7CiAgaWYoIWFkZHIpewogICAgcHJpbnRmKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVt
b3J5Iik7ICAgIAogICAgZXhpdCgxKTsKICB9CiAgcmV0dXJuIGFkZHI7CSAgCn0KCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKkZ1bmN0aW9uIG5hbWUKICogICAgYWxsb2NBbmRDb3B5IDogYWxsb2Nh
dGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGl0ICAKICpJbnB1dCBwYXJhbXMgCiAqICAgIHN0ciAg
ICAgICAgICA6IHN0cmluZyB0byBiZSBwdXQgaW4gbWVtb3J5ICAgICAgICAgCiAqcmV0dXJuIHZh
bHVlIAogKiAgICBjaGFyICogICAgICAgOiBwb2ludGVyIHRvIGFsbG9jYXRlIG1lbW9yeSBvciBO
VUxMCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwpjaGFyICphbGxvY0FuZENvcHkoY2hhciAqc3RyKXsK
ICBjaGFyICphZGRyID0gKGNoYXIgKiltZW1BbGxvYyhzdHJsZW4oc3RyKSsxKTsKICBzdHJjcHko
YWRkcixzdHIpOwogIHJldHVybiBhZGRyOwp9CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqRnVu
Y3Rpb24gbmFtZQogKiAgICBwYXJzZUV2ZW50ICAgIDogZ2VuZXJhdGUgZXZlbnQgZnJvbSBldmVu
dCBkZWZpbml0aW9uIAogKklucHV0IHBhcmFtcyAKICogICAgaW4gICAgICAgICAgICA6IGlucHV0
IGZpbGUgaGFuZGxlICAgICAgICAgIAogKiAgICBldiAgICAgICAgICAgIDogbmV3IGV2ZW50ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAqT3V0cHV0IHBhcmFtcyAgICAKICogICAgZXYg
ICAgICAgICAgICA6IG5ldyBldmVudCAocGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGl0KSAgIAog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8Kdm9pZCBwYXJzZUV2ZW50KHBhcnNlX2ZpbGUgKmluLCBldmVu
dCAqIGV2KSB7CiAgY2hhciAqdG9rZW47CiAgdHlwZV9kZXNjcmlwdG9yICp0OwoKICBnZXRMUGFy
ZW50aGVzaXMoaW4pOwogIHRva2VuID0gZ2V0TmFtZShpbik7CiAgZXYtPm5hbWUgPSBhbGxvY0Fu
ZENvcHkodG9rZW4pOwogIGdldENvbWEoaW4pOwoKICB0b2tlbiA9IGdldFF1b3RlZFN0cmluZyhp
bik7CiAgZXYtPmRlc2NyaXB0aW9uID0gYWxsb2NBbmRDb3B5KHRva2VuKTsKICAKICB0b2tlbiA9
IGdldFRva2VuKGluKTsgLy90b2tlbiBlaXRoZXIgaXMgYSAnLCcgb3IgYSAnKScKICBpZihpbi0+
dHlwZSA9PSBDT01BKSB0b2tlbiA9IGdldE5hbWUoaW4pOwogIHVuZ2V0VG9rZW4oaW4pOwoKICAv
KiBXZSBoYXZlIGEgcG9zc2libHkgZW1wdHkgbGlzdCBvZiBmaWVsZHMsIGNvbnRhaW5pbmcgc3Ry
dWN0IGltcGxpZWQgKi8KICBpZigoaW4tPnR5cGUgPT0gTkFNRSAmJiBzdHJjbXAodG9rZW4sImZp
ZWxkIikgPT0gMCkgfHwgCiAgICAgIGluLT50eXBlID09IFJQQVJFTlRIRVNJUykgewogICAgLyog
SW5zZXJ0IGFuIHVubmFtZWQgc3RydWN0IHR5cGUgKi8KICAgIHQgPSAodHlwZV9kZXNjcmlwdG9y
ICopbWVtQWxsb2Moc2l6ZW9mKHR5cGVfZGVzY3JpcHRvcikpOwogICAgdC0+dHlwZSA9IFNUUlVD
VDsKICAgIHQtPmZtdCA9IE5VTEw7CiAgICBpZihpbi0+dHlwZSA9PSBOQU1FKSBwYXJzZUZpZWxk
cyhpbix0KTsKICAgIGVsc2UgaWYoaW4tPnR5cGUgPT0gUlBBUkVOVEhFU0lTKSBzZXF1ZW5jZV9p
bml0KCYodC0+ZmllbGRzKSk7ICAgICAgCiAgICBzZXF1ZW5jZV9wdXNoKCZhbGxfdHlwZXMsdCk7
CiAgICBldi0+dHlwZSA9IHQ7CiAgfQoKICAvKiBPciBhIGNvbXBsZXRlIHR5cGUgZGVjbGFyYXRp
b24gYnV0IGl0IG11c3QgYmUgYSBzdHJ1Y3QgKi8KICBlbHNlIGlmKGluLT50eXBlID09IE5BTUUp
ewogICAgZXYtPnR5cGUgPSBwYXJzZVR5cGUoaW4sTlVMTCk7CiAgICBpZihldi0+dHlwZS0+dHlw
ZSAhPSBTVFJVQ1QgJiYgZXYtPnR5cGUtPnR5cGUgIT0gTk9ORSkgaW4tPmVycm9yKGluLCJ0eXBl
IG11c3QgYmUgYSBzdHJ1Y3QiKTsKICB9ZWxzZSBpbi0+ZXJyb3IoaW4sIm5vdCBhIHN0cnVjdCB0
eXBlIik7CgogIGdldFJQYXJlbnRoZXNpcyhpbik7CiAgZ2V0U2VtaUNvbG9uKGluKTsKfQoKLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBwYXJzZUZpZWxkICA6IGdl
dCBmaWVsZCBpbmZvbWF0aW9uIGZyb20gYnVmZmVyIAogKklucHV0IHBhcmFtcyAKICogICAgaW4g
ICAgICAgICAgOiBpbnB1dCBmaWxlIGhhbmRsZQogKiAgICB0ICAgICAgICAgICA6IHR5cGUgZGVz
Y3JpcHRvcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBwYXJzZUZpZWxkcyhwYXJzZV9maWxl
ICppbiwgdHlwZV9kZXNjcmlwdG9yICp0KSB7CiAgY2hhciAqIHRva2VuOwogIGZpZWxkICpmOwoK
ICBzZXF1ZW5jZV9pbml0KCYodC0+ZmllbGRzKSk7CgogIHRva2VuID0gZ2V0VG9rZW4oaW4pOwog
IHdoaWxlKGluLT50eXBlID09IE5BTUUgJiYgc3RyY21wKHRva2VuLCJmaWVsZCIpID09IDApIHsK
ICAgIGYgPSAoZmllbGQgKiltZW1BbGxvYyhzaXplb2YoZmllbGQpKTsKICAgIHNlcXVlbmNlX3B1
c2goJih0LT5maWVsZHMpLGYpOwoKICAgIGdldExQYXJlbnRoZXNpcyhpbik7CiAgICBmLT5uYW1l
ID0gKGNoYXIgKilhbGxvY0FuZENvcHkoZ2V0TmFtZShpbikpOwogICAgZ2V0Q29tYShpbik7CiAg
ICBmLT5kZXNjcmlwdGlvbiA9IChjaGFyICopYWxsb2NBbmRDb3B5KGdldFF1b3RlZFN0cmluZyhp
bikpOwogICAgZ2V0Q29tYShpbik7CiAgICBmLT50eXBlID0gcGFyc2VUeXBlKGluLE5VTEwpOwog
ICAgZ2V0UlBhcmVudGhlc2lzKGluKTsKICAgIAogICAgdG9rZW4gPSBnZXRUb2tlbihpbik7CiAg
ICBpZihpbi0+dHlwZSA9PSBDT01BKSB0b2tlbiA9IGdldE5hbWUoaW4pOwogICAgZWxzZSB1bmdl
dFRva2VuKGluKTsgLy8gbm8gbW9yZSBmaWVsZHMsIGl0IG11c3QgYmUgYSAnKScKICB9CgogIGlm
KGluLT50eXBlID09IE5BTUUgJiYgc3RyY21wKHRva2VuLCJmaWVsZCIpICE9IDApCiAgICBpbi0+
ZXJyb3IoaW4sIm5vdCBhIGZpZWxkIik7Cn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICpGdW5j
dGlvbiBuYW1lCiAqICAgIHBhcnNlVHlwZSAgICAgIDogZ2V0IHR5cGUgaW5mb3JtYXRpb24sIHR5
cGUgY2FuIGJlIDogCiAqICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlOgogKiAgICAgICAg
ICAgICAgICAgICAgICAgIGludChzaXplLGZtdCk7IHVpbnQoc2l6ZSxmbXQpOyBmbG9hdChzaXpl
LGZtdCk7IAogKiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyhmbXQpOyBlbnVtKHNpemUs
Zm10LChsYWJlbDEsbGFiZWwyLi4uKSkKICogICAgICAgICAgICAgICAgICAgICBDb21wb3VuZDoK
ICogICAgICAgICAgICAgICAgICAgICAgICBhcnJheShhcnJheVNpemUsIHR5cGUpOyBzZXF1ZW5j
ZShsZW5ndGhTaXplLHR5cGUpCiAqCQkgICAgICAgICAgc3RydWN0KGZpZWxkKG5hbWUsdHlwZSxk
ZXNjcmlwdGlvbikuLi4pCiAqICAgICAgICAgICAgICAgICAgICAgdHlwZSBuYW1lOgogKiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUobmFtZSx0eXBlKQogKklucHV0IHBhcmFtcyAKICogICAg
aW4gICAgICAgICAgICAgICA6IGlucHV0IGZpbGUgaGFuZGxlCiAqICAgIGluVHlwZSAgICAgICAg
ICAgOiBhIHR5cGUgZGVzY3JpcHRvciAgICAgICAgICAKICpSZXR1cm4gdmFsdWVzICAKICogICAg
dHlwZV9kZXNjcmlwdG9yKiA6IGEgdHlwZSBkZXNjcmlwdG9yICAgICAgICAgICAgIAogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KdHlwZV9kZXNjcmlwdG9yICpwYXJzZVR5cGUocGFyc2VfZmlsZSAqaW4s
IHR5cGVfZGVzY3JpcHRvciAqaW5UeXBlKSB7CiAgY2hhciAqdG9rZW4sICpjYXI7CiAgdHlwZV9k
ZXNjcmlwdG9yICp0OwoKICBpZihpblR5cGUgPT0gTlVMTCkgewogICAgdCA9ICh0eXBlX2Rlc2Ny
aXB0b3IgKikgbWVtQWxsb2Moc2l6ZW9mKHR5cGVfZGVzY3JpcHRvcikpOwogICAgdC0+dHlwZSA9
IE5PTkU7CiAgICB0LT5mbXQgPSBOVUxMOwogICAgc2VxdWVuY2VfcHVzaCgmYWxsX3R5cGVzLHQp
OwogIH0KICBlbHNlIHQgPSBpblR5cGU7CgogIHRva2VuID0gZ2V0TmFtZShpbik7CgogIGlmKHN0
cmNtcCh0b2tlbiwic3RydWN0IikgPT0gMCkgewogICAgdC0+dHlwZSA9IFNUUlVDVDsKICAgIGdl
dExQYXJlbnRoZXNpcyhpbik7CiAgICBwYXJzZUZpZWxkcyhpbix0KTsKICAgIGdldFJQYXJlbnRo
ZXNpcyhpbik7CiAgfQogIGVsc2UgaWYoc3RyY21wKHRva2VuLCJhcnJheSIpID09IDApIHsKICAg
IHQtPnR5cGUgPSBBUlJBWTsKICAgIGdldExQYXJlbnRoZXNpcyhpbik7CiAgICB0LT5zaXplID0g
Z2V0TnVtYmVyKGluKTsKICAgIGdldENvbWEoaW4pOwogICAgdC0+bmVzdGVkX3R5cGUgPSBwYXJz
ZVR5cGUoaW4sTlVMTCk7CiAgICBnZXRSUGFyZW50aGVzaXMoaW4pOwogIH0KICBlbHNlIGlmKHN0
cmNtcCh0b2tlbiwic2VxdWVuY2UiKSA9PSAwKSB7CiAgICB0LT50eXBlID0gU0VRVUVOQ0U7CiAg
ICBnZXRMUGFyZW50aGVzaXMoaW4pOwogICAgdC0+c2l6ZSA9IGdldFNpemUoaW4pOwogICAgZ2V0
Q29tYShpbik7CiAgICB0LT5uZXN0ZWRfdHlwZSA9IHBhcnNlVHlwZShpbixOVUxMKTsKICAgIGdl
dFJQYXJlbnRoZXNpcyhpbik7CiAgfQogIGVsc2UgaWYoc3RyY21wKHRva2VuLCJlbnVtIikgPT0g
MCkgewogICAgdC0+dHlwZSA9IEVOVU07CiAgICBzZXF1ZW5jZV9pbml0KCYodC0+bGFiZWxzKSk7
CiAgICBnZXRMUGFyZW50aGVzaXMoaW4pOwogICAgdC0+c2l6ZSA9IGdldFNpemUoaW4pOwogICAg
Z2V0Q29tYShpbik7CiAgICB0b2tlbiA9IGdldFRva2VuKGluKTsKICAgIGlmKGluLT50eXBlID09
IFFVT1RFRFNUUklORyl7CiAgICAgIHQtPmZtdCA9IGFsbG9jQW5kQ29weSh0b2tlbik7CiAgICAg
IGdldENvbWEoaW4pOwogICAgfWVsc2UgdW5nZXRUb2tlbihpbik7CiAgICBnZXRMUGFyZW50aGVz
aXMoaW4pOwoKICAgIHRva2VuID0gZ2V0VG9rZW4oaW4pOwogICAgd2hpbGUoaW4tPnR5cGUgIT0g
UlBBUkVOVEhFU0lTKSB7CiAgICAgIGlmKGluLT50eXBlICE9IE5BTUUpIGluLT5lcnJvcihpbiwi
TmFtZSB0b2tlbiB3YXMgZXhwZWN0ZWQiKTsKICAgICAgY2FyID0gYWxsb2NBbmRDb3B5KHRva2Vu
KTsKICAgICAgdG9rZW4gPSBnZXRUb2tlbihpbik7CiAgICAgIGlmKGluLT50eXBlID09IENPTUEp
ewoJc2VxdWVuY2VfcHVzaCgmKHQtPmxhYmVscyksYWxsb2NBbmRDb3B5KGNhcikpOwoJdG9rZW4g
PSBnZXROYW1lKGluKTsKICAgICAgfWVsc2UgaWYoaW4tPnR5cGUgPT0gRVFVQUwpeyAvL2xhYmVs
IGZvbGxvd2VkIGJ5ICc9JyBhbmQgYSBudW1iZXIsIGUueC4gbGFiZWwxID0gMSwKCWNhciA9IGFw
cGVuZFN0cmluZyhjYXIsIHRva2VuKTsKCXRva2VuID0gZ2V0VG9rZW4oaW4pOwoJaWYoaW4tPnR5
cGUgIT0gTlVNQkVSKSBpbi0+ZXJyb3IoaW4sIk51bWJlciB0b2tlbiB3YXMgZXhwZWN0ZWQiKTsK
CWNhciA9IGFwcGVuZFN0cmluZyhjYXIsIHRva2VuKTsKCXNlcXVlbmNlX3B1c2goJih0LT5sYWJl
bHMpLGFsbG9jQW5kQ29weShjYXIpKTsJCgl0b2tlbiA9IGdldFRva2VuKGluKTsKCWlmKGluLT50
eXBlID09IENPTUEpIHRva2VuID0gZ2V0TmFtZShpbik7CgllbHNlIHVuZ2V0VG9rZW4oaW4pOwog
ICAgICB9ZWxzZXsKCXNlcXVlbmNlX3B1c2goJih0LT5sYWJlbHMpLGFsbG9jQW5kQ29weShjYXIp
KTsKCXVuZ2V0VG9rZW4oaW4pOwogICAgICB9CiAgICB9ICAKICAgIGdldFJQYXJlbnRoZXNpcyhp
bik7CiAgICBnZXRSUGFyZW50aGVzaXMoaW4pOwogIH0KICBlbHNlIGlmKHN0cmNtcCh0b2tlbiwi
aW50IikgPT0gMCkgewogICAgdC0+dHlwZSA9IElOVDsKICAgIGdldExQYXJlbnRoZXNpcyhpbik7
CiAgICB0LT5zaXplID0gZ2V0U2l6ZShpbik7CiAgICB0b2tlbiA9IGdldFRva2VuKGluKTsKICAg
IGlmKGluLT50eXBlID09IENPTUEpIHsKICAgICAgdG9rZW4gPSBnZXRRdW90ZWRTdHJpbmcoaW4p
OwogICAgICB0LT5mbXQgPSBhbGxvY0FuZENvcHkodG9rZW4pOwogICAgfQogICAgZWxzZSB1bmdl
dFRva2VuKGluKTsKICAgIGdldFJQYXJlbnRoZXNpcyhpbik7CiAgfQogIGVsc2UgaWYoc3RyY21w
KHRva2VuLCJ1aW50IikgPT0gMCkgewogICAgdC0+dHlwZSA9IFVJTlQ7CiAgICBnZXRMUGFyZW50
aGVzaXMoaW4pOwogICAgdC0+c2l6ZSA9IGdldFNpemUoaW4pOwogICAgdG9rZW4gPSBnZXRUb2tl
bihpbik7CiAgICBpZihpbi0+dHlwZSA9PSBDT01BKSB7CiAgICAgIHRva2VuID0gZ2V0UXVvdGVk
U3RyaW5nKGluKTsKICAgICAgdC0+Zm10ID0gYWxsb2NBbmRDb3B5KHRva2VuKTsKICAgIH0KICAg
IGVsc2UgdW5nZXRUb2tlbihpbik7CiAgICBnZXRSUGFyZW50aGVzaXMoaW4pOwogIH0KICBlbHNl
IGlmKHN0cmNtcCh0b2tlbiwiZmxvYXQiKSA9PSAwKSB7CiAgICB0LT50eXBlID0gRkxPQVQ7CiAg
ICBnZXRMUGFyZW50aGVzaXMoaW4pOwogICAgdC0+c2l6ZSA9IGdldFNpemUoaW4pOwogICAgdG9r
ZW4gPSBnZXRUb2tlbihpbik7CiAgICBpZihpbi0+dHlwZSA9PSBDT01BKSB7CiAgICAgIHRva2Vu
ID0gZ2V0UXVvdGVkU3RyaW5nKGluKTsKICAgICAgdC0+Zm10ID0gYWxsb2NBbmRDb3B5KHRva2Vu
KTsKICAgIH0KICAgIGVsc2UgdW5nZXRUb2tlbihpbik7CiAgICBnZXRSUGFyZW50aGVzaXMoaW4p
OwogIH0KICBlbHNlIGlmKHN0cmNtcCh0b2tlbiwic3RyaW5nIikgPT0gMCkgewogICAgdC0+dHlw
ZSA9IFNUUklORzsKICAgIGdldExQYXJlbnRoZXNpcyhpbik7CiAgICB0b2tlbiA9IGdldFRva2Vu
KGluKTsKICAgIGlmKGluLT50eXBlID09IFFVT1RFRFNUUklORykgdC0+Zm10ID0gYWxsb2NBbmRD
b3B5KHRva2VuKTsKICAgIGVsc2UgdW5nZXRUb2tlbihpbik7CiAgICBnZXRSUGFyZW50aGVzaXMo
aW4pOwogIH0KICBlbHNlIHsKICAgIC8qIE11c3QgYmUgYSBuYW1lZCB0eXBlICovCiAgICBpZihp
blR5cGUgIT0gTlVMTCkgCiAgICAgIGluLT5lcnJvcihpbiwiTmFtZWQgdHlwZSBjYW5ub3QgcmVm
ZXIgdG8gYSBuYW1lZCB0eXBlIik7CiAgICBlbHNlIHsKICAgICAgZnJlZSh0KTsKICAgICAgc2Vx
dWVuY2VfcG9wKCZhbGxfdHlwZXMpOwogICAgICByZXR1cm4oZmluZF9uYW1lZF90eXBlKHRva2Vu
KSk7CiAgICB9CiAgfQoKICByZXR1cm4gdDsKfSAgICAKCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog
KkZ1bmN0aW9uIG5hbWUKICogICAgZmluZF9uYW1lZF90eXBlICAgICA6IGZpbmQgYSBuYW1lZCB0
eXBlIGZyb20gaGFzaCB0YWJsZSAKICpJbnB1dCBwYXJhbXMgCiAqICAgIG5hbWUgICAgICAgICAg
ICAgICAgOiB0eXBlIG5hbWUgICAgICAgICAgCiAqUmV0dXJuIHZhbHVlcyAgCiAqICAgIHR5cGVf
ZGVzY3JpcHRvciAqICAgOiBhIHR5cGUgZGVzY3JpcHRvciAgICAgICAgICAgICAgICAgICAgICAg
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KCnR5cGVfZGVzY3JpcHRvciAqIGZpbmRfbmFtZWRfdHlw
ZShjaGFyICpuYW1lKQp7IAogIHR5cGVfZGVzY3JpcHRvciAqdDsKCiAgdCA9IHRhYmxlX2ZpbmQo
Jm5hbWVkX3R5cGVzLG5hbWUpOwogIGlmKHQgPT0gTlVMTCkgewogICAgdCA9ICh0eXBlX2Rlc2Ny
aXB0b3IgKiltZW1BbGxvYyhzaXplb2YodHlwZV9kZXNjcmlwdG9yKSk7CiAgICB0LT50eXBlID0g
Tk9ORTsKICAgIHQtPmZtdCA9IE5VTEw7CiAgICB0YWJsZV9pbnNlcnQoJm5hbWVkX3R5cGVzLGFs
bG9jQW5kQ29weShuYW1lKSx0KTsKICB9CiAgcmV0dXJuIHQ7Cn0gIAoKLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBwYXJzZVR5cGVEZWZpbml0aW9uIDogZ2V0IHR5
cGUgaW5mb3JtYXRpb24gZnJvbSB0eXBlIGRlZmluaXRpb24gCiAqSW5wdXQgcGFyYW1zIAogKiAg
ICBpbiAgICAgICAgICAgICAgICAgIDogaW5wdXQgZmlsZSBoYW5kbGUgICAgICAgICAgCiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8Kdm9pZCBwYXJzZVR5cGVEZWZpbml0aW9uKHBhcnNlX2ZpbGUgKiBp
bil7CiAgY2hhciAqdG9rZW47CiAgdHlwZV9kZXNjcmlwdG9yICp0OwoKICBnZXRMUGFyZW50aGVz
aXMoaW4pOwogIHRva2VuID0gZ2V0TmFtZShpbik7CiAgdCA9IGZpbmRfbmFtZWRfdHlwZSh0b2tl
bik7CiAgZ2V0Q29tYShpbik7CgogIGlmKHQtPnR5cGUgIT0gTk9ORSkgaW4tPmVycm9yKGluLCJy
ZWRlZmluaXRpb24gb2YgbmFtZWQgdHlwZSIpOwogIHBhcnNlVHlwZShpbix0KTsKCiAgZ2V0UlBh
cmVudGhlc2lzKGluKTsKICBnZXRTZW1pQ29sb24oaW4pOwp9CgovKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICogRnVuY3Rpb24gOgogKiAgICBnZXRDb21hLCBnZXROYW1lLCBnZXROdW1iZXIsIGdldExQYXJl
bnRoZXNpcywgZ2V0UlBhcmVudGhlc2lzLCBnZXRFcXVhbAogKiBEZXNjcmlwdGlvbiA6CiAqICAg
IFJlYWQgYSB0b2tlbiBmcm9tIHRoZSBpbnB1dCBmaWxlLCBjaGVjayBpdHMgdHlwZSwgcmV0dXJu
IGl0IHNjb250ZW50LgogKgogKiBQYXJhbWV0ZXJzIDoKICogICAgaW4gLCBpbnB1dCBmaWxlIGhh
bmRsZS4KICoKICogUmV0dXJuIHZhbHVlcyA6CiAqICAgIGFkZHJlc3Mgb2YgdG9rZW4gY29udGVu
dC4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwoKY2hhciAqZ2V0TmFtZShwYXJzZV9maWxlICogaW4p
IHsKICBjaGFyICp0b2tlbjsKCiAgdG9rZW4gPSBnZXRUb2tlbihpbik7CiAgaWYoaW4tPnR5cGUg
IT0gTkFNRSkgaW4tPmVycm9yKGluLCJOYW1lIHRva2VuIHdhcyBleHBlY3RlZCIpOwogIHJldHVy
biB0b2tlbjsKfQoKaW50IGdldE51bWJlcihwYXJzZV9maWxlICogaW4pIHsKICBjaGFyICp0b2tl
bjsKCiAgdG9rZW4gPSBnZXRUb2tlbihpbik7CiAgaWYoaW4tPnR5cGUgIT0gTlVNQkVSKSBpbi0+
ZXJyb3IoaW4sICJOdW1iZXIgdG9rZW4gd2FzIGV4cGVjdGVkIik7CiAgcmV0dXJuIGF0b2kodG9r
ZW4pOwp9CgpjaGFyICpnZXRDb21hKHBhcnNlX2ZpbGUgKiBpbikgewogIGNoYXIgKnRva2VuOwoK
ICB0b2tlbiA9IGdldFRva2VuKGluKTsKICBpZihpbi0+dHlwZSAhPSBDT01BKSBpbi0+ZXJyb3Io
aW4sICJDb21hIHRva2VuIHdhcyBleHBlY3RlZCIpOwogIHJldHVybiB0b2tlbjsKfQoKY2hhciAq
Z2V0TFBhcmVudGhlc2lzKHBhcnNlX2ZpbGUgKiBpbikgewogIGNoYXIgKnRva2VuOwoKICB0b2tl
biA9IGdldFRva2VuKGluKTsKICBpZihpbi0+dHlwZSAhPSBMUEFSRU5USEVTSVMpIGluLT5lcnJv
cihpbiwgIkxlZnQgcGFyZW50aGVzaXMgd2FzIGV4cGVjdGVkIik7CiAgcmV0dXJuIHRva2VuOwp9
CgpjaGFyICpnZXRSUGFyZW50aGVzaXMocGFyc2VfZmlsZSAqIGluKSB7CiAgY2hhciAqdG9rZW47
CgogIHRva2VuID0gZ2V0VG9rZW4oaW4pOwogIGlmKGluLT50eXBlICE9IFJQQVJFTlRIRVNJUykg
aW4tPmVycm9yKGluLCAiUmlnaHQgcGFyZW50aGVzaXMgd2FzIGV4cGVjdGVkIik7CiAgcmV0dXJu
IHRva2VuOwp9CgpjaGFyICpnZXRRdW90ZWRTdHJpbmcocGFyc2VfZmlsZSAqIGluKSB7CiAgY2hh
ciAqdG9rZW47CgogIHRva2VuID0gZ2V0VG9rZW4oaW4pOwogIGlmKGluLT50eXBlICE9IFFVT1RF
RFNUUklORykgaW4tPmVycm9yKGluLCAicXVvdGVkIHN0cmluZyB3YXMgZXhwZWN0ZWQiKTsKICBy
ZXR1cm4gdG9rZW47Cn0KCmNoYXIgKiBnZXRTZW1pQ29sb24ocGFyc2VfZmlsZSAqaW4pewogIGNo
YXIgKnRva2VuOwoKICB0b2tlbiA9IGdldFRva2VuKGluKTsKICBpZihpbi0+dHlwZSAhPSBTRU1J
Q09MT04pIGluLT5lcnJvcihpbiwgInNlbWljb2xvbiB3YXMgZXhwZWN0ZWQiKTsKICByZXR1cm4g
dG9rZW47Cn0KCmNoYXIgKiBnZXRFcXVhbChwYXJzZV9maWxlICppbil7CiAgY2hhciAqdG9rZW47
CgogIHRva2VuID0gZ2V0VG9rZW4oaW4pOwogIGlmKGluLT50eXBlICE9IEVRVUFMKSBpbi0+ZXJy
b3IoaW4sICJlcXVhbCB3YXMgZXhwZWN0ZWQiKTsKICByZXR1cm4gdG9rZW47Cn0KCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICogRnVuY3Rpb24gOgogKiAgICBnZXRUb2tlbiwgdW5nZXRUb2tlbgogKiBEZXNjcmlwdGlv
biA6CiAqICAgIFJlYWQgYSB0b2tlbiBmcm9tIHRoZSBpbnB1dCBmaWxlIGFuZCByZXR1cm4gaXRz
IHR5cGUgYW5kIGNvbnRlbnQuCiAqICAgIExpbmUgbnVtYmVycyBhcmUgYWNjb3VudGVkIGZvciBh
bmQgd2hpdGVzcGFjZS9jb21tZW50cyBhcmUgc2tpcHBlZC4KICoKICogUGFyYW1ldGVycyA6CiAq
ICAgIGluLCBpbnB1dCBmaWxlIGhhbmRsZS4KICoKICogUmV0dXJuIHZhbHVlcyA6CiAqICAgIGFk
ZHJlc3Mgb2YgdG9rZW4gY29udGVudC4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnZvaWQgdW5nZXRUb2tlbihw
YXJzZV9maWxlICogaW4pCnsKICBpbi0+dW5nZXQgPSAxOwp9CgpjaGFyICpnZXRUb2tlbihwYXJz
ZV9maWxlICogaW4pCnsKICBGSUxFICpmcCA9IGluLT5mcDsKICBjaGFyIGNhciwgY2FyMTsKICBp
bnQgcG9zID0gMCwgZXNjYXBlZDsKCiAgaWYoaW4tPnVuZ2V0ID09IDEpIHsKICAgIGluLT51bmdl
dCA9IDA7CiAgICByZXR1cm4gaW4tPmJ1ZmZlcjsKICB9CgogIC8qIHNraXAgd2hpdGVzcGFjZSBh
bmQgY29tbWVudHMgKi8KCiAgd2hpbGUoKGNhciA9IGdldGMoZnApKSAhPSBFT0YpIHsKICAgIGlm
KGNhciA9PSAnLycpIHsKICAgICAgY2FyMSA9IGdldGMoZnApOyAKICAgICAgaWYoY2FyMSA9PSAn
KicpIHNraXBDb21tZW50KGluKTsKICAgICAgZWxzZSBpZihjYXIxID09ICcvJykgc2tpcEVPTChp
bik7CiAgICAgIGVsc2UgeyAKICAgICAgICBjYXIxID0gdW5nZXRjKGNhcjEsZnApOwogICAgICAg
IGJyZWFrOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmKGNhciA9PSAnXG4nKSBpbi0+bGluZW5v
Kys7CiAgICBlbHNlIGlmKCFpc3NwYWNlKGNhcikpIGJyZWFrOwogIH0KCiAgc3dpdGNoKGNhcikg
ewogICAgY2FzZSBFT0Y6CiAgICAgIGluLT50eXBlID0gRU5ERklMRTsKICAgICAgYnJlYWs7CiAg
ICBjYXNlICcsJzoKICAgICAgaW4tPnR5cGUgPSBDT01BOwogICAgICBpbi0+YnVmZmVyW3Bvc10g
PSBjYXI7CiAgICAgIHBvcysrOwogICAgICBicmVhazsKICAgIGNhc2UgJygnOgogICAgICBpbi0+
dHlwZSA9IExQQVJFTlRIRVNJUzsKICAgICAgaW4tPmJ1ZmZlcltwb3NdID0gY2FyOwogICAgICBw
b3MrKzsKICAgICAgYnJlYWs7CiAgICBjYXNlICcpJzoKICAgICAgaW4tPnR5cGUgPSBSUEFSRU5U
SEVTSVM7CiAgICAgIGluLT5idWZmZXJbcG9zXSA9IGNhcjsKICAgICAgcG9zKys7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSAnOyc6CiAgICAgIGluLT50eXBlID0gU0VNSUNPTE9OOwogICAgICBpbi0+
YnVmZmVyW3Bvc10gPSBjYXI7CiAgICAgIHBvcysrOwogICAgICBicmVhazsKICAgIGNhc2UgJz0n
OgogICAgICBpbi0+dHlwZSA9IEVRVUFMOwogICAgICBpbi0+YnVmZmVyW3Bvc10gPSBjYXI7CiAg
ICAgIHBvcysrOwogICAgICBicmVhazsKICAgIGNhc2UgJyInOgogICAgICBlc2NhcGVkID0gMDsK
ICAgICAgd2hpbGUoKGNhciA9IGdldGMoZnApKSAhPSBFT0YgJiYgcG9zIDwgQlVGRkVSX1NJWkUp
IHsKICAgICAgICBpZihjYXIgPT0gJ1xcJyAmJiBlc2NhcGVkID09IDApIHsKCSAgaW4tPmJ1ZmZl
cltwb3NdID0gY2FyOwoJICBwb3MrKzsKICAgICAgICAgIGVzY2FwZWQgPSAxOwogICAgICAgICAg
Y29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmKGNhciA9PSAnIicgJiYgZXNjYXBlZCA9PSAw
KSBicmVhazsKICAgICAgICBpZihjYXIgPT0gJ1xuJyAmJiBlc2NhcGVkID09IDApIHsKICAgICAg
ICAgIGluLT5lcnJvcihpbiwgIm5vbiBlc2NhcGVkIG5ld2xpbmUgaW5zaWRlIHF1b3RlZCBzdHJp
bmciKTsKICAgICAgICB9CiAgICAgICAgaWYoY2FyID09ICdcbicpIGluLT5saW5lbm8rKzsKICAg
ICAgICBpbi0+YnVmZmVyW3Bvc10gPSBjYXI7CiAgICAgICAgcG9zKys7CiAgICAgICAgZXNjYXBl
ZCA9IDA7CiAgICAgIH0KICAgICAgaWYoY2FyID09IEVPRikgaW4tPmVycm9yKGluLCJubyBlbmRp
bmcgcXVvdGVtYXJrIik7CiAgICAgIGlmKHBvcyA9PSBCVUZGRVJfU0laRSkgaW4tPmVycm9yKGlu
LCAicXVvdGVkIHN0cmluZyB0b2tlbiB0b28gbGFyZ2UiKTsKICAgICAgaW4tPnR5cGUgPSBRVU9U
RURTVFJJTkc7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgaWYoaXNkaWdpdChjYXIp
KSB7CiAgICAgICAgaW4tPmJ1ZmZlcltwb3NdID0gY2FyOwogICAgICAgIHBvcysrOwogICAgICAg
IHdoaWxlKChjYXIgPSBnZXRjKGZwKSkgIT0gRU9GICYmIHBvcyA8IEJVRkZFUl9TSVpFKSB7CiAg
ICAgICAgICBpZighaXNkaWdpdChjYXIpKSB7CiAgICAgICAgICAgIHVuZ2V0YyhjYXIsZnApOwog
ICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGluLT5idWZmZXJbcG9zXSA9
IGNhcjsKICAgICAgICAgIHBvcysrOwogICAgICAgIH0KCWlmKGNhciA9PSBFT0YpIHVuZ2V0Yyhj
YXIsZnApOwogICAgICAgIGlmKHBvcyA9PSBCVUZGRVJfU0laRSkgaW4tPmVycm9yKGluLCAibnVt
YmVyIHRva2VuIHRvbyBsYXJnZSIpOwogICAgICAgIGluLT50eXBlID0gTlVNQkVSOwogICAgICB9
ICAgIAogICAgICBlbHNlIGlmKGlzYWxwaGEoY2FyKSkgewogICAgICAgIGluLT5idWZmZXJbMF0g
PSBjYXI7CiAgICAgICAgcG9zID0gMTsKICAgICAgICB3aGlsZSgoY2FyID0gZ2V0YyhmcCkpICE9
IEVPRiAmJiBwb3MgPCBCVUZGRVJfU0laRSkgewogICAgICAgICAgaWYoIWlzYWxudW0oY2FyKSkg
ewogICAgICAgICAgICB1bmdldGMoY2FyLGZwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICB9CiAgICAgICAgICBpbi0+YnVmZmVyW3Bvc10gPSBjYXI7CiAgICAgICAgICBwb3MrKzsKICAg
ICAgICB9CglpZihjYXIgPT0gRU9GKSB1bmdldGMoY2FyLGZwKTsKICAgICAgICBpZihwb3MgPT0g
QlVGRkVSX1NJWkUpIGluLT5lcnJvcihpbiwgIm5hbWUgdG9rZW4gdG9vIGxhcmdlIik7CiAgICAg
ICAgaW4tPnR5cGUgPSBOQU1FOwogICAgICB9CiAgICAgIGVsc2UgaW4tPmVycm9yKGluLCAiaW52
YWxpZCBjaGFyYWN0ZXIsIHVucmVjb2duaXplZCB0b2tlbiIpOwogIH0KICBpbi0+YnVmZmVyW3Bv
c10gPSAwOwogIHJldHVybiBpbi0+YnVmZmVyOwp9Cgp2b2lkIHNraXBDb21tZW50KHBhcnNlX2Zp
bGUgKiBpbikKewogIGNoYXIgY2FyOwogIHdoaWxlKChjYXIgPSBnZXRjKGluLT5mcCkpICE9IEVP
RikgewogICAgaWYoY2FyID09ICdcbicpIGluLT5saW5lbm8rKzsKICAgIGVsc2UgaWYoY2FyID09
ICcqJykgewogICAgICBjYXIgPSBnZXRjKGluLT5mcCk7CiAgICAgIGlmKGNhciA9PUVPRikgYnJl
YWs7CiAgICAgIGlmKGNhciA9PSAnLycpIHJldHVybjsKICAgICAgdW5nZXRjKGNhcixpbi0+ZnAp
OwogICAgfQogIH0KICBpZihjYXIgPT0gRU9GKSBpbi0+ZXJyb3IoaW4sImNvbW1lbnQgYmVnaW5p
bmcgd2l0aCAnLyonIGhhcyBubyBlbmRpbmcgJyovJyIpOwp9Cgp2b2lkIHNraXBFT0wocGFyc2Vf
ZmlsZSAqIGluKQp7CiAgY2hhciBjYXI7CiAgd2hpbGUoKGNhciA9IGdldGMoaW4tPmZwKSkgIT0g
RU9GKSB7CiAgICBpZihjYXIgPT0gJ1xuJykgewogICAgICB1bmdldGMoY2FyLGluLT5mcCk7CiAg
ICAgIGJyZWFrOwogICAgfQogIH0KICBpZihjYXIgPT0gRU9GKXVuZ2V0YyhjYXIsIGluLT5mcCk7
Cn0KCmludCBpc2FscGhhKGNoYXIgYyl7CiAgaW50IGksajsKICBpZihjID09ICdfJylyZXR1cm4g
MTsKICBpID0gYyAtICdhJzsKICBqID0gYyAtICdBJzsKICBpZigoaT49MCAmJiBpPDI2KSB8fCAo
aj49MCAmJiBqPDI2KSkgcmV0dXJuIDE7CiAgcmV0dXJuIDA7Cn0KCmludCBpc2FsbnVtKGNoYXIg
Yyl7CiAgcmV0dXJuIChpc2FscGhhKGMpIHx8IGlzZGlnaXQoYykpOwp9CgovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICpGdW5jdGlvbiBuYW1lCiAqICAgIGNoZWNrTmFtZWRUeXBlc0ltcGxlbWVudGVk
IDogY2hlY2sgaWYgYWxsIG5hbWVkIHR5cGVzIGhhdmUgZGVmaW5pdGlvbgogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8Kdm9pZCBjaGVja05hbWVkVHlwZXNJbXBsZW1lbnRlZCgpewogIHR5cGVfZGVzY3Jp
cHRvciAqdDsKICBpbnQgcG9zOwogIGNoYXIgc3RyWzI1Nl07CgogIGZvcihwb3MgPSAwIDsgcG9z
IDwgbmFtZWRfdHlwZXMudmFsdWVzLnBvc2l0aW9uOyBwb3MrKykgewogICAgdCA9ICh0eXBlX2Rl
c2NyaXB0b3IgKikgbmFtZWRfdHlwZXMudmFsdWVzLmFycmF5W3Bvc107CiAgICBpZih0LT50eXBl
ID09IE5PTkUpewogICAgICBzcHJpbnRmKHN0ciwibmFtZWQgdHlwZSAnJXMnIGhhcyBubyBkZWZp
bml0aW9uIiwoY2hhciopbmFtZWRfdHlwZXMua2V5cy5hcnJheVtwb3NdKTsKICAgICAgZXJyb3Jf
Y2FsbGJhY2soTlVMTCxzdHIpOyAgIAogICAgfQogIH0KfQoKLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CiAqRnVuY3Rpb24gbmFtZQogKiAgICBnZW5lcmF0ZUZpbGUgOiBnZW5lcmF0ZSAuYyBhbmQgLmgg
ZmlsZSAKICpJbnB1dCBQYXJhbXMKICogICAgbmFtZSAgICAgICAgIDogbmFtZSBvZiBldmVudCBk
ZWZpbml0aW9uIGZpbGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZ2VuZXJhdGVGaWxlKGNo
YXIgKm5hbWUpewogIGNoYXIgKmNOYW1lLCAqaE5hbWUsICp0bXAsICAqZmFjaWxpdHlOYW1lOwog
IEZJTEUgKiBjRnAsICpoRnA7CiAgaW50IG5iRXZlbnQ7CiAgdW5zaWduZWQgbG9uZyBjaGVja3N1
bT0wOwoKICAvL3JlbW92ZSAuZXZlbnQgaWYgaXQgZXhpc3RzCiAgdG1wID0gJm5hbWVbc3RybGVu
KG5hbWUpLTZdOwogIGlmKHN0cmNtcCh0bXAsICIuZXZlbnQiKSA9PSAwKXsKICAgICp0bXAgPSAn
XDAnOwogIH0KCiAgY05hbWUgPSBhcHBlbmRTdHJpbmcobmFtZSwiLmMiKTsKICBoTmFtZSA9IGFw
cGVuZFN0cmluZyhuYW1lLCIuaCIpOwogIGNGcCA9IGZvcGVuKGNOYW1lLCJ3Iik7CiAgaWYoIWNG
cCl7CiAgICBwcmludGYoIkNhbm5vdCBvcGVuIHRoZSBmaWxlIDogJXNcbiIsY05hbWUpOwogICAg
ZXhpdCgxKTsKICB9CgogIGhGcCA9IGZvcGVuKGhOYW1lLCJ3Iik7CiAgaWYoIWhGcCl7CiAgICAg
cHJpbnRmKCJDYW5ub3Qgb3BlbiB0aGUgZmlsZSA6ICVzXG4iLGhOYW1lKTsKICAgICBleGl0KDEp
OwogIH0KICAKICBmcmVlKGNOYW1lKTsKICBmcmVlKGhOYW1lKTsKCgogIC8qIGdldCB0aGUgZmFj
aWxpdHkgbmFtZSAoc3RyaXAgYW55IGxlYWRpbmcgZGlyZWN0b3J5KSAqLwogIGZhY2lsaXR5TmFt
ZSA9IHN0cnN0cihuYW1lLCIvIik7CiAgaWYoZmFjaWxpdHlOYW1lKSBmYWNpbGl0eU5hbWUrKzsg
ICAgCiAgZWxzZSBmYWNpbGl0eU5hbWUgPSBuYW1lOwoKCiAgZ2VuZXJhdGVDaGVja3N1bShmYWNp
bGl0eU5hbWUsICZjaGVja3N1bSk7CgogIC8qIGdlbmVyYXRlIC5oIGZpbGUsIGV2ZW50IGVudW1l
cmF0aW9uIHRoZW4gc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zICovCiAgZ2VuZXJhdGVFbnVtRXZl
bnQoaEZwLCBmYWNpbGl0eU5hbWUsICZuYkV2ZW50KTsKICBnZW5lcmF0ZVN0cnVjdEZ1bmMoaEZw
LCBmYWNpbGl0eU5hbWUpOwoKICAvKiBnZW5lcmF0ZSAuYyBmaWxlLCBjYWxscyB0byByZWdpc3Rl
ciB0aGUgZmFjaWxpdHkgYXQgaW5pdCB0aW1lICovCiAgZ2VuZXJhdGVDZmlsZShjRnAsZmFjaWxp
dHlOYW1lLG5iRXZlbnQsY2hlY2tzdW0pOwoKICBmY2xvc2UoaEZwKTsKICBmY2xvc2UoY0ZwKTsK
fQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgogKkZ1bmN0aW9uIG5hbWUKICogICAgZ2VuZXJhdGVF
bnVtRXZlbnQgOiBvdXRwdXQgZXZlbnQgZW51bSB0byAuaCBmaWxlIAogKklucHV0IFBhcmFtcwog
KiAgICBmcCAgICAgICAgICAgICAgICA6IGZpbGUgdG8gYmUgd3JpdHRlbiB0bwogKiAgICBmYWNO
YW1lICAgICAgICAgICA6IG5hbWUgb2YgZmFjaWxpdHkKICpPdXRwdXQgUGFyYW1zCiAqICAgIG5i
RXZlbnQgICAgICAgICAgIDogbnVtYmVyIG9mIGV2ZW50cyBpbiB0aGUgZmFjaWxpdHkKICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCnZvaWQgZ2VuZXJhdGVFbnVtRXZlbnQoRklMRSAqZnAsIGNoYXIgKmZh
Y05hbWUsIGludCAqIG5iRXZlbnQpIHsKICBpbnQgcG9zID0gMDsKCiAgLy93aWxsIGJlIHJlbW92
ZWQgbGF0ZXIKICBmcHJpbnRmKGZwLCJ0eXBlZGVmIHVuc2lnbmVkIGludCB0cmFjZV9mYWNpbGl0
eV90O1xuXG4iKTsKICBmcHJpbnRmKGZwLCJleHRlcm4gaW50IHRyYWNlX25ldyh0cmFjZV9mYWNp
bGl0eV90IGZJRCwgdTggZUlELCBpbnQgbGVuZ3RoLCBjaGFyICogYnVmKTtcblxuIik7CgoKICBm
cHJpbnRmKGZwLCIvKioqKiAgZmFjaWxpdHkgaGFuZGxlICAqKioqL1xuXG4iKTsKICBmcHJpbnRm
KGZwLCJleHRlcm4gdHJhY2VfZmFjaWxpdHlfdCBmYWNpbGl0eV8lcztcblxuXG4iLGZhY05hbWUp
OwoKICBmcHJpbnRmKGZwLCIvKioqKiAgZXZlbnQgdHlwZSAgKioqKi9cblxuIik7CiAgZnByaW50
ZihmcCwiZW51bSAlc19ldmVudCB7XG4iLGZhY05hbWUpOwoKICBmb3IocG9zID0gMDsgcG9zIDwg
ZXZlbnRzLnBvc2l0aW9uO3BvcysrKSB7CiAgICBmcHJpbnRmKGZwLCIgICVzIiwgKChldmVudCAq
KShldmVudHMuYXJyYXlbcG9zXSkpLT5uYW1lKTsKICAgIGlmKHBvcyAhPSBldmVudHMucG9zaXRp
b24tMSkgZnByaW50ZihmcCwiLFxuIik7CiAgfQogIGZwcmludGYoZnAsIlxufTtcblxuXG4iKTsK
CiAgLy8gIGZwcmludGYoZnAsIi8qKioqICBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBmYWNpbGl0
eSAgKioqKi9cblxuIik7CiAgLy8gIGZwcmludGYoZnAsImludCBuYkV2ZW50c18lcyA9ICVkO1xu
XG5cbiIsZmFjTmFtZSwgZXZlbnRzLnBvc2l0aW9uKTsKICAqbmJFdmVudCA9IGV2ZW50cy5wb3Np
dGlvbjsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKkZ1bmN0aW9uIG5hbWUKICogICAgZ2Vu
ZXJhdGVDaGVja3N1bSAgOiBnZW5lcmF0ZSBjaGVja3N1bSBmb3IgdGhlIGZhY2lsaXR5CiAqSW5w
dXQgUGFyYW1zCiAqICAgIGZhY05hbWUgICAgICAgICAgIDogbmFtZSBvZiBmYWNpbGl0eQogKk91
dHB1dCBQYXJhbXMKICogICAgY2hlY2tzdW0gICAgICAgICAgOiBjaGVja3N1bSBmb3IgdGhlIGZh
Y2lsaXR5CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGdlbmVyYXRlQ2hlY2tzdW0oIGNoYXIq
IGZhY05hbWUsIHVuc2lnbmVkIGxvbmcgKiBjaGVja3N1bSl7CiAgdW5zaWduZWQgbG9uZyBjcmMg
OwogIGludCBwb3MsIG5lc3RlZFN0cnVjdDsKICBldmVudCAqIGV2OwogIGNoYXIgc3RyWzI1Nl07
CgogIGNyYyA9IGNyYzMyKGZhY05hbWUpOwogIGZvcihwb3MgPSAwOyBwb3MgPCBldmVudHMucG9z
aXRpb247IHBvcysrKXsKICAgIGV2ID0gKGV2ZW50ICopKGV2ZW50cy5hcnJheVtwb3NdKTsKICAg
IGV2LT5uZXN0ZWQgPSAwOyAvL2J5IGRlZmF1bHQsIGV2ZW50IGhhcyBubyBuZXN0ZWQgc3RydWN0
CiAgICBjcmMgPSBwYXJ0aWFsX2NyYzMyKGV2LT5uYW1lLGNyYyk7ICAgIAogICAgbmVzdGVkU3Ry
dWN0ID0gMDsKICAgIGlmKGV2LT50eXBlLT50eXBlICE9IFNUUlVDVCl7CiAgICAgIHNwcmludGYo
c3RyLCJldmVudCAnJXMnIGhhcyBhIHR5cGUgb3RoZXIgdGhhbiBTVFJVQ1QiLGV2LT5uYW1lKTsK
ICAgICAgZXJyb3JfY2FsbGJhY2soTlVMTCwgc3RyKTsKICAgIH0KICAgIGNyYyA9IGdldFR5cGVD
aGVja3N1bShjcmMsIGV2LT50eXBlLCZuZXN0ZWRTdHJ1Y3QpOwogICAgaWYobmVzdGVkU3RydWN0
ICkgZXYtPm5lc3RlZCA9IDE7CiAgfQogICpjaGVja3N1bSA9IGNyYzsKfQoKLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgIGdldFR5cGVDaGVja3N1bSAgICA6IGdlbmVy
YXRlIGNoZWNrc3VtIGJ5IHR5cGUgaW5mbwogKklucHV0IFBhcmFtcwogKiAgICBjcmMgICAgICAg
ICAgICAgICA6IGNoZWNrc3VtIGdlbmVyYXRlZCBzbyBmYXIKICogICAgdHlwZSAgICAgICAgICAg
ICAgOiB0eXBlIGRlc2NyaXB0b3IgY29udGFpbmluZyB0eXBlIGluZm8KICpSZXR1cm4gdmFsdWUg
ICAgICAgICAgCiAqICAgIHVuc2lnbmVkIGxvbmcgICAgIDogY2hlY2tzdW0gCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KdW5zaWduZWQgbG9uZyBnZXRUeXBlQ2hlY2tzdW0odW5zaWduZWQgbG9uZyBh
Q3JjLCB0eXBlX2Rlc2NyaXB0b3IgKiB0eXBlLCBpbnQgKiBuZXN0ZWRTdHJ1Y3QpewogIHVuc2ln
bmVkIGxvbmcgY3JjID0gYUNyYzsKICBjaGFyICogc3RyID0gTlVMTCwgYnVmWzE2XTsKICBpbnQg
ZmxhZyA9IDAsIHBvcywgbWF4LCBtaW47CiAgZmllbGQgKiBmbGQ7CiAgZGF0YV90eXBlIGR0OwoK
ICBzd2l0Y2godHlwZS0+dHlwZSl7CiAgICBjYXNlIElOVDoKICAgICAgc3RyID0gaW50T3V0cHV0
VHlwZXNbdHlwZS0+c2l6ZV07CiAgICAgIGJyZWFrOwogICAgY2FzZSBVSU5UOgogICAgICBzdHIg
PSB1aW50T3V0cHV0VHlwZXNbdHlwZS0+c2l6ZV07CiAgICAgIGJyZWFrOwogICAgY2FzZSBGTE9B
VDoKICAgICAgc3RyID0gZmxvYXRPdXRwdXRUeXBlc1t0eXBlLT5zaXplXTsKICAgICAgYnJlYWs7
CiAgICBjYXNlIFNUUklORzoKICAgICAgc3RyID0gYWxsb2NBbmRDb3B5KCJzdHJpbmciKTsKICAg
ICAgZmxhZyA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSBFTlVNOgogICAgICBzdHIgPSBhcHBl
bmRTdHJpbmcoImVudW0gIiwgdWludE91dHB1dFR5cGVzW3R5cGUtPnNpemVdKTsKICAgICAgZmxh
ZyA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSBBUlJBWToKICAgICAgc3ByaW50ZihidWYsIiVk
XDAiLHR5cGUtPnNpemUpOwogICAgICBzdHIgPSBhcHBlbmRTdHJpbmcoImFycmF5ICIsYnVmKTsK
ICAgICAgZmxhZyA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSBTRVFVRU5DRToKICAgICAgc3By
aW50ZihidWYsIiVkXDAiLHR5cGUtPnNpemUpOwogICAgICBzdHIgPSBhcHBlbmRTdHJpbmcoInNl
cXVlbmNlICIsYnVmKTsKICAgICAgZmxhZyA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSBTVFJV
Q1Q6CiAgICAgIHN0ciA9IGFsbG9jQW5kQ29weSgic3RydWN0Iik7CiAgICAgIGZsYWcgPSAxOwog
ICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGVycm9yX2NhbGxiYWNrKE5VTEwsICJuYW1l
ZCB0eXBlIGhhcyBubyBkZWZpbml0aW9uIik7CiAgICAgIGJyZWFrOwogIH0KCiAgY3JjID0gcGFy
dGlhbF9jcmMzMihzdHIsY3JjKTsKICBpZihmbGFnKSBmcmVlKHN0cik7CgogIGlmKHR5cGUtPmZt
dCkgY3JjID0gcGFydGlhbF9jcmMzMih0eXBlLT5mbXQsY3JjKTsKICAgIAogIGlmKHR5cGUtPnR5
cGUgPT0gQVJSQVkgfHwgdHlwZS0+dHlwZSA9PSBTRVFVRU5DRSl7CiAgICBkdCA9IHR5cGUtPm5l
c3RlZF90eXBlLT50eXBlOwogICAgaWYoZHQgPT0gQVJSQVkgfHwgZHQgPT0gU0VRVUVOQ0UgfHwg
ZHQgPT0gU1RSVUNUKSAqbmVzdGVkU3RydWN0ICs9IDE7CiAgICBjcmMgPSBnZXRUeXBlQ2hlY2tz
dW0oY3JjLHR5cGUtPm5lc3RlZF90eXBlLG5lc3RlZFN0cnVjdCk7CiAgfWVsc2UgaWYodHlwZS0+
dHlwZSA9PSBTVFJVQ1QpewogICAgaWYodHlwZS0+ZmllbGRzLnBvc2l0aW9uICE9IDApey8vbm90
IGEgZW1wdHkgc3RydWN0CiAgICAgIG1heCA9IDA7ICAgICAgCiAgICAgIGZvcihwb3MgPTA7IHBv
cyA8IHR5cGUtPmZpZWxkcy5wb3NpdGlvbjsgcG9zKyspewoJbWluID0gMDsKCWZsZCA9IChmaWVs
ZCAqKSB0eXBlLT5maWVsZHMuYXJyYXlbcG9zXTsKCWNyYyA9IHBhcnRpYWxfY3JjMzIoZmxkLT5u
YW1lLGNyYyk7CglpZihmbGQtPnR5cGUtPnR5cGUgPT0gU1RSVUNUKSBtaW4rKzsKCWNyYyA9IGdl
dFR5cGVDaGVja3N1bShjcmMsIGZsZC0+dHlwZSwmbWluKTsKCWlmKG1pbj5tYXgpIG1heCA9IG1p
bjsKICAgICAgfQogICAgICAqbmVzdGVkU3RydWN0ICs9IG1heDsKICAgIH0KICB9ZWxzZSBpZih0
eXBlLT50eXBlID09IEVOVU0pewogICAgZm9yKHBvcyA9IDA7IHBvcyA8IHR5cGUtPmxhYmVscy5w
b3NpdGlvbjsgcG9zKyspCiAgICAgIGNyYyA9IHBhcnRpYWxfY3JjMzIoKGNoYXIqKXR5cGUtPmxh
YmVscy5hcnJheVtwb3NdLGNyYyk7ICAgIAogIH0KCiAgcmV0dXJuIGNyYzsKfQoKLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBnZW5lcmF0ZUVudW1EZWZpbml0aW9u
OiBnZW5lcmF0ZSBlbnVtIGRlZmluaXRpb24gaWYgaXQgZXhpc3RzIAogKklucHV0IFBhcmFtcwog
KiAgICBmcCAgICAgICAgICAgICAgICAgICAgOiBmaWxlIHRvIGJlIHdyaXR0ZW4gdG8KICogICAg
ZkhlYWQgICAgICAgICAgICAgICAgIDogZW51bSB0eXBlCiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2
b2lkIGdlbmVyYXRlRW51bURlZmluaXRpb24oRklMRSAqIGZwLCB0eXBlX2Rlc2NyaXB0b3IgKiB0
eXBlKXsKICBpbnQgcG9zOwoKICBmcHJpbnRmKGZwLCJlbnVtIHtcbiIpOwogIGZvcihwb3MgPSAw
OyBwb3MgPCB0eXBlLT5sYWJlbHMucG9zaXRpb247IHBvcysrKXsKICAgIGZwcmludGYoZnAsIiAg
JXMiLCB0eXBlLT5sYWJlbHMuYXJyYXlbcG9zXSk7CiAgICBpZiAocG9zICE9IHR5cGUtPmxhYmVs
cy5wb3NpdGlvbiAtIDEpIGZwcmludGYoZnAsIixcbiIpOwogIH0KICBmcHJpbnRmKGZwLCJcbn07
XG5cblxuIik7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKkZ1bmN0aW9uIG5hbWUKICogICAg
Z2VuZXJhdGVTdHJ1Y1RGdW5jOiBvdXRwdXQgc3RydWN0dXJlIGFuZCBmdW5jdGlvbiB0byAuaCBm
aWxlIAogKklucHV0IFBhcmFtcwogKiAgICBmcCAgICAgICAgICAgICAgICA6IGZpbGUgdG8gYmUg
d3JpdHRlbiB0bwogKiAgICBmYWNOYW1lICAgICAgICAgICA6IG5hbWUgb2YgZmFjaWxpdHkKICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCnZvaWQgZ2VuZXJhdGVTdHJ1Y3RGdW5jKEZJTEUgKiBmcCwgY2hh
ciAqIGZhY05hbWUpewogIGV2ZW50ICogZXY7CiAgZmllbGQgKiBmbGQ7CiAgdHlwZV9kZXNjcmlw
dG9yICogdGQ7CiAgaW50IHBvcywgcG9zMTsKICBpbnQgaGFzU3RyU2VxLCBmbGFnLCBzdHJ1Y3RD
b3VudCwgc2VxQ291bnQsc3RyQ291bnQsIHdoaWNoVHlwZUZpcnN0PTA7CgogIGZvcihwb3MgPSAw
OyBwb3MgPCBldmVudHMucG9zaXRpb247IHBvcysrKXsKICAgIGV2ID0gKGV2ZW50ICopIGV2ZW50
cy5hcnJheVtwb3NdOwogICAgaWYoZXYtPm5lc3RlZCljb250aW51ZTsKICAgIGZwcmludGYoZnAs
Ii8qKioqICBzdHJ1Y3R1cmUgYW5kIHRyYWNlIGZ1bmN0aW9uIGZvciBldmVudDogJXMgICoqKiov
XG5cbiIsZXYtPm5hbWUpOwogICAgaWYoZXYtPnR5cGUtPmZpZWxkcy5wb3NpdGlvbiA9PSAwKXsg
Ly8gZXZlbnQgd2l0aG91dCB0eXBlCiAgICAgIGZwcmludGYoZnAsInN0YXRpYyBpbmxpbmUgdm9p
ZCB0cmFjZV8lc18lcyh2b2lkKXtcbiIsZmFjTmFtZSxldi0+bmFtZSk7CiAgICAgIGZwcmludGYo
ZnAsIiAgdHJhY2VfbmV3KGZhY2lsaXR5XyVzLCAlcywgMCwgTlVMTCk7XG4iLGZhY05hbWUsZXYt
Pm5hbWUpOwogICAgICBmcHJpbnRmKGZwLCJ9O1xuXG5cbiIpOwogICAgICBjb250aW51ZTsKICAg
IH0KCiAgICAvL2lmIGZpZWxkcyBjb250YWluIGVudW0sIHByaW50IG91dCBlbnVtIGRlZmluaXRp
b24KICAgIGZvcihwb3MxID0gMDsgcG9zMSA8IGV2LT50eXBlLT5maWVsZHMucG9zaXRpb247IHBv
czErKyl7CiAgICAgIGZsZCA9IChmaWVsZCAqKWV2LT50eXBlLT5maWVsZHMuYXJyYXlbcG9zMV07
CiAgICAgIGlmKGZsZC0+dHlwZS0+dHlwZSA9PSBFTlVNKSBnZW5lcmF0ZUVudW1EZWZpbml0aW9u
KGZwLCBmbGQtPnR5cGUpOyAgICAgIAogICAgfQogICAgICAKICAgIC8vZGVmYXVsdDogbm8gc3Ry
aW5nLCBhcnJheSBvciBzZXF1ZW5jZSBpbiB0aGUgZXZlbnQKICAgIGhhc1N0clNlcSA9IDA7CiAg
ICB3aGljaFR5cGVGaXJzdCA9IDA7CiAgICAKICAgIC8vc3RydWN0dXJlIGZvciBrZXJuZWwKICAg
IGZsYWcgPSAwOwogICAgc3RydWN0Q291bnQgPSAwOwogICAgZm9yKHBvczEgPSAwOyBwb3MxIDwg
ZXYtPnR5cGUtPmZpZWxkcy5wb3NpdGlvbjsgcG9zMSsrKXsKICAgICAgZmxkICA9IChmaWVsZCAq
KWV2LT50eXBlLT5maWVsZHMuYXJyYXlbcG9zMV07CiAgICAgIHRkID0gZmxkLT50eXBlOwogICAg
ICBpZiggdGQtPnR5cGUgIT0gU1RSSU5HICYmIHRkLT50eXBlICE9IFNFUVVFTkNFICYmIHRkLT50
eXBlICE9IEFSUkFZKXsKCWlmKHdoaWNoVHlwZUZpcnN0ID09IDApIHdoaWNoVHlwZUZpcnN0ID0g
MTsgLy9zdHJ1Y3QgZmlyc3QKCWlmKGZsYWcgPT0gMCl7CgkgIGZsYWcgPSAxOwkgICAgCgkgIGZw
cmludGYoZnAsIl9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHN0cnVjdCAlc18lc18lZHtcbiIsZXYt
Pm5hbWUsZmFjTmFtZSwrK3N0cnVjdENvdW50KTsKCX0KCWZwcmludGYoZnAsICIgICVzICVzOyAv
KiAlcyAqL1xuIixnZXRUeXBlU3RyKHRkKSxmbGQtPm5hbWUsZmxkLT5kZXNjcmlwdGlvbiApOwog
ICAgICB9ZWxzZXsKCWlmKHdoaWNoVHlwZUZpcnN0ID09IDApIHdoaWNoVHlwZUZpcnN0ID0gMjsg
Ly9zdHJpbmcgb3Igc2VxdWVuY2Ugb3IgYXJyYXkgZmlyc3QKCWhhc1N0clNlcSsrOwoJaWYoZmxh
ZykKCSAgZnByaW50ZihmcCwifTtcblxuIik7CglmbGFnID0gMDsKICAgICAgfSAgICAgICAKICAg
IH0KICAgIGlmKGZsYWcpCiAgICAgIGZwcmludGYoZnAsIn07XG5cbiIpOwoKICAgIC8vdHJhY2Ug
ZnVuY3Rpb24gOiBmdW5jdGlvbiBuYW1lIGFuZCBwYXJhbWV0ZXJzCiAgICBzZXFDb3VudCA9IDA7
CiAgICBzdHJDb3VudCA9IDA7CiAgICBmcHJpbnRmKGZwLCJzdGF0aWMgaW5saW5lIHZvaWQgdHJh
Y2VfJXNfJXMoIixmYWNOYW1lLGV2LT5uYW1lKTsKICAgIGZvcihwb3MxID0gMDsgcG9zMSA8IGV2
LT50eXBlLT5maWVsZHMucG9zaXRpb247IHBvczErKyl7CiAgICAgIGZsZCAgPSAoZmllbGQgKill
di0+dHlwZS0+ZmllbGRzLmFycmF5W3BvczFdOwogICAgICB0ZCA9IGZsZC0+dHlwZTsKICAgICAg
aWYodGQtPnR5cGUgPT0gQVJSQVkgKXsKCWZwcmludGYoZnAsIiVzICogJXMiLGdldFR5cGVTdHIo
dGQpLCBmbGQtPm5hbWUpOwogICAgICB9ZWxzZSBpZih0ZC0+dHlwZSA9PSBTVFJJTkcpewogCWZw
cmludGYoZnAsInNob3J0IGludCBzdHJMZW5ndGhfJWQsICVzICogJXMiLCsrc3RyQ291bnQsIGdl
dFR5cGVTdHIodGQpLCBmbGQtPm5hbWUpOwogICAgIH1lbHNlIGlmKHRkLT50eXBlID09IFNFUVVF
TkNFKXsKCSAgZnByaW50ZihmcCwiJXMgc2VxTGVuZ3RoXyVkLCAlcyAqICVzIix1aW50T3V0cHV0
VHlwZXNbdGQtPnNpemVdLCArK3NlcUNvdW50LGdldFR5cGVTdHIodGQpLCBmbGQtPm5hbWUpOwog
ICAgICB9ZWxzZSAgZnByaW50ZihmcCwiJXMgJXMiLGdldFR5cGVTdHIodGQpLCBmbGQtPm5hbWUp
OyAgICAgCiAgICAgIGlmKHBvczEgIT0gZXYtPnR5cGUtPmZpZWxkcy5wb3NpdGlvbiAtMSlmcHJp
bnRmKGZwLCIsICIpOwogICAgfQogICAgZnByaW50ZihmcCwiKXtcbiIpOwoKICAgIC8vbGVuZ3Ro
IG9mIGJ1ZmZlciA6IGxlbmd0aCBvZiBhbGwgc3RydWN0dXJlcwogICAgZnByaW50ZihmcCwiICBp
bnQgYnVmTGVuZ3RoID0gIik7CiAgICBmb3IocG9zMT0wO3BvczE8c3RydWN0Q291bnQ7cG9zMSsr
KXsKICAgICAgZnByaW50ZihmcCwic2l6ZW9mKHN0cnVjdCAlc18lc18lZCkiLGV2LT5uYW1lLCBm
YWNOYW1lLHBvczErMSk7CiAgICAgIGlmKHBvczEgIT0gc3RydWN0Q291bnQtMSkgZnByaW50Zihm
cCwiICsgIik7CiAgICB9CgogICAgLy9sZW5ndGggb2YgYnVmZmVyIDogbGVuZ3RoIG9mIGFsbCBh
cnJheXMsIHNlcXVlbmNlcyBhbmQgc3RyaW5ncwogICAgc2VxQ291bnQgPSAwOwogICAgc3RyQ291
bnQgPSAwOwogICAgZmxhZyA9IDA7CiAgICBmb3IocG9zMSA9IDA7IHBvczEgPCBldi0+dHlwZS0+
ZmllbGRzLnBvc2l0aW9uOyBwb3MxKyspewogICAgICBmbGQgID0gKGZpZWxkICopZXYtPnR5cGUt
PmZpZWxkcy5hcnJheVtwb3MxXTsKICAgICAgdGQgPSBmbGQtPnR5cGU7CiAgICAgIGlmKHRkLT50
eXBlID09IFNFUVVFTkNFIHx8IHRkLT50eXBlPT1TVFJJTkcgfHx0ZC0+dHlwZT09QVJSQVkpewoJ
aWYoc3RydWN0Q291bnQgfHwgZmxhZyA+IDApIGZwcmludGYoZnAsIiArICIpOwkgIAoJaWYodGQt
PnR5cGUgPT0gU0VRVUVOQ0UpIGZwcmludGYoZnAsInNpemVvZiglcykgKyBzaXplb2YoJXMpICog
c2VxTGVuZ3RoXyVkIix1aW50T3V0cHV0VHlwZXNbdGQtPnNpemVdLCBnZXRUeXBlU3RyKHRkKSwg
KytzZXFDb3VudCk7CgllbHNlIGlmKHRkLT50eXBlPT1TVFJJTkcpIGZwcmludGYoZnAsInN0ckxl
bmd0aF8lZCArIDEiLCArK3N0ckNvdW50KTsKCWVsc2UgaWYodGQtPnR5cGU9PUFSUkFZKSBmcHJp
bnRmKGZwLCJzaXplb2YoJXMpICogJWQiLCBnZXRUeXBlU3RyKHRkKSx0ZC0+c2l6ZSk7CglpZihz
dHJ1Y3RDb3VudCA9PSAwKSBmbGFnID0gMTsKICAgICAgfQogICAgfQogICAgZnByaW50ZihmcCwi
O1xuIik7CgogICAgLy9hbGxvY2F0ZSBidWZmZXIKICAgIGZwcmludGYoZnAsIiAgY2hhciBidWZm
W2J1Zkxlbmd0aF07XG4iKTsKCiAgICAvL2RlY2xhcmUgYSBjaGFyIHBvaW50ZXIgaWYgbmVlZGVk
CiAgICBpZihzdHJ1Y3RDb3VudCArIGhhc1N0clNlcSA+IDEpIGZwcmludGYoZnAsIiAgY2hhciAq
IHB0ciA9IGJ1ZmY7XG4iKTsKICAgIAogICAgLy9hbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBzdHJ1
Y3QgYW5kIGluaXRpYWxpemUgaXQKICAgIGlmKHdoaWNoVHlwZUZpcnN0ID09IDEpeyAvL3N0cnVj
dCBmaXJzdAogICAgICBmb3IocG9zMT0wO3BvczE8c3RydWN0Q291bnQ7cG9zMSsrKXsJCglpZihw
b3MxPT0wKSBmcHJpbnRmKGZwLCIgIHN0cnVjdCAlc18lc18xICogX18xID0gKHN0cnVjdCAlc18l
c18xICopYnVmZjtcbiIsZXYtPm5hbWUsIGZhY05hbWUsZXYtPm5hbWUsIGZhY05hbWUpOwoJZWxz
ZSBmcHJpbnRmKGZwLCIgIHN0cnVjdCAlc18lc18lZCAgX18lZDtcbiIsZXYtPm5hbWUsIGZhY05h
bWUscG9zMSsxLHBvczErMSk7CQogICAgICB9ICAgICAgCiAgICB9ZWxzZSBpZih3aGljaFR5cGVG
aXJzdCA9PSAyKXsKICAgICAgZm9yKHBvczE9MDtwb3MxPHN0cnVjdENvdW50O3BvczErKykKCWZw
cmludGYoZnAsIiAgc3RydWN0ICVzXyVzXyVkICBfXyVkO1xuIixldi0+bmFtZSwgZmFjTmFtZSxw
b3MxKzEscG9zMSsxKTsKICAgIH0KICAgIGZwcmludGYoZnAsIlxuIik7CgogICAgaWYoc3RydWN0
Q291bnQpIGZwcmludGYoZnAsIiAgLy9pbml0aWFsaXplIHN0cnVjdHNcbiIpOwogICAgZmxhZyA9
IDA7CiAgICBzdHJ1Y3RDb3VudCA9IDA7CiAgICBmb3IocG9zMSA9IDA7IHBvczEgPCBldi0+dHlw
ZS0+ZmllbGRzLnBvc2l0aW9uOyBwb3MxKyspewogICAgICBmbGQgID0gKGZpZWxkICopZXYtPnR5
cGUtPmZpZWxkcy5hcnJheVtwb3MxXTsKICAgICAgdGQgPSBmbGQtPnR5cGU7CiAgICAgIGlmKHRk
LT50eXBlICE9IEFSUkFZICYmIHRkLT50eXBlICE9IFNFUVVFTkNFICYmIHRkLT50eXBlICE9IFNU
UklORyl7CglpZihmbGFnID09IDApewoJICBmbGFnID0gMTsJCgkgIHN0cnVjdENvdW50Kys7Cgkg
IGlmKHN0cnVjdENvdW50ID4gMSkgZnByaW50ZihmcCwiXG4iKTsKCX0KCWlmKHN0cnVjdENvdW50
ID09IDEgJiYgd2hpY2hUeXBlRmlyc3QgPT0gMSkgZnByaW50ZihmcCwgIiAgX18xLT4lcyA9ICAl
cztcbiIsZmxkLT5uYW1lLGZsZC0+bmFtZSApOwoJZWxzZSBmcHJpbnRmKGZwLCAiICBfXyVkLiVz
ID0gICVzO1xuIixzdHJ1Y3RDb3VudCAsZmxkLT5uYW1lLGZsZC0+bmFtZSk7CQogICAgICB9ZWxz
ZSBmbGFnID0gMDsKICAgIH0KICAgIGlmKHN0cnVjdENvdW50KSBmcHJpbnRmKGZwLCJcbiIpOwoK
ICAgIC8vc2V0IHB0ciB0byB0aGUgZW5kIG9mIGZpcnN0IHN0cnVjdCBpZiBuZWVkZWQ7CiAgICBp
Zih3aGljaFR5cGVGaXJzdCA9PSAxICYmIHN0cnVjdENvdW50ICsgaGFzU3RyU2VxID4gMSl7CiAg
ICAgIGZwcmludGYoZnAsIlxuICAvL3NldCBwdHIgdG8gdGhlIGVuZCBvZiB0aGUgZmlyc3Qgc3Ry
dWN0XG4iKTsKICAgICAgZnByaW50ZihmcCwiICBwdHIgKz0gIHNpemVvZihzdHJ1Y3QgJXNfJXNf
MSk7XG5cbiIsZXYtPm5hbWUsIGZhY05hbWUpOyAKICAgIH0KCiAgICAvL2NvcHkgc3RydWN0LCBz
ZXF1ZW5jZSBhbmQgc3RyaW5nIHRvIGJ1ZmZlcgogICAgc2VxQ291bnQgPSAwOwogICAgc3RyQ291
bnQgPSAwOwogICAgZmxhZyA9IDA7CiAgICBzdHJ1Y3RDb3VudCA9IDA7CiAgICBmb3IocG9zMSA9
IDA7IHBvczEgPCBldi0+dHlwZS0+ZmllbGRzLnBvc2l0aW9uOyBwb3MxKyspewogICAgICBmbGQg
ID0gKGZpZWxkICopZXYtPnR5cGUtPmZpZWxkcy5hcnJheVtwb3MxXTsKICAgICAgdGQgPSBmbGQt
PnR5cGU7CiAgICAgIGlmKHRkLT50eXBlICE9IFNUUklORyAmJiB0ZC0+dHlwZSAhPSBTRVFVRU5D
RSAmJiB0ZC0+dHlwZSAhPSBBUlJBWSl7CglpZihmbGFnID09IDApIHN0cnVjdENvdW50Kys7CQoJ
ZmxhZysrOwkKCWlmKChzdHJ1Y3RDb3VudCA+IDEgfHwgd2hpY2hUeXBlRmlyc3QgPT0gMikgJiYg
ZmxhZyA9PSAxKXsKCSAgZnByaW50ZihmcCwiICAvL2NvcHkgc3RydWN0IHRvIGJ1ZmZlclxuIik7
CgkgIGZwcmludGYoZnAsIiAgbWVtY3B5KHB0ciwgJl9fJWQsIHNpemVvZihzdHJ1Y3QgJXNfJXNf
JWQpKTtcbiIsc3RydWN0Q291bnQsIGV2LT5uYW1lLCBmYWNOYW1lLHN0cnVjdENvdW50KTsKCSAg
ZnByaW50ZihmcCwiICBwdHIgKz0gIHNpemVvZihzdHJ1Y3QgJXNfJXNfJWQpO1xuXG4iLGV2LT5u
YW1lLCBmYWNOYW1lLHN0cnVjdENvdW50KTsgCgl9CiAgICAgIH1lbHNlIGlmKHRkLT50eXBlID09
IFNFUVVFTkNFKXsKCWZsYWcgPSAwOwoJZnByaW50ZihmcCwiICAvL2NvcHkgc2VxdWVuY2UgbGVu
Z3RoIGFuZCBzZXF1ZW5jZSB0byBidWZmZXJcbiIpOwoJZnByaW50ZihmcCwiICAqcHRyID0gc2Vx
TGVuZ3RoXyVkO1xuIiwrK3NlcUNvdW50KTsKCWZwcmludGYoZnAsIiAgcHRyICs9IHNpemVvZigl
cyk7XG4iLHVpbnRPdXRwdXRUeXBlc1t0ZC0+c2l6ZV0pOwoJZnByaW50ZihmcCwiICBtZW1jcHko
cHRyLCAlcywgc2l6ZW9mKCVzKSAqIHNlcUxlbmd0aF8lZCk7XG4iLGZsZC0+bmFtZSwgZ2V0VHlw
ZVN0cih0ZCksIHNlcUNvdW50KTsKCWZwcmludGYoZnAsIiAgcHRyICs9IHNpemVvZiglcykgKiBz
ZXFMZW5ndGhfJWQ7XG5cbiIsZ2V0VHlwZVN0cih0ZCksIHNlcUNvdW50ICk7CiAgICAgIH1lbHNl
IGlmKHRkLT50eXBlPT1TVFJJTkcpewoJZmxhZyA9IDA7CglmcHJpbnRmKGZwLCIgIC8vY29weSBz
dHJpbmcgdG8gYnVmZmVyXG4iKTsKCWZwcmludGYoZnAsIiAgaWYoc3RyTGVuZ3RoXyVkID4gMCl7
XG4iLCsrc3RyQ291bnQpOwoJZnByaW50ZihmcCwiICAgIG1lbWNweShwdHIsICVzLCBzdHJMZW5n
dGhfJWQgKyAxKTtcbiIsIGZsZC0+bmFtZSwgc3RyQ291bnQpOwoJZnByaW50ZihmcCwiICAgIHB0
ciArPSBzdHJMZW5ndGhfJWQgKyAxO1xuIixzdHJDb3VudCk7CQoJZnByaW50ZihmcCwiICB9ZWxz
ZXtcbiIpOwoJZnByaW50ZihmcCwiICAgICpwdHIgPSAnXFwwJztcbiIpOwoJZnByaW50ZihmcCwi
ICAgIHB0ciArPSAxO1xuIik7CglmcHJpbnRmKGZwLCIgIH1cblxuIik7CiAgICAgIH1lbHNlIGlm
KHRkLT50eXBlPT1BUlJBWSl7CglmbGFnID0gMDsKCWZwcmludGYoZnAsIiAgLy9jb3B5IGFycmF5
IHRvIGJ1ZmZlclxuIik7CglmcHJpbnRmKGZwLCIgIG1lbWNweShwdHIsICVzLCBzaXplb2YoJXMp
ICogJWQpO1xuIiwgZmxkLT5uYW1lLCBnZXRUeXBlU3RyKHRkKSwgdGQtPnNpemUpOwoJZnByaW50
ZihmcCwiICBwdHIgKz0gc2l6ZW9mKCVzKSAqICVkO1xuXG4iLGdldFR5cGVTdHIodGQpLCB0ZC0+
c2l6ZSk7CiAgICAgIH0gICAgICAKICAgIH0gICAgCiAgICBpZihzdHJ1Y3RDb3VudCArIHNlcUNv
dW50ID4gMSkgZnByaW50ZihmcCwiXG4iKTsKCiAgICAvL2NhbGwgdHJhY2UgZnVuY3Rpb24KICAg
IGZwcmludGYoZnAsIlxuICAvL2NhbGwgdHJhY2UgZnVuY3Rpb25cbiIpOwogICAgZnByaW50Zihm
cCwiICB0cmFjZV9uZXcoZmFjaWxpdHlfJXMsICVzLCBidWZMZW5ndGgsIGJ1ZmYpO1xuIixmYWNO
YW1lLGV2LT5uYW1lKTsKICAgIGZwcmludGYoZnAsIn07XG5cblxuIik7CiAgfQoKfQoKLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCiAqRnVuY3Rpb24gbmFtZQogKiAgICBnZXRUeXBlU3RyICAgICAgICA6
IGdlbmVyYXRlIHR5cGUgc3RyaW5nIAogKklucHV0IFBhcmFtcwogKiAgICB0ZCAgICAgICAgICAg
ICAgICA6IGEgdHlwZSBkZXNjcmlwdG9yCiAqUmV0dXJuIFZhbHVlcwogKiAgICBjaGFyICogICAg
ICAgICAgICA6IHR5cGUgc3RyaW5nCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpjaGFyICogZ2V0VHlw
ZVN0cih0eXBlX2Rlc2NyaXB0b3IgKiB0ZCl7CiAgdHlwZV9kZXNjcmlwdG9yICogdCA7CgogIHN3
aXRjaCh0ZC0+dHlwZSl7CiAgICBjYXNlIElOVDoKICAgICAgcmV0dXJuIGludE91dHB1dFR5cGVz
W3RkLT5zaXplXTsKICAgIGNhc2UgVUlOVDoKICAgICAgcmV0dXJuIHVpbnRPdXRwdXRUeXBlc1t0
ZC0+c2l6ZV07CiAgICBjYXNlIEZMT0FUOgogICAgICByZXR1cm4gZmxvYXRPdXRwdXRUeXBlc1t0
ZC0+c2l6ZV07CiAgICBjYXNlIFNUUklORzoKICAgICAgcmV0dXJuICJjaGFyIjsKICAgIGNhc2Ug
RU5VTToKICAgICAgcmV0dXJuIHVpbnRPdXRwdXRUeXBlc1t0ZC0+c2l6ZV07CiAgICBjYXNlIEFS
UkFZOgogICAgY2FzZSBTRVFVRU5DRToKICAgICAgdCA9IHRkLT5uZXN0ZWRfdHlwZTsKICAgICAg
c3dpdGNoKHQtPnR5cGUpewogICAgICAgIGNhc2UgSU5UOgoJICByZXR1cm4gaW50T3V0cHV0VHlw
ZXNbdC0+c2l6ZV07CiAgICAgICAgY2FzZSBVSU5UOgoJICByZXR1cm4gdWludE91dHB1dFR5cGVz
W3QtPnNpemVdOwogICAgICAgIGNhc2UgRkxPQVQ6CgkgIHJldHVybiBmbG9hdE91dHB1dFR5cGVz
W3QtPnNpemVdOwogICAgICAgIGNhc2UgU1RSSU5HOgoJICByZXR1cm4gImNoYXIiOwogICAgICAg
IGNhc2UgRU5VTToKCSAgcmV0dXJuIHVpbnRPdXRwdXRUeXBlc1t0LT5zaXplXTsKICAgICAgICBk
ZWZhdWx0IDoKCSAgZXJyb3JfY2FsbGJhY2soTlVMTCwiTmVzdGVkIHN0cnVjdCBpcyBub3Qgc3Vw
cG9ydHRlZCIpOwoJICBicmVhazsJCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIFNUUlVD
VDogLy9mb3Igbm93IHdlIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCBzdHJ1Y3QKICAgICAgZXJyb3Jf
Y2FsbGJhY2soTlVMTCwiTmVzdGVkIHN0cnVjdCBpcyBub3Qgc3VwcG9ydHRlZCIpOwogICAgICBi
cmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGVycm9yX2NhbGxiYWNrKE5VTEwsIk5vIHR5cGUgaW5m
b3JtYXRpb24iKTsKICAgICAgYnJlYWs7CiAgfQogIHJldHVybiBOVUxMOwp9CgovKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKICpGdW5jdGlvbiBuYW1lCiAqICAgIGdlbmVyYXRlQ2ZpbGUgICAgIDogZ2Vu
ZXJhdGUgYSAuYyBmaWxlIAogKklucHV0IFBhcmFtcwogKiAgICBmcCAgICAgICAgICAgICAgICA6
IGZpbGUgdG8gYmUgd3JpdHRlbiB0bwogKiAgICBmYWNOYW1lICAgICAgICAgICA6IG5hbWUgb2Yg
ZmFjaWxpdHkKICogICAgbmJFdmVudCAgICAgICAgICAgOiBudW1iZXIgb2YgZXZlbnRzIGluIHRo
ZSBmYWNpbGl0eQogKiAgICBjaGVja3N1bSAgICAgICAgICA6IGNoZWNrc3VtIGZvciB0aGUgZmFj
aWxpdHkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZ2VuZXJhdGVDZmlsZShGSUxFICogZnAs
IGNoYXIgKiBmYWNOYW1lLCBpbnQgbmJFdmVudCwgdW5zaWduZWQgbG9uZyBjaGVja3N1bSl7CiAg
Ly93aWxsIGJlIHJlbW92ZWQgbGF0ZXIKICBmcHJpbnRmKGZwLCJ0eXBlZGVmIHVuc2lnbmVkIGlu
dCB0cmFjZV9mYWNpbGl0eV90O1xuXG4iKTsKCiAgZnByaW50ZihmcCwic3RhdGljIHVuc2lnbmVk
IGxvbmcgY2hlY2tzdW0gPSAlbHU7XG5cbiIsY2hlY2tzdW0pOwogIGZwcmludGYoZnAsIi8qIGZh
Y2lsaXR5IGhhbmRsZSAqL1xuIik7CiAgZnByaW50ZihmcCwidHJhY2VfZmFjaWxpdHlfdCBmYWNp
bGl0eV8lcztcblxuIixmYWNOYW1lKTsKCiAgZnByaW50ZihmcCwic3RhdGljIHZvaWQgX19pbml0
IGZhY2lsaXR5XyVzX2luaXQoKXtcbiIsZmFjTmFtZSk7ICAKICBmcHJpbnRmKGZwLCIgIGZhY2ls
aXR5XyVzID0gIHRyYWNlX3JlZ2lzdGVyX2ZhY2lsaXR5X2J5X2NoZWNrc3VtKFwiJXNcIiwgY2hl
Y2tzdW0sJWQpO1xuIixmYWNOYW1lLGZhY05hbWUsbmJFdmVudCk7CiAgZnByaW50ZihmcCwifVxu
XG4iKTsKCiAgZnByaW50ZihmcCwic3RhdGljIHZvaWQgX19leGl0IGZhY2lsaXR5XyVzX2V4aXQo
KXtcbiIsZmFjTmFtZSk7ICAKICBmcHJpbnRmKGZwLCJ9XG5cbiIpOwoKICBmcHJpbnRmKGZwLCJt
b2R1bGVfaW5pdChmYWNpbGl0eV8lc19pbml0KTtcbiIsZmFjTmFtZSk7CiAgZnByaW50ZihmcCwi
bW9kdWxlX2V4aXQoZmFjaWxpdHlfJXNfZXhpdCk7XG4iLGZhY05hbWUpOyAgCn0KCgovKiBFdmVu
dCB0eXBlIGRlc2NyaXB0b3JzICovCgp2b2lkIGZyZWVUeXBlcyhzZXF1ZW5jZSAqdCkgewogIGlu
dCBwb3MsIHBvczI7CiAgdHlwZV9kZXNjcmlwdG9yICp0cDsKICBmaWVsZCAqZjsKCiAgZm9yKHBv
cyA9IDAgOyBwb3MgPCB0LT5wb3NpdGlvbjsgcG9zKyspIHsKICAgIHRwID0gKHR5cGVfZGVzY3Jp
cHRvciAqKXQtPmFycmF5W3Bvc107CiAgICBpZih0cC0+Zm10ICE9IE5VTEwpIGZyZWUodHAtPmZt
dCk7CiAgICBpZih0cC0+dHlwZSA9PSBFTlVNKSB7CiAgICAgIGZvcihwb3MyID0gMDsgcG9zMiA8
IHRwLT5sYWJlbHMucG9zaXRpb247IHBvczIrKykgewogICAgICAgIGZyZWUodHAtPmxhYmVscy5h
cnJheVtwb3MyXSk7CiAgICAgIH0KICAgICAgc2VxdWVuY2VfZGlzcG9zZSgmKHRwLT5sYWJlbHMp
KTsKICAgIH0KICAgIGlmKHRwLT50eXBlID09IFNUUlVDVCkgewogICAgICBmb3IocG9zMiA9IDA7
IHBvczIgPCB0cC0+ZmllbGRzLnBvc2l0aW9uOyBwb3MyKyspIHsKICAgICAgICBmID0gKGZpZWxk
ICopIHRwLT5maWVsZHMuYXJyYXlbcG9zMl07CiAgICAgICAgZnJlZShmLT5uYW1lKTsKICAgICAg
ICBmcmVlKGYtPmRlc2NyaXB0aW9uKTsKICAgICAgICBmcmVlKGYpOwogICAgICB9CiAgICAgIHNl
cXVlbmNlX2Rpc3Bvc2UoJih0cC0+ZmllbGRzKSk7CiAgICB9CiAgICBmcmVlKHRwKTsKICB9Cn0K
CnZvaWQgZnJlZUV2ZW50cyhzZXF1ZW5jZSAqdCkgewogIGludCBwb3M7CiAgZXZlbnQgKmV2OwoK
ICBmb3IocG9zID0gMCA7IHBvcyA8IHQtPnBvc2l0aW9uOyBwb3MrKykgewogICAgZXYgPSAoZXZl
bnQgKikgdC0+YXJyYXlbcG9zXTsKICAgIGZyZWUoZXYtPm5hbWUpOwogICAgZnJlZShldi0+ZGVz
Y3JpcHRpb24pOwogICAgZnJlZShldik7CiAgfQoKfQoKCi8qIEV4dGVuc2libGUgYXJyYXkgKi8K
CnZvaWQgc2VxdWVuY2VfaW5pdChzZXF1ZW5jZSAqdCkgewogIHQtPnNpemUgPSAxMDsKICB0LT5w
b3NpdGlvbiA9IDA7CiAgdC0+YXJyYXkgPSAodm9pZCAqKiltZW1BbGxvYyh0LT5zaXplICogc2l6
ZW9mKHZvaWQgKikpOwp9Cgp2b2lkIHNlcXVlbmNlX2Rpc3Bvc2Uoc2VxdWVuY2UgKnQpIHsKICB0
LT5zaXplID0gMDsKICBmcmVlKHQtPmFycmF5KTsKICB0LT5hcnJheSA9IE5VTEw7Cn0KCnZvaWQg
c2VxdWVuY2VfcHVzaChzZXF1ZW5jZSAqdCwgdm9pZCAqZWxlbSkgewogIHZvaWQgKip0bXA7Cgog
IGlmKHQtPnBvc2l0aW9uID49IHQtPnNpemUpIHsKICAgIHRtcCA9IHQtPmFycmF5OwogICAgdC0+
YXJyYXkgPSAodm9pZCAqKiltZW1BbGxvYyh0LT5zaXplICogMiAqIHNpemVvZih2b2lkICopKTsK
ICAgIG1lbWNweSh0LT5hcnJheSwgdG1wLCB0LT5zaXplICogc2l6ZW9mKHZvaWQgKikpOwogICAg
dC0+c2l6ZSA9IHQtPnNpemUgKiAyOwogICAgZnJlZSh0bXApOwogIH0KICB0LT5hcnJheVt0LT5w
b3NpdGlvbl0gPSBlbGVtOwogIHQtPnBvc2l0aW9uKys7Cn0KCnZvaWQgKnNlcXVlbmNlX3BvcChz
ZXF1ZW5jZSAqdCkgewogIHJldHVybiB0LT5hcnJheVt0LT5wb3NpdGlvbi0tXTsKfQoKCi8qIEhh
c2ggdGFibGUgQVBJLCBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IGxpbmVhciBzZWFyY2ggZm9yIG5v
dyAqLwoKdm9pZCB0YWJsZV9pbml0KHRhYmxlICp0KSB7CiAgc2VxdWVuY2VfaW5pdCgmKHQtPmtl
eXMpKTsKICBzZXF1ZW5jZV9pbml0KCYodC0+dmFsdWVzKSk7Cn0KCnZvaWQgdGFibGVfZGlzcG9z
ZSh0YWJsZSAqdCkgewogIHNlcXVlbmNlX2Rpc3Bvc2UoJih0LT5rZXlzKSk7CiAgc2VxdWVuY2Vf
ZGlzcG9zZSgmKHQtPnZhbHVlcykpOwp9Cgp2b2lkIHRhYmxlX2luc2VydCh0YWJsZSAqdCwgY2hh
ciAqa2V5LCB2b2lkICp2YWx1ZSkgewogIHNlcXVlbmNlX3B1c2goJih0LT5rZXlzKSxrZXkpOwog
IHNlcXVlbmNlX3B1c2goJih0LT52YWx1ZXMpLHZhbHVlKTsKfQoKdm9pZCAqdGFibGVfZmluZCh0
YWJsZSAqdCwgY2hhciAqa2V5KSB7CiAgaW50IHBvczsKICBmb3IocG9zID0gMCA7IHBvcyA8IHQt
PmtleXMucG9zaXRpb247IHBvcysrKSB7CiAgICBpZihzdHJjbXAoKGNoYXIgKilrZXksKGNoYXIg
Kil0LT5rZXlzLmFycmF5W3Bvc10pID09IDApCiAgICAgIHJldHVybih0LT52YWx1ZXMuYXJyYXlb
cG9zXSk7CiAgfQogIHJldHVybiBOVUxMOwp9CgoKLyogQ29uY2F0ZW5hdGUgc3RyaW5ncyAqLwoK
Y2hhciAqYXBwZW5kU3RyaW5nKGNoYXIgKnMsIGNoYXIgKnN1ZmZpeCkgewogIGNoYXIgKnRtcDsK
CiAgdG1wID0gKGNoYXIgKiltZW1BbGxvYyhzdHJsZW4ocykgKyBzdHJsZW4oc3VmZml4KSArIDEp
OwogIHN0cmNweSh0bXAscyk7CiAgc3RyY2F0KHRtcCxzdWZmaXgpOyAgCiAgcmV0dXJuIHRtcDsK
fQoKCg==
--------------7C0520D1839EBA82D24BFC0F
Content-Type: application/octet-stream;
name="default.event"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="default.event"
Ly9UUkFDRV9FVl9TVEFSVApldmVudChUUkFDRV9FVl9TVEFSVCwgIlRoaXMgaXMgdG8gbWFyayB0
aGUgdHJhY2UncyBzdGFydCIsCiAgICAgIGZpZWxkKG1hZ2ljX251bWJlciwiTWFnaWMgbnVtYmVy
IHRvIGlkZW50aWZ5IGEgdHJhY2UiLCB1aW50KDQpKSwKICAgICAgZmllbGQoYXJjaF90eXBlLCAi
VHlwZSBvZiBhcmNoaXRlY3R1cmUiLCB1aW50KDQpKSwKICAgICAgZmllbGQoYXJjaF92YXJpYW50
LCAiVmFyaWFudCBvZiB0aGUgZ2l2ZW4gdHlwZSBvZiBhcmNoaXRlY3R1cmUiLCB1aW50KDQpKSwK
ICAgICAgZmllbGQoc3lzdGVtX3R5cGUsICJPcGVyYXRpbmcgc3lzdGVtIHR5cGUiLCB1aW50KDQp
KSwKICAgICAgZmllbGQobWFqb3JfdmVyc2lvbiwgIk1ham9yIHZlcnNpb24gb2YgdHJhY2UiLCB1
aW50KDEpKSwKICAgICAgZmllbGQobWlub3JfdmVyc2lvbiwgIk1pbm9yIHZlcnNpb24gb2YgdHJh
Y2UiLCB1aW50KDEpKSwKICAgICAgZmllbGQoYnVmZmVyX3NpemUsICJTaXplIG9mIGJ1ZmZlcnMi
LCB1aW50KDQpKSwKICAgICAgZmllbGQoZXZlbnRfbWFzaywgIlRoZSBldmVudCBtYXNrIiwgdWlu
dCg4KSksCiAgICAgIGZpZWxkKGRldGFpbHNfbWFzaywgIkFyZSB0aGUgZXZlbnQgZGV0YWlscyBs
b2dnZWQiLCB1aW50KDgpKSwKICAgICAgZmllbGQobG9nX2NwdWlkLCAiSXMgdGhlIENQVUlEIGxv
Z2dlZCAiLCB1aW50KDEpKSwKICAgICAgZmllbGQodXNlX3RzYywgIkFyZSB3ZSB1c2luZyBUU0Nz
IG9yIHRpbWUgZGVsdGFzPyIsIHVpbnQoMSkpCiAgICAgKTsKCgoKLy9UUkFDRV9FVl9TWVNDQUxM
X0VOVFJZCmV2ZW50KFRSQUNFX0VWX1NZU0NBTExfRU5UUlksICJFbnRyeSBpbiBhIGdpdmVuIHN5
c3RlbSBjYWxsIiwKICAgICAgZmllbGQoc3lzY2FsbF9pZCwgIlN5c2NhbGwgZW50cnkgbnVtYmVy
IGluIGVudHJ5LlMiLCB1aW50KDEpKSwKICAgICAgZmllbGQoYWRkcmVzcywgIkFkZHJlc3MgZnJv
bSB3aGljaCBjYWxsIHdhcyBtYWRlIiwgdWludCg0KSkKICAgICApOwoKCgovL1RSQUNFX0VWX1NZ
U0NBTExfRVhJVApldmVudChUUkFDRV9FVl9TWVNDQUxMX0VYSVQsICJFeGl0IGZyb20gYSBnaXZl
biBzeXN0ZW0gY2FsbCIKICAgICApOwoKCgovL1RSQUNFX0VWX1RSQVBfRU5UUlkgOiBub3QgZm9y
ICBfX3MzOTBfXwpldmVudChUUkFDRV9FVl9UUkFQX0VOVFJZLCAiRW50cnkgaW4gYSB0cmFwIiwK
ICAgICAgZmllbGQodHJhcF9pZCwgIlRyYXAgbnVtYmVyIiwgdWludCgyKSksCiAgICAgIGZpZWxk
KGFkZHJlc3MsICJBZGRyZXNzIHdoZXJlIHRyYXAgb2NjdXJlZCIsIHVpbnQoNCkpCiAgICAgKTsK
CgoKLy9UUkFDRV9FVl9UUkFQX0VYSVQKZXZlbnQoVFJBQ0VfRVZfVFJBUF9FWElULCAiRXhpdCBm
cm9tIGEgdHJhcCIKICAgICApOwoKCgovL1RSQUNFX0VWX0lSUV9FTlRSWQpldmVudChUUkFDRV9F
Vl9JUlFfRU5UUlksICJFbnRyeSBpbiBhbiBpcnEiLAogICAgICBmaWVsZChpcnFfaWQsICJJUlEg
bnVtYmVyIiwgdWludCgxKSksCiAgICAgIGZpZWxkKGtlcm5lbCwgIkFyZSB3ZSBleGVjdXRpbmcg
a2VybmVsIGNvZGUiLCB1aW50KDEpKQogICAgICk7CgoKCi8vVFJBQ0VfRVZfSVJRX0VYSVQKZXZl
bnQoVFJBQ0VfRVZfSVJRX0VYSVQsICJFeGl0IGZyb20gYW4gaXJxIiAKICAgICApOwoKCgovL1RS
QUNFX0VWX1NDSEVEQ0hBTkdFCmV2ZW50KFRSQUNFX0VWX1NDSEVEQ0hBTkdFLCAiU2NoZWR1bGlu
ZyBjaGFuZ2UiLCAKICAgICAgZmllbGQob3V0LCAiT3V0Z29pbmcgcHJvY2VzcyIsIHVpbnQoNCkp
LAogICAgICBmaWVsZChpbiwgIkluY29taW5nIHByb2Nlc3MiLCB1aW50KDQpKSwKICAgICAgZmll
bGQob3V0X3N0YXRlLCAiT3V0Z29pbmcgcHJvY2Vzcycgc3RhdGUiLCB1aW50KDQpKQogICAgICk7
CgoKCi8vVFJBQ0VfRVZfS0VSTkVMX1RJTUVSCmV2ZW50KFRSQUNFX0VWX0tFUk5FTF9USU1FUiwg
IlRoZSBrZXJuZWwgdGltZXIgcm91dGluZSBoYXMgYmVlbiBjYWxsZWQiICAgICApOwoKCgovL1RS
QUNFX0VWX1NPRlRfSVJRCmV2ZW50KFRSQUNFX0VWX1NPRlRfSVJRLCAiSGl0IGtleSBwYXJ0IG9m
IHNvZnQtaXJxIG1hbmFnZW1lbnQiLCAKICAgICAgZmllbGQoZXZlbnRfc3ViX2lkLCJTb2Z0LWly
cSBldmVudCBJZCIsIAogICAgICAgICAgICBlbnVtKDEsCiAgICAgICAgICAgICAgICAgICgKICAg
ICAgICAgICAgICAgICAgICBUUkFDRV9FVl9TT0ZUX0lSUV9CT1RUT01fSEFMRiA9IDEsCiAgICAg
ICAgICAgICAgICAgICAgVFJBQ0VfRVZfU09GVF9JUlFfU09GVF9JUlEsCgkJICAgIFRSQUNFX0VW
X1NPRlRfSVJRX1RBU0tMRVRfQUNUSU9OLAoJCSAgICBUUkFDRV9FVl9TT0ZUX0lSUV9UQVNLTEVU
X0hJX0FDVElPTgogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAg
ICAgKSwKICAgICAgZmllbGQoZXZlbnRfZGF0YSwgIkRhdGEgYXNzb2NpYXRlZCB3aXRoIGV2ZW50
IiwgdWludCg0KSkKICAgICApOwoKCgovL1RSQUNFX0VWX1BST0NFU1MKZXZlbnQoVFJBQ0VfRVZf
UFJPQ0VTUywgIkhpdCBrZXkgcGFydCBvZiBwcm9jZXNzIG1hbmFnZW1lbnQiLAogICAgICBmaWVs
ZChldmVudF9zdWJfaWQsICJQcm9jZXNzIGV2ZW50IElEIiwKICAgICAgICAgICAgIGVudW0oMSwK
ICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgVFJBQ0VfRVZfUFJPQ0VT
U19LVEhSRUFEID0gMSwKCQkgICAgIFRSQUNFX0VWX1BST0NFU1NfRk9SSywKCQkgICAgIFRSQUNF
X0VWX1BST0NFU1NfRVhJVCwKCQkgICAgIFRSQUNFX0VWX1BST0NFU1NfV0FJVCwKCQkgICAgIFRS
QUNFX0VWX1BST0NFU1NfU0lHTkFMLAoJCSAgICAgVFJBQ0VfRVZfUFJPQ0VTU19XQUtFVVAKICAg
ICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgKSwKICAgICAg
ZmllbGQoZXZlbnRfZGF0YTEsICJEYXRhIGFzc29jaWF0ZWQgd2l0aCBldmVudCIsIHVpbnQoNCkp
LCAKICAgICAgZmllbGQoZXZlbnRfZGF0YTIsICJEYXRhIGFzc29jaWF0ZWQgd2l0aCBldmVudCIs
IHVpbnQoNCkpIAogICAgICk7CgoKCi8vVFJBQ0VfRVZfRklMRV9TWVNURU0KZXZlbnQoVFJBQ0Vf
RVZfRklMRV9TWVNURU0sICJIaXQga2V5IHBhcnQgb2YgZmlsZSBzeXN0ZW0iLCAKICAgICAgZmll
bGQoZXZlbnRfc3ViX2lkLCJGaWxlIHN5c3RlbSBldmVudCBJRCIsCgkgICAgZW51bSgxLAoJCSAo
CgkJICAgVFJBQ0VfRVZfRklMRV9TWVNURU1fQlVGX1dBSVRfU1RBUlQgPSAxLAoJCSAgIFRSQUNF
X0VWX0ZJTEVfU1lTVEVNX0JVRl9XQUlUX0VORCwKCQkgICBUUkFDRV9FVl9GSUxFX1NZU1RFTV9F
WEVDLAoJCSAgIFRSQUNFX0VWX0ZJTEVfU1lTVEVNX09QRU4sCgkJICAgVFJBQ0VfRVZfRklMRV9T
WVNURU1fQ0xPU0UsCgkJICAgVFJBQ0VfRVZfRklMRV9TWVNURU1fUkVBRCwKCQkgICBUUkFDRV9F
Vl9GSUxFX1NZU1RFTV9XUklURSwKCQkgICBUUkFDRV9FVl9GSUxFX1NZU1RFTV9TRUVLLAoJCSAg
IFRSQUNFX0VWX0ZJTEVfU1lTVEVNX0lPQ1RMLAoJCSAgIFRSQUNFX0VWX0ZJTEVfU1lTVEVNX1NF
TEVDVCwKCQkgICBUUkFDRV9FVl9GSUxFX1NZU1RFTV9QT0xMCgkJICkKICAgICAgICAgICAgICAg
ICkKICAgICAgICAgICApLAogICAgICBmaWVsZChldmVudF9kYXRhMSwgIiBFdmVudCBkYXRhICIs
IHVpbnQoNCkpLAogICAgICBmaWVsZChldmVudF9kYXRhMiwgIiBFdmVudCBkYXRhIDIiLCB1aW50
KDQpKSwKICAgICAgZmllbGQoZmlsZV9uYW1lLCAiTmFtZSBvZiBmaWxlIG9wZXJhdGVkIG9uICIs
IHN0cmluZygpKSAKICAgICApOwoKCgovL1RSQUNFX0VWX1RJTUVSCmV2ZW50KFRSQUNFX0VWX1RJ
TUVSLCAiSGl0IGtleSBwYXJ0IG9mIHRpbWVyIG1hbmFnZW1lbnQiLCAKICAgICAgZmllbGQoZXZl
bnRfc3ViX2lkLCAiVGltZXIgZXZlbnQgSUQiLAoJICAgIGVudW0oMSwKCSAgICAgICAgICgKCQkg
ICBUUkFDRV9FVl9USU1FUl9FWFBJUkVEID0gMSwKCQkgICBUUkFDRV9FVl9USU1FUl9TRVRJVElN
RVIsCgkJICAgVFJBQ0VfRVZfVElNRVJfU0VUVElNRU9VVAoJICAgICAgICAgKQoJICAgICAgICAp
CgkgICApLCAKICAgICAgZmllbGQoZXZlbnRfc2RhdGEsICJTaG9ydCBkYXRhIiwgdWludCgxKSks
IAogICAgICBmaWVsZChldmVudF9kYXRhMSwgIkRhdGEgYXNzb2NpYXRlZCB3aXRoIGV2ZW50Iiwg
dWludCg0KSksCiAgICAgIGZpZWxkKGV2ZW50X2RhdGEyLCAiRGF0YSBhc3NvY2lhdGVkIHdpdGgg
ZXZlbnQiLCB1aW50KDQpKQogICAgICk7CgoKCi8vVFJBQ0VfRVZfTUVNT1JZCmV2ZW50KFRSQUNF
X0VWX01FTU9SWSwgIkhpdCBrZXkgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCIsIAogICAgICBm
aWVsZChldmVudF9zdWJfaWQsICIiLAoJICAgIGVudW0oMSwKCQkgKAoJCSAgIFRSQUNFX0VWX01F
TU9SWV9QQUdFX0FMTE9DID0gMSwKCQkgICBUUkFDRV9FVl9NRU1PUllfUEFHRV9GUkVFLAoJCSAg
IFRSQUNFX0VWX01FTU9SWV9TV0FQX0lOLAoJCSAgIFRSQUNFX0VWX01FTU9SWV9TV0FQX09VVCwK
CQkgICBUUkFDRV9FVl9NRU1PUllfUEFHRV9XQUlUX1NUQVJULAoJCSAgIFRSQUNFX0VWX01FTU9S
WV9QQUdFX1dBSVRfRU5ECgkJICkKCQkpCgkgICApLAogICAgICBmaWVsZChldmVudF9kYXRhLCAi
RGF0YSBhc3NvY2lhdGVkIHdpdGggZXZlbnQiLCB1aW50KDQpKQogICAgICk7CgoKCi8vVFJBQ0Vf
RVZfU09DS0VUCmV2ZW50KFRSQUNFX0VWX1NPQ0tFVCwgIkhpdCBrZXkgcGFydCBvZiBzb2NrZXQg
Y29tbXVuaWNhdGlvbiIsCiAgICAgIGZpZWxkKGV2ZW50X3N1Yl9pZCwgIlNvY2tldCBldmVudCBJ
RCIsCgkgICAgZW51bSgxLAoJCSAoCgkJICAgVFJBQ0VfRVZfU09DS0VUX0NBTEwgPSAxLAoJCSAg
IFRSQUNFX0VWX1NPQ0tFVF9DUkVBVEUsCgkJICAgVFJBQ0VfRVZfU09DS0VUX1NFTkQsCgkJICAg
VFJBQ0VfRVZfU09DS0VUX1JFQ0VJVkUKCQkgKQoJCSkgCgkgICApLAogICAgICBmaWVsZChldmVu
dF9kYXRhMSwgIkRhdGEgYXNzb2NpYXRlZCB3aXRoIGV2ZW50IiwgdWludCg0KSksCiAgICAgIGZp
ZWxkKGV2ZW50X2RhdGEyLCAiRGF0YSBhc3NvY2lhdGVkIHdpdGggZXZlbnQiLCB1aW50KDQpKQog
ICAgICk7CgoKCi8vVFJBQ0VfRVZfSVBDCmV2ZW50KFRSQUNFX0VWX0lQQywgIkhpdCBrZXkgcGFy
dCBvZiBTeXN0ZW0gViBJUEMiLCAKICAgICAgZmllbGQoZXZlbnRfc3ViX2lkLCAiSVBDIGV2ZW50
IElEIiwKCSAgICBlbnVtKDEsCgkJICgKCQkgICBUUkFDRV9FVl9JUENfQ0FMTCA9IDEsCgkJICAg
VFJBQ0VfRVZfSVBDX01TR19DUkVBVEUsCgkJICAgVFJBQ0VfRVZfSVBDX1NFTV9DUkVBVEUsCgkJ
ICAgVFJBQ0VfRVZfSVBDX1NITV9DUkVBVEUKCQkgKQoJCSkKCSAgICksCiAgICAgIGZpZWxkKGV2
ZW50X2RhdGExLCAiRGF0YSBhc3NvY2lhdGVkIHdpdGggZXZlbnQiLCB1aW50KDQpKSwKICAgICAg
ZmllbGQoZXZlbnRfZGF0YTIsICJEYXRhIGFzc29jaWF0ZWQgd2l0aCBldmVudCIsIHVpbnQoNCkp
CiAgICAgKTsKCgoKLy9UUkFDRV9FVl9ORVRXT1JLCmV2ZW50KFRSQUNFX0VWX05FVFdPUkssICJI
aXQga2V5IHBhcnQgb2YgbmV0d29yayBjb21tdW5pY2F0aW9uIiwKICAgICAgZmllbGQoZXZlbnRf
c3ViX2lkLCAiTmV0d29yayBldmVudCBJRCIsCgkgICAgZW51bSgxLAoJCSAoCgkJICAgVFJBQ0Vf
RVZfTkVUV09SS19QQUNLRVRfSU4gPSAxLAoJCSAgIFRSQUNFX0VWX05FVFdPUktfUEFDS0VUX09V
VAoJCSApCgkJKQoJICAgKSwgCiAgICAgIGZpZWxkKGV2ZW50X2RhdGEsICJFdmVudCBkYXRhIiwg
dWludCg0KSkKICAgICApOwoKCgovL1RSQUNFX0VWX0JVRkZFUl9TVEFSVApldmVudChUUkFDRV9F
Vl9CVUZGRVJfU1RBUlQsICJNYXJrIHRoZSBiZWdpbmluZyBvZiBhIHRyYWNlIGJ1ZmZlciIsIAog
ICAgICBmaWVsZCh0aW1lLCAiVGltZSBzdGFtcCBvZiB0aGlzIGJ1ZmZlciIsYXJyYXkoMixpbnQo
OCkpICksCiAgICAgIGZpZWxkKHRzYywiVFNDIG9mIHRoaXMgYnVmZmVyLCBpZiBhcHBsaWNhYmxl
Iix1aW50KDQpKSwKICAgICAgZmllbGQoaWQsICJVbmlxdWUgYnVmZmVyIElEIiwgdWludCg0KSkK
ICAgICApOwoKCgovL1RSQUNFX0VWX0JVRkZFUl9FTkQKZXZlbnQoVFJBQ0VfRVZfQlVGRkVSX0VO
RCwgIk1hcmsgdGhlIGVuZGluZyBvZiBhIHRyYWNlIGJ1ZmZlciIsIAogICAgICBmaWVsZCh0aW1l
LCAiVGltZSBzdGFtcCBvZiB0aGlzIGJ1ZmZlciIsYXJyYXkoMixpbnQoOCkpICksCiAgICAgIGZp
ZWxkKHRzYywiVFNDIG9mIHRoaXMgYnVmZmVyLCBpZiBhcHBsaWNhYmxlIix1aW50KDQpKQogICAg
ICk7CgoKCi8vVFJBQ0VfRVZfTkVXX0VWRU5UCmV2ZW50KFRSQUNFX0VWX05FV19FVkVOVCwgIk5l
dyBldmVudCB0eXBlIiwgCiAgICAgIGZpZWxkKGlkLCAiQ3VzdG9tIGV2ZW50IElEIiwgdWludCg0
KSksCiAgICAgIGZpZWxkKHR5cGUsICJFdmVudCB0eXBlIGRlc2NyaXB0aW9uIiwgc3RyaW5nKCkp
LAogICAgICBmaWVsZChkZXNjLCAiRGV0YWlsZWQgZXZlbnQgZGVzY3JpcHRpb24iLCBzdHJpbmco
KSksCiAgICAgIGZpZWxkKGZvcm1hdF90eXBlLCAiVHlwZSBvZiBmb3JtYXR0aW5nIiwgdWludCg0
KSksCiAgICAgIGZpZWxkKGZvcm0sICJEYXRhIHNwZWNpZmljIHRvIGZvcm1hdCIsIHN0cmluZygp
KQogICAgICk7CgoKCi8vVFJBQ0VfRVZfQ1VTVE9NCmV2ZW50KFRSQUNFX0VWX0NVU1RPTSwgIkN1
c3RvbSBldmVudCIgCiAgICAgKTsKCgoKLy9UUkFDRV9FVl9DSEFOR0VfTUFTSwpldmVudChUUkFD
RV9FVl9DSEFOR0VfTUFTSywgIkNoYW5nZSBpbiBldmVudCBtYXNrIiwgCiAgICAgIGZpZWxkKG1h
c2ssICJFdmVudCBtYXNrIix1aW50KDgpICkKICAgICApOwoKCgovL1RSQUNFX0VWX0hFQVJUQkVB
VApldmVudChUUkFDRV9FVl9IRUFSVEJFQVQsICJIZWFydGJlYXQgZXZlbnQiICk7CgoKCg==
--------------7C0520D1839EBA82D24BFC0F
Content-Type: application/octet-stream;
name="crc32.tab"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="crc32.tab"
ICAweDAwMDAwMDAwVSwgMHg3NzA3MzA5NlUsIDB4ZWUwZTYxMmNVLCAweDk5MDk1MWJhVSwgMHgw
NzZkYzQxOVUsCiAgMHg3MDZhZjQ4ZlUsIDB4ZTk2M2E1MzVVLCAweDllNjQ5NWEzVSwgMHgwZWRi
ODgzMlUsIDB4NzlkY2I4YTRVLAogIDB4ZTBkNWU5MWVVLCAweDk3ZDJkOTg4VSwgMHgwOWI2NGMy
YlUsIDB4N2ViMTdjYmRVLCAweGU3YjgyZDA3VSwKICAweDkwYmYxZDkxVSwgMHgxZGI3MTA2NFUs
IDB4NmFiMDIwZjJVLCAweGYzYjk3MTQ4VSwgMHg4NGJlNDFkZVUsCiAgMHgxYWRhZDQ3ZFUsIDB4
NmRkZGU0ZWJVLCAweGY0ZDRiNTUxVSwgMHg4M2QzODVjN1UsIDB4MTM2Yzk4NTZVLAogIDB4NjQ2
YmE4YzBVLCAweGZkNjJmOTdhVSwgMHg4YTY1YzllY1UsIDB4MTQwMTVjNGZVLCAweDYzMDY2Y2Q5
VSwKICAweGZhMGYzZDYzVSwgMHg4ZDA4MGRmNVUsIDB4M2I2ZTIwYzhVLCAweDRjNjkxMDVlVSwg
MHhkNTYwNDFlNFUsCiAgMHhhMjY3NzE3MlUsIDB4M2MwM2U0ZDFVLCAweDRiMDRkNDQ3VSwgMHhk
MjBkODVmZFUsIDB4YTUwYWI1NmJVLAogIDB4MzViNWE4ZmFVLCAweDQyYjI5ODZjVSwgMHhkYmJi
YzlkNlUsIDB4YWNiY2Y5NDBVLCAweDMyZDg2Y2UzVSwKICAweDQ1ZGY1Yzc1VSwgMHhkY2Q2MGRj
ZlUsIDB4YWJkMTNkNTlVLCAweDI2ZDkzMGFjVSwgMHg1MWRlMDAzYVUsCiAgMHhjOGQ3NTE4MFUs
IDB4YmZkMDYxMTZVLCAweDIxYjRmNGI1VSwgMHg1NmIzYzQyM1UsIDB4Y2ZiYTk1OTlVLAogIDB4
YjhiZGE1MGZVLCAweDI4MDJiODllVSwgMHg1ZjA1ODgwOFUsIDB4YzYwY2Q5YjJVLCAweGIxMGJl
OTI0VSwKICAweDJmNmY3Yzg3VSwgMHg1ODY4NGMxMVUsIDB4YzE2MTFkYWJVLCAweGI2NjYyZDNk
VSwgMHg3NmRjNDE5MFUsCiAgMHgwMWRiNzEwNlUsIDB4OThkMjIwYmNVLCAweGVmZDUxMDJhVSwg
MHg3MWIxODU4OVUsIDB4MDZiNmI1MWZVLAogIDB4OWZiZmU0YTVVLCAweGU4YjhkNDMzVSwgMHg3
ODA3YzlhMlUsIDB4MGYwMGY5MzRVLCAweDk2MDlhODhlVSwKICAweGUxMGU5ODE4VSwgMHg3ZjZh
MGRiYlUsIDB4MDg2ZDNkMmRVLCAweDkxNjQ2Yzk3VSwgMHhlNjYzNWMwMVUsCiAgMHg2YjZiNTFm
NFUsIDB4MWM2YzYxNjJVLCAweDg1NjUzMGQ4VSwgMHhmMjYyMDA0ZVUsIDB4NmMwNjk1ZWRVLAog
IDB4MWIwMWE1N2JVLCAweDgyMDhmNGMxVSwgMHhmNTBmYzQ1N1UsIDB4NjViMGQ5YzZVLCAweDEy
YjdlOTUwVSwKICAweDhiYmViOGVhVSwgMHhmY2I5ODg3Y1UsIDB4NjJkZDFkZGZVLCAweDE1ZGEy
ZDQ5VSwgMHg4Y2QzN2NmM1UsCiAgMHhmYmQ0NGM2NVUsIDB4NGRiMjYxNThVLCAweDNhYjU1MWNl
VSwgMHhhM2JjMDA3NFUsIDB4ZDRiYjMwZTJVLAogIDB4NGFkZmE1NDFVLCAweDNkZDg5NWQ3VSwg
MHhhNGQxYzQ2ZFUsIDB4ZDNkNmY0ZmJVLCAweDQzNjllOTZhVSwKICAweDM0NmVkOWZjVSwgMHhh
ZDY3ODg0NlUsIDB4ZGE2MGI4ZDBVLCAweDQ0MDQyZDczVSwgMHgzMzAzMWRlNVUsCiAgMHhhYTBh
NGM1ZlUsIDB4ZGQwZDdjYzlVLCAweDUwMDU3MTNjVSwgMHgyNzAyNDFhYVUsIDB4YmUwYjEwMTBV
LAogIDB4YzkwYzIwODZVLCAweDU3NjhiNTI1VSwgMHgyMDZmODViM1UsIDB4Yjk2NmQ0MDlVLCAw
eGNlNjFlNDlmVSwKICAweDVlZGVmOTBlVSwgMHgyOWQ5Yzk5OFUsIDB4YjBkMDk4MjJVLCAweGM3
ZDdhOGI0VSwgMHg1OWIzM2QxN1UsCiAgMHgyZWI0MGQ4MVUsIDB4YjdiZDVjM2JVLCAweGMwYmE2
Y2FkVSwgMHhlZGI4ODMyMFUsIDB4OWFiZmIzYjZVLAogIDB4MDNiNmUyMGNVLCAweDc0YjFkMjlh
VSwgMHhlYWQ1NDczOVUsIDB4OWRkMjc3YWZVLCAweDA0ZGIyNjE1VSwKICAweDczZGMxNjgzVSwg
MHhlMzYzMGIxMlUsIDB4OTQ2NDNiODRVLCAweDBkNmQ2YTNlVSwgMHg3YTZhNWFhOFUsCiAgMHhl
NDBlY2YwYlUsIDB4OTMwOWZmOWRVLCAweDBhMDBhZTI3VSwgMHg3ZDA3OWViMVUsIDB4ZjAwZjkz
NDRVLAogIDB4ODcwOGEzZDJVLCAweDFlMDFmMjY4VSwgMHg2OTA2YzJmZVUsIDB4Zjc2MjU3NWRV
LCAweDgwNjU2N2NiVSwKICAweDE5NmMzNjcxVSwgMHg2ZTZiMDZlN1UsIDB4ZmVkNDFiNzZVLCAw
eDg5ZDMyYmUwVSwgMHgxMGRhN2E1YVUsCiAgMHg2N2RkNGFjY1UsIDB4ZjliOWRmNmZVLCAweDhl
YmVlZmY5VSwgMHgxN2I3YmU0M1UsIDB4NjBiMDhlZDVVLAogIDB4ZDZkNmEzZThVLCAweGExZDE5
MzdlVSwgMHgzOGQ4YzJjNFUsIDB4NGZkZmYyNTJVLCAweGQxYmI2N2YxVSwKICAweGE2YmM1NzY3
VSwgMHgzZmI1MDZkZFUsIDB4NDhiMjM2NGJVLCAweGQ4MGQyYmRhVSwgMHhhZjBhMWI0Y1UsCiAg
MHgzNjAzNGFmNlUsIDB4NDEwNDdhNjBVLCAweGRmNjBlZmMzVSwgMHhhODY3ZGY1NVUsIDB4MzE2
ZThlZWZVLAogIDB4NDY2OWJlNzlVLCAweGNiNjFiMzhjVSwgMHhiYzY2ODMxYVUsIDB4MjU2ZmQy
YTBVLCAweDUyNjhlMjM2VSwKICAweGNjMGM3Nzk1VSwgMHhiYjBiNDcwM1UsIDB4MjIwMjE2YjlV
LCAweDU1MDUyNjJmVSwgMHhjNWJhM2JiZVUsCiAgMHhiMmJkMGIyOFUsIDB4MmJiNDVhOTJVLCAw
eDVjYjM2YTA0VSwgMHhjMmQ3ZmZhN1UsIDB4YjVkMGNmMzFVLAogIDB4MmNkOTllOGJVLCAweDVi
ZGVhZTFkVSwgMHg5YjY0YzJiMFUsIDB4ZWM2M2YyMjZVLCAweDc1NmFhMzljVSwKICAweDAyNmQ5
MzBhVSwgMHg5YzA5MDZhOVUsIDB4ZWIwZTM2M2ZVLCAweDcyMDc2Nzg1VSwgMHgwNTAwNTcxM1Us
CiAgMHg5NWJmNGE4MlUsIDB4ZTJiODdhMTRVLCAweDdiYjEyYmFlVSwgMHgwY2I2MWIzOFUsIDB4
OTJkMjhlOWJVLAogIDB4ZTVkNWJlMGRVLCAweDdjZGNlZmI3VSwgMHgwYmRiZGYyMVUsIDB4ODZk
M2QyZDRVLCAweGYxZDRlMjQyVSwKICAweDY4ZGRiM2Y4VSwgMHgxZmRhODM2ZVUsIDB4ODFiZTE2
Y2RVLCAweGY2YjkyNjViVSwgMHg2ZmIwNzdlMVUsCiAgMHgxOGI3NDc3N1UsIDB4ODgwODVhZTZV
LCAweGZmMGY2YTcwVSwgMHg2NjA2M2JjYVUsIDB4MTEwMTBiNWNVLAogIDB4OGY2NTllZmZVLCAw
eGY4NjJhZTY5VSwgMHg2MTZiZmZkM1UsIDB4MTY2Y2NmNDVVLCAweGEwMGFlMjc4VSwKICAweGQ3
MGRkMmVlVSwgMHg0ZTA0ODM1NFUsIDB4MzkwM2IzYzJVLCAweGE3NjcyNjYxVSwgMHhkMDYwMTZm
N1UsCiAgMHg0OTY5NDc0ZFUsIDB4M2U2ZTc3ZGJVLCAweGFlZDE2YTRhVSwgMHhkOWQ2NWFkY1Us
IDB4NDBkZjBiNjZVLAogIDB4MzdkODNiZjBVLCAweGE5YmNhZTUzVSwgMHhkZWJiOWVjNVUsIDB4
NDdiMmNmN2ZVLCAweDMwYjVmZmU5VSwKICAweGJkYmRmMjFjVSwgMHhjYWJhYzI4YVUsIDB4NTNi
MzkzMzBVLCAweDI0YjRhM2E2VSwgMHhiYWQwMzYwNVUsCiAgMHhjZGQ3MDY5M1UsIDB4NTRkZTU3
MjlVLCAweDIzZDk2N2JmVSwgMHhiMzY2N2EyZVUsIDB4YzQ2MTRhYjhVLAogIDB4NWQ2ODFiMDJV
LCAweDJhNmYyYjk0VSwgMHhiNDBiYmUzN1UsIDB4YzMwYzhlYTFVLCAweDVhMDVkZjFiVSwKICAw
eDJkMDJlZjhkVQo=
--------------7C0520D1839EBA82D24BFC0F
Content-Type: application/octet-stream;
name="ltt-patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="ltt-patch.gz"
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
nzs4w/x49l9KdN+puqAAAA==
--------------7C0520D1839EBA82D24BFC0F--