This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/716: Problem when compiling ddd with g++ on alphaev56-dec-osf4.0d



>Number:         716
>Category:       c++
>Synopsis:       Problem when compiling ddd with g++ on alphaev56-dec-osf4.0d
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Oct 31 02:26:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Building ddd-3.2.1 on alphaev56-dec-osf4.0d
>Release:        unknown-1.0
>Organization:
>Environment:
gcc 2.95.2
on alphaev56-dec-osf4.0d
>Description:
c++  -DHAVE_CONFIG_H -DNDEBUG -O2 -g -W -Wall -trigraphs  -c -I. -I. -I./.. -isystem /usr/include/X11  -o HelpCB.o HelpCB.C
HelpCB.C: In function `void PopupTip(void *, XtIntervalId *)':
HelpCB.C:2155: Internal compiler error in `scan_region', at except.c:2566
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.
*** Exit 1
Stop.
>How-To-Repeat:
c++  -DHAVE_CONFIG_H -DNDEBUG -O2 -g -W -Wall -trigraphs  -c -I. -I. -I./.. -isystem /usr/include/X11  -o HelpCB.o HelpCB.C
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-unknown-content-type-cfile; name="helpCB.C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="helpCB.C"

Ly8gJElkOiBIZWxwQ0IuQyx2IDEuMTE3IDIwMDAvMDIvMTEgMDk6NTk6MTQgYW5kcmVhcyBFeHAg
JCAgLSotIEMrKyAtKi0KLy8gSW50ZXJhY3RpdmUgSGVscCBDYWxsYmFja3MKCi8vIENvcHlyaWdo
dCAoQykgMTk5OCBUZWNobmlzY2hlIFVuaXZlcnNpdGFldCBCcmF1bnNjaHdlaWcsIEdlcm1hbnku
Ci8vIFdyaXR0ZW4gYnkgQW5kcmVhcyBaZWxsZXIgPHplbGxlckBnbnUub3JnPi4KLy8gCi8vIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIERERC4KLy8gCi8vIERERCBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi8vIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgovLyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIAovLyBEREQgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLy8gYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgov
LyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8v
IAovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMKLy8gTGljZW5zZSBhbG9uZyB3aXRoIERERCAtLSBzZWUgdGhlIGZpbGUgQ09QWUlORy4K
Ly8gSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAov
LyA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgovLyAKLy8gREREIGlzIHRoZSBkYXRhIGRpc3BsYXkgZGVidWdnZXIuCi8vIEZvciBkZXRhaWxz
LCBzZWUgdGhlIERERCBXb3JsZC1XaWRlLVdlYiBwYWdlLCAKLy8gYGh0dHA6Ly93d3cuZ251Lm9y
Zy9zb2Z0d2FyZS9kZGQvJywKLy8gb3Igc2VuZCBhIG1haWwgdG8gdGhlIERERCBkZXZlbG9wZXJz
IDxkZGRAZ251Lm9yZz4uCgovLyAiREREIGlzIGZvciB3aW1wcy4iCi8vICAgICAgICAgICAgICAg
ICAgLS0gUm9iZXJ0IEJyZXNuZXIgPHJicmVzbmVyQG9sZi5jb20+CgpjaGFyIEhlbHBDQl9yY3Np
ZFtdID0KICAgICIkSWQ6IEhlbHBDQi5DLHYgMS4xMTcgMjAwMC8wMi8xMSAwOTo1OToxNCBhbmRy
ZWFzIEV4cCAkIjsKCiNpbmNsdWRlICJjb25maWcuaCIKCiNpbmNsdWRlICJBZ2VudC5oIgojaW5j
bHVkZSAiQ29tYm9Cb3guaCIKI2luY2x1ZGUgIkRlc3Ryb3lDQi5oIgojaW5jbHVkZSAiSGVscENC
LmgiCiNpbmNsdWRlICJNYWtlTWVudS5oIgojaW5jbHVkZSAiU21hcnRDLmgiCiNpbmNsdWRlICJU
aW1lT3V0LmgiCiNpbmNsdWRlICJkZGQuaCIJCS8vIHByb2Nlc3NfcGVuZGluZ19ldmVudHMoKQoj
aW5jbHVkZSAiZmluZFBhcmVudC5oIgojaW5jbHVkZSAiaXNpZC5oIgojaW5jbHVkZSAibG9uZ05h
bWUuaCIKI2luY2x1ZGUgInRvb2xiYXIuaCIKI2luY2x1ZGUgIndpbmRvd3MuaCIJCS8vIHNldF9z
Y3JvbGxlZF93aW5kb3dfc2l6ZSgpCiNpbmNsdWRlICJtaXNjLmgiCQkvLyBtaW4oKSwgbWF4KCkK
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx1bmlzdGQu
aD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCiNpbmNsdWRlIDxYbS9Y
bS5oPgojaW5jbHVkZSA8WG0vQ2FzY2FkZUIuaD4KI2luY2x1ZGUgPFhtL01haW5XLmg+CiNpbmNs
dWRlIDxYbS9NZXNzYWdlQi5oPgojaW5jbHVkZSA8WG0vU2VsZWN0aW9CLmg+CiNpbmNsdWRlIDxY
bS9Sb3dDb2x1bW4uaD4KI2luY2x1ZGUgPFhtL0xpc3QuaD4KI2luY2x1ZGUgPFhtL1RleHQuaD4K
I2luY2x1ZGUgPFhtL0xhYmVsLmg+CiNpbmNsdWRlIDxYbS9Gb3JtLmg+CiNpbmNsdWRlIDxYbS9U
ZXh0Ri5oPgojaW5jbHVkZSA8WG0vUHVzaEIuaD4KI2luY2x1ZGUgPFhtL1BhbmVkVy5oPgojaW5j
bHVkZSA8WG0vTWVudVNoZWxsLmg+CiNpbmNsdWRlIDxYbS9Ub2dnbGVCLmg+CgojaW5jbHVkZSA8
WDExL2N1cnNvcmZvbnQuaD4KI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CiNpbmNsdWRlIDxY
MTEvSW50cmluc2ljUC5oPgkvLyBMZXNzVGlmIGhhY2tzCiNpbmNsdWRlIDxYMTEvU2hlbGwuaD4K
Ci8vIE1pc2MgREREIGluY2x1ZGVzCiNpbmNsdWRlICJMZXNzVGlmSC5oIgojaW5jbHVkZSAic3Ry
Y2xhc3MuaCIKI2luY2x1ZGUgImNvb2suaCIKI2luY2x1ZGUgImV2ZW50cy5oIgojaW5jbHVkZSAi
ZXhpdC5oIgojaW5jbHVkZSAic2ltcGxlTWVudS5oIgojaW5jbHVkZSAidmVyaWZ5LmgiCiNpbmNs
dWRlICJEZWxheS5oIgojaW5jbHVkZSAiU3RyaW5nQS5oIgojaW5jbHVkZSAiSW50QXJyYXkuaCIK
I2luY2x1ZGUgIndtLmgiCiNpbmNsdWRlICJwb3N0LmgiCiNpbmNsdWRlICJteWRpYWxvZ3MuaCIK
I2luY2x1ZGUgIkFyZ0ZpZWxkLmgiCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZXNvdXJjZXMKLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKLy8gVGhlIGhlbHAgc3lzdGVtIHN1cHBvcnRzIGZpdmUgcmVzb3VyY2Vz
OgovLyBoZWxwU3RyaW5nICAgICAgICAgIC0gZGlzcGxheWVkIGluIGNvbnRleHQtc2Vuc2l0aXZl
IGhlbHAuCi8vIGhlbHBPblZlcnNpb25TdHJpbmcgLSBkaXNwbGF5ZWQgaW4gYEhlbHAgT24gVmVy
c2lvbicuCi8vIHRpcFN0cmluZyAgICAgICAgICAgLSBkaXNwbGF5ZWQgaW4gc21hbGwgd2luZG93
cyB3aGVuIGVudGVyaW5nIGJ1dHRvbnMKLy8gZG9jdW1lbnRhdGlvblN0cmluZyAtIGRpc3BsYXll
ZCBpbiB0aGUgc3RhdHVzIGxpbmUKLy8gaGVscFNob3dUaXRsZSAgICAgICAtIGlmIHNldCwgaW5j
bHVkZSB3aWRnZXQgbmFtZSBpbiBjb250ZXh0LXNlbnNpdGl2ZSBoZWxwCgpzdHJ1Y3QgaGVscF9y
ZXNvdXJjZV92YWx1ZXMgewogICAgWG1TdHJpbmcgaGVscFN0cmluZzsKICAgIEJvb2xlYW4gc2hv
d1RpdGxlOwp9OwoKc3RydWN0IGhlbHBfb25fdmVyc2lvbl9yZXNvdXJjZV92YWx1ZXMgewogICAg
WG1TdHJpbmcgaGVscE9uVmVyc2lvblN0cmluZzsKICAgIEJvb2xlYW4gc2hvd1RpdGxlOwp9OwoK
c3RydWN0IHRpcF9yZXNvdXJjZV92YWx1ZXMgewogICAgWG1TdHJpbmcgdGlwU3RyaW5nOwp9OwoK
c3RydWN0IGRvY19yZXNvdXJjZV92YWx1ZXMgewogICAgWG1TdHJpbmcgZG9jdW1lbnRhdGlvblN0
cmluZzsKfTsKCnN0YXRpYyBYdFJlc291cmNlIGhlbHBfc3VicmVzb3VyY2VzW10gPSB7CiAgICB7
CglYdE5oZWxwU3RyaW5nLAoJWHRDSGVscFN0cmluZywKCVhtUlhtU3RyaW5nLAoJc2l6ZW9mKFht
U3RyaW5nKSwKCVh0T2Zmc2V0T2YoaGVscF9yZXNvdXJjZV92YWx1ZXMsIGhlbHBTdHJpbmcpLAoJ
WHRSSW1tZWRpYXRlLAoJWHRQb2ludGVyKDApCiAgICB9LAoKICAgIHsKCVh0TmhlbHBTaG93VGl0
bGUsCglYdENIZWxwU2hvd1RpdGxlLAoJWG1SQm9vbGVhbiwKCXNpemVvZihCb29sZWFuKSwKCVh0
T2Zmc2V0T2YoaGVscF9yZXNvdXJjZV92YWx1ZXMsIHNob3dUaXRsZSksCglYdFJJbW1lZGlhdGUs
CglYdFBvaW50ZXIoRmFsc2UpCiAgICB9Cn07CgpzdGF0aWMgWHRSZXNvdXJjZSBoZWxwX29uX3Zl
cnNpb25fc3VicmVzb3VyY2VzW10gPSB7CiAgICB7CglYdE5oZWxwT25WZXJzaW9uU3RyaW5nLAoJ
WHRDSGVscE9uVmVyc2lvblN0cmluZywKCVhtUlhtU3RyaW5nLAoJc2l6ZW9mKFhtU3RyaW5nKSwK
CVh0T2Zmc2V0T2YoaGVscF9vbl92ZXJzaW9uX3Jlc291cmNlX3ZhbHVlcywgaGVscE9uVmVyc2lv
blN0cmluZyksCglYdFJJbW1lZGlhdGUsCglYdFBvaW50ZXIoMCkKICAgIH0sCgogICAgewoJWHRO
aGVscFNob3dUaXRsZSwKCVh0Q0hlbHBTaG93VGl0bGUsCglYbVJCb29sZWFuLAoJc2l6ZW9mKEJv
b2xlYW4pLAoJWHRPZmZzZXRPZihoZWxwX29uX3ZlcnNpb25fcmVzb3VyY2VfdmFsdWVzLCBzaG93
VGl0bGUpLAoJWHRSSW1tZWRpYXRlLAoJWHRQb2ludGVyKEZhbHNlKQogICAgfQp9OwoKc3RhdGlj
IFh0UmVzb3VyY2UgdGlwX3N1YnJlc291cmNlc1tdID0gewogICAgewoJWHROdGlwU3RyaW5nLAoJ
WHRDVGlwU3RyaW5nLAoJWG1SWG1TdHJpbmcsCglzaXplb2YoWG1TdHJpbmcpLAoJWHRPZmZzZXRP
Zih0aXBfcmVzb3VyY2VfdmFsdWVzLCB0aXBTdHJpbmcpLCAKCVh0UkltbWVkaWF0ZSwKCVh0UG9p
bnRlcigwKQogICAgfQp9OwoKc3RhdGljIFh0UmVzb3VyY2UgZG9jX3N1YnJlc291cmNlc1tdID0g
ewogICAgewoJWHROZG9jdW1lbnRhdGlvblN0cmluZywKCVh0Q0RvY3VtZW50YXRpb25TdHJpbmcs
CglYbVJYbVN0cmluZywKCXNpemVvZihYbVN0cmluZyksCglYdE9mZnNldE9mKGRvY19yZXNvdXJj
ZV92YWx1ZXMsIGRvY3VtZW50YXRpb25TdHJpbmcpLCAKCVh0UkltbWVkaWF0ZSwKCVh0UG9pbnRl
cigwKQogICAgfQp9OwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEYXRhCi8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
CnN0YXRpYyBXaWRnZXQgaGVscF9kaWFsb2cgPSAwOwpzdGF0aWMgV2lkZ2V0IGhlbHBfc2hlbGwg
ID0gMDsKCnN0YXRpYyBNU3RyaW5nIE5vSGVscFRleHQoV2lkZ2V0IHdpZGdldCk7CnN0YXRpYyBN
U3RyaW5nIE5vVGlwVGV4dChXaWRnZXQgd2lkZ2V0LCBYRXZlbnQgKmV2ZW50KTsKc3RhdGljIE1T
dHJpbmcgTm9Eb2N1bWVudGF0aW9uVGV4dChXaWRnZXQgd2lkZ2V0LCBYRXZlbnQgKmV2ZW50KTsK
c3RhdGljIHZvaWQgX01TdHJpbmdIZWxwQ0IoV2lkZ2V0IHdpZGdldCwgCgkJCSAgIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgCgkJCSAgIFh0UG9pbnRlciBjYWxsX2RhdGEsCgkJCSAgIGJvb2wgaGVs
cF9vbl9oZWxwID0gZmFsc2UpOwoKTVN0cmluZyBoZWxwT25WZXJzaW9uRXh0cmFUZXh0OwoKCi8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLy8gSGVscGVycwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBBIHNpbmdsZSBg
XG4nIG1lYW5zIGBubyBzdHJpbmcnLiAgKEFuIGVtcHR5IHN0cmluZyBjYXVzZXMgdGhlCi8vIGhl
bHBlcnMgdG8gYmUgY2FsbGVkLikKc3RhdGljIGJvb2wgaXNOb25lKGNvbnN0IE1TdHJpbmcmIHMp
CnsKICAgIHJldHVybiBzLmlzRW1wdHkoKSAmJiBzLmxpbmVDb3VudCgpID4gMTsKfQoKc3RhdGlj
IE1TdHJpbmcgZ2V0X2hlbHBfc3RyaW5nKFdpZGdldCB3aWRnZXQpCnsKICAgIC8vIEdldCB0ZXh0
CiAgICBoZWxwX3Jlc291cmNlX3ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdldEFwcGxpY2F0aW9uUmVz
b3VyY2VzKHdpZGdldCwgJnZhbHVlcywgCgkJCSAgICAgIGhlbHBfc3VicmVzb3VyY2VzLCBYdE51
bWJlcihoZWxwX3N1YnJlc291cmNlcyksIAoJCQkgICAgICBOVUxMLCAwKTsKCiAgICBNU3RyaW5n
IHRleHQodmFsdWVzLmhlbHBTdHJpbmcsIHRydWUpOwogICAgaWYgKCh0ZXh0LmlzTnVsbCgpIHx8
IHRleHQuaXNFbXB0eSgpKSAmJiBEZWZhdWx0SGVscFRleHQgIT0gMCkKCXRleHQgPSBEZWZhdWx0
SGVscFRleHQod2lkZ2V0KTsKICAgIGlmICh0ZXh0LmlzTnVsbCgpKQoJdGV4dCA9IE5vSGVscFRl
eHQod2lkZ2V0KTsKCiAgICBpZiAodmFsdWVzLnNob3dUaXRsZSkKCXRleHQucHJlcGVuZChybSgi
SGVscCBmb3IgIikgKyBiZihjb29rKGxvbmdOYW1lKHdpZGdldCkpKQoJCSAgICAgKyBybSgiOiIp
ICsgY3IoKSArIGNyKCkpOwoKICAgIHJldHVybiB0ZXh0Owp9CgpzdGF0aWMgTVN0cmluZyBnZXRf
aGVscF9vbl92ZXJzaW9uX3N0cmluZyhXaWRnZXQgd2lkZ2V0KQp7CiAgICAvLyBHZXQgdGV4dAog
ICAgaGVscF9vbl92ZXJzaW9uX3Jlc291cmNlX3ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdldEFwcGxp
Y2F0aW9uUmVzb3VyY2VzKHdpZGdldCwgJnZhbHVlcywgCgkJCSAgICAgIGhlbHBfb25fdmVyc2lv
bl9zdWJyZXNvdXJjZXMsIAoJCQkgICAgICBYdE51bWJlcihoZWxwX3N1YnJlc291cmNlcyksIAoJ
CQkgICAgICBOVUxMLCAwKTsKCiAgICBNU3RyaW5nIHRleHQodmFsdWVzLmhlbHBPblZlcnNpb25T
dHJpbmcsIHRydWUpOwogICAgaWYgKHRleHQuaXNOdWxsKCkgfHwgdGV4dC5pc0VtcHR5KCkpCgl0
ZXh0ID0gTm9IZWxwVGV4dCh3aWRnZXQpOwoKICAgIGlmICh2YWx1ZXMuc2hvd1RpdGxlKQoJdGV4
dC5wcmVwZW5kKHJtKCJIZWxwIG9uIHZlcnNpb24gZm9yICIpICsgYmYoY29vayhsb25nTmFtZSh3
aWRnZXQpKSkKCQkgICAgICsgcm0oIjoiKSArIGNyKCkgKyBjcigpKTsKCiAgICByZXR1cm4gdGV4
dDsKfQoKc3RhdGljIE1TdHJpbmcgX2dldF90aXBfc3RyaW5nKFdpZGdldCB3aWRnZXQsIFhFdmVu
dCAqZXZlbnQpCnsKICAgIGlmIChYbUlzVGV4dCh3aWRnZXQpKQogICAgewoJaWYgKERlZmF1bHRU
aXBUZXh0ICE9IDApCgkgICAgcmV0dXJuIERlZmF1bHRUaXBUZXh0KHdpZGdldCwgZXZlbnQpOwoJ
cmV0dXJuIE5vVGlwVGV4dCh3aWRnZXQsIGV2ZW50KTsKICAgIH0KCiAgICAvLyBHZXQgdGV4dAog
ICAgdGlwX3Jlc291cmNlX3ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdldEFwcGxpY2F0aW9uUmVzb3Vy
Y2VzKHdpZGdldCwgJnZhbHVlcywgCgkJCSAgICAgIHRpcF9zdWJyZXNvdXJjZXMsIFh0TnVtYmVy
KHRpcF9zdWJyZXNvdXJjZXMpLCAKCQkJICAgICAgTlVMTCwgMCk7CgogICAgTVN0cmluZyB0ZXh0
KHZhbHVlcy50aXBTdHJpbmcsIHRydWUpOwogICAgaWYgKHRleHQuaXNOdWxsKCkgfHwgaXNOb25l
KHRleHQpKQoJcmV0dXJuIE5vVGlwVGV4dCh3aWRnZXQsIGV2ZW50KTsKCiAgICBpZiAodGV4dC5p
c0VtcHR5KCkpCiAgICB7CglpZiAoRGVmYXVsdFRpcFRleHQgIT0gMCkKCSAgICByZXR1cm4gRGVm
YXVsdFRpcFRleHQod2lkZ2V0LCBldmVudCk7CglyZXR1cm4gTm9UaXBUZXh0KHdpZGdldCwgZXZl
bnQpOwogICAgfQoKICAgIHJldHVybiB0ZXh0Owp9CgpzdGF0aWMgTVN0cmluZyBwcmVwZW5kX2xh
YmVsX25hbWUoV2lkZ2V0IHdpZGdldCwgWEV2ZW50ICpldmVudCwgCgkJCQkgIE1TdHJpbmcgKCpn
ZXRfc3RyaW5nKShXaWRnZXQsIFhFdmVudCAqKSkKewogICAgTVN0cmluZyB0ZXh0ID0gZ2V0X3N0
cmluZyh3aWRnZXQsIGV2ZW50KTsKCiNpZiAwCQkJCS8vIEV4cGVyaW1lbnRhbAogICAgaWYgKFh0
SXNTdWJjbGFzcyh3aWRnZXQsIHhtTGFiZWxXaWRnZXRDbGFzcykpCiAgICB7Cgl1bnNpZ25lZCBj
aGFyIGxhYmVsX3R5cGUgPSBYbVNUUklORzsKCVh0VmFHZXRWYWx1ZXMod2lkZ2V0LCBYbU5sYWJl
bFR5cGUsICZsYWJlbF90eXBlLCBOVUxMKTsKCWlmIChsYWJlbF90eXBlID09IFhtUElYTUFQKQoJ
ewoJICAgIFhtU3RyaW5nIGxhYmVsID0gMDsKCSAgICBYdFZhR2V0VmFsdWVzKHdpZGdldCwgWG1O
bGFiZWxTdHJpbmcsICZsYWJlbCwgTlVMTCk7CgkgICAgaWYgKGxhYmVsICE9IDApCgkgICAgewoJ
CXRleHQgPSBNU3RyaW5nKGxhYmVsLCB0cnVlKSArIHJtKCI6ICIpICsgdGV4dDsKCQlYbVN0cmlu
Z0ZyZWUobGFiZWwpOwoJICAgIH0KCX0KICAgIH0KI2VuZGlmCgogICAgcmV0dXJuIHRleHQ7Cn0K
CmlubGluZSBNU3RyaW5nIGdldF90aXBfc3RyaW5nKFdpZGdldCB3aWRnZXQsIFhFdmVudCAqZXZl
bnQpCnsKICAgIHJldHVybiBwcmVwZW5kX2xhYmVsX25hbWUod2lkZ2V0LCBldmVudCwgX2dldF90
aXBfc3RyaW5nKTsKfQoKCnN0YXRpYyBNU3RyaW5nIF9nZXRfZG9jdW1lbnRhdGlvbl9zdHJpbmco
V2lkZ2V0IHdpZGdldCwgWEV2ZW50ICpldmVudCkKewogICAgaWYgKFhtSXNUZXh0KHdpZGdldCkp
CiAgICB7CglpZiAoRGVmYXVsdERvY3VtZW50YXRpb25UZXh0ICE9IDApCgkgICAgcmV0dXJuIERl
ZmF1bHREb2N1bWVudGF0aW9uVGV4dCh3aWRnZXQsIGV2ZW50KTsKCXJldHVybiBOb0RvY3VtZW50
YXRpb25UZXh0KHdpZGdldCwgZXZlbnQpOwogICAgfQoKICAgIC8vIEdldCB0ZXh0CiAgICBkb2Nf
cmVzb3VyY2VfdmFsdWVzIHZhbHVlczsKICAgIFh0R2V0QXBwbGljYXRpb25SZXNvdXJjZXMod2lk
Z2V0LCAmdmFsdWVzLCAKCQkJICAgICAgZG9jX3N1YnJlc291cmNlcywgWHROdW1iZXIoZG9jX3N1
YnJlc291cmNlcyksIAoJCQkgICAgICBOVUxMLCAwKTsKCiAgICBNU3RyaW5nIHRleHQodmFsdWVz
LmRvY3VtZW50YXRpb25TdHJpbmcsIHRydWUpOwogICAgaWYgKHRleHQuaXNOdWxsKCkpCglyZXR1
cm4gZ2V0X3RpcF9zdHJpbmcod2lkZ2V0LCBldmVudCk7CgogICAgaWYgKGlzTm9uZSh0ZXh0KSkK
CXJldHVybiBOb0RvY3VtZW50YXRpb25UZXh0KHdpZGdldCwgZXZlbnQpOwoKICAgIGlmICh0ZXh0
LmlzRW1wdHkoKSkKICAgIHsKCWlmIChEZWZhdWx0RG9jdW1lbnRhdGlvblRleHQgIT0gMCkKCSAg
ICByZXR1cm4gRGVmYXVsdERvY3VtZW50YXRpb25UZXh0KHdpZGdldCwgZXZlbnQpOwoJcmV0dXJu
IE5vRG9jdW1lbnRhdGlvblRleHQod2lkZ2V0LCBldmVudCk7CiAgICB9CgogICAgcmV0dXJuIHRl
eHQ7Cn0KCmlubGluZSBNU3RyaW5nIGdldF9kb2N1bWVudGF0aW9uX3N0cmluZyhXaWRnZXQgd2lk
Z2V0LCBYRXZlbnQgKmV2ZW50KQp7CiAgICByZXR1cm4gcHJlcGVuZF9sYWJlbF9uYW1lKHdpZGdl
dCwgZXZlbnQsIF9nZXRfZG9jdW1lbnRhdGlvbl9zdHJpbmcpOwp9CgoKc3RhdGljIGJvb2wgY2Fs
bF90cmFja2luZ19oZWxwKFh0UG9pbnRlciBjYWxsX2RhdGEsIGJvb2wga2V5X29ubHkgPSBmYWxz
ZSkKewogICAgWG1BbnlDYWxsYmFja1N0cnVjdCAqY2JzID0gKFhtQW55Q2FsbGJhY2tTdHJ1Y3Qg
KiljYWxsX2RhdGE7CgogICAgaWYgKGNicyA9PSAwKQoJcmV0dXJuIGtleV9vbmx5OwoKICAgIGlm
IChjYnMtPmV2ZW50ID09IDApCglyZXR1cm4ga2V5X29ubHk7CgogICAgaWYgKGNicy0+ZXZlbnQt
PnR5cGUgIT0gS2V5UHJlc3MgJiYgY2JzLT5ldmVudC0+dHlwZSAhPSBLZXlSZWxlYXNlKQoJcmV0
dXJuIGtleV9vbmx5OwoKICAgIGlmICgoY2JzLT5ldmVudC0+eGtleS5zdGF0ZSAmIFNoaWZ0TWFz
aykgPT0gMCkKCXJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIHZvaWQg
bm9wMShXaWRnZXQpIHt9CnZvaWQgKCpQb3N0SGVscE9uSXRlbUhvb2spKFdpZGdldCkgPSBub3Ax
OwoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRnVuY3Rpb25zCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnZvaWQg
SGVscE9uSGVscENCKFdpZGdldCB3aWRnZXQsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIGNhbGxfZGF0YSkKewogICAgaWYgKGhlbHBfZGlhbG9nID09IDApCiAgICB7CgkvLyBNYWtl
IHN1cmUgaGVscCBkaWFsb2cgaXMgY3JlYXRlZAoJSW1tZWRpYXRlSGVscENCKHdpZGdldCwgY2xp
ZW50X2RhdGEsIGNhbGxfZGF0YSk7CiAgICB9CgogICAgLy8gR2V0IGhlbHAgb24gdGhlIGhlbHAg
ZGlhbG9nCiAgICBNU3RyaW5nIHRleHQgPSBnZXRfaGVscF9zdHJpbmcoaGVscF9kaWFsb2cpOwog
ICAgX01TdHJpbmdIZWxwQ0Iod2lkZ2V0LCBYdFBvaW50ZXIodGV4dC54bXN0cmluZygpKSwgY2Fs
bF9kYXRhLCB0cnVlKTsKCiAgICBQb3N0SGVscE9uSXRlbUhvb2soaGVscF9kaWFsb2cpOwp9Cgp2
b2lkIEltbWVkaWF0ZUhlbHBDQihXaWRnZXQgd2lkZ2V0LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IFh0UG9pbnRlciBjYWxsX2RhdGEpCnsKICAgIGlmICh3aWRnZXQgPT0gMCkKCXJldHVybjsKCiAg
ICBpZiAoY2FsbF90cmFja2luZ19oZWxwKGNhbGxfZGF0YSkpCiAgICB7CglIZWxwT25Db250ZXh0
Q0Iod2lkZ2V0LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKTsKCXJldHVybjsKICAgIH0KCiAgICBE
ZWxheSBkZWxheTsKCiAgICAvLyBHZXQgaGVscCBvbiB0aGlzIHdpZGdldAogICAgTVN0cmluZyB0
ZXh0ID0gZ2V0X2hlbHBfc3RyaW5nKHdpZGdldCk7CiAgICBNU3RyaW5nSGVscENCKHdpZGdldCwg
WHRQb2ludGVyKHRleHQueG1zdHJpbmcoKSksIGNhbGxfZGF0YSk7CiAgICBQb3N0SGVscE9uSXRl
bUhvb2sod2lkZ2V0KTsKfQoKdm9pZCBIZWxwT25UaGlzQ0IoV2lkZ2V0IHdpZGdldCwgWHRQb2lu
dGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQp7CiAgICBpZiAod2lkZ2V0ID09
IDApCglyZXR1cm47CgogICAgaWYgKGNhbGxfdHJhY2tpbmdfaGVscChjYWxsX2RhdGEpKQogICAg
ewoJSGVscE9uQ29udGV4dENCKHdpZGdldCwgY2xpZW50X2RhdGEsIGNhbGxfZGF0YSk7CglyZXR1
cm47CiAgICB9CgogICAgRGVsYXkgZGVsYXk7CgogICAgV2lkZ2V0IHcgPSAoV2lkZ2V0KWNsaWVu
dF9kYXRhOwoJCiAgICAvLyBHZXQgaGVscCBvbiB0aGlzIHdpZGdldAogICAgTVN0cmluZyB0ZXh0
ID0gZ2V0X2hlbHBfc3RyaW5nKHcpOwogICAgTVN0cmluZ0hlbHBDQih3aWRnZXQsIFh0UG9pbnRl
cih0ZXh0Lnhtc3RyaW5nKCkpLCBjYWxsX2RhdGEpOwogICAgUG9zdEhlbHBPbkl0ZW1Ib29rKHcp
Owp9Cgp2b2lkIEhlbHBPbldpbmRvd0NCKFdpZGdldCB3aWRnZXQsIFh0UG9pbnRlciBjbGllbnRf
ZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKewogICAgaWYgKGNhbGxfdHJhY2tpbmdfaGVscChj
YWxsX2RhdGEpKQogICAgewoJSGVscE9uQ29udGV4dENCKHdpZGdldCwgY2xpZW50X2RhdGEsIGNh
bGxfZGF0YSk7CglyZXR1cm47CiAgICB9CgogICAgRGVsYXkgZGVsYXk7CgogICAgLy8gR2V0IGhl
bHAgb24gdGhlIHNoZWxsIHdpbmRvdwogICAgV2lkZ2V0IHNoZWxsID0gZmluZFRvcExldmVsU2hl
bGxQYXJlbnQod2lkZ2V0KTsKCiAgICBNU3RyaW5nIHRleHQgPSBnZXRfaGVscF9zdHJpbmcoc2hl
bGwpOwogICAgTVN0cmluZ0hlbHBDQih3aWRnZXQsIFh0UG9pbnRlcih0ZXh0Lnhtc3RyaW5nKCkp
LCBjYWxsX2RhdGEpOwogICAgUG9zdEhlbHBPbkl0ZW1Ib29rKHNoZWxsKTsKfQoKdm9pZCBIZWxw
T25WZXJzaW9uQ0IoV2lkZ2V0IHdpZGdldCwgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50
ZXIgY2FsbF9kYXRhKQp7CiAgICBpZiAoY2FsbF90cmFja2luZ19oZWxwKGNhbGxfZGF0YSkpCiAg
ICB7CglIZWxwT25Db250ZXh0Q0Iod2lkZ2V0LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhKTsKCXJl
dHVybjsKICAgIH0KCiAgICBEZWxheSBkZWxheTsKCiAgICAvLyBHZXQgYSBzaGVsbCB3aW5kb3cK
ICAgIFdpZGdldCBzaGVsbCA9IGZpbmRUb3BMZXZlbFNoZWxsUGFyZW50KHdpZGdldCk7CgogICAg
TVN0cmluZyB0ZXh0ID0gZ2V0X2hlbHBfb25fdmVyc2lvbl9zdHJpbmcoc2hlbGwpOwogICAgdGV4
dCArPSBoZWxwT25WZXJzaW9uRXh0cmFUZXh0OwoKICAgIF9NU3RyaW5nSGVscENCKHdpZGdldCwg
WHRQb2ludGVyKHRleHQueG1zdHJpbmcoKSksIGNhbGxfZGF0YSwgZmFsc2UpOwoKICAgIC8vIFBv
c3RIZWxwT25JdGVtSG9vayhzaGVsbCk7Cn0KCnN0YXRpYyB2b2lkIEhlbHBEZXN0cm95Q0IoV2lk
Z2V0LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlcikKewogICAgV2lkZ2V0IG9sZF9k
aWFsb2cgPSBXaWRnZXQoY2xpZW50X2RhdGEpOwogICAgaWYgKG9sZF9kaWFsb2cgPT0gaGVscF9k
aWFsb2cpCiAgICB7CgloZWxwX2RpYWxvZyA9IDA7CgloZWxwX3NoZWxsICA9IDA7CiAgICB9Cn0K
CgovLyBEZWZhdWx0IGhlbHAsIHRpcCwgYW5kIGRvY3VtZW50YXRpb24gc3RyaW5ncwpzdGF0aWMg
TVN0cmluZyBOb0hlbHBUZXh0KFdpZGdldCB3aWRnZXQpCnsKICAgIE1TdHJpbmcgdGV4dCA9ICJO
byBoZWxwIGF2YWlsYWJsZSBmb3IgXCIiOwogICAgdGV4dCArPSBjb29rKGxvbmdOYW1lKHdpZGdl
dCkpOwogICAgdGV4dCArPSAiXCIiOwoKICAgIHJldHVybiB0ZXh0Owp9CgpzdGF0aWMgTVN0cmlu
ZyBOb1RpcFRleHQoV2lkZ2V0LCBYRXZlbnQgKikKewogICAgcmV0dXJuIE1TdHJpbmcoMCwgdHJ1
ZSk7CS8vIEVtcHR5IHN0cmluZwp9CgpzdGF0aWMgTVN0cmluZyBOb0RvY3VtZW50YXRpb25UZXh0
KFdpZGdldCwgWEV2ZW50ICopCnsKICAgIHJldHVybiBNU3RyaW5nKDAsIHRydWUpOwkvLyBFbXB0
eSBzdHJpbmcKfQoKc3RhdGljIFhtVGV4dFBvc2l0aW9uIE5vVGV4dFBvc09mRXZlbnQoV2lkZ2V0
LCBYRXZlbnQgKikKewogICAgcmV0dXJuIFhtVGV4dFBvc2l0aW9uKC0xKTsKfQoKTVN0cmluZyAo
KkRlZmF1bHRIZWxwVGV4dCkoV2lkZ2V0KSAgICAgICAgICAgICAgICAgICAgPSBOb0hlbHBUZXh0
OwpNU3RyaW5nICgqRGVmYXVsdFRpcFRleHQpKFdpZGdldCwgWEV2ZW50ICopICAgICAgICAgICA9
IE5vVGlwVGV4dDsKTVN0cmluZyAoKkRlZmF1bHREb2N1bWVudGF0aW9uVGV4dCkoV2lkZ2V0LCBY
RXZlbnQgKikgPSBOb0RvY3VtZW50YXRpb25UZXh0OwpYbVRleHRQb3NpdGlvbiAoKlRleHRQb3NP
ZkV2ZW50KShXaWRnZXQsIFhFdmVudCAqKSAgICA9IE5vVGV4dFBvc09mRXZlbnQ7CgoKdm9pZCAo
KkRpc3BsYXlEb2N1bWVudGF0aW9uKShjb25zdCBNU3RyaW5nJikgPSAwOwoKdm9pZCBTdHJpbmdI
ZWxwQ0IoV2lkZ2V0IHdpZGdldCwgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2Fs
bF9kYXRhKQp7CiAgICBNU3RyaW5nIHRleHQgPSAoU3RyaW5nKWNsaWVudF9kYXRhOwoKICAgIE1T
dHJpbmdIZWxwQ0Iod2lkZ2V0LCB0ZXh0Lnhtc3RyaW5nKCksIGNhbGxfZGF0YSk7Cn0KCnZvaWQg
TVN0cmluZ0hlbHBDQihXaWRnZXQgd2lkZ2V0LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9p
bnRlciBjYWxsX2RhdGEpCnsKICAgIF9NU3RyaW5nSGVscENCKHdpZGdldCwgY2xpZW50X2RhdGEs
IGNhbGxfZGF0YSk7Cn0KCnN0YXRpYyB2b2lkIF9NU3RyaW5nSGVscENCKFdpZGdldCB3aWRnZXQs
IAoJCQkgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAoJCQkgICBYdFBvaW50ZXIsCgkJCSAgIGJv
b2wgaGVscF9vbl9oZWxwKQp7CiAgICBYbVN0cmluZyB0ZXh0ID0gKFhtU3RyaW5nKWNsaWVudF9k
YXRhOwoKICAgIEFyZyBhcmdzWzEwXTsKICAgIENhcmRpbmFsIGFyZyA9IDA7CiAgICBYdFNldEFy
ZyhhcmdzW2FyZ10sIFhtTm1lc3NhZ2VTdHJpbmcsIHRleHQpOyBhcmcrKzsKCiAgICBXaWRnZXQg
c2hlbGwgPSBmaW5kVG9wTGV2ZWxTaGVsbFBhcmVudCh3aWRnZXQpOwogICAgaWYgKHNoZWxsID09
IDApCglzaGVsbCA9IHdpZGdldDsKCiAgICBpZiAoaGVscF9kaWFsb2cgJiYgKHNoZWxsICE9IGhl
bHBfc2hlbGwpKQogICAgewoJRGVzdHJveVdoZW5JZGxlKGhlbHBfZGlhbG9nKTsKCWhlbHBfZGlh
bG9nID0gMDsKICAgIH0KCiAgICBoZWxwX3NoZWxsICA9IHNoZWxsOwoKICAgIGlmIChoZWxwX2Rp
YWxvZyA9PSAwKQogICAgewoJLy8gQnVpbGQgaGVscF9kaWFsb2cKCVh0U2V0QXJnKGFyZ3NbYXJn
XSwgWG1OZGVsZXRlUmVzcG9uc2UsIFhtVU5NQVApOyBhcmcrKzsKCgloZWxwX2RpYWxvZyA9IAoJ
ICAgIHZlcmlmeShYbUNyZWF0ZUluZm9ybWF0aW9uRGlhbG9nKHNoZWxsLCAiaGVscCIsIGFyZ3Ms
IGFyZykpOwoJRGVsYXk6OnJlZ2lzdGVyX3NoZWxsKGhlbHBfZGlhbG9nKTsKCVh0QWRkQ2FsbGJh
Y2soaGVscF9kaWFsb2csIFhtTmhlbHBDYWxsYmFjaywKCQkgICAgICBIZWxwT25IZWxwQ0IsIDAp
OwoJWHRBZGRDYWxsYmFjayhoZWxwX2RpYWxvZywgWHROZGVzdHJveUNhbGxiYWNrLCAKCQkgICAg
ICBIZWxwRGVzdHJveUNCLCBYdFBvaW50ZXIoaGVscF9kaWFsb2cpKTsKCglYdFVubWFuYWdlQ2hp
bGQoWG1NZXNzYWdlQm94R2V0Q2hpbGQoaGVscF9kaWFsb2csIAoJCQkJCSAgICAgWG1ESUFMT0df
Q0FOQ0VMX0JVVFRPTikpOwogICAgfQogICAgZWxzZQogICAgewoJLy8gU2V0dXAgdGV4dCBmb3Ig
ZXhpc3RpbmcgZGlhbG9nCglYdFNldFZhbHVlcyhoZWxwX2RpYWxvZywgYXJncywgYXJnKTsKICAg
IH0KCiAgICAvLyBJZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIGRpc2FibGUgdGhlIGhlbHAg
YnV0dG9uCiAgICBXaWRnZXQgaGVscF9idXR0b24gPSAKCVhtTWVzc2FnZUJveEdldENoaWxkKGhl
bHBfZGlhbG9nLCBYbURJQUxPR19IRUxQX0JVVFRPTik7CiAgICBzZXRfc2Vuc2l0aXZlKGhlbHBf
YnV0dG9uLCAhaGVscF9vbl9oZWxwKTsKCiAgICAvLyBQb3B1cCBoZWxwX2RpYWxvZwogICAgbWFu
YWdlX2FuZF9yYWlzZShoZWxwX2RpYWxvZyk7Cn0KCgpzdGF0aWMgdm9pZCBIZWxwSW5kZXhDQihX
aWRnZXQgd2lkZ2V0LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAoJCQlYdFBvaW50ZXIgY2FsbF9k
YXRhKQp7CiAgICBEZWxheSBkZWxheTsKCiAgICBYbUxpc3RDYWxsYmFja1N0cnVjdCAqY2JzID0g
KFhtTGlzdENhbGxiYWNrU3RydWN0ICopY2FsbF9kYXRhOwogICAgV2lkZ2V0IGhlbHBfbWFuID0g
V2lkZ2V0KGNsaWVudF9kYXRhKTsKICAgIGludCBpbmRleCA9IGNicy0+aXRlbV9wb3NpdGlvbjsK
CiAgICB2b2lkICp1c2VyRGF0YSA9IDA7CiAgICBYdFZhR2V0VmFsdWVzKHdpZGdldCwgWG1OdXNl
ckRhdGEsICZ1c2VyRGF0YSwgTlVMTCk7CiAgICBYbVRleHRQb3NpdGlvbiAqcG9zaXRpb25zID0g
KFhtVGV4dFBvc2l0aW9uICopdXNlckRhdGE7CiAgICBpZiAocG9zaXRpb25zID09IDApCglyZXR1
cm47CQkJLy8gTm90IHlldCBzZXQKCiAgICBYbVRleHRQb3NpdGlvbiBwb3MgPSBwb3NpdGlvbnNb
aW5kZXggLSAxXTsKCiAgICBYbVRleHRTZXRJbnNlcnRpb25Qb3NpdGlvbihoZWxwX21hbiwgcG9z
KTsKICAgIFhtVGV4dFNldFRvcENoYXJhY3RlcihoZWxwX21hbiwgcG9zKTsKICAgIFhtVGV4dFNo
b3dQb3NpdGlvbihoZWxwX21hbiwgcG9zKTsKfQoKCi8vIEFjdGl2YXRlIHRoZSBidXR0b24gZ2l2
ZW4gaW4gQ0xJRU5UX0RBVEEKc3RhdGljIHZvaWQgQWN0aXZhdGVDQihXaWRnZXQsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgCgkJICAgICAgIFh0UG9pbnRlciBjYWxsX2RhdGEpCnsKICAgIFhtQW55
Q2FsbGJhY2tTdHJ1Y3QgKmNicyA9IChYbUFueUNhbGxiYWNrU3RydWN0ICopY2FsbF9kYXRhOwog
ICAgCiAgICBXaWRnZXQgYnV0dG9uID0gV2lkZ2V0KGNsaWVudF9kYXRhKTsKICAgIFh0Q2FsbEFj
dGlvblByb2MoYnV0dG9uLCAiQXJtQW5kQWN0aXZhdGUiLCBjYnMtPmV2ZW50LCAoU3RyaW5nICop
MCwgMCk7Cn0KCnN0cnVjdCBGaW5kSW5mbyB7CiAgICBXaWRnZXQga2V5OwkJCS8vIFRoZSB0ZXh0
IGZpZWxkIGhvbGRpbmcgdGhlIHNlYXJjaCBrZXkgCiAgICBXaWRnZXQgdGV4dDsJCS8vIFRoZSB0
ZXh0IHRvIGJlIHNlYXJjaGVkCn07CgpzdGF0aWMgYm9vbCBsb2NrX3VwZGF0ZV9hcmcgPSBmYWxz
ZTsKCnN0YXRpYyB2b2lkIEZpbmRDQihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBY
dFBvaW50ZXIgY2FsbF9kYXRhLAoJCSAgIGJvb2wgZm9yd2FyZCkKewogICAgRGVsYXkgZGVsYXk7
CgogICAgWG1BbnlDYWxsYmFja1N0cnVjdCAqY2JzID0gKFhtQW55Q2FsbGJhY2tTdHJ1Y3QgKilj
YWxsX2RhdGE7CgogICAgRmluZEluZm8gKmZpID0gKEZpbmRJbmZvICopY2xpZW50X2RhdGE7Cgog
ICAgU3RyaW5nIGtleV9zID0gWG1UZXh0RmllbGRHZXRTdHJpbmcoZmktPmtleSk7CiAgICBzdHJp
bmcga2V5KGtleV9zKTsKICAgIFh0RnJlZShrZXlfcyk7CgogICAgc3RhdGljIFN0cmluZ0FycmF5
IGZpbmRfa2V5czsKCiAgICBpbnQgbmV4dF9vY2N1cnJlbmNlID0gLTE7CiAgICBpZiAoa2V5ICE9
ICIiKQogICAgewoJZmluZF9rZXlzICs9IGtleTsKCXNtYXJ0X3NvcnQoZmluZF9rZXlzKTsKCXVu
aXEoZmluZF9rZXlzKTsKCUNvbWJvQm94U2V0TGlzdChmaS0+a2V5LCBmaW5kX2tleXMpOwoKCVN0
cmluZyB0ZXh0X3MgPSBYbVRleHRHZXRTdHJpbmcoZmktPnRleHQpOwoJc3RyaW5nIHRleHQodGV4
dF9zKTsKCVh0RnJlZSh0ZXh0X3MpOwoKCS8vIElmIG5vIHVwcGVyY2FzZSBsZXR0ZXIgaXMgaW4g
S0VZLCBtYWtlIFRFWFQgbG93ZXJjYXNlCglpZiAoa2V5ID09IGRvd25jYXNlKGtleSkpCgkgICAg
dGV4dC5kb3duY2FzZSgpOwoKCVhtVGV4dFBvc2l0aW9uIGN1cnNvciA9IFhtVGV4dEdldEluc2Vy
dGlvblBvc2l0aW9uKGZpLT50ZXh0KTsKCglpZiAoZm9yd2FyZCkKCXsKCSAgICBuZXh0X29jY3Vy
cmVuY2UgPSB0ZXh0LmluZGV4KGtleSwgY3Vyc29yKTsKCSAgICBpZiAobmV4dF9vY2N1cnJlbmNl
IDwgMCkKCQluZXh0X29jY3VycmVuY2UgPSB0ZXh0LmluZGV4KGtleSk7IC8vIFdyYXAgYXJvdW5k
Cgl9CgllbHNlCgl7CgkgICAgbmV4dF9vY2N1cnJlbmNlID0gdGV4dC5pbmRleChrZXksIGN1cnNv
ciAtIHRleHQubGVuZ3RoKCkgLSAxKTsKCSAgICBpZiAobmV4dF9vY2N1cnJlbmNlIDwgMCkKCQlu
ZXh0X29jY3VycmVuY2UgPSB0ZXh0LmluZGV4KGtleSwgLTEpOyAvLyBXcmFwIGFyb3VuZAoJfQog
ICAgfQoKICAgIGlmIChuZXh0X29jY3VycmVuY2UgPCAwKQogICAgewoJLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGluIHNvbWUgc3RhdHVzIGxpbmUuICBVbmZvcnR1bmF0ZWx5LAoJLy8gd2UgZG9u
J3QgaGF2ZSBhbnkuLi4KCXBvc3Rfd2FybmluZyhxdW90ZShrZXkpICsgIiBub3QgZm91bmQuIiwg
Im1hbnVhbF9maW5kX2Vycm9yIiwgdyk7CiAgICB9CiAgICBlbHNlCiAgICB7CgkvLyBMZXNzVGlm
IDAuNzkgc29tZXRpbWVzIHJldHVybnMgTlVMTCBpbiBjYnMtPmV2ZW50LiAgSGFuZGxlIHRoaXMu
CglUaW1lIHRtOwoJaWYgKGNicy0+ZXZlbnQgIT0gMCkKCSAgICB0bSA9IHRpbWUoY2JzLT5ldmVu
dCk7CgllbHNlCgkgICAgdG0gPSBYdExhc3RUaW1lc3RhbXBQcm9jZXNzZWQoWHREaXNwbGF5KGZp
LT50ZXh0KSk7CgoJbG9ja191cGRhdGVfYXJnID0gdHJ1ZTsKCglYbVRleHRTZXRTZWxlY3Rpb24o
ZmktPnRleHQsCgkJCSAgIG5leHRfb2NjdXJyZW5jZSwKCQkJICAgbmV4dF9vY2N1cnJlbmNlICsg
a2V5Lmxlbmd0aCgpLAoJCQkgICB0bSk7CglpZiAoZm9yd2FyZCkKCXsKCSAgICBYbVRleHRTZXRJ
bnNlcnRpb25Qb3NpdGlvbihmaS0+dGV4dCwgCgkJCQkgICAgICAgbmV4dF9vY2N1cnJlbmNlICsg
a2V5Lmxlbmd0aCgpKTsKCX0KCWVsc2UKCXsKCSAgICBYbVRleHRTZXRJbnNlcnRpb25Qb3NpdGlv
bihmaS0+dGV4dCwgbmV4dF9vY2N1cnJlbmNlKTsKCX0KCglsb2NrX3VwZGF0ZV9hcmcgPSBmYWxz
ZTsKICAgIH0KfQoKCi8vIEZpbmQgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIGNv
bnRhaW5lZCBpbiB0aGUgd2lkZ2V0IAovLyBnaXZlbiBpbiBDTElFTlRfREFUQQpzdGF0aWMgdm9p
ZCBGaW5kRm9yd2FyZENCKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRl
ciBjYWxsX2RhdGEpCnsKICAgIEZpbmRDQih3LCBjbGllbnRfZGF0YSwgY2FsbF9kYXRhLCB0cnVl
KTsKfQoKLy8gRmluZCB0aGUgcHJldmlvdXMgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIGNvbnRh
aW5lZCBpbiB0aGUgd2lkZ2V0IAovLyBnaXZlbiBpbiBDTElFTlRfREFUQQpzdGF0aWMgdm9pZCBG
aW5kQmFja3dhcmRDQihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKCQkJICAgWHRQ
b2ludGVyIGNhbGxfZGF0YSkKewogICAgRmluZENCKHcsIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEs
IGZhbHNlKTsKfQoKLy8gSGlnaGxpZ2h0IGN1cnJlbnQgc2VjdGlvbiBhZnRlciBjdXJzb3IgbW90
aW9uCnN0YXRpYyB2b2lkIEhpZ2hsaWdodFNlY3Rpb25DQihXaWRnZXQsIFh0UG9pbnRlciBjbGll
bnRfZGF0YSwgCgkJCSAgICAgICBYdFBvaW50ZXIgY2FsbF9kYXRhKQp7CiAgICBYbVRleHRWZXJp
ZnlDYWxsYmFja1N0cnVjdCAqY2JzID0gKFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0ICopY2Fs
bF9kYXRhOwogICAgV2lkZ2V0IGxpc3QgPSBXaWRnZXQoY2xpZW50X2RhdGEpOwoKICAgIFhtVGV4
dFBvc2l0aW9uIGN1cnNvciA9IGNicy0+bmV3SW5zZXJ0OwoKICAgIHZvaWQgKnVzZXJEYXRhID0g
MDsKICAgIFh0VmFHZXRWYWx1ZXMobGlzdCwgWG1OdXNlckRhdGEsICZ1c2VyRGF0YSwgTlVMTCk7
CiAgICBYbVRleHRQb3NpdGlvbiAqcG9zaXRpb25zID0gKFhtVGV4dFBvc2l0aW9uICopdXNlckRh
dGE7CiAgICBpZiAocG9zaXRpb25zID09IDApCglyZXR1cm47CQkJLy8gTm90IHlldCBzZXQKCiAg
ICBpbnQgcG9zID0gMDsKICAgIHdoaWxlIChwb3NpdGlvbnNbcG9zXSA8PSBjdXJzb3IpCglwb3Mr
KzsKCiAgICBMaXN0U2V0QW5kU2VsZWN0UG9zKGxpc3QsIHBvcyk7Cn0KCnN0YXRpYyB2b2lkIFNl
dFNlbGVjdGlvbkNCKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAoJCQkgICBYdFBv
aW50ZXIgY2FsbF9kYXRhKQp7CiAgICBpZiAobG9ja191cGRhdGVfYXJnKQoJcmV0dXJuOwoKICAg
IEFyZ0ZpZWxkICphcmdfZmllbGQgPSAoQXJnRmllbGQgKiljbGllbnRfZGF0YTsKCiAgICBzdHJp
bmcgc2VsZWN0aW9uID0gIiI7CiAgICBTdHJpbmcgX3NlbGVjdGlvbiA9IFhtVGV4dEdldFNlbGVj
dGlvbih3KTsKICAgIGlmIChfc2VsZWN0aW9uICE9IDApCiAgICB7CglzZWxlY3Rpb24gPSBfc2Vs
ZWN0aW9uOwoJWHRGcmVlKF9zZWxlY3Rpb24pOwogICAgfQogICAgZWxzZQogICAgewoJLy8gTm8g
c2VsZWN0aW9uIC0gZ2V0IHdvcmQgYXQgY3Vyc29yCglYbVRleHRWZXJpZnlDYWxsYmFja1N0cnVj
dCAqY2JzID0gCgkgICAgKFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0ICopY2FsbF9kYXRhOwoJ
WG1UZXh0UG9zaXRpb24gY3Vyc29yID0gY2JzLT5uZXdJbnNlcnQ7CglTdHJpbmcgdGV4dCA9IFht
VGV4dEdldFN0cmluZyh3KTsKCVhtVGV4dFBvc2l0aW9uIHN0YXJ0cG9zLCBlbmRwb3M7CglzdGFy
dHBvcyA9IGVuZHBvcyA9IGN1cnNvcjsKCgl3aGlsZSAoc3RhcnRwb3MgPiAwICYmIGlzaWQodGV4
dFtzdGFydHBvcyAtIDFdKSkKCSAgICBzdGFydHBvcy0tOwoJd2hpbGUgKHRleHRbZW5kcG9zXSAh
PSAnXDAnICYmIGlzaWQodGV4dFtlbmRwb3NdKSkKCSAgICBlbmRwb3MrKzsKCglpZiAoZW5kcG9z
ID4gc3RhcnRwb3MpCgkgICAgc2VsZWN0aW9uID0gc3RyaW5nKHRleHQgKyBzdGFydHBvcywgZW5k
cG9zIC0gc3RhcnRwb3MpOwogICAgfQoKICAgIGlmIChzZWxlY3Rpb24gIT0gIiIpCiAgICB7Cglz
ZWxlY3Rpb24uZG93bmNhc2UoKTsKCXdoaWxlIChzZWxlY3Rpb24uY29udGFpbnMoJ1xuJykpCgkg
ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmFmdGVyKCdcbicpOwoJYXJnX2ZpZWxkLT5zZXRfc3Ry
aW5nKHNlbGVjdGlvbik7CiAgICB9Cn0KCi8vIFJldHVybiB0cnVlIGlmZiBURVhUIGNvbnRhaW5z
IGEgbWFudWFsIGhlYWRlciBsaW5lIGF0IHBvcwpzdGF0aWMgYm9vbCBoYXNfaGVhZGVyKGNoYXIg
KnRleHQsIHVuc2lnbmVkIHBvcykKewogICAgaWYgKHRleHRbcG9zXSAhPSAnXDAnCgkmJiAhaXNz
cGFjZSh0ZXh0W3Bvc10pCgkmJiAocG9zID09IDAgfHwgdGV4dFtwb3MgLSAxXSA9PSAnXG4nKQoJ
JiYgdGV4dFtwb3MgKyAxXSAhPSAnXGInKQogICAgewoJLy8gTm9uLWhpZ2hsaWdodGVkIGNoYXJh
Y3RlciBpbiBjb2x1bW4gMQoJcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9
CgovLyBOb3RlOiBhc3N1bWVzIGBtYW4nIG9yIGBpbmZvJyBmb3JtYXQuCnZvaWQgTWFudWFsU3Ry
aW5nSGVscENCKFdpZGdldCB3aWRnZXQsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCgkJCVh0UG9p
bnRlcikKewogICAgc3RhdGljIE1TdHJpbmcgbnVsbCgwLCB0cnVlKTsKICAgIHN0cmluZyB0ZXh0
KChjaGFyICopY2xpZW50X2RhdGEpOwoKICAgIE1hbnVhbFN0cmluZ0hlbHBDQih3aWRnZXQsIG51
bGwsIHRleHQpOwp9CgoKLy8gQ2xvc2UgYWN0aW9uIGZyb20gbWVudQpzdGF0aWMgdm9pZCBDbG9z
ZUNCKFdpZGdldCB3LCBYdFBvaW50ZXIsIFh0UG9pbnRlcikKewogICAgV2lkZ2V0IHNoZWxsID0g
ZmluZFRvcExldmVsU2hlbGxQYXJlbnQodyk7CiAgICBEZXN0cm95V2hlbklkbGUoc2hlbGwpOwp9
CgovLyBDcmVhdGUgYW4gZW1wdHkgZGlhbG9nIHdpdGhpbiBhIHRvcC1sZXZlbC1zaGVsbAovLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBvZiBjb3JlIERERCEKc3RhdGljIFdpZGdldCBjcmVh
dGVfdGV4dF9kaWFsb2coV2lkZ2V0IHBhcmVudCwgU3RyaW5nIG5hbWUsIAoJCQkJIEFyZyAqYXJn
cywgaW50IGFyZywgV2lkZ2V0JiBiYXIpCnsKICAgIFdpZGdldCBzaGVsbCA9IHZlcmlmeShYdENy
ZWF0ZVdpZGdldChuYW1lLCB0b3BMZXZlbFNoZWxsV2lkZ2V0Q2xhc3MsCgkJCQkJIHBhcmVudCwg
YXJncywgYXJnKSk7CgogICAgYXJnID0gMDsKICAgIFdpZGdldCB3ID0gWG1DcmVhdGVNYWluV2lu
ZG93KHNoZWxsLCBuYW1lLCBhcmdzLCBhcmcpOwogICAgWHRNYW5hZ2VDaGlsZCh3KTsKCiAgICBN
TURlc2MgZmlsZV9tZW51W10gPSAKICAgIHsKCXsgImNsb3NlIiwgTU1QdXNoLCB7IENsb3NlQ0Is
IFh0UG9pbnRlcihzaGVsbCkgfSwgMCwgMCwgMCwgMCB9LAoJeyAiZXhpdCIsICBNTVB1c2gsIHsg
RERERXhpdENCLCBYdFBvaW50ZXIoRVhJVF9TVUNDRVNTKSB9LCAwLCAwLCAwLCAwfSwKCU1NRW5k
CiAgICB9OwoKICAgIE1NRGVzYyBtZW51YmFyW10gPSAKICAgIHsKCXsgImZpbGUiLCAgICAgTU1N
ZW51LCBNTU5vQ0IsIGZpbGVfbWVudSwgMCwgMCwgMCB9LAoJeyAiZWRpdCIsICAgICBNTU1lbnUs
IE1NTm9DQiwgc2ltcGxlX2VkaXRfbWVudSwgMCwgMCwgMCB9LAoJeyAiaGVscCIsICAgICBNTU1l
bnUgfCBNTUhlbHAsIE1NTm9DQiwgc2ltcGxlX2hlbHBfbWVudSwgMCwgMCwgMCB9LAoJTU1FbmQK
ICAgIH07CgogICAgYmFyID0gTU1jcmVhdGVNZW51QmFyKHcsICJtZW51YmFyIiwgbWVudWJhcik7
CgogICAgLy8gRG9uJ3QgYWRkIGEgY2FsbGJhY2sgdG8gYEVkaXQnIG1lbnUKICAgIG1lbnViYXJb
MV0uaXRlbXMgPSAwOwoKICAgIE1NYWRkQ2FsbGJhY2tzKG1lbnViYXIpOwogICAgTU1hZGRIZWxw
Q2FsbGJhY2sobWVudWJhciwgSW1tZWRpYXRlSGVscENCKTsKCiAgICBtZW51YmFyWzFdLml0ZW1z
ID0gc2ltcGxlX2VkaXRfbWVudTsKCiAgICBEZWxheTo6cmVnaXN0ZXJfc2hlbGwoc2hlbGwpOwog
ICAgSW5zdGFsbEJ1dHRvblRpcHMoc2hlbGwpOwoKICAgIHJldHVybiB3Owp9CgpzdGF0aWMgdm9p
ZCBEZWxldGVGaW5kSW5mb0NCKFdpZGdldCwgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50
ZXIpCnsKICAgIEZpbmRJbmZvICpmaSA9IChGaW5kSW5mbyAqKWNsaWVudF9kYXRhOwogICAgZGVs
ZXRlIGZpOwp9CgpzdGF0aWMgaW50IG1heF93aWR0aChjb25zdCBjaGFyICp0ZXh0KQp7CiAgICBp
bnQgbWF4X3dpZHRoID0gMDsKICAgIGludCB3aWR0aCAgICAgPSAwOwoKICAgIHdoaWxlICgqdGV4
dCAhPSAnXDAnKQogICAgewoJc3dpdGNoICgqdGV4dCsrKQoJewoJY2FzZSAnXGInOgoJICAgIGlm
ICh3aWR0aCA+IDApCgkJd2lkdGgtLTsKCSAgICBicmVhazsKCgljYXNlICdcbic6CgkgICAgbWF4
X3dpZHRoID0gbWF4KG1heF93aWR0aCwgd2lkdGgpOwoJICAgIHdpZHRoID0gMDsKCSAgICBicmVh
azsKCglkZWZhdWx0OgoJICAgIHdpZHRoKys7Cgl9CiAgICB9CgogICAgcmV0dXJuIG1heF93aWR0
aDsKfQoKc3RhdGljIHZvaWQgVG9nZ2xlSW5kZXhDQihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCBYdFBvaW50ZXIpCnsKICAgIFdpZGdldCBjaGlsZCA9IFdpZGdldChjbGllbnRfZGF0
YSk7CgogICAgaWYgKFhtVG9nZ2xlQnV0dG9uR2V0U3RhdGUodykpCgltYW5hZ2VfcGFuZWRfY2hp
bGQoY2hpbGQpOwogICAgZWxzZQoJWHRVbm1hbmFnZUNoaWxkKGNoaWxkKTsKfQoKLy8gUmV0dXJu
IG1hbnVhbAp2b2lkIE1hbnVhbFN0cmluZ0hlbHBDQihXaWRnZXQgd2lkZ2V0LCBjb25zdCBNU3Ry
aW5nJiB0aXRsZSwKCQkJY29uc3Qgc3RyaW5nJiB1bmZvcm1hdHRlZF90ZXh0KQp7CiAgICAvLyBE
ZWxheSBkZWxheTsKCiAgICAvLyBCdWlsZCBtYW51YWwgZGlhbG9nCiAgICBXaWRnZXQgdG9wbGV2
ZWwgPSBmaW5kVGhlVG9wTGV2ZWxTaGVsbCh3aWRnZXQpOwogICAgaWYgKHRvcGxldmVsID09IDAp
CglyZXR1cm47CgogICAgLy8gRm9ybWF0IHRleHQKICAgIHN0cmluZyB0aGVfdGV4dCh1bmZvcm1h
dHRlZF90ZXh0KTsKCiAgICAvLyBGb3IgZWZmaWNpZW5jeSByZWFzb25zLCB3ZSBhY2Nlc3MgYWxs
IGRhdGEgaW4tcGxhY2UgdmlhIHRoZSBURVhUIHB0ci4KICAgIGNoYXIgKnRleHQgPSAoY2hhciAq
KXRoZV90ZXh0LmNoYXJzKCk7CgogICAgLy8gU2V0IGkgPiAwIGlmIFRFWFQgY29udGFpbnMgbW9y
ZSB0aGFuIG9uZSBuZXdsaW5lCiAgICBpbnQgaSA9IHRoZV90ZXh0LmluZGV4KCdcbicpOwogICAg
aWYgKGkgPj0gMCkKCWkgPSB0aGVfdGV4dC5pbmRleCgnXG4nLCBpICsgMSk7CgogICAgYm9vbCBt
YW51YWwgPSAhdGhlX3RleHQuY29udGFpbnMoIkZpbGU6IiwgMCkgJiYgaSA+IDA7CiAgICBib29s
IGluZm8gICA9ICB0aGVfdGV4dC5jb250YWlucygiRmlsZToiLCAwKSAmJiBpID4gMDsKCiAgICBp
bnQgbGVuID0gdGhlX3RleHQubGVuZ3RoKCk7CgogICAgaWYgKG1hbnVhbCkKICAgIHsKCS8vIE1h
bnVhbCBwYWdlOiBzdHJpcCBtYW51YWwgaGVhZGVycyBhbmQgZm9vdGVycwoJaW50IHNvdXJjZSA9
IDA7CglpbnQgdGFyZ2V0ID0gMDsKCglmb3IgKDs7KQoJewoJICAgIGlmICh0YXJnZXQgJSAxMDAg
PT0gMCkKCQlwcm9jZXNzX3BlbmRpbmdfZXZlbnRzKCk7CgoJICAgIHdoaWxlIChoYXNfaGVhZGVy
KHRleHQsIHNvdXJjZSkpCgkgICAgewoJCS8vIEhlYWRlciBsaW5lOiBzdHJpcCBsaW5lIGFuZCBz
dXJyb3VuZGluZyBibGFua3MuCgkJLy8gQXQgbGVhc3QgdXNpbmcgR05VIG5yb2ZmLCBlYWNoIGhl
YWRlciBsaW5lCgkJLy8gaGFzIHRocmVlIGJsYW5rIGxpbmVzIGJlZm9yZSBhbmQgdHdvIGFmdGVy
d2FyZHMuCgkJaWYgKHRhcmdldCA+IDApCgkJICAgIHRhcmdldC0tOwoJCWlmICh0YXJnZXQgPj0g
MCAmJiB0ZXh0W3RhcmdldF0gPT0gJ1xuJykKCQkgICAgdGFyZ2V0LS07CgkJaWYgKHRhcmdldCA+
PSAwICYmIHRleHRbdGFyZ2V0XSA9PSAnXG4nKQoJCSAgICB0YXJnZXQtLTsKCQlpZiAodGFyZ2V0
ID49IDAgJiYgdGV4dFt0YXJnZXRdID09ICdcbicpCgkJICAgIHRhcmdldC0tOwoJCWlmICh0YXJn
ZXQgPj0gMCAmJiB0ZXh0W3RhcmdldF0gPT0gJ1xuJykKCQkgICAgdGFyZ2V0LS07CgkJdGFyZ2V0
Kys7CgkJaWYgKHRhcmdldCA+IDApCgkJICAgIHRleHRbdGFyZ2V0KytdID0gJ1xuJzsKCgkJd2hp
bGUgKHRleHRbc291cmNlXSAhPSAnXG4nKQoJCSAgICBzb3VyY2UrKzsKCQlpZiAodGV4dFtzb3Vy
Y2VdID09ICdcbicpCgkJICAgIHNvdXJjZSsrOwoJCWlmICh0ZXh0W3NvdXJjZV0gPT0gJ1xuJykK
CQkgICAgc291cmNlKys7CgkJaWYgKHRleHRbc291cmNlXSA9PSAnXG4nKQoJCSAgICBzb3VyY2Ur
KzsKCSAgICB9CgkgICAgaWYgKHRleHRbc291cmNlXSA9PSAnXDAnKQoJCWJyZWFrOwoKCSAgICB0
ZXh0W3RhcmdldCsrXSA9IHRleHRbc291cmNlKytdOwoJfQoKCXRleHRbdGFyZ2V0XSA9ICdcMCc7
CglsZW4gPSB0YXJnZXQ7Cgl3aGlsZSAodGFyZ2V0IDwgaW50KHRoZV90ZXh0Lmxlbmd0aCgpKSkK
CSAgICB0ZXh0W3RhcmdldCsrXSA9ICdcMCc7CiAgICB9CiAgICBlbHNlIGlmIChpbmZvKQogICAg
ewoJLy8gSW5mbyBmaWxlOiBzdHJpcCBtZW51cwoJaW50IHNvdXJjZSA9IDA7CglpbnQgdGFyZ2V0
ID0gMDsKCgl3aGlsZSAodGV4dFtzb3VyY2VdICE9ICdcMCcpCgl7CgkgICAgaWYgKHRhcmdldCAl
IDEwMCA9PSAwKQoJCXByb2Nlc3NfcGVuZGluZ19ldmVudHMoKTsKCgkgICAgd2hpbGUgKHRleHRb
c291cmNlXSA9PSAnKicgJiYgCgkJICAgdGV4dFtzb3VyY2UgKyAxXSA9PSAnICcgJiYgCgkJICAg
KHNvdXJjZSA9PSAwIHx8IHRleHRbc291cmNlIC0gMV0gPT0gJ1xuJykpCgkgICAgewoJCS8vIFNr
aXAgbWVudSBpdGVtCgkJd2hpbGUgKHRleHRbc291cmNlKytdICE9ICdcbicpCgkJICAgIDsKCSAg
ICB9CgoJICAgIHRleHRbdGFyZ2V0KytdID0gdGV4dFtzb3VyY2UrK107Cgl9CgoJdGV4dFt0YXJn
ZXRdID0gJ1wwJzsKCWxlbiA9IHRhcmdldDsKCXdoaWxlICh0YXJnZXQgPCBpbnQodGhlX3RleHQu
bGVuZ3RoKCkpKQoJICAgIHRleHRbdGFyZ2V0KytdID0gJ1wwJzsKICAgIH0KCiAgICBpZiAoaW5m
byB8fCBtYW51YWwpCiAgICB7CgkvLyBJbmZvIGFuZCBtYW51YWw6IGtpbGwgbXVsdGlwbGUgZW1w
dHkgbGluZXMKCWludCBzb3VyY2UgPSAwOwoJaW50IHRhcmdldCA9IDA7CgoJd2hpbGUgKHRleHRb
c291cmNlXSAhPSAnXDAnKQoJewoJICAgIGlmICh0YXJnZXQgJSAxMDAgPT0gMCkKCQlwcm9jZXNz
X3BlbmRpbmdfZXZlbnRzKCk7CgoJICAgIGlmICh0ZXh0W3NvdXJjZV0gPT0gJ1xuJykKCSAgICB7
CgkJd2hpbGUgKHRleHRbc291cmNlXSAhPSAnXDAnCgkJICAgICAgICYmIHRleHRbc291cmNlICsg
MV0gPT0gJ1xuJwoJCSAgICAgICAmJiB0ZXh0W3NvdXJjZSArIDJdID09ICdcbicpCgkJICAgIHNv
dXJjZSsrOwoJICAgIH0KCSAgICB0ZXh0W3RhcmdldCsrXSA9IHRleHRbc291cmNlKytdOwoJfQoJ
dGV4dFt0YXJnZXRdID0gJ1wwJzsKCWxlbiA9IHRhcmdldDsKCXdoaWxlICh0YXJnZXQgPCBpbnQo
dGhlX3RleHQubGVuZ3RoKCkpKQoJICAgIHRleHRbdGFyZ2V0KytdID0gJ1wwJzsKICAgIH0KCiAg
ICAvLyBGaW5kIHRpdGxlcwogICAgU3RyaW5nQXJyYXkgdGl0bGVzOwogICAgSW50QXJyYXkgcG9z
aXRpb25zOwoKICAgIGlmIChpbmZvKQogICAgewoJLy8gSW5mbyBmaWxlCglpbnQgc291cmNlID0g
MDsKCXdoaWxlIChzb3VyY2UgPj0gMCkKCXsKCSAgICBwcm9jZXNzX3BlbmRpbmdfZXZlbnRzKCk7
CgoJICAgIGFzc2VydCh0aGVfdGV4dC5jb250YWlucygiRmlsZTogIiwgc291cmNlKSk7CgoJICAg
IC8vIEZldGNoIHRpdGxlIGJlbG93IGBGaWxlOiAnIGxpbmUKCSAgICBpbnQgc3RhcnRfb2ZfdGl0
bGUgPSB0aGVfdGV4dC5pbmRleCgiXG5cbiIsIHNvdXJjZSkgKyAyOwoJICAgIGludCBlbmRfb2Zf
dGl0bGUgICA9IHRoZV90ZXh0LmluZGV4KCJcbiIsIHN0YXJ0X29mX3RpdGxlKTsKCSAgICBzdHJp
bmcgdGl0bGUgPSAKCQl0aGVfdGV4dChzdGFydF9vZl90aXRsZSwgZW5kX29mX3RpdGxlIC0gc3Rh
cnRfb2ZfdGl0bGUpOwoKCSAgICAvLyBGZXRjaCBpbmRlbnQgbGV2ZWwsIHVzaW5nIHRoZSB1bmRl
cmxpbmUgY2hhcmFjdGVycwoJICAgIGludCBzdGFydF9vZl91bmRlcmxpbmUgPSB0aGVfdGV4dC5p
bmRleCgnXG4nLCBzdGFydF9vZl90aXRsZSkgKyAxOwoJICAgIHN0YXRpYyBzdHJpbmcgdW5kZXJs
aW5lcyA9ICIqPS0uIjsKCSAgICBpbnQgaW5kZW50ID0gdW5kZXJsaW5lcy5pbmRleCh0aGVfdGV4
dFtzdGFydF9vZl91bmRlcmxpbmVdKTsKCSAgICBpZiAoaW5kZW50IDwgMCkKCQlpbmRlbnQgPSB1
bmRlcmxpbmVzLmxlbmd0aCgpOwoJICAgIGlmIChpbmRlbnQgPT0gMCkKCQl0aXRsZS51cGNhc2Uo
KTsKCgkgICAgLy8gQWRkIHRpdGxlIGFuZCBwb3NpdGlvbgoJICAgIHRpdGxlcyArPSByZXBsaWNh
dGUoJyAnLCBpbmRlbnQgKiAyKSArIHRpdGxlOwoJICAgIHBvc2l0aW9ucyArPSBzb3VyY2U7CgoJ
ICAgIC8vIFN0cmlwIGBGaWxlOiAnIGxpbmUKCSAgICB0aGVfdGV4dC5kZWwoc291cmNlLCBzdGFy
dF9vZl90aXRsZSAtIHNvdXJjZSk7CgkgICAgCgkgICAgLy8gRmluZCBuZXh0IGBGaWxlOiAnIGxp
bmUKCSAgICBzb3VyY2UgPSB0aGVfdGV4dC5pbmRleCgiRmlsZTogIiwgc291cmNlKTsKCX0KCXRl
eHQgPSAoY2hhciAqKXRoZV90ZXh0LmNoYXJzKCk7CglsZW4gPSB0aGVfdGV4dC5sZW5ndGgoKTsK
ICAgIH0KCgoKICAgIEFyZyBhcmdzWzE1XTsKICAgIENhcmRpbmFsIGFyZyA9IDA7CiAgICBXaWRn
ZXQgbWVudWJhcjsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OZGVsZXRlUmVzcG9uc2UsIFht
REVTVFJPWSk7IGFyZysrOwogICAgV2lkZ2V0IHRleHRfZGlhbG9nID0gY3JlYXRlX3RleHRfZGlh
bG9nKHRvcGxldmVsLCAibWFudWFsX2hlbHAiLCAKCQkJCQkgICAgYXJncywgYXJnLCBtZW51YmFy
KTsKCiAgICBhcmcgPSAwOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5tYXJnaW5XaWR0aCwg
ICAgICAgIDApOyBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1ObWFyZ2luSGVpZ2h0
LCAgICAgICAwKTsgYXJnKys7CiAgICBYdFNldEFyZyhhcmdzW2FyZ10sIFhtTmJvcmRlcldpZHRo
LCAgICAgICAgMCk7IGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5oaWdobGlnaHRU
aGlja25lc3MsIDApOyBhcmcrKzsKICAgIFdpZGdldCBmb3JtID0gdmVyaWZ5KFhtQ3JlYXRlRm9y
bSh0ZXh0X2RpYWxvZywgImZvcm0iLCBhcmdzLCBhcmcpKTsKCiAgICBhcmcgPSAwOwogICAgWHRT
ZXRBcmcoYXJnc1thcmddLCBYbU5tYXJnaW5XaWR0aCwgICAgICAwKTsgICAgICAgICAgICAgICAg
IGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5tYXJnaW5IZWlnaHQsICAgICAwKTsg
ICAgICAgICAgICAgICAgIGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5ib3JkZXJX
aWR0aCwgICAgICAwKTsgICAgICAgICAgICAgICAgIGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1th
cmddLCBYbU5hbGxvd1Jlc2l6ZSwgICAgICBUcnVlKTsgICAgICAgICAgICAgIGFyZysrOwogICAg
WHRTZXRBcmcoYXJnc1thcmddLCBYbU50b3BBdHRhY2htZW50LCAgICBYbUFUVEFDSF9GT1JNKTsg
ICAgIGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5ib3R0b21BdHRhY2htZW50LCBY
bUFUVEFDSF9GT1JNKTsgICAgIGFyZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5sZWZ0
QXR0YWNobWVudCwgICBYbUFUVEFDSF9GT1JNKTsgICAgIGFyZysrOwogICAgWHRTZXRBcmcoYXJn
c1thcmddLCBYbU5yaWdodEF0dGFjaG1lbnQsICBYbUFUVEFDSF9GT1JNKTsgICAgIGFyZysrOwog
ICAgV2lkZ2V0IGFyZWEgPSB2ZXJpZnkoWG1DcmVhdGVQYW5lZFdpbmRvdyhmb3JtLCAiaGVscF9h
cmVhIiwgYXJncywgYXJnKSk7CiAgICBYdE1hbmFnZUNoaWxkKGFyZWEpOwoKICAgIEZpbmRJbmZv
ICpmaSA9IG5ldyBGaW5kSW5mbzsKICAgIFh0QWRkQ2FsbGJhY2sodGV4dF9kaWFsb2csIFhtTmRl
c3Ryb3lDYWxsYmFjaywKCQkgIERlbGV0ZUZpbmRJbmZvQ0IsIFh0UG9pbnRlcihmaSkpOwoKICAg
IE1NRGVzYyBpdGVtcyBbXSA9IAogICAgewoJeyAiZmluZEJhY2t3YXJkIiwgTU1QdXNoLCAKCSAg
eyBGaW5kQmFja3dhcmRDQiwgWHRQb2ludGVyKGZpKSB9LCAwLCAwLCAwLCAwfSwKCXsgImZpbmRG
b3J3YXJkIiwgIE1NUHVzaCwgCgkgIHsgRmluZEZvcndhcmRDQiwgWHRQb2ludGVyKGZpKSB9LCAw
LCAwLCAwLCAwfSwKCU1NRW5kCiAgICB9OwoKICAgIFdpZGdldCBhcmdfbGFiZWw7CiAgICBBcmdG
aWVsZCAqYXJnX2ZpZWxkOwogICAgV2lkZ2V0IHRvb2xiYXIgPSBjcmVhdGVfdG9vbGJhcihhcmVh
LCAidG9vbGJhciIsIGl0ZW1zLCAwLCBhcmdfbGFiZWwsCgkJCQkgICAgYXJnX2ZpZWxkLCBYbVBJ
WE1BUCk7CiAgICBmaS0+a2V5ID0gYXJnX2ZpZWxkLT50ZXh0KCk7CiAgICBYdEFkZENhbGxiYWNr
KGFyZ19sYWJlbCwgWG1OYWN0aXZhdGVDYWxsYmFjaywgCgkJICBDbGVhclRleHRGaWVsZENCLCBm
aS0+a2V5KTsKICAgIE1NYWRkQ2FsbGJhY2tzKHNpbXBsZV9lZGl0X21lbnUsIFh0UG9pbnRlcihm
aS0+a2V5KSk7CgogICAgYXJnID0gMDsKICAgIFdpZGdldCBoZWxwX2luZGV4ID0gdmVyaWZ5KFht
Q3JlYXRlU2Nyb2xsZWRMaXN0KGFyZWEsICJpbmRleCIsIGFyZ3MsIGFyZykpOwogICAgWHRNYW5h
Z2VDaGlsZChoZWxwX2luZGV4KTsKICAgIHNldF9zY3JvbGxlZF93aW5kb3dfc2l6ZShoZWxwX2lu
ZGV4KTsKCiAgICBXaWRnZXQgdmlld19pbmRleDsKICAgIE1NRGVzYyBtYW51YWxfbWVudVtdID0g
CiAgICB7Cgl7ICJmaW5kRm9yd2FyZCIsICBNTVB1c2gsIAoJICB7IEZpbmRGb3J3YXJkQ0IsIFh0
UG9pbnRlcihmaSkgfSwgMCwgMCwgMCwgMCB9LAoJeyAiZmluZEJhY2t3YXJkIiwgTU1QdXNoLCAK
CSAgeyBGaW5kQmFja3dhcmRDQiwgWHRQb2ludGVyKGZpKSB9LCAwLCAwLCAwLCAwIH0sCglNTVNl
cCwKCXsgInZpZXdJbmRleCIsICAgIE1NVG9nZ2xlLCB7IFRvZ2dsZUluZGV4Q0IsIAoJCQkJICAg
ICAgWHRQb2ludGVyKFh0UGFyZW50KGhlbHBfaW5kZXgpKSB9LCAKCSAgTlVMTCwgJnZpZXdfaW5k
ZXgsIDAsIDAgfSwKCU1NRW5kCiAgICB9OwoKICAgIE1NRGVzYyBtb3JlX21lbnViYXJbXSA9IAog
ICAgewoJLy8gVGhpcyBpcyBjYWxsZWQgYHNvdXJjZScgc3VjaCB0aGF0IHdlIGNhbiByZS11c2Ug
dGhlIEZpbmQKCS8vIHNwZWNzIGZyb20gdGhlIERERCBgU291cmNlJyBtZW55Cgl7ICJzb3VyY2Ui
LCBNTU1lbnUsIE1NTm9DQiwgbWFudWFsX21lbnUsIDAsIDAsIDAgfSwKCU1NRW5kCiAgICB9OwoK
ICAgIE1NYWRkSXRlbXMobWVudWJhciwgbW9yZV9tZW51YmFyKTsKICAgIE1NYWRkQ2FsbGJhY2tz
KG1vcmVfbWVudWJhcik7CiAgICBYdFZhU2V0VmFsdWVzKHZpZXdfaW5kZXgsIFhtTnNldCwgVHJ1
ZSwgTlVMTCk7CgogICAgaW50IGNvbHVtbnMgPSBtYXhfd2lkdGgodGV4dCk7CiAgICBjb2x1bW5z
ID0gbWluKG1heChjb2x1bW5zLCA0MCksIDgwKSArIDE7CgogICAgYXJnID0gMDsKICAgIFh0U2V0
QXJnKGFyZ3NbYXJnXSwgWG1OY29sdW1ucywgIGNvbHVtbnMpOyAgICAgICAgICAgYXJnKys7CiAg
ICBYdFNldEFyZyhhcmdzW2FyZ10sIFhtTmVkaXRhYmxlLCBGYWxzZSk7ICAgICAgICAgICAgIGFy
ZysrOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5lZGl0TW9kZSwgWG1NVUxUSV9MSU5FX0VE
SVQpOyBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OdmFsdWUsICAgICIiKTsgICAg
ICAgICAgICAgICAgYXJnKys7CiAgICBXaWRnZXQgaGVscF9tYW4gPSB2ZXJpZnkoWG1DcmVhdGVT
Y3JvbGxlZFRleHQoYXJlYSwgInRleHQiLCBhcmdzLCBhcmcpKTsKICAgIFh0TWFuYWdlQ2hpbGQo
aGVscF9tYW4pOwogICAgc2V0X3Njcm9sbGVkX3dpbmRvd19zaXplKGhlbHBfbWFuKTsKICAgIGZp
LT50ZXh0ID0gaGVscF9tYW47CgogICAgWHRXaWRnZXRHZW9tZXRyeSBzaXplOwogICAgc2l6ZS5y
ZXF1ZXN0X21vZGUgPSBDV0hlaWdodDsKICAgIFh0UXVlcnlHZW9tZXRyeSh0b29sYmFyLCBOVUxM
LCAmc2l6ZSk7CiAgICBYdFZhU2V0VmFsdWVzKHRvb2xiYXIsCgkJICBYbU5wYW5lTWF4aW11bSwg
c2l6ZS5oZWlnaHQsCgkJICBYbU5wYW5lTWluaW11bSwgc2l6ZS5oZWlnaHQsCgkJICBOVUxMKTsK
CiAgICBYdEFkZENhbGxiYWNrKGhlbHBfaW5kZXgsIFhtTnNpbmdsZVNlbGVjdGlvbkNhbGxiYWNr
LAoJCSAgSGVscEluZGV4Q0IsIFh0UG9pbnRlcihoZWxwX21hbikpOwogICAgWHRBZGRDYWxsYmFj
ayhoZWxwX2luZGV4LCBYbU5tdWx0aXBsZVNlbGVjdGlvbkNhbGxiYWNrLAoJCSAgSGVscEluZGV4
Q0IsIFh0UG9pbnRlcihoZWxwX21hbikpOwogICAgWHRBZGRDYWxsYmFjayhoZWxwX2luZGV4LCBY
bU5icm93c2VTZWxlY3Rpb25DYWxsYmFjaywKCQkgIEhlbHBJbmRleENCLCBYdFBvaW50ZXIoaGVs
cF9tYW4pKTsKICAgIFh0QWRkQ2FsbGJhY2soaGVscF9pbmRleCwgWG1OZGVmYXVsdEFjdGlvbkNh
bGxiYWNrLAoJCSAgSGVscEluZGV4Q0IsIFh0UG9pbnRlcihoZWxwX21hbikpOwogICAgWHRBZGRD
YWxsYmFjayh0ZXh0X2RpYWxvZywgWG1OaGVscENhbGxiYWNrLAoJCSAgSW1tZWRpYXRlSGVscENC
LCBYdFBvaW50ZXIoaGVscF9tYW4pKTsKCiAgICBYdEFkZENhbGxiYWNrKGhlbHBfbWFuLCBYbU5t
b3Rpb25WZXJpZnlDYWxsYmFjaywKCQkgIEhpZ2hsaWdodFNlY3Rpb25DQiwgWHRQb2ludGVyKGhl
bHBfaW5kZXgpKTsKICAgIFh0QWRkQ2FsbGJhY2soaGVscF9tYW4sIFhtTm1vdGlvblZlcmlmeUNh
bGxiYWNrLAoJCSAgU2V0U2VsZWN0aW9uQ0IsIFh0UG9pbnRlcihhcmdfZmllbGQpKTsKCiAgICBY
dEFkZENhbGxiYWNrKGZpLT5rZXksIFhtTmFjdGl2YXRlQ2FsbGJhY2ssIEFjdGl2YXRlQ0IsCgkJ
ICBYdFBvaW50ZXIoaXRlbXNbMV0ud2lkZ2V0KSk7CgogICAgWHRWYVNldFZhbHVlcyh0ZXh0X2Rp
YWxvZywgWG1OZGVmYXVsdEJ1dHRvbiwgV2lkZ2V0KDApLCBOVUxMKTsKICAgIAogICAgWHRNYW5h
Z2VDaGlsZChmb3JtKTsKICAgIEluc3RhbGxCdXR0b25UaXBzKHRleHRfZGlhbG9nKTsKCiAgICAv
LyBTZXQgdGl0bGUKICAgIGlmICghdGl0bGUuaXNOdWxsKCkpCgl3bV9zZXRfbmFtZShYdFBhcmVu
dCh0ZXh0X2RpYWxvZyksIHRpdGxlLnN0cigpLCB0aXRsZS5zdHIoKSk7CgogICAgaWYgKG1hbnVh
bCkKICAgIHsKCS8vIE1hbnVhbCBwYWdlOiBoYW5kbGUgdW5kZXJsaW5lcwoKCWJvb2wgKnVuZGVy
bGluZWQgICAgPSBuZXcgYm9vbFtsZW5dOwoJYm9vbCAqZG91Ymxlc3RyaWtlZCA9IG5ldyBib29s
W2xlbl07Cglmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCgkgICAgdW5kZXJsaW5lZFtpXSA9IGRv
dWJsZXN0cmlrZWRbaV0gPSBmYWxzZTsKCglpbnQgc291cmNlID0gMDsKCWludCB0YXJnZXQgPSAw
OwoKCXdoaWxlICh0ZXh0W3NvdXJjZV0gIT0gJ1wwJykKCXsKCSAgICBpZiAodGFyZ2V0ICUgMTAw
ID09IDApCgkJcHJvY2Vzc19wZW5kaW5nX2V2ZW50cygpOwoKCSAgICBjaGFyIGMgPSB0ZXh0W3Rh
cmdldCsrXSA9IHRleHRbc291cmNlKytdOwoKCSAgICBpZiAoYyA9PSAnXGInICYmIHRhcmdldCA+
PSAyKQoJICAgIHsKCQl0YXJnZXQgLT0gMjsKCQlpZiAodGV4dFt0YXJnZXRdID09ICdfJykKCQkg
ICAgdW5kZXJsaW5lZFt0YXJnZXRdID0gdHJ1ZTsKCQlpZiAodGV4dFt0YXJnZXRdID09IHRleHRb
c291cmNlXSkKCQkgICAgZG91Ymxlc3RyaWtlZFt0YXJnZXRdID0gdHJ1ZTsKCSAgICB9Cgl9Cgl0
ZXh0W3RhcmdldF0gPSAnXDAnOwoJbGVuID0gdGFyZ2V0OwoJd2hpbGUgKHRhcmdldCA8IGludCh0
aGVfdGV4dC5sZW5ndGgoKSkpCgkgICAgdGV4dFt0YXJnZXQrK10gPSAnXDAnOwoKCS8vIFNldCB0
ZXh0CglYdFZhU2V0VmFsdWVzKGhlbHBfbWFuLCBYbU52YWx1ZSwgdGV4dCwgTlVMTCk7CgoJLy8g
U2V0IGhpZ2hsaWdodGluZwoJWG1UZXh0U2V0SGlnaGxpZ2h0KGhlbHBfbWFuLCAwLCBYbVRleHRH
ZXRMYXN0UG9zaXRpb24oaGVscF9tYW4pLCAKCQkJICAgWG1ISUdITElHSFRfTk9STUFMKTsKCglY
bVRleHRQb3NpdGlvbiB1bmRlcmxpbmluZyAgICA9IDA7CglYbVRleHRQb3NpdGlvbiBkb3VibGVz
dHJpa2luZyA9IDA7Cglmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCgl7CgkgICAgaWYgKGkgJSAx
MDAgPT0gMCkKCQlwcm9jZXNzX3BlbmRpbmdfZXZlbnRzKCk7CgoJICAgIGlmIChkb3VibGVzdHJp
a2VkW2ldICYmICFkb3VibGVzdHJpa2luZykKCSAgICB7CgkJZG91Ymxlc3RyaWtpbmcgPSBpOwoJ
ICAgIH0KCSAgICBlbHNlIGlmICghZG91Ymxlc3RyaWtlZFtpXSAmJiBkb3VibGVzdHJpa2luZykK
CSAgICB7CgkJLy8gVGhlcmUgaXMgbm8gYm9sZCBmYWNlIGluIFhtVGV4dCwgbm9ybWFsIHNlbGVj
dGlvbgoJCS8vIGNsdXR0ZXJzIHRoZSBzY3JlZW4gYW5kIHNlY29uZGFyeSBzZWxlY3Rpb24gaXMg
YWxyZWFkeSB1c2VkLgoJCS8vIFNvIHdoYXQgc2hhbGwgd2UgZG8gaGVyZT8gIFVzZSB0aGUgTW90
aWYgMi4wIENTVGV4dD8KI2lmIDAKCQlYbVRleHRTZXRIaWdobGlnaHQoaGVscF9tYW4sIGRvdWJs
ZXN0cmlraW5nLCBpLCAKCQkJCSAgIFhtSElHSExJR0hUX1NFTEVDVEVEKTsKCQlwcm9jZXNzX3Bl
bmRpbmdfZXZlbnRzKCk7CiNlbmRpZgoJCWRvdWJsZXN0cmlraW5nID0gMDsKCSAgICB9CgoJICAg
IGlmICh1bmRlcmxpbmVkW2ldICYmICF1bmRlcmxpbmluZykKCSAgICB7CgkJdW5kZXJsaW5pbmcg
PSBpOwoJICAgIH0KCSAgICBlbHNlIGlmICghdW5kZXJsaW5lZFtpXSAmJiB1bmRlcmxpbmluZykK
CSAgICB7CgkJWG1UZXh0U2V0SGlnaGxpZ2h0KGhlbHBfbWFuLCB1bmRlcmxpbmluZywgaSwgCgkJ
CQkgICBYbUhJR0hMSUdIVF9TRUNPTkRBUllfU0VMRUNURUQpOwoJCXVuZGVybGluaW5nID0gMDsK
CSAgICB9Cgl9CgoJZGVsZXRlW10gdW5kZXJsaW5lZDsKCWRlbGV0ZVtdIGRvdWJsZXN0cmlrZWQ7
CiAgICB9CgogICAgaWYgKG1hbnVhbCkKICAgIHsKCS8vIFNldCB0aXRsZXMgZm9yIG1hbnVhbCBw
YWdlCglpbnQgc3RhcnRfb2ZfbGluZSA9IDA7CgoJZm9yIChpbnQgc291cmNlID0gMDsgc291cmNl
IDwgbGVuOyBzb3VyY2UrKykKCXsKCSAgICBpZiAoc291cmNlICUgMTAwID09IDApCgkJcHJvY2Vz
c19wZW5kaW5nX2V2ZW50cygpOwoKCSAgICBpZiAodGV4dFtzb3VyY2VdID09ICdcbicpCgkgICAg
ewoJCWlmIChzb3VyY2UgLSBzdGFydF9vZl9saW5lID4gMykKCQl7CgkJICAgIC8vIENoZWNrIG1h
bnVhbCB0aXRsZQoJCSAgICBib29sIGlzX3RpdGxlID0gZmFsc2U7CgkJCgkJICAgIGlmICh0ZXh0
W3N0YXJ0X29mX2xpbmVdID09ICcgJyAmJgoJCQl0ZXh0W3N0YXJ0X29mX2xpbmUgKyAxXSA9PSAn
ICcgJiYKCQkJdGV4dFtzdGFydF9vZl9saW5lICsgMl0gIT0gJ1wwJyAmJgoJCQl0ZXh0W3N0YXJ0
X29mX2xpbmUgKyAzXSAhPSAnICcpCgkJCWlzX3RpdGxlID0gdHJ1ZTsgLy8gLlNTIHRpdGxlCgkJ
ICAgIGVsc2UgaWYgKHRleHRbc3RhcnRfb2ZfbGluZV0gIT0gJyAnCgkJCSAgICAgJiYgc291cmNl
IC0gc3RhcnRfb2ZfbGluZSA8IDYwKQoJCQlpc190aXRsZSA9IHRydWU7IC8vIC5TSCB0aXRsZQoK
CQkgICAgaWYgKGlzX3RpdGxlKQoJCSAgICB7CgkJCXRpdGxlcyArPSAKCQkJICAgIHRoZV90ZXh0
KHN0YXJ0X29mX2xpbmUsIHNvdXJjZSAtIHN0YXJ0X29mX2xpbmUpOwoJCQlwb3NpdGlvbnMgKz0g
c3RhcnRfb2ZfbGluZTsKCQkgICAgfQoJCX0KCgkJc3RhcnRfb2ZfbGluZSA9IHNvdXJjZSArIDE7
CgkgICAgfQoJfQogICAgfQogICAgZWxzZQogICAgewoJLy8gSW5mbyBmaWxlLCBvciBzb21ldGhp
bmcgZWxzZTogdGl0bGVzIGFyZSBhbHJlYWR5IHNldAoKCS8vIFNldCB0ZXh0CglYdFZhU2V0VmFs
dWVzKGhlbHBfbWFuLCBYbU52YWx1ZSwgdGV4dCwgTlVMTCk7CgoJLy8gTm8gaGlnaGxpZ2h0aW5n
CglYbVRleHRTZXRIaWdobGlnaHQoaGVscF9tYW4sIDAsIFhtVGV4dEdldExhc3RQb3NpdGlvbiho
ZWxwX21hbiksIAoJCQkgICBYbUhJR0hMSUdIVF9OT1JNQUwpOwogICAgfQoKICAgIHByb2Nlc3Nf
cGVuZGluZ19ldmVudHMoKTsKCiAgICAvLyBTZXQgdGl0bGVzIGluIHNlbGVjdGlvbiBsaXN0CiAg
ICBYbVRleHRQb3NpdGlvbiAqeG1wb3NpdGlvbnMgPSBuZXcgWG1UZXh0UG9zaXRpb25bdGl0bGVz
LnNpemUoKSArIDFdOwogICAgZm9yIChpID0gMDsgaSA8IHRpdGxlcy5zaXplKCk7IGkrKykKCXht
cG9zaXRpb25zW2ldID0gcG9zaXRpb25zW2ldOwogICAgeG1wb3NpdGlvbnNbaV0gPSBJTlRfTUFY
OwoKICAgIFhtU3RyaW5nVGFibGUgeG10aXRsZXMgPSBuZXcgWG1TdHJpbmdbdGl0bGVzLnNpemUo
KV07CgogICAgZm9yIChpID0gMDsgaSA8IHRpdGxlcy5zaXplKCk7IGkrKykKICAgIHsKCXhtdGl0
bGVzW2ldID0gCgkgICAgWG1TdHJpbmdDcmVhdGVMdG9SKHRpdGxlc1tpXSwgCgkJCSAgICAgICB0
aXRsZXNbaV0uY29udGFpbnMoJyAnLCAwKSA/IAoJCQkgICAgICAgKGNoYXIgKilDSEFSU0VUX1JN
IDogKGNoYXIgKilDSEFSU0VUX0JGKTsKICAgIH0KCiAgICBYdFZhU2V0VmFsdWVzKGhlbHBfaW5k
ZXgsCgkJICBYbU50b3BJdGVtUG9zaXRpb24sICAgMSwKCQkgIFhtTnNlbGVjdGVkSXRlbUNvdW50
LCAwLAoJCSAgWG1OaXRlbXMsICAgICAgICAgICAgIHhtdGl0bGVzLAoJCSAgWG1OdXNlckRhdGEs
ICAgICAgICAgIHhtcG9zaXRpb25zLAoJCSAgWG1OaXRlbUNvdW50LCAgICAgICAgIHRpdGxlcy5z
aXplKCksCgkJICBOVUxMKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgdGl0bGVzLnNpemUoKTsgaSsr
KQoJWG1TdHJpbmdGcmVlKHhtdGl0bGVzW2ldKTsKICAgIGRlbGV0ZVtdIHhtdGl0bGVzOwoKICAg
IHByb2Nlc3NfcGVuZGluZ19ldmVudHMoKTsKCiAgICAvLyBFbmFibGUgVGV4dCBXaW5kb3cKICAg
IERlbGF5OjpyZWdpc3Rlcl9zaGVsbChYdFBhcmVudCh0ZXh0X2RpYWxvZykpOwogICAgSW5zdGFs
bEJ1dHRvblRpcHMoWHRQYXJlbnQodGV4dF9kaWFsb2cpKTsKICAgIG1hbmFnZV9hbmRfcmFpc2Uo
dGV4dF9kaWFsb2cpOwp9CgoKdm9pZCBUZXh0SGVscENCKFdpZGdldCB3aWRnZXQsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgWHRQb2ludGVyKQp7CiAgICAvLyBEZWxheSBkZWxheTsKCiAgICBzdHJp
bmcgbmFtZSA9ICJ0ZXh0X2hlbHAiOwoKICAgIC8vIElmIENMSUVOVF9EQVRBIHN0YXJ0cyB3aXRo
IEBGT09ALCB1c2UgRk9PIGFzIGRpYWxvZyBuYW1lCiAgICBTdHJpbmcgdGV4dCA9IChTdHJpbmcp
Y2xpZW50X2RhdGE7CiAgICBpZiAodGV4dFswXSA9PSAnQCcpCiAgICB7CgluYW1lID0gdGV4dCAr
IDE7CgluYW1lID0gbmFtZS5iZWZvcmUoJ0AnKTsKCXRleHQgKz0gbmFtZS5sZW5ndGgoKSArIDI7
CiAgICB9CgogICAgLy8gQnVpbGQgaGVscF90ZXh0CiAgICBXaWRnZXQgdG9wbGV2ZWwgPSBmaW5k
VGhlVG9wTGV2ZWxTaGVsbCh3aWRnZXQpOwogICAgaWYgKHRvcGxldmVsID09IDApCglyZXR1cm47
CgogICAgQXJnIGFyZ3NbMTVdOwogICAgQ2FyZGluYWwgYXJnID0gMDsKICAgIFdpZGdldCBtZW51
YmFyOwogICAgWHRTZXRBcmcoYXJnc1thcmddLCBYbU5kZWxldGVSZXNwb25zZSwgWG1ERVNUUk9Z
KTsgYXJnKys7CiAgICBXaWRnZXQgdGV4dF9kaWFsb2cgPSBjcmVhdGVfdGV4dF9kaWFsb2codG9w
bGV2ZWwsIG5hbWUsIGFyZ3MsIGFyZywgCgkJCQkJICAgIG1lbnViYXIpOwoKICAgIGFyZyA9IDA7
CiAgICBXaWRnZXQgZm9ybSA9IHZlcmlmeShYbUNyZWF0ZUZvcm0odGV4dF9kaWFsb2csICJmb3Jt
IiwgYXJncywgYXJnKSk7CgogICAgYXJnID0gMDsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1O
bWFyZ2luV2lkdGgsICAgICAgMCk7ICAgICAgICAgICAgICAgICBhcmcrKzsKICAgIFh0U2V0QXJn
KGFyZ3NbYXJnXSwgWG1ObWFyZ2luSGVpZ2h0LCAgICAgMCk7ICAgICAgICAgICAgICAgICBhcmcr
KzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OYm9yZGVyV2lkdGgsICAgICAgMCk7ICAgICAg
ICAgICAgICAgICBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OYWxsb3dSZXNpemUs
ICAgICAgVHJ1ZSk7ICAgICAgICAgICAgICBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwg
WG1OdG9wQXR0YWNobWVudCwgICAgWG1BVFRBQ0hfRk9STSk7ICAgICBhcmcrKzsKICAgIFh0U2V0
QXJnKGFyZ3NbYXJnXSwgWG1OYm90dG9tQXR0YWNobWVudCwgWG1BVFRBQ0hfRk9STSk7ICAgICBh
cmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1ObGVmdEF0dGFjaG1lbnQsICAgWG1BVFRB
Q0hfRk9STSk7ICAgICBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OcmlnaHRBdHRh
Y2htZW50LCAgWG1BVFRBQ0hfRk9STSk7ICAgICBhcmcrKzsKICAgIFdpZGdldCBhcmVhID0gdmVy
aWZ5KFhtQ3JlYXRlUGFuZWRXaW5kb3coZm9ybSwgImhlbHBfYXJlYSIsIGFyZ3MsIGFyZykpOwog
ICAgWHRNYW5hZ2VDaGlsZChhcmVhKTsKCiAgICBGaW5kSW5mbyAqZmkgPSBuZXcgRmluZEluZm87
CiAgICBYdEFkZENhbGxiYWNrKHRleHRfZGlhbG9nLCBYbU5kZXN0cm95Q2FsbGJhY2ssCgkJICBE
ZWxldGVGaW5kSW5mb0NCLCBYdFBvaW50ZXIoZmkpKTsKCiAgICBNTURlc2MgaXRlbXMgW10gPSAK
ICAgIHsKCXsgImZpbmRCYWNrd2FyZCIsIE1NUHVzaCwgCgkgIHsgRmluZEJhY2t3YXJkQ0IsIFh0
UG9pbnRlcihmaSkgfSwgMCwgMCwgMCwgMCB9LAoJeyAiZmluZEZvcndhcmQiLCAgTU1QdXNoLCAK
CSAgeyBGaW5kRm9yd2FyZENCLCBYdFBvaW50ZXIoZmkpIH0sIDAsIDAsIDAsIDAgfSwKCU1NRW5k
CiAgICB9OwoKICAgIFdpZGdldCBhcmdfbGFiZWw7CiAgICBBcmdGaWVsZCAqYXJnX2ZpZWxkOwog
ICAgV2lkZ2V0IHRvb2xiYXIgPSBjcmVhdGVfdG9vbGJhcihhcmVhLCAidG9vbGJhciIsIGl0ZW1z
LCAwLCBhcmdfbGFiZWwsCgkJCQkgICAgYXJnX2ZpZWxkLCBYbVBJWE1BUCk7CiAgICBmaS0+a2V5
ID0gYXJnX2ZpZWxkLT50ZXh0KCk7CiAgICBYdEFkZENhbGxiYWNrKGFyZ19sYWJlbCwgWG1OYWN0
aXZhdGVDYWxsYmFjaywgCgkJICBDbGVhclRleHRGaWVsZENCLCBmaS0+a2V5KTsKICAgIE1NYWRk
Q2FsbGJhY2tzKHNpbXBsZV9lZGl0X21lbnUsIFh0UG9pbnRlcihmaS0+a2V5KSk7CgogICAgTU1E
ZXNjIG1hbnVhbF9tZW51W10gPSAKICAgIHsKCXsgImZpbmRGb3J3YXJkIiwgIE1NUHVzaCwgCgkg
IHsgRmluZEZvcndhcmRDQiwgWHRQb2ludGVyKGZpKSB9LCAwLCAwLCAwLCAwfSwKCXsgImZpbmRC
YWNrd2FyZCIsIE1NUHVzaCwKCSAgeyBGaW5kQmFja3dhcmRDQiwgWHRQb2ludGVyKGZpKSB9LCAw
LCAwLCAwLCAwfSwKCU1NRW5kCiAgICB9OwoKICAgIE1NRGVzYyBtb3JlX21lbnViYXJbXSA9IAog
ICAgewoJLy8gVGhpcyBpcyBjYWxsZWQgYHNvdXJjZScgc3VjaCB0aGF0IHdlIGNhbiByZS11c2Ug
dGhlIEZpbmQKCS8vIHNwZWNzIGZyb20gdGhlIERERCBgU291cmNlJyBtZW55Cgl7ICJzb3VyY2Ui
LCBNTU1lbnUsIE1NTm9DQiwgbWFudWFsX21lbnUsIDAsIDAsIDAgfSwKCU1NRW5kCiAgICB9OwoK
ICAgIE1NYWRkSXRlbXMobWVudWJhciwgbW9yZV9tZW51YmFyKTsKICAgIE1NYWRkQ2FsbGJhY2tz
KG1vcmVfbWVudWJhcik7CgogICAgaW50IGNvbHVtbnMgPSBtYXhfd2lkdGgodGV4dCk7CiAgICBj
b2x1bW5zID0gbWluKG1heChjb2x1bW5zLCA0MCksIDgwKSArIDE7CgogICAgYXJnID0gMDsKICAg
IFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OY29sdW1ucywgICAgICAgICAgY29sdW1ucyk7ICAgICAg
ICAgICBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OZWRpdGFibGUsICAgICAgICAg
RmFsc2UpOyAgICAgICAgICAgICBhcmcrKzsKICAgIFh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OZWRp
dE1vZGUsICAgICAgICAgWG1NVUxUSV9MSU5FX0VESVQpOyBhcmcrKzsKICAgIFh0U2V0QXJnKGFy
Z3NbYXJnXSwgWG1OdmFsdWUsICAgICAgICAgICAgdGV4dCk7IGFyZysrOwogICAgV2lkZ2V0IGhl
bHBfdGV4dCA9IHZlcmlmeShYbUNyZWF0ZVNjcm9sbGVkVGV4dChhcmVhLCAidGV4dCIsIGFyZ3Ms
IGFyZykpOwogICAgWHRNYW5hZ2VDaGlsZChoZWxwX3RleHQpOwogICAgc2V0X3Njcm9sbGVkX3dp
bmRvd19zaXplKGhlbHBfdGV4dCk7CiAgICBmaS0+dGV4dCA9IGhlbHBfdGV4dDsKCiAgICBYdFdp
ZGdldEdlb21ldHJ5IHNpemU7CiAgICBzaXplLnJlcXVlc3RfbW9kZSA9IENXSGVpZ2h0OwogICAg
WHRRdWVyeUdlb21ldHJ5KHRvb2xiYXIsIE5VTEwsICZzaXplKTsKICAgIFh0VmFTZXRWYWx1ZXMo
dG9vbGJhciwKCQkgIFhtTnBhbmVNYXhpbXVtLCBzaXplLmhlaWdodCwKCQkgIFhtTnBhbmVNaW5p
bXVtLCBzaXplLmhlaWdodCwKCQkgIE5VTEwpOwoKICAgIFh0QWRkQ2FsbGJhY2sodGV4dF9kaWFs
b2csIFhtTmhlbHBDYWxsYmFjaywgSW1tZWRpYXRlSGVscENCLCBYdFBvaW50ZXIoMCkpOwoKICAg
IFh0QWRkQ2FsbGJhY2soaGVscF90ZXh0LCBYbU5tb3Rpb25WZXJpZnlDYWxsYmFjaywKCQkgIFNl
dFNlbGVjdGlvbkNCLCBYdFBvaW50ZXIoYXJnX2ZpZWxkKSk7CgogICAgWHRBZGRDYWxsYmFjayhm
aS0+a2V5LCBYbU5hY3RpdmF0ZUNhbGxiYWNrLCBBY3RpdmF0ZUNCLAoJCSAgWHRQb2ludGVyKGl0
ZW1zWzFdLndpZGdldCkpOwoKICAgIFh0TWFuYWdlQ2hpbGQoZm9ybSk7CiAgICBJbnN0YWxsQnV0
dG9uVGlwcyh0ZXh0X2RpYWxvZyk7CgogICAgLy8gRW5hYmxlIFRleHQgV2luZG93CiAgICBYdFJl
YWxpemVXaWRnZXQoWHRQYXJlbnQodGV4dF9kaWFsb2cpKTsKICAgIERlbGF5OjpyZWdpc3Rlcl9z
aGVsbChYdFBhcmVudCh0ZXh0X2RpYWxvZykpOwogICAgSW5zdGFsbEJ1dHRvblRpcHMoWHRQYXJl
bnQodGV4dF9kaWFsb2cpKTsKICAgIFh0UG9wdXAoWHRQYXJlbnQodGV4dF9kaWFsb2cpLCBYdEdy
YWJOb25lKTsKICAgIG1hbmFnZV9hbmRfcmFpc2UodGV4dF9kaWFsb2cpOwp9CgoKLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQovLyBDb250ZXh0LXNlbnNpdGl2ZSBoZWxwCi8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCi8vIFJldHVybiB0aGUgd2lkZ2V0IHJlbGF0ZWQgdG8gdGhlIG1vdXNlIGV2ZW50IEVW
CnN0YXRpYyBXaWRnZXQgRXZlbnRUb1dpZGdldChXaWRnZXQgd2lkZ2V0LCBYRXZlbnQgKmV2KQp7
CiAgICAvLyBJZiB0aGUgYnV0dG9uIHdhcyBjbGlja2VkIG91dHNpZGUgb2YgdGhpcyBwcm9ncmFt
cyB3aW5kb3dzLCB0aGUKICAgIC8vIHdpZGdldCB0aGF0IGdyYWJiZWQgdGhlIHBvaW50ZXIgd2ls
bCBnZXQgdGhlIGV2ZW50LiAgU28sIHdlCiAgICAvLyBjaGVjayB0aGUgYm91bmRzIG9mIHRoZSB3
aWRnZXQgYWdhaW5zdCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlCiAgICAvLyBldmVudC4gIElmIHRo
ZXkncmUgb3V0c2lkZSwgd2UgcmV0dXJuIDAuICBPdGhlcndpc2Ugd2UKICAgIC8vIHJldHVybiB0
aGUgd2lkZ2V0IGluIHdoaWNoIHRoZSBldmVudCBvY2N1cmVkLgoKICAgIHN3aXRjaCAoZXYtPnR5
cGUpCiAgICB7CiAgICBjYXNlIEtleVByZXNzOgogICAgY2FzZSBLZXlSZWxlYXNlOgogICAgY2Fz
ZSBCdXR0b25QcmVzczoKICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKCWJyZWFrOwoKICAgIGRlZmF1
bHQ6CglyZXR1cm4gMDsJCS8vIE5vIHdpbmRvdwogICAgfQoKICAgIFBvc2l0aW9uIHgsIHk7CiAg
ICBEaW1lbnNpb24gd2lkdGgsIGhlaWdodDsKICAgIFh0VmFHZXRWYWx1ZXMod2lkZ2V0LCBYbU54
LCAmeCwgWG1OeSwgJnksCgkJICBYbU53aWR0aCwgJndpZHRoLCBYbU5oZWlnaHQsICZoZWlnaHQs
CgkJICBOVUxMKTsKCiAgICBpZiAoZXYtPnhidXR0b24ud2luZG93ID09IFh0V2luZG93KHdpZGdl
dCkgJiYKCShldi0+eGJ1dHRvbi54IDwgeCB8fAoJIGV2LT54YnV0dG9uLnkgPCB5IHx8CgkgZXYt
PnhidXR0b24ueCA+IHggKyB3aWR0aCB8fAoJIGV2LT54YnV0dG9uLnkgPiB5ICsgaGVpZ2h0KSkK
ICAgIHsKCXJldHVybiAwOwogICAgfQogICAgZWxzZQogICAgewoJcmV0dXJuIFh0V2luZG93VG9X
aWRnZXQoWHREaXNwbGF5KHdpZGdldCksCgkJCQlldi0+eGJ1dHRvbi53aW5kb3cpOwogICAgfQp9
CgoKLy8gSW4gTGVzc1RpZiwgWG1UcmFja2luZ0V2ZW50KCkgaXMgc29tZXdoYXQgYnJva2VuIC0g
aXQgcmV0dXJucyBvbgovLyBLZXlSZWxlYXNlIGV2ZW50cywgYW5kIGl0IGRvZXMgbm90IHJldHVy
biB0aGUgZXZlbnQuICBIZXJlJ3MgYW4KLy8gaW1wcm92ZWQgaW1wbGVtZW50YXRpb24uCnN0YXRp
YyBXaWRnZXQKVHJhY2tpbmdFdmVudChXaWRnZXQgd2lkZ2V0LCBDdXJzb3IgY3Vyc29yLAoJICAg
ICAgQm9vbGVhbiBjb25maW5lX3RvLCBYRXZlbnQgKmV2ZW50X3JldHVybikKewogICAgV2luZG93
IGNvbmZpbmVfdG9fdGhpczsKICAgIFhFdmVudCBldjsKICAgIEJvb2xlYW4ga2V5X3ByZXNzZWQg
PSBGYWxzZTsKICAgIFRpbWUgdGltZTsKCiAgICBpZiAoY29uZmluZV90bykKICAgIHsKCWNvbmZp
bmVfdG9fdGhpcyA9IFh0V2luZG93KHdpZGdldCk7CiAgICB9CiAgICBlbHNlCiAgICB7Cgljb25m
aW5lX3RvX3RoaXMgPSBOb25lOwogICAgfQoKICAgIHRpbWUgPSBYdExhc3RUaW1lc3RhbXBQcm9j
ZXNzZWQoWHREaXNwbGF5KHdpZGdldCkpOwogICAgaWYgKFh0R3JhYlBvaW50ZXIod2lkZ2V0LCBU
cnVlLAoJCSAgICAgIEJ1dHRvblJlbGVhc2VNYXNrIHwgQnV0dG9uUHJlc3NNYXNrLAoJCSAgICAg
IEdyYWJNb2RlQXN5bmMsIEdyYWJNb2RlQXN5bmMsCgkJICAgICAgY29uZmluZV90b190aGlzLCBj
dXJzb3IsIHRpbWUpICE9IEdyYWJTdWNjZXNzKQogICAgewoJY2VyciA8PCAiVHJhY2tpbmdFdmVu
dDogQ291bGQgbm90IGdyYWIgcG9pbnRlclxuIjsKCXJldHVybiAwOwogICAgfQoKICAgIHdoaWxl
IChUcnVlKQogICAgewoJWHRBcHBOZXh0RXZlbnQoWHRXaWRnZXRUb0FwcGxpY2F0aW9uQ29udGV4
dCh3aWRnZXQpLCAmZXYpOwoJdGltZSA9IFh0TGFzdFRpbWVzdGFtcFByb2Nlc3NlZChYdERpc3Bs
YXkod2lkZ2V0KSk7CgoJaWYgKGV2LnR5cGUgPT0gS2V5UHJlc3MpCgl7CgkgICAgLy8gQXZvaWQg
ZXhpdGluZyB1cG9uIHJlbGVhc2luZyB0aGUga2V5IHRoYXQgY2F1c2VkCgkgICAgLy8gWG1UcmFj
a2luZ0V2ZW50KCkgdG8gYmUgaW52b2tlZAoJICAgIGtleV9wcmVzc2VkID0gVHJ1ZTsKCX0KCWVs
c2UgaWYgKChldi50eXBlID09IEtleVJlbGVhc2UgJiYga2V5X3ByZXNzZWQpIHx8CgkJIChldi50
eXBlID09IEJ1dHRvblJlbGVhc2UgJiYgZXYueGJ1dHRvbi5idXR0b24gPT0gMSkpCgl7CgkgICAg
aWYgKGV2ZW50X3JldHVybiAhPSAwKQoJCSpldmVudF9yZXR1cm4gPSBldjsKCgkgICAgWHRVbmdy
YWJQb2ludGVyKHdpZGdldCwgdGltZSk7CgoJICAgIHJldHVybiBFdmVudFRvV2lkZ2V0KHdpZGdl
dCwgJmV2KTsKCX0KICAgIH0KfQoKLy8gSG9vayBiZWZvcmUgaGVscCBvbiBjb250ZXh0CnN0YXRp
YyB2b2lkIG5vcDIoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcikge30Kdm9pZCAoKlByZUhl
bHBPbkNvbnRleHRIb29rKShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKCQkJICAg
ICBYdFBvaW50ZXIgY2FsbF9kYXRhKSA9IG5vcDI7Cgp2b2lkIEhlbHBPbkNvbnRleHRDQihXaWRn
ZXQgd2lkZ2V0LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpCnsK
ICAgIFdpZGdldCBpdGVtID0gMDsKICAgIFdpZGdldCB0b3BsZXZlbCA9IGZpbmRUb3BMZXZlbFNo
ZWxsUGFyZW50KHdpZGdldCk7CgogICAgaWYgKHRvcGxldmVsID09IDApCiAgICB7CglIZWxwT25X
aW5kb3dDQih3aWRnZXQsIGNsaWVudF9kYXRhLCBjYWxsX2RhdGEpOwoJcmV0dXJuOwogICAgfQoJ
ICAgCiAgICBQcmVIZWxwT25Db250ZXh0SG9vayh3aWRnZXQsIGNsaWVudF9kYXRhLCBjYWxsX2Rh
dGEpOwoKICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29yID0gCglYQ3JlYXRlRm9udEN1cnNvcihYdERp
c3BsYXkodG9wbGV2ZWwpLCBYQ19xdWVzdGlvbl9hcnJvdyk7CgogICAgWEV2ZW50IGV2OwojaWYg
WG1WZXJzaW9uIDwgMTAwMgogICAgLy8gTm8gWG1UcmFja2luZ0V2ZW50KCkgaW4gTW90aWYgMS4x
CiAgICBpdGVtID0gVHJhY2tpbmdFdmVudCh0b3BsZXZlbCwgY3Vyc29yLCBGYWxzZSwgJmV2KTsK
I2Vsc2UKICAgIGlmIChsZXNzdGlmX3ZlcnNpb24gPD0gODQpCglpdGVtID0gVHJhY2tpbmdFdmVu
dCh0b3BsZXZlbCwgY3Vyc29yLCBGYWxzZSwgJmV2KTsKICAgIGVsc2UKCWl0ZW0gPSBYbVRyYWNr
aW5nRXZlbnQodG9wbGV2ZWwsIGN1cnNvciwgRmFsc2UsICZldik7CiNlbmRpZgoKICAgIGlmIChp
dGVtICE9IDApCglJbW1lZGlhdGVIZWxwQ0IoaXRlbSwgY2xpZW50X2RhdGEsIDApOwogICAgZWxz
ZQoJSW1tZWRpYXRlSGVscENCKHRvcGxldmVsLCBjbGllbnRfZGF0YSwgMCk7CgogICAgLy8gU29t
ZSBNb3RpZiB2ZXJzaW9ucyBnZXQgY29uZnVzZWQgaWYgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2Vk
CiAgICAvLyB2aWEgYSBtZW51IGFjY2VsZXJhdG9yOyB0aGUga2V5Ym9hcmQgcmVtYWlucyBncmFi
YmVkLiBIZW5jZSwgd2UKICAgIC8vIHVuZ3JhYiBpdCBleHBsaWNpdGx5LgogICAgWHRVbmdyYWJL
ZXlib2FyZCh0b3BsZXZlbCwKCQkgICAgIFh0TGFzdFRpbWVzdGFtcFByb2Nlc3NlZChYdERpc3Bs
YXkod2lkZ2V0KSkpOwp9CgoKLy8gUmV0dXJuIHRoZSBjaGlsZCB3aWRnZXQgKG9yIGdhZGdldCkg
RVgvRVkgaXMgaW4sIHN0YXJ0aW5nIHdpdGggV0lER0VULgpzdGF0aWMgV2lkZ2V0IEdldFdpZGdl
dEF0KFdpZGdldCB3LCBpbnQgZXgsIGludCBleSkKewogICAgaWYgKHcgPT0gMCkKCXJldHVybiAw
OwoKICAgIGJvb2wgb25jZV9hZ2FpbiA9IHRydWU7CiAgICB3aGlsZSAob25jZV9hZ2FpbikKICAg
IHsKCVdpZGdldExpc3QgY2hpbGRyZW4gID0gMDsKCUNhcmRpbmFsIG51bUNoaWxkcmVuID0gMDsK
CglpZiAoWHRJc0NvbXBvc2l0ZSh3KSkKCXsKCSAgICBYdFZhR2V0VmFsdWVzKHcsIFhtTmNoaWxk
cmVuLCAmY2hpbGRyZW4sCgkJCSAgWG1ObnVtQ2hpbGRyZW4sICZudW1DaGlsZHJlbiwgTlVMTCk7
Cgl9CgoJb25jZV9hZ2FpbiA9IGZhbHNlOwoKCS8vIExvb2sgZm9yIHBvc2l0aW9uIHdpdGhpbiBj
aGlsZHJlbi4KCS8vIEluIGEgZm9ybSwgd2UgbWF5IGhhdmUgbXVsdGlwbGUgY2hpbGRyZW4gb3Zl
cmxhcHBpbmcgZWFjaAoJLy8gb3RoZXIuICBIZW5jZSwgc2VhcmNoIGxhdGVyIGNoaWxkcmVuIGZp
cnN0LCBhcyB0aGV5IHdpbGwgYmUKCS8vIG9uIHRvcCBvZiBlYXJsaWVyIG9uZXMuCglmb3IgKGlu
dCBtID0gaW50KG51bUNoaWxkcmVuKSAtIDE7IG0gPj0gMDsgbS0tKQoJewoJICAgIFdpZGdldCBj
aGlsZCA9IGNoaWxkcmVuW21dOwoJICAgIGlmIChYdElzUmVjdE9iaihjaGlsZCkgJiYgWHRJc01h
bmFnZWQoY2hpbGQpKQoJICAgIHsKCQlEaW1lbnNpb24gY3gsIGN5LCBjdywgY2g7CgkJWHRWYUdl
dFZhbHVlcyhjaGlsZCwKCQkJICAgICAgWG1OeCwgJmN4LCBYbU55LCAmY3ksCgkJCSAgICAgIFht
TndpZHRoLCAmY3csIFhtTmhlaWdodCwgJmNoLAoJCQkgICAgICBOVUxMKTsKCgkJaWYgKGN4IDw9
IGV4ICYmIGV4IDw9IChjeCArIGN3KSAmJgoJCSAgICBjeSA8PSBleSAmJiBleSA8PSAoY3kgKyBj
aCkpCgkJewoJCSAgICAvLyBQb3NpdGlvbiBpcyB3aXRoaW4gQ0hJTEQgLSByZXN0YXJ0IHNlYXJj
aAoJCSAgICBvbmNlX2FnYWluID0gdHJ1ZTsKCQkgICAgdyA9IGNoaWxkOwoJCSAgICBleCAtPSBj
eDsKCQkgICAgZXkgLT0gY3k7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9Cgl9CiAgICB9CgogICAg
cmV0dXJuIHc7Cn0KCi8vIFJldHVybnMgdGhlIHdpZGdldCB0aGUgcG9pbnRlciBpcyBvdmVyLCBv
ciAwIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgpzdGF0aWMgV2lkZ2V0IEdldFdpZGdldEF0
KFhLZXlFdmVudCAqZSkKewogICAgcmV0dXJuIEdldFdpZGdldEF0KFh0V2luZG93VG9XaWRnZXQo
ZS0+ZGlzcGxheSwgZS0+d2luZG93KSwgZS0+eCwgZS0+eSk7Cn0KCnZvaWQgSGVscE9uSXRlbUNC
KFdpZGdldCB3aWRnZXQsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0
YSkKewogICAgV2lkZ2V0IHRvcGxldmVsID0gZmluZFRoZVRvcExldmVsU2hlbGwod2lkZ2V0KTsK
CiAgICBpZiAoY2FsbF90cmFja2luZ19oZWxwKGNhbGxfZGF0YSwgdHJ1ZSkgfHwgdG9wbGV2ZWwg
PT0gMCkKICAgIHsKCUhlbHBPbkNvbnRleHRDQih3aWRnZXQsIGNsaWVudF9kYXRhLCBjYWxsX2Rh
dGEpOwoJcmV0dXJuOwogICAgfQoKICAgIERlbGF5IGRlbGF5OwkJLy8gRmluZGluZyB0aGUgd2lk
Z2V0IG1heSB0YWtlIHRpbWUKCiAgICBYbUFueUNhbGxiYWNrU3RydWN0ICpjYnMgPSAoWG1BbnlD
YWxsYmFja1N0cnVjdCAqKWNhbGxfZGF0YTsKCiAgICBXaWRnZXQgaXRlbSA9IEdldFdpZGdldEF0
KCZjYnMtPmV2ZW50LT54a2V5KTsKICAgIGlmIChpdGVtID09IDApCglpdGVtID0gdG9wbGV2ZWw7
CgogICAgSW1tZWRpYXRlSGVscENCKGl0ZW0sIGNsaWVudF9kYXRhLCAwKTsKfQoKCi8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLy8gQnV0dG9uIHRpcHMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8g
VHJ1ZSBpZmYgYnV0dG9uIHRpcHMgYXJlIGVuYWJsZWQuCnN0YXRpYyBib29sIGJ1dHRvbl90aXBz
X2VuYWJsZWQgICAgICAgPSB0cnVlOwoKLy8gVHJ1ZSBpZmYgdGV4dCB0aXBzIGFyZSBlbmFibGVk
LgpzdGF0aWMgYm9vbCB0ZXh0X3RpcHNfZW5hYmxlZCAgICAgICAgID0gdHJ1ZTsKCi8vIFRydWUg
aWZmIGJ1dHRvbiBkb2NzIGFyZSBlbmFibGVkLgpzdGF0aWMgYm9vbCBidXR0b25fZG9jc19lbmFi
bGVkICAgICAgID0gdHJ1ZTsKCi8vIFRydWUgaWZmIHRleHQgZG9jcyBhcmUgZW5hYmxlZC4Kc3Rh
dGljIGJvb2wgdGV4dF9kb2NzX2VuYWJsZWQgICAgICAgICA9IHRydWU7CgovLyBUaGUgc2hlbGwg
Y29udGFpbmluZyB0aGUgdGlwIGxhYmVsLgpzdGF0aWMgV2lkZ2V0IHRpcF9zaGVsbCAgICAgICAg
ICAgICAgID0gMDsKCi8vIFRoZSB0aXAgbGFiZWwuCnN0YXRpYyBXaWRnZXQgdGlwX2xhYmVsICAg
ICAgICAgICAgICAgPSAwOwoKLy8gVGhlIHRpcCByb3c7IGEgUm93Q29sdW1uIHdpZGdldCBzdXJy
b3VuZGluZyB0aGUgbGFiZWwuCnN0YXRpYyBXaWRnZXQgdGlwX3JvdyAgICAgICAgICAgICAgICAg
PSAwOwoKLy8gVHJ1ZSBpZiB0aGUgYnV0dG9uIHRpcCBzaGVsbCBpcyByYWlzZWQuCnN0YXRpYyBi
b29sIHRpcF9wb3BwZWRfdXAgICAgICAgICAgICAgPSBmYWxzZTsKCi8vIFRoZSB0aW1lciB1c2Vk
IGZvciB0aGUgZGVsYXkgdW50aWwgdGhlIHRpcCBpcyByYWlzZWQuCnN0YXRpYyBYdEludGVydmFs
SWQgcmFpc2VfdGlwX3RpbWVyICAgPSAwOwoKLy8gVGhlIHRpbWVyIHVzZWQgZm9yIHRoZSBkZWxh
eSB1bnRpbCB0aGUgdGlwIGlzIGNsZWFyZWQuCnN0YXRpYyBYdEludGVydmFsSWQgY2xlYXJfdGlw
X3RpbWVyICAgPSAwOwoKLy8gVGhlIHRpbWVyIHVzZWQgZm9yIHRoZSBkZWxheSB1bnRpbCB0aGUg
ZG9jdW1lbnRhdGlvbiBpcyBzaG93bi4Kc3RhdGljIFh0SW50ZXJ2YWxJZCByYWlzZV9kb2NfdGlt
ZXIgICA9IDA7CgovLyBUaGUgdGltZXIgdXNlZCBmb3IgdGhlIGRlbGF5IHVudGlsIHRoZSBkb2N1
bWVudGF0aW9uIGlzIGNsZWFyZWQuCnN0YXRpYyBYdEludGVydmFsSWQgY2xlYXJfZG9jX3RpbWVy
ICAgPSAwOwoKLy8gRGVsYXkgdGltZXMgKGluIG1zKQppbnQgaGVscF9idXR0b25fdGlwX2RlbGF5
ID0gNzUwOyAgLy8gRGVsYXkgYmVmb3JlIHJhaXNpbmcgYnV0dG9uIHRpcAppbnQgaGVscF92YWx1
ZV90aXBfZGVsYXkgID0gNzUwOyAgLy8gRGVsYXkgYmVmb3JlIHJhaXNpbmcgdmFsdWUgdGlwCmlu
dCBoZWxwX2J1dHRvbl9kb2NfZGVsYXkgPSAwOyAgICAvLyBEZWxheSBiZWZvcmUgc2hvd2luZyBi
dXR0b24gZG9jCmludCBoZWxwX3ZhbHVlX2RvY19kZWxheSAgPSAwOyAgICAvLyBEZWxheSBiZWZv
cmUgc2hvd2luZyB2YWx1ZSBkb2MKaW50IGhlbHBfY2xlYXJfZG9jX2RlbGF5ICA9IDEwMDA7IC8v
IERlbGF5IGJlZm9yZSBjbGVhcmluZyBkb2MKaW50IGhlbHBfY2xlYXJfdGlwX2RlbGF5ICA9IDUw
OyAgIC8vIERlbGF5IGJlZm9yZSBjbGVhcmluZyB0aXAKCgovLyBIZWxwZXI6IGNhbmNlbCB0aGUg
dGltZXIgZ2l2ZW4gaW4gQ0xJRU5UX0RBVEEKc3RhdGljIHZvaWQgQ2FuY2VsVGltZXIoV2lkZ2V0
LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlcikKewogICAgWHRJbnRlcnZhbElkIHRp
bWVyID0gWHRJbnRlcnZhbElkKGNsaWVudF9kYXRhKTsKICAgIFh0UmVtb3ZlVGltZU91dCh0aW1l
cik7Cn0KCi8vIEhlbHBlcjogY2FuY2VsIFJBSVNFX0RPQ19USU1FUgpzdGF0aWMgdm9pZCBDYW5j
ZWxSYWlzZURvYyhXaWRnZXQgPSAwLCBYdFBvaW50ZXIgPSAwLCBYdFBvaW50ZXIgPSAwKQp7CiAg
ICBpZiAocmFpc2VfZG9jX3RpbWVyKQogICAgewoJWHRSZW1vdmVUaW1lT3V0KHJhaXNlX2RvY190
aW1lcik7CglyYWlzZV9kb2NfdGltZXIgPSAwOwogICAgfQp9CgovLyBIZWxwZXI6IGNhbmNlbCBS
QUlTRV9USVBfVElNRVIKc3RhdGljIHZvaWQgQ2FuY2VsUmFpc2VUaXAoV2lkZ2V0ID0gMCwgWHRQ
b2ludGVyID0gMCwgWHRQb2ludGVyID0gMCkKewogICAgaWYgKHJhaXNlX3RpcF90aW1lcikKICAg
IHsKCVh0UmVtb3ZlVGltZU91dChyYWlzZV90aXBfdGltZXIpOwoJcmFpc2VfdGlwX3RpbWVyID0g
MDsKICAgIH0KfQoKLy8gRXZlbnQgaW5mb3JtYXRpb24gcGFzc2VkIHRocm91Z2ggdGltZW91dHMs
IGV0Yy4Kc3RydWN0IFRpcEluZm8gewogICAgWEV2ZW50IGV2ZW50OwkJLy8gVGhlIGV2ZW50IHN0
cnVjdHVyZQogICAgV2lkZ2V0IHdpZGdldDsJCS8vIFRoZSB3aWRnZXQgdGhlIGV2ZW50IG9jY3Vy
cmVkIGluCn07CgovLyBSYWlzZSBidXR0b24gdGlwIG5lYXIgdGhlIHdpZGdldCBnaXZlbiBpbiBD
TElFTlRfREFUQQpzdGF0aWMgdm9pZCBQb3B1cFRpcChYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0
SW50ZXJ2YWxJZCAqdGltZXIpCnsKICAgICh2b2lkKSB0aW1lcjsKICAgIGFzc2VydCgqdGltZXIg
PT0gcmFpc2VfdGlwX3RpbWVyKTsKICAgIHJhaXNlX3RpcF90aW1lciA9IDA7CgogICAgVGlwSW5m
byAqdGkgPSAoVGlwSW5mbyAqKWNsaWVudF9kYXRhOwogICAgV2lkZ2V0JiB3ID0gdGktPndpZGdl
dDsKCiAgICBpZiAodyA9PSAwKQoJcmV0dXJuOwoKICAgIFh0UmVtb3ZlQ2FsbGJhY2sodywgWG1O
ZGVzdHJveUNhbGxiYWNrLCBDYW5jZWxSYWlzZVRpcCwgMCk7CgogICAgTVN0cmluZyB0aXAgPSBn
ZXRfdGlwX3N0cmluZyh3LCAmdGktPmV2ZW50KTsKICAgIGlmICh0aXAuaXNOdWxsKCkgfHwgaXNO
b25lKHRpcCkgfHwgdGlwLmlzRW1wdHkoKSkKCXJldHVybjsKCiAgICBpZiAoIVh0SXNSZWFsaXpl
ZCh3KSkKCXJldHVybjsKCiAgICBpZiAodGlwX3NoZWxsID09IDApCiAgICB7CglBcmcgYXJnc1sx
MF07CglpbnQgYXJnOwoKCWFyZyA9IDA7CglYdFNldEFyZyhhcmdzW2FyZ10sIFhtTmFsbG93U2hl
bGxSZXNpemUsIHRydWUpOyAgICAgICAgICAgICBhcmcrKzsKCVh0U2V0QXJnKGFyZ3NbYXJnXSwg
WG1OeCwgV2lkdGhPZlNjcmVlbihYdFNjcmVlbih3KSkgKyAxKTsgIGFyZysrOwoJWHRTZXRBcmco
YXJnc1thcmddLCBYbU55LCBIZWlnaHRPZlNjcmVlbihYdFNjcmVlbih3KSkgKyAxKTsgYXJnKys7
CglYdFNldEFyZyhhcmdzW2FyZ10sIFhtTndpZHRoLCAgICAgICAgICAgIDEwKTsgICAgICAgICAg
ICAgICBhcmcrKzsKCVh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OaGVpZ2h0LCAgICAgICAgICAgMTAp
OyAgICAgICAgICAgICAgIGFyZysrOwoJdGlwX3NoZWxsID0gdmVyaWZ5KFhtQ3JlYXRlTWVudVNo
ZWxsKGZpbmRUaGVUb3BMZXZlbFNoZWxsKHcpLAoJCQkJCSAgICAgInRpcFNoZWxsIiwgYXJncywg
YXJnKSk7CgoJYXJnID0gMDsKCVh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1ObWFyZ2luV2lkdGgsIDAp
OyAgICAgICAgICAgICAgICAgICAgIGFyZysrOwoJWHRTZXRBcmcoYXJnc1thcmddLCBYbU5tYXJn
aW5IZWlnaHQsIDApOyAgICAgICAgICAgICAgICAgICAgYXJnKys7CglYdFNldEFyZyhhcmdzW2Fy
Z10sIFhtTnJlc2l6ZVdpZHRoLCBUcnVlKTsgICAgICAgICAgICAgICAgICBhcmcrKzsKCVh0U2V0
QXJnKGFyZ3NbYXJnXSwgWG1OcmVzaXplSGVpZ2h0LCBUcnVlKTsgICAgICAgICAgICAgICAgIGFy
ZysrOwoJWHRTZXRBcmcoYXJnc1thcmddLCBYbU5ib3JkZXJXaWR0aCwgMCk7ICAgICAgICAgICAg
ICAgICAgICAgYXJnKys7CglYdFNldEFyZyhhcmdzW2FyZ10sIFhtTnNoYWRvd1RoaWNrbmVzcywg
MCk7ICAgICAgICAgICAgICAgICBhcmcrKzsKCXRpcF9yb3cgPSB2ZXJpZnkoWG1DcmVhdGVSb3dD
b2x1bW4odGlwX3NoZWxsLCAidGlwUm93IiwgYXJncywgYXJnKSk7CglYdE1hbmFnZUNoaWxkKHRp
cF9yb3cpOwoKCWFyZyA9IDA7CglYdFNldEFyZyhhcmdzW2FyZ10sIFhtTmxhYmVsU3RyaW5nLCB0
aXAueG1zdHJpbmcoKSk7ICAgICAgICBhcmcrKzsKCVh0U2V0QXJnKGFyZ3NbYXJnXSwgWG1OcmVj
b21wdXRlU2l6ZSwgdHJ1ZSk7ICAgICAgICAgICAgICAgIGFyZysrOwoJWHRTZXRBcmcoYXJnc1th
cmddLCBYbU5hbGlnbm1lbnQsIFhtQUxJR05NRU5UX0JFR0lOTklORyk7ICAgYXJnKys7Cgl0aXBf
bGFiZWwgPSBYbUNyZWF0ZUxhYmVsKHRpcF9yb3csICJ0aXBMYWJlbCIsIGFyZ3MsIGFyZyk7CglY
dE1hbmFnZUNoaWxkKHRpcF9sYWJlbCk7CgoJLy8gU2ltcGxlIGhhY2sgdG8gZW5zdXJlIHNoZWxs
IGlzIHJlYWxpemVkCglYdFBvcHVwKHRpcF9zaGVsbCwgWHRHcmFiTm9uZSk7CglYdFBvcGRvd24o
dGlwX3NoZWxsKTsKICAgIH0KCiAgICBpZiAobGVzc3RpZl92ZXJzaW9uIDw9IDg3KQogICAgewoJ
Ly8gTGVzc1RpZiAwLjg3IGFuZCBlYXJsaWVyIGZhaWxzIHRvIHJlc2l6ZSB0aGUgc2hlbGwgcHJv
cGVybHkKCS8vIC0gdGhlIGJvcmRlciB3aWR0aCBpcyB6ZXJvLiAgVXNlIHRoaXMgaGFjayBpbnN0
ZWFkLgoJWG1Gb250TGlzdCBmb250X2xpc3Q7CglYdFZhR2V0VmFsdWVzKHRpcF9sYWJlbCwgWG1O
Zm9udExpc3QsICZmb250X2xpc3QsIE5VTEwpOwogICAgCglEaW1lbnNpb24gdGlwX3dpZHRoICA9
IHRpcC53aWR0aChmb250X2xpc3QpICArIDY7CglEaW1lbnNpb24gdGlwX2hlaWdodCA9IHRpcC5o
ZWlnaHQoZm9udF9saXN0KSArIDY7CgoJWHRSZXNpemVXaWRnZXQodGlwX2xhYmVsLCB0aXBfd2lk
dGgsIHRpcF9oZWlnaHQsIDApOwoJWHRSZXNpemVXaWRnZXQodGlwX3JvdywgICB0aXBfd2lkdGgs
IHRpcF9oZWlnaHQsIDApOwoJWHRSZXNpemVXaWRnZXQodGlwX3NoZWxsLCB0aXBfd2lkdGgsIHRp
cF9oZWlnaHQsIDEpOwogICAgfQoKICAgIFh0VmFTZXRWYWx1ZXModGlwX2xhYmVsLCBYbU5sYWJl
bFN0cmluZywgdGlwLnhtc3RyaW5nKCksIE5VTEwpOwoKICAgIC8vIEZpbmQgYSBwb3NzaWJsZSBw
bGFjZSBmb3IgdGhlIHRpcC4gIENvbnNpZGVyIHRoZSBhbGlnbm1lbnQgb2YKICAgIC8vIHRoZSBw
YXJlbnQgY29tcG9zaXRlIGFzIHdlbGwgYXMgdGhlIGRpc3RhbmNlIHRvIHRoZSBzY3JlZW4gZWRn
ZS4KCiAgICAvLyAgICAgICAgICAgIFRvcExlZnQgVG9wUmlnaHQKICAgIC8vIExlZnRUb3AgICAg
WFhYWFhYWFhYWFhYWFhYWCBSaWdodFRvcAogICAgLy8gICAgICAgICAgICBYWFhYWFhYWFhYWFhY
WFhYCiAgICAvLyBMZWZ0Qm90dG9tIFhYWFhYWFhYWFhYWFhYWFggUmlnaHRCb3R0b20KICAgIC8v
ICAgICAgICAgQm90dG9tTGVmdCBCb3R0b21SaWdodAoKICAgIGVudW0gUGxhY2VtZW50IHsgTGVm
dFRvcCwgUmlnaHRUb3AsCgkJICAgICBMZWZ0Qm90dG9tLCBSaWdodEJvdHRvbSwKCQkgICAgIEJv
dHRvbUxlZnQsIEJvdHRvbVJpZ2h0LAoJCSAgICAgVG9wTGVmdCwgVG9wUmlnaHQgfTsKCiAgICBz
dGF0aWMgUGxhY2VtZW50IGxhc3RfcGxhY2VtZW50ID0gQm90dG9tUmlnaHQ7CiAgICBzdGF0aWMg
V2lkZ2V0IGxhc3RfcGFyZW50ID0gMDsKCiAgICBXaWRnZXQgcGFyZW50ID0gWHRQYXJlbnQodyk7
CiAgICBpZiAocGFyZW50ICE9IGxhc3RfcGFyZW50IHx8IFhtSXNUZXh0KHcpKQoJbGFzdF9wbGFj
ZW1lbnQgPSBCb3R0b21SaWdodDsKCiAgICAvLyBVc2UgMTggcnVucyB0byBmaW5kIG91dCB0aGUg
YmVzdCBwb3NpdGlvbjoKICAgIC8vIFJ1biAwOiB0cnkgbGFzdCBwbGFjZW1lbnQgaW4gc2FtZSBh
bGlnbm1lbnQKICAgIC8vIFJ1biAxLTg6IHRyeSBhdCB2YXJpb3VzIHNpZGVzIG9mIFcuICBEb24n
dCBoaWRlIG90aGVyIHdpZGdldHMKICAgIC8vICAgICAgICAgIGFuZCBkb24ndCBtb3ZlIHRpcCBv
ZmYgdGhlIHNjcmVlbi4KICAgIC8vIFJ1biA5LTE3OiBzYW1lIGFzIDAtOCwgYnV0IGRvbid0IGNh
cmUgZm9yIGhpZGluZyBvdGhlciB3aWRnZXRzLgogICAgZm9yIChpbnQgcnVuID0gMDsgcnVuIDwg
MTg7IHJ1bisrKQogICAgewoJUGxhY2VtZW50IHBsYWNlbWVudCA9IGxhc3RfcGxhY2VtZW50OwoJ
c3dpdGNoIChydW4gJSA5KQoJewoJY2FzZSAwOiBwbGFjZW1lbnQgPSBsYXN0X3BsYWNlbWVudDsg
YnJlYWs7CgljYXNlIDE6IHBsYWNlbWVudCA9IEJvdHRvbVJpZ2h0OyBicmVhazsKCWNhc2UgMjog
cGxhY2VtZW50ID0gUmlnaHRCb3R0b207IGJyZWFrOwoJY2FzZSAzOiBwbGFjZW1lbnQgPSBSaWdo
dFRvcDsgICAgYnJlYWs7CgljYXNlIDQ6IHBsYWNlbWVudCA9IFRvcFJpZ2h0OyAgICBicmVhazsK
CWNhc2UgNTogcGxhY2VtZW50ID0gQm90dG9tTGVmdDsgIGJyZWFrOwoJY2FzZSA2OiBwbGFjZW1l
bnQgPSBMZWZ0Qm90dG9tOyAgYnJlYWs7CgljYXNlIDc6IHBsYWNlbWVudCA9IExlZnRUb3A7ICAg
ICBicmVhazsKCWNhc2UgODogcGxhY2VtZW50ID0gVG9wTGVmdDsgICAgIGJyZWFrOwoJfQoKCWJv
b2wgb2sgPSBmYWxzZTsKCglpZiAoWG1Jc1Jvd0NvbHVtbihwYXJlbnQpKQoJewoJICAgIC8vIFdl
J3JlIHBhcnQgb2YgYSBidXR0b24gYm94OiBpZiB2ZXJ0aWNhbGx5IGFsaWduZWQsIHBsYWNlCgkg
ICAgLy8gdGlwIG9uIHRoZSByaWdodDsgb3RoZXJ3aXNlLCBwbGFjZSBpdCBhdCB0aGUgYm90dG9t
LgoJICAgIHVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb24gPSBYbUhPUklaT05UQUw7CgkgICAgWHRW
YUdldFZhbHVlcyhwYXJlbnQsIFhtTm9yaWVudGF0aW9uLCAmb3JpZW50YXRpb24sIE5VTEwpOwoK
CSAgICBzd2l0Y2ggKHBsYWNlbWVudCkKCSAgICB7CgkgICAgY2FzZSBCb3R0b21MZWZ0OgoJICAg
IGNhc2UgQm90dG9tUmlnaHQ6CgkgICAgY2FzZSBUb3BMZWZ0OgoJICAgIGNhc2UgVG9wUmlnaHQ6
CgkJaWYgKG9yaWVudGF0aW9uID09IFhtSE9SSVpPTlRBTCkKCQkgICAgb2sgPSB0cnVlOwoJCWJy
ZWFrOwoKCSAgICBjYXNlIExlZnRCb3R0b206CgkgICAgY2FzZSBMZWZ0VG9wOgoJICAgIGNhc2Ug
UmlnaHRCb3R0b206CgkgICAgY2FzZSBSaWdodFRvcDoKCQlpZiAob3JpZW50YXRpb24gPT0gWG1W
RVJUSUNBTCkKCQkgICAgb2sgPSB0cnVlOwoJCWJyZWFrOwoJICAgIH0KCX0KCWVsc2UgaWYgKFht
SXNGb3JtKHBhcmVudCkpCgl7CgkgICAgLy8gV2UncmUgcGFydCBvZiBhIGZvcm06IHRyeSB0byBw
bGFjZSB0aGUgdGlwIGJleW9uZCBhIGZvcm0KCSAgICAvLyBib3VuZGFyeS4KCgkgICAgaW50IGZy
YWN0aW9uX2Jhc2UgPSAxMDA7CgkgICAgWHRWYUdldFZhbHVlcyhwYXJlbnQsIFhtTmZyYWN0aW9u
QmFzZSwgJmZyYWN0aW9uX2Jhc2UsIE5VTEwpOwoJICAgIGlmIChmcmFjdGlvbl9iYXNlID09IDEw
MCkKCSAgICB7CgkJLy8gU2ltcGxlIGZvcm0KCQlvayA9IHRydWU7CgkgICAgfQoJICAgIGVsc2UK
CSAgICB7CgkJLy8gQ29tbWFuZCB0b29sIG9yIGxpa2V3aXNlCgkJdW5zaWduZWQgY2hhciBsZWZ0
X2F0dGFjaG1lbnQgICA9IFhtQVRUQUNIX05PTkU7CgkJdW5zaWduZWQgY2hhciByaWdodF9hdHRh
Y2htZW50ICA9IFhtQVRUQUNIX05PTkU7CgkJdW5zaWduZWQgY2hhciB0b3BfYXR0YWNobWVudCAg
ICA9IFhtQVRUQUNIX05PTkU7CgkJdW5zaWduZWQgY2hhciBib3R0b21fYXR0YWNobWVudCA9IFht
QVRUQUNIX05PTkU7CgoJCVh0VmFHZXRWYWx1ZXModywgCgkJCSAgICAgIFhtTmxlZnRBdHRhY2ht
ZW50LCAgICZsZWZ0X2F0dGFjaG1lbnQsCgkJCSAgICAgIFhtTnJpZ2h0QXR0YWNobWVudCwgICZy
aWdodF9hdHRhY2htZW50LAoJCQkgICAgICBYbU50b3BBdHRhY2htZW50LCAgICAmdG9wX2F0dGFj
aG1lbnQsCgkJCSAgICAgIFhtTmJvdHRvbUF0dGFjaG1lbnQsICZib3R0b21fYXR0YWNobWVudCwK
CQkJICAgICAgTlVMTCk7CgoJCWludCBsZWZ0X3Bvc2l0aW9uICAgPSAwOwoJCWludCByaWdodF9w
b3NpdGlvbiAgPSAwOwoJCWludCB0b3BfcG9zaXRpb24gICAgPSAwOwoJCWludCBib3R0b21fcG9z
aXRpb24gPSAwOwoKCQlYdFZhR2V0VmFsdWVzKHcsIAoJCQkgICAgICBYbU5sZWZ0UG9zaXRpb24s
ICAgJmxlZnRfcG9zaXRpb24sCgkJCSAgICAgIFhtTnJpZ2h0UG9zaXRpb24sICAmcmlnaHRfcG9z
aXRpb24sCgkJCSAgICAgIFhtTnRvcFBvc2l0aW9uLCAgICAmdG9wX3Bvc2l0aW9uLAoJCQkgICAg
ICBYbU5ib3R0b21Qb3NpdGlvbiwgJmJvdHRvbV9wb3NpdGlvbiwKCQkJICAgICAgTlVMTCk7CgoJ
CXN3aXRjaCAocGxhY2VtZW50KQoJCXsKCQljYXNlIEJvdHRvbUxlZnQ6CgkJY2FzZSBCb3R0b21S
aWdodDoKCQkgICAgaWYgKGJvdHRvbV9hdHRhY2htZW50ID09IFhtQVRUQUNIX1BPU0lUSU9OCgkJ
CSYmIGJvdHRvbV9wb3NpdGlvbiA+PSBmcmFjdGlvbl9iYXNlKQoJCQlvayA9IHRydWU7CgkJICAg
IGlmIChib3R0b21fYXR0YWNobWVudCA9PSBYbUFUVEFDSF9GT1JNCgkJCXx8IHRvcF9hdHRhY2ht
ZW50ID09IFhtQVRUQUNIX09QUE9TSVRFX0ZPUk0pCgkJCW9rID0gdHJ1ZTsKCQkgICAgYnJlYWs7
CgoJCWNhc2UgUmlnaHRCb3R0b206CgkJY2FzZSBSaWdodFRvcDoKCQkgICAgaWYgKHJpZ2h0X2F0
dGFjaG1lbnQgPT0gWG1BVFRBQ0hfUE9TSVRJT04KCQkJJiYgcmlnaHRfcG9zaXRpb24gPj0gZnJh
Y3Rpb25fYmFzZSkKCQkJb2sgPSB0cnVlOwoJCSAgICBpZiAocmlnaHRfYXR0YWNobWVudCA9PSBY
bUFUVEFDSF9GT1JNCgkJCXx8IGxlZnRfYXR0YWNobWVudCA9PSBYbUFUVEFDSF9PUFBPU0lURV9G
T1JNKQoJCQlvayA9IHRydWU7CgkJICAgIGJyZWFrOwoKCQljYXNlIFRvcExlZnQ6CgkJY2FzZSBU
b3BSaWdodDoKCQkgICAgaWYgKHRvcF9hdHRhY2htZW50ID09IFhtQVRUQUNIX1BPU0lUSU9OCgkJ
CSYmIHRvcF9wb3NpdGlvbiA9PSAwKQoJCQlvayA9IHRydWU7CgkJICAgIGlmICh0b3BfYXR0YWNo
bWVudCA9PSBYbUFUVEFDSF9GT1JNCgkJCXx8IGJvdHRvbV9hdHRhY2htZW50ID09IFhtQVRUQUNI
X09QUE9TSVRFX0ZPUk0pCgkJCW9rID0gdHJ1ZTsKCQkgICAgYnJlYWs7CgoJCWNhc2UgTGVmdEJv
dHRvbToKCQljYXNlIExlZnRUb3A6CgkJICAgIGlmIChsZWZ0X2F0dGFjaG1lbnQgPT0gWG1BVFRB
Q0hfUE9TSVRJT04KCQkJJiYgbGVmdF9wb3NpdGlvbiA9PSAwKQoJCQlvayA9IHRydWU7CgkJICAg
IGlmIChsZWZ0X2F0dGFjaG1lbnQgPT0gWG1BVFRBQ0hfRk9STQoJCQl8fCByaWdodF9hdHRhY2ht
ZW50ID09IFhtQVRUQUNIX09QUE9TSVRFX0ZPUk0pCgkJCW9rID0gdHJ1ZTsKCQkgICAgYnJlYWs7
CgkJfQoJICAgIH0KCX0KCWVsc2UKCXsKCSAgICAvLyBBbnkgb3RoZXIgYWxpZ25tZW50CgkgICAg
b2sgPSB0cnVlOwoJfQoKCWlmICghb2sgJiYgcnVuIDw9IDgpCgkgICAgY29udGludWU7CgoJLy8g
RG9uJ3QgbW92ZSB0aXAgb2ZmIHRoZSBzY3JlZW4KCVhXaW5kb3dBdHRyaWJ1dGVzIHdfYXR0cmli
dXRlczsKCVhHZXRXaW5kb3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksICZ3
X2F0dHJpYnV0ZXMpOwoKCWlmIChYbUlzVGV4dCh3KSkKCXsKCSAgICB3X2F0dHJpYnV0ZXMud2lk
dGggID0gMDsKCSAgICB3X2F0dHJpYnV0ZXMuaGVpZ2h0ID0gMDsKCX0KCglYdFdpZGdldEdlb21l
dHJ5IHRpcF9nZW9tZXRyeTsKCXRpcF9nZW9tZXRyeS5yZXF1ZXN0X21vZGUgPSBDV0hlaWdodCB8
IENXV2lkdGg7CglYdFF1ZXJ5R2VvbWV0cnkodGlwX3NoZWxsLCBOVUxMLCAmdGlwX2dlb21ldHJ5
KTsKCglpbnQgeF9vZmZzZXQgPSA1OwoJaW50IHlfb2Zmc2V0ID0gNTsKCglpbnQgZHggPSAwOwoJ
c3dpdGNoIChwbGFjZW1lbnQpCgl7CgljYXNlIExlZnRCb3R0b206CgljYXNlIExlZnRUb3A6Cgkg
ICAgZHggPSAtKHRpcF9nZW9tZXRyeS53aWR0aCArIHhfb2Zmc2V0KTsKCSAgICBicmVhazsKCWNh
c2UgUmlnaHRCb3R0b206CgljYXNlIFJpZ2h0VG9wOgoJICAgIGR4ID0gd19hdHRyaWJ1dGVzLndp
ZHRoICsgeF9vZmZzZXQ7CgkgICAgYnJlYWs7CgljYXNlIEJvdHRvbUxlZnQ6CgljYXNlIFRvcExl
ZnQ6CgkgICAgZHggPSB3X2F0dHJpYnV0ZXMud2lkdGggLyAyIC0gdGlwX2dlb21ldHJ5LndpZHRo
OwoJICAgIGJyZWFrOwoJY2FzZSBCb3R0b21SaWdodDoKCWNhc2UgVG9wUmlnaHQ6CgkgICAgZHgg
PSB3X2F0dHJpYnV0ZXMud2lkdGggLyAyOwoJICAgIGJyZWFrOwoJfQoKCWludCBkeSA9IDA7Cglz
d2l0Y2ggKHBsYWNlbWVudCkKCXsKCWNhc2UgTGVmdEJvdHRvbToKCWNhc2UgUmlnaHRCb3R0b206
CgkgICAgZHkgPSB3X2F0dHJpYnV0ZXMuaGVpZ2h0IC8gMjsKCSAgICBicmVhazsKCWNhc2UgTGVm
dFRvcDoKCWNhc2UgUmlnaHRUb3A6CgkgICAgZHkgPSB3X2F0dHJpYnV0ZXMuaGVpZ2h0IC8gMiAt
IHRpcF9nZW9tZXRyeS5oZWlnaHQ7CgkgICAgYnJlYWs7CgljYXNlIEJvdHRvbUxlZnQ6CgljYXNl
IEJvdHRvbVJpZ2h0OgoJICAgIGR5ID0gd19hdHRyaWJ1dGVzLmhlaWdodCArIHlfb2Zmc2V0OwoJ
ICAgIGJyZWFrOwoJY2FzZSBUb3BMZWZ0OgoJY2FzZSBUb3BSaWdodDoKCSAgICBkeSA9IC0odGlw
X2dlb21ldHJ5LmhlaWdodCArIHlfb2Zmc2V0KTsKCSAgICBicmVhazsKCX0KCglpZiAoWG1Jc1Rl
eHQodykpCgl7CgkgICAgQm94UG9pbnQgcG9zID0gcG9pbnQoJnRpLT5ldmVudCk7CgkgICAgZHgg
Kz0gcG9zW1hdOwoJICAgIGR5ICs9IHBvc1tZXTsKCX0KCgkvLyBEb24ndCBtb3ZlIHRpcCBvZmYg
dGhlIHNjcmVlbgoJV2luZG93IHdfY2hpbGQ7CglpbnQgeCwgeTsKCVhUcmFuc2xhdGVDb29yZGlu
YXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCB3X2F0dHJpYnV0ZXMucm9vdCwKCQkJICAg
ICAgZHgsIGR5LCAmeCwgJnksICZ3X2NoaWxkKTsKCWlmICh4IDwgMCkKCSAgICBjb250aW51ZTsK
CWlmICh5IDwgMCkKCSAgICBjb250aW51ZTsKCWlmICh4ICsgdGlwX2dlb21ldHJ5LndpZHRoID49
IFdpZHRoT2ZTY3JlZW4oWHRTY3JlZW4odykpKQoJICAgIGNvbnRpbnVlOwoJaWYgKHkgKyB0aXBf
Z2VvbWV0cnkuaGVpZ2h0ID49IEhlaWdodE9mU2NyZWVuKFh0U2NyZWVuKHcpKSkKCSAgICBjb250
aW51ZTsKCgkvLyBNb3ZlIHRpcCB0byBYLCBZLi4uCglYdFZhU2V0VmFsdWVzKHRpcF9zaGVsbCwK
CQkgICAgICBYbU54LCB4LAoJCSAgICAgIFhtTnksIHksCgkJICAgICAgTlVMTCk7CgkKCS8vIGFu
ZCBwb3AgaXQgdXAuCglYdFBvcHVwKHRpcF9zaGVsbCwgWHRHcmFiTm9uZSk7Cgl0aXBfcG9wcGVk
X3VwID0gdHJ1ZTsKCWxhc3RfcGxhY2VtZW50ID0gcGxhY2VtZW50OwoJbGFzdF9wYXJlbnQgICAg
PSBwYXJlbnQ7CgoJcmV0dXJuOwogICAgfQp9CgovLyBTaG93IHRoZSBkb2N1bWVudGF0aW9uIGZv
ciB0aGUgd2lkZ2V0IGdpdmVuIGluIENMSUVOVF9EQVRBCnN0YXRpYyB2b2lkIFNob3dEb2N1bWVu
dGF0aW9uKFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRJbnRlcnZhbElkICp0aW1lcikKewogICAg
KHZvaWQpIHRpbWVyOwogICAgYXNzZXJ0KCp0aW1lciA9PSByYWlzZV9kb2NfdGltZXIpOwogICAg
cmFpc2VfZG9jX3RpbWVyID0gMDsKCiAgICBUaXBJbmZvICp0aSA9IChUaXBJbmZvICopY2xpZW50
X2RhdGE7CiAgICBYdFJlbW92ZUNhbGxiYWNrKHRpLT53aWRnZXQsIFhtTmRlc3Ryb3lDYWxsYmFj
aywgQ2FuY2VsUmFpc2VEb2MsIDApOwoKICAgIGlmIChEaXNwbGF5RG9jdW1lbnRhdGlvbiAhPSAw
IAoJJiYgKFhtSXNUZXh0KHRpLT53aWRnZXQpID8gdGV4dF9kb2NzX2VuYWJsZWQgOiBidXR0b25f
ZG9jc19lbmFibGVkKSkKICAgIHsKCS8vIERpc3BsYXkgZG9jdW1lbnRhdGlvbgoJTVN0cmluZyBk
b2MgPSBnZXRfZG9jdW1lbnRhdGlvbl9zdHJpbmcodGktPndpZGdldCwgJnRpLT5ldmVudCk7CglE
aXNwbGF5RG9jdW1lbnRhdGlvbihkb2MpOwogICAgfQp9CgovLyBDbGVhciB0aGUgZG9jdW1lbnRh
dGlvbgpzdGF0aWMgdm9pZCBDbGVhckRvY3VtZW50YXRpb25Ob3coV2lkZ2V0IHcpOwoKc3RhdGlj
IHZvaWQgQ2FuY2VsQ2xlYXJEb2N1bWVudGF0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIsIFh0UG9p
bnRlcikKewogICAgaWYgKGNsZWFyX2RvY190aW1lciA9PSAwKQoJcmV0dXJuOwoKICAgIFh0UmVt
b3ZlVGltZU91dChjbGVhcl9kb2NfdGltZXIpOwogICAgY2xlYXJfZG9jX3RpbWVyID0gMDsKICAg
IENsZWFyRG9jdW1lbnRhdGlvbk5vdyh3KTsKfQoKc3RhdGljIHZvaWQgQ2xlYXJEb2N1bWVudGF0
aW9uTm93KFdpZGdldCB3KQp7CiAgICBpZiAoRGlzcGxheURvY3VtZW50YXRpb24gIT0gMCAKCSYm
IChYbUlzVGV4dCh3KSA/IHRleHRfZG9jc19lbmFibGVkIDogYnV0dG9uX2RvY3NfZW5hYmxlZCkp
CiAgICB7CgkvLyBDbGVhciBkb2N1bWVudGF0aW9uCglzdGF0aWMgTVN0cmluZyBlbXB0eSgwLCB0
cnVlKTsKCURpc3BsYXlEb2N1bWVudGF0aW9uKGVtcHR5KTsKICAgIH0KfQoKc3RhdGljIHZvaWQg
Q2xlYXJEb2N1bWVudGF0aW9uKFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRJbnRlcnZhbElkICp0
aW1lcikKewogICAgKHZvaWQpIHRpbWVyOwogICAgYXNzZXJ0KCp0aW1lciA9PSBjbGVhcl9kb2Nf
dGltZXIpOwogICAgY2xlYXJfZG9jX3RpbWVyID0gMDsKCiAgICBUaXBJbmZvICp0aSA9IChUaXBJ
bmZvICopY2xpZW50X2RhdGE7CgogICAgWHRSZW1vdmVDYWxsYmFjayh0aS0+d2lkZ2V0LCBYbU5k
ZXN0cm95Q2FsbGJhY2ssIAoJCSAgICAgQ2FuY2VsQ2xlYXJEb2N1bWVudGF0aW9uLCAwKTsKICAg
IENsZWFyRG9jdW1lbnRhdGlvbk5vdyh0aS0+d2lkZ2V0KTsKfQoKLy8gQ2xlYXIgdGlwcyBhbmQg
ZG9jdW1lbnRhdGlvbgpzdGF0aWMgdm9pZCBDbGVhclRpcChXaWRnZXQgdywgWEV2ZW50ICpldmVu
dCkKewogICAgQ2FuY2VsUmFpc2VUaXAoKTsKICAgIENhbmNlbFJhaXNlRG9jKCk7CgogICAgaWYg
KHRpcF9wb3BwZWRfdXApCiAgICB7CglYdFBvcGRvd24odGlwX3NoZWxsKTsKCXRpcF9wb3BwZWRf
dXAgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoY2xlYXJfZG9jX3RpbWVyKQogICAgewoJWHRSZW1v
dmVUaW1lT3V0KGNsZWFyX2RvY190aW1lcik7CgljbGVhcl9kb2NfdGltZXIgPSAwOwogICAgfQoK
ICAgIGlmIChEaXNwbGF5RG9jdW1lbnRhdGlvbiAhPSAwIAoJJiYgKFhtSXNUZXh0KHcpID8gdGV4
dF9kb2NzX2VuYWJsZWQgOiBidXR0b25fZG9jc19lbmFibGVkKSkKICAgIHsKCS8vIFdlIGRvbid0
IGNsZWFyIHRoZSBkb2N1bWVudGF0aW9uIGltbWVkaWF0ZWx5LCBzaW5jZSB0aGUKCS8vIHVzZXIg
bWlnaHQgYmUgbW92aW5nIG92ZXIgdG8gYW5vdGhlciBidXR0b24sIGFuZCB3ZSBkb24ndAoJLy8g
d2FudCBmbGFzaGluZyBkb2N1bWVudGF0aW9uIHN0cmluZ3MuCgoJc3RhdGljIFRpcEluZm8gdGk7
Cgl0aS5ldmVudCAgPSAqZXZlbnQ7Cgl0aS53aWRnZXQgPSB3OwoKCWNsZWFyX2RvY190aW1lciA9
CgkgICAgWHRBcHBBZGRUaW1lT3V0KFh0V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQodyksCgkJ
CSAgICBoZWxwX2NsZWFyX2RvY19kZWxheSwgCgkJCSAgICBDbGVhckRvY3VtZW50YXRpb24sIFh0
UG9pbnRlcigmdGkpKTsKCgkvLyBTaG91bGQgdGhlIGJ1dHRvbiBiZSBkZXN0cm95ZWQgYmVmb3Jl
aGFuZCwgY2FuY2VsIHRpbWVvdXQKCVh0UmVtb3ZlQ2FsbGJhY2sodywgWG1OZGVzdHJveUNhbGxi
YWNrLCBDYW5jZWxDbGVhckRvY3VtZW50YXRpb24sIDApOwoJWHRBZGRDYWxsYmFjayAgICh3LCBY
bU5kZXN0cm95Q2FsbGJhY2ssIENhbmNlbENsZWFyRG9jdW1lbnRhdGlvbiwgMCk7CiAgICB9Cn0K
Ci8vIFJhaXNlIHRpcHMgYW5kIGRvY3VtZW50YXRpb24Kc3RhdGljIHZvaWQgUmFpc2VUaXAoV2lk
Z2V0IHcsIFhFdmVudCAqZXZlbnQpCnsKICAgIGlmIChEaXNwbGF5RG9jdW1lbnRhdGlvbiAhPSAw
CgkmJiAoWG1Jc1RleHQodykgPyB0ZXh0X2RvY3NfZW5hYmxlZCA6IGJ1dHRvbl9kb2NzX2VuYWJs
ZWQpKQogICAgewoJLy8gTm8gbmVlZCB0byBjbGVhciB0aGUgZG9jdW1lbnRhdGlvbgoJaWYgKGNs
ZWFyX2RvY190aW1lcikKCXsKCSAgICBYdFJlbW92ZVRpbWVPdXQoY2xlYXJfZG9jX3RpbWVyKTsK
CSAgICBjbGVhcl9kb2NfdGltZXIgPSAwOwoJfQoKCXN0YXRpYyBUaXBJbmZvIHRpOwoJdGkuZXZl
bnQgID0gKmV2ZW50OwoJdGkud2lkZ2V0ID0gdzsKCglpbnQgZG9jX2RlbGF5ID0gCgkgICAgWG1J
c1RleHQodykgPyBoZWxwX3ZhbHVlX2RvY19kZWxheSA6IGhlbHBfYnV0dG9uX2RvY19kZWxheTsK
CglDYW5jZWxSYWlzZURvYygpOwoKCXJhaXNlX2RvY190aW1lciA9CgkgICAgWHRBcHBBZGRUaW1l
T3V0KFh0V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQodyksCgkJCSAgICBkb2NfZGVsYXksCgkJ
CSAgICBTaG93RG9jdW1lbnRhdGlvbiwgWHRQb2ludGVyKCZ0aSkpOwoKCS8vIFNob3VsZCBXIGJl
IGRlc3Ryb3llZCBiZWZvcmVoYW5kLCBjYW5jZWwgdGltZW91dAoJWHRBZGRDYWxsYmFjayh3LCBY
bU5kZXN0cm95Q2FsbGJhY2ssIENhbmNlbFJhaXNlRG9jLCAwKTsKICAgIH0KCiAgICBpZiAoWG1J
c1RleHQodykgPyB0ZXh0X3RpcHNfZW5hYmxlZCA6IGJ1dHRvbl90aXBzX2VuYWJsZWQpCiAgICB7
CglzdGF0aWMgVGlwSW5mbyB0aTsKCXRpLmV2ZW50ICA9ICpldmVudDsKCXRpLndpZGdldCA9IHc7
CgoJaW50IHRpcF9kZWxheSA9IAoJICAgIFhtSXNUZXh0KHcpID8gaGVscF92YWx1ZV90aXBfZGVs
YXkgOiBoZWxwX2J1dHRvbl90aXBfZGVsYXk7CgoJQ2FuY2VsUmFpc2VUaXAoKTsKCglyYWlzZV90
aXBfdGltZXIgPSAKCSAgICBYdEFwcEFkZFRpbWVPdXQoWHRXaWRnZXRUb0FwcGxpY2F0aW9uQ29u
dGV4dCh3KSwKCQkJICAgIHRpcF9kZWxheSwKCQkJICAgIFBvcHVwVGlwLCBYdFBvaW50ZXIoJnRp
KSk7CgoJLy8gU2hvdWxkIFcgYmUgZGVzdHJveWVkIGJlZm9yZWhhbmQsIGNhbmNlbCB0aW1lb3V0
CglYdEFkZENhbGxiYWNrKHcsIFhtTmRlc3Ryb3lDYWxsYmFjaywgQ2FuY2VsUmFpc2VUaXAsIDAp
OwogICAgfQp9CgpzdGF0aWMgdm9pZCBEb0NsZWFyVGlwKFh0UG9pbnRlciBjbGllbnRfZGF0YSwg
WHRJbnRlcnZhbElkICp0aW1lcikKewogICAgKHZvaWQpIHRpbWVyOwogICAgYXNzZXJ0KCp0aW1l
ciA9PSBjbGVhcl90aXBfdGltZXIpOwogICAgY2xlYXJfdGlwX3RpbWVyID0gMDsKCiAgICBUaXBJ
bmZvJiB0aSA9ICooKFRpcEluZm8gKiljbGllbnRfZGF0YSk7CiAgICBDbGVhclRpcCh0aS53aWRn
ZXQsICZ0aS5ldmVudCk7Cn0KCgovLyBXaWRnZXQgVyBoYXMgYmVlbiBlbnRlcmVkIG9yIGxlZnQu
ICBIYW5kbGUgZXZlbnQuCnN0YXRpYyB2b2lkIEhhbmRsZVRpcEV2ZW50KFdpZGdldCB3LAoJCQkg
ICBYdFBvaW50ZXIgLyogY2xpZW50X2RhdGEgKi8sCgkJCSAgIFhFdmVudCAqZXZlbnQsIAoJCQkg
ICBCb29sZWFuICogLyogY29udGludWVfdG9fZGlzcGF0Y2ggKi8pCnsKICAgIHN0YXRpYyBXaWRn
ZXQgbGFzdF9sZWZ0X3dpZGdldCA9IDA7CgogICAgc3dpdGNoIChldmVudC0+dHlwZSkKICAgIHsK
ICAgIGNhc2UgRW50ZXJOb3RpZnk6CiAgICB7CglpZiAoY2xlYXJfdGlwX3RpbWVyICE9IDApCgl7
CgkgICAgWHRSZW1vdmVUaW1lT3V0KGNsZWFyX3RpcF90aW1lcik7CgkgICAgY2xlYXJfdGlwX3Rp
bWVyICA9IDA7CgoJICAgIGlmICh3ICE9IGxhc3RfbGVmdF93aWRnZXQpCgkgICAgewoJCS8vIEVu
dGVyZWQgb3RoZXIgd2lkZ2V0IHdpdGhpbiBIRUxQX0NMRUFSX1RJUF9ERUxBWS4KCQlDbGVhclRp
cCh3LCBldmVudCk7CgkJbGFzdF9sZWZ0X3dpZGdldCA9IDA7CgkgICAgfQoJICAgIGVsc2UKCSAg
ICB7CgkJLy8gUmUtZW50ZXJlZCBzYW1lIHdpZGdldCAtLSBpZ25vcmUuCgkJbGFzdF9sZWZ0X3dp
ZGdldCA9IDA7CgkJYnJlYWs7CgkgICAgfQoJfQoKCWlmICghWG1Jc1RleHQodykpCgl7CgkgICAg
Ly8gQ2xlYXIgYW5kIHJlLXJhaXNlIHRpcAoJICAgIENsZWFyVGlwKHcsIGV2ZW50KTsKCSAgICBS
YWlzZVRpcCh3LCBldmVudCk7Cgl9CiAgICB9CiAgICBicmVhazsKCiAgICBjYXNlIExlYXZlTm90
aWZ5OgogICAgewoJbGFzdF9sZWZ0X3dpZGdldCA9IHc7CglpZiAoY2xlYXJfdGlwX3RpbWVyICE9
IDApCgl7CgkgICAgWHRSZW1vdmVUaW1lT3V0KGNsZWFyX3RpcF90aW1lcik7CgkgICAgY2xlYXJf
dGlwX3RpbWVyID0gMDsKCX0KCgkvLyBXZSBkb24ndCBjbGVhciB0aGUgdGlwIGltbWVkaWF0ZWx5
LCBiZWNhdXNlIHRoZSBEREQgdW5ncmFiCgkvLyBtZWNoYW5pc20gbWF5IGNhdXNlIHRoZSBwb2lu
dGVyIHRvIGxlYXZlIGEgYnV0dG9uIGFuZAoJLy8gcmUtZW50ZXIgaXQgaW1tZWRpYXRlbHkuCglz
dGF0aWMgVGlwSW5mbyB0aTsKCXRpLmV2ZW50ICA9ICpldmVudDsKCXRpLndpZGdldCA9IHc7CgoJ
Y2xlYXJfdGlwX3RpbWVyID0gCgkgICAgWHRBcHBBZGRUaW1lT3V0KFh0V2lkZ2V0VG9BcHBsaWNh
dGlvbkNvbnRleHQodyksCgkJCSAgICBoZWxwX2NsZWFyX3RpcF9kZWxheSwgCgkJCSAgICBEb0Ns
ZWFyVGlwLCAmdGkpOwogICAgfQogICAgYnJlYWs7CgogICAgY2FzZSBLZXlQcmVzczoKICAgIGNh
c2UgS2V5UmVsZWFzZToKICAgIGNhc2UgQnV0dG9uUHJlc3M6CiAgICBjYXNlIEJ1dHRvblJlbGVh
c2U6CglDbGVhclRpcCh3LCBldmVudCk7CglicmVhazsKCiAgICBjYXNlIE1vdGlvbk5vdGlmeToK
CWlmIChYbUlzVGV4dCh3KSkKCXsKCSAgICBzdGF0aWMgV2lkZ2V0IGxhc3RfbW90aW9uX3dpZGdl
dCAgICAgICAgICAgPSAwOwoJICAgIHN0YXRpYyBYbVRleHRQb3NpdGlvbiBsYXN0X21vdGlvbl9w
b3NpdGlvbiA9IFhtVGV4dFBvc2l0aW9uKC0xKTsKCSAgICBYbVRleHRQb3NpdGlvbiBwb3MgPSBU
ZXh0UG9zT2ZFdmVudCh3LCBldmVudCk7CgoJICAgIGlmICh3ICE9IGxhc3RfbW90aW9uX3dpZGdl
dCB8fCBwb3MgIT0gbGFzdF9tb3Rpb25fcG9zaXRpb24pCgkgICAgewoJCWxhc3RfbW90aW9uX3dp
ZGdldCAgID0gdzsKCQlsYXN0X21vdGlvbl9wb3NpdGlvbiA9IHBvczsKCgkJQ2xlYXJUaXAodywg
ZXZlbnQpOwoJCWlmIChwb3MgIT0gWG1UZXh0UG9zaXRpb24oLTEpKQoJCSAgICBSYWlzZVRpcCh3
LCBldmVudCk7CgkgICAgfQoJfQogICAgICAgIGJyZWFrOwogICAgfQp9CgoKLy8gKFVuKWluc3Rh
bGwgdG9vbGJhciB0aXBzIGZvciBXCnN0YXRpYyB2b2lkIEluc3RhbGxCdXR0b25UaXBFdmVudHMo
V2lkZ2V0IHcsIGJvb2wgaW5zdGFsbCkKewogICAgLy8gSW5zdGFsbCBoYW5kbGVyIG9ubHkgaWYg
ZWl0aGVyIGB0aXBTdHJpbmcnIG9yCiAgICAvLyBgZG9jdW1lbnRhdGlvblN0cmluZycgcmVzb3Vy
Y2UgaXMgc3BlY2lmaWVkCiAgICB0aXBfcmVzb3VyY2VfdmFsdWVzIHRpcF92YWx1ZXM7CiAgICBY
dEdldEFwcGxpY2F0aW9uUmVzb3VyY2VzKHcsICZ0aXBfdmFsdWVzLCAKCQkJICAgICAgdGlwX3N1
YnJlc291cmNlcywgWHROdW1iZXIodGlwX3N1YnJlc291cmNlcyksIAoJCQkgICAgICBOVUxMLCAw
KTsKICAgIGRvY19yZXNvdXJjZV92YWx1ZXMgZG9jX3ZhbHVlczsKICAgIFh0R2V0QXBwbGljYXRp
b25SZXNvdXJjZXModywgJmRvY192YWx1ZXMsIAoJCQkgICAgICBkb2Nfc3VicmVzb3VyY2VzLCBY
dE51bWJlcihkb2Nfc3VicmVzb3VyY2VzKSwgCgkJCSAgICAgIE5VTEwsIDApOwogICAgaWYgKHRp
cF92YWx1ZXMudGlwU3RyaW5nICE9IDAgfHwgZG9jX3ZhbHVlcy5kb2N1bWVudGF0aW9uU3RyaW5n
ICE9IDApCiAgICB7CglFdmVudE1hc2sgZXZlbnRfbWFzayA9IAoJICAgIEVudGVyV2luZG93TWFz
ayB8IExlYXZlV2luZG93TWFzayB8IEJ1dHRvblByZXNzIHwgQnV0dG9uUmVsZWFzZSAKCSAgICB8
IEtleVByZXNzIHwgS2V5UmVsZWFzZTsKCWlmIChpbnN0YWxsKQoJewoJICAgIFh0QWRkRXZlbnRI
YW5kbGVyKHcsIGV2ZW50X21hc2ssIEZhbHNlLCAKCQkJICAgICAgSGFuZGxlVGlwRXZlbnQsIFh0
UG9pbnRlcigwKSk7CgoJfQoJZWxzZQoJewoJICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIGV2
ZW50X21hc2ssIEZhbHNlLCAKCQkJCSBIYW5kbGVUaXBFdmVudCwgWHRQb2ludGVyKDApKTsKCX0K
ICAgIH0KCiAgICBYbVN0cmluZ0ZyZWUodGlwX3ZhbHVlcy50aXBTdHJpbmcpOwogICAgWG1TdHJp
bmdGcmVlKGRvY192YWx1ZXMuZG9jdW1lbnRhdGlvblN0cmluZyk7Cn0KCgovLyAoVW4paW5zdGFs
bCB0b29sYmFyIHRpcHMgZm9yIFcgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMKc3RhdGljIHZvaWQg
SW5zdGFsbEJ1dHRvblRpcHNOb3coV2lkZ2V0IHcsIGJvb2wgaW5zdGFsbCkKewogICAgaWYgKHcg
PT0gMCB8fCAhWHRJc1dpZGdldCh3KSkKCXJldHVybjsKCiAgICAvLyBJbnN0YWxsIHRpcHMgZm9y
IHRoaXMgd2lkZ2V0CiAgICBJbnN0YWxsQnV0dG9uVGlwRXZlbnRzKHcsIGluc3RhbGwpOwoKICAg
IGlmIChYdElzQ29tcG9zaXRlKHcpKQogICAgewoJLy8gVHJhdmVyc2Ugd2lkZ2V0IHRyZWUKCVdp
ZGdldExpc3QgY2hpbGRyZW4gICA9IDA7CglDYXJkaW5hbCBudW1fY2hpbGRyZW4gPSAwOwoKCVh0
VmFHZXRWYWx1ZXModywKCQkgICAgICBYdE5jaGlsZHJlbiwgJmNoaWxkcmVuLAoJCSAgICAgIFh0
Tm51bUNoaWxkcmVuLCAmbnVtX2NoaWxkcmVuLAoJCSAgICAgIE5VTEwpOwoKCWlmIChjaGlsZHJl
biAhPSAwKQoJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50KG51bV9jaGlsZHJlbik7IGkrKykK
CQlJbnN0YWxsQnV0dG9uVGlwc05vdyhjaGlsZHJlbltpXSwgaW5zdGFsbCk7CiAgICB9CgogICAg
aWYgKFhtSXNDYXNjYWRlQnV0dG9uKHcpKQogICAgewoJLy8gVHJhdmVyc2UgdGhlIG1lbnUgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgYnV0dG9uCglXaWRnZXQgc3ViTWVudUlkID0gMDsKCVh0VmFHZXRW
YWx1ZXModywgWG1Oc3ViTWVudUlkLCAmc3ViTWVudUlkLCBOVUxMKTsKCWlmIChzdWJNZW51SWQg
IT0gMCkKCSAgICBJbnN0YWxsQnV0dG9uVGlwc05vdyhzdWJNZW51SWQsIGluc3RhbGwpOwogICAg
fQoKICAgIGlmIChYbUlzUm93Q29sdW1uKHcpKQogICAgewoJLy8gVHJhdmVyc2UgdGhlIG1lbnUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIG1lbnUKCXVuc2lnbmVkIGNoYXIgcm93Q29sdW1u
VHlwZSA9IFhtV09SS19BUkVBOwoJV2lkZ2V0IHN1Yk1lbnVJZCA9IDA7CglYdFZhR2V0VmFsdWVz
KHcsIAoJCSAgICAgIFhtTnN1Yk1lbnVJZCwgJnN1Yk1lbnVJZCwKCQkgICAgICBYbU5yb3dDb2x1
bW5UeXBlLCAmcm93Q29sdW1uVHlwZSwKCQkgICAgICBOVUxMKTsKCWlmIChyb3dDb2x1bW5UeXBl
ID09IFhtTUVOVV9PUFRJT04gJiYgc3ViTWVudUlkICE9IDApCgkgICAgSW5zdGFsbEJ1dHRvblRp
cHNOb3coc3ViTWVudUlkLCBpbnN0YWxsKTsKICAgIH0KfQoKLy8gQ2FsbGJhY2sgZnVudGlvbjog
aW5zdGFsbCB0aXBzIG5vdy4Kc3RhdGljIHZvaWQgSW5zdGFsbEJ1dHRvblRpcHNUaW1lT3V0KFh0
UG9pbnRlciBjbGllbnRfZGF0YSwKCQkJCSAgICAgWHRJbnRlcnZhbElkICp0aW1lcikKewogICAg
V2lkZ2V0IHcgPSBXaWRnZXQoY2xpZW50X2RhdGEpOwogICAgWHRSZW1vdmVDYWxsYmFjayh3LCBY
bU5kZXN0cm95Q2FsbGJhY2ssIAoJCSAgICAgQ2FuY2VsVGltZXIsIFh0UG9pbnRlcigqdGltZXIp
KTsKICAgIEluc3RhbGxCdXR0b25UaXBzTm93KHcsIHRydWUpOwp9CgovLyBDYWxsYmFjayBmdW50
aW9uOiB1bmluc3RhbGwgdGlwcyBub3cuCnN0YXRpYyB2b2lkIFVuSW5zdGFsbEJ1dHRvblRpcHNU
aW1lT3V0KFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCgkJCQkgICAgICAgWHRJbnRlcnZhbElkICp0
aW1lcikKewogICAgV2lkZ2V0IHcgPSBXaWRnZXQoY2xpZW50X2RhdGEpOwogICAgWHRSZW1vdmVD
YWxsYmFjayh3LCBYbU5kZXN0cm95Q2FsbGJhY2ssIAoJCSAgICAgQ2FuY2VsVGltZXIsIFh0UG9p
bnRlcigqdGltZXIpKTsKICAgIEluc3RhbGxCdXR0b25UaXBzTm93KHcsIGZhbHNlKTsKfQoKLy8g
KFVuKWluc3RhbGwgdGlwcyBmb3IgVyBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4KLy8gV2UgZG8g
dGhpcyBhcyBzb29uIGFzIHdlIGFyZSBiYWNrIGluIHRoZSBldmVudCBsb29wLCBzaW5jZSB3ZQov
LyBhc3N1bWUgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBjcmVhdGVkIHVudGlsIHRoZW4uCnZvaWQg
SW5zdGFsbEJ1dHRvblRpcHMoV2lkZ2V0IHcsIGJvb2wgaW5zdGFsbCkKewogICAgWHRJbnRlcnZh
bElkIHRpbWVyOwoKICAgIGlmIChpbnN0YWxsKQoJdGltZXIgPSBYdEFwcEFkZFRpbWVPdXQoWHRX
aWRnZXRUb0FwcGxpY2F0aW9uQ29udGV4dCh3KSwgMCwKCQkJCUluc3RhbGxCdXR0b25UaXBzVGlt
ZU91dCwgWHRQb2ludGVyKHcpKTsKICAgIGVsc2UKCXRpbWVyID0gWHRBcHBBZGRUaW1lT3V0KFh0
V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQodyksIDAsCgkJCQlVbkluc3RhbGxCdXR0b25UaXBz
VGltZU91dCwgWHRQb2ludGVyKHcpKTsKCiAgICAvLyBTaG91bGQgVyBiZSBkZXN0cm95ZWQgYmVm
b3JlaGFuZCwgY2FuY2VsIGluc3RhbGxhdGlvbi4KICAgIFh0QWRkQ2FsbGJhY2sodywgWG1OZGVz
dHJveUNhbGxiYWNrLCBDYW5jZWxUaW1lciwgWHRQb2ludGVyKHRpbWVyKSk7Cn0KCi8vIEVuYWJs
ZSBvciBkaXNhYmxlIGJ1dHRvbiB0aXBzCnZvaWQgRW5hYmxlQnV0dG9uVGlwcyhib29sIGVuYWJs
ZSkKewogICAgYnV0dG9uX3RpcHNfZW5hYmxlZCA9IGVuYWJsZTsKfQoKLy8gRW5hYmxlIG9yIGRp
c2FibGUgYnV0dG9uIGRvY3MKdm9pZCBFbmFibGVCdXR0b25Eb2NzKGJvb2wgZW5hYmxlKQp7CiAg
ICBidXR0b25fZG9jc19lbmFibGVkID0gZW5hYmxlOwp9CgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLy8gVGV4dCB0aXBzLgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyAoVW4paW5zdGFsbCB0
ZXh0IHRpcHMgZm9yIFcuCnZvaWQgSW5zdGFsbFRleHRUaXBzKFdpZGdldCB3LCBib29sIGluc3Rh
bGwpCnsKICAgIEV2ZW50TWFzayBldmVudF9tYXNrID0gRW50ZXJXaW5kb3dNYXNrIHwgTGVhdmVX
aW5kb3dNYXNrIAoJfCBCdXR0b25QcmVzcyB8IEJ1dHRvblJlbGVhc2UgfCBQb2ludGVyTW90aW9u
TWFzawoJfCBLZXlQcmVzcyB8IEtleVJlbGVhc2U7CgogICAgaWYgKGluc3RhbGwpCiAgICB7CglY
dEFkZEV2ZW50SGFuZGxlcih3LCBldmVudF9tYXNrLCBGYWxzZSwgCgkJCSAgSGFuZGxlVGlwRXZl
bnQsIFh0UG9pbnRlcigwKSk7CgogICAgfQogICAgZWxzZQogICAgewoJWHRSZW1vdmVFdmVudEhh
bmRsZXIodywgZXZlbnRfbWFzaywgRmFsc2UsIAoJCQkgICAgIEhhbmRsZVRpcEV2ZW50LCBYdFBv
aW50ZXIoMCkpOwogICAgfQp9CgovLyBFbmFibGUgb3IgZGlzYWJsZSB0ZXh0IHRpcHMKdm9pZCBF
bmFibGVUZXh0VGlwcyhib29sIGVuYWJsZSkKewogICAgdGV4dF90aXBzX2VuYWJsZWQgPSBlbmFi
bGU7Cn0KCi8vIEVuYWJsZSBvciBkaXNhYmxlIHRleHQgZG9jcwp2b2lkIEVuYWJsZVRleHREb2Nz
KGJvb2wgZW5hYmxlKQp7CiAgICB0ZXh0X2RvY3NfZW5hYmxlZCA9IGVuYWJsZTsKfQo=

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]