<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>11463</bug_id>
          
          <creation_ts>2006-10-30 17:29:31 -0800</creation_ts>
          <short_desc>Move KCanvasTreeDebug into rendering/</short_desc>
          <delta_ts>2006-10-31 11:11:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>48455</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-10-30 17:29:31 -0800</bug_when>
    <thetext>Move one of the last files in the kcanvas/ subdirectory (KCanvasTreeDebug.cpp)
down into rendering/SVGRenderTreeAsText.cpp

Uploading patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48414</commentid>
    <comment_count>1</comment_count>
      <attachid>11295</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-10-31 05:04:49 -0800</bug_when>
    <thetext>Created attachment 11295
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48415</commentid>
    <comment_count>2</comment_count>
      <attachid>11295</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-31 05:21:52 -0800</bug_when>
    <thetext>Comment on attachment 11295
Initial patch

Please keep #includes sorted (or sort them if you&apos;re touching them) and remove the function lists from the ChangeLog. Better yet, rewrite it as:
* kcanvas/KCanvasTreeDebug.cpp: Moved to rendering/SVGRenderTreeAsText.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48372</commentid>
    <comment_count>3</comment_count>
      <attachid>11301</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-10-31 10:03:46 -0800</bug_when>
    <thetext>Created attachment 11301
Updated patch

This fixes Mitz&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48373</commentid>
    <comment_count>4</comment_count>
      <attachid>11302</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-10-31 10:06:02 -0800</bug_when>
    <thetext>Created attachment 11302
Updated final patch

Eek, the previous patch had a conflict in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48220</commentid>
    <comment_count>5</comment_count>
      <attachid>11302</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-10-31 10:26:01 -0800</bug_when>
    <thetext>Comment on attachment 11302
Updated final patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48229</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-10-31 11:11:39 -0800</bug_when>
    <thetext>Landed in r17486</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11295</attachid>
            <date>2006-10-31 05:04:49 -0800</date>
            <delta_ts>2006-10-31 10:03:46 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>kcanvastreedebug.diff</filename>
            <type>text/plain</type>
            <size>54284</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc0NzQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02NDYsNyArNjQ2LDYgQEAgc2V0IChTVkdfU09VUkNFUwogICAgIGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAogICAgIGtzdmcyL2V2ZW50cy9KU1NW
R0xhenlFdmVudExpc3RlbmVyLmNwcAogICAgIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3Bw
Ci0gICAga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAogICAgIGtjYW52YXMvS0NhbnZhc0Zp
bHRlcnMuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3Bw
CkBAIC0xMTIyLDYgKzExMjEsNyBAQCBzZXQoV2ViQ29yZV9TUkNTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisgICAgcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5n
L1JlbmRlckZvcm1FbGVtZW50LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTc0NzUpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDA2LTEwLTMxICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDYzCisKKyAg
ICAgICAgTW92ZSBLQ2FudmFzVHJlZURlYnVnIGludG8gcmVuZGVyaW5nLCBuYW1lZCBhcyBTVkdS
ZW5kZXJUcmVlQXNUZXh0LiosCisgICAgICAgIGFzIGRpY3Vzc2VkIHdpdGggRGF2ZS4gQWxzbyBr
aWxsIHRoZSBvdXRkYXRlZCBERVNJR04gZG9jdW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICoga2NhbnZhcy9ERVNJR046IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9LQ2FudmFz
RmlsdGVycy5jcHA6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHA6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5j
cHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFN0cmVhbVNlcGFyYXRvcjo6VGV4dFN0cmVhbVNlcGFyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0ZyYWN0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUluZGVudCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRhZ05hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJjZXMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisKIDIwMDYtMTAtMzEgIE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc0NzQp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTg4NSw4ICsxODg1LDYgQEAKIAkJQTg4QUQzQjUwOTUyNDg2RTAwMUREMTk2IC8q
IFF1YXJ0elN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QzBGQjc2MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi87IH07
CiAJCUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzcwODk3MDFGODAw
QkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQubW0gKi87IH07CiAJCUE4OEFEM0JFMDk1MjQ4NkUwMDFE
RDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThDMEZCN0YwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJz
LmggKi87IH07Ci0JCUE4OEFEM0NCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzVHJlZURlYnVn
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEwRTM5
MzA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5oICovOyB9OwotCQlBODhBRDND
QzA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEwRTM5NDA4QTQxNjBGMDAzMzNEOTgg
LyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi87IH07CiAJCUE4OEFENDAxMDk1MjQ4RjAwMDFERDE5
NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEMwRjZGRjA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVuZGVyU3R5bGUu
Y3BwICovOyB9OwogCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNzAw
MDg5NzAxRjEwMEJBNTExNCAvKiBTVkdSZW5kZXJTdHlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4OEFENDAzMDk1MjQ4RjAwMDFERDE5NiAv
KiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThDMEY3MDEwODk3MDFGMTAwQkE1MTE0IC8qIFNWR1JlbmRlclN0eWxl
RGVmcy5jcHAgKi87IH07CkBAIC0yMjk5LDYgKzIyOTcsOCBAQAogCQlCMkEwMTVCQTBBRjZDRDUz
MDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNUE3MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNv
dXJjZU1hc2tlci5oICovOyB9OwogCQlCMkNCNDE5MzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHUmVu
ZGVyaW5nSW50ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkNCNDE0QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHUmVuZGVyaW5nSW50ZW50LmggKi87
IH07CiAJCUIyQ0I0MUE2MEFCNzU5MDQwMDREOUM0NSAvKiBTVkdVbml0VHlwZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I0MTVGMEFCNzU5MDQw
MDREOUM0NSAvKiBTVkdVbml0VHlwZXMuaCAqLzsgfTsKKwkJQjJFQkRDOUMwQUY3N0UzNDAwQUU0
QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUEwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRl
clRyZWVBc1RleHQuY3BwICovOyB9OworCQlCMkVCREM5RDBBRjc3RTM0MDBBRTRBNjggLyogU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQu
aCAqLzsgfTsKIAkJQjJGQTNEMzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkZBM0M0RTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNw
cCAqLzsgfTsKIAkJQjJGQTNEMzcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJGQTNDNEYwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oICov
OyB9OwogCQlCMkZBM0QzODBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZEFuZ2xlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRkEzQzUw
MEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwICovOyB9OwpAQCAtNDU0
MCw4ICs0NTQwLDYgQEAKIAkJQTgwRTdFOTQwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MVGV4dEFyZWFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgw
RTdFOTUwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTEJ1dHRvbkVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTEJ1dHRvbkVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTdFOTYwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTEJ1
dHRvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SFRNTEJ1dHRvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODEw
RTM5MzA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNUcmVlRGVidWcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0J
CUE4MTBFMzk0MDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc1Ry
ZWVEZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQlBODEzNjlBRTA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MSXNJbmRleEVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMzY5QUYwOTczNzRGNTAwRDc0
NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSFRNTElzSW5kZXhFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgxMzY5QjAwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxJbnB1dEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNTksNiArNTI1Nyw4IEBACiAJCUIyRTk1NDhD
MEFCNUZCQTMwMDc2REUzNyAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHUGF0aFNlZ01vdmV0b0Ficy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyRTk1NDhEMEFCNUZCQTMwMDc2REUzNyAvKiBTVkdQYXRoU2VnTW92ZXRvUmVs
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHUGF0aFNlZ01vdmV0b1JlbC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTk1NDhFMEFCNUZCQTMwMDc2REUzNyAvKiBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyRUJE
QzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNW
R1JlbmRlclRyZWVBc1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1JlbmRlclRyZWVBc1RleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJGQTND
NEUwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJGQTNDNEYwQUI3NUE2RTAwMEU1
QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyRkEzQzUwMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5n
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQW5pbWF0
ZWRBbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTkwLDggKzgxOTAs
NiBAQAogCQkJCUE4QzBGQjUzMDg5NzAxRjcwMEJBNTExNCAvKiBkZXZpY2UgKi8sCiAJCQkJQTg0
MTVGOTkwQUMxMEM1RDAwRjdEMERGIC8qIEtDYW52YXNGaWx0ZXJzLmNwcCAqLywKIAkJCQlBOEMw
RkI3RjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMuaCAqLywKLQkJCQlBODEwRTM5
NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8sCi0JCQkJQTgxMEUz
OTMwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTMwLDYgKzg5
MjgsOCBAQAogCQkJCUJDRUE0ODRGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJhZ21l
bnQuaCAqLywKIAkJCQlCQ0VBNDg0QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWUuY3Bw
ICovLAogCQkJCUJDRUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovLAor
CQkJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAq
LywKKwkJCQlCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
ICovLAogCQkJCUJDRUE0ODQ5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZU1hYy5tbSAq
LywKIAkJCQlCQ0VBNDg0ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLywK
IAkJCQk5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8s
CkBAIC05MTc0LDcgKzkxNzQsNiBAQAogCQkJCUE4OEFEM0IzMDk1MjQ4NkUwMDFERDE5NiAvKiBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEM0I1
MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODhBRDNCRTA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ZpbHRlcnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE4OEFEM0NCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzVHJlZURlYnVnLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDA0MDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdS
ZW5kZXJTdHlsZURlZnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDBCMDk1MjQ4RjAwMDFE
RDE5NiAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1MDYsNiArMTA1MDUs
NyBAQAogCQkJCUIyQTAxNUI2MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZUltYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVCODBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3Vy
Y2VNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTAxNUJBMEFGNkNENTMwMDZCQ0UwRSAv
KiBTVkdSZXNvdXJjZU1hc2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJFQkRDOUQwQUY3N0Uz
NDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTA3
MDMsNyArMTA3MDMsNiBAQAogCQkJCUE4OEFEM0IyMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFE
M0I0MDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBODhBRDNCNjA5NTI0ODZFMDAxREQxOTYgLyogUXVhcnR6U3VwcG9y
dC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFEM0NDMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2Fu
dmFzVHJlZURlYnVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFENDAxMDk1MjQ4RjAwMDFE
RDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDQwMzA5
NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4OEFENDBBMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xMTc0Nyw2ICsxMTc0Niw3IEBACiAJCQkJQjJBMDE1QjQwQUY2Q0Q1MzAwNkJD
RTBFIC8qIFNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkEwMTVC
NzBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJBMDE1QjkwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNlTWFza2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUIyRUJEQzlDMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL0RFU0lH
Tgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvREVTSUdOCShyZXZpc2lvbiAxNzQ3NCkK
KysrIFdlYkNvcmUva2NhbnZhcy9ERVNJR04JKHdvcmtpbmcgY29weSkKQEAgLTEsMTcyICswLDAg
QEAKLUtDYW52YXMgRGVzaWduIERvY3VtZW50IDAuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi1MYXN0IHVwZGF0ZTogMjUuMDcuMjAwNAotCi0xLiBXaGF0IGlzICh0aGUgaGlzdG9yeSBv
ZikgS0NhbnZhcz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1LQ2Fu
dmFzIGlzIHRoZSByZXN1bHQgb2YgZm91ci15ZWFyIGtzdmcgZGV2ZWxvcG1lbnQuCi1XZSBoYWQg
dG8gY3JlYXRlIG91ciAib3duIiBjYW52YXMgZm9yIGtzdmcsIHNvbWUgeWVhcnMKLWFnbyBhcyBh
bnkgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaGFzbid0IGJlZW4gYWJsZQotdG8gZnVsZmlsIG91
ciBuZWVkcywgd2hpY2ggaXMgbW9zdGx5OiBmbGV4aWJpbGl0eS4KLQotUUNhbnZhcyBpcyAob2Yg
Y291cnNlKSB0aWVkIHRvIFF0LCB3aGljaCBpcyBnb29kLgotQnV0IGl0IHdpcGVzIGF3YXkgaWUu
IHRoZSBmdW5jdGlvbmFsaXR5IHRvIHBhaW50Ci13aXRoL3RvIHNvbWV0aGluZyBlbHNlIHRoYW4g
YSBRUGFpbnRlci4KLQotVGhlIGltbWVkaWF0ZSByZXN1bHQgb2Ygb3VyIGJyYWluc3Rvcm1pbmcs
IHdoYXQKLXdlIG5lZWRlZCwgd2FzOiBLU1ZHQ2FudmFzLiBLU1ZHQ2FudmFzIHdhcyBiYXNpY2Fs
bHkKLWEgInBvcnQiIG9mIFFDYW52YXMgY29kZSB0byBrc3ZnIHdpdGggaGVhdnkgbW9kaWZpY2F0
aW9ucy4KLVdlIGV4Y2x1c2l2ZWx5IHVzZWQgbGliYXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgS1NW
R0NhbnZhcwotaGFja2luZy4gTGF0ZXIgd2UgbWFkZSBpdCBwb3NzaWJsZSB0byB1c2UgZGlmZmVy
ZW50Ci1yZW5kZXJpbmcgZGV2aWNlcyAoaW1wbGVtZW50ZWQgaW4ga3N2ZzogbGliYXJ0ICYgYWdn
KS4KLQotVGhhdCB3YXMgdGhlIGZpcnN0IHN0ZXAgdG8gbW9yZSBmbGV4aWJpbGl0eS4gQnV0IGl0
Ci1oYXNuJ3QgYmVlbiBlbm91Z2ggdG8gbWFrZSBhIGdlbmVyaWMga2RlIGNhbnZhcyBvdXQgb2Yg
aXQuCi0KLUtDYW52YXMgY3VycmVudGx5IHVzZXMgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgYXBwcm9h
Y2gsCi13aGljaCB3aWxsIGJlIGV4cGxhaW5lZCBpbiBkZXRhaWwgbm93Li4uLgotCi0yLiBUaGUg
bWFpbiBpZGVhIG9mIHRoZSBjYW52YXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1GaXJzdCBvZiBhbGwsIHdlIGhhdmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuICJSZW5kZXJp
bmcgRGV2aWNlcyIgYW5kICJSZW5kZXJpbmcgVGFyZ2V0cyIuCi0KLURlZmluaXRpb246Ci0JQSAi
ZGV2aWNlIiBpcyB1c2VkIHRvIHBhaW50IG9udG8gYSAidGFyZ2V0Ii4gICJEZXZpY2VzIiBhcmUK
LQlkeW5hbWljYWxseSBsb2FkYWJsZSwgd2hlcmVhcyAidGFyZ2V0cyIgaGF2ZSB0byBiZSBsaW5r
ZWQgYWdhaW5zdC4KLQotVGFyZ2V0czoKLQlRdCAoUVdpZGdldCksIE9wZW5HTCwgU0RMLi4uIGFy
ZSBnb29kIGV4YW1wbGVzIGZvciBjb21tb24gIlJlbmRlcmluZyBUYXJnZXRzIi4KLQlBcyBzdGF0
ZWQgYWJvdmUsIHlvdSBjYW5ub3QgZHluYW1pY2FsbHkgc3dpdGNoIHRoZSByZW5kZXJpbmcgdGFy
Z2V0cy4KLQotCTxjb2RlLXNuaXBwZXQ+Ci0JCUtDYW52YXNUYXJnZXRRdCAqdGFyZ2V0UXQgPSBu
ZXcgS0NhbnZhc1RhcmdldFF0KHByZWZXaWR0aCwgcHJlZkhlaWdodCk7Ci0JPC9jb2RlLXNuaXBw
ZXQ+Ci0KLQlZb3UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgdGFyZ2V0IG9iamVjdCBtYW51YWxseSBk
ZXBlbmRpbmcgb24gdGhlIHRhcmdldCB5b3UnZCBsaWtlCi0JdG8gcGFpbnQgb24uIEN1cnJlbnRs
eSB3ZSBvbmx5IGhhdmUgYSAnUXQnIHJlbmRlcmluZyB0YXJnZXQuCi0KLURldmljZXM6Ci0JTGli
YXJ0LCBhZ2cyLCBRUGFpbnRlciBldGMuLiBhcmUgZ29vZCBleGFtcGxlcyBmb3IgY29tbW9uICJS
ZW5kZXJpbmcgRGV2aWNlcyIuCi0KLQk8Y29kZS1zbmlwcGV0PgotCQlLUmVuZGVyaW5nRGV2aWNl
ICpkZXZpY2UgPSBLUmVuZGVyaW5nRGV2aWNlRmFjdG9yeTo6c2VsZigpLT5yZXF1ZXN0KCJhZ2ci
LCB0YXJnZXRRdCk7Ci0JCWlmKCFkZXZpY2UpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JPC9jb2RlLXNu
aXBwZXQ+Ci0KLQlZb3UgY2FuIGVhc2lseSBsb2FkIGF2YWlsYWJsZSByZW5kZXJpbmcgZGV2aWNl
cyBieSAnU3RyaW5nJy4KLQlBZGRpdGlvbmFsbHksIHlvdSBoYXZlIHRvIHBhc3MgdGhlIHJlbmRl
cmluZyB0YXJnZXQgcG9pbnRlcgotCWFzIHRoZSAncmVxdWVzdCcgZnVuY3Rpb24gY2hlY2tzIHdo
ZXRlciB5b3VyIHJlbmRlcmluZyBkZXZpY2UKLQluZWVkcyBhICdidWZmZXJlZCcgcmVuZGVyaW5n
IHRhcmdldCBvciBhICd1bmJ1ZmZlcmVkJyByZW5kZXJpbmcKLQl0YXJnZXQuIEZvciBleGFtcGxl
OiB0YXJnZXRRdCAtPiBidWZmZXJlZCByZW5kZXJpbmcgdGFyZ2V0Ci0JCQkJCQkgYWdnIC0+IGJ1
ZmZlcmVkIHJlbmRlcmluZyBkZXZpY2UKLQotICAgIEFuIE9wZW5HTCB0YXJnZXQgaXMgYSBnb29k
IGV4YW1wbGUgb2YgYW4gJ3VuYnVmZmVyZWQnIHRhcmdldCwKLQliZWNhdXNlIHRoZXJlIHdvdWxk
IGJlIG5vIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBhZHZhbnRhZ2UgaWYgd2UnZAotCXVzZSBhIHNv
ZnR3YXJlIHJlbmRlcmVyIGxpa2UgYWdnMiB0byBjcmVhdGUgYSByZW5kZXJpbmcgYnVmZmVyCi0J
YW5kIHRoZW4gYmxpdCBpdCBvbnRvIHRoZSBzY3JlZW4uIFRoYXQncyB3aHkgc3VjaCBhIHNlcGVy
YXRpb24gaXMgbmVlZGVkLgotCi1PaywgYXMgeW91IGtub3cgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biB0YXJnZXRzICYgZGV2aWNlcyBub3csCi13ZSBjYW4gc3RhcnQgZXhwZXJpbWVudGluZyB3aXRo
IHRoZSBtYWluICdLQ2FudmFzJyBjbGFzcy4uLi4uCi0KLTMuIEhvdyB0byB1c2UgdGhlICdLQ2Fu
dmFzJyBjbGFzcz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotPGNvZGUt
c25pcHBldD4KLQlLQ2FudmFzKEtDYW52YXNUYXJnZXQgKnRhcmdldCwgS1JlbmRlcmluZ0Rldmlj
ZSAqZGV2aWNlKQotPC9jb2RlLXNuaXBwZXQ+Ci0KLVRoZSAob25seSBhdmFpbGFibGUpIEtDYW52
YXMgY29uc3RydWN0b3IsIHRha2VzIGEgS0NhbnZhc1RhcmdldAotcG9pbnRlciBhbmQgYSBLUmVu
ZGVyaW5nRGV2aWNlIHBvaW50ZXIsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQKLXVzaW5nIHRoZSB0
ZWNobmlxdWVzIGZyb20gdGhlIGFydGljbGUgYWJvdmUuCi0KLTxjb2RlLXNuaXBwZXQ+Ci0JLy8g
Rmlyc3QgYXR0YWNoIHRvIGNhbnZhcy4uLgotCUtDYW52YXMgKm15Q2FudmFzID0gbmV3IEtDYW52
YXModGFyZ2V0LCBkZXZpY2UpOwotCi0gICAgLy8gLi4uIHRoZW4gaW5pdGlhbGl6ZSB0aGUgdGFy
Z2V0ICYgZGV2aWNlIQotCXRhcmdldC0+aW5pdCh0aGlzKTsKLQlkZXZpY2UtPmluaXQodGFyZ2V0
KTsKLTwvY29kZS1zbmlwcGV0PgotCi1UaGUgc2Vjb25kIGltcG9ydGFudCBzdGVwIGlzIHRvIGlu
aXRpYWxpemUgdGhlIHJlbmRlcmluZyB0YXJnZXQuCi1XaGVuIHVzaW5nIHRoZSAnS0NhbnZhc1Rh
cmdldFF0JyBpdCB0YWtlcyBhICdRUGFpbnREZXZpY2UnCi1wb2ludGVyIGFzIGFyZ3VtZW50LCB3
aGljaCBpZGVudGlmaWVzIHRoZSB3aW5kb3cgdG8gcGFpbnQgb24uCi0oTG9vayBpbnRvIHRlc3Qv
Y2FudmFzdGVzdC5jYyAmIHRlc3QvQ2FudmFzV2lkZ2V0LmNjLi4uKQotCi1UaGF0IGtub3dsZWRn
ZSBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgYW4gImVtcHR5IiBjYW52YXMKLW9udG8gc2Ny
ZWVuLiBOZXh0IHRoaW5nIHRvIGtub3c6IEhvdyB0byB1c2UgY2FudmFzIGl0ZW1zPwotCi00LiBB
ZGRpbmcgaXRlbXMgb250byB5b3VyIGNhbnZhcyBbVE9ET10KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0tIGNvbmNlcHQgb2YgcGFpbnRzZXJ2ZXJzCi0KLVBhaW50IHNlcnZlcnMg
Y2FuIGJlIHRob3VnaHQgb2YgYXMgYSB3YXkgb2YgZmlsbGluZyB1cCBhIGFyYml0cmFyeQotc2Ny
ZWVuIHJlZ2lvbiB1c2luZyBwYWludC4gVGhlIHNpbXBsZXN0IGFuZCBtb3N0IGNvbW1vbmx5IHVz
ZWQgaXMgdGhlCi1zb2xpZCBwYWludCBzZXJ2ZXIsIHdoaWNoIHNpbXBseSBwYWludHMgdGhlIGFy
ZWEgd2l0aCBhIHNvbGlkIHJnYiBjb2xvci4KLU1vcmUgYWR2YW5jZWQgcGFpbnQgc2VydmVycyBh
cmUgdGhlIGdyYWRpZW50IHBhaW50IHNlcnZlciwgd2hpY2ggY2FuIGJlIHVzZWQKLXRvIGNyZWF0
ZSBzbW9vdGggY29sb3IgdHJhbnNpdGlvbnMgb3Igc2hhZGluZ3MuIEN1cnJlbnRseSBLQ2FudmFz
IHN1cHBvcnRzIHR3bwotZ3JhZGllbnQgdHlwZXMgKGxpbmVhciArIHJhZGlhbCksIGJ1dCBvdGhl
ciBncmFkaWVudHMgYXJlIHBvc3NpYmxlLiBGaW5hbGx5IHRoZXJlCi1pcyB0aGUgcGF0dGVybiBw
YWludCBzZXJ2ZXIsIHdoaWNoIHRha2VzIGEgYml0bWFwIGdyYXBoaWMgYW5kIHRpbGVzIGl0IG92
ZXIgdGhlIGFyZWEsCi1wb3NzaWJsZSB1c2luZyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBy
b3RhdGUgb3Igc2tldyB0aGUgcGF0dGVybiB0aWxlcy4KLQotTm90ZSB0aGF0IEtDYW52YXMgaGFz
IGFuIGFic3RyYWN0IGludGVyZmFjZSBmb3IgcGFpbnQgc2VydmVycywgc28gbmV3IHBhaW50IHNl
cnZlcnMgY2FuCi1iZSBhZGRlZCBpbiBhZGRpdGlvbiB0byB0aGUgdGhyZWUgY3VycmVudCBvbmVz
LgotCi1QYWludCBzZXJ2ZXJzIGFzIHVzZWQgaW4gS0NhbnZhcyBhcmUgaGVhdmlseSBpbmZsdWVu
Y2VkIGJ5IHN2Zywgc2VlIDoKLWh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL3BzZXJ2ZXJzLmh0
bWwKLQotLSBLQ2FudmFzUmVzb3VyY2UKLQotTW9zdCBwYWludHNlcnZlcnMgYXJlIEtDYW52YXNS
ZXNvdXJjZXMuIFRoaXMgY2xhc3MgbWFrZXMgc3VyZSBhbnkgY2hhbmdlIG9uCi10aGUgcGFpbnQg
c2VydmVyIGludmFsaWRhdGVzIGV2ZXJ5IGl0ZW0gdXNpbmcgdGhlIHBhaW50IHNlcnZlci4KLUZv
ciBleGFtcGxlLCB3aGVuIGEgZ3JhZGllbnQgcmVzb3VyY2UgY2hhbmdlcyBhIGNvbG9yIHN0b3As
IGFsbCBpdGVtcyB1c2luZwotc2FpZCBncmFkaWVudCB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCBy
ZWRyYXduIG9uIHRoZSBuZXh0IHVwZGF0ZSgpLiBTaW5jZQotbm90IGV2ZXJ5IGNoYW5nZSBvbiBh
IHBhcmFtZXRlciBvZiBhIHBhaW50c2VydmVyIHNob3VsZCB0cmlnZ2VyIGEgcmVkcmF3Ci0oZm9y
IGluc3RhbmNlIHlvdSBkb24ndCB3YW50IHRoaXMgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBjYW52
YXMpIGFuCi1leHBsaWNpdCBjYWxsIG5hbWVkIGludmFsaWRhdGUoKSBoYXMgdG8gYmUgZG9uZSBv
biB0aGUgS0NhbnZhc1Jlc291cmNlLgotCi0tIEtSZW5kZXJpbmdTdHlsZQotLSBLQ2FudmFzQ3Jl
YXRvcgotCi1DdXJyZW50bHkgdGhlIGZvbGxvd2luZyBjYW52YXMgaXRlbXMgY2FuIGJlIGNyZWF0
ZWQgdXNpbmcgdGhlCi1LQ2FudmFzQ3JlYXRvciBzaW5nbGV0b246Ci0KLS0gbGluZXMKLS0gcmVj
dGFuZ2xlcyAocG9zc2libHkgcm91bmRlZCkKLS0gY2lyY2xlcwotLSBlbGxpcHNlcwotLSBwYXRo
cwotLSBjb250YWluZXJzCi0KLUl0ZW1zIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjYW52YXMuIExh
dGVyIGFkZGl0aW9ucyBhcmUgZHJhd24gYWJvdmUgaXRlbXMKLWFkZGVkIGJlZm9yZSwgaWUuIHRo
ZSB6SW5kZXggaW5jcmVhc2VzIG9uIGV2ZXJ5IGl0ZW0gaW5zZXJ0aW9uLgotSGVyZSBpcyBhIGNv
ZGUgc25pcHBldCBvZiB0aGUgY3JlYXRpb24gb2YgYSBjYW52YXMgaXRlbSwgaW4gdGhpcyBjYXNl
IGEgcm91bmRlZCByZWN0OgotCi08Y29kZS1zbmlwcGV0PgotCWNhbnZhcy0+aW5zZXJ0SXRlbShL
Q2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNhbnZhcywgcmVj
dFN0eWxlLCAxMjAsIDEwMCwgMTQwLCAxNjAsIDUsIDEwKSk7Ci08L2NvZGUtc25pcHBldD4KLQot
Tm90ZSB0aGF0IGZvciBtYW5pcHVsYXRpbmcgaW5kaXZpZHVhbCBjYW52YXMgaXRlbXMgYXQgYSBs
YXRlciB0aW1lIGl0IGlzCi1jb252ZW5pZW50IHRvIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBjYW52
YXMgaXRlbToKLQotPGNvZGUtc25pcHBldD4KLSAgICAgICAgS0NhbnZhc0l0ZW0gKml0ZW0gPSBL
Q2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNhbnZhcywgcmVj
dFN0eWxlLCAxMjAsIDEwMCwgMTQwLCAxNjAsIDUsIDEwKTsKLTwvY29kZS1zbmlwcGV0PgotCi1E
byBub3Qgd29ycnkgYWJvdXQgaXQgYmVpbmcgYSBwb2ludGVyLCB0aGUgY2FudmFzIGtlZXBzIHRy
YWNrIG9mIHRoZSBpdGVtCi1hbmQgd2lsbCBkZWxldGUgaXQgd2hlbiBpdCBpcyBpdHNlbGYgc2h1
dHRpbmcgZG93bi4KLU5vdyB0aGF0IHdlIGhhdmUgYSBwb2ludGVyIHRvIHRoZSBpdGVtLCB3ZSBj
YW4gZG8gdGhpbmdzIGxpa2UgbG93ZXIoKS9yYWlzZSgpLAotZ2V0IHRoZSBiYm94KCkgb2YgdGhl
IGl0ZW0gYW5kIGhpdCBkZXRlY3Rpb24gdXNpbmcgZmlsbENvbnRhaW5zKCkvc3Ryb2tlQ29udGFp
bnMoKS4KLUhhdmUgYSBsb29rIGF0IEtDYW52YXNJdGVtLmggZm9yIHdoYXQgeW91IGNhbiBkbyB3
aXRoIEtDYW52YXNJdGVtcy4KLQotNS4gV3JpdGluZyByZW5kZXJpbmcgdGFyZ2V0cyBbVE9ET10K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotNi4gV3JpdGluZyByZW5kZXJpbmcgZGV2
aWNlcyBbVE9ET10gCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhhdmUgZnVuIHdp
dGggS0NhbnZhcyEKLVlvdXIgS0NhbnZhcyBUZWFtIDopCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
S0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFz
RmlsdGVycy5jcHAJKHJldmlzaW9uIDE3NDc0KQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNG
aWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5jbHVkZSAiS0NhbnZh
c1RyZWVEZWJ1Zy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIApJbmRleDogV2ViQ29yZS9r
Y2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZh
cy9LQ2FudmFzVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTc0NzQpCisrKyBXZWJDb3JlL2tjYW52
YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzgwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KLSAqICAgICAgICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5v
dkBrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWZkZWYgU1ZHX1NVUFBP
UlQKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCi0KLSNpbmNsdWRlICJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNW
R0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4uaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5o
IgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
LyoqIGNsYXNzICsgaW9tYW5pcCB0byBoZWxwIHN0cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGku
ZS4gIiwgIiBpbiBzdHJpbmcgImEsIGIsIGMsIGQiCi0gKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3
aGVyZSB5b3UgZG9uJ3Qga25vdyB3aGljaCBpdGVtIGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAot
ICogb25lIHRvIGJlIHByaW50ZWQsIGJ1dCBzdGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlr
ZSAiLCBiLCBjIiwgd29ya3MgbGlrZSAKLSAqIERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpqb2luIGZv
ciBzdHJlYW1zCi0gKi8KLWNsYXNzIFRleHRTdHJlYW1TZXBhcmF0b3IKLXsKLXB1YmxpYzoKLSAg
ICBUZXh0U3RyZWFtU2VwYXJhdG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpIDogbV9zZXBh
cmF0b3IocyksIG1fbmVlZFRvU2VwYXJhdGUoZmFsc2UpIHt9Ci1wcml2YXRlOgotICAgIGZyaWVu
ZCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJh
dG9yICZzZXApOwotICAgIAotcHJpdmF0ZToKLSAgICBEZXByZWNhdGVkU3RyaW5nIG1fc2VwYXJh
dG9yOwotICAgIGJvb2wgbV9uZWVkVG9TZXBhcmF0ZTsKLX07Ci0KLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3IgJnNlcCkKLXsKLSAgICBp
ZiAoc2VwLm1fbmVlZFRvU2VwYXJhdGUpCi0gICAgICAgIHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsK
LSAgICBlbHNlIAotICAgICAgICBzZXAubV9uZWVkVG9TZXBhcmF0ZSA9IHRydWU7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBJbnRQb2ludCAmcCkKLXsKLSAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8
PCBwLnkoKSA8PCAiKSI7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEludFJlY3QgJnIpCi17Ci0gICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngo
KSA8PCAiLCIgPDwgci55KCkgPDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5o
ZWlnaHQoKTsKLX0KLQotYm9vbCBoYXNGcmFjdGlvbnMoZG91YmxlIHZhbCkKLXsKLSAgICBkb3Vi
bGUgZXBzaWxvbiA9IDAuMDAwMTsKLSAgICBpbnQgaXZhbCA9IGludCh2YWwpOwotICAgIGRvdWJs
ZSBkdmFsID0gZG91YmxlKGl2YWwpOyAgICAKLSAgICByZXR1cm4gKGZhYnModmFsLWR2YWwpID4g
ZXBzaWxvbik7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZsb2F0UmVjdCAmcikKLXsKLSAgICB0cyA8PCAiYXQgKCI7IAotICAgIGlmIChoYXNGcmFj
dGlvbnMoci54KCkpKSAKLSAgICAgICAgdHMgPDwgci54KCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
dHMgPDwgaW50KHIueCgpKTsKLSAgICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhy
LnkoKSkpIAotICAgICAgICB0cyA8PCByLnkoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBp
bnQoci55KCkpOwotICAgIHRzIDw8ICIpIHNpemUgIjsKLSAgICBpZiAoaGFzRnJhY3Rpb25zKHIu
d2lkdGgoKSkpIAotICAgICAgICB0cyA8PCByLndpZHRoKCk7IAotICAgIGVsc2UgCi0gICAgICAg
IHRzIDw8IGludChyLndpZHRoKCkpOyAKLSAgICB0cyA8PCAieCI7Ci0gICAgaWYgKGhhc0ZyYWN0
aW9ucyhyLmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHIuaGVpZ2h0KCk7Ci0gICAgZWxzZSAK
LSAgICAgICAgdHMgPDwgaW50KHIuaGVpZ2h0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCAmcCkK
LXsKLSAgICB0cyA8PCAiKCI7ICAgIAotICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQotICAg
ICAgICB0cyA8PCBwLngoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQocC54KCkpOyAg
ICAKLSAgICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhwLnkoKSkpIAotICAgICAg
ICB0cyA8PCBwLnkoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQocC55KCkpOyAgICAK
LSAgICByZXR1cm4gdHMgPDwgIikiOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBGbG9hdFNpemUgJnMpCi17ICAgCi0gICAgdHMgPDwgIndpZHRoPSI7
Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhzLndpZHRoKCkpKQotICAgICAgICB0cyA8PCBzLndpZHRo
KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCBpbnQocy53aWR0aCgpKTsKLSAgICB0cyA8PCAi
IGhlaWdodD0iOwotICAgIGlmIChoYXNGcmFjdGlvbnMocy5oZWlnaHQoKSkpIAotICAgICAgICB0
cyA8PCBzLmhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgaW50KHMuaGVpZ2h0KCkp
OwotICAgICByZXR1cm4gdHM7Ci19Ci0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQWZmaW5lVHJhbnNmb3JtICZtKQotewotICAgIGlmIChtLmlzSWRlbnRp
dHkoKSkKLSAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKLSAgICBlbHNlIAotICAgIHsKLSAgICAg
ICAgdHMgPDwgInttPSgoIiA8PCBtLm0xMSgpIDw8ICIsIiA8PCBtLm0xMigpIDw8ICIpKCIgPDwg
bS5tMjEoKSA8PCAiLCIgPDwgbS5tMjIoKSA8PCAiKSkiOwotICAgICAgICB0cyA8PCAiIHQ9KCIg
PDwgbS5keCgpIDw8ICIsIiA8PCBtLmR5KCkgPDwgIil9IjsKLSAgICB9Ci0gICAgcmV0dXJuIHRz
OwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ciAmYykKLXsKLSAgICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdy
aXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpICE9IGluZGVudDsgKytpKSB7Ci0gICAgICAgIHRzIDw8ICIgICI7Ci0gICAgfQotfQot
Ci0vL0ZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgS0NEYXNoQXJyYXkg
JmEpCi17Ci0gICAgdHMgPDwgInsiOwotICAgIEtDRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBhLmVuZCgpOwotICAgIGZvciAoS0NEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
YS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4o
KSkKLSAgICAgICAgICAgIHRzIDw8ICIsICI7Ci0gICAgICAgIHRzIDw8ICppdDsKLSAgICB9Ci0g
ICAgdHMgPDwgIn0iOwotICAgIHJldHVybiB0czsKLX0KLQotLy9GSVhNRTogVGhpcyBzaG91bGQg
YmUgaW4gS1JlbmRlcmluZ1N0eWxlLmNwcAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewot
ICAgIGNhc2UgQnV0dENhcDoKLSAgICAgICAgdHMgPDwgIkJVVFQiOyBicmVhazsKLSAgICBjYXNl
IFJvdW5kQ2FwOgotICAgICAgICB0cyA8PCAiUk9VTkQiOyBicmVhazsKLSAgICBjYXNlIFNxdWFy
ZUNhcDoKLSAgICAgICAgdHMgPDwgIlNRVUFSRSI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
dHM7Ci19Ci0KLS8vRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAK
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBz
dHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBNaXRlckpvaW46Ci0gICAg
ICAgIHRzIDw8ICJNSVRFUiI7IGJyZWFrOwotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICB0
cyA8PCAiUk9VTkQiOyBicmVhazsKLSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgdHMgPDwg
IkJFVkVMIjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotI2RlZmluZSBESUZG
RVJTX0ZST01fUEFSRU5UKHBhdGgpICghcGFyZW50U3R5bGUgfHwgKHBhcmVudFN0eWxlLT5wYXRo
ICE9IGNoaWxkU3R5bGUtPnBhdGgpKQotLy8gYXZvaWRzIHRlc3RpbmcgcGF0aCBpZiBwcmVkIGlz
IGZhbHNlLiBUaGlzIGlzIHVzZWQgd2l0aCB0ZXN0cyB0aGF0IGhhdmUgc2lkZS1lZmZlY3RzCi0v
LyBmb3IgdGhlIHBhcmVudCBvYmplY3QKLSNkZWZpbmUgRElGRkVSU19GUk9NX1BBUkVOVF9BVk9J
RF9URVNUX0lGX0ZBTFNFKHByZWQsIHBhdGgpICghcGFyZW50U3R5bGUgfHwgKCghcGFyZW50U3R5
bGUtPnByZWQpIHx8IChwYXJlbnRTdHlsZS0+cGF0aCAhPSBjaGlsZFN0eWxlLT5wYXRoKSkpCi0K
LXN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCAmb2JqZWN0KQotewotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC5zdHls
ZSgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHls
ZSgpOwotICAgIAotICAgIGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgp
KQotICAgICAgICB0cyA8PCAiIFt0cmFuc2Zvcm09IiA8PCBvYmplY3QubG9jYWxUcmFuc2Zvcm0o
KSA8PCAiXSI7Ci0gICAgaWYgKHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpICE9IFNWR1JlbmRl
clN0eWxlOjppbml0aWFsSW1hZ2VSZW5kZXJpbmcoKSkKLSAgICAgICAgdHMgPDwgIiBbaW1hZ2Ug
cmVuZGVyaW5nPSIgPDwgc3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkgPDwgIl0iOwotICAgIGlm
IChzdHlsZS0+b3BhY2l0eSgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKQotICAg
ICAgICB0cyA8PCAiIFtvcGFjaXR5PSIgPDwgc3R5bGUtPm9wYWNpdHkoKSA8PCAiXSI7Ci0gICAg
aWYgKG9iamVjdC5pc1JlbmRlclBhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJQYXRoJiBw
YXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rv
cnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7Ci0gICAgICAgIGlmIChzdHJva2VQ
YWludFNlcnZlcikgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Ci0g
ICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyI7Ci0gICAgICAgICAgICBpZiAoc3Ryb2tlUGFp
bnRTZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cm9rZVBhaW50U2VydmVyLT5pZElu
UmVnaXN0cnkoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltp
ZD1cIiI8PCBzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkgPDwgIlwiXSI7IAotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAqc3Ryb2tl
UGFpbnRTZXJ2ZXI7Ci0gICAgICAgICAgICB9IAotCi0gICAgICAgICAgICBkb3VibGUgZGFzaE9m
ZnNldCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2
Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgICAgICAgICBjb25zdCBLQ0Rh
c2hBcnJheSYgZGFzaEFycmF5ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUoc3R5bGUpOwotICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gS1NW
R1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0
cm9rZVdpZHRoKCksIDEuMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdmdTdHls
ZS0+c3Ryb2tlT3BhY2l0eSgpICE9IDEuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAi
W29wYWNpdHk9IiA8PCBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDw8ICJdIjsKLSAgICAgICAg
ICAgIGlmIChzdHJva2VXaWR0aCAhPSAxLjBmKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwg
IltzdHJva2Ugd2lkdGg9IiA8PCBzdHJva2VXaWR0aCA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAo
c3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSA0KQotICAgICAgICAgICAgICAgIHRzIDw8
IHMgPDwgIlttaXRlciBsaW1pdD0iIDw8IHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkgPDwg
Il0iOwotICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9IDApCi0gICAgICAg
ICAgICAgICAgdHMgPDwgcyA8PCAiW2xpbmUgY2FwPSIgPDwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkg
PDwgIl0iOwotICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSAwKQotICAg
ICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltsaW5lIGpvaW49IiA8PCBzdmdTdHlsZS0+am9pblN0
eWxlKCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKGRhc2hPZmZzZXQgIT0gMC4wZikKLSAgICAg
ICAgICAgICAgICB0cyA8PCBzIDw8ICJbZGFzaCBvZmZzZXQ9IiA8PCBkYXNoT2Zmc2V0IDw8ICJd
IjsKLSAgICAgICAgICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICB0cyA8PCBzIDw8ICJbZGFzaCBhcnJheT0iIDw8IGRhc2hBcnJheSA8PCAiXSI7ICAgICAgICAK
LSAgICAgICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLSAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWlu
dFNlcnZlcihzdHlsZSwgJnBhdGgpOwotICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0g
ICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8
ICIgW2ZpbGw9eyI7Ci0gICAgICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFmaWxsUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2lkPVwiIiA8PCBmaWxsUGFpbnRTZXJ2
ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAqZmlsbFBhaW50U2VydmVyOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxP
cGFjaXR5KCkgIT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0i
IDw8IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDw8ICJdIjsKLSAgICAgICAgICAg
IGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSAhPSBSVUxFX05PTlpFUk8pCi0gICAg
ICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwgcnVsZT0iIDw8IHN0eWxlLT5zdmdTdHlsZSgp
LT5maWxsUnVsZSgpIDw8ICJdIjsKLSAgICAgICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAg
IHRzIDw8ICIgW2NsaXAgcGF0aD1cIiIgPDwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkgPDwgIlwiXSI7
Ci0gICAgaWYgKCFzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRz
IDw8ICIgW3N0YXJ0IG1hcmtlcj0iIDw8IHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpIDw8ICJdIjsK
LSAgICBpZiAoIXN2Z1N0eWxlLT5taWRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzIDw8
ICIgW21pZGRsZSBtYXJrZXI9IiA8PCBzdmdTdHlsZS0+bWlkTWFya2VyKCkgPDwgIl0iOwotICAg
IGlmICghc3ZnU3R5bGUtPmVuZE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMgPDwgIiBb
ZW5kIG1hcmtlcj0iIDw8IHN2Z1N0eWxlLT5lbmRNYXJrZXIoKSA8PCAiXSI7Ci0gICAgaWYgKCFz
dmdTdHlsZS0+ZmlsdGVyKCkuaXNFbXB0eSgpKQotICAgICAgICB0cyA8PCAiIFtmaWx0ZXI9IiA8
PCBzdmdTdHlsZS0+ZmlsdGVyKCkgPDwgIl0iOwotfQotI3VuZGVmIERJRkZFUlNfRlJPTV9QQVJF
TlQKLSN1bmRlZiBESUZGRVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UKLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBh
dGggJm8pCi17Ci0gICAgdHMgPDwgIiAiIDw8IG8uYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0
KG8ucmVsYXRpdmVCQm94KCkpOwotICAgIAotICAgIHdyaXRlU3R5bGUodHMsIG8pOwotICAgIAot
ICAgIHRzIDw8ICIgW2RhdGE9XCIiIDw8IG8ucGF0aCgpLmRlYnVnU3RyaW5nKCkgPDwgIlwiXSI7
Ci0gICAgCi0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZvKQotewotICAgIHRz
IDw8ICIgIiA8PCBvLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChvLnJlbGF0aXZlQkJveCgp
KTsKLSAgICAKLSAgICB3cml0ZVN0eWxlKHRzLCBvKTsKLSAgICAKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGdldFRhZ05hbWUodm9pZCAqbm9kZSkKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+
KG5vZGUpOwotICAgIGlmIChlbGVtKQotICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW0tPm5vZGVO
YW1lKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygp
OwotfQotCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWlu
ZXIgJmNvbnRhaW5lciwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
KTsKLSAgICB0cyA8PCBjb250YWluZXIucmVuZGVyTmFtZSgpOwotICAgIAotICAgIGlmIChjb250
YWluZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGFnTmFtZSA9IGdl
dFRhZ05hbWUoY29udGFpbmVyLmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmICghdGFnTmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHsiIDw8IHRhZ05hbWUgPDwgIn0iOwotICAgIH0K
LSAgICAKLSAgICB0cyA8PCBjb250YWluZXIgPDwgZW5kbDsKLSAgICAKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCAqY2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxMOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBp
bmRlbnQgKyAxKTsKLX0KLQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
UGF0aCAmcGF0aCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsK
LSAgICB0cyA8PCBwYXRoLnJlbmRlck5hbWUoKTsKLSAgICAKLSAgICBpZiAocGF0aC5lbGVtZW50
KCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShwYXRo
LmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICB0cyA8PCAiIHsiIDw8IHRhZ05hbWUgPDwgIn0iOwotICAgIH0KLSAgICAKLSAgICB0cyA8PCBw
YXRoIDw8IGVuZGw7Ci19Ci0KLXZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYg
dHMsIE5vZGUgKnBhcmVudCkKLXsKLSAgICBBU1NFUlQocGFyZW50KTsKLSAgICBOb2RlICpub2Rl
ID0gcGFyZW50OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdFbGVtZW50ICpzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBpZiAoIXN2Z0VsZW1lbnQt
PmlzU3R5bGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdTdHlsZWRF
bGVtZW50ICpzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVu
dCk7Ci0gICAgICAgIFJlZlB0cjxTVkdSZXNvdXJjZT4gcmVzb3VyY2Uoc3R5bGVkLT5jYW52YXNS
ZXNvdXJjZSgpKTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBlbGVtZW50SWQgPSBzdmdFbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
LSAgICAgICAgaWYgKHJlc291cmNlLT5pc1BhaW50U2VydmVyKCkpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9p
bnRlcl9jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlcj4ocmVzb3VyY2UpOwotICAgICAgICAgICAg
dHMgPDwgIktSZW5kZXJpbmdQYWludFNlcnZlciB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIg
IiA8PCAqcGFpbnRTZXJ2ZXIgPDwgIn0iIDw8IGVuZGw7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgdHMgPDwgIktDYW52YXNSZXNvdXJjZSB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIg
IiA8PCAqcmVzb3VyY2UgPDwgIn0iIDw8IGVuZGw7Ci0gICAgfSB3aGlsZSAoKG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKHBhcmVudCkpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaAkocmV2aXNpb24gMTc0NzQp
CisrKyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJEZXBy
ZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRWYWx1ZUxpc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEZsb2F0UG9pbnQ7Ci0g
ICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBJbnRQ
b2ludDsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEtDQ2xpcERhdGE7Ci0gICAgY2xh
c3MgS0NQYXRoRGF0YTsKLSAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFJlbmRlclBhdGg7Ci0g
ICAgY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotCi0vLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUg
bWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0
IFJlbmRlclNWR0NvbnRhaW5lciYsIGludCBpbmRlbnQgPSAwKTsKLXZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclBhdGgmLCBpbnQgaW5kZW50ID0gMCk7Ci12b2lkIHdyaXRlUmVu
ZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBOb2RlKiBwYXJlbnQpOwotCi0vLyBoZWxwZXIgb3Bl
cmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVy
IHRyZWUuIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJ
bnRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xv
ciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQm
KTsKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYp
OwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7
Ci0KLS8vIGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRy
ZWUuIHRoZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIg
dHJlZQotLy8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8g
YXZvaWQgbWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4K
LSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0qPiYgbCkKLXsKLSAg
ICB0cyA8PCAiWyI7Ci0gICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj46OkNv
bnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7Ci0gICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVl
TGlzdDxJdGVtKj46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwuZW5kKCk7Ci0gICAgd2hpbGUgKGl0
ICE9IGl0X2UpIHsKLSAgICAgICAgdHMgPDwgKigqaXQpOwotICAgICAgICArK2l0OwotICAgICAg
ICBpZiAoaXQgIT0gaXRfZSkgdHMgPDwgIiwgIjsKLSAgICB9Ci0gICAgdHMgPDwgIl0iOwotICAg
IAotICAgIHJldHVybiB0czsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KLVRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
SXRlbT4mIGwpCi17Ci0gICAgdHMgPDwgIlsiOwotICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8SXRlbT46OkNvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7Ci0gICAgdHlwZW5hbWUg
RGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtPjo6Q29uc3RJdGVyYXRvciBpdF9lID0gbC5lbmQoKTsK
LSAgICB3aGlsZSAoaXQgIT0gaXRfZSkgewotICAgICAgICB0cyA8PCAqaXQ7Ci0gICAgICAgICsr
aXQ7Ci0gICAgICAgIGlmIChpdCAhPSBpdF9lKSB0cyA8PCAiLCAiOwotICAgIH0KLSAgICB0cyA8
PCAiXSI7Ci0gICAgCi0gICAgcmV0dXJuIHRzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNw
cAkocmV2aXNpb24gMTc0NzQpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgot
I2luY2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNU
ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwCShyZXZp
c2lvbiAxNzQ3NCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLSNpbmNsdWRl
ICJLQ2FudmFzVHJlZURlYnVnLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAxNzQ3NCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2
aXNpb24gMTc0NzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKKyNpbmNsdWRlICJT
VkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1ZGUg
PGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxNzQ3NCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZkZWYgU1ZH
X1NVUFBPUlQKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCisjaW5jbHVkZSAiU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2VuZGlm
CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgIChDKSAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oIgorCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRy
ZWVBc1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCisjaW5jbHVk
ZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSA8bWF0
aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qKiBjbGFzcyArIGlvbWFuaXAgdG8gaGVs
cCBzdHJlYW1pbmcgbGlzdCBzZXBhcmF0b3JzLCBpLmUuICIsICIgaW4gc3RyaW5nICJhLCBiLCBj
LCBkIgorICogQ2FuIGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUgeW91IGRvbid0IGtub3cgd2hpY2gg
aXRlbSBpbiB0aGUgbGlzdCBpcyB0aGUgZmlyc3QKKyAqIG9uZSB0byBiZSBwcmludGVkLCBidXQg
c3RpbGwgd2FudCB0byBhdm9pZCBzdHJpbmdzIGxpa2UgIiwgYiwgYyIsIHdvcmtzIGxpa2UgCisg
KiBEZXByZWNhdGVkU3RyaW5nTGlzdDo6am9pbiBmb3Igc3RyZWFtcworICovCitjbGFzcyBUZXh0
U3RyZWFtU2VwYXJhdG9yCit7CitwdWJsaWM6CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvcihjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZzKSA6IG1fc2VwYXJhdG9yKHMpLCBtX25lZWRUb1NlcGFyYXRl
KGZhbHNlKSB7fQorcHJpdmF0ZToKKyAgICBmcmllbmQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgVGV4dFN0cmVhbVNlcGFyYXRvciAmc2VwKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgRGVwcmVjYXRlZFN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBib29sIG1fbmVlZFRvU2Vw
YXJhdGU7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0
U3RyZWFtU2VwYXJhdG9yICZzZXApCit7CisgICAgaWYgKHNlcC5tX25lZWRUb1NlcGFyYXRlKQor
ICAgICAgICB0cyA8PCBzZXAubV9zZXBhcmF0b3I7CisgICAgZWxzZSAKKyAgICAgICAgc2VwLm1f
bmVlZFRvU2VwYXJhdGUgPSB0cnVlOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UG9pbnQgJnApCit7CisgICAgcmV0
dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOworfQorCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRSZWN0ICZyKQorewor
ICAgIHJldHVybiB0cyA8PCAiYXQgKCIgPDwgci54KCkgPDwgIiwiIDw8IHIueSgpIDw8ICIpIHNp
emUgIiA8PCByLndpZHRoKCkgPDwgIngiIDw8IHIuaGVpZ2h0KCk7Cit9CisKK2Jvb2wgaGFzRnJh
Y3Rpb25zKGRvdWJsZSB2YWwpCit7CisgICAgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7CisgICAg
aW50IGl2YWwgPSBpbnQodmFsKTsKKyAgICBkb3VibGUgZHZhbCA9IGRvdWJsZShpdmFsKTsgICAg
CisgICAgcmV0dXJuIChmYWJzKHZhbC1kdmFsKSA+IGVwc2lsb24pOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFJlY3QgJnIpCit7CisgICAg
dHMgPDwgImF0ICgiOyAKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHIueCgpKSkgCisgICAgICAgIHRz
IDw8IHIueCgpOworICAgIGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLngoKSk7CisgICAgdHMg
PDwgIiwiOworICAgIGlmIChoYXNGcmFjdGlvbnMoci55KCkpKSAKKyAgICAgICAgdHMgPDwgci55
KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIueSgpKTsKKyAgICB0cyA8PCAiKSBz
aXplICI7CisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLndpZHRoKCkpKSAKKyAgICAgICAgdHMgPDwg
ci53aWR0aCgpOyAKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci53aWR0aCgpKTsgCisg
ICAgdHMgPDwgIngiOworICAgIGlmIChoYXNGcmFjdGlvbnMoci5oZWlnaHQoKSkpIAorICAgICAg
ICB0cyA8PCByLmhlaWdodCgpOworICAgIGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQgJnApCit7CisgICAgdHMgPDwgIigiOyAgICAKKyAg
ICBpZiAoaGFzRnJhY3Rpb25zKHAueCgpKSkKKyAgICAgICAgdHMgPDwgcC54KCk7CisgICAgZWxz
ZSAKKyAgICAgICAgdHMgPDwgaW50KHAueCgpKTsgICAgCisgICAgdHMgPDwgIiwiOworICAgIGlm
IChoYXNGcmFjdGlvbnMocC55KCkpKSAKKyAgICAgICAgdHMgPDwgcC55KCk7CisgICAgZWxzZSAK
KyAgICAgICAgdHMgPDwgaW50KHAueSgpKTsgICAgCisgICAgcmV0dXJuIHRzIDw8ICIpIjsKK30K
KworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRTaXpl
ICZzKQoreyAgIAorICAgIHRzIDw8ICJ3aWR0aD0iOworICAgIGlmIChoYXNGcmFjdGlvbnMocy53
aWR0aCgpKSkKKyAgICAgICAgdHMgPDwgcy53aWR0aCgpOworICAgIGVsc2UKKyAgICAgICAgdHMg
PDwgaW50KHMud2lkdGgoKSk7CisgICAgdHMgPDwgIiBoZWlnaHQ9IjsKKyAgICBpZiAoaGFzRnJh
Y3Rpb25zKHMuaGVpZ2h0KCkpKSAKKyAgICAgICAgdHMgPDwgcy5oZWlnaHQoKTsKKyAgICBlbHNl
CisgICAgICAgIHRzIDw8IGludChzLmhlaWdodCgpKTsKKyAgICAgcmV0dXJuIHRzOworfQorCisK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSAmbSkKK3sKKyAgICBpZiAobS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRzIDw8ICJpZGVu
dGl0eSI7CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHRzIDw8ICJ7bT0oKCIgPDwgbS5tMTEo
KSA8PCAiLCIgPDwgbS5tMTIoKSA8PCAiKSgiIDw8IG0ubTIxKCkgPDwgIiwiIDw8IG0ubTIyKCkg
PDwgIikpIjsKKyAgICAgICAgdHMgPDwgIiB0PSgiIDw8IG0uZHgoKSA8PCAiLCIgPDwgbS5keSgp
IDw8ICIpfSI7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3IgJmMpCit7CisgICAgcmV0dXJuIHRzIDw8
IGMubmFtZSgpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywg
aW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkgewor
ICAgICAgICB0cyA8PCAiICAiOworICAgIH0KK30KKworLy9GSVhNRTogVGhpcyBzaG91bGQgYmUg
aW4gS1JlbmRlcmluZ1N0eWxlLmNwcAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEtDRGFzaEFycmF5ICZhKQoreworICAgIHRzIDw8ICJ7IjsKKyAg
ICBLQ0Rhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKKyAgICBmb3IgKEtD
RGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IGEuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIGlmIChpdCAhPSBhLmJlZ2luKCkpCisgICAgICAgICAgICB0cyA8PCAiLCAi
OworICAgICAgICB0cyA8PCAqaXQ7CisgICAgfQorICAgIHRzIDw8ICJ9IjsKKyAgICByZXR1cm4g
dHM7Cit9CisKKy8vRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIHN0
eWxlKQoreworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAg
IHRzIDw8ICJCVVRUIjsgYnJlYWs7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgdHMgPDwg
IlJPVU5EIjsgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIHRzIDw8ICJTUVVB
UkUiOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCisvL0ZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHls
ZSkgeworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgICAgICB0cyA8PCAiTUlURVIiOyBicmVhazsK
KyAgICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgdHMgPDwgIlJPVU5EIjsgYnJlYWs7CisgICAg
Y2FzZSBCZXZlbEpvaW46CisgICAgICAgIHRzIDw8ICJCRVZFTCI7IGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKKyNkZWZpbmUgRElGRkVSU19GUk9NX1BBUkVOVChwYXRoKSAoIXBh
cmVudFN0eWxlIHx8IChwYXJlbnRTdHlsZS0+cGF0aCAhPSBjaGlsZFN0eWxlLT5wYXRoKSkKKy8v
IGF2b2lkcyB0ZXN0aW5nIHBhdGggaWYgcHJlZCBpcyBmYWxzZS4gVGhpcyBpcyB1c2VkIHdpdGgg
dGVzdHMgdGhhdCBoYXZlIHNpZGUtZWZmZWN0cworLy8gZm9yIHRoZSBwYXJlbnQgb2JqZWN0Cisj
ZGVmaW5lIERJRkZFUlNfRlJPTV9QQVJFTlRfQVZPSURfVEVTVF9JRl9GQUxTRShwcmVkLCBwYXRo
KSAoIXBhcmVudFN0eWxlIHx8ICgoIXBhcmVudFN0eWxlLT5wcmVkKSB8fCAocGFyZW50U3R5bGUt
PnBhdGggIT0gY2hpbGRTdHlsZS0+cGF0aCkpKQorCitzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QgJm9iamVjdCkKK3sKKyAgICBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAKKyAgICBpZiAoIW9iamVj
dC5sb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbdHJhbnNm
b3JtPSIgPDwgb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkgPDwgIl0iOworICAgIGlmIChzdmdTdHls
ZS0+aW1hZ2VSZW5kZXJpbmcoKSAhPSBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVuZGVy
aW5nKCkpCisgICAgICAgIHRzIDw8ICIgW2ltYWdlIHJlbmRlcmluZz0iIDw8IHN2Z1N0eWxlLT5p
bWFnZVJlbmRlcmluZygpIDw8ICJdIjsKKyAgICBpZiAoc3R5bGUtPm9wYWNpdHkoKSAhPSBSZW5k
ZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbb3BhY2l0eT0iIDw8
IHN0eWxlLT5vcGFjaXR5KCkgPDwgIl0iOworICAgIGlmIChvYmplY3QuaXNSZW5kZXJQYXRoKCkp
IHsKKyAgICAgICAgY29uc3QgUmVuZGVyUGF0aCYgcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJl
bmRlclBhdGgmPihvYmplY3QpOworICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9r
ZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHls
ZSwgJnBhdGgpOworICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAgICAgICAgICAg
IFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOworICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tl
PXsiOworICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9XCIiPDwgc3Ryb2tlUGFpbnRTZXJ2ZXIt
PmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBhaW50U2VydmVyOworICAgICAgICAgICAg
fSAKKworICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6
OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRoLCBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgp
LCAwLjApOworICAgICAgICAgICAgY29uc3QgS0NEYXNoQXJyYXkmIGRhc2hBcnJheSA9IEtTVkdQ
YWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKKyAgICAg
ICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0
aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSAhPSAxLjBm
KQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgc3ZnU3R5bGUtPnN0
cm9rZU9wYWNpdHkoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAoc3Ryb2tlV2lkdGggIT0gMS4w
ZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbc3Ryb2tlIHdpZHRoPSIgPDwgc3Ryb2tl
V2lkdGggPDwgIl0iOworICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0
KCkgIT0gNCkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbbWl0ZXIgbGltaXQ9IiA8PCBz
dmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChzdmdT
dHlsZS0+Y2FwU3R5bGUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltsaW5l
IGNhcD0iIDw8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChz
dmdTdHlsZS0+am9pblN0eWxlKCkgIT0gMCkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJb
bGluZSBqb2luPSIgPDwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpIDw8ICJdIjsKKyAgICAgICAgICAg
IGlmIChkYXNoT2Zmc2V0ICE9IDAuMGYpCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2Rh
c2ggb2Zmc2V0PSIgPDwgZGFzaE9mZnNldCA8PCAiXSI7CisgICAgICAgICAgICBpZiAoIWRhc2hB
cnJheS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2Rhc2ggYXJyYXk9
IiA8PCBkYXNoQXJyYXkgPDwgIl0iOyAgICAgICAgCisgICAgICAgICAgICB0cyA8PCAifV0iOwor
ICAgICAgICB9CisgICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZmlsbFBhaW50U2VydmVy
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKKyAg
ICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgeworICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFy
YXRvciBzKCIgIik7CisgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiOworICAgICAgICAgICAg
aWYgKGZpbGxQYWludFNlcnZlcikgeworICAgICAgICAgICAgICAgIGlmICghZmlsbFBhaW50U2Vy
dmVyLT5pZEluUmVnaXN0cnkoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHRzIDw8
IHMgPDwgIltpZD1cIiIgPDwgZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJd
IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwg
KmZpbGxQYWludFNlcnZlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpICE9IDEuMGYpCisgICAgICAg
ICAgICAgICAgdHMgPDwgcyA8PCAiW29wYWNpdHk9IiA8PCBzdHlsZS0+c3ZnU3R5bGUoKS0+Zmls
bE9wYWNpdHkoKSA8PCAiXSI7CisgICAgICAgICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmZp
bGxSdWxlKCkgIT0gUlVMRV9OT05aRVJPKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltm
aWxsIHJ1bGU9IiA8PCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA8PCAiXSI7CisgICAg
ICAgICAgICB0cyA8PCAifV0iOworICAgICAgICB9CisgICAgfQorICAgIGlmICghc3ZnU3R5bGUt
PmNsaXBQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8PCAiIFtjbGlwIHBhdGg9XCIiIDw8
IHN2Z1N0eWxlLT5jbGlwUGF0aCgpIDw8ICJcIl0iOworICAgIGlmICghc3ZnU3R5bGUtPnN0YXJ0
TWFya2VyKCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8PCAiIFtzdGFydCBtYXJrZXI9IiA8PCBz
dmdTdHlsZS0+c3RhcnRNYXJrZXIoKSA8PCAiXSI7CisgICAgaWYgKCFzdmdTdHlsZS0+bWlkTWFy
a2VyKCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8PCAiIFttaWRkbGUgbWFya2VyPSIgPDwgc3Zn
U3R5bGUtPm1pZE1hcmtlcigpIDw8ICJdIjsKKyAgICBpZiAoIXN2Z1N0eWxlLT5lbmRNYXJrZXIo
KS5pc0VtcHR5KCkpCisgICAgICAgIHRzIDw8ICIgW2VuZCBtYXJrZXI9IiA8PCBzdmdTdHlsZS0+
ZW5kTWFya2VyKCkgPDwgIl0iOworICAgIGlmICghc3ZnU3R5bGUtPmZpbHRlcigpLmlzRW1wdHko
KSkKKyAgICAgICAgdHMgPDwgIiBbZmlsdGVyPSIgPDwgc3ZnU3R5bGUtPmZpbHRlcigpIDw8ICJd
IjsKK30KKyN1bmRlZiBESUZGRVJTX0ZST01fUEFSRU5UCisjdW5kZWYgRElGRkVSU19GUk9NX1BB
UkVOVF9BVk9JRF9URVNUX0lGX0ZBTFNFCisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJQYXRoICZvKQoreworICAgIHRzIDw8ICIgIiA8
PCBvLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChvLnJlbGF0aXZlQkJveCgpKTsKKyAgICAK
KyAgICB3cml0ZVN0eWxlKHRzLCBvKTsKKyAgICAKKyAgICB0cyA8PCAiIFtkYXRhPVwiIiA8PCBv
LnBhdGgoKS5kZWJ1Z1N0cmluZygpIDw8ICJcIl0iOworICAgIAorICAgIHJldHVybiB0czsKK30K
Kworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR0NvbnRhaW5lciAmbykKK3sKKyAgICB0cyA8PCAiICIgPDwgby5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoby5yZWxhdGl2ZUJCb3goKSk7CisgICAgCisgICAgd3JpdGVTdHlsZSh0
cywgbyk7CisgICAgCisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgRGVwcmVjYXRlZFN0cmlu
ZyBnZXRUYWdOYW1lKHZvaWQgKm5vZGUpCit7CisgICAgU1ZHU3R5bGVkRWxlbWVudCAqZWxlbSA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICBpZiAoZWxlbSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtLT5ub2RlTmFtZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7
CisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKK30KKwordm9pZCB3cml0ZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZjb250YWluZXIsIGludCBpbmRlbnQp
Cit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgY29udGFpbmVyLnJl
bmRlck5hbWUoKTsKKyAgICAKKyAgICBpZiAoY29udGFpbmVyLmVsZW1lbnQoKSkgeworICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIHRhZ05hbWUgPSBnZXRUYWdOYW1lKGNvbnRhaW5lci5lbGVtZW50
KCkpOworICAgICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHMgPDwg
IiB7IiA8PCB0YWdOYW1lIDw8ICJ9IjsKKyAgICB9CisgICAgCisgICAgdHMgPDwgY29udGFpbmVy
IDw8IGVuZGw7CisgICAgCisgICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKKyAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7Cit9CisKK3ZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBhdGggJnBhdGgsIGludCBpbmRlbnQpCit7
CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgcGF0aC5yZW5kZXJOYW1l
KCk7CisgICAgCisgICAgaWYgKHBhdGguZWxlbWVudCgpKSB7CisgICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgdGFnTmFtZSA9IGdldFRhZ05hbWUocGF0aC5lbGVtZW50KCkpOworICAgICAgICBpZiAo
IXRhZ05hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8
ICJ9IjsKKyAgICB9CisgICAgCisgICAgdHMgPDwgcGF0aCA8PCBlbmRsOworfQorCit2b2lkIHdy
aXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzLCBOb2RlICpwYXJlbnQpCit7CisgICAg
QVNTRVJUKHBhcmVudCk7CisgICAgTm9kZSAqbm9kZSA9IHBhcmVudDsKKyAgICBkbyB7CisgICAg
ICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgU1ZHRWxlbWVudCAqc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihu
b2RlKTsKKyAgICAgICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAgICBSZWZQdHI8U1ZHUmVz
b3VyY2U+IHJlc291cmNlKHN0eWxlZC0+Y2FudmFzUmVzb3VyY2UoKSk7CisgICAgICAgIGlmICgh
cmVzb3VyY2UpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6aWRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIGlmIChyZXNvdXJjZS0+aXNQ
YWludFNlcnZlcigpKSB7CisgICAgICAgICAgICBSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVy
PiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXI+KHJlc291cmNlKTsKKyAgICAgICAgICAgIHRzIDw8ICJLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXIge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIgPDwgKnBhaW50U2VydmVyIDw8ICJ9IiA8
PCBlbmRsOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRzIDw8ICJLQ2FudmFzUmVzb3Vy
Y2Uge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIgPDwgKnJlc291cmNlIDw8ICJ9IiA8PCBl
bmRsOworICAgIH0gd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShwYXJlbnQp
KSk7Cit9CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgor
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAg
ICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIEZsb2F0UmVj
dDsKKyAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgSW50UG9pbnQ7CisgICAgY2xhc3Mg
SW50UmVjdDsKKyAgICBjbGFzcyBLQ0NsaXBEYXRhOworICAgIGNsYXNzIEtDUGF0aERhdGE7Cisg
ICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBSZW5kZXJQYXRoOworICAgIGNsYXNzIFJlbmRlclNW
R0NvbnRhaW5lcjsKKworLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVyVHJlZUFz
VGV4dCBjb2RlCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDb250YWlu
ZXImLCBpbnQgaW5kZW50ID0gMCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5k
ZXJQYXRoJiwgaW50IGluZGVudCA9IDApOwordm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0
U3RyZWFtJiwgTm9kZSogcGFyZW50KTsKKworLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVz
ZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLiAKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ29sb3ImKTsKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFBvaW50Jik7CitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0UmVjdCYpOworVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRQb2ludCYpOworCisvLyBoZWxwZXIgb3Bl
cmF0b3JzIHNwZWNpZmljIHRvIGR1bXBpbmcgdGhlIHJlbmRlciB0cmVlLiB0aGVzZSBhcmUgdXNl
ZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUKKy8vIHRoZXNlIGNv
dWxkIGJlIGRlZmluZWQgaW4gc2VwYXJhdGUgbmFtZXNwYWNlIHRvIGF2b2lkIG1hdGNoaW5nIHRo
ZXNlIGdlbmVyaWMgc2lnbmF0dXJlcyB1bmludGVudGlvbmFsbHkuCisgICAgCit0ZW1wbGF0ZTx0
eXBlbmFtZSBJdGVtPgorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj4mIGwpCit7CisgICAgdHMgPDwgIlsiOworICAg
IHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbSo+OjpDb25zdEl0ZXJhdG9yIGl0ID0g
bC5iZWdpbigpOworICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbSo+OjpDb25z
dEl0ZXJhdG9yIGl0X2UgPSBsLmVuZCgpOworICAgIHdoaWxlIChpdCAhPSBpdF9lKSB7CisgICAg
ICAgIHRzIDw8ICooKml0KTsKKyAgICAgICAgKytpdDsKKyAgICAgICAgaWYgKGl0ICE9IGl0X2Up
IHRzIDw8ICIsICI7CisgICAgfQorICAgIHRzIDw8ICJdIjsKKyAgICAKKyAgICByZXR1cm4gdHM7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0+JiBsKQoreworICAg
IHRzIDw8ICJbIjsKKyAgICB0eXBlbmFtZSBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0+OjpDb25z
dEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOworICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxp
c3Q8SXRlbT46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwuZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9
IGl0X2UpIHsKKyAgICAgICAgdHMgPDwgKml0OworICAgICAgICArK2l0OworICAgICAgICBpZiAo
aXQgIT0gaXRfZSkgdHMgPDwgIiwgIjsKKyAgICB9CisgICAgdHMgPDwgIl0iOworICAgIAorICAg
IHJldHVybiB0czsKK30KKworfQo=
</data>
<flag name="review"
          id="3907"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11301</attachid>
            <date>2006-10-31 10:03:46 -0800</date>
            <delta_ts>2006-10-31 10:06:02 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>kcanvastreedebug.diff</filename>
            <type>text/plain</type>
            <size>54637</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02NDYsNyArNjQ2LDYgQEAgc2V0IChTVkdfU09VUkNFUwogICAgIGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAogICAgIGtzdmcyL2V2ZW50cy9KU1NW
R0xhenlFdmVudExpc3RlbmVyLmNwcAogICAgIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3Bw
Ci0gICAga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAogICAgIGtjYW52YXMvS0NhbnZhc0Zp
bHRlcnMuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3Bw
CkBAIC0xMTIyLDYgKzExMjEsNyBAQCBzZXQoV2ViQ29yZV9TUkNTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisgICAgcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5n
L1JlbmRlckZvcm1FbGVtZW50LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5IEBACis8PDw8PDw8IC5taW5lCisyMDA2LTEwLTMxICBOaWtvbGFzIFppbW1lcm1hbm4g
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNDYzCisKKyAgICAgICAgTW92ZSBLQ2FudmFzVHJlZURlYnVnIGludG8gcmVuZGVyaW5n
LCBuYW1lZCBhcyBTVkdSZW5kZXJUcmVlQXNUZXh0LiosCisgICAgICAgIGFzIGRpY3Vzc2VkIHdp
dGggRGF2ZS4gQWxzbyBraWxsIHRoZSBvdXRkYXRlZCBERVNJR04gZG9jdW1lbnQuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICoga2NhbnZhcy9ERVNJR046IFJlbW92ZWQuCisgICAgICAgICog
a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHA6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzVHJl
ZURlYnVnLmNwcDogTW92ZWQgdG8gcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQKKyAgICAg
ICAgKiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaDogRGl0dG8uCisgICAgICAgICoga2NhbnZh
cy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwOgorICAgICAgICAq
IGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgor
Cis9PT09PT09CiAyMDA2LTEwLTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQ2hhbmdlIEdyYXBo
aWNzVHlwZXMuaCB0byBhIHByaXZhdGUgaGVhZGVyIHRvCkBAIC00OSw2ICs3NSw3IEBACiAgICAg
ICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CiAgICAg
ICAgIHJlbW92ZSBncmFtbWFyIG1hcmtlcnMgd2hlbiB3ZSByZW1vdmUgc3BlbGxpbmcgbWFya2Vy
cyAgICAgICAgCiAKKz4+Pj4+Pj4gLnIxNzQ4MAogMjAwNi0xMC0zMSAgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NzQ4MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODg1LDggKzE4ODUsNiBAQAogCQlBODhBRDNCNTA5NTI0ODZFMDAxREQx
OTYgLyogUXVhcnR6U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThDMEZCNzYwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQuaCAq
LzsgfTsKIAkJQTg4QUQzQjYwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NzA4OTcw
MUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSAqLzsgfTsKIAkJQTg4QUQzQkUwOTUyNDg2
RTAwMUREMTk2IC8qIEtDYW52YXNGaWx0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3RjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0Zp
bHRlcnMuaCAqLzsgfTsKLQkJQTg4QUQzQ0IwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNUcmVl
RGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MTBFMzkzMDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmggKi87IH07Ci0JCUE4
OEFEM0NDMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTBFMzk0MDhBNDE2MEYwMDMz
M0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCAqLzsgfTsKIAkJQTg4QUQ0MDEwOTUyNDhGMDAw
MUREMTk2IC8qIFNWR1JlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNkZGMDg5NzAxRjEwMEJBNTExNCAvKiBTVkdSZW5kZXJT
dHlsZS5jcHAgKi87IH07CiAJCUE4OEFENDAyMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJT
dHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThD
MEY3MDAwODk3MDFGMTAwQkE1MTE0IC8qIFNWR1JlbmRlclN0eWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg4QUQ0MDMwOTUyNDhGMDAwMURE
MTk2IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjcwMTA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVuZGVy
U3R5bGVEZWZzLmNwcCAqLzsgfTsKQEAgLTIyOTksNiArMjI5Nyw4IEBACiAJCUIyQTAxNUJBMEFG
NkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZU1hc2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1QTcwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNW
R1Jlc291cmNlTWFza2VyLmggKi87IH07CiAJCUIyQ0I0MTkzMEFCNzU5MDQwMDREOUM0NSAvKiBT
VkdSZW5kZXJpbmdJbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQ0I0MTRDMEFCNzU5MDQwMDREOUM0NSAvKiBTVkdSZW5kZXJpbmdJbnRlbnQu
aCAqLzsgfTsKIAkJQjJDQjQxQTYwQUI3NTkwNDAwNEQ5QzQ1IC8qIFNWR1VuaXRUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjQxNUYwQUI3
NTkwNDAwNEQ5QzQ1IC8qIFNWR1VuaXRUeXBlcy5oICovOyB9OworCQlCMkVCREM5QzBBRjc3RTM0
MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CisJCUIyRUJEQzlEMEFGNzdFMzQwMEFFNEE2OCAv
KiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oICovOyB9OwogCQlCMkZBM0QzNjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRl
Q29sb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyRkEzQzRFMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVDb2xvckVsZW1l
bnQuY3BwICovOyB9OwogCQlCMkZBM0QzNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRl
Q29sb3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkZBM0M0RjBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50
LmggKi87IH07CiAJCUIyRkEzRDM4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5n
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJG
QTNDNTAwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWRBbmdsZS5jcHAgKi87IH07CkBA
IC00NTQwLDggKzQ1NDAsNiBAQAogCQlBODBFN0U5NDBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1M
VGV4dEFyZWFFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODBFN0U5NTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MQnV0dG9uRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MQnV0dG9uRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFN0U5NjBBMUE4M0UzMDA3RkI4QzUgLyogSlNI
VE1MQnV0dG9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNIVE1MQnV0dG9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUE4MTBFMzkzMDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1RyZWVEZWJ1
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKLQkJQTgxMEUzOTQwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2Fu
dmFzVHJlZURlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRl
eEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxJc0luZGV4
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODEzNjlBRjA5NzM3NEY1
MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MSXNJbmRleEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTElucHV0RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI1OSw2ICs1MjU3LDggQEAKIAkJQjJF
OTU0OEMwQUI1RkJBMzAwNzZERTM3IC8qIFNWR1BhdGhTZWdNb3ZldG9BYnMuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJFOTU0OEQwQUI1RkJBMzAwNzZERTM3IC8qIFNWR1BhdGhTZWdNb3Zl
dG9SZWwuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdQYXRoU2VnTW92ZXRvUmVsLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFOTU0OEUwQUI1RkJBMzAwNzZERTM3
IC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjJFQkRDOUEwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjgg
LyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkZBM0M0RTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FuaW1hdGVDb2xvckVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkZBM0M0RjBBQjc1QTZF
MDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJGQTNDNTAwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0
ZWRBbmdsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdB
bmltYXRlZEFuZ2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOTAsOCAr
ODE5MCw2IEBACiAJCQkJQThDMEZCNTMwODk3MDFGNzAwQkE1MTE0IC8qIGRldmljZSAqLywKIAkJ
CQlBODQxNUY5OTBBQzEwQzVEMDBGN0QwREYgLyogS0NhbnZhc0ZpbHRlcnMuY3BwICovLAogCQkJ
CUE4QzBGQjdGMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5oICovLAotCQkJCUE4
MTBFMzk0MDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCAqLywKLQkJCQlB
ODEwRTM5MzA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5oICovLAogCQkJKTsK
IAkJCXBhdGggPSBrY2FudmFzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg5MzAs
NiArODkyOCw4IEBACiAJCQkJQkNFQTQ4NEYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHRG
cmFnbWVudC5oICovLAogCQkJCUJDRUE0ODRBMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVt
ZS5jcHAgKi8sCiAJCQkJQkNFQTQ4NEIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmgg
Ki8sCisJCQkJQjJFQkRDOUEwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQu
Y3BwICovLAorCQkJCUIyRUJEQzlCMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNU
ZXh0LmggKi8sCiAJCQkJQkNFQTQ4NDkwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
Lm1tICovLAogCQkJCUJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZU1hYy5o
ICovLAogCQkJCTkzOTU1QTQyMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVlQXNUZXh0LmNw
cCAqLywKQEAgLTkxNzQsNyArOTE3NCw2IEBACiAJCQkJQTg4QUQzQjMwOTUyNDg2RTAwMUREMTk2
IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4
QUQzQjUwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OEFEM0JFMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTg4QUQzQ0IwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNUcmVlRGVidWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDAyMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5k
ZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQ0MDQwOTUyNDhGMDAwMUREMTk2IC8q
IFNWR1JlbmRlclN0eWxlRGVmcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQ0MEIwOTUyNDhG
MDAwMUREMTk2IC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDUwNiw2ICsx
MDUwNSw3IEBACiAJCQkJQjJBMDE1QjYwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTAxNUI4MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdS
ZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QkEwQUY2Q0Q1MzAwNkJD
RTBFIC8qIFNWR1Jlc291cmNlTWFza2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkVCREM5RDBB
Rjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xMDcwNCw3ICsxMDcwNCw2IEBACiAJCQkJQTg4QUQzQjIwOTUyNDg2RTAwMUREMTk2IC8qIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTg4QUQzQjQwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpT
dXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg4QUQzQ0MwOTUyNDg2RTAwMUREMTk2IC8q
IEtDYW52YXNUcmVlRGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQ0MDEwOTUyNDhG
MDAwMUREMTk2IC8qIFNWR1JlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFE
NDAzMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTg4QUQ0MEEwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1pvb21FdmVudC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTExNzQ4LDYgKzExNzQ3LDcgQEAKIAkJCQlCMkEwMTVCNDBBRjZDRDUz
MDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
QTAxNUI3MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZU1hcmtlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkEwMTVCOTBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjJFQkRDOUMwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1Jl
bmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
REVTSUdOCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9ERVNJR04JKHJldmlzaW9uIDE3
NDgwKQorKysgV2ViQ29yZS9rY2FudmFzL0RFU0lHTgkod29ya2luZyBjb3B5KQpAQCAtMSwxNzIg
KzAsMCBAQAotS0NhbnZhcyBEZXNpZ24gRG9jdW1lbnQgMC4xCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLUxhc3QgdXBkYXRlOiAyNS4wNy4yMDA0Ci0KLTEuIFdoYXQgaXMgKHRoZSBoaXN0
b3J5IG9mKSBLQ2FudmFzPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LUtDYW52YXMgaXMgdGhlIHJlc3VsdCBvZiBmb3VyLXllYXIga3N2ZyBkZXZlbG9wbWVudC4KLVdl
IGhhZCB0byBjcmVhdGUgb3VyICJvd24iIGNhbnZhcyBmb3Iga3N2Zywgc29tZSB5ZWFycwotYWdv
IGFzIGFueSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBoYXNuJ3QgYmVlbiBhYmxlCi10byBmdWxm
aWwgb3VyIG5lZWRzLCB3aGljaCBpcyBtb3N0bHk6IGZsZXhpYmlsaXR5LgotCi1RQ2FudmFzIGlz
IChvZiBjb3Vyc2UpIHRpZWQgdG8gUXQsIHdoaWNoIGlzIGdvb2QuCi1CdXQgaXQgd2lwZXMgYXdh
eSBpZS4gdGhlIGZ1bmN0aW9uYWxpdHkgdG8gcGFpbnQKLXdpdGgvdG8gc29tZXRoaW5nIGVsc2Ug
dGhhbiBhIFFQYWludGVyLgotCi1UaGUgaW1tZWRpYXRlIHJlc3VsdCBvZiBvdXIgYnJhaW5zdG9y
bWluZywgd2hhdAotd2UgbmVlZGVkLCB3YXM6IEtTVkdDYW52YXMuIEtTVkdDYW52YXMgd2FzIGJh
c2ljYWxseQotYSAicG9ydCIgb2YgUUNhbnZhcyBjb2RlIHRvIGtzdmcgd2l0aCBoZWF2eSBtb2Rp
ZmljYXRpb25zLgotV2UgZXhjbHVzaXZlbHkgdXNlZCBsaWJhcnQgYXQgdGhlIGJlZ2lubmluZyBv
ZiBLU1ZHQ2FudmFzCi1oYWNraW5nLiBMYXRlciB3ZSBtYWRlIGl0IHBvc3NpYmxlIHRvIHVzZSBk
aWZmZXJlbnQKLXJlbmRlcmluZyBkZXZpY2VzIChpbXBsZW1lbnRlZCBpbiBrc3ZnOiBsaWJhcnQg
JiBhZ2cpLgotCi1UaGF0IHdhcyB0aGUgZmlyc3Qgc3RlcCB0byBtb3JlIGZsZXhpYmlsaXR5LiBC
dXQgaXQKLWhhc24ndCBiZWVuIGVub3VnaCB0byBtYWtlIGEgZ2VuZXJpYyBrZGUgY2FudmFzIG91
dCBvZiBpdC4KLQotS0NhbnZhcyBjdXJyZW50bHkgdXNlcyBhIHZlcnkgc29waGlzdGljYXRlZCBh
cHByb2FjaCwKLXdoaWNoIHdpbGwgYmUgZXhwbGFpbmVkIGluIGRldGFpbCBub3cuLi4uCi0KLTIu
IFRoZSBtYWluIGlkZWEgb2YgdGhlIGNhbnZhcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUZpcnN0IG9mIGFsbCwgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gIlJl
bmRlcmluZyBEZXZpY2VzIiBhbmQgIlJlbmRlcmluZyBUYXJnZXRzIi4KLQotRGVmaW5pdGlvbjoK
LQlBICJkZXZpY2UiIGlzIHVzZWQgdG8gcGFpbnQgb250byBhICJ0YXJnZXQiLiAgIkRldmljZXMi
IGFyZQotCWR5bmFtaWNhbGx5IGxvYWRhYmxlLCB3aGVyZWFzICJ0YXJnZXRzIiBoYXZlIHRvIGJl
IGxpbmtlZCBhZ2FpbnN0LgotCi1UYXJnZXRzOgotCVF0IChRV2lkZ2V0KSwgT3BlbkdMLCBTREwu
Li4gYXJlIGdvb2QgZXhhbXBsZXMgZm9yIGNvbW1vbiAiUmVuZGVyaW5nIFRhcmdldHMiLgotCUFz
IHN0YXRlZCBhYm92ZSwgeW91IGNhbm5vdCBkeW5hbWljYWxseSBzd2l0Y2ggdGhlIHJlbmRlcmlu
ZyB0YXJnZXRzLgotCi0JPGNvZGUtc25pcHBldD4KLQkJS0NhbnZhc1RhcmdldFF0ICp0YXJnZXRR
dCA9IG5ldyBLQ2FudmFzVGFyZ2V0UXQocHJlZldpZHRoLCBwcmVmSGVpZ2h0KTsKLQk8L2NvZGUt
c25pcHBldD4KLQotCVlvdSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyB0YXJnZXQgb2JqZWN0IG1hbnVh
bGx5IGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHlvdSdkIGxpa2UKLQl0byBwYWludCBvbi4gQ3Vy
cmVudGx5IHdlIG9ubHkgaGF2ZSBhICdRdCcgcmVuZGVyaW5nIHRhcmdldC4KLQotRGV2aWNlczoK
LQlMaWJhcnQsIGFnZzIsIFFQYWludGVyIGV0Yy4uIGFyZSBnb29kIGV4YW1wbGVzIGZvciBjb21t
b24gIlJlbmRlcmluZyBEZXZpY2VzIi4KLQotCTxjb2RlLXNuaXBwZXQ+Ci0JCUtSZW5kZXJpbmdE
ZXZpY2UgKmRldmljZSA9IEtSZW5kZXJpbmdEZXZpY2VGYWN0b3J5OjpzZWxmKCktPnJlcXVlc3Qo
ImFnZyIsIHRhcmdldFF0KTsKLQkJaWYoIWRldmljZSkKLQkJCXJldHVybiBmYWxzZTsKLQk8L2Nv
ZGUtc25pcHBldD4KLQotCVlvdSBjYW4gZWFzaWx5IGxvYWQgYXZhaWxhYmxlIHJlbmRlcmluZyBk
ZXZpY2VzIGJ5ICdTdHJpbmcnLgotCUFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gcGFzcyB0aGUg
cmVuZGVyaW5nIHRhcmdldCBwb2ludGVyCi0JYXMgdGhlICdyZXF1ZXN0JyBmdW5jdGlvbiBjaGVj
a3Mgd2hldGVyIHlvdXIgcmVuZGVyaW5nIGRldmljZQotCW5lZWRzIGEgJ2J1ZmZlcmVkJyByZW5k
ZXJpbmcgdGFyZ2V0IG9yIGEgJ3VuYnVmZmVyZWQnIHJlbmRlcmluZwotCXRhcmdldC4gRm9yIGV4
YW1wbGU6IHRhcmdldFF0IC0+IGJ1ZmZlcmVkIHJlbmRlcmluZyB0YXJnZXQKLQkJCQkJCSBhZ2cg
LT4gYnVmZmVyZWQgcmVuZGVyaW5nIGRldmljZQotCi0gICAgQW4gT3BlbkdMIHRhcmdldCBpcyBh
IGdvb2QgZXhhbXBsZSBvZiBhbiAndW5idWZmZXJlZCcgdGFyZ2V0LAotCWJlY2F1c2UgdGhlcmUg
d291bGQgYmUgbm8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGFkdmFudGFnZSBpZiB3ZSdkCi0JdXNl
IGEgc29mdHdhcmUgcmVuZGVyZXIgbGlrZSBhZ2cyIHRvIGNyZWF0ZSBhIHJlbmRlcmluZyBidWZm
ZXIKLQlhbmQgdGhlbiBibGl0IGl0IG9udG8gdGhlIHNjcmVlbi4gVGhhdCdzIHdoeSBzdWNoIGEg
c2VwZXJhdGlvbiBpcyBuZWVkZWQuCi0KLU9rLCBhcyB5b3Uga25vdyB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIHRhcmdldHMgJiBkZXZpY2VzIG5vdywKLXdlIGNhbiBzdGFydCBleHBlcmltZW50aW5n
IHdpdGggdGhlIG1haW4gJ0tDYW52YXMnIGNsYXNzLi4uLi4KLQotMy4gSG93IHRvIHVzZSB0aGUg
J0tDYW52YXMnIGNsYXNzPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi08
Y29kZS1zbmlwcGV0PgotCUtDYW52YXMoS0NhbnZhc1RhcmdldCAqdGFyZ2V0LCBLUmVuZGVyaW5n
RGV2aWNlICpkZXZpY2UpCi08L2NvZGUtc25pcHBldD4KLQotVGhlIChvbmx5IGF2YWlsYWJsZSkg
S0NhbnZhcyBjb25zdHJ1Y3RvciwgdGFrZXMgYSBLQ2FudmFzVGFyZ2V0Ci1wb2ludGVyIGFuZCBh
IEtSZW5kZXJpbmdEZXZpY2UgcG9pbnRlciwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZAotdXNpbmcg
dGhlIHRlY2huaXF1ZXMgZnJvbSB0aGUgYXJ0aWNsZSBhYm92ZS4KLQotPGNvZGUtc25pcHBldD4K
LQkvLyBGaXJzdCBhdHRhY2ggdG8gY2FudmFzLi4uCi0JS0NhbnZhcyAqbXlDYW52YXMgPSBuZXcg
S0NhbnZhcyh0YXJnZXQsIGRldmljZSk7Ci0KLSAgICAvLyAuLi4gdGhlbiBpbml0aWFsaXplIHRo
ZSB0YXJnZXQgJiBkZXZpY2UhCi0JdGFyZ2V0LT5pbml0KHRoaXMpOwotCWRldmljZS0+aW5pdCh0
YXJnZXQpOwotPC9jb2RlLXNuaXBwZXQ+Ci0KLVRoZSBzZWNvbmQgaW1wb3J0YW50IHN0ZXAgaXMg
dG8gaW5pdGlhbGl6ZSB0aGUgcmVuZGVyaW5nIHRhcmdldC4KLVdoZW4gdXNpbmcgdGhlICdLQ2Fu
dmFzVGFyZ2V0UXQnIGl0IHRha2VzIGEgJ1FQYWludERldmljZScKLXBvaW50ZXIgYXMgYXJndW1l
bnQsIHdoaWNoIGlkZW50aWZpZXMgdGhlIHdpbmRvdyB0byBwYWludCBvbi4KLShMb29rIGludG8g
dGVzdC9jYW52YXN0ZXN0LmNjICYgdGVzdC9DYW52YXNXaWRnZXQuY2MuLi4pCi0KLVRoYXQga25v
d2xlZGdlIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGdldCBhbiAiZW1wdHkiIGNhbnZhcwotb250
byBzY3JlZW4uIE5leHQgdGhpbmcgdG8ga25vdzogSG93IHRvIHVzZSBjYW52YXMgaXRlbXM/Ci0K
LTQuIEFkZGluZyBpdGVtcyBvbnRvIHlvdXIgY2FudmFzIFtUT0RPXQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS0gY29uY2VwdCBvZiBwYWludHNlcnZlcnMKLQotUGFpbnQgc2Vy
dmVycyBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIHdheSBvZiBmaWxsaW5nIHVwIGEgYXJiaXRyYXJ5
Ci1zY3JlZW4gcmVnaW9uIHVzaW5nIHBhaW50LiBUaGUgc2ltcGxlc3QgYW5kIG1vc3QgY29tbW9u
bHkgdXNlZCBpcyB0aGUKLXNvbGlkIHBhaW50IHNlcnZlciwgd2hpY2ggc2ltcGx5IHBhaW50cyB0
aGUgYXJlYSB3aXRoIGEgc29saWQgcmdiIGNvbG9yLgotTW9yZSBhZHZhbmNlZCBwYWludCBzZXJ2
ZXJzIGFyZSB0aGUgZ3JhZGllbnQgcGFpbnQgc2VydmVyLCB3aGljaCBjYW4gYmUgdXNlZAotdG8g
Y3JlYXRlIHNtb290aCBjb2xvciB0cmFuc2l0aW9ucyBvciBzaGFkaW5ncy4gQ3VycmVudGx5IEtD
YW52YXMgc3VwcG9ydHMgdHdvCi1ncmFkaWVudCB0eXBlcyAobGluZWFyICsgcmFkaWFsKSwgYnV0
IG90aGVyIGdyYWRpZW50cyBhcmUgcG9zc2libGUuIEZpbmFsbHkgdGhlcmUKLWlzIHRoZSBwYXR0
ZXJuIHBhaW50IHNlcnZlciwgd2hpY2ggdGFrZXMgYSBiaXRtYXAgZ3JhcGhpYyBhbmQgdGlsZXMg
aXQgb3ZlciB0aGUgYXJlYSwKLXBvc3NpYmxlIHVzaW5nIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4
IHRvIHJvdGF0ZSBvciBza2V3IHRoZSBwYXR0ZXJuIHRpbGVzLgotCi1Ob3RlIHRoYXQgS0NhbnZh
cyBoYXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlIGZvciBwYWludCBzZXJ2ZXJzLCBzbyBuZXcgcGFp
bnQgc2VydmVycyBjYW4KLWJlIGFkZGVkIGluIGFkZGl0aW9uIHRvIHRoZSB0aHJlZSBjdXJyZW50
IG9uZXMuCi0KLVBhaW50IHNlcnZlcnMgYXMgdXNlZCBpbiBLQ2FudmFzIGFyZSBoZWF2aWx5IGlu
Zmx1ZW5jZWQgYnkgc3ZnLCBzZWUgOgotaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvcHNlcnZl
cnMuaHRtbAotCi0tIEtDYW52YXNSZXNvdXJjZQotCi1Nb3N0IHBhaW50c2VydmVycyBhcmUgS0Nh
bnZhc1Jlc291cmNlcy4gVGhpcyBjbGFzcyBtYWtlcyBzdXJlIGFueSBjaGFuZ2Ugb24KLXRoZSBw
YWludCBzZXJ2ZXIgaW52YWxpZGF0ZXMgZXZlcnkgaXRlbSB1c2luZyB0aGUgcGFpbnQgc2VydmVy
LgotRm9yIGV4YW1wbGUsIHdoZW4gYSBncmFkaWVudCByZXNvdXJjZSBjaGFuZ2VzIGEgY29sb3Ig
c3RvcCwgYWxsIGl0ZW1zIHVzaW5nCi1zYWlkIGdyYWRpZW50IHdpbGwgYmUgaW52YWxpZGF0ZWQg
YW5kIHJlZHJhd24gb24gdGhlIG5leHQgdXBkYXRlKCkuIFNpbmNlCi1ub3QgZXZlcnkgY2hhbmdl
IG9uIGEgcGFyYW1ldGVyIG9mIGEgcGFpbnRzZXJ2ZXIgc2hvdWxkIHRyaWdnZXIgYSByZWRyYXcK
LShmb3IgaW5zdGFuY2UgeW91IGRvbid0IHdhbnQgdGhpcyB3aGlsZSBpbml0aWFsaXppbmcgdGhl
IGNhbnZhcykgYW4KLWV4cGxpY2l0IGNhbGwgbmFtZWQgaW52YWxpZGF0ZSgpIGhhcyB0byBiZSBk
b25lIG9uIHRoZSBLQ2FudmFzUmVzb3VyY2UuCi0KLS0gS1JlbmRlcmluZ1N0eWxlCi0tIEtDYW52
YXNDcmVhdG9yCi0KLUN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGNhbnZhcyBpdGVtcyBjYW4gYmUg
Y3JlYXRlZCB1c2luZyB0aGUKLUtDYW52YXNDcmVhdG9yIHNpbmdsZXRvbjoKLQotLSBsaW5lcwot
LSByZWN0YW5nbGVzIChwb3NzaWJseSByb3VuZGVkKQotLSBjaXJjbGVzCi0tIGVsbGlwc2VzCi0t
IHBhdGhzCi0tIGNvbnRhaW5lcnMKLQotSXRlbXMgYXJlIGluc2VydGVkIGludG8gdGhlIGNhbnZh
cy4gTGF0ZXIgYWRkaXRpb25zIGFyZSBkcmF3biBhYm92ZSBpdGVtcwotYWRkZWQgYmVmb3JlLCBp
ZS4gdGhlIHpJbmRleCBpbmNyZWFzZXMgb24gZXZlcnkgaXRlbSBpbnNlcnRpb24uCi1IZXJlIGlz
IGEgY29kZSBzbmlwcGV0IG9mIHRoZSBjcmVhdGlvbiBvZiBhIGNhbnZhcyBpdGVtLCBpbiB0aGlz
IGNhc2UgYSByb3VuZGVkIHJlY3Q6Ci0KLTxjb2RlLXNuaXBwZXQ+Ci0JY2FudmFzLT5pbnNlcnRJ
dGVtKEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY2FudmFz
LCByZWN0U3R5bGUsIDEyMCwgMTAwLCAxNDAsIDE2MCwgNSwgMTApKTsKLTwvY29kZS1zbmlwcGV0
PgotCi1Ob3RlIHRoYXQgZm9yIG1hbmlwdWxhdGluZyBpbmRpdmlkdWFsIGNhbnZhcyBpdGVtcyBh
dCBhIGxhdGVyIHRpbWUgaXQgaXMKLWNvbnZlbmllbnQgdG8ga2VlcCBhIHBvaW50ZXIgdG8gdGhl
IGNhbnZhcyBpdGVtOgotCi08Y29kZS1zbmlwcGV0PgotICAgICAgICBLQ2FudmFzSXRlbSAqaXRl
bSA9IEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY2FudmFz
LCByZWN0U3R5bGUsIDEyMCwgMTAwLCAxNDAsIDE2MCwgNSwgMTApOwotPC9jb2RlLXNuaXBwZXQ+
Ci0KLURvIG5vdCB3b3JyeSBhYm91dCBpdCBiZWluZyBhIHBvaW50ZXIsIHRoZSBjYW52YXMga2Vl
cHMgdHJhY2sgb2YgdGhlIGl0ZW0KLWFuZCB3aWxsIGRlbGV0ZSBpdCB3aGVuIGl0IGlzIGl0c2Vs
ZiBzaHV0dGluZyBkb3duLgotTm93IHRoYXQgd2UgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGl0ZW0s
IHdlIGNhbiBkbyB0aGluZ3MgbGlrZSBsb3dlcigpL3JhaXNlKCksCi1nZXQgdGhlIGJib3goKSBv
ZiB0aGUgaXRlbSBhbmQgaGl0IGRldGVjdGlvbiB1c2luZyBmaWxsQ29udGFpbnMoKS9zdHJva2VD
b250YWlucygpLgotSGF2ZSBhIGxvb2sgYXQgS0NhbnZhc0l0ZW0uaCBmb3Igd2hhdCB5b3UgY2Fu
IGRvIHdpdGggS0NhbnZhc0l0ZW1zLgotCi01LiBXcml0aW5nIHJlbmRlcmluZyB0YXJnZXRzIFtU
T0RPXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi02LiBXcml0aW5nIHJlbmRlcmlu
ZyBkZXZpY2VzIFtUT0RPXSAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSGF2ZSBm
dW4gd2l0aCBLQ2FudmFzIQotWW91ciBLQ2FudmFzIFRlYW0gOikKSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9LQ2FudmFzRmlsdGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL0tD
YW52YXNGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL2tjYW52YXMvS0Nh
bnZhc0ZpbHRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVk
ZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0KKyNpbmNs
dWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2lu
Y2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8bWF0aC5oPgogCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1RyZWVE
ZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcu
Y3BwCShyZXZpc2lvbiAxNzQ4MCkKKysrIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVn
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqICAgICAgICAgICAoQykgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgIktDYW52
YXNUcmVlRGVidWcuaCIKLQotI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgot
I2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCi0jaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1
ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vKiogY2xhc3MgKyBpb21hbmlw
IHRvIGhlbHAgc3RyZWFtaW5nIGxpc3Qgc2VwYXJhdG9ycywgaS5lLiAiLCAiIGluIHN0cmluZyAi
YSwgYiwgYywgZCIKLSAqIENhbiBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHlvdSBkb24ndCBrbm93
IHdoaWNoIGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGZpcnN0Ci0gKiBvbmUgdG8gYmUgcHJpbnRl
ZCwgYnV0IHN0aWxsIHdhbnQgdG8gYXZvaWQgc3RyaW5ncyBsaWtlICIsIGIsIGMiLCB3b3JrcyBs
aWtlIAotICogRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OmpvaW4gZm9yIHN0cmVhbXMKLSAqLwotY2xh
c3MgVGV4dFN0cmVhbVNlcGFyYXRvcgotewotcHVibGljOgotICAgIFRleHRTdHJlYW1TZXBhcmF0
b3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykgOiBtX3NlcGFyYXRvcihzKSwgbV9uZWVkVG9T
ZXBhcmF0ZShmYWxzZSkge30KLXByaXZhdGU6Ci0gICAgZnJpZW5kIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3IgJnNlcCk7Ci0gICAgCi1w
cml2YXRlOgotICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9zZXBhcmF0b3I7Ci0gICAgYm9vbCBtX25l
ZWRUb1NlcGFyYXRlOwotfTsKLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgVGV4dFN0cmVhbVNlcGFyYXRvciAmc2VwKQotewotICAgIGlmIChzZXAubV9uZWVkVG9TZXBh
cmF0ZSkKLSAgICAgICAgdHMgPDwgc2VwLm1fc2VwYXJhdG9yOwotICAgIGVsc2UgCi0gICAgICAg
IHNlcC5tX25lZWRUb1NlcGFyYXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEludFBvaW50ICZwKQotewot
ICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwgIiwiIDw8IHAueSgpIDw8ICIpIjsKLX0K
LQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UmVjdCAm
cikKLXsKLSAgICByZXR1cm4gdHMgPDwgImF0ICgiIDw8IHIueCgpIDw8ICIsIiA8PCByLnkoKSA8
PCAiKSBzaXplICIgPDwgci53aWR0aCgpIDw8ICJ4IiA8PCByLmhlaWdodCgpOwotfQotCi1ib29s
IGhhc0ZyYWN0aW9ucyhkb3VibGUgdmFsKQotewotICAgIGRvdWJsZSBlcHNpbG9uID0gMC4wMDAx
OwotICAgIGludCBpdmFsID0gaW50KHZhbCk7Ci0gICAgZG91YmxlIGR2YWwgPSBkb3VibGUoaXZh
bCk7ICAgIAotICAgIHJldHVybiAoZmFicyh2YWwtZHZhbCkgPiBlcHNpbG9uKTsKLX0KLQotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRSZWN0ICZyKQot
ewotICAgIHRzIDw8ICJhdCAoIjsgCi0gICAgaWYgKGhhc0ZyYWN0aW9ucyhyLngoKSkpIAotICAg
ICAgICB0cyA8PCByLngoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQoci54KCkpOwot
ICAgIHRzIDw8ICIsIjsKLSAgICBpZiAoaGFzRnJhY3Rpb25zKHIueSgpKSkgCi0gICAgICAgIHRz
IDw8IHIueSgpOwotICAgIGVsc2UgCi0gICAgICAgIHRzIDw8IGludChyLnkoKSk7Ci0gICAgdHMg
PDwgIikgc2l6ZSAiOwotICAgIGlmIChoYXNGcmFjdGlvbnMoci53aWR0aCgpKSkgCi0gICAgICAg
IHRzIDw8IHIud2lkdGgoKTsgCi0gICAgZWxzZSAKLSAgICAgICAgdHMgPDwgaW50KHIud2lkdGgo
KSk7IAotICAgIHRzIDw8ICJ4IjsKLSAgICBpZiAoaGFzRnJhY3Rpb25zKHIuaGVpZ2h0KCkpKSAK
LSAgICAgICAgdHMgPDwgci5oZWlnaHQoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQo
ci5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50ICZwKQotewotICAgIHRzIDw8ICIoIjsg
ICAgCi0gICAgaWYgKGhhc0ZyYWN0aW9ucyhwLngoKSkpCi0gICAgICAgIHRzIDw8IHAueCgpOwot
ICAgIGVsc2UgCi0gICAgICAgIHRzIDw8IGludChwLngoKSk7ICAgIAotICAgIHRzIDw8ICIsIjsK
LSAgICBpZiAoaGFzRnJhY3Rpb25zKHAueSgpKSkgCi0gICAgICAgIHRzIDw8IHAueSgpOwotICAg
IGVsc2UgCi0gICAgICAgIHRzIDw8IGludChwLnkoKSk7ICAgIAotICAgIHJldHVybiB0cyA8PCAi
KSI7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZs
b2F0U2l6ZSAmcykKLXsgICAKLSAgICB0cyA8PCAid2lkdGg9IjsKLSAgICBpZiAoaGFzRnJhY3Rp
b25zKHMud2lkdGgoKSkpCi0gICAgICAgIHRzIDw8IHMud2lkdGgoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHRzIDw8IGludChzLndpZHRoKCkpOwotICAgIHRzIDw8ICIgaGVpZ2h0PSI7Ci0gICAgaWYg
KGhhc0ZyYWN0aW9ucyhzLmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHMuaGVpZ2h0KCk7Ci0g
ICAgZWxzZQotICAgICAgICB0cyA8PCBpbnQocy5oZWlnaHQoKSk7Ci0gICAgIHJldHVybiB0czsK
LX0KLQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0gJm0pCi17Ci0gICAgaWYgKG0uaXNJZGVudGl0eSgpKQotICAgICAgICB0cyA8
PCAiaWRlbnRpdHkiOwotICAgIGVsc2UgCi0gICAgewotICAgICAgICB0cyA8PCAie209KCgiIDw8
IG0ubTExKCkgPDwgIiwiIDw8IG0ubTEyKCkgPDwgIikoIiA8PCBtLm0yMSgpIDw8ICIsIiA8PCBt
Lm0yMigpIDw8ICIpKSI7Ci0gICAgICAgIHRzIDw8ICIgdD0oIiA8PCBtLmR4KCkgPDwgIiwiIDw8
IG0uZHkoKSA8PCAiKX0iOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yICZjKQotewotICAgIHJldHVy
biB0cyA8PCBjLm5hbWUoKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyAr
K2kpIHsKLSAgICAgICAgdHMgPDwgIiAgIjsKLSAgICB9Ci19Ci0KLS8vRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBLQ0Rhc2hBcnJheSAmYSkKLXsKLSAgICB0cyA8PCAi
eyI7Ci0gICAgS0NEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7Ci0gICAg
Zm9yIChLQ0Rhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQgIT0gYS5iZWdpbigpKQotICAgICAgICAgICAgdHMg
PDwgIiwgIjsKLSAgICAgICAgdHMgPDwgKml0OwotICAgIH0KLSAgICB0cyA8PCAifSI7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi0vL0ZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5
bGUuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGlu
ZUNhcCBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBCdXR0Q2FwOgot
ICAgICAgICB0cyA8PCAiQlVUVCI7IGJyZWFrOwotICAgIGNhc2UgUm91bmRDYXA6Ci0gICAgICAg
IHRzIDw8ICJST1VORCI7IGJyZWFrOwotICAgIGNhc2UgU3F1YXJlQ2FwOgotICAgICAgICB0cyA8
PCAiU1FVQVJFIjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotLy9GSVhNRTog
VGhpcyBzaG91bGQgYmUgaW4gS1JlbmRlcmluZ1N0eWxlLmNwcAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIHN0eWxlKQotewotICAgIHN3aXRj
aCAoc3R5bGUpIHsKLSAgICBjYXNlIE1pdGVySm9pbjoKLSAgICAgICAgdHMgPDwgIk1JVEVSIjsg
YnJlYWs7Ci0gICAgY2FzZSBSb3VuZEpvaW46Ci0gICAgICAgIHRzIDw8ICJST1VORCI7IGJyZWFr
OwotICAgIGNhc2UgQmV2ZWxKb2luOgotICAgICAgICB0cyA8PCAiQkVWRUwiOyBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi0jZGVmaW5lIERJRkZFUlNfRlJPTV9QQVJFTlQocGF0
aCkgKCFwYXJlbnRTdHlsZSB8fCAocGFyZW50U3R5bGUtPnBhdGggIT0gY2hpbGRTdHlsZS0+cGF0
aCkpCi0vLyBhdm9pZHMgdGVzdGluZyBwYXRoIGlmIHByZWQgaXMgZmFsc2UuIFRoaXMgaXMgdXNl
ZCB3aXRoIHRlc3RzIHRoYXQgaGF2ZSBzaWRlLWVmZmVjdHMKLS8vIGZvciB0aGUgcGFyZW50IG9i
amVjdAotI2RlZmluZSBESUZGRVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UocHJl
ZCwgcGF0aCkgKCFwYXJlbnRTdHlsZSB8fCAoKCFwYXJlbnRTdHlsZS0+cHJlZCkgfHwgKHBhcmVu
dFN0eWxlLT5wYXRoICE9IGNoaWxkU3R5bGUtPnBhdGgpKSkKLQotc3RhdGljIHZvaWQgd3JpdGVT
dHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0ICZvYmplY3QpCi17Ci0gICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LnN0eWxlKCk7Ci0gICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgCi0gICAgaWYg
KCFvYmplY3QubG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHRzIDw8ICIg
W3RyYW5zZm9ybT0iIDw8IG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpIDw8ICJdIjsKLSAgICBpZiAo
c3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkgIT0gU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFn
ZVJlbmRlcmluZygpKQotICAgICAgICB0cyA8PCAiIFtpbWFnZSByZW5kZXJpbmc9IiA8PCBzdmdT
dHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSA8PCAiXSI7Ci0gICAgaWYgKHN0eWxlLT5vcGFjaXR5KCkg
IT0gUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpCi0gICAgICAgIHRzIDw8ICIgW29wYWNp
dHk9IiA8PCBzdHlsZS0+b3BhY2l0eSgpIDw8ICJdIjsKLSAgICBpZiAob2JqZWN0LmlzUmVuZGVy
UGF0aCgpKSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclBhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJQYXRoJj4ob2JqZWN0KTsKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpzdHJva2VQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2
ZXIoc3R5bGUsICZwYXRoKTsKLSAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7Ci0gICAg
ICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIg
W3N0cm9rZT17IjsKLSAgICAgICAgICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewotICAgICAg
ICAgICAgICAgIGlmICghc3Ryb2tlUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2lkPVwiIjw8IHN0cm9rZVBhaW50
U2VydmVyLT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsgCi0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICpzdHJva2VQYWludFNlcnZlcjsKLSAgICAg
ICAgICAgIH0gCi0KLSAgICAgICAgICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gS1NWR1BhaW50ZXJG
YWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0cm9rZURhc2hP
ZmZzZXQoKSwgMC4wKTsKLSAgICAgICAgICAgIGNvbnN0IEtDRGFzaEFycmF5JiBkYXNoQXJyYXkg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShzdHlsZSk7
Ci0gICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNz
c1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRoLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKSwgMS4wKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkg
IT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHN2Z1N0
eWxlLT5zdHJva2VPcGFjaXR5KCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKHN0cm9rZVdpZHRo
ICE9IDEuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW3N0cm9rZSB3aWR0aD0iIDw8
IHN0cm9rZVdpZHRoIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c3Ryb2tlTWl0
ZXJMaW1pdCgpICE9IDQpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW21pdGVyIGxpbWl0
PSIgPDwgc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSA8PCAiXSI7Ci0gICAgICAgICAgICBp
ZiAoc3ZnU3R5bGUtPmNhcFN0eWxlKCkgIT0gMCkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8
ICJbbGluZSBjYXA9IiA8PCBzdmdTdHlsZS0+Y2FwU3R5bGUoKSA8PCAiXSI7Ci0gICAgICAgICAg
ICBpZiAoc3ZnU3R5bGUtPmpvaW5TdHlsZSgpICE9IDApCi0gICAgICAgICAgICAgICAgdHMgPDwg
cyA8PCAiW2xpbmUgam9pbj0iIDw8IHN2Z1N0eWxlLT5qb2luU3R5bGUoKSA8PCAiXSI7Ci0gICAg
ICAgICAgICBpZiAoZGFzaE9mZnNldCAhPSAwLjBmKQotICAgICAgICAgICAgICAgIHRzIDw8IHMg
PDwgIltkYXNoIG9mZnNldD0iIDw8IGRhc2hPZmZzZXQgPDwgIl0iOwotICAgICAgICAgICAgaWYg
KCFkYXNoQXJyYXkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltkYXNo
IGFycmF5PSIgPDwgZGFzaEFycmF5IDw8ICJdIjsgICAgICAgIAotICAgICAgICAgICAgdHMgPDwg
In1dIjsKLSAgICAgICAgfQotICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWlu
dFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlLCAmcGF0
aCk7Ci0gICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgICAgIFRleHRTdHJl
YW1TZXBhcmF0b3IgcygiICIpOwotICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsKLSAgICAg
ICAgICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGxQ
YWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICB0cyA8PCBzIDw8ICJbaWQ9XCIiIDw8IGZpbGxQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkg
PDwgIlwiXSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0cyA8
PCBzIDw8ICpmaWxsUGFpbnRTZXJ2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSAhPSAxLjBmKQot
ICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltvcGFjaXR5PSIgPDwgc3R5bGUtPnN2Z1N0eWxl
KCktPmZpbGxPcGFjaXR5KCkgPDwgIl0iOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zdmdTdHls
ZSgpLT5maWxsUnVsZSgpICE9IFJVTEVfTk9OWkVSTykKLSAgICAgICAgICAgICAgICB0cyA8PCBz
IDw8ICJbZmlsbCBydWxlPSIgPDwgc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPDwgIl0i
OwotICAgICAgICAgICAgdHMgPDwgIn1dIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXN2
Z1N0eWxlLT5jbGlwUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMgPDwgIiBbY2xpcCBwYXRo
PVwiIiA8PCBzdmdTdHlsZS0+Y2xpcFBhdGgoKSA8PCAiXCJdIjsKLSAgICBpZiAoIXN2Z1N0eWxl
LT5zdGFydE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMgPDwgIiBbc3RhcnQgbWFya2Vy
PSIgPDwgc3ZnU3R5bGUtPnN0YXJ0TWFya2VyKCkgPDwgIl0iOwotICAgIGlmICghc3ZnU3R5bGUt
Pm1pZE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMgPDwgIiBbbWlkZGxlIG1hcmtlcj0i
IDw8IHN2Z1N0eWxlLT5taWRNYXJrZXIoKSA8PCAiXSI7Ci0gICAgaWYgKCFzdmdTdHlsZS0+ZW5k
TWFya2VyKCkuaXNFbXB0eSgpKQotICAgICAgICB0cyA8PCAiIFtlbmQgbWFya2VyPSIgPDwgc3Zn
U3R5bGUtPmVuZE1hcmtlcigpIDw8ICJdIjsKLSAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXIoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHRzIDw8ICIgW2ZpbHRlcj0iIDw8IHN2Z1N0eWxlLT5maWx0ZXIo
KSA8PCAiXSI7Ci19Ci0jdW5kZWYgRElGRkVSU19GUk9NX1BBUkVOVAotI3VuZGVmIERJRkZFUlNf
RlJPTV9QQVJFTlRfQVZPSURfVEVTVF9JRl9GQUxTRQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyUGF0aCAmbykKLXsKLSAgICB0cyA8
PCAiICIgPDwgby5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoby5yZWxhdGl2ZUJCb3goKSk7
Ci0gICAgCi0gICAgd3JpdGVTdHlsZSh0cywgbyk7Ci0gICAgCi0gICAgdHMgPDwgIiBbZGF0YT1c
IiIgPDwgby5wYXRoKCkuZGVidWdTdHJpbmcoKSA8PCAiXCJdIjsKLSAgICAKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJTVkdDb250YWluZXIgJm8pCi17Ci0gICAgdHMgPDwgIiAiIDw8IG8uYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG8ucmVsYXRpdmVCQm94KCkpOwotICAgIAotICAgIHdyaXRl
U3R5bGUodHMsIG8pOwotICAgIAotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIERlcHJlY2F0
ZWRTdHJpbmcgZ2V0VGFnTmFtZSh2b2lkICpub2RlKQotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmVsZW0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgaWYgKGVs
ZW0pCi0gICAgICAgIHJldHVybiBTdHJpbmcoZWxlbS0+bm9kZU5hbWUoKSkuZGVwcmVjYXRlZFN0
cmluZygpOwotICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7Ci19Ci0KLXZvaWQgd3JpdGUo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciAmY29udGFpbmVyLCBpbnQg
aW5kZW50KQotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8IGNvbnRh
aW5lci5yZW5kZXJOYW1lKCk7Ci0gICAgCi0gICAgaWYgKGNvbnRhaW5lci5lbGVtZW50KCkpIHsK
LSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShjb250YWluZXIu
ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgeyIgPDwgdGFnTmFtZSA8PCAifSI7Ci0gICAgfQotICAgIAotICAgIHRzIDw8IGNv
bnRhaW5lciA8PCBlbmRsOwotICAgIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGNv
bnRhaW5lci5maXJzdENoaWxkKCk7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCi0gICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCArIDEpOwotfQotCi12
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJQYXRoICZwYXRoLCBpbnQgaW5k
ZW50KQotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8IHBhdGgucmVu
ZGVyTmFtZSgpOwotICAgIAotICAgIGlmIChwYXRoLmVsZW1lbnQoKSkgewotICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHRhZ05hbWUgPSBnZXRUYWdOYW1lKHBhdGguZWxlbWVudCgpKTsKLSAgICAg
ICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgeyIgPDwgdGFn
TmFtZSA8PCAifSI7Ci0gICAgfQotICAgIAotICAgIHRzIDw8IHBhdGggPDwgZW5kbDsKLX0KLQot
dm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgTm9kZSAqcGFyZW50KQot
ewotICAgIEFTU0VSVChwYXJlbnQpOwotICAgIE5vZGUgKm5vZGUgPSBwYXJlbnQ7Ci0gICAgZG8g
ewotICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFNWR0VsZW1lbnQgKnN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obm9kZSk7Ci0gICAgICAgIGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnQgKnN0eWxlZCA9IHN0
YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICAgICAgUmVmUHRy
PFNWR1Jlc291cmNlPiByZXNvdXJjZShzdHlsZWQtPmNhbnZhc1Jlc291cmNlKCkpOwotICAgICAg
ICBpZiAoIXJlc291cmNlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIGVsZW1lbnRJZCA9IHN2Z0VsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmlkQXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICBpZiAocmVzb3Vy
Y2UtPmlzUGFpbnRTZXJ2ZXIoKSkgewotICAgICAgICAgICAgUmVmUHRyPEtSZW5kZXJpbmdQYWlu
dFNlcnZlcj4gcGFpbnRTZXJ2ZXIgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8S1JlbmRlcmlu
Z1BhaW50U2VydmVyPihyZXNvdXJjZSk7Ci0gICAgICAgICAgICB0cyA8PCAiS1JlbmRlcmluZ1Bh
aW50U2VydmVyIHtpZD1cIiIgPDwgZWxlbWVudElkIDw8ICJcIiAiIDw8ICpwYWludFNlcnZlciA8
PCAifSIgPDwgZW5kbDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0cyA8PCAiS0NhbnZh
c1Jlc291cmNlIHtpZD1cIiIgPDwgZWxlbWVudElkIDw8ICJcIiAiIDw8ICpyZXNvdXJjZSA8PCAi
fSIgPDwgZW5kbDsKLSAgICB9IHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
cGFyZW50KSkpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29y
ZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52
YXMvS0NhbnZhc1RyZWVEZWJ1Zy5oCShyZXZpc2lvbiAxNzQ4MCkKKysrIFdlYkNvcmUva2NhbnZh
cy9LQ2FudmFzVHJlZURlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci0gICAg
Y2xhc3MgQ29sb3I7Ci0gICAgY2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7
Ci0gICAgY2xhc3MgRmxvYXRTaXplOwotICAgIGNsYXNzIEludFBvaW50OwotICAgIGNsYXNzIElu
dFJlY3Q7Ci0gICAgY2xhc3MgS0NDbGlwRGF0YTsKLSAgICBjbGFzcyBLQ1BhdGhEYXRhOwotICAg
IGNsYXNzIE5vZGU7Ci0gICAgY2xhc3MgUmVuZGVyUGF0aDsKLSAgICBjbGFzcyBSZW5kZXJTVkdD
b250YWluZXI7Ci0KLS8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1Rl
eHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVy
JiwgaW50IGluZGVudCA9IDApOwotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVy
UGF0aCYsIGludCBpbmRlbnQgPSAwKTsKLXZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0
cmVhbSYsIE5vZGUqIHBhcmVudCk7Ci0KLS8vIGhlbHBlciBvcGVyYXRvcnMgZGVmaW5lZCB1c2Vk
IGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZS4gCi1UZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLVRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFJlY3QmKTsKLVRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7Ci1UZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwotVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRTaXplJik7Ci1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFJlY3QmKTsKLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotLy8gaGVscGVyIG9wZXJh
dG9ycyBzcGVjaWZpYyB0byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQg
aW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCi0vLyB0aGVzZSBjb3Vs
ZCBiZSBkZWZpbmVkIGluIHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVz
ZSBnZW5lcmljIHNpZ25hdHVyZXMgdW5pbnRlbnRpb25hbGx5LgotICAgIAotdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlbT4KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbSo+JiBsKQotewotICAgIHRzIDw8ICJbIjsKLSAgICB0
eXBlbmFtZSBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0qPjo6Q29uc3RJdGVyYXRvciBpdCA9IGwu
YmVnaW4oKTsKLSAgICB0eXBlbmFtZSBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0qPjo6Q29uc3RJ
dGVyYXRvciBpdF9lID0gbC5lbmQoKTsKLSAgICB3aGlsZSAoaXQgIT0gaXRfZSkgewotICAgICAg
ICB0cyA8PCAqKCppdCk7Ci0gICAgICAgICsraXQ7Ci0gICAgICAgIGlmIChpdCAhPSBpdF9lKSB0
cyA8PCAiLCAiOwotICAgIH0KLSAgICB0cyA8PCAiXSI7Ci0gICAgCi0gICAgcmV0dXJuIHRzOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtPiYgbCkKLXsKLSAgICB0
cyA8PCAiWyI7Ci0gICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtPjo6Q29uc3RJ
dGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKLSAgICB0eXBlbmFtZSBEZXByZWNhdGVkVmFsdWVMaXN0
PEl0ZW0+OjpDb25zdEl0ZXJhdG9yIGl0X2UgPSBsLmVuZCgpOwotICAgIHdoaWxlIChpdCAhPSBp
dF9lKSB7Ci0gICAgICAgIHRzIDw8ICppdDsKLSAgICAgICAgKytpdDsKLSAgICAgICAgaWYgKGl0
ICE9IGl0X2UpIHRzIDw8ICIsICI7Ci0gICAgfQotICAgIHRzIDw8ICJdIjsKLSAgICAKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9k
ZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwCShyZXZpc2lvbiAxNzQ4MCkK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgi
Ci0jaW5jbHVkZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuLmNwcAkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMywxMSArMjMsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZmRlZiBTVkdfU1VQUE9S
VAogI2luY2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLSNpbmNsdWRlICJLQ2FudmFz
VHJlZURlYnVnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5jcHAJKHJl
dmlzaW9uIDE3NDgwKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMiBAQAogKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgorCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVn
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiAxNzQ4
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAorI2luY2x1ZGUgIlNWR1JlbmRlclRy
ZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzVHJlZURlYnVnLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE3NDgwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDgg
KzQwLDggQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZmRlZiBTVkdfU1VQUE9SVAot
I2luY2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqICAgICAg
ICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdS
ZW5kZXJUcmVlQXNUZXh0LmgiCisKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgor
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4u
aCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgorI2luY2x1ZGUgIktD
YW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNp
bmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoqIGNsYXNzICsgaW9t
YW5pcCB0byBoZWxwIHN0cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwgIiBpbiBzdHJp
bmcgImEsIGIsIGMsIGQiCisgKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qg
a25vdyB3aGljaCBpdGVtIGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAorICogb25lIHRvIGJlIHBy
aW50ZWQsIGJ1dCBzdGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIiwgd29y
a3MgbGlrZSAKKyAqIERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpqb2luIGZvciBzdHJlYW1zCisgKi8K
K2NsYXNzIFRleHRTdHJlYW1TZXBhcmF0b3IKK3sKK3B1YmxpYzoKKyAgICBUZXh0U3RyZWFtU2Vw
YXJhdG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpIDogbV9zZXBhcmF0b3IocyksIG1fbmVl
ZFRvU2VwYXJhdGUoZmFsc2UpIHt9Citwcml2YXRlOgorICAgIGZyaWVuZCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJhdG9yICZzZXApOworICAg
IAorcHJpdmF0ZToKKyAgICBEZXByZWNhdGVkU3RyaW5nIG1fc2VwYXJhdG9yOworICAgIGJvb2wg
bV9uZWVkVG9TZXBhcmF0ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3IgJnNlcCkKK3sKKyAgICBpZiAoc2VwLm1fbmVlZFRv
U2VwYXJhdGUpCisgICAgICAgIHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsKKyAgICBlbHNlIAorICAg
ICAgICBzZXAubV9uZWVkVG9TZXBhcmF0ZSA9IHRydWU7CisgICAgcmV0dXJuIHRzOworfQorCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRQb2ludCAmcCkK
K3sKKyAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7
Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEludFJl
Y3QgJnIpCit7CisgICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngoKSA8PCAiLCIgPDwgci55
KCkgPDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5oZWlnaHQoKTsKK30KKwor
Ym9vbCBoYXNGcmFjdGlvbnMoZG91YmxlIHZhbCkKK3sKKyAgICBkb3VibGUgZXBzaWxvbiA9IDAu
MDAwMTsKKyAgICBpbnQgaXZhbCA9IGludCh2YWwpOworICAgIGRvdWJsZSBkdmFsID0gZG91Ymxl
KGl2YWwpOyAgICAKKyAgICByZXR1cm4gKGZhYnModmFsLWR2YWwpID4gZXBzaWxvbik7Cit9CisK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UmVjdCAm
cikKK3sKKyAgICB0cyA8PCAiYXQgKCI7IAorICAgIGlmIChoYXNGcmFjdGlvbnMoci54KCkpKSAK
KyAgICAgICAgdHMgPDwgci54KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIueCgp
KTsKKyAgICB0cyA8PCAiLCI7CisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLnkoKSkpIAorICAgICAg
ICB0cyA8PCByLnkoKTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci55KCkpOworICAg
IHRzIDw8ICIpIHNpemUgIjsKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHIud2lkdGgoKSkpIAorICAg
ICAgICB0cyA8PCByLndpZHRoKCk7IAorICAgIGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLndp
ZHRoKCkpOyAKKyAgICB0cyA8PCAieCI7CisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLmhlaWdodCgp
KSkgCisgICAgICAgIHRzIDw8IHIuaGVpZ2h0KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwg
aW50KHIuaGVpZ2h0KCkpOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCAmcCkKK3sKKyAgICB0cyA8PCAi
KCI7ICAgIAorICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQorICAgICAgICB0cyA8PCBwLngo
KTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQocC54KCkpOyAgICAKKyAgICB0cyA8PCAi
LCI7CisgICAgaWYgKGhhc0ZyYWN0aW9ucyhwLnkoKSkpIAorICAgICAgICB0cyA8PCBwLnkoKTsK
KyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQocC55KCkpOyAgICAKKyAgICByZXR1cm4gdHMg
PDwgIikiOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGbG9hdFNpemUgJnMpCit7ICAgCisgICAgdHMgPDwgIndpZHRoPSI7CisgICAgaWYgKGhhc0Zy
YWN0aW9ucyhzLndpZHRoKCkpKQorICAgICAgICB0cyA8PCBzLndpZHRoKCk7CisgICAgZWxzZQor
ICAgICAgICB0cyA8PCBpbnQocy53aWR0aCgpKTsKKyAgICB0cyA8PCAiIGhlaWdodD0iOworICAg
IGlmIChoYXNGcmFjdGlvbnMocy5oZWlnaHQoKSkpIAorICAgICAgICB0cyA8PCBzLmhlaWdodCgp
OworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgaW50KHMuaGVpZ2h0KCkpOworICAgICByZXR1cm4g
dHM7Cit9CisKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtICZtKQoreworICAgIGlmIChtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAg
dHMgPDwgImlkZW50aXR5IjsKKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgdHMgPDwgInttPSgo
IiA8PCBtLm0xMSgpIDw8ICIsIiA8PCBtLm0xMigpIDw8ICIpKCIgPDwgbS5tMjEoKSA8PCAiLCIg
PDwgbS5tMjIoKSA8PCAiKSkiOworICAgICAgICB0cyA8PCAiIHQ9KCIgPDwgbS5keCgpIDw8ICIs
IiA8PCBtLmR5KCkgPDwgIil9IjsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciAmYykKK3sKKyAgICBy
ZXR1cm4gdHMgPDwgYy5uYW1lKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVu
dDsgKytpKSB7CisgICAgICAgIHRzIDw8ICIgICI7CisgICAgfQorfQorCisvL0ZJWE1FOiBUaGlz
IHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgS0NEYXNoQXJyYXkgJmEpCit7CisgICAgdHMg
PDwgInsiOworICAgIEtDRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwor
ICAgIGZvciAoS0NEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4oKSkKKyAgICAgICAgICAg
IHRzIDw8ICIsICI7CisgICAgICAgIHRzIDw8ICppdDsKKyAgICB9CisgICAgdHMgPDwgIn0iOwor
ICAgIHJldHVybiB0czsKK30KKworLy9GSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gS1JlbmRlcmlu
Z1N0eWxlLmNwcAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IExpbmVDYXAgc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgQnV0dENh
cDoKKyAgICAgICAgdHMgPDwgIkJVVFQiOyBicmVhazsKKyAgICBjYXNlIFJvdW5kQ2FwOgorICAg
ICAgICB0cyA8PCAiUk9VTkQiOyBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAg
dHMgPDwgIlNRVUFSRSI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKKy8vRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBzdHlsZSkKK3sKKyAgICBz
d2l0Y2ggKHN0eWxlKSB7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgIHRzIDw8ICJNSVRF
UiI7IGJyZWFrOworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICB0cyA8PCAiUk9VTkQiOyBi
cmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgdHMgPDwgIkJFVkVMIjsgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworI2RlZmluZSBESUZGRVJTX0ZST01fUEFSRU5U
KHBhdGgpICghcGFyZW50U3R5bGUgfHwgKHBhcmVudFN0eWxlLT5wYXRoICE9IGNoaWxkU3R5bGUt
PnBhdGgpKQorLy8gYXZvaWRzIHRlc3RpbmcgcGF0aCBpZiBwcmVkIGlzIGZhbHNlLiBUaGlzIGlz
IHVzZWQgd2l0aCB0ZXN0cyB0aGF0IGhhdmUgc2lkZS1lZmZlY3RzCisvLyBmb3IgdGhlIHBhcmVu
dCBvYmplY3QKKyNkZWZpbmUgRElGRkVSU19GUk9NX1BBUkVOVF9BVk9JRF9URVNUX0lGX0ZBTFNF
KHByZWQsIHBhdGgpICghcGFyZW50U3R5bGUgfHwgKCghcGFyZW50U3R5bGUtPnByZWQpIHx8IChw
YXJlbnRTdHlsZS0+cGF0aCAhPSBjaGlsZFN0eWxlLT5wYXRoKSkpCisKK3N0YXRpYyB2b2lkIHdy
aXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCAmb2JqZWN0KQorewor
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC5zdHlsZSgpOworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIAorICAg
IGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQorICAgICAgICB0cyA8
PCAiIFt0cmFuc2Zvcm09IiA8PCBvYmplY3QubG9jYWxUcmFuc2Zvcm0oKSA8PCAiXSI7CisgICAg
aWYgKHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpICE9IFNWR1JlbmRlclN0eWxlOjppbml0aWFs
SW1hZ2VSZW5kZXJpbmcoKSkKKyAgICAgICAgdHMgPDwgIiBbaW1hZ2UgcmVuZGVyaW5nPSIgPDwg
c3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkgPDwgIl0iOworICAgIGlmIChzdHlsZS0+b3BhY2l0
eSgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKQorICAgICAgICB0cyA8PCAiIFtv
cGFjaXR5PSIgPDwgc3R5bGUtPm9wYWNpdHkoKSA8PCAiXSI7CisgICAgaWYgKG9iamVjdC5pc1Jl
bmRlclBhdGgoKSkgeworICAgICAgICBjb25zdCBSZW5kZXJQYXRoJiBwYXRoID0gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyUGF0aCY+KG9iamVjdCk7CisgICAgICAgIEtSZW5kZXJpbmdQYWludFNl
cnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50
U2VydmVyKHN0eWxlLCAmcGF0aCk7CisgICAgICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewor
ICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CisgICAgICAgICAgICB0cyA8
PCAiIFtzdHJva2U9eyI7CisgICAgICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN0cm9rZVBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiI8PCBzdHJva2VQ
YWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkgPDwgIlwiXSI7IAorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAqc3Ryb2tlUGFpbnRTZXJ2ZXI7Cisg
ICAgICAgICAgICB9IAorCisgICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IEtTVkdQYWlu
dGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VE
YXNoT2Zmc2V0KCksIDAuMCk7CisgICAgICAgICAgICBjb25zdCBLQ0Rhc2hBcnJheSYgZGFzaEFy
cmF5ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5
bGUpOworICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gS1NWR1BhaW50ZXJGYWN0b3J5
Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCksIDEu
MCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0
eSgpICE9IDEuMGYpCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW29wYWNpdHk9IiA8PCBz
dmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChzdHJva2VX
aWR0aCAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltzdHJva2Ugd2lkdGg9
IiA8PCBzdHJva2VXaWR0aCA8PCAiXSI7CisgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnN0cm9r
ZU1pdGVyTGltaXQoKSAhPSA0KQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIlttaXRlciBs
aW1pdD0iIDw8IHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOworICAgICAgICAg
ICAgaWYgKHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9IDApCisgICAgICAgICAgICAgICAgdHMgPDwg
cyA8PCAiW2xpbmUgY2FwPSIgPDwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPDwgIl0iOworICAgICAg
ICAgICAgaWYgKHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHRz
IDw8IHMgPDwgIltsaW5lIGpvaW49IiA8PCBzdmdTdHlsZS0+am9pblN0eWxlKCkgPDwgIl0iOwor
ICAgICAgICAgICAgaWYgKGRhc2hPZmZzZXQgIT0gMC4wZikKKyAgICAgICAgICAgICAgICB0cyA8
PCBzIDw8ICJbZGFzaCBvZmZzZXQ9IiA8PCBkYXNoT2Zmc2V0IDw8ICJdIjsKKyAgICAgICAgICAg
IGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJb
ZGFzaCBhcnJheT0iIDw8IGRhc2hBcnJheSA8PCAiXSI7ICAgICAgICAKKyAgICAgICAgICAgIHRz
IDw8ICJ9XSI7CisgICAgICAgIH0KKyAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxs
UGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSwg
JnBhdGgpOworICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgICAgICBUZXh0
U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyI7Cisg
ICAgICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFm
aWxsUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgdHMgPDwgcyA8PCAiW2lkPVwiIiA8PCBmaWxsUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3Ry
eSgpIDw8ICJcIl0iOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
dHMgPDwgcyA8PCAqZmlsbFBhaW50U2VydmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkgIT0gMS4w
ZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHN0eWxlLT5zdmdT
dHlsZSgpLT5maWxsT3BhY2l0eSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c3Zn
U3R5bGUoKS0+ZmlsbFJ1bGUoKSAhPSBSVUxFX05PTlpFUk8pCisgICAgICAgICAgICAgICAgdHMg
PDwgcyA8PCAiW2ZpbGwgcnVsZT0iIDw8IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpIDw8
ICJdIjsKKyAgICAgICAgICAgIHRzIDw8ICJ9XSI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHRzIDw8ICIgW2NsaXAg
cGF0aD1cIiIgPDwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkgPDwgIlwiXSI7CisgICAgaWYgKCFzdmdT
dHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCisgICAgICAgIHRzIDw8ICIgW3N0YXJ0IG1h
cmtlcj0iIDw8IHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpIDw8ICJdIjsKKyAgICBpZiAoIXN2Z1N0
eWxlLT5taWRNYXJrZXIoKS5pc0VtcHR5KCkpCisgICAgICAgIHRzIDw8ICIgW21pZGRsZSBtYXJr
ZXI9IiA8PCBzdmdTdHlsZS0+bWlkTWFya2VyKCkgPDwgIl0iOworICAgIGlmICghc3ZnU3R5bGUt
PmVuZE1hcmtlcigpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbZW5kIG1hcmtlcj0iIDw8
IHN2Z1N0eWxlLT5lbmRNYXJrZXIoKSA8PCAiXSI7CisgICAgaWYgKCFzdmdTdHlsZS0+ZmlsdGVy
KCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8PCAiIFtmaWx0ZXI9IiA8PCBzdmdTdHlsZS0+Zmls
dGVyKCkgPDwgIl0iOworfQorI3VuZGVmIERJRkZFUlNfRlJPTV9QQVJFTlQKKyN1bmRlZiBESUZG
RVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UKKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBhdGggJm8pCit7CisgICAg
dHMgPDwgIiAiIDw8IG8uYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG8ucmVsYXRpdmVCQm94
KCkpOworICAgIAorICAgIHdyaXRlU3R5bGUodHMsIG8pOworICAgIAorICAgIHRzIDw8ICIgW2Rh
dGE9XCIiIDw8IG8ucGF0aCgpLmRlYnVnU3RyaW5nKCkgPDwgIlwiXSI7CisgICAgCisgICAgcmV0
dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZvKQoreworICAgIHRzIDw8ICIgIiA8PCBvLmFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChvLnJlbGF0aXZlQkJveCgpKTsKKyAgICAKKyAgICB3
cml0ZVN0eWxlKHRzLCBvKTsKKyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBEZXBy
ZWNhdGVkU3RyaW5nIGdldFRhZ05hbWUodm9pZCAqbm9kZSkKK3sKKyAgICBTVkdTdHlsZWRFbGVt
ZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG5vZGUpOworICAgIGlm
IChlbGVtKQorICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW0tPm5vZGVOYW1lKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworfQorCit2b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXIgJmNvbnRhaW5lciwg
aW50IGluZGVudCkKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCBj
b250YWluZXIucmVuZGVyTmFtZSgpOworICAgIAorICAgIGlmIChjb250YWluZXIuZWxlbWVudCgp
KSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGFnTmFtZSA9IGdldFRhZ05hbWUoY29udGFp
bmVyLmVsZW1lbnQoKSk7CisgICAgICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICB0cyA8PCAiIHsiIDw8IHRhZ05hbWUgPDwgIn0iOworICAgIH0KKyAgICAKKyAgICB0cyA8
PCBjb250YWluZXIgPDwgZW5kbDsKKyAgICAKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQg
PSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQorICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxKTsKK30K
Kwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyUGF0aCAmcGF0aCwgaW50
IGluZGVudCkKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCBwYXRo
LnJlbmRlck5hbWUoKTsKKyAgICAKKyAgICBpZiAocGF0aC5lbGVtZW50KCkpIHsKKyAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShwYXRoLmVsZW1lbnQoKSk7Cisg
ICAgICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICB0cyA8PCAiIHsiIDw8
IHRhZ05hbWUgPDwgIn0iOworICAgIH0KKyAgICAKKyAgICB0cyA8PCBwYXRoIDw8IGVuZGw7Cit9
CisKK3ZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIE5vZGUgKnBhcmVu
dCkKK3sKKyAgICBBU1NFUlQocGFyZW50KTsKKyAgICBOb2RlICpub2RlID0gcGFyZW50OworICAg
IGRvIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBTVkdFbGVtZW50ICpzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG5vZGUpOworICAgICAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTVkdTdHlsZWRFbGVtZW50ICpzdHlsZWQg
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIFJl
ZlB0cjxTVkdSZXNvdXJjZT4gcmVzb3VyY2Uoc3R5bGVkLT5jYW52YXNSZXNvdXJjZSgpKTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBlbGVtZW50SWQgPSBzdmdFbGVtZW50LT5nZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjppZEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgaWYgKHJl
c291cmNlLT5pc1BhaW50U2VydmVyKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXI+IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEtSZW5k
ZXJpbmdQYWludFNlcnZlcj4ocmVzb3VyY2UpOworICAgICAgICAgICAgdHMgPDwgIktSZW5kZXJp
bmdQYWludFNlcnZlciB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIgIiA8PCAqcGFpbnRTZXJ2
ZXIgPDwgIn0iIDw8IGVuZGw7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdHMgPDwgIktD
YW52YXNSZXNvdXJjZSB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIgIiA8PCAqcmVzb3VyY2Ug
PDwgIn0iIDw8IGVuZGw7CisgICAgfSB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKHBhcmVudCkpKTsKK30KKworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRW
YWx1ZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOworICAgIGNsYXNzIENvbG9yOworICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xh
c3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEZsb2F0U2l6ZTsKKyAgICBjbGFzcyBJbnRQb2ludDsK
KyAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEtDQ2xpcERhdGE7CisgICAgY2xhc3MgS0NQ
YXRoRGF0YTsKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFJlbmRlclBhdGg7CisgICAgY2xh
c3MgUmVuZGVyU1ZHQ29udGFpbmVyOworCisvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBS
ZW5kZXJUcmVlQXNUZXh0IGNvZGUKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR0NvbnRhaW5lciYsIGludCBpbmRlbnQgPSAwKTsKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclBhdGgmLCBpbnQgaW5kZW50ID0gMCk7Cit2b2lkIHdyaXRlUmVuZGVyUmVz
b3VyY2VzKFRleHRTdHJlYW0mLCBOb2RlKiBwYXJlbnQpOworCisvLyBoZWxwZXIgb3BlcmF0b3Jz
IGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUu
IAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0
Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQmKTsKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOworVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7CitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKy8v
IGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRo
ZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQor
Ly8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQg
bWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4KKyAgICAK
K3RlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0qPiYgbCkKK3sKKyAgICB0cyA8
PCAiWyI7CisgICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj46OkNvbnN0SXRl
cmF0b3IgaXQgPSBsLmJlZ2luKCk7CisgICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJ
dGVtKj46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwuZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9IGl0
X2UpIHsKKyAgICAgICAgdHMgPDwgKigqaXQpOworICAgICAgICArK2l0OworICAgICAgICBpZiAo
aXQgIT0gaXRfZSkgdHMgPDwgIiwgIjsKKyAgICB9CisgICAgdHMgPDwgIl0iOworICAgIAorICAg
IHJldHVybiB0czsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbT4m
IGwpCit7CisgICAgdHMgPDwgIlsiOworICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
SXRlbT46OkNvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7CisgICAgdHlwZW5hbWUgRGVwcmVj
YXRlZFZhbHVlTGlzdDxJdGVtPjo6Q29uc3RJdGVyYXRvciBpdF9lID0gbC5lbmQoKTsKKyAgICB3
aGlsZSAoaXQgIT0gaXRfZSkgeworICAgICAgICB0cyA8PCAqaXQ7CisgICAgICAgICsraXQ7Cisg
ICAgICAgIGlmIChpdCAhPSBpdF9lKSB0cyA8PCAiLCAiOworICAgIH0KKyAgICB0cyA8PCAiXSI7
CisgICAgCisgICAgcmV0dXJuIHRzOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11302</attachid>
            <date>2006-10-31 10:06:02 -0800</date>
            <delta_ts>2006-10-31 10:26:01 -0800</delta_ts>
            <desc>Updated final patch</desc>
            <filename>kcanvastreedebug.diff</filename>
            <type>text/plain</type>
            <size>54365</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02NDYsNyArNjQ2LDYgQEAgc2V0IChTVkdfU09VUkNFUwogICAgIGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAogICAgIGtzdmcyL2V2ZW50cy9KU1NW
R0xhenlFdmVudExpc3RlbmVyLmNwcAogICAgIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3Bw
Ci0gICAga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAogICAgIGtjYW52YXMvS0NhbnZhc0Zp
bHRlcnMuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuY3BwCiAgICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3Bw
CkBAIC0xMTIyLDYgKzExMjEsNyBAQCBzZXQoV2ViQ29yZV9TUkNTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisgICAgcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5n
L1JlbmRlckZvcm1FbGVtZW50LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDA2LTEwLTMxICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDYzCisKKyAg
ICAgICAgTW92ZSBLQ2FudmFzVHJlZURlYnVnIGludG8gcmVuZGVyaW5nLCBuYW1lZCBhcyBTVkdS
ZW5kZXJUcmVlQXNUZXh0LiosCisgICAgICAgIGFzIGRpY3Vzc2VkIHdpdGggRGF2ZS4gQWxzbyBr
aWxsIHRoZSBvdXRkYXRlZCBERVNJR04gZG9jdW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICoga2NhbnZhcy9ERVNJR046IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9LQ2FudmFz
RmlsdGVycy5jcHA6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcDogTW92
ZWQgdG8gcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQKKyAgICAgICAgKiBrY2FudmFzL0tD
YW52YXNUcmVlRGVidWcuaDogRGl0dG8uCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorCiAyMDA2LTEwLTMxICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogQ2hhbmdlIEdyYXBoaWNzVHlwZXMuaCB0byBhIHByaXZhdGUg
aGVhZGVyIHRvCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg4NSw4ICsxODg1LDYgQEAKIAkJQTg4QUQzQjUw
OTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc2MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFy
dHpTdXBwb3J0LmggKi87IH07CiAJCUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpT
dXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThDMEZCNzcwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQubW0gKi87IH07CiAJCUE4
OEFEM0JFMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0YwODk3MDFGODAwQkE1MTE0
IC8qIEtDYW52YXNGaWx0ZXJzLmggKi87IH07Ci0JCUE4OEFEM0NCMDk1MjQ4NkUwMDFERDE5NiAv
KiBLQ2FudmFzVHJlZURlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEwRTM5MzA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5o
ICovOyB9OwotCQlBODhBRDNDQzA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1RyZWVEZWJ1Zy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEwRTM5
NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi87IH07CiAJCUE4OEFE
NDAxMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjZGRjA4OTcwMUYxMDBCQTUxMTQg
LyogU1ZHUmVuZGVyU3R5bGUuY3BwICovOyB9OwogCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYg
LyogU1ZHUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzBGNzAwMDg5NzAxRjEwMEJBNTExNCAvKiBTVkdSZW5kZXJTdHlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4OEFENDAz
MDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEY3MDEwODk3MDFGMTAwQkE1MTE0
IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5jcHAgKi87IH07CkBAIC0yMjk5LDYgKzIyOTcsOCBAQAog
CQlCMkEwMTVCQTBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTAxNUE3MEFGNkNENTMw
MDZCQ0UwRSAvKiBTVkdSZXNvdXJjZU1hc2tlci5oICovOyB9OwogCQlCMkNCNDE5MzBBQjc1OTA0
MDA0RDlDNDUgLyogU1ZHUmVuZGVyaW5nSW50ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNCNDE0QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHUmVu
ZGVyaW5nSW50ZW50LmggKi87IH07CiAJCUIyQ0I0MUE2MEFCNzU5MDQwMDREOUM0NSAvKiBTVkdV
bml0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQ0I0MTVGMEFCNzU5MDQwMDREOUM0NSAvKiBTVkdVbml0VHlwZXMuaCAqLzsgfTsKKwkJQjJF
QkRDOUMwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUEwQUY3N0UzNDAw
QUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwICovOyB9OworCQlCMkVCREM5RDBBRjc3
RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNW
R1JlbmRlclRyZWVBc1RleHQuaCAqLzsgfTsKIAkJQjJGQTNEMzYwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0M0RTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmlt
YXRlQ29sb3JFbGVtZW50LmNwcCAqLzsgfTsKIAkJQjJGQTNEMzcwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJGQTNDNEYwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudC5oICovOyB9OwogCQlCMkZBM0QzODBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdBbmltYXRlZEFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyRkEzQzUwMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUu
Y3BwICovOyB9OwpAQCAtNDU0MCw4ICs0NTQwLDYgQEAKIAkJQTgwRTdFOTQwQTFBODNFMzAwN0ZC
OEM1IC8qIEpTSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNIVE1MVGV4dEFyZWFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTgwRTdFOTUwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTEJ1dHRvbkVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTEJ1dHRvbkVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTdFOTYwQTFBODNFMzAw
N0ZCOEM1IC8qIEpTSFRNTEJ1dHRvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSFRNTEJ1dHRvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBODEwRTM5MzA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtD
YW52YXNUcmVlRGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07Ci0JCUE4MTBFMzk0MDhBNDE2MEYwMDMzM0Q5OCAvKiBLQ2FudmFzVHJl
ZURlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gS0NhbnZhc1RyZWVEZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBODEzNjlBRTA5NzM3NEY1MDBENzQ0NjMg
LyogSFRNTElzSW5kZXhFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIVE1MSXNJbmRleEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgx
MzY5QUYwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTElzSW5kZXhFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxMzY5QjAwOTczNzRGNTAwRDc0NDYzIC8qIEhU
TUxJbnB1dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxJ
bnB1dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyNTksNiArNTI1
Nyw4IEBACiAJCUIyRTk1NDhDMEFCNUZCQTMwMDc2REUzNyAvKiBTVkdQYXRoU2VnTW92ZXRvQWJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHUGF0aFNlZ01vdmV0b0Ficy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTk1NDhEMEFCNUZCQTMwMDc2REUzNyAvKiBT
VkdQYXRoU2VnTW92ZXRvUmVsLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHUGF0aFNl
Z01vdmV0b1JlbC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTk1NDhFMEFC
NUZCQTMwMDc2REUzNyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJFQkRDOUIwQUY3
N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclRyZWVBc1RleHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJGQTNDNEUwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdB
bmltYXRlQ29sb3JFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJG
QTNDNEYwQUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzQzUwMEFCNzVBNkUwMDBFNUFDNCAv
KiBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTU1ZHQW5pbWF0ZWRBbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MTkwLDggKzgxOTAsNiBAQAogCQkJCUE4QzBGQjUzMDg5NzAxRjcwMEJBNTExNCAvKiBk
ZXZpY2UgKi8sCiAJCQkJQTg0MTVGOTkwQUMxMEM1RDAwRjdEMERGIC8qIEtDYW52YXNGaWx0ZXJz
LmNwcCAqLywKIAkJCQlBOEMwRkI3RjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ZpbHRlcnMu
aCAqLywKLQkJCQlBODEwRTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5j
cHAgKi8sCi0JCQkJQTgxMEUzOTMwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcu
aCAqLywKIAkJCSk7CiAJCQlwYXRoID0ga2NhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC04OTMwLDYgKzg5MjgsOCBAQAogCQkJCUJDRUE0ODRGMDk3RDkzMDIwMDk0QzlFNCAv
KiBSZW5kZXJUZXh0RnJhZ21lbnQuaCAqLywKIAkJCQlCQ0VBNDg0QTA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGhlbWUuY3BwICovLAogCQkJCUJDRUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJUaGVtZS5oICovLAorCQkJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCAqLywKKwkJCQlCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjggLyogU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oICovLAogCQkJCUJDRUE0ODQ5MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJUaGVtZU1hYy5tbSAqLywKIAkJCQlCQ0VBNDg0ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVyVGhlbWVNYWMuaCAqLywKIAkJCQk5Mzk1NUE0MjAzRDcyOTMyMDA4NjM1Q0UgLyogUmVuZGVy
VHJlZUFzVGV4dC5jcHAgKi8sCkBAIC05MTc0LDcgKzkxNzQsNiBAQAogCQkJCUE4OEFEM0IzMDk1
MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODhBRDNCRTA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ZpbHRl
cnMuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4OEFEM0NCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2Fu
dmFzVHJlZURlYnVnLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDQwMjA5NTI0OEYwMDAxREQx
OTYgLyogU1ZHUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFENDA0MDk1MjQ4
RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZURlZnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
OEFENDBCMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMTA1MDYsNiArMTA1MDUsNyBAQAogCQkJCUIyQTAxNUI2MEFGNkNENTMwMDZCQ0UwRSAvKiBT
VkdSZXNvdXJjZUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVCODBBRjZDRDUzMDA2
QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTAxNUJB
MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZU1hc2tlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQjJFQkRDOUQwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMTA3MDQsNyArMTA3MDQsNiBAQAogCQkJCUE4OEFEM0IyMDk1MjQ4NkUw
MDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4OEFEM0I0MDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHoubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDNCNjA5NTI0ODZFMDAxREQx
OTYgLyogUXVhcnR6U3VwcG9ydC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFEM0NDMDk1MjQ4
NkUwMDFERDE5NiAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OEFENDAxMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODhBRDQwMzA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGVEZWZzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFENDBBMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdab29t
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMTc0OCw2ICsxMTc0Nyw3IEBACiAJCQkJQjJB
MDE1QjQwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkEwMTVCNzBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VNYXJrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMDE1QjkwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jl
c291cmNlTWFza2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRUJEQzlDMEFGNzdFMzQwMEFF
NEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9rY2FudmFzL0RFU0lHTgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvREVTSUdO
CShyZXZpc2lvbiAxNzQ4MCkKKysrIFdlYkNvcmUva2NhbnZhcy9ERVNJR04JKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTcyICswLDAgQEAKLUtDYW52YXMgRGVzaWduIERvY3VtZW50IDAuMQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1MYXN0IHVwZGF0ZTogMjUuMDcuMjAwNAotCi0xLiBXaGF0
IGlzICh0aGUgaGlzdG9yeSBvZikgS0NhbnZhcz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1LQ2FudmFzIGlzIHRoZSByZXN1bHQgb2YgZm91ci15ZWFyIGtzdmcgZGV2
ZWxvcG1lbnQuCi1XZSBoYWQgdG8gY3JlYXRlIG91ciAib3duIiBjYW52YXMgZm9yIGtzdmcsIHNv
bWUgeWVhcnMKLWFnbyBhcyBhbnkgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaGFzbid0IGJlZW4g
YWJsZQotdG8gZnVsZmlsIG91ciBuZWVkcywgd2hpY2ggaXMgbW9zdGx5OiBmbGV4aWJpbGl0eS4K
LQotUUNhbnZhcyBpcyAob2YgY291cnNlKSB0aWVkIHRvIFF0LCB3aGljaCBpcyBnb29kLgotQnV0
IGl0IHdpcGVzIGF3YXkgaWUuIHRoZSBmdW5jdGlvbmFsaXR5IHRvIHBhaW50Ci13aXRoL3RvIHNv
bWV0aGluZyBlbHNlIHRoYW4gYSBRUGFpbnRlci4KLQotVGhlIGltbWVkaWF0ZSByZXN1bHQgb2Yg
b3VyIGJyYWluc3Rvcm1pbmcsIHdoYXQKLXdlIG5lZWRlZCwgd2FzOiBLU1ZHQ2FudmFzLiBLU1ZH
Q2FudmFzIHdhcyBiYXNpY2FsbHkKLWEgInBvcnQiIG9mIFFDYW52YXMgY29kZSB0byBrc3ZnIHdp
dGggaGVhdnkgbW9kaWZpY2F0aW9ucy4KLVdlIGV4Y2x1c2l2ZWx5IHVzZWQgbGliYXJ0IGF0IHRo
ZSBiZWdpbm5pbmcgb2YgS1NWR0NhbnZhcwotaGFja2luZy4gTGF0ZXIgd2UgbWFkZSBpdCBwb3Nz
aWJsZSB0byB1c2UgZGlmZmVyZW50Ci1yZW5kZXJpbmcgZGV2aWNlcyAoaW1wbGVtZW50ZWQgaW4g
a3N2ZzogbGliYXJ0ICYgYWdnKS4KLQotVGhhdCB3YXMgdGhlIGZpcnN0IHN0ZXAgdG8gbW9yZSBm
bGV4aWJpbGl0eS4gQnV0IGl0Ci1oYXNuJ3QgYmVlbiBlbm91Z2ggdG8gbWFrZSBhIGdlbmVyaWMg
a2RlIGNhbnZhcyBvdXQgb2YgaXQuCi0KLUtDYW52YXMgY3VycmVudGx5IHVzZXMgYSB2ZXJ5IHNv
cGhpc3RpY2F0ZWQgYXBwcm9hY2gsCi13aGljaCB3aWxsIGJlIGV4cGxhaW5lZCBpbiBkZXRhaWwg
bm93Li4uLgotCi0yLiBUaGUgbWFpbiBpZGVhIG9mIHRoZSBjYW52YXMKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1GaXJzdCBvZiBhbGwsIHdlIGhhdmUgdG8gZGlmZmVyZW50aWF0
ZSBiZXR3ZWVuICJSZW5kZXJpbmcgRGV2aWNlcyIgYW5kICJSZW5kZXJpbmcgVGFyZ2V0cyIuCi0K
LURlZmluaXRpb246Ci0JQSAiZGV2aWNlIiBpcyB1c2VkIHRvIHBhaW50IG9udG8gYSAidGFyZ2V0
Ii4gICJEZXZpY2VzIiBhcmUKLQlkeW5hbWljYWxseSBsb2FkYWJsZSwgd2hlcmVhcyAidGFyZ2V0
cyIgaGF2ZSB0byBiZSBsaW5rZWQgYWdhaW5zdC4KLQotVGFyZ2V0czoKLQlRdCAoUVdpZGdldCks
IE9wZW5HTCwgU0RMLi4uIGFyZSBnb29kIGV4YW1wbGVzIGZvciBjb21tb24gIlJlbmRlcmluZyBU
YXJnZXRzIi4KLQlBcyBzdGF0ZWQgYWJvdmUsIHlvdSBjYW5ub3QgZHluYW1pY2FsbHkgc3dpdGNo
IHRoZSByZW5kZXJpbmcgdGFyZ2V0cy4KLQotCTxjb2RlLXNuaXBwZXQ+Ci0JCUtDYW52YXNUYXJn
ZXRRdCAqdGFyZ2V0UXQgPSBuZXcgS0NhbnZhc1RhcmdldFF0KHByZWZXaWR0aCwgcHJlZkhlaWdo
dCk7Ci0JPC9jb2RlLXNuaXBwZXQ+Ci0KLQlZb3UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgdGFyZ2V0
IG9iamVjdCBtYW51YWxseSBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCB5b3UnZCBsaWtlCi0JdG8g
cGFpbnQgb24uIEN1cnJlbnRseSB3ZSBvbmx5IGhhdmUgYSAnUXQnIHJlbmRlcmluZyB0YXJnZXQu
Ci0KLURldmljZXM6Ci0JTGliYXJ0LCBhZ2cyLCBRUGFpbnRlciBldGMuLiBhcmUgZ29vZCBleGFt
cGxlcyBmb3IgY29tbW9uICJSZW5kZXJpbmcgRGV2aWNlcyIuCi0KLQk8Y29kZS1zbmlwcGV0Pgot
CQlLUmVuZGVyaW5nRGV2aWNlICpkZXZpY2UgPSBLUmVuZGVyaW5nRGV2aWNlRmFjdG9yeTo6c2Vs
ZigpLT5yZXF1ZXN0KCJhZ2ciLCB0YXJnZXRRdCk7Ci0JCWlmKCFkZXZpY2UpCi0JCQlyZXR1cm4g
ZmFsc2U7Ci0JPC9jb2RlLXNuaXBwZXQ+Ci0KLQlZb3UgY2FuIGVhc2lseSBsb2FkIGF2YWlsYWJs
ZSByZW5kZXJpbmcgZGV2aWNlcyBieSAnU3RyaW5nJy4KLQlBZGRpdGlvbmFsbHksIHlvdSBoYXZl
IHRvIHBhc3MgdGhlIHJlbmRlcmluZyB0YXJnZXQgcG9pbnRlcgotCWFzIHRoZSAncmVxdWVzdCcg
ZnVuY3Rpb24gY2hlY2tzIHdoZXRlciB5b3VyIHJlbmRlcmluZyBkZXZpY2UKLQluZWVkcyBhICdi
dWZmZXJlZCcgcmVuZGVyaW5nIHRhcmdldCBvciBhICd1bmJ1ZmZlcmVkJyByZW5kZXJpbmcKLQl0
YXJnZXQuIEZvciBleGFtcGxlOiB0YXJnZXRRdCAtPiBidWZmZXJlZCByZW5kZXJpbmcgdGFyZ2V0
Ci0JCQkJCQkgYWdnIC0+IGJ1ZmZlcmVkIHJlbmRlcmluZyBkZXZpY2UKLQotICAgIEFuIE9wZW5H
TCB0YXJnZXQgaXMgYSBnb29kIGV4YW1wbGUgb2YgYW4gJ3VuYnVmZmVyZWQnIHRhcmdldCwKLQli
ZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBhZHZhbnRhZ2Ug
aWYgd2UnZAotCXVzZSBhIHNvZnR3YXJlIHJlbmRlcmVyIGxpa2UgYWdnMiB0byBjcmVhdGUgYSBy
ZW5kZXJpbmcgYnVmZmVyCi0JYW5kIHRoZW4gYmxpdCBpdCBvbnRvIHRoZSBzY3JlZW4uIFRoYXQn
cyB3aHkgc3VjaCBhIHNlcGVyYXRpb24gaXMgbmVlZGVkLgotCi1PaywgYXMgeW91IGtub3cgdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiB0YXJnZXRzICYgZGV2aWNlcyBub3csCi13ZSBjYW4gc3RhcnQg
ZXhwZXJpbWVudGluZyB3aXRoIHRoZSBtYWluICdLQ2FudmFzJyBjbGFzcy4uLi4uCi0KLTMuIEhv
dyB0byB1c2UgdGhlICdLQ2FudmFzJyBjbGFzcz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotPGNvZGUtc25pcHBldD4KLQlLQ2FudmFzKEtDYW52YXNUYXJnZXQgKnRhcmdl
dCwgS1JlbmRlcmluZ0RldmljZSAqZGV2aWNlKQotPC9jb2RlLXNuaXBwZXQ+Ci0KLVRoZSAob25s
eSBhdmFpbGFibGUpIEtDYW52YXMgY29uc3RydWN0b3IsIHRha2VzIGEgS0NhbnZhc1RhcmdldAot
cG9pbnRlciBhbmQgYSBLUmVuZGVyaW5nRGV2aWNlIHBvaW50ZXIsIHdoaWNoIGNhbiBiZSByZXRy
aWV2ZWQKLXVzaW5nIHRoZSB0ZWNobmlxdWVzIGZyb20gdGhlIGFydGljbGUgYWJvdmUuCi0KLTxj
b2RlLXNuaXBwZXQ+Ci0JLy8gRmlyc3QgYXR0YWNoIHRvIGNhbnZhcy4uLgotCUtDYW52YXMgKm15
Q2FudmFzID0gbmV3IEtDYW52YXModGFyZ2V0LCBkZXZpY2UpOwotCi0gICAgLy8gLi4uIHRoZW4g
aW5pdGlhbGl6ZSB0aGUgdGFyZ2V0ICYgZGV2aWNlIQotCXRhcmdldC0+aW5pdCh0aGlzKTsKLQlk
ZXZpY2UtPmluaXQodGFyZ2V0KTsKLTwvY29kZS1zbmlwcGV0PgotCi1UaGUgc2Vjb25kIGltcG9y
dGFudCBzdGVwIGlzIHRvIGluaXRpYWxpemUgdGhlIHJlbmRlcmluZyB0YXJnZXQuCi1XaGVuIHVz
aW5nIHRoZSAnS0NhbnZhc1RhcmdldFF0JyBpdCB0YWtlcyBhICdRUGFpbnREZXZpY2UnCi1wb2lu
dGVyIGFzIGFyZ3VtZW50LCB3aGljaCBpZGVudGlmaWVzIHRoZSB3aW5kb3cgdG8gcGFpbnQgb24u
Ci0oTG9vayBpbnRvIHRlc3QvY2FudmFzdGVzdC5jYyAmIHRlc3QvQ2FudmFzV2lkZ2V0LmNjLi4u
KQotCi1UaGF0IGtub3dsZWRnZSBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgYW4gImVtcHR5
IiBjYW52YXMKLW9udG8gc2NyZWVuLiBOZXh0IHRoaW5nIHRvIGtub3c6IEhvdyB0byB1c2UgY2Fu
dmFzIGl0ZW1zPwotCi00LiBBZGRpbmcgaXRlbXMgb250byB5b3VyIGNhbnZhcyBbVE9ET10KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIGNvbmNlcHQgb2YgcGFpbnRzZXJ2ZXJz
Ci0KLVBhaW50IHNlcnZlcnMgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSB3YXkgb2YgZmlsbGluZyB1
cCBhIGFyYml0cmFyeQotc2NyZWVuIHJlZ2lvbiB1c2luZyBwYWludC4gVGhlIHNpbXBsZXN0IGFu
ZCBtb3N0IGNvbW1vbmx5IHVzZWQgaXMgdGhlCi1zb2xpZCBwYWludCBzZXJ2ZXIsIHdoaWNoIHNp
bXBseSBwYWludHMgdGhlIGFyZWEgd2l0aCBhIHNvbGlkIHJnYiBjb2xvci4KLU1vcmUgYWR2YW5j
ZWQgcGFpbnQgc2VydmVycyBhcmUgdGhlIGdyYWRpZW50IHBhaW50IHNlcnZlciwgd2hpY2ggY2Fu
IGJlIHVzZWQKLXRvIGNyZWF0ZSBzbW9vdGggY29sb3IgdHJhbnNpdGlvbnMgb3Igc2hhZGluZ3Mu
IEN1cnJlbnRseSBLQ2FudmFzIHN1cHBvcnRzIHR3bwotZ3JhZGllbnQgdHlwZXMgKGxpbmVhciAr
IHJhZGlhbCksIGJ1dCBvdGhlciBncmFkaWVudHMgYXJlIHBvc3NpYmxlLiBGaW5hbGx5IHRoZXJl
Ci1pcyB0aGUgcGF0dGVybiBwYWludCBzZXJ2ZXIsIHdoaWNoIHRha2VzIGEgYml0bWFwIGdyYXBo
aWMgYW5kIHRpbGVzIGl0IG92ZXIgdGhlIGFyZWEsCi1wb3NzaWJsZSB1c2luZyBhIHRyYW5zZm9y
bWF0aW9uIG1hdHJpeCB0byByb3RhdGUgb3Igc2tldyB0aGUgcGF0dGVybiB0aWxlcy4KLQotTm90
ZSB0aGF0IEtDYW52YXMgaGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSBmb3IgcGFpbnQgc2VydmVy
cywgc28gbmV3IHBhaW50IHNlcnZlcnMgY2FuCi1iZSBhZGRlZCBpbiBhZGRpdGlvbiB0byB0aGUg
dGhyZWUgY3VycmVudCBvbmVzLgotCi1QYWludCBzZXJ2ZXJzIGFzIHVzZWQgaW4gS0NhbnZhcyBh
cmUgaGVhdmlseSBpbmZsdWVuY2VkIGJ5IHN2Zywgc2VlIDoKLWh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL3BzZXJ2ZXJzLmh0bWwKLQotLSBLQ2FudmFzUmVzb3VyY2UKLQotTW9zdCBwYWludHNl
cnZlcnMgYXJlIEtDYW52YXNSZXNvdXJjZXMuIFRoaXMgY2xhc3MgbWFrZXMgc3VyZSBhbnkgY2hh
bmdlIG9uCi10aGUgcGFpbnQgc2VydmVyIGludmFsaWRhdGVzIGV2ZXJ5IGl0ZW0gdXNpbmcgdGhl
IHBhaW50IHNlcnZlci4KLUZvciBleGFtcGxlLCB3aGVuIGEgZ3JhZGllbnQgcmVzb3VyY2UgY2hh
bmdlcyBhIGNvbG9yIHN0b3AsIGFsbCBpdGVtcyB1c2luZwotc2FpZCBncmFkaWVudCB3aWxsIGJl
IGludmFsaWRhdGVkIGFuZCByZWRyYXduIG9uIHRoZSBuZXh0IHVwZGF0ZSgpLiBTaW5jZQotbm90
IGV2ZXJ5IGNoYW5nZSBvbiBhIHBhcmFtZXRlciBvZiBhIHBhaW50c2VydmVyIHNob3VsZCB0cmln
Z2VyIGEgcmVkcmF3Ci0oZm9yIGluc3RhbmNlIHlvdSBkb24ndCB3YW50IHRoaXMgd2hpbGUgaW5p
dGlhbGl6aW5nIHRoZSBjYW52YXMpIGFuCi1leHBsaWNpdCBjYWxsIG5hbWVkIGludmFsaWRhdGUo
KSBoYXMgdG8gYmUgZG9uZSBvbiB0aGUgS0NhbnZhc1Jlc291cmNlLgotCi0tIEtSZW5kZXJpbmdT
dHlsZQotLSBLQ2FudmFzQ3JlYXRvcgotCi1DdXJyZW50bHkgdGhlIGZvbGxvd2luZyBjYW52YXMg
aXRlbXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlCi1LQ2FudmFzQ3JlYXRvciBzaW5nbGV0b246
Ci0KLS0gbGluZXMKLS0gcmVjdGFuZ2xlcyAocG9zc2libHkgcm91bmRlZCkKLS0gY2lyY2xlcwot
LSBlbGxpcHNlcwotLSBwYXRocwotLSBjb250YWluZXJzCi0KLUl0ZW1zIGFyZSBpbnNlcnRlZCBp
bnRvIHRoZSBjYW52YXMuIExhdGVyIGFkZGl0aW9ucyBhcmUgZHJhd24gYWJvdmUgaXRlbXMKLWFk
ZGVkIGJlZm9yZSwgaWUuIHRoZSB6SW5kZXggaW5jcmVhc2VzIG9uIGV2ZXJ5IGl0ZW0gaW5zZXJ0
aW9uLgotSGVyZSBpcyBhIGNvZGUgc25pcHBldCBvZiB0aGUgY3JlYXRpb24gb2YgYSBjYW52YXMg
aXRlbSwgaW4gdGhpcyBjYXNlIGEgcm91bmRlZCByZWN0OgotCi08Y29kZS1zbmlwcGV0PgotCWNh
bnZhcy0+aW5zZXJ0SXRlbShLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKGNhbnZhcywgcmVjdFN0eWxlLCAxMjAsIDEwMCwgMTQwLCAxNjAsIDUsIDEwKSk7Ci08
L2NvZGUtc25pcHBldD4KLQotTm90ZSB0aGF0IGZvciBtYW5pcHVsYXRpbmcgaW5kaXZpZHVhbCBj
YW52YXMgaXRlbXMgYXQgYSBsYXRlciB0aW1lIGl0IGlzCi1jb252ZW5pZW50IHRvIGtlZXAgYSBw
b2ludGVyIHRvIHRoZSBjYW52YXMgaXRlbToKLQotPGNvZGUtc25pcHBldD4KLSAgICAgICAgS0Nh
bnZhc0l0ZW0gKml0ZW0gPSBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSb3VuZGVkUmVj
dGFuZ2xlKGNhbnZhcywgcmVjdFN0eWxlLCAxMjAsIDEwMCwgMTQwLCAxNjAsIDUsIDEwKTsKLTwv
Y29kZS1zbmlwcGV0PgotCi1EbyBub3Qgd29ycnkgYWJvdXQgaXQgYmVpbmcgYSBwb2ludGVyLCB0
aGUgY2FudmFzIGtlZXBzIHRyYWNrIG9mIHRoZSBpdGVtCi1hbmQgd2lsbCBkZWxldGUgaXQgd2hl
biBpdCBpcyBpdHNlbGYgc2h1dHRpbmcgZG93bi4KLU5vdyB0aGF0IHdlIGhhdmUgYSBwb2ludGVy
IHRvIHRoZSBpdGVtLCB3ZSBjYW4gZG8gdGhpbmdzIGxpa2UgbG93ZXIoKS9yYWlzZSgpLAotZ2V0
IHRoZSBiYm94KCkgb2YgdGhlIGl0ZW0gYW5kIGhpdCBkZXRlY3Rpb24gdXNpbmcgZmlsbENvbnRh
aW5zKCkvc3Ryb2tlQ29udGFpbnMoKS4KLUhhdmUgYSBsb29rIGF0IEtDYW52YXNJdGVtLmggZm9y
IHdoYXQgeW91IGNhbiBkbyB3aXRoIEtDYW52YXNJdGVtcy4KLQotNS4gV3JpdGluZyByZW5kZXJp
bmcgdGFyZ2V0cyBbVE9ET10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotNi4gV3Jp
dGluZyByZW5kZXJpbmcgZGV2aWNlcyBbVE9ET10gCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUhhdmUgZnVuIHdpdGggS0NhbnZhcyEKLVlvdXIgS0NhbnZhcyBUZWFtIDopCkluZGV4
OiBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAJKHJldmlzaW9uIDE3NDgwKQorKysgV2ViQ29y
ZS9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYs
OSBAQAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgotCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRT
dHJlYW0uaCIKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCisKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIApJbmRleDogV2ViQ29yZS9rY2FudmFz
L0tDYW52YXNUcmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9LQ2Fu
dmFzVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL2tjYW52YXMvS0Nh
bnZhc1RyZWVEZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzgwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KLSAqICAgICAgICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUu
b3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSNp
bmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCi0KLSNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBw
ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZl
clBhdHRlcm4uaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgotI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnQuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyoqIGNs
YXNzICsgaW9tYW5pcCB0byBoZWxwIHN0cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwg
IiBpbiBzdHJpbmcgImEsIGIsIGMsIGQiCi0gKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5
b3UgZG9uJ3Qga25vdyB3aGljaCBpdGVtIGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAotICogb25l
IHRvIGJlIHByaW50ZWQsIGJ1dCBzdGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBi
LCBjIiwgd29ya3MgbGlrZSAKLSAqIERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpqb2luIGZvciBzdHJl
YW1zCi0gKi8KLWNsYXNzIFRleHRTdHJlYW1TZXBhcmF0b3IKLXsKLXB1YmxpYzoKLSAgICBUZXh0
U3RyZWFtU2VwYXJhdG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnMpIDogbV9zZXBhcmF0b3Io
cyksIG1fbmVlZFRvU2VwYXJhdGUoZmFsc2UpIHt9Ci1wcml2YXRlOgotICAgIGZyaWVuZCBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJhdG9yICZz
ZXApOwotICAgIAotcHJpdmF0ZToKLSAgICBEZXByZWNhdGVkU3RyaW5nIG1fc2VwYXJhdG9yOwot
ICAgIGJvb2wgbV9uZWVkVG9TZXBhcmF0ZTsKLX07Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3IgJnNlcCkKLXsKLSAgICBpZiAoc2Vw
Lm1fbmVlZFRvU2VwYXJhdGUpCi0gICAgICAgIHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsKLSAgICBl
bHNlIAotICAgICAgICBzZXAubV9uZWVkVG9TZXBhcmF0ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRQ
b2ludCAmcCkKLXsKLSAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnko
KSA8PCAiKSI7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEludFJlY3QgJnIpCi17Ci0gICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngoKSA8PCAi
LCIgPDwgci55KCkgPDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5oZWlnaHQo
KTsKLX0KLQotYm9vbCBoYXNGcmFjdGlvbnMoZG91YmxlIHZhbCkKLXsKLSAgICBkb3VibGUgZXBz
aWxvbiA9IDAuMDAwMTsKLSAgICBpbnQgaXZhbCA9IGludCh2YWwpOwotICAgIGRvdWJsZSBkdmFs
ID0gZG91YmxlKGl2YWwpOyAgICAKLSAgICByZXR1cm4gKGZhYnModmFsLWR2YWwpID4gZXBzaWxv
bik7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZs
b2F0UmVjdCAmcikKLXsKLSAgICB0cyA8PCAiYXQgKCI7IAotICAgIGlmIChoYXNGcmFjdGlvbnMo
ci54KCkpKSAKLSAgICAgICAgdHMgPDwgci54KCk7Ci0gICAgZWxzZSAKLSAgICAgICAgdHMgPDwg
aW50KHIueCgpKTsKLSAgICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhyLnkoKSkp
IAotICAgICAgICB0cyA8PCByLnkoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQoci55
KCkpOwotICAgIHRzIDw8ICIpIHNpemUgIjsKLSAgICBpZiAoaGFzRnJhY3Rpb25zKHIud2lkdGgo
KSkpIAotICAgICAgICB0cyA8PCByLndpZHRoKCk7IAotICAgIGVsc2UgCi0gICAgICAgIHRzIDw8
IGludChyLndpZHRoKCkpOyAKLSAgICB0cyA8PCAieCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhy
LmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHIuaGVpZ2h0KCk7Ci0gICAgZWxzZSAKLSAgICAg
ICAgdHMgPDwgaW50KHIuaGVpZ2h0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCAmcCkKLXsKLSAg
ICB0cyA8PCAiKCI7ICAgIAotICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQotICAgICAgICB0
cyA8PCBwLngoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQocC54KCkpOyAgICAKLSAg
ICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9ucyhwLnkoKSkpIAotICAgICAgICB0cyA8
PCBwLnkoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8PCBpbnQocC55KCkpOyAgICAKLSAgICBy
ZXR1cm4gdHMgPDwgIikiOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGbG9hdFNpemUgJnMpCi17ICAgCi0gICAgdHMgPDwgIndpZHRoPSI7Ci0gICAg
aWYgKGhhc0ZyYWN0aW9ucyhzLndpZHRoKCkpKQotICAgICAgICB0cyA8PCBzLndpZHRoKCk7Ci0g
ICAgZWxzZQotICAgICAgICB0cyA8PCBpbnQocy53aWR0aCgpKTsKLSAgICB0cyA8PCAiIGhlaWdo
dD0iOwotICAgIGlmIChoYXNGcmFjdGlvbnMocy5oZWlnaHQoKSkpIAotICAgICAgICB0cyA8PCBz
LmhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgaW50KHMuaGVpZ2h0KCkpOwotICAg
ICByZXR1cm4gdHM7Ci19Ci0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQWZmaW5lVHJhbnNmb3JtICZtKQotewotICAgIGlmIChtLmlzSWRlbnRpdHkoKSkK
LSAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgdHMg
PDwgInttPSgoIiA8PCBtLm0xMSgpIDw8ICIsIiA8PCBtLm0xMigpIDw8ICIpKCIgPDwgbS5tMjEo
KSA8PCAiLCIgPDwgbS5tMjIoKSA8PCAiKSkiOwotICAgICAgICB0cyA8PCAiIHQ9KCIgPDwgbS5k
eCgpIDw8ICIsIiA8PCBtLmR5KCkgPDwgIil9IjsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciAmYykK
LXsKLSAgICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5k
ZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBp
ICE9IGluZGVudDsgKytpKSB7Ci0gICAgICAgIHRzIDw8ICIgICI7Ci0gICAgfQotfQotCi0vL0ZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgS0NEYXNoQXJyYXkgJmEpCi17
Ci0gICAgdHMgPDwgInsiOwotICAgIEtDRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBh
LmVuZCgpOwotICAgIGZvciAoS0NEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4oKSkKLSAg
ICAgICAgICAgIHRzIDw8ICIsICI7Ci0gICAgICAgIHRzIDw8ICppdDsKLSAgICB9Ci0gICAgdHMg
PDwgIn0iOwotICAgIHJldHVybiB0czsKLX0KLQotLy9GSVhNRTogVGhpcyBzaG91bGQgYmUgaW4g
S1JlbmRlcmluZ1N0eWxlLmNwcAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIExpbmVDYXAgc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNh
c2UgQnV0dENhcDoKLSAgICAgICAgdHMgPDwgIkJVVFQiOyBicmVhazsKLSAgICBjYXNlIFJvdW5k
Q2FwOgotICAgICAgICB0cyA8PCAiUk9VTkQiOyBicmVhazsKLSAgICBjYXNlIFNxdWFyZUNhcDoK
LSAgICAgICAgdHMgPDwgIlNRVUFSRSI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLS8vRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBzdHlsZSkK
LXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBNaXRlckpvaW46Ci0gICAgICAgIHRz
IDw8ICJNSVRFUiI7IGJyZWFrOwotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICB0cyA8PCAi
Uk9VTkQiOyBicmVhazsKLSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgdHMgPDwgIkJFVkVM
IjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLQotI2RlZmluZSBESUZGRVJTX0ZS
T01fUEFSRU5UKHBhdGgpICghcGFyZW50U3R5bGUgfHwgKHBhcmVudFN0eWxlLT5wYXRoICE9IGNo
aWxkU3R5bGUtPnBhdGgpKQotLy8gYXZvaWRzIHRlc3RpbmcgcGF0aCBpZiBwcmVkIGlzIGZhbHNl
LiBUaGlzIGlzIHVzZWQgd2l0aCB0ZXN0cyB0aGF0IGhhdmUgc2lkZS1lZmZlY3RzCi0vLyBmb3Ig
dGhlIHBhcmVudCBvYmplY3QKLSNkZWZpbmUgRElGRkVSU19GUk9NX1BBUkVOVF9BVk9JRF9URVNU
X0lGX0ZBTFNFKHByZWQsIHBhdGgpICghcGFyZW50U3R5bGUgfHwgKCghcGFyZW50U3R5bGUtPnBy
ZWQpIHx8IChwYXJlbnRTdHlsZS0+cGF0aCAhPSBjaGlsZFN0eWxlLT5wYXRoKSkpCi0KLXN0YXRp
YyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCAmb2Jq
ZWN0KQotewotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC5zdHlsZSgpOwot
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwot
ICAgIAotICAgIGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQotICAg
ICAgICB0cyA8PCAiIFt0cmFuc2Zvcm09IiA8PCBvYmplY3QubG9jYWxUcmFuc2Zvcm0oKSA8PCAi
XSI7Ci0gICAgaWYgKHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpICE9IFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsSW1hZ2VSZW5kZXJpbmcoKSkKLSAgICAgICAgdHMgPDwgIiBbaW1hZ2UgcmVuZGVy
aW5nPSIgPDwgc3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkgPDwgIl0iOwotICAgIGlmIChzdHls
ZS0+b3BhY2l0eSgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKQotICAgICAgICB0
cyA8PCAiIFtvcGFjaXR5PSIgPDwgc3R5bGUtPm9wYWNpdHkoKSA8PCAiXSI7Ci0gICAgaWYgKG9i
amVjdC5pc1JlbmRlclBhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJQYXRoJiBwYXRoID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0
cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7Ci0gICAgICAgIGlmIChzdHJva2VQYWludFNl
cnZlcikgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Ci0gICAgICAg
ICAgICB0cyA8PCAiIFtzdHJva2U9eyI7Ci0gICAgICAgICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2
ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cm9rZVBhaW50U2VydmVyLT5pZEluUmVnaXN0
cnkoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiI8
PCBzdHJva2VQYWludFNlcnZlci0+aWRJblJlZ2lzdHJ5KCkgPDwgIlwiXSI7IAotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAqc3Ryb2tlUGFpbnRT
ZXJ2ZXI7Ci0gICAgICAgICAgICB9IAotCi0gICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9
IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxl
LT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7Ci0gICAgICAgICAgICBjb25zdCBLQ0Rhc2hBcnJh
eSYgZGFzaEFycmF5ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5n
U3R5bGUoc3R5bGUpOwotICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gS1NWR1BhaW50
ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0cm9rZVdp
ZHRoKCksIDEuMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c3Ry
b2tlT3BhY2l0eSgpICE9IDEuMGYpCi0gICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW29wYWNp
dHk9IiA8PCBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlm
IChzdHJva2VXaWR0aCAhPSAxLjBmKQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltzdHJv
a2Ugd2lkdGg9IiA8PCBzdHJva2VXaWR0aCA8PCAiXSI7Ci0gICAgICAgICAgICBpZiAoc3ZnU3R5
bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSA0KQotICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwg
IlttaXRlciBsaW1pdD0iIDw8IHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkgPDwgIl0iOwot
ICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5jYXBTdHlsZSgpICE9IDApCi0gICAgICAgICAgICAg
ICAgdHMgPDwgcyA8PCAiW2xpbmUgY2FwPSIgPDwgc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPDwgIl0i
OwotICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5qb2luU3R5bGUoKSAhPSAwKQotICAgICAgICAg
ICAgICAgIHRzIDw8IHMgPDwgIltsaW5lIGpvaW49IiA8PCBzdmdTdHlsZS0+am9pblN0eWxlKCkg
PDwgIl0iOwotICAgICAgICAgICAgaWYgKGRhc2hPZmZzZXQgIT0gMC4wZikKLSAgICAgICAgICAg
ICAgICB0cyA8PCBzIDw8ICJbZGFzaCBvZmZzZXQ9IiA8PCBkYXNoT2Zmc2V0IDw8ICJdIjsKLSAg
ICAgICAgICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0cyA8
PCBzIDw8ICJbZGFzaCBhcnJheT0iIDw8IGRhc2hBcnJheSA8PCAiXSI7ICAgICAgICAKLSAgICAg
ICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZl
cihzdHlsZSwgJnBhdGgpOwotICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0gICAgICAg
ICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIgW2Zp
bGw9eyI7Ci0gICAgICAgICAgICBpZiAoZmlsbFBhaW50U2VydmVyKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFmaWxsUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW2lkPVwiIiA8PCBmaWxsUGFpbnRTZXJ2ZXItPmlk
SW5SZWdpc3RyeSgpIDw8ICJcIl0iOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgdHMgPDwgcyA8PCAqZmlsbFBhaW50U2VydmVyOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5
KCkgIT0gMS4wZikKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHN0
eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDw8ICJdIjsKLSAgICAgICAgICAgIGlmIChz
dHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSAhPSBSVUxFX05PTlpFUk8pCi0gICAgICAgICAg
ICAgICAgdHMgPDwgcyA8PCAiW2ZpbGwgcnVsZT0iIDw8IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxs
UnVsZSgpIDw8ICJdIjsKLSAgICAgICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKCFzdmdTdHlsZS0+Y2xpcFBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzIDw8
ICIgW2NsaXAgcGF0aD1cIiIgPDwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkgPDwgIlwiXSI7Ci0gICAg
aWYgKCFzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzIDw8ICIg
W3N0YXJ0IG1hcmtlcj0iIDw8IHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpIDw8ICJdIjsKLSAgICBp
ZiAoIXN2Z1N0eWxlLT5taWRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzIDw8ICIgW21p
ZGRsZSBtYXJrZXI9IiA8PCBzdmdTdHlsZS0+bWlkTWFya2VyKCkgPDwgIl0iOwotICAgIGlmICgh
c3ZnU3R5bGUtPmVuZE1hcmtlcigpLmlzRW1wdHkoKSkKLSAgICAgICAgdHMgPDwgIiBbZW5kIG1h
cmtlcj0iIDw8IHN2Z1N0eWxlLT5lbmRNYXJrZXIoKSA8PCAiXSI7Ci0gICAgaWYgKCFzdmdTdHls
ZS0+ZmlsdGVyKCkuaXNFbXB0eSgpKQotICAgICAgICB0cyA8PCAiIFtmaWx0ZXI9IiA8PCBzdmdT
dHlsZS0+ZmlsdGVyKCkgPDwgIl0iOwotfQotI3VuZGVmIERJRkZFUlNfRlJPTV9QQVJFTlQKLSN1
bmRlZiBESUZGRVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UKLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBhdGggJm8p
Ci17Ci0gICAgdHMgPDwgIiAiIDw8IG8uYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG8ucmVs
YXRpdmVCQm94KCkpOwotICAgIAotICAgIHdyaXRlU3R5bGUodHMsIG8pOwotICAgIAotICAgIHRz
IDw8ICIgW2RhdGE9XCIiIDw8IG8ucGF0aCgpLmRlYnVnU3RyaW5nKCkgPDwgIlwiXSI7Ci0gICAg
Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZvKQotewotICAgIHRzIDw8ICIg
IiA8PCBvLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChvLnJlbGF0aXZlQkJveCgpKTsKLSAg
ICAKLSAgICB3cml0ZVN0eWxlKHRzLCBvKTsKLSAgICAKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIGdldFRhZ05hbWUodm9pZCAqbm9kZSkKLXsKLSAgICBTVkdT
dHlsZWRFbGVtZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG5vZGUp
OwotICAgIGlmIChlbGVtKQotICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW0tPm5vZGVOYW1lKCkp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotfQot
Ci12b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXIgJmNv
bnRhaW5lciwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICB0cyA8PCBjb250YWluZXIucmVuZGVyTmFtZSgpOwotICAgIAotICAgIGlmIChjb250YWluZXIu
ZWxlbWVudCgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGFnTmFtZSA9IGdldFRhZ05h
bWUoY29udGFpbmVyLmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICB0cyA8PCAiIHsiIDw8IHRhZ05hbWUgPDwgIn0iOwotICAgIH0KLSAgICAK
LSAgICB0cyA8PCBjb250YWluZXIgPDwgZW5kbDsKLSAgICAKLSAgICBmb3IgKFJlbmRlck9iamVj
dCAqY2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQg
KyAxKTsKLX0KLQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyUGF0aCAm
cGF0aCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0
cyA8PCBwYXRoLnJlbmRlck5hbWUoKTsKLSAgICAKLSAgICBpZiAocGF0aC5lbGVtZW50KCkpIHsK
LSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShwYXRoLmVsZW1l
bnQoKSk7Ci0gICAgICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0cyA8
PCAiIHsiIDw8IHRhZ05hbWUgPDwgIn0iOwotICAgIH0KLSAgICAKLSAgICB0cyA8PCBwYXRoIDw8
IGVuZGw7Ci19Ci0KLXZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIE5v
ZGUgKnBhcmVudCkKLXsKLSAgICBBU1NFUlQocGFyZW50KTsKLSAgICBOb2RlICpub2RlID0gcGFy
ZW50OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdFbGVtZW50ICpzdmdFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5
bGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50
ICpzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0g
ICAgICAgIFJlZlB0cjxTVkdSZXNvdXJjZT4gcmVzb3VyY2Uoc3R5bGVkLT5jYW52YXNSZXNvdXJj
ZSgpKTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBlbGVtZW50SWQgPSBzdmdFbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAg
ICAgaWYgKHJlc291cmNlLT5pc1BhaW50U2VydmVyKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXI+IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9j
YXN0PEtSZW5kZXJpbmdQYWludFNlcnZlcj4ocmVzb3VyY2UpOwotICAgICAgICAgICAgdHMgPDwg
IktSZW5kZXJpbmdQYWludFNlcnZlciB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIgIiA8PCAq
cGFpbnRTZXJ2ZXIgPDwgIn0iIDw8IGVuZGw7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dHMgPDwgIktDYW52YXNSZXNvdXJjZSB7aWQ9XCIiIDw8IGVsZW1lbnRJZCA8PCAiXCIgIiA8PCAq
cmVzb3VyY2UgPDwgIn0iIDw8IGVuZGw7Ci0gICAgfSB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKHBhcmVudCkpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaAkocmV2aXNpb24gMTc0ODApCisrKyBX
ZWJDb3JlL2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCi0jaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRW
YWx1ZUxpc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEZsb2F0UG9pbnQ7Ci0gICAgY2xh
c3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBJbnRQb2ludDsK
LSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEtDQ2xpcERhdGE7Ci0gICAgY2xhc3MgS0NQ
YXRoRGF0YTsKLSAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFJlbmRlclBhdGg7Ci0gICAgY2xh
c3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotCi0vLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBS
ZW5kZXJUcmVlQXNUZXh0IGNvZGUKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR0NvbnRhaW5lciYsIGludCBpbmRlbnQgPSAwKTsKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclBhdGgmLCBpbnQgaW5kZW50ID0gMCk7Ci12b2lkIHdyaXRlUmVuZGVyUmVz
b3VyY2VzKFRleHRTdHJlYW0mLCBOb2RlKiBwYXJlbnQpOwotCi0vLyBoZWxwZXIgb3BlcmF0b3Jz
IGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUu
IAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0
Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQmKTsKLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOwotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLS8v
IGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRo
ZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQot
Ly8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQg
bWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4KLSAgICAK
LXRlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PEl0ZW0qPiYgbCkKLXsKLSAgICB0cyA8
PCAiWyI7Ci0gICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj46OkNvbnN0SXRl
cmF0b3IgaXQgPSBsLmJlZ2luKCk7Ci0gICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJ
dGVtKj46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwuZW5kKCk7Ci0gICAgd2hpbGUgKGl0ICE9IGl0
X2UpIHsKLSAgICAgICAgdHMgPDwgKigqaXQpOwotICAgICAgICArK2l0OwotICAgICAgICBpZiAo
aXQgIT0gaXRfZSkgdHMgPDwgIiwgIjsKLSAgICB9Ci0gICAgdHMgPDwgIl0iOwotICAgIAotICAg
IHJldHVybiB0czsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbT4m
IGwpCi17Ci0gICAgdHMgPDwgIlsiOwotICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
SXRlbT46OkNvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7Ci0gICAgdHlwZW5hbWUgRGVwcmVj
YXRlZFZhbHVlTGlzdDxJdGVtPjo6Q29uc3RJdGVyYXRvciBpdF9lID0gbC5lbmQoKTsKLSAgICB3
aGlsZSAoaXQgIT0gaXRfZSkgewotICAgICAgICB0cyA8PCAqaXQ7Ci0gICAgICAgICsraXQ7Ci0g
ICAgICAgIGlmIChpdCAhPSBpdF9lKSB0cyA8PCAiLCAiOwotICAgIH0KLSAgICB0cyA8PCAiXSI7
Ci0gICAgCi0gICAgcmV0dXJuIHRzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2
aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1
ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIktDYW52YXNUcmVlRGVidWcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHJldmlzaW9uIDE3NDgwKQorKysgV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdSZXNvdXJjZUltYWdlLmgiCi0jaW5jbHVkZSAi
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgorI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5j
bHVkZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWQuY3BwCShyZXZpc2lvbiAxNzQ4MCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEs
MTIgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCiAj
aW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCIKKworI2luY2x1ZGUgIlNWR1Jl
bmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5jbHVkZSAiS0Nh
bnZhc1RyZWVEZWJ1Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAko
cmV2aXNpb24gMTc0ODApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNv
dXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKKyNpbmNsdWRl
ICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxNzQ4
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZkZWYg
U1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJLQ2FudmFzVHJlZURlYnVnLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2Rl
Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19TVVBQT1JUCisj
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VD
bGlwcGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdD
b250YWluZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCisjaW5jbHVkZSAiS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCIK
KyNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRF
bGVtZW50LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8q
KiBjbGFzcyArIGlvbWFuaXAgdG8gaGVscCBzdHJlYW1pbmcgbGlzdCBzZXBhcmF0b3JzLCBpLmUu
ICIsICIgaW4gc3RyaW5nICJhLCBiLCBjLCBkIgorICogQ2FuIGJlIHVzZWQgaW4gY2FzZXMgd2hl
cmUgeW91IGRvbid0IGtub3cgd2hpY2ggaXRlbSBpbiB0aGUgbGlzdCBpcyB0aGUgZmlyc3QKKyAq
IG9uZSB0byBiZSBwcmludGVkLCBidXQgc3RpbGwgd2FudCB0byBhdm9pZCBzdHJpbmdzIGxpa2Ug
IiwgYiwgYyIsIHdvcmtzIGxpa2UgCisgKiBEZXByZWNhdGVkU3RyaW5nTGlzdDo6am9pbiBmb3Ig
c3RyZWFtcworICovCitjbGFzcyBUZXh0U3RyZWFtU2VwYXJhdG9yCit7CitwdWJsaWM6CisgICAg
VGV4dFN0cmVhbVNlcGFyYXRvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKSA6IG1fc2VwYXJh
dG9yKHMpLCBtX25lZWRUb1NlcGFyYXRlKGZhbHNlKSB7fQorcHJpdmF0ZToKKyAgICBmcmllbmQg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4dFN0cmVhbVNlcGFyYXRv
ciAmc2VwKTsKKyAgICAKK3ByaXZhdGU6CisgICAgRGVwcmVjYXRlZFN0cmluZyBtX3NlcGFyYXRv
cjsKKyAgICBib29sIG1fbmVlZFRvU2VwYXJhdGU7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJhdG9yICZzZXApCit7CisgICAgaWYg
KHNlcC5tX25lZWRUb1NlcGFyYXRlKQorICAgICAgICB0cyA8PCBzZXAubV9zZXBhcmF0b3I7Cisg
ICAgZWxzZSAKKyAgICAgICAgc2VwLm1fbmVlZFRvU2VwYXJhdGUgPSB0cnVlOworICAgIHJldHVy
biB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
SW50UG9pbnQgJnApCit7CisgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwg
cC55KCkgPDwgIikiOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIHJldHVybiB0cyA8PCAiYXQgKCIgPDwgci54KCkg
PDwgIiwiIDw8IHIueSgpIDw8ICIpIHNpemUgIiA8PCByLndpZHRoKCkgPDwgIngiIDw8IHIuaGVp
Z2h0KCk7Cit9CisKK2Jvb2wgaGFzRnJhY3Rpb25zKGRvdWJsZSB2YWwpCit7CisgICAgZG91Ymxl
IGVwc2lsb24gPSAwLjAwMDE7CisgICAgaW50IGl2YWwgPSBpbnQodmFsKTsKKyAgICBkb3VibGUg
ZHZhbCA9IGRvdWJsZShpdmFsKTsgICAgCisgICAgcmV0dXJuIChmYWJzKHZhbC1kdmFsKSA+IGVw
c2lsb24pOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGbG9hdFJlY3QgJnIpCit7CisgICAgdHMgPDwgImF0ICgiOyAKKyAgICBpZiAoaGFzRnJhY3Rp
b25zKHIueCgpKSkgCisgICAgICAgIHRzIDw8IHIueCgpOworICAgIGVsc2UgCisgICAgICAgIHRz
IDw8IGludChyLngoKSk7CisgICAgdHMgPDwgIiwiOworICAgIGlmIChoYXNGcmFjdGlvbnMoci55
KCkpKSAKKyAgICAgICAgdHMgPDwgci55KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50
KHIueSgpKTsKKyAgICB0cyA8PCAiKSBzaXplICI7CisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLndp
ZHRoKCkpKSAKKyAgICAgICAgdHMgPDwgci53aWR0aCgpOyAKKyAgICBlbHNlIAorICAgICAgICB0
cyA8PCBpbnQoci53aWR0aCgpKTsgCisgICAgdHMgPDwgIngiOworICAgIGlmIChoYXNGcmFjdGlv
bnMoci5oZWlnaHQoKSkpIAorICAgICAgICB0cyA8PCByLmhlaWdodCgpOworICAgIGVsc2UgCisg
ICAgICAgIHRzIDw8IGludChyLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQgJnApCit7
CisgICAgdHMgPDwgIigiOyAgICAKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHAueCgpKSkKKyAgICAg
ICAgdHMgPDwgcC54KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHAueCgpKTsgICAg
CisgICAgdHMgPDwgIiwiOworICAgIGlmIChoYXNGcmFjdGlvbnMocC55KCkpKSAKKyAgICAgICAg
dHMgPDwgcC55KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHAueSgpKTsgICAgCisg
ICAgcmV0dXJuIHRzIDw8ICIpIjsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmxvYXRTaXplICZzKQoreyAgIAorICAgIHRzIDw8ICJ3aWR0aD0iOwor
ICAgIGlmIChoYXNGcmFjdGlvbnMocy53aWR0aCgpKSkKKyAgICAgICAgdHMgPDwgcy53aWR0aCgp
OworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgaW50KHMud2lkdGgoKSk7CisgICAgdHMgPDwgIiBo
ZWlnaHQ9IjsKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHMuaGVpZ2h0KCkpKSAKKyAgICAgICAgdHMg
PDwgcy5oZWlnaHQoKTsKKyAgICBlbHNlCisgICAgICAgIHRzIDw8IGludChzLmhlaWdodCgpKTsK
KyAgICAgcmV0dXJuIHRzOworfQorCisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSAmbSkKK3sKKyAgICBpZiAobS5pc0lkZW50aXR5
KCkpCisgICAgICAgIHRzIDw8ICJpZGVudGl0eSI7CisgICAgZWxzZSAKKyAgICB7CisgICAgICAg
IHRzIDw8ICJ7bT0oKCIgPDwgbS5tMTEoKSA8PCAiLCIgPDwgbS5tMTIoKSA8PCAiKSgiIDw8IG0u
bTIxKCkgPDwgIiwiIDw8IG0ubTIyKCkgPDwgIikpIjsKKyAgICAgICAgdHMgPDwgIiB0PSgiIDw8
IG0uZHgoKSA8PCAiLCIgPDwgbS5keSgpIDw8ICIpfSI7CisgICAgfQorICAgIHJldHVybiB0czsK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3Ig
JmMpCit7CisgICAgcmV0dXJuIHRzIDw8IGMubmFtZSgpOworfQorCitzdGF0aWMgdm9pZCB3cml0
ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0g
MDsgaSAhPSBpbmRlbnQ7ICsraSkgeworICAgICAgICB0cyA8PCAiICAiOworICAgIH0KK30KKwor
Ly9GSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gS1JlbmRlcmluZ1N0eWxlLmNwcAorc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEtDRGFzaEFycmF5ICZh
KQoreworICAgIHRzIDw8ICJ7IjsKKyAgICBLQ0Rhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gYS5lbmQoKTsKKyAgICBmb3IgKEtDRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IGEu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdCAhPSBhLmJlZ2luKCkp
CisgICAgICAgICAgICB0cyA8PCAiLCAiOworICAgICAgICB0cyA8PCAqaXQ7CisgICAgfQorICAg
IHRzIDw8ICJ9IjsKKyAgICByZXR1cm4gdHM7Cit9CisKKy8vRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBMaW5lQ2FwIHN0eWxlKQoreworICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAg
ICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHRzIDw8ICJCVVRUIjsgYnJlYWs7CisgICAgY2FzZSBS
b3VuZENhcDoKKyAgICAgICAgdHMgPDwgIlJPVU5EIjsgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVD
YXA6CisgICAgICAgIHRzIDw8ICJTUVVBUkUiOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRz
OworfQorCisvL0ZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gc3R5
bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgICAg
ICB0cyA8PCAiTUlURVIiOyBicmVhazsKKyAgICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgdHMg
PDwgIlJPVU5EIjsgYnJlYWs7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIHRzIDw8ICJC
RVZFTCI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKKyNkZWZpbmUgRElGRkVS
U19GUk9NX1BBUkVOVChwYXRoKSAoIXBhcmVudFN0eWxlIHx8IChwYXJlbnRTdHlsZS0+cGF0aCAh
PSBjaGlsZFN0eWxlLT5wYXRoKSkKKy8vIGF2b2lkcyB0ZXN0aW5nIHBhdGggaWYgcHJlZCBpcyBm
YWxzZS4gVGhpcyBpcyB1c2VkIHdpdGggdGVzdHMgdGhhdCBoYXZlIHNpZGUtZWZmZWN0cworLy8g
Zm9yIHRoZSBwYXJlbnQgb2JqZWN0CisjZGVmaW5lIERJRkZFUlNfRlJPTV9QQVJFTlRfQVZPSURf
VEVTVF9JRl9GQUxTRShwcmVkLCBwYXRoKSAoIXBhcmVudFN0eWxlIHx8ICgoIXBhcmVudFN0eWxl
LT5wcmVkKSB8fCAocGFyZW50U3R5bGUtPnBhdGggIT0gY2hpbGRTdHlsZS0+cGF0aCkpKQorCitz
dGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qg
Jm9iamVjdCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Quc3R5bGUo
KTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUo
KTsKKyAgICAKKyAgICBpZiAoIW9iamVjdC5sb2NhbFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkK
KyAgICAgICAgdHMgPDwgIiBbdHJhbnNmb3JtPSIgPDwgb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkg
PDwgIl0iOworICAgIGlmIChzdmdTdHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSAhPSBTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgIHRzIDw8ICIgW2ltYWdlIHJl
bmRlcmluZz0iIDw8IHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpIDw8ICJdIjsKKyAgICBpZiAo
c3R5bGUtPm9wYWNpdHkoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSkKKyAgICAg
ICAgdHMgPDwgIiBbb3BhY2l0eT0iIDw8IHN0eWxlLT5vcGFjaXR5KCkgPDwgIl0iOworICAgIGlm
IChvYmplY3QuaXNSZW5kZXJQYXRoKCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyUGF0aCYgcGF0
aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclBhdGgmPihvYmplY3QpOworICAgICAgICBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5
OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOworICAgICAgICBpZiAoc3Ryb2tlUGFp
bnRTZXJ2ZXIpIHsKKyAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOworICAg
ICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOworICAgICAgICAgICAgaWYgKHN0cm9rZVBhaW50
U2VydmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJva2VQYWludFNlcnZlci0+aWRJblJl
Z2lzdHJ5KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbaWQ9
XCIiPDwgc3Ryb2tlUGFpbnRTZXJ2ZXItPmlkSW5SZWdpc3RyeSgpIDw8ICJcIl0iOyAKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgKnN0cm9rZVBh
aW50U2VydmVyOworICAgICAgICAgICAgfSAKKworICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZz
ZXQgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRoLCBzdmdT
dHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOworICAgICAgICAgICAgY29uc3QgS0NEYXNo
QXJyYXkmIGRhc2hBcnJheSA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRl
cmluZ1N0eWxlKHN0eWxlKTsKKyAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkdQ
YWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJv
a2VXaWR0aCgpLCAxLjApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3ZnU3R5bGUt
PnN0cm9rZU9wYWNpdHkoKSAhPSAxLjBmKQorICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltv
cGFjaXR5PSIgPDwgc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSA8PCAiXSI7CisgICAgICAgICAg
ICBpZiAoc3Ryb2tlV2lkdGggIT0gMS4wZikKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJb
c3Ryb2tlIHdpZHRoPSIgPDwgc3Ryb2tlV2lkdGggPDwgIl0iOworICAgICAgICAgICAgaWYgKHN2
Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkgIT0gNCkKKyAgICAgICAgICAgICAgICB0cyA8PCBz
IDw8ICJbbWl0ZXIgbGltaXQ9IiA8PCBzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpIDw8ICJd
IjsKKyAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+Y2FwU3R5bGUoKSAhPSAwKQorICAgICAgICAg
ICAgICAgIHRzIDw8IHMgPDwgIltsaW5lIGNhcD0iIDw8IHN2Z1N0eWxlLT5jYXBTdHlsZSgpIDw8
ICJdIjsKKyAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+am9pblN0eWxlKCkgIT0gMCkKKyAgICAg
ICAgICAgICAgICB0cyA8PCBzIDw8ICJbbGluZSBqb2luPSIgPDwgc3ZnU3R5bGUtPmpvaW5TdHls
ZSgpIDw8ICJdIjsKKyAgICAgICAgICAgIGlmIChkYXNoT2Zmc2V0ICE9IDAuMGYpCisgICAgICAg
ICAgICAgICAgdHMgPDwgcyA8PCAiW2Rhc2ggb2Zmc2V0PSIgPDwgZGFzaE9mZnNldCA8PCAiXSI7
CisgICAgICAgICAgICBpZiAoIWRhc2hBcnJheS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
dHMgPDwgcyA8PCAiW2Rhc2ggYXJyYXk9IiA8PCBkYXNoQXJyYXkgPDwgIl0iOyAgICAgICAgCisg
ICAgICAgICAgICB0cyA8PCAifV0iOworICAgICAgICB9CisgICAgICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlciAqZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRT
ZXJ2ZXIoc3R5bGUsICZwYXRoKTsKKyAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgeworICAg
ICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CisgICAgICAgICAgICB0cyA8PCAi
IFtmaWxsPXsiOworICAgICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgeworICAgICAgICAg
ICAgICAgIGlmICghZmlsbFBhaW50U2VydmVyLT5pZEluUmVnaXN0cnkoKS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltpZD1cIiIgPDwgZmlsbFBhaW50U2VydmVy
LT5pZEluUmVnaXN0cnkoKSA8PCAiXCJdIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHRzIDw8IHMgPDwgKmZpbGxQYWludFNlcnZlcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3Bh
Y2l0eSgpICE9IDEuMGYpCisgICAgICAgICAgICAgICAgdHMgPDwgcyA8PCAiW29wYWNpdHk9IiA8
PCBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9wYWNpdHkoKSA8PCAiXSI7CisgICAgICAgICAgICBp
ZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgIT0gUlVMRV9OT05aRVJPKQorICAgICAg
ICAgICAgICAgIHRzIDw8IHMgPDwgIltmaWxsIHJ1bGU9IiA8PCBzdHlsZS0+c3ZnU3R5bGUoKS0+
ZmlsbFJ1bGUoKSA8PCAiXSI7CisgICAgICAgICAgICB0cyA8PCAifV0iOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghc3ZnU3R5bGUtPmNsaXBQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICB0
cyA8PCAiIFtjbGlwIHBhdGg9XCIiIDw8IHN2Z1N0eWxlLT5jbGlwUGF0aCgpIDw8ICJcIl0iOwor
ICAgIGlmICghc3ZnU3R5bGUtPnN0YXJ0TWFya2VyKCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8
PCAiIFtzdGFydCBtYXJrZXI9IiA8PCBzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKSA8PCAiXSI7Cisg
ICAgaWYgKCFzdmdTdHlsZS0+bWlkTWFya2VyKCkuaXNFbXB0eSgpKQorICAgICAgICB0cyA8PCAi
IFttaWRkbGUgbWFya2VyPSIgPDwgc3ZnU3R5bGUtPm1pZE1hcmtlcigpIDw8ICJdIjsKKyAgICBp
ZiAoIXN2Z1N0eWxlLT5lbmRNYXJrZXIoKS5pc0VtcHR5KCkpCisgICAgICAgIHRzIDw8ICIgW2Vu
ZCBtYXJrZXI9IiA8PCBzdmdTdHlsZS0+ZW5kTWFya2VyKCkgPDwgIl0iOworICAgIGlmICghc3Zn
U3R5bGUtPmZpbHRlcigpLmlzRW1wdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbZmlsdGVyPSIgPDwg
c3ZnU3R5bGUtPmZpbHRlcigpIDw8ICJdIjsKK30KKyN1bmRlZiBESUZGRVJTX0ZST01fUEFSRU5U
CisjdW5kZWYgRElGRkVSU19GUk9NX1BBUkVOVF9BVk9JRF9URVNUX0lGX0ZBTFNFCisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJQYXRo
ICZvKQoreworICAgIHRzIDw8ICIgIiA8PCBvLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChv
LnJlbGF0aXZlQkJveCgpKTsKKyAgICAKKyAgICB3cml0ZVN0eWxlKHRzLCBvKTsKKyAgICAKKyAg
ICB0cyA8PCAiIFtkYXRhPVwiIiA8PCBvLnBhdGgoKS5kZWJ1Z1N0cmluZygpIDw8ICJcIl0iOwor
ICAgIAorICAgIHJldHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciAmbykKK3sKKyAgICB0cyA8
PCAiICIgPDwgby5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoby5yZWxhdGl2ZUJCb3goKSk7
CisgICAgCisgICAgd3JpdGVTdHlsZSh0cywgbyk7CisgICAgCisgICAgcmV0dXJuIHRzOworfQor
CitzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBnZXRUYWdOYW1lKHZvaWQgKm5vZGUpCit7CisgICAg
U1ZHU3R5bGVkRWxlbWVudCAqZWxlbSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihu
b2RlKTsKKyAgICBpZiAoZWxlbSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtLT5ub2RlTmFt
ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsK
K30KKwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVy
ICZjb250YWluZXIsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
CisgICAgdHMgPDwgY29udGFpbmVyLnJlbmRlck5hbWUoKTsKKyAgICAKKyAgICBpZiAoY29udGFp
bmVyLmVsZW1lbnQoKSkgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRhZ05hbWUgPSBnZXRU
YWdOYW1lKGNvbnRhaW5lci5lbGVtZW50KCkpOworICAgICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0
eSgpKQorICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8ICJ9IjsKKyAgICB9Cisg
ICAgCisgICAgdHMgPDwgY29udGFpbmVyIDw8IGVuZGw7CisgICAgCisgICAgZm9yIChSZW5kZXJP
YmplY3QgKmNoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gTlVMTDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5k
ZW50ICsgMSk7Cit9CisKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBh
dGggJnBhdGgsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Cisg
ICAgdHMgPDwgcGF0aC5yZW5kZXJOYW1lKCk7CisgICAgCisgICAgaWYgKHBhdGguZWxlbWVudCgp
KSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGFnTmFtZSA9IGdldFRhZ05hbWUocGF0aC5l
bGVtZW50KCkpOworICAgICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
dHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8ICJ9IjsKKyAgICB9CisgICAgCisgICAgdHMgPDwgcGF0
aCA8PCBlbmRsOworfQorCit2b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRz
LCBOb2RlICpwYXJlbnQpCit7CisgICAgQVNTRVJUKHBhcmVudCk7CisgICAgTm9kZSAqbm9kZSA9
IHBhcmVudDsKKyAgICBkbyB7CisgICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU1ZHRWxlbWVudCAqc3ZnRWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFzdmdFbGVtZW50LT5p
c1N0eWxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1ZHU3R5bGVkRWxl
bWVudCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQp
OworICAgICAgICBSZWZQdHI8U1ZHUmVzb3VyY2U+IHJlc291cmNlKHN0eWxlZC0+Y2FudmFzUmVz
b3VyY2UoKSk7CisgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVu
dC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Cisg
ICAgICAgIGlmIChyZXNvdXJjZS0+aXNQYWludFNlcnZlcigpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8S1JlbmRlcmluZ1BhaW50U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50
ZXJfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+KHJlc291cmNlKTsKKyAgICAgICAgICAgIHRz
IDw8ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIg
PDwgKnBhaW50U2VydmVyIDw8ICJ9IiA8PCBlbmRsOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHRzIDw8ICJLQ2FudmFzUmVzb3VyY2Uge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIg
PDwgKnJlc291cmNlIDw8ICJ9IiA8PCBlbmRsOworICAgIH0gd2hpbGUgKChub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZShwYXJlbnQpKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRl
ICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBGbG9hdFBv
aW50OworICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xh
c3MgSW50UG9pbnQ7CisgICAgY2xhc3MgSW50UmVjdDsKKyAgICBjbGFzcyBLQ0NsaXBEYXRhOwor
ICAgIGNsYXNzIEtDUGF0aERhdGE7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBSZW5kZXJQ
YXRoOworICAgIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKKworLy8gZnVuY3Rpb25zIHVzZWQg
YnkgdGhlIG1haW4gUmVuZGVyVHJlZUFzVGV4dCBjb2RlCit2b2lkIHdyaXRlKFRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImLCBpbnQgaW5kZW50ID0gMCk7Cit2b2lkIHdyaXRl
KFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJQYXRoJiwgaW50IGluZGVudCA9IDApOwordm9pZCB3
cml0ZVJlbmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiwgTm9kZSogcGFyZW50KTsKKworLy8gaGVs
cGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhl
IHJlbmRlciB0cmVlLiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwg
Y29uc3QgSW50UmVjdCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgQ29sb3ImKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IElu
dFBvaW50Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9h
dFNpemUmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0
UmVjdCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRQ
b2ludCYpOworCisvLyBoZWxwZXIgb3BlcmF0b3JzIHNwZWNpZmljIHRvIGR1bXBpbmcgdGhlIHJl
bmRlciB0cmVlLiB0aGVzZSBhcmUgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUg
cmVuZGVyIHRyZWUKKy8vIHRoZXNlIGNvdWxkIGJlIGRlZmluZWQgaW4gc2VwYXJhdGUgbmFtZXNw
YWNlIHRvIGF2b2lkIG1hdGNoaW5nIHRoZXNlIGdlbmVyaWMgc2lnbmF0dXJlcyB1bmludGVudGlv
bmFsbHkuCisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgorVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj4mIGwp
Cit7CisgICAgdHMgPDwgIlsiOworICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRl
bSo+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOworICAgIHR5cGVuYW1lIERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8SXRlbSo+OjpDb25zdEl0ZXJhdG9yIGl0X2UgPSBsLmVuZCgpOworICAgIHdo
aWxlIChpdCAhPSBpdF9lKSB7CisgICAgICAgIHRzIDw8ICooKml0KTsKKyAgICAgICAgKytpdDsK
KyAgICAgICAgaWYgKGl0ICE9IGl0X2UpIHRzIDw8ICIsICI7CisgICAgfQorICAgIHRzIDw8ICJd
IjsKKyAgICAKKyAgICByZXR1cm4gdHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+CitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEZXByZWNhdGVkVmFs
dWVMaXN0PEl0ZW0+JiBsKQoreworICAgIHRzIDw8ICJbIjsKKyAgICB0eXBlbmFtZSBEZXByZWNh
dGVkVmFsdWVMaXN0PEl0ZW0+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOworICAgIHR5
cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbT46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwu
ZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9IGl0X2UpIHsKKyAgICAgICAgdHMgPDwgKml0OworICAg
ICAgICArK2l0OworICAgICAgICBpZiAoaXQgIT0gaXRfZSkgdHMgPDwgIiwgIjsKKyAgICB9Cisg
ICAgdHMgPDwgIl0iOworICAgIAorICAgIHJldHVybiB0czsKK30KKworfQo=
</data>
<flag name="review"
          id="3913"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>